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

[Unity3D] Lightweight Rendering Pipeline, кастом шейдеры

#0
(Правка: 18:43) 18:43, 5 дек. 2018

В обычном builtin режиме шейдеров мы имеем surf где рисуем свой кастом сурфейс один раз

void surf(in Input v, inout SurfaceOutput o)
{

в LWRP похоже сделали только 1 форвард пасс и surf больше нет, конечный пиксель расчитывается вместе со светом в frag, что конечно отлично для мобильной производительности.

Судя по generated code из ShaderGraph - код графов дублируется в shadow caster !

Т.е. если я хочу писать не графами, а кодом, мне так быстрее. Мне тоже надо дублировать код в shadow caster?


#1
19:19, 5 дек. 2018

Попробуй написать без шэдоукастер пасса, увидишь что будет и получишь ответ.

#2
21:42, 5 дек. 2018

Surface шэйдера мега зло, если мобильная платформа. Lightweight для мобил расчитан, логично что surface убрали. Там иногда в десяток больше операций генерит по сравнению с чистым fragment

#3
14:19, 6 дек. 2018

Выше правильно заметили. Surface шейдеры хоть и удобные, но генерится много лишнего кода. Да и контроля меньше, чем во фрагментном.

#4
15:25, 6 дек. 2018

А можно ли писать шейдеры которые заработают во всех трех пайплайнах?

#5
16:50, 6 дек. 2018

вощем моя плоская ортогональная трава шейдером из 10 треугольников на мобильнике на LWRP имеет производительность хуже на 20% :D
кастом ортогональная трава | [Unity3D] Lightweight Rendering Pipeline, кастом шейдеры

но мне всё равно нравится LWRP подход - более гибкий и прозрачный.

#6
17:49, 6 дек. 2018

Polyflow3d
Нельзя. Разница в техниках значительная.

#7
10:07, 7 дек. 2018

хотя вот простой тест обычного рендера 300 моделей на мобилке, standard vs LWRP - х2 больше фпс.

#8
10:13, 7 дек. 2018

Dampire
а в LWRP нужно что бы у модели нормали и тангенты были нормированны? В сурфейс шейдерах нормали нормируются ,( судя по всему)
Изображение

#9
7:38, 27 янв. 2019

Durane
> Surface шэйдера мега зло, если мобильная платформа. Lightweight для мобил
> расчитан, логично что surface убрали

surf шейдера убрали и из hdrp тоже. Но убрали их из-за несовместимости с новым SRP, а не потому что медленный.
Если surf шейдер обвешать surf lambert noforwardadd approxview  halfasview noshadows и т.д., то финальный код будет не многим тяжелее чем обычный lambert написаный через vert/frag ручками.

#10
(Правка: 7:49) 7:48, 27 янв. 2019

Dampire
> Нельзя. Разница в техниках значительная.
С чего бы нельзя?
Старый CG язык, на котором написаны все Vert/frag шейдера работает в новом srp рендере.
Если избегать multi pass шейдера, grabpass, cameraDepthTexture, lightColor и ещё нескольких фич, то шейдера будут работать везде.
Другой вопрос, что юнити имеет кучу гемороя из коробки, и писать кастомные шейдера это боль.
Лучше сразу отказаться от этой затеи.
Почему?
Например в linear space, обычный цвет который содержится в материале, передаётся в шейдер по разному в зависимости от типа рендера в lwrp/hdrp/legacy
То есть в гамма пространстве (1, 1, 1, 0) и intencity 2 дадут финальный цвет в шейдере как (4,4,4,0)
А в линейном будет lwrp (4,4,4,0), hdrp (24, 24, 24, 0), legacy (4,4,4,0).
И ещё сотни таких же мелочей.
Приятного дебага и поиска недокументированных фич.

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