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

Оптимизация Volumetric Clouds

Страницы: 1 2 3 4 5 Следующая »
#0
3:20, 18 фев 2022

Хотелось бы узнать кто как делал оптимизацию для них. Пробовал сделать TAA, вышло не совсем то, что хотелось бы увидеть. В идеале хотелось бы сохранить много семплов. Облака тру волуметрик, в которых можно полетать, динамические, под влиянием ветров и т.п.

#1
4:42, 18 фев 2022

Target
Супер секретная техника - облака можно интерполяцией и реконструкцией востанавливать из 4-х кратного уменьшения так что разницы с 1:1 не будет.
Облака ведь размазаны по множеству пикселей (там четких линий нет) вот и можно размазывать, пример

слева AMD FidelityFX апскейл из 133x75, справа линейная интерполяция из  800x450
Изображение

слева AMD FidelityFX апскейл из 200x113, справа линейная интерполяция из  800x450
Изображение

#2
7:21, 18 фев 2022

melvy Т.е. как я понял, что-то вроде апскейла с бикубической интерполяцией + в небольшом количестве блюр для гарантии?

UPD

Нашёл на shadertoy, попробую заюзать Catmull-Rom. А, тут и AMD FidelityFX Super Resolution пример есть

#3
10:44, 18 фев 2022

Target
Зависит от того, как у тебя сделан маршинг и во что упирается производительность.
Если облака мало двигаются, то можно строить ускоряющие структуры, чтоб эффективно пропускать пустоты.

#4
11:14, 18 фев 2022

https://www.diva-portal.org/smash/get/diva2:1223894/FULLTEXT01.pdf
http://advances.realtimerendering.com/s2015/The%20Real-time%20Vol… 0-%20ARTR.pdf

#5
12:05, 18 фев 2022

lookid
Это только для шутеров. Когда нужно летать сквозь облака, то нужен переменный шаг, ЛОДы и куча других оптимизаций.

#6
13:21, 18 фев 2022

https://blog.uhawkvr.com/
тут есть вариант с оптимизацией через SDF

#7
13:35, 18 фев 2022

melvy
> востанавливать из 4-х кратного уменьшения
ФиделитиФХ не пробовал, но линейный апскейл не везде покатит.
Облака на небе бывают c очень даже чёткими краями:

+ Показать

Я делал некоторые облака: https://twitter.com/guycalledfrank/status/1205938880899403776
Во-первых, необходимо использовать правильный шум, в моём случае обычный blue noise.
Во-вторых, все равно всё лагает, поэтому я делю текстуру облаков (в моём случае они бесконечно отдалённые, так что тут проще) на небольшие тайлы (типа 256х256), обновляю только один тайл за кадр, а визуально пытаюсь блендить прошлый и позапрошлный полностью посчитанные кадры. По-хорошему такой бленд мог бы выйти очень хорошо какой-нибудь optical flow техникой (т.е. найти некие моушен векторы для перетекания одной формы в другую), но я недостаточно умён, чтобы такое нормально сделать, вроде в релизе оставил в каком-то виде, но эффект слабенький, малого радиуса. Помимо этого, облака частенько движутся в одну какую-то сторону (хотя не всегда), и в таком случае можно посчитать моушен вектор просто линейного смещения по всей поверхности неба (правда в случае с пролетанием сквозь них тут уже сложнее), подобный вектор я юзал.

#8
13:50, 18 фев 2022

Mr F
> Облака на небе бывают c очень даже чёткими краями:
Если посмотреть через оптику, то видны завихрения по краям.
И опятьже если есть полеты среди облаков, то нужна намного большая детализация. Либо облака будут как куски ваты.

#9
14:25, 18 фев 2022

/A\
Чем плохи куски ваты?

#10
15:35, 18 фев 2022

lookid
> Чем плохи куски ваты?
Облака должны быть пушистыми чтоли, иначе совсем не похожи на облака.

#11
16:19, 18 фев 2022

