Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / 3d Clouds

3d Clouds

Поделиться
WerqПостоялецwww7 дек. 201717:14#0
Всем привет!
Делаю облака, возникли некоторые проблемы, прошу помощи.
Форму генерирую шумом Перлина. Получаю набор вершин, затем скармливаю их движку, генерирую из них билборды, после чего применяю к ним текстурку части облака.
блендмод = { One, OneMinusSrcAlpha }
Вот какая получается форма
+ Показать

вот так они выглядят с одной стороны(вполне себе правильно)
+ Показать

а вот так выглядят с другой стороны
+ Показать
, просвечивают себя , собственно первый вопрос как от такого избавиться?
а вот так они выглядят когда включен запись в глубину
+ Показать

пытался делать сортировку, но тогда фпс падает до 0,6.

Правка: 7 дек. 2017 17:18

glasmПользовательwww7 дек. 201717:46#1
билборды формируются на CPU или GPU ? // на GPU понятно быстрее будет
что будет если для билборда использовать point вместо quad ? // сортировать надо по одной точке
сколько раз в секунду сортировка ? // 5..10 раз в секунду может быть достаточно
сортировка типа shell ? // частично отсортированный массив быстрее сортируется
есть ли возможность сохранить 30..100 массивов облака для разных углов обзора ? // самый простой метод
WerqПостоялецwww7 дек. 201717:49#2
glasm
билборды на gpu геометрическим шейдором
вообще делал каждую секунду сортировку
сортировал С++ функцией sort
возможности сохранить массивов думаю нету, слишком много памяти будет занимать
glasmПользовательwww7 дек. 201718:09#3
Werq
> сортировал С++ функцией sort
попробуй shell по квадратам (без вычисления корня)
> возможности сохранить массивов думаю нету, слишком много памяти будет занимать
сколько один массив весит ? для массива 128х128, на вскидку, по минимуму 128К вроде надо (int16[X,Y,Z,st]) или даже если 512К, то для 50 массивов это 26М
Battle Angel AlitaПостоялецwww7 дек. 201718:28#4
Делай OIT, сортируй на гпу, делай тайловые частицы.
агрессорПостоялецwww7 дек. 201720:34#5
Werq
где планируешь использовать (летать через них на ЛА, или просто с земли созерцать их)?
как планируешь бороться с недостатками выбранного подхода?
barnesПостоялецwww7 дек. 201721:45#6
По поводу облаков. Есть старый скайбокс (вторая квака), который неплохо разнообразить таким. Скорее всего эдакие перистые облака и их созерцания сугубо снизу)) По освещению там вопросов даже нет, будет вертекс колор, хотя можно сделать псевдо ссс. А вот по генерации что-то подскажете?
SuslikМодераторwww8 дек. 20173:57#7
Werq
> пытался делать сортировку, но тогда фпс падает до 0,6.
ну а ты как думал? в сортировке же вся суть, иначе бы все так делали. делать кучу билбордов в таком случае — жуткий overdraw, да ещё и сортировать надо. такое обычно рендерят volume rendering'ом через raymarching трассировку 3д шума в шейдере — это гораздо быстрее, но всё равно имеет ограниченную область применимости из-за производительности.

Правка: 8 дек. 2017 3:57

WerqПостоялецwww8 дек. 201715:01#8
агрессор
летать через них)
GrobozavrПостоялецwww11 дек. 201711:48#9
Suslik
Игрался с ray marching облаками. Вроде при грамотном подходе можно получить вполне приличный фпс и качество (собственно вдохновлялся описанием системы облаков из horizon zero down)
Правда заставить это работать быстро не удалось. Либо быстро, либо красиво (условно. красиво там тоже сложно получить). Хотя и тестил на встроенной древней интеловской видяхе, так что мож и норм :) Ну и если тупо ронять разрешение облаков и блюрить - то по скорости можно даже без заморочек что-то получить. Репроекцию как в оригинале я не осилил. В шейдерах пока нуб. :(
Была мысль рендерить на скайбокс с глубиной. При малой скорости перемещения могло и проктаить, но до опытов не дошел.
Ну и совмещать с остальным рендером немного муторно.
SuslikМодераторwww11 дек. 201711:52#10
Grobozavr
да, всё правда. могу только ещё посоветовать использовать integral precomputation — это полуаналитический метод, который записывает в 3д текстуру результаты предрасчёта для каждого шага численного интегрирования, что очень сильно улучшает качество и позволяет интегрировать с большим шагом. правда, есть ограничния — например, нельзя без боли облака делать цветные.

Правка: 11 дек. 2017 11:52

GrobozavrПостоялецwww11 дек. 201713:49#12
Suslik
Не силён в матане. Я в итоге сделал аналог SDF (т.е. шаг переменный от плотности). Результат неоднозначный. В зависимости от обстоятельств производительность либо падает, либо сильно растёт. Впрочем примерно где и как - понятно. Если луч идёт по границе облака - то всё печально. Если делать облака тун-шейдером и непрозрачные - то вполне бодро работает :)
агрессорПостоялецwww11 дек. 201714:47#13
забавно. тоже когда-то делал по sdf. по пустотам луч летает, а на границах "прилипает". оптимизаций для "отлипания" так и не придумал.

Suslik
> правда, есть ограничения — например, нельзя без боли облака делать цветные.
подробней, что ты имеешь ввиду?

/ Форум / Программирование игр / Графика

2001—2017 © GameDev.ru — Разработка игр