ШЕЙДЕРЫ AMPLIFY ДЛЯ BAKERY URP

Введение

Bakery — это плагин запекания света на GPU для Unity. У него есть дополнительные режимы направленных карт освещения, например Radiosity Normal Mapping (RNM), как в Half-Life 2, и сферические гармоники, как в движке Frostbite.

Режим сферических гармоник даёт гораздо более правдоподобный запечённый свет. Освещение остаётся полностью статическим и почти ничего не стоит в рантайме, но блики и карты нормалей выглядят так, будто в сцене есть источники в реальном времени.

Я сделал шейдер для Universal Render Pipeline в Amplify Shader Editor. Он использует сферические гармоники, которые запекает Bakery.
Ниже сравнение прогрессивного лайтмаппера Unity со стандартным Lit и результата Bakery с моими шейдерами (потяните линию мышкой):



В URP у Unity нет Box Projection для Reflection Probes. Если нужны хоть какие-то отражения и блики, на полу появляется некрасивый блик. С Bakery отражения на больших плоскостях — пол, стены, потолок — можно отключить, но блики от запечённого света и просто светлые участки окружения останутся. Картинка Bakery выглядит цельной: предметы стоят на полу, а на изображении Unity те же предметы как будто висят.

В Bakery 1.8 появилась отличная возможность Bakery Volume. Она запекает объём в 3D-текстуру, а затем три Texture3D используются в шейдере, чтобы освещать динамические объекты вместо Light Probes.

Вот два GIF: эта возможность в работе и сравнение с Light Probes Unity:



Стул на первом GIF получает свет и тень почти как от источника в реальном времени, потому что объёмная текстура сэмплируется в шейдере попиксельно. Light Probes сэмплируются на весь объект и дают очень приблизительное освещение. Можно использовать Light Probe Proxy Volumes, но: а) LPPV не поддерживаются в URP; б) даже там, где они есть, пробы всё равно нужно расставлять вручную, и только потом объект будет их сэмплировать. Это долго, а чтобы получить ту же детализацию, сетка проб должна быть очень плотной.

На втором GIF — маленький локальный объём, запечённый только для дверец шкафа. У дверец появились нормальные свет и тень.

Теперь сами шейдеры

NL_Bakery_SH используется для статичных объектов с лайтмапом.
Этот шейдер почти повторяет стандартный Lit. Сферические гармоники сделаны на ноде BakerySpecSH, которую написал Ben Woodford.
В него также встроена техника Specular AA (в интерфейсе материала её нет) и два дополнительных ползунка в разделе Fresnel Modifiers. Они убирают очень тонкий контур на изогнутых объектах вроде сфер, который мерцает на расстоянии. Это почти то же, что делает Specular AA, только агрессивнее и физически не всегда верно. Иногда это хороший компромисс, особенно в VR.



NL_Bakery_Dynamic_SH почти такой же, но использует Bakery Volumes и даёт больше настроек материала.
Подробности можно прочитать во всплывающей подсказке: наведите курсор на название параметра.

Шейдеры даются «как есть», поэтому я могу не успевать их поддерживать или не поддерживать вовсе.

>Скачать шейдеры< (правая кнопка мыши и «Сохранить как...»)

Модели из этой статьи можно найти >здесь<

Импортируйте unitypackage (правый клик в окне Project > Import Package > Custom Package). Шейдеры появятся в выпадающем списке материалов в разделе NOT_Lonely/URP/.