Unity 6.3
0 онлайн 104 гостей 3 в системе
Вход
Освещение Шаг 145 из 173

Введение в пользовательские освещения в URP

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

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

Хорошим примером реализации индивидуального освещения является сцена кокпита в URP 3D Образце проекта.

Unity предоставляет несколько способов реализации пользовательского освещения с помощью HLSL, пользовательских узлов функций графа шейдеров, или с помощью модификации исходного кода URP.

HLSL шейдеры и шейдеры графов

Пользовательские шейдеры HLSL дают широкий набор возможностей и гибкость для реализации собственных функций освещения. Вы полностью управляете проходами рендеринга, входными и выходными переменными, атрибутами и внутренними функциями шейдера.

Предварительно построенные узлы Shader Graph позволяют использовать общие функции шейдера, но предоставляют мало возможностей для изменения их поведения. Shader Graph также предоставляет узлы пользовательских функций, которые позволяют вводить пользовательский код HLSL внутрь узла.

Примеры узлов пользовательских функций можно найти в проекте URP 3D Образец и в примере Custom Lighting в пакете Shader Graph.

Ограничения узлов настраиваемых функций

Узлы настраиваемых функций позволяют вставлять свой код в функцию вершинного шейдера или функцию фрагментного шейдера. Эти функции соответствуют стадиям шейдера Вершина и Fragment в Shader Graph, или функциям vert(Attributes IN) и frag(Varyings IN) в шейдере HLSL.

Узел настраиваемой функции не обеспечивает следующих функций:

  • Изменение или добавление атрибутов в структурах входа и выхода (часто определяемых как struct Attributes и struct Varyings в коде шейдера). Например, это означает, что вы не можете добавить дополнительную пользовательскую опцию к стадиям шейдера Fragment или Вершина.

  • Определение дополнительных проходов шейдера.

  • Задайте дополнительные команды состояния рендеринга, такие как ColorMask.

Если ваш шейдер требует какую-либо из вышеперечисленных функций, рассмотрите возможность написания шейдера ShaderLab.

Методы использования различных типов света

Методы для реализации настраиваемого освещения варьируются в зависимости от того, какие типы освещения требуются для ваших настраиваемых эффектов.

Чтобы использовать основной свет, используйте функцию шейдера GetMainLight. Более подробную информацию см. в Использование освещения в пользовательском шейдере URP.

Пути рендеринга Forward и Forward+ по-разному обрабатывают дополнительные направленные и дополнительные огни. Путь рендеринга Forward+ не ограничивает количество огней в реальном времени на GameObject, поэтому метод GetAdditionalLightsCount всегда возвращает 0. Информацию о том, как написать цикл рендеринга, использующий дополнительные огни в путях рендеринга Forward и Forward+, см. в Рендирование дополнительных огней в шейдере в URP.

Дополнительные ресурсы