[Updated] SpaceW - Procedural Planet Renderer

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

Re: SpaceW - Procedural Planet Renderer

Сообщение zameran 18 май 2016, 21:08

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

Re: SpaceW - Procedural Planet Renderer

Сообщение DDDENISSS 23 май 2016, 10:17

1) В какой структуре хранится планета? Я так понимаю просто карта высот?
2) Для физики ты используешь MeshCollider, а раньше, я так понял, использовал свою физику? Что заставило перейти на MeshCollider? Ведь он требует много памяти и на его создание уходит время.
Было бы лучше всего написать свою простую физику на GPU, чтобы можно было бы хранить данные только на GPU.
3) Какой буфер ты используешь для генерации меша? Я так понял Append ComputeBuffer для этого дела?
4) Как отработать случай, когда размера буфера не хватило? На сколько я помню в DX в этом случае неопределенное поведение.
5) После заполнения буфера, ты его перегоняешь в меш или рисуешь с помощью DrawProcedural \ DrawProceduralIndirect.

У меня слегка подобный проект https://youtu.be/yLSh94S8FH8?list=PLCBv ... FRGGDIwvJV
Но он пока использует только DX9.
Аватара пользователя
DDDENISSS
UNIверсал
 
Сообщения: 439
Зарегистрирован: 11 сен 2011, 20:33

Re: SpaceW - Procedural Planet Renderer

Сообщение zameran 23 май 2016, 11:08

DDDENISSS писал(а):1) В какой структуре хранится планета? Я так понимаю просто карта высот?
2) Для физики ты используешь MeshCollider, а раньше, я так понял, использовал свою физику? Что заставило перейти на MeshCollider? Ведь он требует много памяти и на его создание уходит время.
Было бы лучше всего написать свою простую физику на GPU, чтобы можно было бы хранить данные только на GPU.
3) Какой буфер ты используешь для генерации меша? Я так понял Append ComputeBuffer для этого дела?
4) Как отработать случай, когда размера буфера не хватило? На сколько я помню в DX в этом случае неопределенное поведение.
5) После заполнения буфера, ты его перегоняешь в меш или рисуешь с помощью DrawProcedural \ DrawProceduralIndirect.

У меня слегка подобный проект https://youtu.be/yLSh94S8FH8?list=PLCBv ... FRGGDIwvJV
Но он пока использует только DX9.


1) Структура очень проста - параметры для генерации, основные параметры планеты (Радиус, наличие атмосферы и тп). В купе это всё влазит в .json файл, приемлемого размера даже для передачи по сети.
2) Свою физику я не использовал. Только не давно начал экспериментировать с MeshCollider. Да, просаживает он при создании сильно.
3) Дело в том, что на данном этапе используются стандартные буфферы. Загоняются данные - результат считается в буффер - очистка не нужных буфферов - рисование. Буффер необходимый для рисования лежит в памяти. В шейдере просто двигаю вершины. Очень заинтересован в использовании DrawProcedural, но я просто не понимаю как с ним работать... Это отдельный вопрос.
4) Размер буффера для квада - константа равная размеру квада в вершинах по стороне в квадрате.
5) ComputeShader срабатывает 1 раз. При определённых условиях. Дальше всё как в п.3.

Я уверен, вполне себе можно запускать Kernel из ComputeShader, так, что бы не было "простоя" рендера.
На данном этапе это решено ожиданием после запуска в 8 кадров (регулируется). Даёт не плохой результат. Но чёрт побери - велосипедище.
"Не уходи смиренно, в сумрак вечной тьмы..."
Аватара пользователя
zameran
UNIт
 
Сообщения: 58
Зарегистрирован: 16 июл 2011, 15:09
Откуда: Крым, Евпатория
Skype: zameran9

Re: SpaceW - Procedural Planet Renderer

Сообщение DDDENISSS 23 май 2016, 12:33

Очень заинтересован в использовании DrawProcedural, но я просто не понимаю как с ним работать...

Очень просто.
public static void DrawProcedural(MeshTopology topology, int vertexCount, int instanceCount = 1);
Передаешь тип геометрии, количество вершин, инстансов (если, допустим, надо нарисовать с разными позициями).

Синтаксис:
Используется csharp
    void OnRenderObject() {
        material.SetPass( 0 );
        Graphics.DrawProcedural( topology, buffer.count );
    }
 


А в вершинном или геометрическом шейдере просто получаешь номер вершины и инстанса, и из этих данных как хочешь генерируешь вершину или геометрию.

Синтаксис:
Используется javascript
                        v2f vert(uint id : SV_VertexID) {
                            Vert IN = _Buffer[id];
                            v2f v;
                                v.pos = mul(UNITY_MATRIX_MVP, float4(IN.pos, 1));
                                v.normal = IN.normal;
                                return v;
                        }
 



Давно мечтаю заюзать это для моего MineCraft. Но останавливает то, что самому придется заниматься куллингом и сортировкой.
Аватара пользователя
DDDENISSS
UNIверсал
 
Сообщения: 439
Зарегистрирован: 11 сен 2011, 20:33

Re: SpaceW - Procedural Planet Renderer

Сообщение zameran 23 май 2016, 14:40

DDDENISSS писал(а):
Очень заинтересован в использовании DrawProcedural, но я просто не понимаю как с ним работать...

Очень просто.
public static void DrawProcedural(MeshTopology topology, int vertexCount, int instanceCount = 1);
Передаешь тип геометрии, количество вершин, инстансов (если, допустим, надо нарисовать с разными позициями).

Синтаксис:
Используется csharp
    void OnRenderObject() {
        material.SetPass( 0 );
        Graphics.DrawProcedural( topology, buffer.count );
    }
 


