Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Карты освещения и шейдеры

Эта страница содержит информацию о том, как создать шейдерыпрограмму, работающую на графическом процессоре. Подробнее
См. в Словарь
, совместимом с lightmappersИнструмент в Unity, который запекает карты освещения в соответствии с расположением источников света и геометрией в вашей сцене. Подробнее
См. в Словарь
.

Мета-пропуск

Метапасс предоставляет значения альбедо и эмиссии в текстурном пространстве. Эти значения отличаются от тех, которые используются в рендерингев реальном времени. Процессе рисования графики на экране (или в текстуре рендеринга). . По умолчанию основная камера в Unity отображает изображение на экране. Подробнее
См. в Словарь
, что означает, что вы можете использовать Передайте, чтобы управлять тем, как GameObjectфундаментальный объект в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки и более. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
Посмотреть в Словарь
с точки зрения освещение системы выпечки, не влияющее на ее внешний вид во время работы. Примером того, когда это может быть полезно, является ситуация, когда вы хотите, чтобы зеленый мох на скале генерировал преувеличенно зеленый непрямой свет в ваших картах освещения Предварительно обработанная текстура, содержащая эффекты источников света на статических объектах сцены. Карты освещения накладываются поверх геометрии сцены для создания эффекта освещения. Подробнее
Смотреть в Словарь
, но вы не хотели перекрасить ландшафтландшафт в вашей сцене. Игровой объект Terrain добавляет в вашу сцену большую плоскую плоскость, и вы можете использовать окно Terrain Inspector для создания подробного ландшафта. Подробнее
См. в Словарь
в проходе шейдера в реальном времени.

Все встроенные материалы Unity имеют метапроход, а стандартный шейдер содержит метапроход. Если вы используете их, вам не нужно ничего делать, чтобы включить Meta Pass. Если вы используете собственный шейдер, вы можете добавить свой собственный метапасс.

Пример шейдера с метапроходом

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

Shader "Custom/metaPassShader"{ Properties { _Color ("Color", Color)=(1,1,1,1) _MainTex ("Albedo (RGB)",2D)="white"{} _Glossiness ("Smoothness", Range(0,1))=0.5 _Metallic ("Metallic", Range(0,1))=0.0 _GIAlbedoColor ("Color Albedo (GI)", Color)=(1,1,1,1) _GIAlbedoTex ("Albedo (GI)",2D)="white"{} } SubShader { // ------------------------------------------------------------------ // Extracts information for lightmapping, GI (emission, albedo, ...) // This pass is not used during regular rendering. Pass { Name "META" Tags {"LightMode"="Meta"} Cull Off CGPROGRAM #include"UnityStandardMeta.cginc" sampler2D _GIAlbedoTex; fixed4 _GIAlbedoColor; float4 frag_meta2 (v2f_meta i): SV_Target { // We're interested in diffuse & specular colors // and surface roughness to produce final albedo. FragmentCommonData data = UNITY_SETUP_BRDF_INPUT (i.uv); UnityMetaInput o; UNITY_INITIALIZE_OUTPUT(UnityMetaInput, o); fixed4 c = tex2D (_GIAlbedoTex, i.uv); o.Albedo = fixed3(c.rgb * _GIAlbedoColor.rgb); o.Emission = Emission(i.uv.xy); return UnityMetaFragment(o); } #pragma vertex vert_meta #pragma fragment frag_meta2 #pragma shader_feature _EMISSION #pragma shader_feature _METALLICGLOSSMAP #pragma shader_feature ___ _DETAIL_MULX2 ENDCG } Tags {"RenderType"="Opaque"} LOD 200 CGPROGRAM // Physically-based Standard lighting model, and enable shadows on all light types #pragma surface surf Standard fullforwardshadows nometa // Use Shader model 3.0 target, to get nicer looking lighting #pragma target 3.0 sampler2D _MainTex; struct Input { float2 uv_MainTex; }; half _Glossiness; half _Metallic; fixed4 _Color; void surf (Input IN,inout SurfaceOutputStandard o){ // Albedo comes from a texture tinted by color fixed4 c = tex2D (_MainTex, IN.uv_MainTex)* _Color; o.Albedo = c.rgb; // Metallic and smoothness come from slider variables o.Metallic = _Metallic; o.Smoothness = _Glossiness; o.Alpha = c.a; } ENDCG } FallBack "Diffuse" }

Техническая информация о Meta Pass

Во всех метапассах Unity по умолчанию система запекания освещения использует метапасс для обработки альбедо как для диффузных, так и для металлических поверхностей. Lightmapper обрабатывает диффузный транспорт и использует альбедо поверхности при каждом отражении. Металлические поверхности с черным (или почти черным) альбедо не отражают свет. Проход меташейдера, который визуализирует альбедо, смещает альбедо в сторону более яркого цвета с оттенком металла. Диэлектрические материалы (дерево, пластмасса, пластик, камень, бетон, кожа, кожа) имеют зеркальное отражение белого цвета. Металлы имеют спектральное зеркальное отражение. Если вы хотите изменить поведение, вы можете создать собственный мета-проход.

Примечание. Если вы используете Enlightenсистему освещения от Geomerics, используемую в Unity для карт освещения и глобального освещения в реальном времени. Подробнее
Посмотрите в Словарь
, метапроход в Player не такой быстрый, как DynamicGI.SetEmissive, но он более гибкий, поскольку вы не ограничены одним цветом.

Пользовательская прозрачность RGB

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

Во время создания карт освещения вместо этого можно использовать пользовательскую прозрачность RGB. Это означает, что Unity использует значения заданной текстуры для оценки пропускания света через материал. Это полезно, когда вам нужна прозрачность на основе цвета, которая не зависит от цвета материала или текстуры альбедо; например, если вы хотите запечь освещение, которое имитирует поведение света, сияющего через витражное окно.

Чтобы использовать пользовательскую прозрачность RGB во время картирования освещения, добавьте следующую строку в свой ShaderLabЯзык Unity для определения структуры объектов Shader. Подробнее
См. в коде Словарь
:

_TransparencyLM ("Просвечивающая текстура", 2D) = "белый" {}

При этом создается свойство материала, которое отображается в Инспекторе материаловОкно Unity, в котором отображается информация о текущем выбранном игровом объекте, активе или настройках проекта, что позволяет просматривать и редактировать значения. Подробнее
См. в Словарь
с названием «Transmissive Texture». Назначьте желаемую текстуру этому полю.

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3