[Updated] SpaceW - Procedural Planet Renderer

Проекты в стадии разработки.

[Updated] SpaceW - Procedural Planet Renderer

Сообщение zameran 08 апр 2016, 23:16

Снова здравствуйте. Не многие на этом форуме узнают меня, но я вернулся.

В свободное время работаю над генератором процедурной вселенной. Конечно же в одиночку.

Целью проекта является полноценный процедурный генератор случайной планетарной системы, по которой можно будет полетать на кораблике, с посадками на планеты...
А если копнуть глубже - клон Space Engine - но лучше не копать.
Вообще я отбитый на голову и делаю свой Star Citizen или ED, впрочем, назвать можно по всякому.
И всё же это просто испытательный полигон.
Для тех, кто хочет опробывать билд - на гитхабе есть ссылка на канал в дискорде, где бот постит свежую информацию о сборках.

Features
  • Shader based noise engine.
    - Three types of generation sequence.
    - All types of noise. [Fbm, ridged, billow and etc]
    - All types of planet bodies types. [Terra, star, asteroid, moon, selena and etc]
    - Compute Shader core.
  • Planet
    - QuadTree based LOD.
    - Occlusion culling.
    - Simple planet surface coloring.
    - Realtime generation.
    - All types of planetar bodies are supported.
    - Rendering with Material Property Block.
  • Simple cloudsphere.
  • Procedural planetary rings.
  • Precomputed Atmospheric Scattering.
  • Shading/Lighting
    - Realtime atmospheric scattering precomputation.
    - Up to four stars support.
    - Eclipses support.
    - Procedural rings shadows support.
    - Planetshine support.
    - Over 512 shader parameters to tweak.
  • Core
    - Assembly based mods. [Aka KSP]

Support
  • Constant
    - DirectX11
  • WIP or untested
    - OpenGL 4.3 and higher.
    - Metal

Videos
Demo - 001. [Old core, old code, outdated]
Скрытый текст:


Screenshots
Скрытый текст:


Github repository[Hell is here]
Скрытый текст:


