Во встроенном конвейере рендеринга вы можете указать камерукомпонент, который создает изображение определенной точки обзора в ваша сцена. Вывод либо рисуется на экране, либо фиксируется в виде текстуры. Подробнее
См. в Словарь, чтобы изменить шейдер, используемый для визуализации определенной геометрии во время выполнения. . Вы можете сделать это для достижения визуального эффекта, такого как обнаружение краев.
Замена шейдера выполняется из сценария с использованием Camera.RenderWithShader или Camera.SetReplacementShader. Обе функции используют шейдерПрограмму, работающую на графическом процессоре. Подробнее
См. в Словарь и replacementTag.
Это работает следующим образом: камера визуализирует сценуСцена содержит окружение и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
Просмотрите в Словарь как обычно. объекты по-прежнему используют свои материалы, но реальный шейдер, который в конечном итоге используется, изменен:
- Если replacementTag пуст, все объекты в сцене визуализируются с использованием заданного заменяющего шейдера.
- Если replacementTag не пустой, то для каждого объекта, который будет отображаться: <ул>
- Шейдер реального объекта запрашивается для значения тега.
- Если у него нет этого тега, объект не отображается.
- Найден вложенный шейдер в заменяющем шейдере, который имеет заданный тег с найденным значением. Если такой подшейдер не найден, объект не отображается.
- Теперь этот подшейдер используется для визуализации объекта.
Таким образом, если бы все шейдеры имели, например, тег RenderType со значениями, такими как "Непрозрачный", "Прозрачный", "Фон", "Наложение", вы могли бы написать заменяющий шейдер, который визуализирует только сплошные объекты с использованием один субшейдер с тегом RenderType=Solid опорное слово, которое вы можете назначить один или несколько игровых объектов, чтобы помочь вам идентифицировать игровые объекты для сценариев. Например, вы можете определить тег «Съедобный» для любого предмета, который игрок может съесть в вашей игре. Подробнее
См. в Словарь. Другие типы тегов не будут найдены в заменяющем шейдере, поэтому объекты не будут отображаться. Или вы можете написать несколько подшейдеров для разных значений тега «RenderType». Между прочим, все встроенные объекты Shader имеют установленный тег RenderType.
Замена шейдера освещения
При использовании замены шейдера сцена рендерится с использованием пути рендеринга, настроенного на камере. Это означает, что шейдер, используемый для замены, может содержать проходы теней и освещения (вы можете использовать поверхностные шейдеры для замены шейдера). Это может быть полезно для выполнения рендерингапроцесса вывода графики на экран (или текстуры рендеринга). По умолчанию основная камера в Unity отображает изображение на экране. Подробнее
См. в Словарь специальных эффектов и отладки сцен.
Теги замены шейдеров во встроенных шейдерах
Все встроенные шейдеры имеют набор тегов RenderType, который можно использовать при рендеринге с замененными шейдерами. Значения тегов следующие:
-
Непрозрачный: большинство шейдеров (Нормальный Направление, перпендикулярное поверхности сетки, представленное вектором. Unity использует нормали для определения ориентации объекта и применения затенения. Подробнее
См. в Словарь, Self Illluminated , Reflective, шейдеры рельефа). - Прозрачный: большинство полупрозрачных шейдеров (Прозрачный, шейдеры частиц, шрифта, аддитивные проходные шейдеры ландшафта).
- TransparentCutout: маскированные шейдеры прозрачности (Transparent Cutout, двухпроходные шейдеры растительности).
-
Фон: SkyboxМатериал особого типа, используемый для изображения неба. Обычно шестигранник. Подробнее
См. в шейдерах Словарь. - Наложение: шейдеры Halo, Flare.
-
TreeOpaque: ландшафтпейзаж в вашей сцене. Игровой объект Terrain добавляет в вашу сцену большую плоскую плоскость, и вы можете использовать окно Terrain Inspector для создания подробного ландшафта. Подробнее
См. в Словарь кору двигателя. - TreeTransparentCutout: листья дерева движка ландшафта.
- TreeBillboard: рекламные щиты с деревьями.
- Трава: трава для ландшафтного двигателя.
- GrassBillboard: рекламный щит с травяным щитом.
Встроенная текстура глубины/нормалей сцены
Камера имеет встроенную возможность рендеринга текстуры глубины или глубины+нормалей, если вам это нужно в некоторых ваших эффектах. См. страницу Текстура глубины камеры. Обратите внимание, что в некоторых случаях (в зависимости от аппаратного обеспечения) текстуры глубины и глубины + нормали могут быть отрендерены внутри с использованием замены шейдера. Поэтому очень важно использовать правильный тег RenderType в ваших шейдерах.
Пример кода
Ваша функция Start() указывает замещающие шейдеры:
void Start() {
camera.SetReplacementShader (EffectShader, "RenderType");
}
Это требует, чтобы EffectShader использовал ключ RenderType. EffectShader будет иметь теги ключ-значение для каждого RenderType, который вы хотите. Шейдер будет выглядеть примерно так:
Shader "EffectShader" {
SubShader {
Tags { "RenderType"="Opaque" }
Pass {
...
}
}
SubShader {
Tags { "RenderType"="SomethingElse" }
Pass {
...
}
}
...
}
SetReplacementShader просматривает все объекты в сцене и вместо их обычного шейдера использует первый подшейдер, который имеет совпадающее значение для указанного ключа. В этом примере любые объекты, чей шейдер имеет тег Rendertype="Opaque", будут заменены первым подшейдером в EffectShader, любые объекты с шейдером RenderType="SomethingElse" будут использовать второй замещающий подшейдер и так далее. Любые объекты, чей шейдер не имеет соответствующего значения тега для указанного ключа в заменяющем шейдере, не будут визуализированы.