123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- Shader "Lux URP/Depth Only"
- {
- Properties
- {
- [Header(Surface Options)]
- [Space(8)]
- [Enum(UnityEngine.Rendering.CullMode)]
- _Cull ("Culling", Float) = 2
- [Toggle(_ALPHATEST_ON)]
- _AlphaClip ("Alpha Clipping", Float) = 0.0
- _Cutoff (" Threshold", Range(0.0, 1.0)) = 0.5
- [Header(Surface Inputs)]
- [Space(8)]
- [MainTexture]
- _BaseMap ("Albedo (RGB) Alpha (A)", 2D) = "white" {}
- }
- SubShader
- {
- Tags
- {
- "RenderPipeline" = "UniversalPipeline"
- "RenderType" = "Opaque"
- "Queue" = "Geometry"
- }
- LOD 100
- // Depth -----------------------------------------------------
- // Pass needed to receive proper shadows
- Pass
- {
- Tags{"LightMode" = "DepthOnly"}
- ZWrite On
- ColorMask 0
- Cull [_Cull]
- HLSLPROGRAM
- // Required to compile gles 2.0 with standard srp library
- #pragma prefer_hlslcc gles
- #pragma exclude_renderers d3d11_9x
- #pragma target 2.0
- #pragma vertex DepthOnlyVertex
- #pragma fragment DepthOnlyFragment
- // -------------------------------------
- // Material Keywords
- #pragma shader_feature_local _ALPHATEST_ON
- //--------------------------------------
- // GPU Instancing
- #pragma multi_compile_instancing
-
- #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
- // Material Inputs
- CBUFFER_START(UnityPerMaterial)
- half _Cutoff;
- CBUFFER_END
- #if defined(_ALPHATEST_ON)
- TEXTURE2D(_BaseMap); SAMPLER(sampler_BaseMap); float4 _BaseMap_ST;
- #endif
- struct VertexInput {
- float3 positionOS : POSITION;
- float2 texcoord : TEXCOORD0;
- UNITY_VERTEX_INPUT_INSTANCE_ID
- };
- struct VertexOutput {
- float4 positionCS : SV_POSITION;
- float2 uv : TEXCOORD0;
- };
- VertexOutput DepthOnlyVertex(VertexInput input)
- {
- VertexOutput output = (VertexOutput)0;
- UNITY_SETUP_INSTANCE_ID(input);
- UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
- #if defined(_ALPHATEST_ON)
- output.uv = TRANSFORM_TEX(input.texcoord, _BaseMap);
- #endif
- output.positionCS = TransformObjectToHClip(input.positionOS.xyz);
- return output;
- }
- half4 DepthOnlyFragment(VertexOutput input) : SV_TARGET
- {
- UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
- #if defined(_ALPHATEST_ON)
- half mask = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, input.uv.xy).a;
- clip (mask - _Cutoff);
- #endif
- return 0;
- }
- ENDHLSL
- }
- // Depth Normal ---------------------------------------------
- // This pass is used when drawing to a _CameraNormalsTexture texture
- Pass
- {
- Name "DepthNormals"
- Tags{"LightMode" = "DepthNormals"}
- ZWrite On
- Cull[_Cull]
- HLSLPROGRAM
- #pragma exclude_renderers d3d11_9x
- #pragma target 2.0
- #pragma vertex DepthNormalVertex
- #pragma fragment DepthNormalFragment
- // -------------------------------------
- // Material Keywords
- #pragma shader_feature_local _ALPHATEST_ON // not per fragment!
- //--------------------------------------
- // GPU Instancing
- #pragma multi_compile_instancing
- // #pragma multi_compile _ DOTS_INSTANCING_ON // needs shader target 4.5
-
- #define DEPTHNORMALPASS
- #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
- CBUFFER_START(UnityPerMaterial)
- half _Cutoff;
- CBUFFER_END
- #if defined(_ALPHATEST_ON)
- TEXTURE2D(_BaseMap); SAMPLER(sampler_BaseMap); float4 _BaseMap_ST;
- #endif
- struct VertexInput {
- float3 positionOS : POSITION;
- float2 texcoord : TEXCOORD0;
- float3 normalOS : NORMAL;
- UNITY_VERTEX_INPUT_INSTANCE_ID
- };
- struct VertexOutput {
- float4 positionCS : SV_POSITION;
- float2 uv : TEXCOORD0;
- half3 normalWS : TEXCOORD1;
- };
- VertexOutput DepthNormalVertex(VertexInput input)
- {
- VertexOutput output = (VertexOutput)0;
- UNITY_SETUP_INSTANCE_ID(input);
- UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
- #if defined(_ALPHATEST_ON)
- output.uv.xy = TRANSFORM_TEX(input.texcoord, _BaseMap);
- #endif
- output.positionCS = TransformObjectToHClip(input.positionOS.xyz);
- VertexNormalInputs normalInput = GetVertexNormalInputs(input.normalOS, float4(1,1,1,1)); //input.tangentOS);
- output.normalWS = NormalizeNormalPerVertex(normalInput.normalWS);
- return output;
- }
- half4 DepthNormalFragment(VertexOutput input) : SV_TARGET
- {
- UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
- #if defined(_ALPHATEST_ON)
- half mask = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, input.uv.xy).a;
- clip (mask - _Cutoff);
- #endif
- float3 normal = input.normalWS;
- return float4(PackNormalOctRectEncode(TransformWorldToViewDir(normal, true)), 0.0, 0.0);
- }
- ENDHLSL
- }
- // End Passes -----------------------------------------------------
-
- }
- FallBack "Hidden/InternalErrorShader"
- //CustomEditor "LuxURPUniversalCustomShaderGUI"
- }
|