Новости (From 14.05.2016)
Скрытый текст:
May 2016
- Тотальный рефактор.
- Орбитальная механика планет и космических кораблей. Интегрировано с физикой Unity.
- Всяческие багфиксы узких мест в шейдерах, скриптах, ядре.
- Поддержка нескольких (пока что двух) светил атмосферой.
- Поддержка видеокарт на две серии ниже GTX430. Обстоятельства.
- Чуточку многопоточности.
- Весь дебаг GUI теперь использует скин Unity Pro. (Не ссылку на него. Я ручками собрал. Дюже он мне нравится.)
- Целая тонна API для моддинга.
- И ещё куча-кучная всяких всячностей-няшностей.
Middle May 2016
- Орбитальная механика. Рендер орбит, манёвров.
- UI главного меню и панели аддонов.
- Генерация коллайдеров из данных с видеокарты. В реальтайме.
- Тени от других планет - затмения. На поверхности и на атмосфере.
- Солнечные линзы.
- Увеличение количества октав для шумов с увеличением уровня детализации. (50% - 75% - 100%).
- Атмосфера теперь "базируется" на одном из нескольких прессетов. Забиты прессеты атмосфер солнечной системы.
- Уменьшение использования видеопамяти "аж на целых" 67 MB.
- Магическая формула для получения координат центра квада выведена. Ранее используемые данные исправлены.
- Фикс изрядно надоевшего RenderTexture.active бага.
- Поддержка четырёх светил.
- Пробую Logariphmic Z-Buffer. Пока успешно.
Patch for prev. update
- Фиксы отображения атмосфер, затмений.
- Фиксы в ядре LOD.
- Фиксы в ядре в целом.
- Более глубокая абстракция классов планеты и квада.
- Фикс использования видеопамяти в 10 раз. Было 2 гб на планету - стало 200 мб при стандартных настройках дальности LOD.
- Фикс установки множества не существующих переменных в шейдере. Не особо понимаю, проверяет ли Material.Set(Type)(...) наличие данной переменной в шейдере.
- Подготовка почвы для создания "очереди на отрисовку". Оно не совсем является тем, чем зовётся - вкратце, регулировка RenderQueue у шейдера.
- Полноценные газовые гиганты готовы.
- Подготовка почвы для маштабирования планет, атмосфер и всего - всего.
- Оптимизация NoiseEngine.
- Добавлен новый режим работы двух ключевых функций NoiseEngine, на которых строится всё остальное - Gradient и Permutation из текстуры.
- Подготовка к полному переводу NoiseEngine на вышеуказанный метод генерации шума.
- Оптимизация работы атмосферы с несколькими источниками света.
- И другие шалости, описывать которые просто не хватит времени.
June 2016
- Широкомасштабная оптимизация. Огромный прирост производительности в сравнении с майской версией.
- Все шейдерные параметры необходимые для атмосферного рассеивания непосредственно для запчастей планеты упакованы в MaterialPropertyBlock и обновляются 1 раз за Update планеты, вместо повсеместной упаковки всех параметров перед рисованием запчасти в её же Update.
- Структурированы шейдеры и их использование.
- Шейдер самой атмосферы переписан с нуля, что дало большую читабельность и расширяемость. Даже некую модульность что ли. До шейдера планетарных запчастей ещё не добрался.
- Фикс неправильного размера буффера при создании.
- Фикс - удаление неиспользуемых переменных в структурах буффера, что даже дало снижение использования VM.
- Фикс системы LOD.
- Фикс куллинга. Но он всё ещё желает лучшего...
- Положено начало Known Bodies Generation System, при помощи которой вскоре появятся знакомые (известные) нам (человечеству) планеты со всей их красотой.
- Более обширная модульность атмосферы как отдельной запчасти.
- Найдена альтернатива магической формулы центра квада для LOD. Пока не испытывалась.
- Весь рендеринг теперь происходит посредством Graphics.DrawMesh в Update.
- SetPass везде удалены.
- Множество нововведений в шейдерах для UV магии.
- Рендеринг проволочного каркаса из коробки.
- GUI.
- И гора других вкусностей.
Middle June 2016
- Рефактор. Чуточку.
- Условия для деления на уровни LOD изменены, и теперь имеют два режима:
- От ближайшего угла по сферезированным координатам угла квада без учёта высоты в этой точке.
- От ближайшего угла по верхней плоскости AABB.
- Улучшена отзывчивость LOD системы.
- Улучшена упаковка multi_compile переменных в шейдеры.
- Улучшено поведение и отображение линз.
- Уменьшено количество генерируемого мусора за 1 кадр.
- Все ожидания кадров, ожидание некоторого времени и тп. в корутинах заменены на использование кешированных.
- Работа над атмосферами.
- Рассеянный свет/отблеск от соседней планеты на атмосфере, если таковая имеется. (Ещё в разработке, но уже рядом).
- Буфферы для квада устанавливаются только 1 раз - после генерации.
- Отдельный класс для AABB квада, содержащий вершины "коробки".
- Модификатор силы затмений на поверхности вынесен. Теперь это шейдерный параметр.
- В связи с переходом на использование MaterialPropertyBlock, теперь когда фокус переходит на окно с приложением планета перестраивается. Возможно это будет решено в ближайшее время.
- Расширение API планет и квадов.
- Фикс магической формулы для LOD. Она давала неверные результаты, если радиус планеты не целое число.
- И другие маленькие фиксы.
- И переход на версию движка 5.3.5f1.
End of June 2016
- Два основных шейдера - Атмосферы и планеты упакованы в ShaderCollection'ы и предзагружаются при старте. Это сделано во избежание CPU спайков при переупаковке keywords для шейдера.
- Кастомные линзы поправлены.
- Каждый квад теперь сожержит в себе матрицу вращения от нормали квада к центру планеты.
- Оптимизация основных шейдеров.
- Реалтайм переключение между типами куллинга.
- PatchedSphere модуль для облаков и скорее всего будет использоваться для большого кол-ва процедурных астероидов.
- Фикс прыгания камеры у поверхности планеты.
- Logariphmic ZBuffer оптимизирован. Вынесен в отдельный cginc. Пока не используется. Но вот вот будет.
- PlanetShine!
- Комплексные числа, вектора, трансформ для больших расстояний. Разработана стратегия для масштабирования. Спасибо @blackbone.
- Добавлено очень много Gizmos дебага, который вскоре перекочует на GL.
- Так же исправлено дефайн ветвление во всех основных шейдерах. Теперь используется только то, что должно использоватся при определённых keywords.
- Кое где рефактор по коду.
- Без нового апи никуда.
- А так же несколько новых режимов HDR. Пока не переключаются в рантайме.
- Протестирована генерация коллайдеров. Ну что сказать...
Middle of Ceptember 2016
- Миграция на последнюю версию движка.
- Тонна рефакторинга шейдеров и кода.
- Процедурные кольца с поддержкой теней и нескольких светил.
- Тени от колец.
- Ну и всякие там фиксы-шмиксы.
November - December 2016
- Несколько миграций на новые версии движка.
- Ускорение просчёта разного хлама.
- Тени, затмения переписаны. Работают теперь по НАСТОЯЩЕЙ математике.
- Тотальная чистка от мусора, некоторые вещи кардинально пересмотрены. Взгляды на жизнь тоже. Это ведь важно?
- Генерация сферического поля звёзд. Проецирование. Красивенько так...
- Вся шейдерная магия теперь работает без артефактов, когда швыряешь планеты по координатной сетке.
- Детализация колец, посредством шейдеров. Процедурно. Ближе - детальнее. Предела нет.
- 2D функции шума. Быстрого. Очень. В дальнейшем пригодятся. Что бы не тягать 3D везде, где попало.
- Шейдеры теперь грамотно подключаются между собой.
- Ускорение работы старого Frustm Occlusion Culling собственного написания. Заложен новый, более быстрый способ. Пока не прикручен.
- Больше прессетов атмосфер! MOAR!
- И куча всякого по мелочам.
- OpenGL 4.5/DX11. Ну вы понимаете...
December - February 2016
- Шаманство с калькуляцией PatchCubeCenter для LOD'ов заменено адекватной формулой. Больше никакой магии! Почти...
- Генерация мусора снижена почти в 75 раз. Дичайший буст.
- Преломлённый цвет для солнечных линз. [Когда луч от камеры к солнцу проходит через атмосферу]
- Кеширование (почти адаптивное) компонентов. Некоторые объекты требуют ссылок на другие.
- Оптимизация линз.
- Оптимизация шейдерного ядра.
- Оптимизация старого ядра. [см ниже]
- Старое ядро подогнано под новую абстракцию.
- Фикс шумов в шейдерном ядре.
- Рефактор. А куда без него?
- Абсолютно новое ядро. Ещё внедряется. Новое ядро с кешированием, рабочими нормалями и хорошей архитектурой. [Да - да, я отрефакторил ядро Proland, потому что могу.]
- Множество фиксов для увеличения стабильности.
- Терра, газовые гиганты, астероиды, циклоны, кратеры и многое другое переделано и работает как нужно. [Кроме газовых гигантов, но это дело времени.]
- И многое другое.


