Shader "Hidden/HDRP_TerrainVisualization" { Properties { [HideInInspector] [ToggleUI] _EnableHeightBlend("EnableHeightBlend", Float) = 0.0 _HeightTransition("Height Transition", Range(0, 1.0)) = 0.0 // Stencil state // Forward [HideInInspector] _StencilRef("_StencilRef", Int) = 2 // StencilLightingUsage.RegularLighting [HideInInspector] _StencilWriteMask("_StencilWriteMask", Int) = 3 // StencilMask.Lighting // GBuffer [HideInInspector] _StencilRefGBuffer("_StencilRefGBuffer", Int) = 2 // StencilLightingUsage.RegularLighting [HideInInspector] _StencilWriteMaskGBuffer("_StencilWriteMaskGBuffer", Int) = 3 // StencilMask.Lighting // Depth prepass [HideInInspector] _StencilRefDepth("_StencilRefDepth", Int) = 0 // Nothing [HideInInspector] _StencilWriteMaskDepth("_StencilWriteMaskDepth", Int) = 32 // DoesntReceiveSSR // Blending state [HideInInspector] _ZWrite ("__zw", Float) = 1.0 [HideInInspector] _CullMode("__cullmode", Float) = 2.0 [HideInInspector] _ZTestDepthEqualForOpaque("_ZTestDepthEqualForOpaque", Int) = 4 // Less equal [HideInInspector] _ZTestGBuffer("_ZTestGBuffer", Int) = 4 [ToggleUI] _EnableInstancedPerPixelNormal("Instanced per pixel normal", Float) = 1.0 //Heatmap Data [HideInInspector][PerRenderData] _HeatHeightmap("Heat Height map", 2D) = "grey" {} [HideInInspector] _HeatmapGradient("Heat Map Gradient", 2D) = "grey" {} [HideInInspector] _HeatmapData("Heatmap Data", Vector) = (0,0,0,0) // (Gradient Max, Gradient Min, Sea Level, 0) //Splatmap Data [HideInInspector][PerRenderData] _SplatmapTex("Splatmap Texture", 2D) = "grey" {} // Caution: C# code in BaseLitUI.cs call LightmapEmissionFlagsProperty() which assume that there is an existing "_EmissionColor" // value that exist to identify if the GI emission need to be enabled. // In our case we don't use such a mechanism but need to keep the code quiet. We declare the value and always enable it. // TODO: Fix the code in legacy unity so we can customize the behavior for GI [HideInInspector] _EmissionColor("Color", Color) = (1, 1, 1) // HACK: GI Baking system relies on some properties existing in the shader ("_MainTex", "_Cutoff" and "_Color") for opacity handling, so we need to store our version of those parameters in the hard-coded name the GI baking system recognizes. [HideInInspector] _MainTex("Albedo", 2D) = "white" {} [HideInInspector] _Color("Color", Color) = (1,1,1,1) [HideInInspector] [ToggleUI] _SupportDecals("Support Decals", Float) = 1.0 [HideInInspector] [ToggleUI] _ReceivesSSR("Receives SSR", Float) = 1.0 } HLSLINCLUDE #pragma target 4.5 #pragma only_renderers d3d11 ps4 xboxone vulkan metal switch // Terrain builtin keywords #pragma shader_feature_local _TERRAIN_8_LAYERS #pragma shader_feature_local _NORMALMAP #pragma shader_feature_local _MASKMAP #pragma shader_feature_local _TERRAIN_BLEND_HEIGHT // Sample normal in pixel shader when doing instancing #pragma shader_feature_local _TERRAIN_INSTANCED_PERPIXEL_NORMAL #pragma shader_feature_local _DISABLE_DECALS // Visualization keywords #pragma multi_compile _ _HEATMAP #pragma multi_compile LOCAL_SPACE WORLD_SPACE //Local space or world space heatmap #pragma multi_compile _ _SPLATMAP_PREVIEW //enable GPU instancing support #pragma multi_compile_instancing #pragma instancing_options assumeuniformscaling nomatrices nolightprobe nolightmap // All our shaders use same name for entry point #pragma vertex Vert #pragma fragment Frag #include "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/TerrainLit/TerrainLit_Splatmap_Includes.hlsl" ENDHLSL SubShader { // This tags allow to use the shader replacement features Tags { "RenderPipeline" = "HDRenderPipeline" "RenderType" = "Opaque" "SplatCount" = "8" "MaskMapR" = "Metallic" "MaskMapG" = "AO" "MaskMapB" = "Height" "MaskMapA" = "Smoothness" "DiffuseA" = "Smoothness (becomes Density when Mask map is assigned)" // when MaskMap is disabled "DiffuseA_MaskMapUsed" = "Density" // when MaskMap is enabled } // Caution: The outline selection in the editor use the vertex shader/hull/domain shader of the first pass declare. So it should not bethe meta pass. Pass { Name "GBuffer" Tags { "LightMode" = "GBuffer" } // This will be only for opaque object based on the RenderQueue index Cull[_CullMode] ZTest[_ZTestGBuffer] Stencil { WriteMask[_StencilWriteMaskGBuffer] Ref[_StencilRefGBuffer] Comp Always Pass Replace } HLSLPROGRAM #pragma multi_compile _ DEBUG_DISPLAY #pragma multi_compile _ LIGHTMAP_ON #pragma multi_compile _ DIRLIGHTMAP_COMBINED #pragma multi_compile _ DYNAMICLIGHTMAP_ON #pragma multi_compile _ SHADOWS_SHADOWMASK // Setup DECALS_OFF so the shader stripper can remove variants #pragma multi_compile DECALS_OFF DECALS_3RT DECALS_4RT #pragma multi_compile _ LIGHT_LAYERS #define SHADERPASS SHADERPASS_GBUFFER #include "Packages/com.unity.terrain-tools/Shaders/Visualization/HDRP/HDRP_TerrainVisualizationTemplate.hlsl" #include "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/TerrainLit/TerrainLit_Splatmap.hlsl" ENDHLSL } UsePass "HDRP/TerrainLit/META" UsePass "HDRP/TerrainLit/ShadowCaster" UsePass "HDRP/TerrainLit/DepthOnly" Pass { Name "Forward" Tags { "LightMode" = "Forward" } // This will be only for transparent object based on the RenderQueue index Stencil { WriteMask [_StencilWriteMask] Ref [_StencilRef] Comp Always Pass Replace } // In case of forward we want to have depth equal for opaque mesh ZTest [_ZTestDepthEqualForOpaque] ZWrite [_ZWrite] Cull [_CullMode] HLSLPROGRAM #pragma multi_compile _ DEBUG_DISPLAY #pragma multi_compile _ LIGHTMAP_ON #pragma multi_compile _ DIRLIGHTMAP_COMBINED #pragma multi_compile _ DYNAMICLIGHTMAP_ON #pragma multi_compile _ SHADOWS_SHADOWMASK #pragma multi_compile SCREEN_SPACE_SHADOWS_OFF SCREEN_SPACE_SHADOWS_ON // Setup DECALS_OFF so the shader stripper can remove variants #pragma multi_compile DECALS_OFF DECALS_3RT DECALS_4RT // Supported shadow modes per light type #pragma multi_compile SHADOW_LOW SHADOW_MEDIUM SHADOW_HIGH #pragma multi_compile USE_FPTL_LIGHTLIST USE_CLUSTERED_LIGHTLIST #define SHADERPASS SHADERPASS_FORWARD #include "Packages/com.unity.terrain-tools/Shaders/Visualization/HDRP/HDRP_TerrainVisualizationTemplate.hlsl" #include "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/TerrainLit/TerrainLit_Splatmap.hlsl" ENDHLSL } UsePass "Hidden/Nature/Terrain/Utilities/PICKING" UsePass "Hidden/Nature/Terrain/Utilities/SELECTION" } CustomEditor "UnityEditor.Experimental.Rendering.HDPipeline.TerrainLitGUI" Fallback "Hidden/InternalErrorShader" }