Shader "Shader Graphs/Decal NEW Generated" { Properties { [NoScaleOffset]Base_Map("Base Map", 2D) = "white" {} [Normal][NoScaleOffset]Normal_Map("Normal Map", 2D) = "bump" {} Normal_Blend("Normal Blend", Float) = 0.5 _Emission("Emission", Color) = (0, 0, 0, 0) _Metallic_ARG("Metallic_ARG", Range(0, 1)) = 0 _Smoothness_ARG("Smoothness_ARG", Range(0, 1)) = 0 _MAOS_ARG("MAOS_ARG", Range(0, 1)) = 1 [HideInInspector]_DrawOrder("Draw Order", Range(-50, 50)) = 0 [HideInInspector][Enum(Depth Bias, 0, View Bias, 1)]_DecalMeshBiasType("DecalMesh BiasType", Float) = 0 [HideInInspector]_DecalMeshDepthBias("DecalMesh DepthBias", Float) = 0 [HideInInspector]_DecalMeshViewBias("DecalMesh ViewBias", Float) = 0 [HideInInspector][NoScaleOffset]unity_Lightmaps("unity_Lightmaps", 2DArray) = "" {} [HideInInspector][NoScaleOffset]unity_LightmapsInd("unity_LightmapsInd", 2DArray) = "" {} [HideInInspector][NoScaleOffset]unity_ShadowMasks("unity_ShadowMasks", 2DArray) = "" {} } SubShader { Tags { "RenderPipeline"="UniversalPipeline" // RenderType: "PreviewType"="Plane" // Queue: "DisableBatching"="False" "ShaderGraphShader"="true" "ShaderGraphTargetId"="UniversalDecalSubTarget" } Pass { Name "DBufferProjector" Tags { "LightMode" = "DBufferProjector" } // Render State Cull Front Blend 0 SrcAlpha OneMinusSrcAlpha, Zero OneMinusSrcAlpha Blend 1 SrcAlpha OneMinusSrcAlpha, Zero OneMinusSrcAlpha Blend 2 SrcAlpha OneMinusSrcAlpha, Zero OneMinusSrcAlpha ZTest Greater ZWrite Off ColorMask RGBA ColorMask RGBA 1 ColorMask RGBA 2 // Debug // // -------------------------------------------------- // Pass HLSLPROGRAM // Pragmas #pragma target 4.5 #pragma exclude_renderers gles3 glcore #pragma vertex Vert #pragma fragment Frag #pragma multi_compile_instancing #pragma editor_sync_compilation // Keywords #pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 #pragma multi_compile _ _DECAL_LAYERS // GraphKeywords: #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" // Defines #define ATTRIBUTES_NEED_TEXCOORD0 #define VARYINGS_NEED_TEXCOORD0 #define HAVE_MESH_MODIFICATION #define SHADERPASS SHADERPASS_DBUFFER_PROJECTOR #define _MATERIAL_AFFECTS_ALBEDO 1 #define _MATERIAL_AFFECTS_NORMAL 1 #define _MATERIAL_AFFECTS_NORMAL_BLEND 1 #define _MATERIAL_AFFECTS_MAOS 1 // -- Properties used by ScenePickingPass #ifdef SCENEPICKINGPASS float4 _SelectionID; #endif #if _RENDER_PASS_ENABLED #define GBUFFER3 0 #define GBUFFER4 1 FRAMEBUFFER_INPUT_X_HALF(GBUFFER3); FRAMEBUFFER_INPUT_X_HALF(GBUFFER4); #endif // Includes #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRendering.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/DebugMipmapStreamingMacros.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ProbeVolumeVariants.hlsl" #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DecalInput.hlsl" #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderVariablesDecal.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DBuffer.hlsl" // -------------------------------------------------- // Structs and Packing struct Attributes { float3 positionOS : POSITION; float4 uv0 : TEXCOORD0; #if UNITY_ANY_INSTANCING_ENABLED || defined(ATTRIBUTES_NEED_INSTANCEID) uint instanceID : INSTANCEID_SEMANTIC; #endif }; struct Varyings { float4 positionCS : SV_POSITION; float4 texCoord0; #if UNITY_ANY_INSTANCING_ENABLED || defined(VARYINGS_NEED_INSTANCEID) uint instanceID : CUSTOM_INSTANCE_ID; #endif #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) uint stereoTargetEyeIndexAsBlendIdx0 : BLENDINDICES0; #endif #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) uint stereoTargetEyeIndexAsRTArrayIdx : SV_RenderTargetArrayIndex; #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMANTIC; #endif }; struct SurfaceDescriptionInputs { float3 TangentSpaceNormal; float4 uv0; }; struct VertexDescriptionInputs { }; struct PackedVaryings { float4 positionCS : SV_POSITION; float4 texCoord0 : INTERP0; #if UNITY_ANY_INSTANCING_ENABLED || defined(VARYINGS_NEED_INSTANCEID) uint instanceID : CUSTOM_INSTANCE_ID; #endif #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) uint stereoTargetEyeIndexAsBlendIdx0 : BLENDINDICES0; #endif #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) uint stereoTargetEyeIndexAsRTArrayIdx : SV_RenderTargetArrayIndex; #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMANTIC; #endif }; PackedVaryings PackVaryings (Varyings input) { PackedVaryings output; ZERO_INITIALIZE(PackedVaryings, output); output.positionCS = input.positionCS; output.texCoord0.xyzw = input.texCoord0; #if UNITY_ANY_INSTANCING_ENABLED || defined(VARYINGS_NEED_INSTANCEID) output.instanceID = input.instanceID; #endif #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) output.stereoTargetEyeIndexAsBlendIdx0 = input.stereoTargetEyeIndexAsBlendIdx0; #endif #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) output.stereoTargetEyeIndexAsRTArrayIdx = input.stereoTargetEyeIndexAsRTArrayIdx; #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) output.cullFace = input.cullFace; #endif return output; } Varyings UnpackVaryings (PackedVaryings input) { Varyings output; output.positionCS = input.positionCS; output.texCoord0 = input.texCoord0.xyzw; #if UNITY_ANY_INSTANCING_ENABLED || defined(VARYINGS_NEED_INSTANCEID) output.instanceID = input.instanceID; #endif #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) output.stereoTargetEyeIndexAsBlendIdx0 = input.stereoTargetEyeIndexAsBlendIdx0; #endif #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) output.stereoTargetEyeIndexAsRTArrayIdx = input.stereoTargetEyeIndexAsRTArrayIdx; #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) output.cullFace = input.cullFace; #endif return output; } // -------------------------------------------------- // Graph // Graph Properties CBUFFER_START(UnityPerMaterial) float4 Base_Map_TexelSize; float4 Normal_Map_TexelSize; float Normal_Blend; float4 _Emission; float _Metallic_ARG; float _MAOS_ARG; float _Smoothness_ARG; float _DrawOrder; float _DecalMeshBiasType; float _DecalMeshDepthBias; float _DecalMeshViewBias; UNITY_TEXTURE_STREAMING_DEBUG_VARS; CBUFFER_END // Object and Global properties SAMPLER(SamplerState_Linear_Repeat); TEXTURE2D(Base_Map); SAMPLER(samplerBase_Map); TEXTURE2D(Normal_Map); SAMPLER(samplerNormal_Map); // Graph Includes // GraphIncludes: // Graph Functions void Unity_Multiply_float_float(float A, float B, out float Out) { Out = A * B; } // Graph Vertex struct VertexDescription { }; VertexDescription VertexDescriptionFunction(VertexDescriptionInputs IN) { VertexDescription description = (VertexDescription)0; return description; } // Graph Pixel struct SurfaceDescription { float3 BaseColor; float Alpha; float3 NormalTS; float NormalAlpha; float Metallic; float Occlusion; float Smoothness; float MAOSAlpha; }; SurfaceDescription SurfaceDescriptionFunction(SurfaceDescriptionInputs IN) { SurfaceDescription surface = (SurfaceDescription)0; UnityTexture2D _Property_9f1059a7a93a46ccab349515214f3ed2_Out_0_Texture2D = UnityBuildTexture2DStructNoScale(Base_Map); float4 _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4 = SAMPLE_TEXTURE2D(_Property_9f1059a7a93a46ccab349515214f3ed2_Out_0_Texture2D.tex, _Property_9f1059a7a93a46ccab349515214f3ed2_Out_0_Texture2D.samplerstate, _Property_9f1059a7a93a46ccab349515214f3ed2_Out_0_Texture2D.GetTransformedUV(IN.uv0.xy) ); float _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_R_4_Float = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.r; float _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_G_5_Float = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.g; float _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_B_6_Float = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.b; float _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_A_7_Float = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.a; UnityTexture2D _Property_360e6833e8d64d75827ab98987b2b545_Out_0_Texture2D = UnityBuildTexture2DStructNoScale(Normal_Map); float4 _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4 = SAMPLE_TEXTURE2D(_Property_360e6833e8d64d75827ab98987b2b545_Out_0_Texture2D.tex, _Property_360e6833e8d64d75827ab98987b2b545_Out_0_Texture2D.samplerstate, _Property_360e6833e8d64d75827ab98987b2b545_Out_0_Texture2D.GetTransformedUV(IN.uv0.xy) ); _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.rgb = UnpackNormal(_SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4); float _SampleTexture2D_1300b7cb738f4b18927411750039acd2_R_4_Float = _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.r; float _SampleTexture2D_1300b7cb738f4b18927411750039acd2_G_5_Float = _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.g; float _SampleTexture2D_1300b7cb738f4b18927411750039acd2_B_6_Float = _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.b; float _SampleTexture2D_1300b7cb738f4b18927411750039acd2_A_7_Float = _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.a; float _Property_91d01e73dcf34e7d96a9e731fb50e308_Out_0_Float = Normal_Blend; float _Multiply_86a3eb218544413fb0fe50b275affa91_Out_2_Float; Unity_Multiply_float_float(_SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_A_7_Float, _Property_91d01e73dcf34e7d96a9e731fb50e308_Out_0_Float, _Multiply_86a3eb218544413fb0fe50b275affa91_Out_2_Float); float _Property_536c4c3009504e63ade4e6e77148fba6_Out_0_Float = _Metallic_ARG; float _Property_6f4b84479ee74be4a15c88d81536f15b_Out_0_Float = _Smoothness_ARG; float _Property_597ae0960908464a9fc48d73ac31b4ce_Out_0_Float = _MAOS_ARG; surface.BaseColor = (_SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.xyz); surface.Alpha = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_A_7_Float; surface.NormalTS = (_SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.xyz); surface.NormalAlpha = _Multiply_86a3eb218544413fb0fe50b275affa91_Out_2_Float; surface.Metallic = _Property_536c4c3009504e63ade4e6e77148fba6_Out_0_Float; surface.Occlusion = float(1); surface.Smoothness = _Property_6f4b84479ee74be4a15c88d81536f15b_Out_0_Float; surface.MAOSAlpha = _Property_597ae0960908464a9fc48d73ac31b4ce_Out_0_Float; return surface; } // -------------------------------------------------- // Build Graph Inputs // $features.graphVertex: $include("VertexAnimation.template.hlsl") // ^ ERROR: $include cannot find file : VertexAnimation.template.hlsl. Looked into: // Packages/com.unity.shadergraph/Editor/Generation/Templates // $features.graphPixel: $include("SharedCode.template.hlsl") // ^ ERROR: $include cannot find file : SharedCode.template.hlsl. Looked into: // Packages/com.unity.shadergraph/Editor/Generation/Templates SurfaceDescriptionInputs BuildSurfaceDescriptionInputs(Varyings input) { SurfaceDescriptionInputs output; ZERO_INITIALIZE(SurfaceDescriptionInputs, output); /* WARNING: $splice Could not find named fragment 'CustomInterpolatorCopyToSDI' */ output.TangentSpaceNormal = float3(0.0f, 0.0f, 1.0f); #if UNITY_UV_STARTS_AT_TOP #else #endif output.uv0 = input.texCoord0; #if UNITY_ANY_INSTANCING_ENABLED #else // TODO: XR support for procedural instancing because in this case UNITY_ANY_INSTANCING_ENABLED is not defined and instanceID is incorrect. #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) #define BUILD_SURFACE_DESCRIPTION_INPUTS_OUTPUT_FACESIGN output.FaceSign = IS_FRONT_VFACE(input.cullFace, true, false); #else #define BUILD_SURFACE_DESCRIPTION_INPUTS_OUTPUT_FACESIGN #endif #undef BUILD_SURFACE_DESCRIPTION_INPUTS_OUTPUT_FACESIGN return output; } // -------------------------------------------------- // Build Surface Data void GetSurfaceData(Varyings input, float4 positionCS, float angleFadeFactor, out DecalSurfaceData surfaceData) { #if (SHADERPASS == SHADERPASS_DBUFFER_PROJECTOR) || (SHADERPASS == SHADERPASS_FORWARD_EMISSIVE_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_SCREEN_SPACE_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_GBUFFER_PROJECTOR) half4x4 normalToWorld = UNITY_ACCESS_INSTANCED_PROP(Decal, _NormalToWorld); half fadeFactor = clamp(normalToWorld[0][3], 0.0f, 1.0f) * angleFadeFactor; float2 scale = float2(normalToWorld[3][0], normalToWorld[3][1]); float2 offset = float2(normalToWorld[3][2], normalToWorld[3][3]); input.texCoord0.xy = input.texCoord0.xy * scale + offset; half3 normalWS = TransformObjectToWorldDir(half3(0, 1, 0)); half3 tangentWS = TransformObjectToWorldDir(half3(1, 0, 0)); half3 bitangentWS = TransformObjectToWorldDir(half3(0, 0, 1)); half sign = dot(cross(normalWS, tangentWS), bitangentWS) > 0 ? 1 : -1; #else #if defined(LOD_FADE_CROSSFADE) && USE_UNITY_CROSSFADE LODFadeCrossFade(positionCS); #endif half fadeFactor = half(1.0); #endif SurfaceDescriptionInputs surfaceDescriptionInputs = BuildSurfaceDescriptionInputs(input); SurfaceDescription surfaceDescription = SurfaceDescriptionFunction(surfaceDescriptionInputs); // setup defaults -- these are used if the graph doesn't output a value ZERO_INITIALIZE(DecalSurfaceData, surfaceData); surfaceData.occlusion = half(1.0); surfaceData.smoothness = half(0); #ifdef _MATERIAL_AFFECTS_NORMAL surfaceData.normalWS.w = half(1.0); #else surfaceData.normalWS.w = half(0.0); #endif // copy across graph values, if defined surfaceData.baseColor.xyz = half3(surfaceDescription.BaseColor); surfaceData.baseColor.w = half(surfaceDescription.Alpha * fadeFactor); #if (SHADERPASS == SHADERPASS_DBUFFER_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_SCREEN_SPACE_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_GBUFFER_PROJECTOR) #if defined(_MATERIAL_AFFECTS_NORMAL) surfaceData.normalWS.xyz = normalize(mul((half3x3)normalToWorld, surfaceDescription.NormalTS.xyz)); #else surfaceData.normalWS.xyz = normalize(normalToWorld[2].xyz); #endif #elif (SHADERPASS == SHADERPASS_DBUFFER_MESH) || (SHADERPASS == SHADERPASS_DECAL_SCREEN_SPACE_MESH) || (SHADERPASS == SHADERPASS_DECAL_GBUFFER_MESH) #if defined(_MATERIAL_AFFECTS_NORMAL) float sgn = input.tangentWS.w; // should be either +1 or -1 float3 bitangent = sgn * cross(input.normalWS.xyz, input.tangentWS.xyz); half3x3 tangentToWorld = half3x3(input.tangentWS.xyz, bitangent.xyz, input.normalWS.xyz); // We need to normalize as we use mikkt tangent space and this is expected (tangent space is not normalize) surfaceData.normalWS.xyz = normalize(TransformTangentToWorld(surfaceDescription.NormalTS, tangentToWorld)); #else surfaceData.normalWS.xyz = normalize(half3(input.normalWS)); // Default to vertex normal #endif #endif surfaceData.normalWS.w = surfaceDescription.NormalAlpha * fadeFactor; // In case of Smoothness / AO / Metal, all the three are always computed but color mask can change surfaceData.metallic = half(surfaceDescription.Metallic); surfaceData.occlusion = half(surfaceDescription.Occlusion); surfaceData.smoothness = half(surfaceDescription.Smoothness); surfaceData.MAOSAlpha = half(surfaceDescription.MAOSAlpha * fadeFactor); } // -------------------------------------------------- // Main #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/Varyings.hlsl" #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPassDecal.hlsl" ENDHLSL } Pass { Name "DecalScreenSpaceProjector" Tags { "LightMode" = "DecalScreenSpaceProjector" } // Render State Cull Front Blend SrcAlpha OneMinusSrcAlpha ZTest Greater ZWrite Off // Debug // // -------------------------------------------------- // Pass HLSLPROGRAM // Pragmas #pragma target 2.5 #pragma vertex Vert #pragma fragment Frag #pragma multi_compile_instancing #pragma multi_compile_fog #pragma editor_sync_compilation // Keywords #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS #pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS #pragma multi_compile_fragment _ _SHADOWS_SOFT _SHADOWS_SOFT_LOW _SHADOWS_SOFT_MEDIUM _SHADOWS_SOFT_HIGH #pragma multi_compile _ _FORWARD_PLUS #pragma multi_compile_fragment _ _LIGHT_COOKIES #pragma multi_compile_fragment _ DEBUG_DISPLAY #pragma multi_compile _DECAL_NORMAL_BLEND_LOW _DECAL_NORMAL_BLEND_MEDIUM _DECAL_NORMAL_BLEND_HIGH #pragma multi_compile _ _DECAL_LAYERS // GraphKeywords: #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" // Defines #define ATTRIBUTES_NEED_NORMAL #define ATTRIBUTES_NEED_TEXCOORD0 #define VARYINGS_NEED_NORMAL_WS #define VARYINGS_NEED_TEXCOORD0 #define VARYINGS_NEED_FOG_AND_VERTEX_LIGHT #define VARYINGS_NEED_SH #define VARYINGS_NEED_STATIC_LIGHTMAP_UV #define VARYINGS_NEED_DYNAMIC_LIGHTMAP_UV #define VARYINGS_NEED_SHADOW_COORD #define HAVE_MESH_MODIFICATION #define SHADERPASS SHADERPASS_DECAL_SCREEN_SPACE_PROJECTOR #define _MATERIAL_AFFECTS_ALBEDO 1 #define _MATERIAL_AFFECTS_NORMAL 1 #define _MATERIAL_AFFECTS_NORMAL_BLEND 1 #define _MATERIAL_AFFECTS_MAOS 1 // -- Properties used by ScenePickingPass #ifdef SCENEPICKINGPASS float4 _SelectionID; #endif #if _RENDER_PASS_ENABLED #define GBUFFER3 0 #define GBUFFER4 1 FRAMEBUFFER_INPUT_X_HALF(GBUFFER3); FRAMEBUFFER_INPUT_X_HALF(GBUFFER4); #endif // Includes #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRendering.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/DebugMipmapStreamingMacros.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ProbeVolumeVariants.hlsl" #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DecalInput.hlsl" #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderVariablesDecal.hlsl" // -------------------------------------------------- // Structs and Packing struct Attributes { float3 positionOS : POSITION; float3 normalOS : NORMAL; float4 uv0 : TEXCOORD0; #if UNITY_ANY_INSTANCING_ENABLED || defined(ATTRIBUTES_NEED_INSTANCEID) uint instanceID : INSTANCEID_SEMANTIC; #endif }; struct Varyings { float4 positionCS : SV_POSITION; float3 normalWS; float4 texCoord0; #if defined(LIGHTMAP_ON) float2 staticLightmapUV; #endif #if defined(DYNAMICLIGHTMAP_ON) float2 dynamicLightmapUV; #endif #if !defined(LIGHTMAP_ON) float3 sh; #endif #if defined(USE_APV_PROBE_OCCLUSION) float4 probeOcclusion; #endif float4 fogFactorAndVertexLight; #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) float4 shadowCoord; #endif #if UNITY_ANY_INSTANCING_ENABLED || defined(VARYINGS_NEED_INSTANCEID) uint instanceID : CUSTOM_INSTANCE_ID; #endif #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) uint stereoTargetEyeIndexAsBlendIdx0 : BLENDINDICES0; #endif #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) uint stereoTargetEyeIndexAsRTArrayIdx : SV_RenderTargetArrayIndex; #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMANTIC; #endif }; struct SurfaceDescriptionInputs { float3 TangentSpaceNormal; float4 uv0; }; struct VertexDescriptionInputs { }; struct PackedVaryings { float4 positionCS : SV_POSITION; #if defined(LIGHTMAP_ON) float2 staticLightmapUV : INTERP0; #endif #if defined(DYNAMICLIGHTMAP_ON) float2 dynamicLightmapUV : INTERP1; #endif #if !defined(LIGHTMAP_ON) float3 sh : INTERP2; #endif #if defined(USE_APV_PROBE_OCCLUSION) float4 probeOcclusion : INTERP3; #endif #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) float4 shadowCoord : INTERP4; #endif float4 texCoord0 : INTERP5; float4 fogFactorAndVertexLight : INTERP6; float3 normalWS : INTERP7; #if UNITY_ANY_INSTANCING_ENABLED || defined(VARYINGS_NEED_INSTANCEID) uint instanceID : CUSTOM_INSTANCE_ID; #endif #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) uint stereoTargetEyeIndexAsBlendIdx0 : BLENDINDICES0; #endif #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) uint stereoTargetEyeIndexAsRTArrayIdx : SV_RenderTargetArrayIndex; #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMANTIC; #endif }; PackedVaryings PackVaryings (Varyings input) { PackedVaryings output; ZERO_INITIALIZE(PackedVaryings, output); output.positionCS = input.positionCS; #if defined(LIGHTMAP_ON) output.staticLightmapUV = input.staticLightmapUV; #endif #if defined(DYNAMICLIGHTMAP_ON) output.dynamicLightmapUV = input.dynamicLightmapUV; #endif #if !defined(LIGHTMAP_ON) output.sh = input.sh; #endif #if defined(USE_APV_PROBE_OCCLUSION) output.probeOcclusion = input.probeOcclusion; #endif #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) output.shadowCoord = input.shadowCoord; #endif output.texCoord0.xyzw = input.texCoord0; output.fogFactorAndVertexLight.xyzw = input.fogFactorAndVertexLight; output.normalWS.xyz = input.normalWS; #if UNITY_ANY_INSTANCING_ENABLED || defined(VARYINGS_NEED_INSTANCEID) output.instanceID = input.instanceID; #endif #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) output.stereoTargetEyeIndexAsBlendIdx0 = input.stereoTargetEyeIndexAsBlendIdx0; #endif #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) output.stereoTargetEyeIndexAsRTArrayIdx = input.stereoTargetEyeIndexAsRTArrayIdx; #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) output.cullFace = input.cullFace; #endif return output; } Varyings UnpackVaryings (PackedVaryings input) { Varyings output; output.positionCS = input.positionCS; #if defined(LIGHTMAP_ON) output.staticLightmapUV = input.staticLightmapUV; #endif #if defined(DYNAMICLIGHTMAP_ON) output.dynamicLightmapUV = input.dynamicLightmapUV; #endif #if !defined(LIGHTMAP_ON) output.sh = input.sh; #endif #if defined(USE_APV_PROBE_OCCLUSION) output.probeOcclusion = input.probeOcclusion; #endif #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) output.shadowCoord = input.shadowCoord; #endif output.texCoord0 = input.texCoord0.xyzw; output.fogFactorAndVertexLight = input.fogFactorAndVertexLight.xyzw; output.normalWS = input.normalWS.xyz; #if UNITY_ANY_INSTANCING_ENABLED || defined(VARYINGS_NEED_INSTANCEID) output.instanceID = input.instanceID; #endif #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) output.stereoTargetEyeIndexAsBlendIdx0 = input.stereoTargetEyeIndexAsBlendIdx0; #endif #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) output.stereoTargetEyeIndexAsRTArrayIdx = input.stereoTargetEyeIndexAsRTArrayIdx; #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) output.cullFace = input.cullFace; #endif return output; } // -------------------------------------------------- // Graph // Graph Properties CBUFFER_START(UnityPerMaterial) float4 Base_Map_TexelSize; float4 Normal_Map_TexelSize; float Normal_Blend; float4 _Emission; float _Metallic_ARG; float _MAOS_ARG; float _Smoothness_ARG; float _DrawOrder; float _DecalMeshBiasType; float _DecalMeshDepthBias; float _DecalMeshViewBias; UNITY_TEXTURE_STREAMING_DEBUG_VARS; CBUFFER_END // Object and Global properties SAMPLER(SamplerState_Linear_Repeat); TEXTURE2D(Base_Map); SAMPLER(samplerBase_Map); TEXTURE2D(Normal_Map); SAMPLER(samplerNormal_Map); // Graph Includes // GraphIncludes: // Graph Functions void Unity_Multiply_float_float(float A, float B, out float Out) { Out = A * B; } // Graph Vertex struct VertexDescription { }; VertexDescription VertexDescriptionFunction(VertexDescriptionInputs IN) { VertexDescription description = (VertexDescription)0; return description; } // Graph Pixel struct SurfaceDescription { float3 BaseColor; float Alpha; float3 NormalTS; float NormalAlpha; float Metallic; float Occlusion; float Smoothness; float MAOSAlpha; }; SurfaceDescription SurfaceDescriptionFunction(SurfaceDescriptionInputs IN) { SurfaceDescription surface = (SurfaceDescription)0; UnityTexture2D _Property_9f1059a7a93a46ccab349515214f3ed2_Out_0_Texture2D = UnityBuildTexture2DStructNoScale(Base_Map); float4 _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4 = SAMPLE_TEXTURE2D(_Property_9f1059a7a93a46ccab349515214f3ed2_Out_0_Texture2D.tex, _Property_9f1059a7a93a46ccab349515214f3ed2_Out_0_Texture2D.samplerstate, _Property_9f1059a7a93a46ccab349515214f3ed2_Out_0_Texture2D.GetTransformedUV(IN.uv0.xy) ); float _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_R_4_Float = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.r; float _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_G_5_Float = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.g; float _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_B_6_Float = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.b; float _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_A_7_Float = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.a; UnityTexture2D _Property_360e6833e8d64d75827ab98987b2b545_Out_0_Texture2D = UnityBuildTexture2DStructNoScale(Normal_Map); float4 _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4 = SAMPLE_TEXTURE2D(_Property_360e6833e8d64d75827ab98987b2b545_Out_0_Texture2D.tex, _Property_360e6833e8d64d75827ab98987b2b545_Out_0_Texture2D.samplerstate, _Property_360e6833e8d64d75827ab98987b2b545_Out_0_Texture2D.GetTransformedUV(IN.uv0.xy) ); _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.rgb = UnpackNormal(_SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4); float _SampleTexture2D_1300b7cb738f4b18927411750039acd2_R_4_Float = _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.r; float _SampleTexture2D_1300b7cb738f4b18927411750039acd2_G_5_Float = _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.g; float _SampleTexture2D_1300b7cb738f4b18927411750039acd2_B_6_Float = _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.b; float _SampleTexture2D_1300b7cb738f4b18927411750039acd2_A_7_Float = _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.a; float _Property_91d01e73dcf34e7d96a9e731fb50e308_Out_0_Float = Normal_Blend; float _Multiply_86a3eb218544413fb0fe50b275affa91_Out_2_Float; Unity_Multiply_float_float(_SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_A_7_Float, _Property_91d01e73dcf34e7d96a9e731fb50e308_Out_0_Float, _Multiply_86a3eb218544413fb0fe50b275affa91_Out_2_Float); float _Property_536c4c3009504e63ade4e6e77148fba6_Out_0_Float = _Metallic_ARG; float _Property_6f4b84479ee74be4a15c88d81536f15b_Out_0_Float = _Smoothness_ARG; float _Property_597ae0960908464a9fc48d73ac31b4ce_Out_0_Float = _MAOS_ARG; surface.BaseColor = (_SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.xyz); surface.Alpha = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_A_7_Float; surface.NormalTS = (_SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.xyz); surface.NormalAlpha = _Multiply_86a3eb218544413fb0fe50b275affa91_Out_2_Float; surface.Metallic = _Property_536c4c3009504e63ade4e6e77148fba6_Out_0_Float; surface.Occlusion = float(1); surface.Smoothness = _Property_6f4b84479ee74be4a15c88d81536f15b_Out_0_Float; surface.MAOSAlpha = _Property_597ae0960908464a9fc48d73ac31b4ce_Out_0_Float; return surface; } // -------------------------------------------------- // Build Graph Inputs // $features.graphVertex: $include("VertexAnimation.template.hlsl") // ^ ERROR: $include cannot find file : VertexAnimation.template.hlsl. Looked into: // Packages/com.unity.shadergraph/Editor/Generation/Templates // $features.graphPixel: $include("SharedCode.template.hlsl") // ^ ERROR: $include cannot find file : SharedCode.template.hlsl. Looked into: // Packages/com.unity.shadergraph/Editor/Generation/Templates SurfaceDescriptionInputs BuildSurfaceDescriptionInputs(Varyings input) { SurfaceDescriptionInputs output; ZERO_INITIALIZE(SurfaceDescriptionInputs, output); /* WARNING: $splice Could not find named fragment 'CustomInterpolatorCopyToSDI' */ output.TangentSpaceNormal = float3(0.0f, 0.0f, 1.0f); #if UNITY_UV_STARTS_AT_TOP #else #endif output.uv0 = input.texCoord0; #if UNITY_ANY_INSTANCING_ENABLED #else // TODO: XR support for procedural instancing because in this case UNITY_ANY_INSTANCING_ENABLED is not defined and instanceID is incorrect. #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) #define BUILD_SURFACE_DESCRIPTION_INPUTS_OUTPUT_FACESIGN output.FaceSign = IS_FRONT_VFACE(input.cullFace, true, false); #else #define BUILD_SURFACE_DESCRIPTION_INPUTS_OUTPUT_FACESIGN #endif #undef BUILD_SURFACE_DESCRIPTION_INPUTS_OUTPUT_FACESIGN return output; } // -------------------------------------------------- // Build Surface Data void GetSurfaceData(Varyings input, float4 positionCS, float angleFadeFactor, out DecalSurfaceData surfaceData) { #if (SHADERPASS == SHADERPASS_DBUFFER_PROJECTOR) || (SHADERPASS == SHADERPASS_FORWARD_EMISSIVE_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_SCREEN_SPACE_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_GBUFFER_PROJECTOR) half4x4 normalToWorld = UNITY_ACCESS_INSTANCED_PROP(Decal, _NormalToWorld); half fadeFactor = clamp(normalToWorld[0][3], 0.0f, 1.0f) * angleFadeFactor; float2 scale = float2(normalToWorld[3][0], normalToWorld[3][1]); float2 offset = float2(normalToWorld[3][2], normalToWorld[3][3]); input.texCoord0.xy = input.texCoord0.xy * scale + offset; half3 normalWS = TransformObjectToWorldDir(half3(0, 1, 0)); half3 tangentWS = TransformObjectToWorldDir(half3(1, 0, 0)); half3 bitangentWS = TransformObjectToWorldDir(half3(0, 0, 1)); half sign = dot(cross(normalWS, tangentWS), bitangentWS) > 0 ? 1 : -1; input.normalWS.xyz = normalWS; #else #if defined(LOD_FADE_CROSSFADE) && USE_UNITY_CROSSFADE LODFadeCrossFade(positionCS); #endif half fadeFactor = half(1.0); #endif SurfaceDescriptionInputs surfaceDescriptionInputs = BuildSurfaceDescriptionInputs(input); SurfaceDescription surfaceDescription = SurfaceDescriptionFunction(surfaceDescriptionInputs); // setup defaults -- these are used if the graph doesn't output a value ZERO_INITIALIZE(DecalSurfaceData, surfaceData); surfaceData.occlusion = half(1.0); surfaceData.smoothness = half(0); #ifdef _MATERIAL_AFFECTS_NORMAL surfaceData.normalWS.w = half(1.0); #else surfaceData.normalWS.w = half(0.0); #endif // copy across graph values, if defined surfaceData.baseColor.xyz = half3(surfaceDescription.BaseColor); surfaceData.baseColor.w = half(surfaceDescription.Alpha * fadeFactor); #if (SHADERPASS == SHADERPASS_DBUFFER_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_SCREEN_SPACE_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_GBUFFER_PROJECTOR) #if defined(_MATERIAL_AFFECTS_NORMAL) surfaceData.normalWS.xyz = normalize(mul((half3x3)normalToWorld, surfaceDescription.NormalTS.xyz)); #else surfaceData.normalWS.xyz = normalize(normalToWorld[2].xyz); #endif #elif (SHADERPASS == SHADERPASS_DBUFFER_MESH) || (SHADERPASS == SHADERPASS_DECAL_SCREEN_SPACE_MESH) || (SHADERPASS == SHADERPASS_DECAL_GBUFFER_MESH) #if defined(_MATERIAL_AFFECTS_NORMAL) float sgn = input.tangentWS.w; // should be either +1 or -1 float3 bitangent = sgn * cross(input.normalWS.xyz, input.tangentWS.xyz); half3x3 tangentToWorld = half3x3(input.tangentWS.xyz, bitangent.xyz, input.normalWS.xyz); // We need to normalize as we use mikkt tangent space and this is expected (tangent space is not normalize) surfaceData.normalWS.xyz = normalize(TransformTangentToWorld(surfaceDescription.NormalTS, tangentToWorld)); #else surfaceData.normalWS.xyz = normalize(half3(input.normalWS)); // Default to vertex normal #endif #endif surfaceData.normalWS.w = surfaceDescription.NormalAlpha * fadeFactor; // In case of Smoothness / AO / Metal, all the three are always computed but color mask can change surfaceData.metallic = half(surfaceDescription.Metallic); surfaceData.occlusion = half(surfaceDescription.Occlusion); surfaceData.smoothness = half(surfaceDescription.Smoothness); surfaceData.MAOSAlpha = half(surfaceDescription.MAOSAlpha * fadeFactor); } // -------------------------------------------------- // Main #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/Varyings.hlsl" #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPassDecal.hlsl" ENDHLSL } Pass { Name "DecalGBufferProjector" Tags { "LightMode" = "DecalGBufferProjector" } // Render State Cull Front Blend 0 SrcAlpha OneMinusSrcAlpha Blend 1 SrcAlpha OneMinusSrcAlpha Blend 2 SrcAlpha OneMinusSrcAlpha Blend 3 SrcAlpha OneMinusSrcAlpha ZTest Greater ZWrite Off ColorMask RGB ColorMask 0 1 ColorMask RGB 2 ColorMask RGB 3 // Debug // // -------------------------------------------------- // Pass HLSLPROGRAM // Pragmas #pragma target 4.5 #pragma exclude_renderers gles3 glcore #pragma vertex Vert #pragma fragment Frag #pragma multi_compile_instancing #pragma multi_compile_fog #pragma editor_sync_compilation // Keywords #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN #pragma multi_compile_fragment _ _SHADOWS_SOFT _SHADOWS_SOFT_LOW _SHADOWS_SOFT_MEDIUM _SHADOWS_SOFT_HIGH #pragma multi_compile _DECAL_NORMAL_BLEND_LOW _DECAL_NORMAL_BLEND_MEDIUM _DECAL_NORMAL_BLEND_HIGH #pragma multi_compile _ _DECAL_LAYERS #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT #pragma multi_compile_fragment _ _RENDER_PASS_ENABLED // GraphKeywords: #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" // Defines #define ATTRIBUTES_NEED_NORMAL #define ATTRIBUTES_NEED_TEXCOORD0 #define VARYINGS_NEED_NORMAL_WS #define VARYINGS_NEED_TEXCOORD0 #define VARYINGS_NEED_SH #define VARYINGS_NEED_STATIC_LIGHTMAP_UV #define VARYINGS_NEED_DYNAMIC_LIGHTMAP_UV #define VARYINGS_NEED_SHADOW_COORD #define HAVE_MESH_MODIFICATION #define SHADERPASS SHADERPASS_DECAL_GBUFFER_PROJECTOR #define _MATERIAL_AFFECTS_ALBEDO 1 #define _MATERIAL_AFFECTS_NORMAL 1 #define _MATERIAL_AFFECTS_NORMAL_BLEND 1 #define _MATERIAL_AFFECTS_MAOS 1 // -- Properties used by ScenePickingPass #ifdef SCENEPICKINGPASS float4 _SelectionID; #endif #if _RENDER_PASS_ENABLED #define GBUFFER3 0 #define GBUFFER4 1 FRAMEBUFFER_INPUT_X_HALF(GBUFFER3); FRAMEBUFFER_INPUT_X_HALF(GBUFFER4); #endif // Includes #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRendering.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/DebugMipmapStreamingMacros.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ProbeVolumeVariants.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/UnityGBuffer.hlsl" #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DecalInput.hlsl" #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderVariablesDecal.hlsl" // -------------------------------------------------- // Structs and Packing struct Attributes { float3 positionOS : POSITION; float3 normalOS : NORMAL; float4 uv0 : TEXCOORD0; #if UNITY_ANY_INSTANCING_ENABLED || defined(ATTRIBUTES_NEED_INSTANCEID) uint instanceID : INSTANCEID_SEMANTIC; #endif }; struct Varyings { float4 positionCS : SV_POSITION; float3 normalWS; float4 texCoord0; #if defined(LIGHTMAP_ON) float2 staticLightmapUV; #endif #if defined(DYNAMICLIGHTMAP_ON) float2 dynamicLightmapUV; #endif #if !defined(LIGHTMAP_ON) float3 sh; #endif #if defined(USE_APV_PROBE_OCCLUSION) float4 probeOcclusion; #endif #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) float4 shadowCoord; #endif #if UNITY_ANY_INSTANCING_ENABLED || defined(VARYINGS_NEED_INSTANCEID) uint instanceID : CUSTOM_INSTANCE_ID; #endif #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) uint stereoTargetEyeIndexAsBlendIdx0 : BLENDINDICES0; #endif #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) uint stereoTargetEyeIndexAsRTArrayIdx : SV_RenderTargetArrayIndex; #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMANTIC; #endif }; struct SurfaceDescriptionInputs { float3 TangentSpaceNormal; float4 uv0; }; struct VertexDescriptionInputs { }; struct PackedVaryings { float4 positionCS : SV_POSITION; #if defined(LIGHTMAP_ON) float2 staticLightmapUV : INTERP0; #endif #if defined(DYNAMICLIGHTMAP_ON) float2 dynamicLightmapUV : INTERP1; #endif #if !defined(LIGHTMAP_ON) float3 sh : INTERP2; #endif #if defined(USE_APV_PROBE_OCCLUSION) float4 probeOcclusion : INTERP3; #endif #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) float4 shadowCoord : INTERP4; #endif float4 texCoord0 : INTERP5; float3 normalWS : INTERP6; #if UNITY_ANY_INSTANCING_ENABLED || defined(VARYINGS_NEED_INSTANCEID) uint instanceID : CUSTOM_INSTANCE_ID; #endif #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) uint stereoTargetEyeIndexAsBlendIdx0 : BLENDINDICES0; #endif #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) uint stereoTargetEyeIndexAsRTArrayIdx : SV_RenderTargetArrayIndex; #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMANTIC; #endif }; PackedVaryings PackVaryings (Varyings input) { PackedVaryings output; ZERO_INITIALIZE(PackedVaryings, output); output.positionCS = input.positionCS; #if defined(LIGHTMAP_ON) output.staticLightmapUV = input.staticLightmapUV; #endif #if defined(DYNAMICLIGHTMAP_ON) output.dynamicLightmapUV = input.dynamicLightmapUV; #endif #if !defined(LIGHTMAP_ON) output.sh = input.sh; #endif #if defined(USE_APV_PROBE_OCCLUSION) output.probeOcclusion = input.probeOcclusion; #endif #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) output.shadowCoord = input.shadowCoord; #endif output.texCoord0.xyzw = input.texCoord0; output.normalWS.xyz = input.normalWS; #if UNITY_ANY_INSTANCING_ENABLED || defined(VARYINGS_NEED_INSTANCEID) output.instanceID = input.instanceID; #endif #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) output.stereoTargetEyeIndexAsBlendIdx0 = input.stereoTargetEyeIndexAsBlendIdx0; #endif #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) output.stereoTargetEyeIndexAsRTArrayIdx = input.stereoTargetEyeIndexAsRTArrayIdx; #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) output.cullFace = input.cullFace; #endif return output; } Varyings UnpackVaryings (PackedVaryings input) { Varyings output; output.positionCS = input.positionCS; #if defined(LIGHTMAP_ON) output.staticLightmapUV = input.staticLightmapUV; #endif #if defined(DYNAMICLIGHTMAP_ON) output.dynamicLightmapUV = input.dynamicLightmapUV; #endif #if !defined(LIGHTMAP_ON) output.sh = input.sh; #endif #if defined(USE_APV_PROBE_OCCLUSION) output.probeOcclusion = input.probeOcclusion; #endif #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) output.shadowCoord = input.shadowCoord; #endif output.texCoord0 = input.texCoord0.xyzw; output.normalWS = input.normalWS.xyz; #if UNITY_ANY_INSTANCING_ENABLED || defined(VARYINGS_NEED_INSTANCEID) output.instanceID = input.instanceID; #endif #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) output.stereoTargetEyeIndexAsBlendIdx0 = input.stereoTargetEyeIndexAsBlendIdx0; #endif #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) output.stereoTargetEyeIndexAsRTArrayIdx = input.stereoTargetEyeIndexAsRTArrayIdx; #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) output.cullFace = input.cullFace; #endif return output; } // -------------------------------------------------- // Graph // Graph Properties CBUFFER_START(UnityPerMaterial) float4 Base_Map_TexelSize; float4 Normal_Map_TexelSize; float Normal_Blend; float4 _Emission; float _Metallic_ARG; float _MAOS_ARG; float _Smoothness_ARG; float _DrawOrder; float _DecalMeshBiasType; float _DecalMeshDepthBias; float _DecalMeshViewBias; UNITY_TEXTURE_STREAMING_DEBUG_VARS; CBUFFER_END // Object and Global properties SAMPLER(SamplerState_Linear_Repeat); TEXTURE2D(Base_Map); SAMPLER(samplerBase_Map); TEXTURE2D(Normal_Map); SAMPLER(samplerNormal_Map); // Graph Includes // GraphIncludes: // Graph Functions void Unity_Multiply_float_float(float A, float B, out float Out) { Out = A * B; } // Graph Vertex struct VertexDescription { }; VertexDescription VertexDescriptionFunction(VertexDescriptionInputs IN) { VertexDescription description = (VertexDescription)0; return description; } // Graph Pixel struct SurfaceDescription { float3 BaseColor; float Alpha; float3 NormalTS; float NormalAlpha; float Metallic; float Occlusion; float Smoothness; float MAOSAlpha; }; SurfaceDescription SurfaceDescriptionFunction(SurfaceDescriptionInputs IN) { SurfaceDescription surface = (SurfaceDescription)0; UnityTexture2D _Property_9f1059a7a93a46ccab349515214f3ed2_Out_0_Texture2D = UnityBuildTexture2DStructNoScale(Base_Map); float4 _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4 = SAMPLE_TEXTURE2D(_Property_9f1059a7a93a46ccab349515214f3ed2_Out_0_Texture2D.tex, _Property_9f1059a7a93a46ccab349515214f3ed2_Out_0_Texture2D.samplerstate, _Property_9f1059a7a93a46ccab349515214f3ed2_Out_0_Texture2D.GetTransformedUV(IN.uv0.xy) ); float _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_R_4_Float = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.r; float _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_G_5_Float = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.g; float _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_B_6_Float = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.b; float _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_A_7_Float = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.a; UnityTexture2D _Property_360e6833e8d64d75827ab98987b2b545_Out_0_Texture2D = UnityBuildTexture2DStructNoScale(Normal_Map); float4 _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4 = SAMPLE_TEXTURE2D(_Property_360e6833e8d64d75827ab98987b2b545_Out_0_Texture2D.tex, _Property_360e6833e8d64d75827ab98987b2b545_Out_0_Texture2D.samplerstate, _Property_360e6833e8d64d75827ab98987b2b545_Out_0_Texture2D.GetTransformedUV(IN.uv0.xy) ); _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.rgb = UnpackNormal(_SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4); float _SampleTexture2D_1300b7cb738f4b18927411750039acd2_R_4_Float = _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.r; float _SampleTexture2D_1300b7cb738f4b18927411750039acd2_G_5_Float = _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.g; float _SampleTexture2D_1300b7cb738f4b18927411750039acd2_B_6_Float = _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.b; float _SampleTexture2D_1300b7cb738f4b18927411750039acd2_A_7_Float = _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.a; float _Property_91d01e73dcf34e7d96a9e731fb50e308_Out_0_Float = Normal_Blend; float _Multiply_86a3eb218544413fb0fe50b275affa91_Out_2_Float; Unity_Multiply_float_float(_SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_A_7_Float, _Property_91d01e73dcf34e7d96a9e731fb50e308_Out_0_Float, _Multiply_86a3eb218544413fb0fe50b275affa91_Out_2_Float); float _Property_536c4c3009504e63ade4e6e77148fba6_Out_0_Float = _Metallic_ARG; float _Property_6f4b84479ee74be4a15c88d81536f15b_Out_0_Float = _Smoothness_ARG; float _Property_597ae0960908464a9fc48d73ac31b4ce_Out_0_Float = _MAOS_ARG; surface.BaseColor = (_SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.xyz); surface.Alpha = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_A_7_Float; surface.NormalTS = (_SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.xyz); surface.NormalAlpha = _Multiply_86a3eb218544413fb0fe50b275affa91_Out_2_Float; surface.Metallic = _Property_536c4c3009504e63ade4e6e77148fba6_Out_0_Float; surface.Occlusion = float(1); surface.Smoothness = _Property_6f4b84479ee74be4a15c88d81536f15b_Out_0_Float; surface.MAOSAlpha = _Property_597ae0960908464a9fc48d73ac31b4ce_Out_0_Float; return surface; } // -------------------------------------------------- // Build Graph Inputs // $features.graphVertex: $include("VertexAnimation.template.hlsl") // ^ ERROR: $include cannot find file : VertexAnimation.template.hlsl. Looked into: // Packages/com.unity.shadergraph/Editor/Generation/Templates // $features.graphPixel: $include("SharedCode.template.hlsl") // ^ ERROR: $include cannot find file : SharedCode.template.hlsl. Looked into: // Packages/com.unity.shadergraph/Editor/Generation/Templates SurfaceDescriptionInputs BuildSurfaceDescriptionInputs(Varyings input) { SurfaceDescriptionInputs output; ZERO_INITIALIZE(SurfaceDescriptionInputs, output); /* WARNING: $splice Could not find named fragment 'CustomInterpolatorCopyToSDI' */ output.TangentSpaceNormal = float3(0.0f, 0.0f, 1.0f); #if UNITY_UV_STARTS_AT_TOP #else #endif output.uv0 = input.texCoord0; #if UNITY_ANY_INSTANCING_ENABLED #else // TODO: XR support for procedural instancing because in this case UNITY_ANY_INSTANCING_ENABLED is not defined and instanceID is incorrect. #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) #define BUILD_SURFACE_DESCRIPTION_INPUTS_OUTPUT_FACESIGN output.FaceSign = IS_FRONT_VFACE(input.cullFace, true, false); #else #define BUILD_SURFACE_DESCRIPTION_INPUTS_OUTPUT_FACESIGN #endif #undef BUILD_SURFACE_DESCRIPTION_INPUTS_OUTPUT_FACESIGN return output; } // -------------------------------------------------- // Build Surface Data void GetSurfaceData(Varyings input, float4 positionCS, float angleFadeFactor, out DecalSurfaceData surfaceData) { #if (SHADERPASS == SHADERPASS_DBUFFER_PROJECTOR) || (SHADERPASS == SHADERPASS_FORWARD_EMISSIVE_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_SCREEN_SPACE_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_GBUFFER_PROJECTOR) half4x4 normalToWorld = UNITY_ACCESS_INSTANCED_PROP(Decal, _NormalToWorld); half fadeFactor = clamp(normalToWorld[0][3], 0.0f, 1.0f) * angleFadeFactor; float2 scale = float2(normalToWorld[3][0], normalToWorld[3][1]); float2 offset = float2(normalToWorld[3][2], normalToWorld[3][3]); input.texCoord0.xy = input.texCoord0.xy * scale + offset; half3 normalWS = TransformObjectToWorldDir(half3(0, 1, 0)); half3 tangentWS = TransformObjectToWorldDir(half3(1, 0, 0)); half3 bitangentWS = TransformObjectToWorldDir(half3(0, 0, 1)); half sign = dot(cross(normalWS, tangentWS), bitangentWS) > 0 ? 1 : -1; input.normalWS.xyz = normalWS; #else #if defined(LOD_FADE_CROSSFADE) && USE_UNITY_CROSSFADE LODFadeCrossFade(positionCS); #endif half fadeFactor = half(1.0); #endif SurfaceDescriptionInputs surfaceDescriptionInputs = BuildSurfaceDescriptionInputs(input); SurfaceDescription surfaceDescription = SurfaceDescriptionFunction(surfaceDescriptionInputs); // setup defaults -- these are used if the graph doesn't output a value ZERO_INITIALIZE(DecalSurfaceData, surfaceData); surfaceData.occlusion = half(1.0); surfaceData.smoothness = half(0); #ifdef _MATERIAL_AFFECTS_NORMAL surfaceData.normalWS.w = half(1.0); #else surfaceData.normalWS.w = half(0.0); #endif // copy across graph values, if defined surfaceData.baseColor.xyz = half3(surfaceDescription.BaseColor); surfaceData.baseColor.w = half(surfaceDescription.Alpha * fadeFactor); #if (SHADERPASS == SHADERPASS_DBUFFER_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_SCREEN_SPACE_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_GBUFFER_PROJECTOR) #if defined(_MATERIAL_AFFECTS_NORMAL) surfaceData.normalWS.xyz = normalize(mul((half3x3)normalToWorld, surfaceDescription.NormalTS.xyz)); #else surfaceData.normalWS.xyz = normalize(normalToWorld[2].xyz); #endif #elif (SHADERPASS == SHADERPASS_DBUFFER_MESH) || (SHADERPASS == SHADERPASS_DECAL_SCREEN_SPACE_MESH) || (SHADERPASS == SHADERPASS_DECAL_GBUFFER_MESH) #if defined(_MATERIAL_AFFECTS_NORMAL) float sgn = input.tangentWS.w; // should be either +1 or -1 float3 bitangent = sgn * cross(input.normalWS.xyz, input.tangentWS.xyz); half3x3 tangentToWorld = half3x3(input.tangentWS.xyz, bitangent.xyz, input.normalWS.xyz); // We need to normalize as we use mikkt tangent space and this is expected (tangent space is not normalize) surfaceData.normalWS.xyz = normalize(TransformTangentToWorld(surfaceDescription.NormalTS, tangentToWorld)); #else surfaceData.normalWS.xyz = normalize(half3(input.normalWS)); // Default to vertex normal #endif #endif surfaceData.normalWS.w = surfaceDescription.NormalAlpha * fadeFactor; // In case of Smoothness / AO / Metal, all the three are always computed but color mask can change surfaceData.metallic = half(surfaceDescription.Metallic); surfaceData.occlusion = half(surfaceDescription.Occlusion); surfaceData.smoothness = half(surfaceDescription.Smoothness); surfaceData.MAOSAlpha = half(surfaceDescription.MAOSAlpha * fadeFactor); } // -------------------------------------------------- // Main #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/Varyings.hlsl" #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPassDecal.hlsl" ENDHLSL } Pass { Name "DBufferMesh" Tags { "LightMode" = "DBufferMesh" } // Render State Blend 0 SrcAlpha OneMinusSrcAlpha, Zero OneMinusSrcAlpha Blend 1 SrcAlpha OneMinusSrcAlpha, Zero OneMinusSrcAlpha Blend 2 SrcAlpha OneMinusSrcAlpha, Zero OneMinusSrcAlpha ZTest LEqual ZWrite Off ColorMask RGBA ColorMask RGBA 1 ColorMask RGBA 2 // Debug // // -------------------------------------------------- // Pass HLSLPROGRAM // Pragmas #pragma target 4.5 #pragma exclude_renderers gles3 glcore #pragma vertex Vert #pragma fragment Frag #pragma multi_compile_instancing #pragma editor_sync_compilation // Keywords #pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 #pragma multi_compile _ _DECAL_LAYERS // GraphKeywords: #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" // Defines #define ATTRIBUTES_NEED_NORMAL #define ATTRIBUTES_NEED_TANGENT #define ATTRIBUTES_NEED_TEXCOORD0 #define ATTRIBUTES_NEED_TEXCOORD1 #define ATTRIBUTES_NEED_TEXCOORD2 #define VARYINGS_NEED_POSITION_WS #define VARYINGS_NEED_NORMAL_WS #define VARYINGS_NEED_TANGENT_WS #define VARYINGS_NEED_TEXCOORD0 #define HAVE_MESH_MODIFICATION #define SHADERPASS SHADERPASS_DBUFFER_MESH #define _MATERIAL_AFFECTS_ALBEDO 1 #define _MATERIAL_AFFECTS_NORMAL 1 #define _MATERIAL_AFFECTS_NORMAL_BLEND 1 #define _MATERIAL_AFFECTS_MAOS 1 // -- Properties used by ScenePickingPass #ifdef SCENEPICKINGPASS float4 _SelectionID; #endif #if _RENDER_PASS_ENABLED #define GBUFFER3 0 #define GBUFFER4 1 FRAMEBUFFER_INPUT_X_HALF(GBUFFER3); FRAMEBUFFER_INPUT_X_HALF(GBUFFER4); #endif // Includes #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRendering.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/DebugMipmapStreamingMacros.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ProbeVolumeVariants.hlsl" #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DecalInput.hlsl" #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderVariablesDecal.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DBuffer.hlsl" // -------------------------------------------------- // Structs and Packing struct Attributes { float3 positionOS : POSITION; float3 normalOS : NORMAL; float4 tangentOS : TANGENT; float4 uv0 : TEXCOORD0; float4 uv1 : TEXCOORD1; float4 uv2 : TEXCOORD2; #if UNITY_ANY_INSTANCING_ENABLED || defined(ATTRIBUTES_NEED_INSTANCEID) uint instanceID : INSTANCEID_SEMANTIC; #endif }; struct Varyings { float4 positionCS : SV_POSITION; float3 positionWS; float3 normalWS; float4 tangentWS; float4 texCoord0; #if UNITY_ANY_INSTANCING_ENABLED || defined(VARYINGS_NEED_INSTANCEID) uint instanceID : CUSTOM_INSTANCE_ID; #endif #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) uint stereoTargetEyeIndexAsBlendIdx0 : BLENDINDICES0; #endif #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) uint stereoTargetEyeIndexAsRTArrayIdx : SV_RenderTargetArrayIndex; #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMANTIC; #endif }; struct SurfaceDescriptionInputs { float3 TangentSpaceNormal; float4 uv0; }; struct VertexDescriptionInputs { }; struct PackedVaryings { float4 positionCS : SV_POSITION; float4 tangentWS : INTERP0; float4 texCoord0 : INTERP1; float3 positionWS : INTERP2; float3 normalWS : INTERP3; #if UNITY_ANY_INSTANCING_ENABLED || defined(VARYINGS_NEED_INSTANCEID) uint instanceID : CUSTOM_INSTANCE_ID; #endif #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) uint stereoTargetEyeIndexAsBlendIdx0 : BLENDINDICES0; #endif #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) uint stereoTargetEyeIndexAsRTArrayIdx : SV_RenderTargetArrayIndex; #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMANTIC; #endif }; PackedVaryings PackVaryings (Varyings input) { PackedVaryings output; ZERO_INITIALIZE(PackedVaryings, output); output.positionCS = input.positionCS; output.tangentWS.xyzw = input.tangentWS; output.texCoord0.xyzw = input.texCoord0; output.positionWS.xyz = input.positionWS; output.normalWS.xyz = input.normalWS; #if UNITY_ANY_INSTANCING_ENABLED || defined(VARYINGS_NEED_INSTANCEID) output.instanceID = input.instanceID; #endif #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) output.stereoTargetEyeIndexAsBlendIdx0 = input.stereoTargetEyeIndexAsBlendIdx0; #endif #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) output.stereoTargetEyeIndexAsRTArrayIdx = input.stereoTargetEyeIndexAsRTArrayIdx; #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) output.cullFace = input.cullFace; #endif return output; } Varyings UnpackVaryings (PackedVaryings input) { Varyings output; output.positionCS = input.positionCS; output.tangentWS = input.tangentWS.xyzw; output.texCoord0 = input.texCoord0.xyzw; output.positionWS = input.positionWS.xyz; output.normalWS = input.normalWS.xyz; #if UNITY_ANY_INSTANCING_ENABLED || defined(VARYINGS_NEED_INSTANCEID) output.instanceID = input.instanceID; #endif #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) output.stereoTargetEyeIndexAsBlendIdx0 = input.stereoTargetEyeIndexAsBlendIdx0; #endif #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) output.stereoTargetEyeIndexAsRTArrayIdx = input.stereoTargetEyeIndexAsRTArrayIdx; #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) output.cullFace = input.cullFace; #endif return output; } // -------------------------------------------------- // Graph // Graph Properties CBUFFER_START(UnityPerMaterial) float4 Base_Map_TexelSize; float4 Normal_Map_TexelSize; float Normal_Blend; float4 _Emission; float _Metallic_ARG; float _MAOS_ARG; float _Smoothness_ARG; float _DrawOrder; float _DecalMeshBiasType; float _DecalMeshDepthBias; float _DecalMeshViewBias; UNITY_TEXTURE_STREAMING_DEBUG_VARS; CBUFFER_END // Object and Global properties SAMPLER(SamplerState_Linear_Repeat); TEXTURE2D(Base_Map); SAMPLER(samplerBase_Map); TEXTURE2D(Normal_Map); SAMPLER(samplerNormal_Map); // Graph Includes // GraphIncludes: // Graph Functions void Unity_Multiply_float_float(float A, float B, out float Out) { Out = A * B; } // Graph Vertex struct VertexDescription { }; VertexDescription VertexDescriptionFunction(VertexDescriptionInputs IN) { VertexDescription description = (VertexDescription)0; return description; } // Graph Pixel struct SurfaceDescription { float3 BaseColor; float Alpha; float3 NormalTS; float NormalAlpha; float Metallic; float Occlusion; float Smoothness; float MAOSAlpha; }; SurfaceDescription SurfaceDescriptionFunction(SurfaceDescriptionInputs IN) { SurfaceDescription surface = (SurfaceDescription)0; UnityTexture2D _Property_9f1059a7a93a46ccab349515214f3ed2_Out_0_Texture2D = UnityBuildTexture2DStructNoScale(Base_Map); float4 _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4 = SAMPLE_TEXTURE2D(_Property_9f1059a7a93a46ccab349515214f3ed2_Out_0_Texture2D.tex, _Property_9f1059a7a93a46ccab349515214f3ed2_Out_0_Texture2D.samplerstate, _Property_9f1059a7a93a46ccab349515214f3ed2_Out_0_Texture2D.GetTransformedUV(IN.uv0.xy) ); float _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_R_4_Float = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.r; float _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_G_5_Float = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.g; float _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_B_6_Float = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.b; float _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_A_7_Float = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.a; UnityTexture2D _Property_360e6833e8d64d75827ab98987b2b545_Out_0_Texture2D = UnityBuildTexture2DStructNoScale(Normal_Map); float4 _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4 = SAMPLE_TEXTURE2D(_Property_360e6833e8d64d75827ab98987b2b545_Out_0_Texture2D.tex, _Property_360e6833e8d64d75827ab98987b2b545_Out_0_Texture2D.samplerstate, _Property_360e6833e8d64d75827ab98987b2b545_Out_0_Texture2D.GetTransformedUV(IN.uv0.xy) ); _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.rgb = UnpackNormal(_SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4); float _SampleTexture2D_1300b7cb738f4b18927411750039acd2_R_4_Float = _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.r; float _SampleTexture2D_1300b7cb738f4b18927411750039acd2_G_5_Float = _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.g; float _SampleTexture2D_1300b7cb738f4b18927411750039acd2_B_6_Float = _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.b; float _SampleTexture2D_1300b7cb738f4b18927411750039acd2_A_7_Float = _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.a; float _Property_91d01e73dcf34e7d96a9e731fb50e308_Out_0_Float = Normal_Blend; float _Multiply_86a3eb218544413fb0fe50b275affa91_Out_2_Float; Unity_Multiply_float_float(_SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_A_7_Float, _Property_91d01e73dcf34e7d96a9e731fb50e308_Out_0_Float, _Multiply_86a3eb218544413fb0fe50b275affa91_Out_2_Float); float _Property_536c4c3009504e63ade4e6e77148fba6_Out_0_Float = _Metallic_ARG; float _Property_6f4b84479ee74be4a15c88d81536f15b_Out_0_Float = _Smoothness_ARG; float _Property_597ae0960908464a9fc48d73ac31b4ce_Out_0_Float = _MAOS_ARG; surface.BaseColor = (_SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.xyz); surface.Alpha = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_A_7_Float; surface.NormalTS = (_SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.xyz); surface.NormalAlpha = _Multiply_86a3eb218544413fb0fe50b275affa91_Out_2_Float; surface.Metallic = _Property_536c4c3009504e63ade4e6e77148fba6_Out_0_Float; surface.Occlusion = float(1); surface.Smoothness = _Property_6f4b84479ee74be4a15c88d81536f15b_Out_0_Float; surface.MAOSAlpha = _Property_597ae0960908464a9fc48d73ac31b4ce_Out_0_Float; return surface; } // -------------------------------------------------- // Build Graph Inputs // $features.graphVertex: $include("VertexAnimation.template.hlsl") // ^ ERROR: $include cannot find file : VertexAnimation.template.hlsl. Looked into: // Packages/com.unity.shadergraph/Editor/Generation/Templates // $features.graphPixel: $include("SharedCode.template.hlsl") // ^ ERROR: $include cannot find file : SharedCode.template.hlsl. Looked into: // Packages/com.unity.shadergraph/Editor/Generation/Templates SurfaceDescriptionInputs BuildSurfaceDescriptionInputs(Varyings input) { SurfaceDescriptionInputs output; ZERO_INITIALIZE(SurfaceDescriptionInputs, output); /* WARNING: $splice Could not find named fragment 'CustomInterpolatorCopyToSDI' */ output.TangentSpaceNormal = float3(0.0f, 0.0f, 1.0f); #if UNITY_UV_STARTS_AT_TOP #else #endif output.uv0 = input.texCoord0; #if UNITY_ANY_INSTANCING_ENABLED #else // TODO: XR support for procedural instancing because in this case UNITY_ANY_INSTANCING_ENABLED is not defined and instanceID is incorrect. #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) #define BUILD_SURFACE_DESCRIPTION_INPUTS_OUTPUT_FACESIGN output.FaceSign = IS_FRONT_VFACE(input.cullFace, true, false); #else #define BUILD_SURFACE_DESCRIPTION_INPUTS_OUTPUT_FACESIGN #endif #undef BUILD_SURFACE_DESCRIPTION_INPUTS_OUTPUT_FACESIGN return output; } // -------------------------------------------------- // Build Surface Data void GetSurfaceData(Varyings input, float4 positionCS, float angleFadeFactor, out DecalSurfaceData surfaceData) { #if (SHADERPASS == SHADERPASS_DBUFFER_PROJECTOR) || (SHADERPASS == SHADERPASS_FORWARD_EMISSIVE_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_SCREEN_SPACE_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_GBUFFER_PROJECTOR) half4x4 normalToWorld = UNITY_ACCESS_INSTANCED_PROP(Decal, _NormalToWorld); half fadeFactor = clamp(normalToWorld[0][3], 0.0f, 1.0f) * angleFadeFactor; float2 scale = float2(normalToWorld[3][0], normalToWorld[3][1]); float2 offset = float2(normalToWorld[3][2], normalToWorld[3][3]); input.texCoord0.xy = input.texCoord0.xy * scale + offset; half3 normalWS = TransformObjectToWorldDir(half3(0, 1, 0)); half3 tangentWS = TransformObjectToWorldDir(half3(1, 0, 0)); half3 bitangentWS = TransformObjectToWorldDir(half3(0, 0, 1)); half sign = dot(cross(normalWS, tangentWS), bitangentWS) > 0 ? 1 : -1; input.normalWS.xyz = normalWS; input.tangentWS.xyzw = half4(tangentWS, sign); #else #if defined(LOD_FADE_CROSSFADE) && USE_UNITY_CROSSFADE LODFadeCrossFade(positionCS); #endif half fadeFactor = half(1.0); #endif SurfaceDescriptionInputs surfaceDescriptionInputs = BuildSurfaceDescriptionInputs(input); SurfaceDescription surfaceDescription = SurfaceDescriptionFunction(surfaceDescriptionInputs); // setup defaults -- these are used if the graph doesn't output a value ZERO_INITIALIZE(DecalSurfaceData, surfaceData); surfaceData.occlusion = half(1.0); surfaceData.smoothness = half(0); #ifdef _MATERIAL_AFFECTS_NORMAL surfaceData.normalWS.w = half(1.0); #else surfaceData.normalWS.w = half(0.0); #endif // copy across graph values, if defined surfaceData.baseColor.xyz = half3(surfaceDescription.BaseColor); surfaceData.baseColor.w = half(surfaceDescription.Alpha * fadeFactor); #if (SHADERPASS == SHADERPASS_DBUFFER_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_SCREEN_SPACE_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_GBUFFER_PROJECTOR) #if defined(_MATERIAL_AFFECTS_NORMAL) surfaceData.normalWS.xyz = normalize(mul((half3x3)normalToWorld, surfaceDescription.NormalTS.xyz)); #else surfaceData.normalWS.xyz = normalize(normalToWorld[2].xyz); #endif #elif (SHADERPASS == SHADERPASS_DBUFFER_MESH) || (SHADERPASS == SHADERPASS_DECAL_SCREEN_SPACE_MESH) || (SHADERPASS == SHADERPASS_DECAL_GBUFFER_MESH) #if defined(_MATERIAL_AFFECTS_NORMAL) float sgn = input.tangentWS.w; // should be either +1 or -1 float3 bitangent = sgn * cross(input.normalWS.xyz, input.tangentWS.xyz); half3x3 tangentToWorld = half3x3(input.tangentWS.xyz, bitangent.xyz, input.normalWS.xyz); // We need to normalize as we use mikkt tangent space and this is expected (tangent space is not normalize) surfaceData.normalWS.xyz = normalize(TransformTangentToWorld(surfaceDescription.NormalTS, tangentToWorld)); #else surfaceData.normalWS.xyz = normalize(half3(input.normalWS)); // Default to vertex normal #endif #endif surfaceData.normalWS.w = surfaceDescription.NormalAlpha * fadeFactor; // In case of Smoothness / AO / Metal, all the three are always computed but color mask can change surfaceData.metallic = half(surfaceDescription.Metallic); surfaceData.occlusion = half(surfaceDescription.Occlusion); surfaceData.smoothness = half(surfaceDescription.Smoothness); surfaceData.MAOSAlpha = half(surfaceDescription.MAOSAlpha * fadeFactor); } // -------------------------------------------------- // Main #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/Varyings.hlsl" #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPassDecal.hlsl" ENDHLSL } Pass { Name "DecalScreenSpaceMesh" Tags { "LightMode" = "DecalScreenSpaceMesh" } // Render State Blend SrcAlpha OneMinusSrcAlpha ZTest LEqual ZWrite Off // Debug // // -------------------------------------------------- // Pass HLSLPROGRAM // Pragmas #pragma target 2.5 #pragma vertex Vert #pragma fragment Frag #pragma multi_compile_instancing #pragma multi_compile_fog #pragma editor_sync_compilation // Keywords #pragma multi_compile _ LIGHTMAP_ON #pragma multi_compile _ DYNAMICLIGHTMAP_ON #pragma multi_compile _ DIRLIGHTMAP_COMBINED #pragma multi_compile _ USE_LEGACY_LIGHTMAPS #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS #pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS #pragma multi_compile_fragment _ _SHADOWS_SOFT _SHADOWS_SOFT_LOW _SHADOWS_SOFT_MEDIUM _SHADOWS_SOFT_HIGH #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING #pragma multi_compile _ SHADOWS_SHADOWMASK #pragma multi_compile _ _FORWARD_PLUS #pragma multi_compile _DECAL_NORMAL_BLEND_LOW _DECAL_NORMAL_BLEND_MEDIUM _DECAL_NORMAL_BLEND_HIGH #pragma multi_compile_fragment _ DEBUG_DISPLAY #pragma multi_compile _ _DECAL_LAYERS // GraphKeywords: #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" // Defines #define ATTRIBUTES_NEED_NORMAL #define ATTRIBUTES_NEED_TANGENT #define ATTRIBUTES_NEED_TEXCOORD0 #define ATTRIBUTES_NEED_TEXCOORD1 #define ATTRIBUTES_NEED_TEXCOORD2 #define VARYINGS_NEED_POSITION_WS #define VARYINGS_NEED_NORMAL_WS #define VARYINGS_NEED_TANGENT_WS #define VARYINGS_NEED_TEXCOORD0 #define VARYINGS_NEED_FOG_AND_VERTEX_LIGHT #define VARYINGS_NEED_SH #define VARYINGS_NEED_STATIC_LIGHTMAP_UV #define VARYINGS_NEED_DYNAMIC_LIGHTMAP_UV #define VARYINGS_NEED_SHADOW_COORD #define HAVE_MESH_MODIFICATION #define SHADERPASS SHADERPASS_DECAL_SCREEN_SPACE_MESH #define _MATERIAL_AFFECTS_ALBEDO 1 #define _MATERIAL_AFFECTS_NORMAL 1 #define _MATERIAL_AFFECTS_NORMAL_BLEND 1 #define _MATERIAL_AFFECTS_MAOS 1 // -- Properties used by ScenePickingPass #ifdef SCENEPICKINGPASS float4 _SelectionID; #endif #if _RENDER_PASS_ENABLED #define GBUFFER3 0 #define GBUFFER4 1 FRAMEBUFFER_INPUT_X_HALF(GBUFFER3); FRAMEBUFFER_INPUT_X_HALF(GBUFFER4); #endif // Includes #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRendering.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/DebugMipmapStreamingMacros.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ProbeVolumeVariants.hlsl" #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DecalInput.hlsl" #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderVariablesDecal.hlsl" // -------------------------------------------------- // Structs and Packing struct Attributes { float3 positionOS : POSITION; float3 normalOS : NORMAL; float4 tangentOS : TANGENT; float4 uv0 : TEXCOORD0; float4 uv1 : TEXCOORD1; float4 uv2 : TEXCOORD2; #if UNITY_ANY_INSTANCING_ENABLED || defined(ATTRIBUTES_NEED_INSTANCEID) uint instanceID : INSTANCEID_SEMANTIC; #endif }; struct Varyings { float4 positionCS : SV_POSITION; float3 positionWS; float3 normalWS; float4 tangentWS; float4 texCoord0; #if defined(LIGHTMAP_ON) float2 staticLightmapUV; #endif #if defined(DYNAMICLIGHTMAP_ON) float2 dynamicLightmapUV; #endif #if !defined(LIGHTMAP_ON) float3 sh; #endif #if defined(USE_APV_PROBE_OCCLUSION) float4 probeOcclusion; #endif float4 fogFactorAndVertexLight; #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) float4 shadowCoord; #endif #if UNITY_ANY_INSTANCING_ENABLED || defined(VARYINGS_NEED_INSTANCEID) uint instanceID : CUSTOM_INSTANCE_ID; #endif #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) uint stereoTargetEyeIndexAsBlendIdx0 : BLENDINDICES0; #endif #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) uint stereoTargetEyeIndexAsRTArrayIdx : SV_RenderTargetArrayIndex; #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMANTIC; #endif }; struct SurfaceDescriptionInputs { float3 TangentSpaceNormal; float4 uv0; }; struct VertexDescriptionInputs { }; struct PackedVaryings { float4 positionCS : SV_POSITION; #if defined(LIGHTMAP_ON) float2 staticLightmapUV : INTERP0; #endif #if defined(DYNAMICLIGHTMAP_ON) float2 dynamicLightmapUV : INTERP1; #endif #if !defined(LIGHTMAP_ON) float3 sh : INTERP2; #endif #if defined(USE_APV_PROBE_OCCLUSION) float4 probeOcclusion : INTERP3; #endif #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) float4 shadowCoord : INTERP4; #endif float4 tangentWS : INTERP5; float4 texCoord0 : INTERP6; float4 fogFactorAndVertexLight : INTERP7; float3 positionWS : INTERP8; float3 normalWS : INTERP9; #if UNITY_ANY_INSTANCING_ENABLED || defined(VARYINGS_NEED_INSTANCEID) uint instanceID : CUSTOM_INSTANCE_ID; #endif #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) uint stereoTargetEyeIndexAsBlendIdx0 : BLENDINDICES0; #endif #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) uint stereoTargetEyeIndexAsRTArrayIdx : SV_RenderTargetArrayIndex; #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMANTIC; #endif }; PackedVaryings PackVaryings (Varyings input) { PackedVaryings output; ZERO_INITIALIZE(PackedVaryings, output); output.positionCS = input.positionCS; #if defined(LIGHTMAP_ON) output.staticLightmapUV = input.staticLightmapUV; #endif #if defined(DYNAMICLIGHTMAP_ON) output.dynamicLightmapUV = input.dynamicLightmapUV; #endif #if !defined(LIGHTMAP_ON) output.sh = input.sh; #endif #if defined(USE_APV_PROBE_OCCLUSION) output.probeOcclusion = input.probeOcclusion; #endif #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) output.shadowCoord = input.shadowCoord; #endif output.tangentWS.xyzw = input.tangentWS; output.texCoord0.xyzw = input.texCoord0; output.fogFactorAndVertexLight.xyzw = input.fogFactorAndVertexLight; output.positionWS.xyz = input.positionWS; output.normalWS.xyz = input.normalWS; #if UNITY_ANY_INSTANCING_ENABLED || defined(VARYINGS_NEED_INSTANCEID) output.instanceID = input.instanceID; #endif #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) output.stereoTargetEyeIndexAsBlendIdx0 = input.stereoTargetEyeIndexAsBlendIdx0; #endif #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) output.stereoTargetEyeIndexAsRTArrayIdx = input.stereoTargetEyeIndexAsRTArrayIdx; #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) output.cullFace = input.cullFace; #endif return output; } Varyings UnpackVaryings (PackedVaryings input) { Varyings output; output.positionCS = input.positionCS; #if defined(LIGHTMAP_ON) output.staticLightmapUV = input.staticLightmapUV; #endif #if defined(DYNAMICLIGHTMAP_ON) output.dynamicLightmapUV = input.dynamicLightmapUV; #endif #if !defined(LIGHTMAP_ON) output.sh = input.sh; #endif #if defined(USE_APV_PROBE_OCCLUSION) output.probeOcclusion = input.probeOcclusion; #endif #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) output.shadowCoord = input.shadowCoord; #endif output.tangentWS = input.tangentWS.xyzw; output.texCoord0 = input.texCoord0.xyzw; output.fogFactorAndVertexLight = input.fogFactorAndVertexLight.xyzw; output.positionWS = input.positionWS.xyz; output.normalWS = input.normalWS.xyz; #if UNITY_ANY_INSTANCING_ENABLED || defined(VARYINGS_NEED_INSTANCEID) output.instanceID = input.instanceID; #endif #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) output.stereoTargetEyeIndexAsBlendIdx0 = input.stereoTargetEyeIndexAsBlendIdx0; #endif #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) output.stereoTargetEyeIndexAsRTArrayIdx = input.stereoTargetEyeIndexAsRTArrayIdx; #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) output.cullFace = input.cullFace; #endif return output; } // -------------------------------------------------- // Graph // Graph Properties CBUFFER_START(UnityPerMaterial) float4 Base_Map_TexelSize; float4 Normal_Map_TexelSize; float Normal_Blend; float4 _Emission; float _Metallic_ARG; float _MAOS_ARG; float _Smoothness_ARG; float _DrawOrder; float _DecalMeshBiasType; float _DecalMeshDepthBias; float _DecalMeshViewBias; UNITY_TEXTURE_STREAMING_DEBUG_VARS; CBUFFER_END // Object and Global properties SAMPLER(SamplerState_Linear_Repeat); TEXTURE2D(Base_Map); SAMPLER(samplerBase_Map); TEXTURE2D(Normal_Map); SAMPLER(samplerNormal_Map); // Graph Includes // GraphIncludes: // Graph Functions void Unity_Multiply_float_float(float A, float B, out float Out) { Out = A * B; } // Graph Vertex struct VertexDescription { }; VertexDescription VertexDescriptionFunction(VertexDescriptionInputs IN) { VertexDescription description = (VertexDescription)0; return description; } // Graph Pixel struct SurfaceDescription { float3 BaseColor; float Alpha; float3 NormalTS; float NormalAlpha; float Metallic; float Occlusion; float Smoothness; float MAOSAlpha; }; SurfaceDescription SurfaceDescriptionFunction(SurfaceDescriptionInputs IN) { SurfaceDescription surface = (SurfaceDescription)0; UnityTexture2D _Property_9f1059a7a93a46ccab349515214f3ed2_Out_0_Texture2D = UnityBuildTexture2DStructNoScale(Base_Map); float4 _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4 = SAMPLE_TEXTURE2D(_Property_9f1059a7a93a46ccab349515214f3ed2_Out_0_Texture2D.tex, _Property_9f1059a7a93a46ccab349515214f3ed2_Out_0_Texture2D.samplerstate, _Property_9f1059a7a93a46ccab349515214f3ed2_Out_0_Texture2D.GetTransformedUV(IN.uv0.xy) ); float _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_R_4_Float = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.r; float _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_G_5_Float = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.g; float _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_B_6_Float = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.b; float _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_A_7_Float = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.a; UnityTexture2D _Property_360e6833e8d64d75827ab98987b2b545_Out_0_Texture2D = UnityBuildTexture2DStructNoScale(Normal_Map); float4 _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4 = SAMPLE_TEXTURE2D(_Property_360e6833e8d64d75827ab98987b2b545_Out_0_Texture2D.tex, _Property_360e6833e8d64d75827ab98987b2b545_Out_0_Texture2D.samplerstate, _Property_360e6833e8d64d75827ab98987b2b545_Out_0_Texture2D.GetTransformedUV(IN.uv0.xy) ); _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.rgb = UnpackNormal(_SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4); float _SampleTexture2D_1300b7cb738f4b18927411750039acd2_R_4_Float = _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.r; float _SampleTexture2D_1300b7cb738f4b18927411750039acd2_G_5_Float = _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.g; float _SampleTexture2D_1300b7cb738f4b18927411750039acd2_B_6_Float = _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.b; float _SampleTexture2D_1300b7cb738f4b18927411750039acd2_A_7_Float = _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.a; float _Property_91d01e73dcf34e7d96a9e731fb50e308_Out_0_Float = Normal_Blend; float _Multiply_86a3eb218544413fb0fe50b275affa91_Out_2_Float; Unity_Multiply_float_float(_SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_A_7_Float, _Property_91d01e73dcf34e7d96a9e731fb50e308_Out_0_Float, _Multiply_86a3eb218544413fb0fe50b275affa91_Out_2_Float); float _Property_536c4c3009504e63ade4e6e77148fba6_Out_0_Float = _Metallic_ARG; float _Property_6f4b84479ee74be4a15c88d81536f15b_Out_0_Float = _Smoothness_ARG; float _Property_597ae0960908464a9fc48d73ac31b4ce_Out_0_Float = _MAOS_ARG; surface.BaseColor = (_SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.xyz); surface.Alpha = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_A_7_Float; surface.NormalTS = (_SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.xyz); surface.NormalAlpha = _Multiply_86a3eb218544413fb0fe50b275affa91_Out_2_Float; surface.Metallic = _Property_536c4c3009504e63ade4e6e77148fba6_Out_0_Float; surface.Occlusion = float(1); surface.Smoothness = _Property_6f4b84479ee74be4a15c88d81536f15b_Out_0_Float; surface.MAOSAlpha = _Property_597ae0960908464a9fc48d73ac31b4ce_Out_0_Float; return surface; } // -------------------------------------------------- // Build Graph Inputs // $features.graphVertex: $include("VertexAnimation.template.hlsl") // ^ ERROR: $include cannot find file : VertexAnimation.template.hlsl. Looked into: // Packages/com.unity.shadergraph/Editor/Generation/Templates // $features.graphPixel: $include("SharedCode.template.hlsl") // ^ ERROR: $include cannot find file : SharedCode.template.hlsl. Looked into: // Packages/com.unity.shadergraph/Editor/Generation/Templates SurfaceDescriptionInputs BuildSurfaceDescriptionInputs(Varyings input) { SurfaceDescriptionInputs output; ZERO_INITIALIZE(SurfaceDescriptionInputs, output); /* WARNING: $splice Could not find named fragment 'CustomInterpolatorCopyToSDI' */ output.TangentSpaceNormal = float3(0.0f, 0.0f, 1.0f); #if UNITY_UV_STARTS_AT_TOP #else #endif output.uv0 = input.texCoord0; #if UNITY_ANY_INSTANCING_ENABLED #else // TODO: XR support for procedural instancing because in this case UNITY_ANY_INSTANCING_ENABLED is not defined and instanceID is incorrect. #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) #define BUILD_SURFACE_DESCRIPTION_INPUTS_OUTPUT_FACESIGN output.FaceSign = IS_FRONT_VFACE(input.cullFace, true, false); #else #define BUILD_SURFACE_DESCRIPTION_INPUTS_OUTPUT_FACESIGN #endif #undef BUILD_SURFACE_DESCRIPTION_INPUTS_OUTPUT_FACESIGN return output; } // -------------------------------------------------- // Build Surface Data void GetSurfaceData(Varyings input, float4 positionCS, float angleFadeFactor, out DecalSurfaceData surfaceData) { #if (SHADERPASS == SHADERPASS_DBUFFER_PROJECTOR) || (SHADERPASS == SHADERPASS_FORWARD_EMISSIVE_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_SCREEN_SPACE_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_GBUFFER_PROJECTOR) half4x4 normalToWorld = UNITY_ACCESS_INSTANCED_PROP(Decal, _NormalToWorld); half fadeFactor = clamp(normalToWorld[0][3], 0.0f, 1.0f) * angleFadeFactor; float2 scale = float2(normalToWorld[3][0], normalToWorld[3][1]); float2 offset = float2(normalToWorld[3][2], normalToWorld[3][3]); input.texCoord0.xy = input.texCoord0.xy * scale + offset; half3 normalWS = TransformObjectToWorldDir(half3(0, 1, 0)); half3 tangentWS = TransformObjectToWorldDir(half3(1, 0, 0)); half3 bitangentWS = TransformObjectToWorldDir(half3(0, 0, 1)); half sign = dot(cross(normalWS, tangentWS), bitangentWS) > 0 ? 1 : -1; input.normalWS.xyz = normalWS; input.tangentWS.xyzw = half4(tangentWS, sign); #else #if defined(LOD_FADE_CROSSFADE) && USE_UNITY_CROSSFADE LODFadeCrossFade(positionCS); #endif half fadeFactor = half(1.0); #endif SurfaceDescriptionInputs surfaceDescriptionInputs = BuildSurfaceDescriptionInputs(input); SurfaceDescription surfaceDescription = SurfaceDescriptionFunction(surfaceDescriptionInputs); // setup defaults -- these are used if the graph doesn't output a value ZERO_INITIALIZE(DecalSurfaceData, surfaceData); surfaceData.occlusion = half(1.0); surfaceData.smoothness = half(0); #ifdef _MATERIAL_AFFECTS_NORMAL surfaceData.normalWS.w = half(1.0); #else surfaceData.normalWS.w = half(0.0); #endif // copy across graph values, if defined surfaceData.baseColor.xyz = half3(surfaceDescription.BaseColor); surfaceData.baseColor.w = half(surfaceDescription.Alpha * fadeFactor); #if (SHADERPASS == SHADERPASS_DBUFFER_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_SCREEN_SPACE_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_GBUFFER_PROJECTOR) #if defined(_MATERIAL_AFFECTS_NORMAL) surfaceData.normalWS.xyz = normalize(mul((half3x3)normalToWorld, surfaceDescription.NormalTS.xyz)); #else surfaceData.normalWS.xyz = normalize(normalToWorld[2].xyz); #endif #elif (SHADERPASS == SHADERPASS_DBUFFER_MESH) || (SHADERPASS == SHADERPASS_DECAL_SCREEN_SPACE_MESH) || (SHADERPASS == SHADERPASS_DECAL_GBUFFER_MESH) #if defined(_MATERIAL_AFFECTS_NORMAL) float sgn = input.tangentWS.w; // should be either +1 or -1 float3 bitangent = sgn * cross(input.normalWS.xyz, input.tangentWS.xyz); half3x3 tangentToWorld = half3x3(input.tangentWS.xyz, bitangent.xyz, input.normalWS.xyz); // We need to normalize as we use mikkt tangent space and this is expected (tangent space is not normalize) surfaceData.normalWS.xyz = normalize(TransformTangentToWorld(surfaceDescription.NormalTS, tangentToWorld)); #else surfaceData.normalWS.xyz = normalize(half3(input.normalWS)); // Default to vertex normal #endif #endif surfaceData.normalWS.w = surfaceDescription.NormalAlpha * fadeFactor; // In case of Smoothness / AO / Metal, all the three are always computed but color mask can change surfaceData.metallic = half(surfaceDescription.Metallic); surfaceData.occlusion = half(surfaceDescription.Occlusion); surfaceData.smoothness = half(surfaceDescription.Smoothness); surfaceData.MAOSAlpha = half(surfaceDescription.MAOSAlpha * fadeFactor); } // -------------------------------------------------- // Main #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/Varyings.hlsl" #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPassDecal.hlsl" ENDHLSL } Pass { Name "DecalGBufferMesh" Tags { "LightMode" = "DecalGBufferMesh" } // Render State Blend 0 SrcAlpha OneMinusSrcAlpha Blend 1 SrcAlpha OneMinusSrcAlpha Blend 2 SrcAlpha OneMinusSrcAlpha Blend 3 SrcAlpha OneMinusSrcAlpha ZWrite Off ColorMask RGB ColorMask 0 1 ColorMask RGB 2 ColorMask RGB 3 // Debug // // -------------------------------------------------- // Pass HLSLPROGRAM // Pragmas #pragma target 4.5 #pragma exclude_renderers gles3 glcore #pragma vertex Vert #pragma fragment Frag #pragma multi_compile_instancing #pragma multi_compile_fog #pragma editor_sync_compilation // Keywords #pragma multi_compile _ LIGHTMAP_ON #pragma multi_compile _ DYNAMICLIGHTMAP_ON #pragma multi_compile _ DIRLIGHTMAP_COMBINED #pragma multi_compile _ USE_LEGACY_LIGHTMAPS #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN #pragma multi_compile_fragment _ _SHADOWS_SOFT _SHADOWS_SOFT_LOW _SHADOWS_SOFT_MEDIUM _SHADOWS_SOFT_HIGH #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING #pragma multi_compile _ _MIXED_LIGHTING_SUBTRACTIVE #pragma multi_compile _DECAL_NORMAL_BLEND_LOW _DECAL_NORMAL_BLEND_MEDIUM _DECAL_NORMAL_BLEND_HIGH #pragma multi_compile _ _DECAL_LAYERS #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT #pragma multi_compile_fragment _ _RENDER_PASS_ENABLED // GraphKeywords: #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" // Defines #define ATTRIBUTES_NEED_NORMAL #define ATTRIBUTES_NEED_TANGENT #define ATTRIBUTES_NEED_TEXCOORD0 #define ATTRIBUTES_NEED_TEXCOORD1 #define ATTRIBUTES_NEED_TEXCOORD2 #define VARYINGS_NEED_POSITION_WS #define VARYINGS_NEED_NORMAL_WS #define VARYINGS_NEED_TANGENT_WS #define VARYINGS_NEED_TEXCOORD0 #define VARYINGS_NEED_FOG_AND_VERTEX_LIGHT #define VARYINGS_NEED_SH #define VARYINGS_NEED_STATIC_LIGHTMAP_UV #define VARYINGS_NEED_DYNAMIC_LIGHTMAP_UV #define VARYINGS_NEED_SHADOW_COORD #define HAVE_MESH_MODIFICATION #define SHADERPASS SHADERPASS_DECAL_GBUFFER_MESH #define _MATERIAL_AFFECTS_ALBEDO 1 #define _MATERIAL_AFFECTS_NORMAL 1 #define _MATERIAL_AFFECTS_NORMAL_BLEND 1 #define _MATERIAL_AFFECTS_MAOS 1 // -- Properties used by ScenePickingPass #ifdef SCENEPICKINGPASS float4 _SelectionID; #endif #if _RENDER_PASS_ENABLED #define GBUFFER3 0 #define GBUFFER4 1 FRAMEBUFFER_INPUT_X_HALF(GBUFFER3); FRAMEBUFFER_INPUT_X_HALF(GBUFFER4); #endif // Includes #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRendering.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/DebugMipmapStreamingMacros.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ProbeVolumeVariants.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/UnityGBuffer.hlsl" #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DecalInput.hlsl" #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderVariablesDecal.hlsl" // -------------------------------------------------- // Structs and Packing struct Attributes { float3 positionOS : POSITION; float3 normalOS : NORMAL; float4 tangentOS : TANGENT; float4 uv0 : TEXCOORD0; float4 uv1 : TEXCOORD1; float4 uv2 : TEXCOORD2; #if UNITY_ANY_INSTANCING_ENABLED || defined(ATTRIBUTES_NEED_INSTANCEID) uint instanceID : INSTANCEID_SEMANTIC; #endif }; struct Varyings { float4 positionCS : SV_POSITION; float3 positionWS; float3 normalWS; float4 tangentWS; float4 texCoord0; #if defined(LIGHTMAP_ON) float2 staticLightmapUV; #endif #if defined(DYNAMICLIGHTMAP_ON) float2 dynamicLightmapUV; #endif #if !defined(LIGHTMAP_ON) float3 sh; #endif #if defined(USE_APV_PROBE_OCCLUSION) float4 probeOcclusion; #endif float4 fogFactorAndVertexLight; #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) float4 shadowCoord; #endif #if UNITY_ANY_INSTANCING_ENABLED || defined(VARYINGS_NEED_INSTANCEID) uint instanceID : CUSTOM_INSTANCE_ID; #endif #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) uint stereoTargetEyeIndexAsBlendIdx0 : BLENDINDICES0; #endif #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) uint stereoTargetEyeIndexAsRTArrayIdx : SV_RenderTargetArrayIndex; #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMANTIC; #endif }; struct SurfaceDescriptionInputs { float3 TangentSpaceNormal; float4 uv0; }; struct VertexDescriptionInputs { }; struct PackedVaryings { float4 positionCS : SV_POSITION; #if defined(LIGHTMAP_ON) float2 staticLightmapUV : INTERP0; #endif #if defined(DYNAMICLIGHTMAP_ON) float2 dynamicLightmapUV : INTERP1; #endif #if !defined(LIGHTMAP_ON) float3 sh : INTERP2; #endif #if defined(USE_APV_PROBE_OCCLUSION) float4 probeOcclusion : INTERP3; #endif #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) float4 shadowCoord : INTERP4; #endif float4 tangentWS : INTERP5; float4 texCoord0 : INTERP6; float4 fogFactorAndVertexLight : INTERP7; float3 positionWS : INTERP8; float3 normalWS : INTERP9; #if UNITY_ANY_INSTANCING_ENABLED || defined(VARYINGS_NEED_INSTANCEID) uint instanceID : CUSTOM_INSTANCE_ID; #endif #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) uint stereoTargetEyeIndexAsBlendIdx0 : BLENDINDICES0; #endif #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) uint stereoTargetEyeIndexAsRTArrayIdx : SV_RenderTargetArrayIndex; #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMANTIC; #endif }; PackedVaryings PackVaryings (Varyings input) { PackedVaryings output; ZERO_INITIALIZE(PackedVaryings, output); output.positionCS = input.positionCS; #if defined(LIGHTMAP_ON) output.staticLightmapUV = input.staticLightmapUV; #endif #if defined(DYNAMICLIGHTMAP_ON) output.dynamicLightmapUV = input.dynamicLightmapUV; #endif #if !defined(LIGHTMAP_ON) output.sh = input.sh; #endif #if defined(USE_APV_PROBE_OCCLUSION) output.probeOcclusion = input.probeOcclusion; #endif #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) output.shadowCoord = input.shadowCoord; #endif output.tangentWS.xyzw = input.tangentWS; output.texCoord0.xyzw = input.texCoord0; output.fogFactorAndVertexLight.xyzw = input.fogFactorAndVertexLight; output.positionWS.xyz = input.positionWS; output.normalWS.xyz = input.normalWS; #if UNITY_ANY_INSTANCING_ENABLED || defined(VARYINGS_NEED_INSTANCEID) output.instanceID = input.instanceID; #endif #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) output.stereoTargetEyeIndexAsBlendIdx0 = input.stereoTargetEyeIndexAsBlendIdx0; #endif #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) output.stereoTargetEyeIndexAsRTArrayIdx = input.stereoTargetEyeIndexAsRTArrayIdx; #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) output.cullFace = input.cullFace; #endif return output; } Varyings UnpackVaryings (PackedVaryings input) { Varyings output; output.positionCS = input.positionCS; #if defined(LIGHTMAP_ON) output.staticLightmapUV = input.staticLightmapUV; #endif #if defined(DYNAMICLIGHTMAP_ON) output.dynamicLightmapUV = input.dynamicLightmapUV; #endif #if !defined(LIGHTMAP_ON) output.sh = input.sh; #endif #if defined(USE_APV_PROBE_OCCLUSION) output.probeOcclusion = input.probeOcclusion; #endif #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) output.shadowCoord = input.shadowCoord; #endif output.tangentWS = input.tangentWS.xyzw; output.texCoord0 = input.texCoord0.xyzw; output.fogFactorAndVertexLight = input.fogFactorAndVertexLight.xyzw; output.positionWS = input.positionWS.xyz; output.normalWS = input.normalWS.xyz; #if UNITY_ANY_INSTANCING_ENABLED || defined(VARYINGS_NEED_INSTANCEID) output.instanceID = input.instanceID; #endif #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) output.stereoTargetEyeIndexAsBlendIdx0 = input.stereoTargetEyeIndexAsBlendIdx0; #endif #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) output.stereoTargetEyeIndexAsRTArrayIdx = input.stereoTargetEyeIndexAsRTArrayIdx; #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) output.cullFace = input.cullFace; #endif return output; } // -------------------------------------------------- // Graph // Graph Properties CBUFFER_START(UnityPerMaterial) float4 Base_Map_TexelSize; float4 Normal_Map_TexelSize; float Normal_Blend; float4 _Emission; float _Metallic_ARG; float _MAOS_ARG; float _Smoothness_ARG; float _DrawOrder; float _DecalMeshBiasType; float _DecalMeshDepthBias; float _DecalMeshViewBias; UNITY_TEXTURE_STREAMING_DEBUG_VARS; CBUFFER_END // Object and Global properties SAMPLER(SamplerState_Linear_Repeat); TEXTURE2D(Base_Map); SAMPLER(samplerBase_Map); TEXTURE2D(Normal_Map); SAMPLER(samplerNormal_Map); // Graph Includes // GraphIncludes: // Graph Functions void Unity_Multiply_float_float(float A, float B, out float Out) { Out = A * B; } // Graph Vertex struct VertexDescription { }; VertexDescription VertexDescriptionFunction(VertexDescriptionInputs IN) { VertexDescription description = (VertexDescription)0; return description; } // Graph Pixel struct SurfaceDescription { float3 BaseColor; float Alpha; float3 NormalTS; float NormalAlpha; float Metallic; float Occlusion; float Smoothness; float MAOSAlpha; }; SurfaceDescription SurfaceDescriptionFunction(SurfaceDescriptionInputs IN) { SurfaceDescription surface = (SurfaceDescription)0; UnityTexture2D _Property_9f1059a7a93a46ccab349515214f3ed2_Out_0_Texture2D = UnityBuildTexture2DStructNoScale(Base_Map); float4 _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4 = SAMPLE_TEXTURE2D(_Property_9f1059a7a93a46ccab349515214f3ed2_Out_0_Texture2D.tex, _Property_9f1059a7a93a46ccab349515214f3ed2_Out_0_Texture2D.samplerstate, _Property_9f1059a7a93a46ccab349515214f3ed2_Out_0_Texture2D.GetTransformedUV(IN.uv0.xy) ); float _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_R_4_Float = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.r; float _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_G_5_Float = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.g; float _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_B_6_Float = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.b; float _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_A_7_Float = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.a; UnityTexture2D _Property_360e6833e8d64d75827ab98987b2b545_Out_0_Texture2D = UnityBuildTexture2DStructNoScale(Normal_Map); float4 _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4 = SAMPLE_TEXTURE2D(_Property_360e6833e8d64d75827ab98987b2b545_Out_0_Texture2D.tex, _Property_360e6833e8d64d75827ab98987b2b545_Out_0_Texture2D.samplerstate, _Property_360e6833e8d64d75827ab98987b2b545_Out_0_Texture2D.GetTransformedUV(IN.uv0.xy) ); _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.rgb = UnpackNormal(_SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4); float _SampleTexture2D_1300b7cb738f4b18927411750039acd2_R_4_Float = _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.r; float _SampleTexture2D_1300b7cb738f4b18927411750039acd2_G_5_Float = _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.g; float _SampleTexture2D_1300b7cb738f4b18927411750039acd2_B_6_Float = _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.b; float _SampleTexture2D_1300b7cb738f4b18927411750039acd2_A_7_Float = _SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.a; float _Property_91d01e73dcf34e7d96a9e731fb50e308_Out_0_Float = Normal_Blend; float _Multiply_86a3eb218544413fb0fe50b275affa91_Out_2_Float; Unity_Multiply_float_float(_SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_A_7_Float, _Property_91d01e73dcf34e7d96a9e731fb50e308_Out_0_Float, _Multiply_86a3eb218544413fb0fe50b275affa91_Out_2_Float); float _Property_536c4c3009504e63ade4e6e77148fba6_Out_0_Float = _Metallic_ARG; float _Property_6f4b84479ee74be4a15c88d81536f15b_Out_0_Float = _Smoothness_ARG; float _Property_597ae0960908464a9fc48d73ac31b4ce_Out_0_Float = _MAOS_ARG; surface.BaseColor = (_SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_RGBA_0_Vector4.xyz); surface.Alpha = _SampleTexture2D_7388a7ddbf6648ec92c3bb54ed055048_A_7_Float; surface.NormalTS = (_SampleTexture2D_1300b7cb738f4b18927411750039acd2_RGBA_0_Vector4.xyz); surface.NormalAlpha = _Multiply_86a3eb218544413fb0fe50b275affa91_Out_2_Float; surface.Metallic = _Property_536c4c3009504e63ade4e6e77148fba6_Out_0_Float; surface.Occlusion = float(1); surface.Smoothness = _Property_6f4b84479ee74be4a15c88d81536f15b_Out_0_Float; surface.MAOSAlpha = _Property_597ae0960908464a9fc48d73ac31b4ce_Out_0_Float; return surface; } // -------------------------------------------------- // Build Graph Inputs // $features.graphVertex: $include("VertexAnimation.template.hlsl") // ^ ERROR: $include cannot find file : VertexAnimation.template.hlsl. Looked into: // Packages/com.unity.shadergraph/Editor/Generation/Templates // $features.graphPixel: $include("SharedCode.template.hlsl") // ^ ERROR: $include cannot find file : SharedCode.template.hlsl. Looked into: // Packages/com.unity.shadergraph/Editor/Generation/Templates SurfaceDescriptionInputs BuildSurfaceDescriptionInputs(Varyings input) { SurfaceDescriptionInputs output; ZERO_INITIALIZE(SurfaceDescriptionInputs, output); /* WARNING: $splice Could not find named fragment 'CustomInterpolatorCopyToSDI' */ output.TangentSpaceNormal = float3(0.0f, 0.0f, 1.0f); #if UNITY_UV_STARTS_AT_TOP #else #endif output.uv0 = input.texCoord0; #if UNITY_ANY_INSTANCING_ENABLED #else // TODO: XR support for procedural instancing because in this case UNITY_ANY_INSTANCING_ENABLED is not defined and instanceID is incorrect. #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) #define BUILD_SURFACE_DESCRIPTION_INPUTS_OUTPUT_FACESIGN output.FaceSign = IS_FRONT_VFACE(input.cullFace, true, false); #else #define BUILD_SURFACE_DESCRIPTION_INPUTS_OUTPUT_FACESIGN #endif #undef BUILD_SURFACE_DESCRIPTION_INPUTS_OUTPUT_FACESIGN return output; } // -------------------------------------------------- // Build Surface Data void GetSurfaceData(Varyings input, float4 positionCS, float angleFadeFactor, out DecalSurfaceData surfaceData) { #if (SHADERPASS == SHADERPASS_DBUFFER_PROJECTOR) || (SHADERPASS == SHADERPASS_FORWARD_EMISSIVE_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_SCREEN_SPACE_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_GBUFFER_PROJECTOR) half4x4 normalToWorld = UNITY_ACCESS_INSTANCED_PROP(Decal, _NormalToWorld); half fadeFactor = clamp(normalToWorld[0][3], 0.0f, 1.0f) * angleFadeFactor; float2 scale = float2(normalToWorld[3][0], normalToWorld[3][1]); float2 offset = float2(normalToWorld[3][2], normalToWorld[3][3]); input.texCoord0.xy = input.texCoord0.xy * scale + offset; half3 normalWS = TransformObjectToWorldDir(half3(0, 1, 0)); half3 tangentWS = TransformObjectToWorldDir(half3(1, 0, 0)); half3 bitangentWS = TransformObjectToWorldDir(half3(0, 0, 1)); half sign = dot(cross(normalWS, tangentWS), bitangentWS) > 0 ? 1 : -1; input.normalWS.xyz = normalWS; input.tangentWS.xyzw = half4(tangentWS, sign); #else #if defined(LOD_FADE_CROSSFADE) && USE_UNITY_CROSSFADE LODFadeCrossFade(positionCS); #endif half fadeFactor = half(1.0); #endif SurfaceDescriptionInputs surfaceDescriptionInputs = BuildSurfaceDescriptionInputs(input); SurfaceDescription surfaceDescription = SurfaceDescriptionFunction(surfaceDescriptionInputs); // setup defaults -- these are used if the graph doesn't output a value ZERO_INITIALIZE(DecalSurfaceData, surfaceData); surfaceData.occlusion = half(1.0); surfaceData.smoothness = half(0); #ifdef _MATERIAL_AFFECTS_NORMAL surfaceData.normalWS.w = half(1.0); #else surfaceData.normalWS.w = half(0.0); #endif // copy across graph values, if defined surfaceData.baseColor.xyz = half3(surfaceDescription.BaseColor); surfaceData.baseColor.w = half(surfaceDescription.Alpha * fadeFactor); #if (SHADERPASS == SHADERPASS_DBUFFER_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_SCREEN_SPACE_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_GBUFFER_PROJECTOR) #if defined(_MATERIAL_AFFECTS_NORMAL) surfaceData.normalWS.xyz = normalize(mul((half3x3)normalToWorld, surfaceDescription.NormalTS.xyz)); #else surfaceData.normalWS.xyz = normalize(normalToWorld[2].xyz); #endif #elif (SHADERPASS == SHADERPASS_DBUFFER_MESH) || (SHADERPASS == SHADERPASS_DECAL_SCREEN_SPACE_MESH) || (SHADERPASS == SHADERPASS_DECAL_GBUFFER_MESH) #if defined(_MATERIAL_AFFECTS_NORMAL) float sgn = input.tangentWS.w; // should be either +1 or -1 float3 bitangent = sgn * cross(input.normalWS.xyz, input.tangentWS.xyz); half3x3 tangentToWorld = half3x3(input.tangentWS.xyz, bitangent.xyz, input.normalWS.xyz); // We need to normalize as we use mikkt tangent space and this is expected (tangent space is not normalize) surfaceData.normalWS.xyz = normalize(TransformTangentToWorld(surfaceDescription.NormalTS, tangentToWorld)); #else surfaceData.normalWS.xyz = normalize(half3(input.normalWS)); // Default to vertex normal #endif #endif surfaceData.normalWS.w = surfaceDescription.NormalAlpha * fadeFactor; // In case of Smoothness / AO / Metal, all the three are always computed but color mask can change surfaceData.metallic = half(surfaceDescription.Metallic); surfaceData.occlusion = half(surfaceDescription.Occlusion); surfaceData.smoothness = half(surfaceDescription.Smoothness); surfaceData.MAOSAlpha = half(surfaceDescription.MAOSAlpha * fadeFactor); } // -------------------------------------------------- // Main #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/Varyings.hlsl" #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPassDecal.hlsl" ENDHLSL } Pass { Name "ScenePickingPass" Tags { "LightMode" = "Picking" } // Render State Cull Back // Debug // // -------------------------------------------------- // Pass HLSLPROGRAM // Pragmas #pragma target 2.0 #pragma multi_compile_instancing #pragma editor_sync_compilation #pragma vertex Vert #pragma fragment Frag // Keywords // PassKeywords: // GraphKeywords: #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" // Defines #define HAVE_MESH_MODIFICATION #define SHADERPASS SHADERPASS_DEPTHONLY #define SCENEPICKINGPASS 1 // -- Properties used by ScenePickingPass #ifdef SCENEPICKINGPASS float4 _SelectionID; #endif #if _RENDER_PASS_ENABLED #define GBUFFER3 0 #define GBUFFER4 1 FRAMEBUFFER_INPUT_X_HALF(GBUFFER3); FRAMEBUFFER_INPUT_X_HALF(GBUFFER4); #endif // Includes #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRendering.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/DebugMipmapStreamingMacros.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DecalInput.hlsl" #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderVariablesDecal.hlsl" // -------------------------------------------------- // Structs and Packing struct Attributes { float3 positionOS : POSITION; #if UNITY_ANY_INSTANCING_ENABLED || defined(ATTRIBUTES_NEED_INSTANCEID) uint instanceID : INSTANCEID_SEMANTIC; #endif }; struct Varyings { float4 positionCS : SV_POSITION; #if UNITY_ANY_INSTANCING_ENABLED || defined(VARYINGS_NEED_INSTANCEID) uint instanceID : CUSTOM_INSTANCE_ID; #endif #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) uint stereoTargetEyeIndexAsBlendIdx0 : BLENDINDICES0; #endif #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) uint stereoTargetEyeIndexAsRTArrayIdx : SV_RenderTargetArrayIndex; #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMANTIC; #endif }; struct SurfaceDescriptionInputs { }; struct VertexDescriptionInputs { }; struct PackedVaryings { float4 positionCS : SV_POSITION; #if UNITY_ANY_INSTANCING_ENABLED || defined(VARYINGS_NEED_INSTANCEID) uint instanceID : CUSTOM_INSTANCE_ID; #endif #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) uint stereoTargetEyeIndexAsBlendIdx0 : BLENDINDICES0; #endif #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) uint stereoTargetEyeIndexAsRTArrayIdx : SV_RenderTargetArrayIndex; #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMANTIC; #endif }; PackedVaryings PackVaryings (Varyings input) { PackedVaryings output; ZERO_INITIALIZE(PackedVaryings, output); output.positionCS = input.positionCS; #if UNITY_ANY_INSTANCING_ENABLED || defined(VARYINGS_NEED_INSTANCEID) output.instanceID = input.instanceID; #endif #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) output.stereoTargetEyeIndexAsBlendIdx0 = input.stereoTargetEyeIndexAsBlendIdx0; #endif #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) output.stereoTargetEyeIndexAsRTArrayIdx = input.stereoTargetEyeIndexAsRTArrayIdx; #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) output.cullFace = input.cullFace; #endif return output; } Varyings UnpackVaryings (PackedVaryings input) { Varyings output; output.positionCS = input.positionCS; #if UNITY_ANY_INSTANCING_ENABLED || defined(VARYINGS_NEED_INSTANCEID) output.instanceID = input.instanceID; #endif #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) output.stereoTargetEyeIndexAsBlendIdx0 = input.stereoTargetEyeIndexAsBlendIdx0; #endif #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) output.stereoTargetEyeIndexAsRTArrayIdx = input.stereoTargetEyeIndexAsRTArrayIdx; #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) output.cullFace = input.cullFace; #endif return output; } // -------------------------------------------------- // Graph // Graph Properties CBUFFER_START(UnityPerMaterial) float4 Base_Map_TexelSize; float4 Normal_Map_TexelSize; float Normal_Blend; float4 _Emission; float _Metallic_ARG; float _MAOS_ARG; float _Smoothness_ARG; float _DrawOrder; float _DecalMeshBiasType; float _DecalMeshDepthBias; float _DecalMeshViewBias; UNITY_TEXTURE_STREAMING_DEBUG_VARS; CBUFFER_END // Object and Global properties SAMPLER(SamplerState_Linear_Repeat); TEXTURE2D(Base_Map); SAMPLER(samplerBase_Map); TEXTURE2D(Normal_Map); SAMPLER(samplerNormal_Map); // Graph Includes // GraphIncludes: // Graph Functions // GraphFunctions: // Graph Vertex struct VertexDescription { }; VertexDescription VertexDescriptionFunction(VertexDescriptionInputs IN) { VertexDescription description = (VertexDescription)0; return description; } // Graph Pixel struct SurfaceDescription { }; SurfaceDescription SurfaceDescriptionFunction(SurfaceDescriptionInputs IN) { SurfaceDescription surface = (SurfaceDescription)0; return surface; } // -------------------------------------------------- // Build Graph Inputs // $features.graphVertex: $include("VertexAnimation.template.hlsl") // ^ ERROR: $include cannot find file : VertexAnimation.template.hlsl. Looked into: // Packages/com.unity.shadergraph/Editor/Generation/Templates // $features.graphPixel: $include("SharedCode.template.hlsl") // ^ ERROR: $include cannot find file : SharedCode.template.hlsl. Looked into: // Packages/com.unity.shadergraph/Editor/Generation/Templates SurfaceDescriptionInputs BuildSurfaceDescriptionInputs(Varyings input) { SurfaceDescriptionInputs output; ZERO_INITIALIZE(SurfaceDescriptionInputs, output); /* WARNING: $splice Could not find named fragment 'CustomInterpolatorCopyToSDI' */ #if UNITY_UV_STARTS_AT_TOP #else #endif #if UNITY_ANY_INSTANCING_ENABLED #else // TODO: XR support for procedural instancing because in this case UNITY_ANY_INSTANCING_ENABLED is not defined and instanceID is incorrect. #endif #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) #define BUILD_SURFACE_DESCRIPTION_INPUTS_OUTPUT_FACESIGN output.FaceSign = IS_FRONT_VFACE(input.cullFace, true, false); #else #define BUILD_SURFACE_DESCRIPTION_INPUTS_OUTPUT_FACESIGN #endif #undef BUILD_SURFACE_DESCRIPTION_INPUTS_OUTPUT_FACESIGN return output; } // -------------------------------------------------- // Build Surface Data void GetSurfaceData(Varyings input, float4 positionCS, float angleFadeFactor, out DecalSurfaceData surfaceData) { #if (SHADERPASS == SHADERPASS_DBUFFER_PROJECTOR) || (SHADERPASS == SHADERPASS_FORWARD_EMISSIVE_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_SCREEN_SPACE_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_GBUFFER_PROJECTOR) half4x4 normalToWorld = UNITY_ACCESS_INSTANCED_PROP(Decal, _NormalToWorld); half fadeFactor = clamp(normalToWorld[0][3], 0.0f, 1.0f) * angleFadeFactor; float2 scale = float2(normalToWorld[3][0], normalToWorld[3][1]); float2 offset = float2(normalToWorld[3][2], normalToWorld[3][3]); half3 normalWS = TransformObjectToWorldDir(half3(0, 1, 0)); half3 tangentWS = TransformObjectToWorldDir(half3(1, 0, 0)); half3 bitangentWS = TransformObjectToWorldDir(half3(0, 0, 1)); half sign = dot(cross(normalWS, tangentWS), bitangentWS) > 0 ? 1 : -1; #else #if defined(LOD_FADE_CROSSFADE) && USE_UNITY_CROSSFADE LODFadeCrossFade(positionCS); #endif half fadeFactor = half(1.0); #endif SurfaceDescriptionInputs surfaceDescriptionInputs = BuildSurfaceDescriptionInputs(input); SurfaceDescription surfaceDescription = SurfaceDescriptionFunction(surfaceDescriptionInputs); // setup defaults -- these are used if the graph doesn't output a value ZERO_INITIALIZE(DecalSurfaceData, surfaceData); surfaceData.occlusion = half(1.0); surfaceData.smoothness = half(0); #ifdef _MATERIAL_AFFECTS_NORMAL surfaceData.normalWS.w = half(1.0); #else surfaceData.normalWS.w = half(0.0); #endif // copy across graph values, if defined #if (SHADERPASS == SHADERPASS_DBUFFER_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_SCREEN_SPACE_PROJECTOR) || (SHADERPASS == SHADERPASS_DECAL_GBUFFER_PROJECTOR) #if defined(_MATERIAL_AFFECTS_NORMAL) #else surfaceData.normalWS.xyz = normalize(normalToWorld[2].xyz); #endif #elif (SHADERPASS == SHADERPASS_DBUFFER_MESH) || (SHADERPASS == SHADERPASS_DECAL_SCREEN_SPACE_MESH) || (SHADERPASS == SHADERPASS_DECAL_GBUFFER_MESH) #if defined(_MATERIAL_AFFECTS_NORMAL) float sgn = input.tangentWS.w; // should be either +1 or -1 float3 bitangent = sgn * cross(input.normalWS.xyz, input.tangentWS.xyz); half3x3 tangentToWorld = half3x3(input.tangentWS.xyz, bitangent.xyz, input.normalWS.xyz); // We need to normalize as we use mikkt tangent space and this is expected (tangent space is not normalize) #else surfaceData.normalWS.xyz = normalize(half3(input.normalWS)); // Default to vertex normal #endif #endif // In case of Smoothness / AO / Metal, all the three are always computed but color mask can change } // -------------------------------------------------- // Main #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/Varyings.hlsl" #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPassDecal.hlsl" ENDHLSL } } CustomEditor "UnityEditor.ShaderGraph.GenericShaderGraphMaterialGUI" CustomEditorForRenderPipeline "UnityEditor.Rendering.Universal.DecalShaderGraphGUI" "UnityEngine.Rendering.Universal.UniversalRenderPipelineAsset" FallBack "Hidden/Shader Graph/FallbackError" }