Этот топик постоянно обновляется.
Если показалось, что тема или проект заброшены - это не так.
Ищу напарника, наставника.
Последний раз редактировалось zameran 18 ноя 2017, 00:58, всего редактировалось 41 раз(а).
"Не уходи смиренно, в сумрак вечной тьмы..."
Аватара пользователя
zameran
UNIт
 
Сообщения: 58
Зарегистрирован: 16 июл 2011, 15:09
Откуда: Крым, Евпатория
Skype: zameran9

Re: SpaceW - Procedural Planet Renderer

Сообщение PREZRAK 09 апр 2016, 00:27

(3A4OT)
участник клуба GCC
Аватара пользователя
PREZRAK
Старожил
 
Сообщения: 653
Зарегистрирован: 30 май 2013, 12:41
  • Сайт

Re: SpaceW - Procedural Planet Renderer

Сообщение Diab10 09 апр 2016, 09:07

(3A4OT)


Не жирновата ли сетка?
https://lh3.googleusercontent.com/yYkWO ... w1646-h780
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: SpaceW - Procedural Planet Renderer

Сообщение Cr0c 09 апр 2016, 10:13

(3A4OT)
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81

Re: SpaceW - Procedural Planet Renderer

Сообщение zameran 09 апр 2016, 11:05

Diab10 писал(а):Не жирновата ли сетка?
https://lh3.googleusercontent.com/yYkWO ... w1646-h780


Я из крыма, поэтому у меня не открывает большинство гугло-ссылок. Хотя по вашей ссылке даже через tor - 403.
Сетка на CPU генераторе жирновата? Там наоборот всё делалось для лучшей картинки и лучшей плавности.
Хотя может я уже и забыл и там 128x128 сетка XD

Вообще для хорошей картинки достаточно 32х32 меш и 256x256 текстуры. А там уже... чего душенька пожелает и железо.
"Не уходи смиренно, в сумрак вечной тьмы..."
Аватара пользователя
zameran
UNIт
 
