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

Unity3D: Кастомные данные в GBuffer для Deffered Render

#0
0:10, 21 июля 2018

Юзаю исключительно deffered path, хочу реализовать Subsurface Scattering.
В forward path все легко, при просчете отдельной лампочки - делаем SSS, а вот в deffered лампочки приходят только на deffered шейдер в функцию CalculateLight(), когда просчет идет уже в экранных координатах.

В общем подключил свой шейдер для deffered и переписал функцию CalculateLight(). Создал свою lighting модель которая юзают кастомный SurfaceOutput с half sss (маска толщины для просвета). Все отлично передал на deffered заюзав свободный канал в _CameraGBufferTexture2, посчитал и вывел sss.

В результате получил вот такую картинку:

+ Показать

Как оказалось _CameraGBufferTexture2 в формате ARGB2101010 и в RGB идет нормаль, а на альфу всего 2 бита. Тобишь банально не хватает точности.
Все остальные каналы в текстурах GBuffer`a заняты.

У кого какие идеи есть как обойти ограничение точности или реализовать иначе? Можно ли добавить в GBuffer еще текстуру для кастомных данных (пока только sss, но в будущем что-то еще можно добавить)? Может есть возможность получить источник света раньше дефереда и допустим запихнуть уже просчитанный sss вместе с emission?

Пока что ковыряю в сторону Command Buffers...


#1
10:56, 22 июля 2018

Почитать документацию.
https://docs.unity3d.com/ScriptReference/Rendering.BuiltinRenderT… tureType.html
Кроме gBuffer0,1,2,3,4, изначально занятых дынными, есть ещё пустые GBuffer5,6,7, в которые можешь писать всё, что хочешь. При условии что целевая платформа поддерживает более 8 рендер таргетов.

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

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