Shader "NLD/NLD_Test" { Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" } LOD 100 Pass { HLSLPROGRAM #pragma vertex vert #pragma fragment frag // 阴影相关定义 #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS //开启额外光源 #pragma multi_compile _ _MAIN_LIGHT_SHADOWS //主光源阴影 #pragma multi_compile _ _MAIN_LIGHT_SHADOWS_CASCADE //主光源层级阴影是否开启 #pragma multi_compile _ _ADDITIONAL_LIGHT_SHADOWS //额外光源阴影 #pragma multi_compile _ _SHADOWS_SOFT //软阴影 #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 posSV : SV_POSITION; float3 posWS : TEXCOORD1; }; sampler2D _MainTex; float4 _MainTex_ST; v2f vert (appdata v) { v2f o; o.posSV = TransformObjectToHClip(v.vertex); o.posWS = TransformObjectToWorld(v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTex); return o; } half4 frag (v2f i) : SV_Target { // sample the texture half4 col = tex2D(_MainTex, i.uv); // 计算阴影uv float4 shadowCoord = TransformWorldToShadowCoord(i.posWS); float shadow = MainLightRealtimeShadow(shadowCoord); return half4(shadow, shadow, shadow, 1.0); return col; } ENDHLSL } } }