Сообщения: 58
Зарегистрирован: 16 июл 2011, 15:09
Откуда: Крым, Евпатория
Skype: zameran9

Re: SpaceW - Procedural Planet Renderer

Сообщение bwolf88 09 апр 2016, 12:47

8-x
Хочу видео с полным фаршем всего перечисленного !
Это будет что то типа SpaceEngine ? И что такое PPR, гугл выдал ссылки на полипропиленовые трубы :D.

128x128 сетка это единым мешем ? Если да, то как с физколлайдером такого меша в динамике, просадки должны быть адские.
Сюда периодически чего нибудь выкладываю https://github.com/LuchunPen
Аватара пользователя
bwolf88
Адепт
 
Сообщения: 2184
Зарегистрирован: 30 апр 2014, 06:40
Skype: bwolf331

Re: SpaceW - Procedural Planet Renderer

Сообщение Syberex 09 апр 2016, 13:21

(3A4OT)
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: SpaceW - Procedural Planet Renderer

Сообщение zameran 09 апр 2016, 15:11

bwolf88 писал(а):8-x
Хочу видео с полным фаршем всего перечисленного !
Это будет что то типа SpaceEngine ? И что такое PPR, гугл выдал ссылки на полипропиленовые трубы :D.

128x128 сетка это единым мешем ? Если да, то как с физколлайдером такого меша в динамике, просадки должны быть адские.


Я издевался над CPU генератором как мог. Там всё просто: 1 квад - 1 меш. Коллайдеры же генерировались в процессе генерации самого меша. Я думаю что при наличии физических взаимодействий были бы какие-то косяки с производительностью, а так как коллайдеры просто генерировались и просто существовали, то и результат соответствующий.
Что касается GPU версии, то там всё сложнее ввиду того, что позиции вершин для меша просчитываются на видеокарте. Я уже думал отойти от стандартной физики, но забил на эту идею. Уверен, что для генерации мешколлайдеров "в лоб" нужно доставать данные из видеокарты посредством ComputeBuffer.GetData(...), и не многие знают, что в Unity проблемы с асинхронностью операций. Поэтому остаётся только "сталкивать" объекты с поверхностью посредством шейдеров - аля Proland.
Собственно, когда я доделаю кэш систему, займусь коллизией и травой.
PPR - Procedural Planet Rendering - я сократил просто :)
Видео? Что ж попробую записать что - то, но меня не особо много опыта в демонстрации чего - либо в ролике, тем не менее я могу стрим устроить, или выложить сюда демку - билд.
По поводу схожести с Space Engine и целях. Этот проект разрабатывается исключительно в целях обучения и получения знаний. Все "непонятки" решаются гуглением, книгами, методом тыка иногда.
И кстати. Я вполне открыто отношусь к предложениям о помощи в разработке, ведь на самом деле у меня тонна мелких вопросов (которые не гуглятся), но исключительно в целях развития опять таки. (Хотя кто его знает)
Повторюсь - могу открыть код, но на это нужно время. Я отписывал в первом посте.
"Не уходи смиренно, в сумрак вечной тьмы..."
Аватара пользователя
zameran
UNIт
 
Сообщения: 58
Зарегистрирован: 16 июл 2011, 15:09
Откуда: Крым, Евпатория
Skype: zameran9

Re: SpaceW - Procedural Planet Renderer

Сообщение bwolf88 09 апр 2016, 15:36

Я издевался над CPU генератором как мог. Там всё просто: 1 квад - 1 меш. Коллайдеры же генерировались в процессе генерации самого меша. Я думаю что при наличии физических взаимодействий были бы какие-то косяки с производительностью, а так как коллайдеры просто генерировались и просто существовали, то и результат соответствующий.

Не совсем понял, на счет 1 квад - 1 меш. В таком случае у Вас уже на 10-15к квадов-мешей просадка по DrawCalls была бы, а после 20к началась бы просадка по физике просто потому что дофига объектов.

Видео можно снять с помощью OBS, снимите пару планет, можно процесс генерации если он в динамике.
Можно облететь вокруг приближая/отдаляя, чтобы показать изменения детализации.
А вопросы можно прям в видео по ходу демонстрации кстати задать, будет наглядно видно, а то может у вас вопросы такого уровня, что простому смертному не ответить :D.
Сюда периодически чего нибудь выкладываю https://github.com/LuchunPen
Аватара пользователя
bwolf88
Адепт
 
