Unity 6.3
0 онлайн 134 гостей 3 в системе
Вход
Материалы и шейдеры Шаг 301 из 442

Использовать косвенное освещение в пользовательском шейдере URP

Чтобы использовать косвенное освещение в пользовательском шейдере Universal Render Pipeline (URP), выполните следующие действия:

  1. Добавьте строку #include внутрь блока HLSLPROGRAM в вашем файле шейдера. Обратитесь к разделам на этой странице для конкретных путей файлов включения.
  2. Используйте любой из методов, описанных в следующих разделах.

Используйте отраженные зонды в пользовательском шейдере URP

Для использования зондов отражения или skybox, используйте следующую строку #include:

#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/GlobalIllumination.hlsl"
Метод Синтаксис Описание
GlossyEnvironmentReflection half3 GlossyEnvironmentReflection(half3 reflectVector, float3 positionWS, half perceptualRoughness, half occlusion, float2 normalizedScreenSpaceUV) Функция поддерживает смешивание и.
Аргумент perceptualRoughness выбирает уровень mip образованной текстуры. Чем выше значение, тем более размытыми выглядят отражения.
Аргумент occlusion — это коэффициент затухания отражения.
Аргумент normalizedScreenSpaceUV — это нормализованное положение фрагмента в экранном пространстве.

Функция GlossyEnvironmentReflection имеет следующую простую перегрузку, которая не поддерживает смешивание:

half3 GlossyEnvironmentReflection(half3 reflectVector, half perceptualRoughness, half occlusion)

Объемы адаптивного зонда образца

Чтобы взять пробу из Адаптативных Томов Пробоотборника (APV), используйте следующую строку #include:

#include "Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeVolume.hlsl"
Метод Синтаксис Описание
EvaluateAdaptiveProbeVolume void EvaluateAdaptiveProbeVolume(in float3 posWS, in float3 normalWS, in float3 viewDir, in float2 positionSS, in uint renderingLayer, out float3 bakeDiffuseLighting) Выполняет выборку освещения из Адаптивные тома зонда.
Аргумент positionSS задаёт позицию рендерируемого фрагмента в экранном пространстве.
Аргумент renderingLayer — это маска слоёв рендеринга.

Световые зонды для образцов

Для отбора проб из световых зондов используется следующая строка #include:

#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/AmbientProbe.hlsl"
Метод Синтаксис Описание
SampleSH real3 SampleSH(real3 normalWS) Образец световые зонды.

Пример

Следующий код шейдера URP вычисляет диффузный и зеркальный окружающий свет с помощью функции GlossyEnvironmentReflection.

float3 CustomLightingAmbient(float3 BaseColor, 
                            float3 NormalWS, 
                            float Metallic, 
                            float Smoothness, 
                            float Reflectance, 
                            float AmbientOcclusion, 
                            float PositionWS, 
                            float2 screenspaceUV, 
                            float3 ViewDirWS)
{
    // Diffuse ambient lighting.
    // Sample the sky probe with high roughness and use a normal vector instead of
    // a reflection vector to approximate ambient light
    float3 DiffuseAmbient = GlossyEnvironmentReflection(NormalWS, PositionWS, 1, 1, screenspaceUV);
    // If the surface is metallic, set ambient to zero, otherwise multiply by BaseColor
    DiffuseAmbient *= lerp(BaseColor, float3(0,0,0), Metallic);

    // Specular ambient lighting - reflections
    // Surfaces are more reflective at glancing angles. Compute the fresnel value for reflectance.
    float Fresnel = pow((1 - dot(NormalWS, ViewDirWS)), 5);
    // Reflectance is 100% at the glancing angle
    Reflectance = lerp(Reflectance, 1, Fresnel);
    // If the object is metal, use the base color for reflectance instead.
    float3 ReflectionColor = lerp(float3(Reflectance, Reflectance, Reflectance), BaseColor, Metallic);
    // Compute the reflection vector and use it to sample the sky probe for reflections.
    float3 ReflectionVector = reflect(-ViewDirWS, NormalWS);
    float3 SpecularAmbient = GlossyEnvironmentReflection(ReflectionVector, PositionWS, 1 - Smoothness, 1, screenspaceUV);
    
    return (DiffuseAmbient + SpecularAmbient) * AmbientOcclusion;
}

Пример узла настраиваемой функции графа шейдера

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

Чтобы узнать, как использовать функцию GlossyEnvironmentReflection в узле пользовательской функции:

  1. В примерной сцене откройте граф шейдера CustomLightingSimple.

  2. Перейдите к подграфу SampleReflectionProbes.

  3. Проверьте узел URPReflectionProbe. В узле содержится код HLSL, использующий функцию GlossyEnvironmentReflection:

    #ifdef SHADERGRAPH_PREVIEW
        reflection = float3(0,0,0);
    #else
        reflection = GlossyEnvironmentReflection(reflectVector, positionWS, roughness, 1.0h, screenspaceUV);
    #endif
    

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