Version: Unity 6.0 (6000.0)
언어 : 한국어
커스텀 URP 셰이더에서 조명 사용
커스텀 URP 셰이더에서 그림자 사용

Use indirect lighting in a custom URP shader

To use indirect lighting in a custom Universal Render Pipeline (URP) shader, follow these steps:

  1. Add an #include line inside the HLSLPROGRAM block in your shader file. Refer to the sections on this page for specific include file paths.
  2. Use any of the methods from the following sections.

Use reflection probes in a custom URP shader

To use reflection probes or the skybox, use the following #include line:

#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/GlobalIllumination.hlsl"
Method Syntax Description
GlossyEnvironmentReflection half3 GlossyEnvironmentReflection(half3 reflectVector, float3 positionWS, half perceptualRoughness, half occlusion, float2 normalizedScreenSpaceUV) Samples reflection probes if the object is within a reflection probe volume. Samples the skybox otherwise. The function supports reflection probe blending.
The perceptualRoughness argument selects the mip level of the sampled texture. The higher the value, the more blurred the reflections look.
The occlusion argument is the reflection probe attenuation factor.
The normalizedScreenSpaceUV argument is the normalized screen space position of the fragment.

The GlossyEnvironmentReflection function has the following simpler overload, which does not support blending:

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

Sample Adaptive Probe Volumes

To sample Adaptive Probe Volumes (APV), use the following #include line:

#include "Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeVolume.hlsl"
Method Syntax Description
EvaluateAdaptiveProbeVolume void EvaluateAdaptiveProbeVolume(in float3 posWS, in float3 normalWS, in float3 viewDir, in float2 positionSS, in uint renderingLayer, out float3 bakeDiffuseLighting) Samples lighting from Adaptive Probe Volumes.
The positionSS argument is the screen space position of a fragment that is being rendered.
The renderingLayer argument is the rendering layer mask.

Sample light probes

To sample light probes, use the following #include line:

#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/AmbientProbe.hlsl"
Method Syntax Description
SampleSH real3 SampleSH(real3 normalWS) Sample light probes.

Example

The following URP shader code computes diffuse and specular ambient light using the GlossyEnvironmentReflection function.

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 custom function node example

Shader Graph Feature Examples contain examples of custom lighting models.

To learn how to use the GlossyEnvironmentReflection function in a custom function node:

  1. In the example scene, open the CustomLightingSimple shader graph.

  2. Navigate to the SampleReflectionProbes sub-graph.

  3. Inspect the URPReflectionProbe node. The node contains the HLSL code that uses the GlossyEnvironmentReflection function:

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

Additional resources

커스텀 URP 셰이더에서 조명 사용
커스텀 URP 셰이더에서 그림자 사용
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961