Сообщения: 2184
Зарегистрирован: 30 апр 2014, 06:40
Skype: bwolf331

Re: SpaceW - Procedural Planet Renderer

Сообщение zameran 09 апр 2016, 16:18

bwolf88 писал(а):
Я издевался над CPU генератором как мог. Там всё просто: 1 квад - 1 меш. Коллайдеры же генерировались в процессе генерации самого меша. Я думаю что при наличии физических взаимодействий были бы какие-то косяки с производительностью, а так как коллайдеры просто генерировались и просто существовали, то и результат соответствующий.

Не совсем понял, на счет 1 квад - 1 меш. В таком случае у Вас уже на 10-15к квадов-мешей просадка по DrawCalls была бы, а после 20к началась бы просадка по физике просто потому что дофига объектов.

Видео можно снять с помощью OBS, снимите пару планет, можно процесс генерации если он в динамике.
Можно облететь вокруг приближая/отдаляя, чтобы показать изменения детализации.
А вопросы можно прям в видео по ходу демонстрации кстати задать, будет наглядно видно, а то может у вас вопросы такого уровня, что простому смертному не ответить :D.


Да. Draw Calls было много в CPU генераторе, но там спасал батчинг :D
Ок. Я запишу видео.
"Не уходи смиренно, в сумрак вечной тьмы..."
Аватара пользователя
zameran
UNIт
 
Сообщения: 58
Зарегистрирован: 16 июл 2011, 15:09
Откуда: Крым, Евпатория
Skype: zameran9

Re: SpaceW - Procedural Planet Renderer

Сообщение Kann 09 апр 2016, 16:30

Я просто положу это здесь
https://scrawkblog.com/2014/05/19/prola ... nity-core/
Kann
Старожил
 
Сообщения: 553
Зарегистрирован: 05 ноя 2009, 14:06

Re: SpaceW - Procedural Planet Renderer

Сообщение bwolf88 09 апр 2016, 17:25

Да. Draw Calls было много в CPU генераторе, но там спасал батчинг

Да нифига он не спасал при таких количествах, с видюшки может и разгружал, а на проц давил не по детски.
Юнька нормально визуальные меши перевариает почти до предельных значений, а вот коллайдер больше 20к вершин в динамике уже туговато.
Сюда периодически чего нибудь выкладываю https://github.com/LuchunPen
Аватара пользователя
bwolf88
Адепт
 
Сообщения: 2184
Зарегистрирован: 30 апр 2014, 06:40
Skype: bwolf331

Re: SpaceW - Procedural Planet Renderer

Сообщение zameran 09 апр 2016, 17:37

Kann писал(а):Я просто положу это здесь
https://scrawkblog.com/2014/05/19/prola ... nity-core/


И?

bwolf88 писал(а):
Да. Draw Calls было много в CPU генераторе, но там спасал батчинг

Да нифига он не спасал при таких количествах, с видюшки может и разгружал, а на проц давил не по детски.
Юнька нормально визуальные меши перевариает почти до предельных значений, а вот коллайдер больше 20к вершин в динамике уже туговато.


Да, верно, но у меня на CPU генераторе в меше было меньше 20к вершин уж точно XD
Даже во второй версии меньше.
Юньковская физика это бутылочное горлышко для меня.
"Не уходи смиренно, в сумрак вечной тьмы..."
Аватара пользователя
zameran
UNIт
 
Сообщения: 58
Зарегистрирован: 16 июл 2011, 15:09
Откуда: Крым, Евпатория
Skype: zameran9

Re: SpaceW - Procedural Planet Renderer

Сообщение KBEP 09 апр 2016, 18:27

(3A4OT)
*я обосрался*
Аватара пользователя
KBEP
Старожил
 
Сообщения: 598
Зарегистрирован: 24 сен 2012, 23:23
Откуда: Калининград, СПб, Северодвинск

Re: SpaceW - Procedural Planet Renderer

Сообщение zameran 10 апр 2016, 14:55

KBEP писал(а):*я обосрался*


Не стоило.

В силу того, что я по факту полез в дремучий лес с кучей монстров - я зашёл в тупик в процессе разработки.
На неделе залью всё на GitHub.
"Не уходи смиренно, в сумрак вечной тьмы..."
Аватара пользователя
zameran
UNIт
 
Сообщения: 58
Зарегистрирован: 16 июл 2011, 15:09
Откуда: Крым, Евпатория
Skype: zameran9

След.

Вернуться в Кузня

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4