/A\
> Target
> Зависит от того, как у тебя сделан маршинг и во что упирается
> производительность.
> Если облака мало двигаются, то можно строить ускоряющие структуры, чтоб
> эффективно пропускать пустоты.
1)Уменьшаю количество семплов до половины на основании вектора направления луча по Y оси. Смотрим прямо - 100% от заданного кол-ва семплов.
2)Если начальная позиция луча ниже горизонта - прекращаем выборку и записываем ноль.
3)Если на пути встретился какой либо объект, также, останавливаемся на этом и записываем то, что намаршировали (или просто ноль, если перед объектом не было облака вовсе), либо если плотность уже достигла 99%
4)Если значение в канале карты погоды для coverage слишком низкое - пропускаем шаг, при этом инкрементируем счетчик, при достижении нескольких шагов - увеличиваем размер шага.
5)Если в результате выборки плотности из 3д текстуры базовой формы значение равно нулю - прекращаем маршить, увеличиваем счетчик чтобы если что чекать когда надо увеличивать длину шага.
6)Маршируем дальше, попали на плотность -, сбрасываем счетчик, ставим малый размер шага и маршим как обычно, но перед этим делаем шаг назад размером в малый размер шага.
7)При каждом попадании луча в плотность вычисляю свет. Тут уже для начала марширую плотность по конусу в пять фиксированных шагов. Каждый шаг прибавляю к позиции длину шага конкретно для света от солнца(кастом) * вектор солнца. К этому прибавляю рандомный вектор по сфере * длина луча (кастомная величина) * радиус конуса (также кастом) * инкремент шага. Цикл от 1 до 5. С каждым инкрементом увеличиваю лод для выборки плотности. т.е. lod + i * 0.5. Результат аккумулирую. Цикл прошли - делаем на последок ещё одну итерацию и аккумулируем, но тут уже большой шаг делаю по направлению солнца из второго лода, не делая выборки с влиянием detail текстуры, домножаю на weather density из карты погоды. В итоге есть переменная, в которую накопили плотность выборкой конусом. А далее уже по знакомым всем формулам вычисляю световую энергию beerLaw * powderEffect * HenyeyGreenstein(для переднего плана и для заднего от направления солца), учитывая косинус угла направления луча и солнца.

Как-то так, сорян если много написал и, возможно, не совсем понятно. Я не стал учитывать другие детали реализации, т.к. к самому подходу они не имеют уже отношения.

#12
16:21, 18 фев 2022

/A\
> Target
> Если облака мало двигаются, то можно строить ускоряющие структуры, чтоб
> эффективно пропускать пустоты.
Что за структуры? Первый раз слышу./A\
> https://blog.uhawkvr.com/
> тут есть вариант с оптимизацией через SDF
Ага, видел, но что-то не врубился, что конкретно для этого надо сделать. Плюс он сказал, что у него полностью статичные облака. У меня цель сделать систему динамической погоды на волюметриковых облаках.

UPD: делаю все на обычным шейдером, не вычислительным.

#13
16:42, 18 фев 2022

Target
> melvy Т.е. как я понял, что-то вроде апскейла с бикубической интерполяцией + в
> небольшом количестве блюр для гарантии?
>
> UPD
>
> Нашёл на shadertoy, попробую заюзать Catmull-Rom. А, тут и AMD FidelityFX Super
> Resolution пример есть
ну это банально
1. апскейл из 3-х 4-х кратного уменьшения
2. если апскейл всеравно медленный то шахматный рендеринг еще сверху (тоесть еще одно уменьшение разрешения в 2 раза и рендерим половину пикселей вручную сдвигая пиксели на 1 каждый кадр и умножая на 2(тыж в курсе как работает шахматный рендеринг что он не рендерит половину пикселей в буфере оригинального размера(чтоб детских ошибок не было имею в виду, а то сделаешь discard в каждом втором пикселе и ничего не ускорится)))
3. как ты сказал TAA и прочие "интерполяции с прошлыми кадрами" чтоб размазать новые пустые места.

если облака у тебя "четкие" как выше говорили - то удачи и хорошего настроения

#14
17:02, 18 фев 2022

melvy
Я уже прикрутил FSR, вот результат без TAA, resolution 1/4. Просматривается не сильный шум местами.

+ Показать
Страницы: 1 2 3 4 5 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.