А в вершинном или геометрическом шейдере просто получаешь номер вершины и инстанса, и из этих данных как хочешь генерируешь вершину или геометрию.

Синтаксис:
Используется javascript
                        v2f vert(uint id : SV_VertexID) {
                            Vert IN = _Buffer[id];
                            v2f v;
                                v.pos = mul(UNITY_MATRIX_MVP, float4(IN.pos, 1));
                                v.normal = IN.normal;
                                return v;
                        }
 



Давно мечтаю заюзать это для моего MineCraft. Но останавливает то, что самому придется заниматься куллингом и сортировкой.


Спасибо. Да, я примерно так и делал. Но в основном остановила "неизведанность" данного океана.
Куллинг нужен собственный, да.
А вот с сортировкой я вообще не знаю что делать.

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

Re: SpaceW - Procedural Planet Renderer

Сообщение zameran 03 июн 2016, 12:43

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

Re: SpaceW - Procedural Planet Renderer

Сообщение Woolf 03 июн 2016, 13:58

Апдейт! Информация в шапке.

Ну вы бы и тут выкладывали, а то тема многостраничная, неудобно каждый раз лесть в шапку.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: SpaceW - Procedural Planet Renderer

Сообщение zameran 03 июн 2016, 15:36

Woolf писал(а):
Апдейт! Информация в шапке.

Ну вы бы и тут выкладывали, а то тема многостраничная, неудобно каждый раз лесть в шапку.


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

Re: SpaceW - Procedural Planet Renderer

Сообщение zameran 05 июн 2016, 11:22

Странная штуковина произошла, когда я переместил "важные" запчасти из вершинного в фрагментный Quad шейдера.
Nvidia GTX 980 GPU загружается на 99%, всегда, но при этом рендер выдаёт более 500-700 кадров, а у поверхности не падает ниже 250-300. К тому же такой спад больше вина нагрузки на процессор...
Причём я точно вычислил, что это происходит именно из за Quad шейдера, в фрагментной подпрограмме которого много всего... не так уж и много...
У меня есть предположение, что юнька сама забивает GPU - как бы резервирует. Но это маловероятно.
VSync не пробовал. Тесты продолжаются :D
"Не уходи смиренно, в сумрак вечной тьмы..."
Аватара пользователя
zameran
UNIт
 
Сообщения: 58
Зарегистрирован: 16 июл 2011, 15:09
Откуда: Крым, Евпатория
Skype: zameran9

Re: SpaceW - Procedural Planet Renderer

Сообщение bwolf88 05 июн 2016, 11:59

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

Re: SpaceW - Procedural Planet Renderer

Сообщение zameran 05 июн 2016, 16:14

bwolf88 писал(а):А это на каком разрешении фрагментный быстрее. может на FullHD будет обратная разница ?


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

Re: SpaceW - Procedural Planet Renderer

Сообщение bwolf88 05 июн 2016, 17:08

Как раз таки чем ниже разрешение, тем меньше GPU напрягается в моём случае.

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

Re: SpaceW - Procedural Planet Renderer

Сообщение zameran 14 июн 2016, 23:45

Апдейт. Летом темпы чуточку угаснут.
Вполне вероятно, что этот проект перерастёт в экономическую MMO. Но это не точно. ;)

Скрытый текст:
Middle June 2016
- Рефактор. Чуточку.
- Условия для деления на уровни LOD изменены, и теперь имеют два режима:

  • От ближайшего угла по сферезированным координатам угла квада без учёта высоты в этой точке. (Старый)
  • От ближайшего угла по верхней плоскости AABB.
- Улучшена отзывчивость LOD системы.
- Улучшена упаковка multi_compile переменных в шейдеры.
- Улучшено поведение и отображение линз.
- Уменьшено количество генерируемого мусора за 1 кадр.
- Все ожидания кадров, ожидание некоторого времени и тп. в корутинах заменены на использование кешированных.
- Работа над атмосферами.
- Рассеянный свет/отблеск от соседней планеты на атмосфере, если таковая имеется. (Ещё в разработке, но уже рядом).
- Буфферы для квада устанавливаются только 1 раз - после генерации.
- Отдельный класс для AABB квада, содержащий вершины "коробки".
- Модификатор силы затмений на поверхности вынесен. Теперь это шейдерный параметр.
- В связи с переходом на использование MaterialPropertyBlock, теперь когда фокус переходит на окно с приложением планета перестраивается. Возможно это будет решено в ближайшее время.
- Расширение API планет и квадов.
- Фикс магической формулы для LOD. Она давала неверные результаты, если радиус планеты не целое число.
- И другие маленькие фиксы.
- И переход на версию движка 5.3.5f1.
"Не уходи смиренно, в сумрак вечной тьмы..."
Аватара пользователя
zameran
UNIт
 
Сообщения: 58
Зарегистрирован: 16 июл 2011, 15:09
Откуда: Крым, Евпатория
Skype: zameran9

Re: SpaceW - Procedural Planet Renderer

Сообщение bwolf88 15 июн 2016, 02:45

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

Re: SpaceW - Procedural Planet Renderer

Сообщение KelZard 15 июн 2016, 19:39

Мы делаем космическую игру https://new.vk.com/dmatternet, если что то можно скооперироваться
Я ВК vk.com/melnikov2033
Группа в ВК vk.com/hordelekanov
Добавить WANGOK1313 в Skype
Gmail _melnikov2033@gmail.com
KelZard
UNец
 
Сообщения: 45
Зарегистрирован: 08 ноя 2015, 08:36
Skype: wangok1313

Пред.След.

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

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

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