ict.lixian.three/Assets/AmplifyShaderEditor/Plugins/EditorResources/Templates/Universal/Decal.shader

2852 lines
107 KiB
Plaintext

Shader /*ase_name*/"Hidden/Universal/Decals"/*end*/
{
Properties
{
/*ase_props*/
[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) = "" {}
//_DecalAngleFadeSupported("Decal Angle Fade Supported", Float) = 1
}
SubShader
{
/*ase_subshader_options:Name=Additional Options
Option:Affect BaseColor:false,true:true
true:SetDefine:_MATERIAL_AFFECTS_ALBEDO 1
false:RemoveDefine:_MATERIAL_AFFECTS_ALBEDO 1
Option:Affect Normal:false,true:true
true:SetDefine:_MATERIAL_AFFECTS_NORMAL 1
true:SetPropertyOnPass:DBufferProjector:ColorMask1,true,true,true,true
true:SetPropertyOnPass:DecalGBufferProjector:ColorMask2,true,true,true,false
true:SetPropertyOnPass:DBufferMesh:ColorMask1,true,true,true,true
true:SetPropertyOnPass:DecalGBufferMesh:ColorMask2,true,true,true,false
false:RemoveDefine:_MATERIAL_AFFECTS_NORMAL 1
false:SetPropertyOnPass:DBufferProjector:ColorMask1,false,false,false,false
false:SetPropertyOnPass:DecalGBufferProjector:ColorMask2,false,false,false,false
false:SetPropertyOnPass:DBufferMesh:ColorMask1,false,false,false,false
false:SetPropertyOnPass:DecalGBufferMesh:ColorMask2,false,false,false,false
Option:Blend:false,true:true
true:SetDefine:_MATERIAL_AFFECTS_NORMAL_BLEND 1
false:RemoveDefine:_MATERIAL_AFFECTS_NORMAL_BLEND 1
Option:Affect MAOS:false,true:false
true:SetDefine: _MATERIAL_AFFECTS_MAOS 1
true:ShowPort:DecalScreenSpaceProjector:Metallic
true:ShowPort:DecalScreenSpaceProjector:Occlusion
true:ShowPort:DecalScreenSpaceProjector:Smoothness
true:ShowPort:DecalScreenSpaceProjector:MAOS Alpha
false:RemoveDefine: _MATERIAL_AFFECTS_MAOS 1
false:HidePort:DecalScreenSpaceProjector:Metallic
false:HidePort:DecalScreenSpaceProjector:Occlusion
false:HidePort:DecalScreenSpaceProjector:Smoothness
false:HidePort:DecalScreenSpaceProjector:MAOS Alpha
Option:Affect Emission:false,true:false
true:SetDefine:_MATERIAL_AFFECTS_EMISSION 1
true:IncludePass:DecalProjectorForwardEmissive
true:IncludePass:DecalMeshForwardEmissive
true:ShowPort:DecalScreenSpaceProjector:Emission
false:RemoveDefine:_MATERIAL_AFFECTS_EMISSION 1
false:ExcludePass:DecalProjectorForwardEmissive
false:ExcludePass:DecalMeshForwardEmissive
false:HidePort:DecalScreenSpaceProjector:Emission
Option:Support LOD CrossFade:false,true:false
true:SetDefine:pragma multi_compile _ LOD_FADE_CROSSFADE
false:RemoveDefine:pragma multi_compile _ LOD_FADE_CROSSFADE
Option:Angle Fade:false,true:false
true:SetDefine:DECAL_ANGLE_FADE 1
true:SetShaderProperty:_DecalAngleFadeSupported,[HideInInspector] _DecalAngleFadeSupported("Decal Angle Fade Supported", Float) = 1
false:RemoveDefine:DECAL_ANGLE_FADE 1
false:SetShaderProperty:_DecalAngleFadeSupported,//[HideInInspector] _DecalAngleFadeSupported("Decal Angle Fade Supported", Float) = 1
Option:Vertex Position,InvertActionOnDeselection:Absolute,Relative:Relative
Absolute:SetDefine:ASE_ABSOLUTE_VERTEX_POS 1
Absolute:SetPortName:DecalScreenSpaceProjector:9,Vertex Position
Relative:SetPortName:DecalScreenSpaceProjector:9,Vertex Offset
*/
Tags
{
"RenderPipeline"="UniversalPipeline"
"PreviewType"="Plane"
"ShaderGraphShader"="true"
"ShaderGraphTargetId"=""
}
HLSLINCLUDE
#pragma target 3.5
ENDHLSL
/*ase_pass*/
Pass
{
/*ase_hide_pass*/
Name "DBufferProjector"
Tags
{
"LightMode" = "DBufferProjector"
}
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
HLSLPROGRAM
#pragma vertex Vert
#pragma fragment Frag
#pragma multi_compile_instancing
#pragma multi_compile _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl"
#define HAVE_MESH_MODIFICATION
#define SHADERPASS SHADERPASS_DBUFFER_PROJECTOR
#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 "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.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"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DBuffer.hlsl"
/*ase_pragma*/
struct SurfaceDescription
{
float3 BaseColor;
float Alpha;
float3 NormalTS;
float NormalAlpha;
float Metallic;
float Occlusion;
float Smoothness;
float MAOSAlpha;
};
struct Attributes
{
float3 positionOS : POSITION;
/*ase_vdata:p=p*/
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct PackedVaryings
{
float4 positionCS : SV_POSITION;
/*ase_interp(0,):sp=sp*/
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
CBUFFER_START(UnityPerMaterial)
float _DrawOrder;
float _DecalMeshBiasType;
float _DecalMeshDepthBias;
float _DecalMeshViewBias;
#if defined(DECAL_ANGLE_FADE)
float _DecalAngleFadeSupported;
#endif
CBUFFER_END
/*ase_globals*/
/*ase_funcs*/
void GetSurfaceData(SurfaceDescription surfaceDescription, half3 viewDirectioWS, uint2 positionSS, float angleFadeFactor, out DecalSurfaceData surfaceData)
{
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]);
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
surfaceData.baseColor.xyz = half3(surfaceDescription.BaseColor);
surfaceData.baseColor.w = half(surfaceDescription.Alpha * fadeFactor);
#if defined(_MATERIAL_AFFECTS_NORMAL)
surfaceData.normalWS.xyz = mul((half3x3)normalToWorld, surfaceDescription.NormalTS.xyz);
#else
surfaceData.normalWS.xyz = normalToWorld[2].xyz;
#endif
surfaceData.normalWS.w = surfaceDescription.NormalAlpha * fadeFactor;
#if defined( _MATERIAL_AFFECTS_MAOS )
surfaceData.metallic = half(surfaceDescription.Metallic);
surfaceData.occlusion = half(surfaceDescription.Occlusion);
surfaceData.smoothness = half(surfaceDescription.Smoothness);
surfaceData.MAOSAlpha = half(surfaceDescription.MAOSAlpha * fadeFactor);
#endif
}
#define DECAL_PROJECTOR
#define DECAL_DBUFFER
#if ((!defined(_MATERIAL_AFFECTS_NORMAL) && defined(_MATERIAL_AFFECTS_ALBEDO)) || (defined(_MATERIAL_AFFECTS_NORMAL) && defined(_MATERIAL_AFFECTS_NORMAL_BLEND))) && (defined(DECAL_SCREEN_SPACE) || defined(DECAL_GBUFFER))
#define DECAL_RECONSTRUCT_NORMAL
#elif defined(DECAL_ANGLE_FADE)
#define DECAL_LOAD_NORMAL
#endif
#if defined(DECAL_LOAD_NORMAL)
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareNormalsTexture.hlsl"
#endif
#if defined(DECAL_PROJECTOR) || defined(DECAL_RECONSTRUCT_NORMAL)
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareDepthTexture.hlsl"
#endif
#ifdef DECAL_MESH
#include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/DecalMeshBiasTypeEnum.cs.hlsl"
#endif
#ifdef DECAL_RECONSTRUCT_NORMAL
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/NormalReconstruction.hlsl"
#endif
PackedVaryings Vert(Attributes inputMesh /*ase_vert_input*/ )
{
PackedVaryings packedOutput;
ZERO_INITIALIZE(PackedVaryings, packedOutput);
UNITY_SETUP_INSTANCE_ID(inputMesh);
UNITY_TRANSFER_INSTANCE_ID(inputMesh, packedOutput);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(packedOutput);
/*ase_vert_code:inputMesh=Attributes;packedOutput=PackedVaryings*/
#ifdef ASE_ABSOLUTE_VERTEX_POS
float3 defaultVertexValue = inputMesh.positionOS.xyz;
#else
float3 defaultVertexValue = float3(0, 0, 0);
#endif
float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;8;-1;_VertexP*/defaultVertexValue/*end*/;
#ifdef ASE_ABSOLUTE_VERTEX_POS
inputMesh.positionOS.xyz = vertexValue;
#else
inputMesh.positionOS.xyz += vertexValue;
#endif
VertexPositionInputs vertexInput = GetVertexPositionInputs(inputMesh.positionOS.xyz);
float3 positionWS = TransformObjectToWorld(inputMesh.positionOS);
packedOutput.positionCS = TransformWorldToHClip(positionWS);
return packedOutput;
}
void Frag(PackedVaryings packedInput,
OUTPUT_DBUFFER(outDBuffer)
/*ase_frag_input*/
)
{
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(packedInput);
UNITY_SETUP_INSTANCE_ID(packedInput);
half angleFadeFactor = 1.0;
#if UNITY_REVERSED_Z
float depth = LoadSceneDepth(packedInput.positionCS.xy);
#else
float depth = lerp(UNITY_NEAR_CLIP_VALUE, 1, LoadSceneDepth(packedInput.positionCS.xy));
#endif
/*ase_local_var:wn*/half3 normalWS = 0;
#if defined(DECAL_RECONSTRUCT_NORMAL)
#if defined(_DECAL_NORMAL_BLEND_HIGH)
normalWS = half3(ReconstructNormalTap9(packedInput.positionCS.xy));
#elif defined(_DECAL_NORMAL_BLEND_MEDIUM)
normalWS = half3(ReconstructNormalTap5(packedInput.positionCS.xy));
#else
normalWS = half3(ReconstructNormalDerivative(packedInput.positionCS.xy));
#endif
#elif defined(DECAL_LOAD_NORMAL)
normalWS = half3(LoadSceneNormals(packedInput.positionCS.xy));
#endif
float2 positionSS = packedInput.positionCS.xy * _ScreenSize.zw;
/*ase_local_var:wp*/float3 positionWS = ComputeWorldSpacePosition(positionSS, depth, UNITY_MATRIX_I_VP);
float3 positionDS = TransformWorldToObject(positionWS);
positionDS = positionDS * float3(1.0, -1.0, 1.0);
float clipValue = 0.5 - Max3(abs(positionDS).x, abs(positionDS).y, abs(positionDS).z);
clip(clipValue);
/*ase_local_var:uv0*/float2 texCoord = positionDS.xz + float2(0.5, 0.5);
#ifdef DECAL_ANGLE_FADE
half4x4 normalToWorld = UNITY_ACCESS_INSTANCED_PROP(Decal, _NormalToWorld);
half2 angleFade = half2(normalToWorld[1][3], normalToWorld[2][3]);
if (angleFade.y < 0.0f)
{
half3 decalNormal = half3(normalToWorld[0].z, normalToWorld[1].z, normalToWorld[2].z);
half dotAngle = dot(normalWS, decalNormal);
angleFadeFactor = saturate(angleFade.x + angleFade.y * (dotAngle * (dotAngle - 2.0)));
}
#endif
half3 viewDirectionWS = half3(1.0, 1.0, 1.0);
DecalSurfaceData surfaceData;
SurfaceDescription surfaceDescription = (SurfaceDescription)0;
/*ase_frag_code:packedInput=PackedVaryings*/
surfaceDescription.BaseColor = /*ase_frag_out:Base Color;Float3;0;-1;_BaseColor*/IsGammaSpace() ? float3(0.5, 0.5, 0.5) : SRGBToLinear(float3(0.5, 0.5, 0.5))/*end*/;
surfaceDescription.Alpha = /*ase_frag_out:Alpha;Float;1;-1;_Alpha*/1/*end*/;
surfaceDescription.NormalTS = /*ase_frag_out:Normal;Float3;2;-1;_NormalTS*/float3(0.0f, 0.0f, 1.0f)/*end*/;
surfaceDescription.NormalAlpha = /*ase_frag_out:Normal Alpha;Float;3;-1;_NormalAlpha*/1/*end*/;
#if defined( _MATERIAL_AFFECTS_MAOS )
surfaceDescription.Metallic = /*ase_frag_out:Metallic;Float;4;-1;_Metallic*/0/*end*/;
surfaceDescription.Occlusion = /*ase_frag_out:Occlusion;Float;5;-1;_Occlusion*/1/*end*/;
surfaceDescription.Smoothness =/*ase_frag_out:Smoothness;Float;6;-1;_Smoothness*/ 0.5/*end*/;
surfaceDescription.MAOSAlpha = /*ase_frag_out:MAOS Alpha;Float;7;-1;_MAOSAlpha*/1/*end*/;
#endif
GetSurfaceData(surfaceDescription, viewDirectionWS, (uint2)positionSS, angleFadeFactor, surfaceData);
ENCODE_INTO_DBUFFER(surfaceData, outDBuffer);
}
ENDHLSL
}
/*ase_pass*/
Pass
{
/*ase_hide_pass*/
Name "DecalProjectorForwardEmissive"
Tags
{
"LightMode" = "DecalProjectorForwardEmissive"
}
Cull Front
Blend 0 SrcAlpha One
ZTest Greater
ZWrite Off
HLSLPROGRAM
#pragma vertex Vert
#pragma fragment Frag
#pragma multi_compile_instancing
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl"
#define HAVE_MESH_MODIFICATION
#define SHADERPASS SHADERPASS_FORWARD_EMISSIVE_PROJECTOR
#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 "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.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"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DBuffer.hlsl"
/*ase_pragma*/
struct SurfaceDescription
{
float Alpha;
float3 Emission;
};
struct Attributes
{
float3 positionOS : POSITION;
/*ase_vdata:p=p*/
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct PackedVaryings
{
float4 positionCS : SV_POSITION;
/*ase_interp(0,):sp=sp*/
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
CBUFFER_START(UnityPerMaterial)
float _DrawOrder;
float _DecalMeshBiasType;
float _DecalMeshDepthBias;
float _DecalMeshViewBias;
#if defined(DECAL_ANGLE_FADE)
float _DecalAngleFadeSupported;
#endif
CBUFFER_END
/*ase_globals*/
/*ase_funcs*/
void GetSurfaceData( SurfaceDescription surfaceDescription, half3 viewDirectioWS, uint2 positionSS, float angleFadeFactor, out DecalSurfaceData surfaceData)
{
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]);
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
#if defined( _MATERIAL_AFFECTS_EMISSION )
surfaceData.emissive.rgb = half3(surfaceDescription.Emission.rgb * fadeFactor);
#endif
surfaceData.baseColor.w = half(surfaceDescription.Alpha * fadeFactor);
}
#define DECAL_PROJECTOR
#define DECAL_FORWARD_EMISSIVE
#if ((!defined(_MATERIAL_AFFECTS_NORMAL) && defined(_MATERIAL_AFFECTS_ALBEDO)) || (defined(_MATERIAL_AFFECTS_NORMAL) && defined(_MATERIAL_AFFECTS_NORMAL_BLEND))) && (defined(DECAL_SCREEN_SPACE) || defined(DECAL_GBUFFER))
#define DECAL_RECONSTRUCT_NORMAL
#elif defined(DECAL_ANGLE_FADE)
#define DECAL_LOAD_NORMAL
#endif
#if defined(DECAL_LOAD_NORMAL)
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareNormalsTexture.hlsl"
#endif
#if defined(DECAL_PROJECTOR) || defined(DECAL_RECONSTRUCT_NORMAL)
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareDepthTexture.hlsl"
#endif
#ifdef DECAL_MESH
#include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/DecalMeshBiasTypeEnum.cs.hlsl"
#endif
#ifdef DECAL_RECONSTRUCT_NORMAL
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/NormalReconstruction.hlsl"
#endif
PackedVaryings Vert(Attributes inputMesh /*ase_vert_input*/ )
{
PackedVaryings packedOutput;
ZERO_INITIALIZE(PackedVaryings, packedOutput);
UNITY_SETUP_INSTANCE_ID(inputMesh);
UNITY_TRANSFER_INSTANCE_ID(inputMesh, packedOutput);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(packedOutput);
/*ase_vert_code:inputMesh=Attributes;packedOutput=PackedVaryings*/
#ifdef ASE_ABSOLUTE_VERTEX_POS
float3 defaultVertexValue = inputMesh.positionOS.xyz;
#else
float3 defaultVertexValue = float3(0, 0, 0);
#endif
float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;2;-1;_VertexP*/defaultVertexValue/*end*/;
#ifdef ASE_ABSOLUTE_VERTEX_POS
inputMesh.positionOS.xyz = vertexValue;
#else
inputMesh.positionOS.xyz += vertexValue;
#endif
VertexPositionInputs vertexInput = GetVertexPositionInputs(inputMesh.positionOS.xyz);
float3 positionWS = TransformObjectToWorld(inputMesh.positionOS);
packedOutput.positionCS = TransformWorldToHClip(positionWS);
return packedOutput;
}
void Frag(PackedVaryings packedInput,
out half4 outEmissive : SV_Target0
/*ase_frag_input*/
)
{
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(packedInput);
UNITY_SETUP_INSTANCE_ID(packedInput);
half angleFadeFactor = 1.0;
#if UNITY_REVERSED_Z
float depth = LoadSceneDepth(packedInput.positionCS.xy);
#else
float depth = lerp(UNITY_NEAR_CLIP_VALUE, 1, LoadSceneDepth(packedInput.positionCS.xy));
#endif
/*ase_local_var:wn*/half3 normalWS = 0;
#if defined(DECAL_RECONSTRUCT_NORMAL)
#if defined(_DECAL_NORMAL_BLEND_HIGH)
normalWS = half3(ReconstructNormalTap9(packedInput.positionCS.xy));
#elif defined(_DECAL_NORMAL_BLEND_MEDIUM)
normalWS = half3(ReconstructNormalTap5(packedInput.positionCS.xy));
#else
normalWS = half3(ReconstructNormalDerivative(packedInput.positionCS.xy));
#endif
#elif defined(DECAL_LOAD_NORMAL)
normalWS = half3(LoadSceneNormals(packedInput.positionCS.xy));
#endif
float2 positionSS = packedInput.positionCS.xy * _ScreenSize.zw;
/*ase_local_var:wp*/float3 positionWS = ComputeWorldSpacePosition(positionSS, depth, UNITY_MATRIX_I_VP);
float3 positionDS = TransformWorldToObject(positionWS);
positionDS = positionDS * float3(1.0, -1.0, 1.0);
float clipValue = 0.5 - Max3(abs(positionDS).x, abs(positionDS).y, abs(positionDS).z);
clip(clipValue);
/*ase_local_var:uv0*/float2 texCoord = positionDS.xz + float2(0.5, 0.5);
#ifdef DECAL_ANGLE_FADE
half4x4 normalToWorld = UNITY_ACCESS_INSTANCED_PROP(Decal, _NormalToWorld);
half2 angleFade = half2(normalToWorld[1][3], normalToWorld[2][3]);
if (angleFade.y < 0.0f)
{
half3 decalNormal = half3(normalToWorld[0].z, normalToWorld[1].z, normalToWorld[2].z);
half dotAngle = dot(normalWS, decalNormal);
angleFadeFactor = saturate(angleFade.x + angleFade.y * (dotAngle * (dotAngle - 2.0)));
}
#endif
half3 viewDirectionWS = half3(1.0, 1.0, 1.0);
DecalSurfaceData surfaceData;
SurfaceDescription surfaceDescription = (SurfaceDescription)0;
/*ase_frag_code:packedInput=PackedVaryings*/
surfaceDescription.Alpha = /*ase_frag_out:Alpha;Float;0;-1;_Alpha*/1/*end*/;
#if defined( _MATERIAL_AFFECTS_EMISSION )
surfaceDescription.Emission = /*ase_frag_out:Emission;Float3;1;-1;_Emission*/float3(0, 0, 0)/*end*/;
#endif
GetSurfaceData( surfaceDescription, viewDirectionWS, (uint2)positionSS, angleFadeFactor, surfaceData);
outEmissive.rgb = surfaceData.emissive;
outEmissive.a = surfaceData.baseColor.a;
}
ENDHLSL
}
/*ase_pass*/
Pass
{
/*ase_main_pass*/
Name "DecalScreenSpaceProjector"
Tags
{
"LightMode" = "DecalScreenSpaceProjector"
}
Cull Front
Blend SrcAlpha OneMinusSrcAlpha
ZTest Greater
ZWrite Off
HLSLPROGRAM
#pragma vertex Vert
#pragma fragment Frag
#pragma multi_compile_instancing
#pragma multi_compile_fog
#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 _ _ADDITIONAL_LIGHT_SHADOWS
#pragma multi_compile _ _SHADOWS_SOFT
#pragma multi_compile _ _CLUSTERED_RENDERING
#pragma multi_compile _DECAL_NORMAL_BLEND_LOW _DECAL_NORMAL_BLEND_MEDIUM _DECAL_NORMAL_BLEND_HIGH
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl"
#define ATTRIBUTES_NEED_NORMAL
#define VARYINGS_NEED_NORMAL_WS
#define VARYINGS_NEED_VIEWDIRECTION_WS
#define VARYINGS_NEED_FOG_AND_VERTEX_LIGHT
#define VARYINGS_NEED_SH
#define VARYINGS_NEED_STATIC_LIGHTMAP_UV
#define VARYINGS_NEED_DYNAMIC_LIGHTMAP_UV
#define HAVE_MESH_MODIFICATION
#define SHADERPASS SHADERPASS_DECAL_SCREEN_SPACE_PROJECTOR
#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 "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.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"
/*ase_pragma*/
struct SurfaceDescription
{
float3 BaseColor;
float Alpha;
float3 NormalTS;
float NormalAlpha;
float Metallic;
float Occlusion;
float Smoothness;
float MAOSAlpha;
float3 Emission;
};
struct Attributes
{
float3 positionOS : POSITION;
float3 normalOS : NORMAL;
/*ase_vdata:p=p;n=n*/
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct PackedVaryings
{
float4 positionCS : SV_POSITION;
float3 normalWS : TEXCOORD0;
float3 viewDirectionWS : TEXCOORD1;
float2 staticLightmapUV : TEXCOORD2;
float2 dynamicLightmapUV : TEXCOORD3;
float3 sh : TEXCOORD4;
float4 fogFactorAndVertexLight : TEXCOORD5;
/*ase_interp(6,):sp=sp;wn=tc0;wvd=tc1*/
UNITY_VERTEX_OUTPUT_STEREO
};
CBUFFER_START(UnityPerMaterial)
float _DrawOrder;
float _DecalMeshBiasType;
float _DecalMeshDepthBias;
float _DecalMeshViewBias;
#if defined(DECAL_ANGLE_FADE)
float _DecalAngleFadeSupported;
#endif
CBUFFER_END
/*ase_globals*/
/*ase_funcs*/
void GetSurfaceData( SurfaceDescription surfaceDescription, half3 viewDirectioWS, uint2 positionSS, float angleFadeFactor, out DecalSurfaceData surfaceData)
{
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]);
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
#if defined( _MATERIAL_AFFECTS_EMISSION )
surfaceData.emissive.rgb = half3(surfaceDescription.Emission.rgb * fadeFactor);
#endif
surfaceData.baseColor.xyz = half3(surfaceDescription.BaseColor);
surfaceData.baseColor.w = half(surfaceDescription.Alpha * fadeFactor);
#if defined(_MATERIAL_AFFECTS_NORMAL)
surfaceData.normalWS.xyz = mul((half3x3)normalToWorld, surfaceDescription.NormalTS.xyz);
#else
surfaceData.normalWS.xyz = normalToWorld[2].xyz;
#endif
surfaceData.normalWS.w = surfaceDescription.NormalAlpha * fadeFactor;
#if defined( _MATERIAL_AFFECTS_MAOS )
surfaceData.metallic = half(surfaceDescription.Metallic);
surfaceData.occlusion = half(surfaceDescription.Occlusion);
surfaceData.smoothness = half(surfaceDescription.Smoothness);
surfaceData.MAOSAlpha = half(surfaceDescription.MAOSAlpha * fadeFactor);
#endif
}
#define DECAL_PROJECTOR
#define DECAL_SCREEN_SPACE
#if ((!defined(_MATERIAL_AFFECTS_NORMAL) && defined(_MATERIAL_AFFECTS_ALBEDO)) || (defined(_MATERIAL_AFFECTS_NORMAL) && defined(_MATERIAL_AFFECTS_NORMAL_BLEND))) && (defined(DECAL_SCREEN_SPACE) || defined(DECAL_GBUFFER))
#define DECAL_RECONSTRUCT_NORMAL
#elif defined(DECAL_ANGLE_FADE)
#define DECAL_LOAD_NORMAL
#endif
#if defined(DECAL_LOAD_NORMAL)
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareNormalsTexture.hlsl"
#endif
#if defined(DECAL_PROJECTOR) || defined(DECAL_RECONSTRUCT_NORMAL)
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareDepthTexture.hlsl"
#endif
#ifdef DECAL_MESH
#include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/DecalMeshBiasTypeEnum.cs.hlsl"
#endif
#ifdef DECAL_RECONSTRUCT_NORMAL
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/NormalReconstruction.hlsl"
#endif
void InitializeInputData( PackedVaryings input, float3 positionWS, half3 normalWS, half3 viewDirectionWS, out InputData inputData)
{
inputData = (InputData)0;
inputData.positionWS = positionWS;
inputData.normalWS = normalWS;
inputData.viewDirectionWS = viewDirectionWS;
inputData.shadowCoord = float4(0, 0, 0, 0);
inputData.fogCoord = half(input.fogFactorAndVertexLight.x);
inputData.vertexLighting = half3(input.fogFactorAndVertexLight.yzw);
#if defined(VARYINGS_NEED_DYNAMIC_LIGHTMAP_UV) && defined(DYNAMICLIGHTMAP_ON)
inputData.bakedGI = SAMPLE_GI(input.staticLightmapUV, input.dynamicLightmapUV.xy, half3(input.sh), normalWS);
#elif defined(VARYINGS_NEED_STATIC_LIGHTMAP_UV)
inputData.bakedGI = SAMPLE_GI(input.staticLightmapUV, half3(input.sh), normalWS);
#endif
#if defined(VARYINGS_NEED_STATIC_LIGHTMAP_UV)
inputData.shadowMask = SAMPLE_SHADOWMASK(input.staticLightmapUV);
#endif
#if defined(DEBUG_DISPLAY)
#if defined(VARYINGS_NEED_DYNAMIC_LIGHTMAP_UV) && defined(DYNAMICLIGHTMAP_ON)
inputData.dynamicLightmapUV = input.dynamicLightmapUV.xy;
#endif
#if defined(VARYINGS_NEED_STATIC_LIGHTMAP_UV && LIGHTMAP_ON)
inputData.staticLightmapUV = input.staticLightmapUV;
#elif defined(VARYINGS_NEED_SH)
inputData.vertexSH = input.sh;
#endif
#endif
inputData.normalizedScreenSpaceUV = GetNormalizedScreenSpaceUV(input.positionCS);
}
void GetSurface(DecalSurfaceData decalSurfaceData, inout SurfaceData surfaceData)
{
surfaceData.albedo = decalSurfaceData.baseColor.rgb;
surfaceData.metallic = saturate(decalSurfaceData.metallic);
surfaceData.specular = 0;
surfaceData.smoothness = saturate(decalSurfaceData.smoothness);
surfaceData.occlusion = decalSurfaceData.occlusion;
surfaceData.emission = decalSurfaceData.emissive;
surfaceData.alpha = saturate(decalSurfaceData.baseColor.w);
surfaceData.clearCoatMask = 0;
surfaceData.clearCoatSmoothness = 1;
}
PackedVaryings Vert(Attributes inputMesh /*ase_vert_input*/ )
{
PackedVaryings packedOutput;
ZERO_INITIALIZE(PackedVaryings, packedOutput);
UNITY_SETUP_INSTANCE_ID(inputMesh);
UNITY_TRANSFER_INSTANCE_ID(inputMesh, packedOutput);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(packedOutput);
/*ase_vert_code:inputMesh=Attributes;packedOutput=PackedVaryings*/
#ifdef ASE_ABSOLUTE_VERTEX_POS
float3 defaultVertexValue = inputMesh.positionOS.xyz;
#else
float3 defaultVertexValue = float3(0, 0, 0);
#endif
float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;9;-1;_VertexP*/defaultVertexValue/*end*/;
#ifdef ASE_ABSOLUTE_VERTEX_POS
inputMesh.positionOS.xyz = vertexValue;
#else
inputMesh.positionOS.xyz += vertexValue;
#endif
VertexPositionInputs vertexInput = GetVertexPositionInputs(inputMesh.positionOS.xyz);
float3 positionWS = TransformObjectToWorld(inputMesh.positionOS);
float3 normalWS = TransformObjectToWorldNormal(inputMesh.normalOS);
packedOutput.positionCS = TransformWorldToHClip(positionWS);
half fogFactor = 0;
#if !defined(_FOG_FRAGMENT)
fogFactor = ComputeFogFactor(packedOutput.positionCS.z);
#endif
half3 vertexLight = VertexLighting(positionWS, normalWS);
packedOutput.fogFactorAndVertexLight = half4(fogFactor, vertexLight);
packedOutput.normalWS.xyz = normalWS;
packedOutput.viewDirectionWS.xyz = GetWorldSpaceViewDir(positionWS);
#if defined(LIGHTMAP_ON)
OUTPUT_LIGHTMAP_UV(inputMesh.uv1, unity_LightmapST, packedOutput.staticLightmapUV);
#endif
#if defined(DYNAMICLIGHTMAP_ON)
packedOutput.dynamicLightmapUV.xy = inputMesh.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw;
#endif
#if !defined(LIGHTMAP_ON)
packedOutput.sh.xyz = float3(SampleSHVertex(half3(normalWS)));
#endif
return packedOutput;
}
void Frag(PackedVaryings packedInput,
out half4 outColor : SV_Target0
/*ase_frag_input*/
)
{
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(packedInput);
UNITY_SETUP_INSTANCE_ID(packedInput);
half angleFadeFactor = 1.0;
#if UNITY_REVERSED_Z
float depth = LoadSceneDepth(packedInput.positionCS.xy);
#else
float depth = lerp(UNITY_NEAR_CLIP_VALUE, 1, LoadSceneDepth(packedInput.positionCS.xy));
#endif
/*ase_local_var:wn*/half3 normalWS = 0;
#if defined(DECAL_RECONSTRUCT_NORMAL)
#if defined(_DECAL_NORMAL_BLEND_HIGH)
normalWS = half3(ReconstructNormalTap9(packedInput.positionCS.xy));
#elif defined(_DECAL_NORMAL_BLEND_MEDIUM)
normalWS = half3(ReconstructNormalTap5(packedInput.positionCS.xy));
#else
normalWS = half3(ReconstructNormalDerivative(packedInput.positionCS.xy));
#endif
#elif defined(DECAL_LOAD_NORMAL)
normalWS = half3(LoadSceneNormals(packedInput.positionCS.xy));
#endif
float2 positionSS = packedInput.positionCS.xy * _ScreenSize.zw;
/*ase_local_var:wp*/float3 positionWS = ComputeWorldSpacePosition(positionSS, depth, UNITY_MATRIX_I_VP);
float3 positionDS = TransformWorldToObject(positionWS);
positionDS = positionDS * float3(1.0, -1.0, 1.0);
float clipValue = 0.5 - Max3(abs(positionDS).x, abs(positionDS).y, abs(positionDS).z);
clip(clipValue);
/*ase_local_var:uv0*/float2 texCoord = positionDS.xz + float2(0.5, 0.5);
#ifdef DECAL_ANGLE_FADE
half4x4 normalToWorld = UNITY_ACCESS_INSTANCED_PROP(Decal, _NormalToWorld);
half2 angleFade = half2(normalToWorld[1][3], normalToWorld[2][3]);
if (angleFade.y < 0.0f)
{
half3 decalNormal = half3(normalToWorld[0].z, normalToWorld[1].z, normalToWorld[2].z);
half dotAngle = dot(normalWS, decalNormal);
angleFadeFactor = saturate(angleFade.x + angleFade.y * (dotAngle * (dotAngle - 2.0)));
}
#endif
half3 viewDirectionWS = half3(packedInput.viewDirectionWS);
DecalSurfaceData surfaceData;
/*ase_frag_code:packedInput=PackedVaryings*/
SurfaceDescription surfaceDescription = (SurfaceDescription)0;
surfaceDescription.BaseColor = /*ase_frag_out:BaseColor;Float3;0;-1;_BaseColor*/IsGammaSpace() ? float3(0.5, 0.5, 0.5) : SRGBToLinear(float3(0.5, 0.5, 0.5))/*end*/;
surfaceDescription.Alpha = /*ase_frag_out:Alpha;Float;1;-1;_Alpha*/1/*end*/;
surfaceDescription.NormalTS = /*ase_frag_out:Normal;Float3;2;-1;_NormalTS*/float3(0.0f, 0.0f, 1.0f)/*end*/;
surfaceDescription.NormalAlpha = /*ase_frag_out:Normal Alpha;Float;3;-1;_NormalAlpha*/1/*end*/;
#if defined( _MATERIAL_AFFECTS_MAOS )
surfaceDescription.Metallic = /*ase_frag_out:Metallic;Float;4;-1;_Metallic*/0/*end*/;
surfaceDescription.Occlusion = /*ase_frag_out:Occlusion;Float;5;-1;_Occlusion*/1/*end*/;
surfaceDescription.Smoothness = /*ase_frag_out:Smoothness;Float;6;-1;_Smoothness*/0.5/*end*/;
surfaceDescription.MAOSAlpha = /*ase_frag_out:MAOS Alpha;Float;7;-1;_MAOSAlpha*/1/*end*/;
#endif
#if defined( _MATERIAL_AFFECTS_EMISSION )
surfaceDescription.Emission = /*ase_frag_out:Emission;Float3;8;-1;_Emission*/float3(0, 0, 0)/*end*/;
#endif
GetSurfaceData( surfaceDescription, viewDirectionWS, (uint2)positionSS, angleFadeFactor, surfaceData);
#ifdef DECAL_RECONSTRUCT_NORMAL
surfaceData.normalWS.xyz = normalize(lerp(normalWS.xyz, surfaceData.normalWS.xyz, surfaceData.normalWS.w));
#endif
InputData inputData;
InitializeInputData( packedInput, positionWS, surfaceData.normalWS.xyz, viewDirectionWS, inputData);
SurfaceData surface = (SurfaceData)0;
GetSurface(surfaceData, surface);
half4 color = UniversalFragmentPBR(inputData, surface);
color.rgb = MixFog(color.rgb, inputData.fogCoord);
outColor = color;
}
ENDHLSL
}
/*ase_pass*/
Pass
{
/*ase_hide_pass*/
Name "DecalGBufferProjector"
Tags
{
"LightMode" = "DecalGBufferProjector"
}
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
HLSLPROGRAM
#pragma vertex Vert
#pragma fragment Frag
#pragma multi_compile_instancing
#pragma multi_compile_fog
#pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN
#pragma multi_compile _ _SHADOWS_SOFT
#pragma multi_compile _DECAL_NORMAL_BLEND_LOW _DECAL_NORMAL_BLEND_MEDIUM _DECAL_NORMAL_BLEND_HIGH
#pragma multi_compile _ _GBUFFER_NORMALS_OCT
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl"
#define ATTRIBUTES_NEED_NORMAL
#define VARYINGS_NEED_NORMAL_WS
#define VARYINGS_NEED_VIEWDIRECTION_WS
#define VARYINGS_NEED_SH
#define VARYINGS_NEED_STATIC_LIGHTMAP_UV
#define VARYINGS_NEED_DYNAMIC_LIGHTMAP_UV
#define HAVE_MESH_MODIFICATION
#define SHADERPASS SHADERPASS_DECAL_GBUFFER_PROJECTOR
#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 "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.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"
/*ase_pragma*/
struct SurfaceDescription
{
float3 BaseColor;
float Alpha;
float3 NormalTS;
float NormalAlpha;
float Metallic;
float Occlusion;
float Smoothness;
float MAOSAlpha;
float3 Emission;
};
struct Attributes
{
float3 positionOS : POSITION;
float3 normalOS : NORMAL;
/*ase_vdata:p=p;n=n*/
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct PackedVaryings
{
float4 positionCS : SV_POSITION;
float3 normalWS : TEXCOORD0;
float3 viewDirectionWS : TEXCOORD1;
float2 staticLightmapUV : TEXCOORD2;
float2 dynamicLightmapUV : TEXCOORD3;
float3 sh : TEXCOORD4;
/*ase_interp(5,):sp=sp;wn=tc0;wvd=tc1*/
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
CBUFFER_START(UnityPerMaterial)
float _DrawOrder;
float _DecalMeshBiasType;
float _DecalMeshDepthBias;
float _DecalMeshViewBias;
#if defined(DECAL_ANGLE_FADE)
float _DecalAngleFadeSupported;
#endif
CBUFFER_END
/*ase_globals*/
/*ase_funcs*/
void GetSurfaceData(SurfaceDescription surfaceDescription, half3 viewDirectioWS, uint2 positionSS, float angleFadeFactor, out DecalSurfaceData surfaceData)
{
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]);
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
#if defined( _MATERIAL_AFFECTS_EMISSION )
surfaceData.emissive.rgb = half3(surfaceDescription.Emission.rgb * fadeFactor);
#endif
surfaceData.baseColor.xyz = half3(surfaceDescription.BaseColor);
surfaceData.baseColor.w = half(surfaceDescription.Alpha * fadeFactor);
#if defined(_MATERIAL_AFFECTS_NORMAL)
surfaceData.normalWS.xyz = mul((half3x3)normalToWorld, surfaceDescription.NormalTS.xyz);
#else
surfaceData.normalWS.xyz = normalToWorld[2].xyz;
#endif
surfaceData.normalWS.w = surfaceDescription.NormalAlpha * fadeFactor;
#if defined( _MATERIAL_AFFECTS_MAOS )
surfaceData.metallic = half(surfaceDescription.Metallic);
surfaceData.occlusion = half(surfaceDescription.Occlusion);
surfaceData.smoothness = half(surfaceDescription.Smoothness);
surfaceData.MAOSAlpha = half(surfaceDescription.MAOSAlpha * fadeFactor);
#endif
}
#define DECAL_PROJECTOR
#define DECAL_GBUFFER
#if ((!defined(_MATERIAL_AFFECTS_NORMAL) && defined(_MATERIAL_AFFECTS_ALBEDO)) || (defined(_MATERIAL_AFFECTS_NORMAL) && defined(_MATERIAL_AFFECTS_NORMAL_BLEND))) && (defined(DECAL_SCREEN_SPACE) || defined(DECAL_GBUFFER))
#define DECAL_RECONSTRUCT_NORMAL
#elif defined(DECAL_ANGLE_FADE)
#define DECAL_LOAD_NORMAL
#endif
#if defined(DECAL_LOAD_NORMAL)
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareNormalsTexture.hlsl"
#endif
#if defined(DECAL_PROJECTOR) || defined(DECAL_RECONSTRUCT_NORMAL)
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareDepthTexture.hlsl"
#endif
#ifdef DECAL_MESH
#include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/DecalMeshBiasTypeEnum.cs.hlsl"
#endif
#ifdef DECAL_RECONSTRUCT_NORMAL
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/NormalReconstruction.hlsl"
#endif
void InitializeInputData(PackedVaryings input, float3 positionWS, half3 normalWS, half3 viewDirectionWS, out InputData inputData)
{
inputData = (InputData)0;
inputData.positionWS = positionWS;
inputData.normalWS = normalWS;
inputData.viewDirectionWS = viewDirectionWS;
inputData.shadowCoord = float4(0, 0, 0, 0);
#ifdef VARYINGS_NEED_FOG_AND_VERTEX_LIGHT
inputData.fogCoord = half(input.fogFactorAndVertexLight.x);
inputData.vertexLighting = half3(input.fogFactorAndVertexLight.yzw);
#endif
#if defined(VARYINGS_NEED_DYNAMIC_LIGHTMAP_UV) && defined(DYNAMICLIGHTMAP_ON)
inputData.bakedGI = SAMPLE_GI(input.staticLightmapUV, input.dynamicLightmapUV.xy, half3(input.sh), normalWS);
#elif defined(VARYINGS_NEED_STATIC_LIGHTMAP_UV)
inputData.bakedGI = SAMPLE_GI(input.staticLightmapUV, half3(input.sh), normalWS);
#endif
#if defined(VARYINGS_NEED_STATIC_LIGHTMAP_UV)
inputData.shadowMask = SAMPLE_SHADOWMASK(input.staticLightmapUV);
#endif
#if defined(DEBUG_DISPLAY)
#if defined(VARYINGS_NEED_DYNAMIC_LIGHTMAP_UV) && defined(DYNAMICLIGHTMAP_ON)
inputData.dynamicLightmapUV = input.dynamicLightmapUV.xy;
#endif
#if defined(VARYINGS_NEED_STATIC_LIGHTMAP_UV && LIGHTMAP_ON)
inputData.staticLightmapUV = input.staticLightmapUV;
#elif defined(VARYINGS_NEED_SH)
inputData.vertexSH = input.sh;
#endif
#endif
inputData.normalizedScreenSpaceUV = GetNormalizedScreenSpaceUV(input.positionCS);
}
void GetSurface(DecalSurfaceData decalSurfaceData, inout SurfaceData surfaceData)
{
surfaceData.albedo = decalSurfaceData.baseColor.rgb;
surfaceData.metallic = saturate(decalSurfaceData.metallic);
surfaceData.specular = 0;
surfaceData.smoothness = saturate(decalSurfaceData.smoothness);
surfaceData.occlusion = decalSurfaceData.occlusion;
surfaceData.emission = decalSurfaceData.emissive;
surfaceData.alpha = saturate(decalSurfaceData.baseColor.w);
surfaceData.clearCoatMask = 0;
surfaceData.clearCoatSmoothness = 1;
}
PackedVaryings Vert(Attributes inputMesh /*ase_vert_input*/ )
{
PackedVaryings packedOutput;
ZERO_INITIALIZE(PackedVaryings, packedOutput);
UNITY_SETUP_INSTANCE_ID(inputMesh);
UNITY_TRANSFER_INSTANCE_ID(inputMesh, packedOutput);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(packedOutput);
/*ase_vert_code:inputMesh=Attributes;packedOutput=PackedVaryings*/
#ifdef ASE_ABSOLUTE_VERTEX_POS
float3 defaultVertexValue = inputMesh.positionOS.xyz;
#else
float3 defaultVertexValue = float3(0, 0, 0);
#endif
float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;9;-1;_VertexP*/defaultVertexValue/*end*/;
#ifdef ASE_ABSOLUTE_VERTEX_POS
inputMesh.positionOS.xyz = vertexValue;
#else
inputMesh.positionOS.xyz += vertexValue;
#endif
float3 positionWS = TransformObjectToWorld(inputMesh.positionOS);
float3 normalWS = TransformObjectToWorldNormal(inputMesh.normalOS);
packedOutput.positionCS = TransformWorldToHClip(positionWS);
packedOutput.normalWS.xyz = normalWS;
packedOutput.viewDirectionWS.xyz = GetWorldSpaceViewDir(positionWS);
#if defined(LIGHTMAP_ON)
OUTPUT_LIGHTMAP_UV(inputMesh.uv1, unity_LightmapST, packedOutput.staticLightmapUV);
#endif
#if defined(DYNAMICLIGHTMAP_ON)
packedOutput.dynamicLightmapUV.xy = inputMesh.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw;
#endif
#if !defined(LIGHTMAP_ON)
packedOutput.sh = float3(SampleSHVertex(half3(normalWS)));
#endif
return packedOutput;
}
void Frag(PackedVaryings packedInput,
out FragmentOutput fragmentOutput
/*ase_frag_input*/
)
{
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(packedInput);
UNITY_SETUP_INSTANCE_ID(packedInput);
half angleFadeFactor = 1.0;
#if UNITY_REVERSED_Z
float depth = LoadSceneDepth(packedInput.positionCS.xy);
#else
float depth = lerp(UNITY_NEAR_CLIP_VALUE, 1, LoadSceneDepth(packedInput.positionCS.xy));
#endif
/*ase_local_var:wn*/half3 normalWS = 0;
#if defined(DECAL_RECONSTRUCT_NORMAL)
#if defined(_DECAL_NORMAL_BLEND_HIGH)
normalWS = half3(ReconstructNormalTap9(packedInput.positionCS.xy));
#elif defined(_DECAL_NORMAL_BLEND_MEDIUM)
normalWS = half3(ReconstructNormalTap5(packedInput.positionCS.xy));
#else
normalWS = half3(ReconstructNormalDerivative(packedInput.positionCS.xy));
#endif
#elif defined(DECAL_LOAD_NORMAL)
normalWS = half3(LoadSceneNormals(packedInput.positionCS.xy));
#endif
float2 positionSS = packedInput.positionCS.xy * _ScreenSize.zw;
/*ase_local_var:wp*/float3 positionWS = ComputeWorldSpacePosition(positionSS, depth, UNITY_MATRIX_I_VP);
float3 positionDS = TransformWorldToObject(positionWS);
positionDS = positionDS * float3(1.0, -1.0, 1.0);
float clipValue = 0.5 - Max3(abs(positionDS).x, abs(positionDS).y, abs(positionDS).z);
clip(clipValue);
/*ase_local_var:uv0*/float2 texCoord = positionDS.xz + float2(0.5, 0.5);
#ifdef DECAL_ANGLE_FADE
half4x4 normalToWorld = UNITY_ACCESS_INSTANCED_PROP(Decal, _NormalToWorld);
half2 angleFade = half2(normalToWorld[1][3], normalToWorld[2][3]);
if (angleFade.y < 0.0f)
{
half3 decalNormal = half3(normalToWorld[0].z, normalToWorld[1].z, normalToWorld[2].z);
half dotAngle = dot(normalWS, decalNormal);
angleFadeFactor = saturate(angleFade.x + angleFade.y * (dotAngle * (dotAngle - 2.0)));
}
#endif
half3 viewDirectionWS = half3(packedInput.viewDirectionWS);
DecalSurfaceData surfaceData;
SurfaceDescription surfaceDescription = (SurfaceDescription)0;
/*ase_frag_code:packedInput=PackedVaryings*/
surfaceDescription.BaseColor = /*ase_frag_out:Base Color;Float3;0;-1;_BaseColor*/IsGammaSpace() ? float3(0.5, 0.5, 0.5) : SRGBToLinear(float3(0.5, 0.5, 0.5))/*end*/;
surfaceDescription.Alpha = /*ase_frag_out:Alpha;Float;1;-1;_Alpha*/1/*end*/;
surfaceDescription.NormalTS = /*ase_frag_out:Normal;Float3;2;-1;_NormalTS*/float3(0.0f, 0.0f, 1.0f)/*end*/;
surfaceDescription.NormalAlpha = /*ase_frag_out:Normal Alpha;Float;3;-1;_NormalAlpha*/1/*end*/;
#if defined( _MATERIAL_AFFECTS_MAOS )
surfaceDescription.Metallic = /*ase_frag_out:Metallic;Float;4;-1;_Metallic*/0/*end*/;
surfaceDescription.Occlusion =/*ase_frag_out:Occlusion;Float;5;-1;_Occlusion*/1/*end*/;
surfaceDescription.Smoothness = /*ase_frag_out:Smoothness;Float;6;-1;_Smoothness*/0.5/*end*/;
surfaceDescription.MAOSAlpha = /*ase_frag_out:MAOS Alpha;Float;7;-1;_MAOSAlpha*/1/*end*/;
#endif
#if defined( _MATERIAL_AFFECTS_EMISSION )
surfaceDescription.Emission = /*ase_frag_out:Emission;Float;8;-1;_Emission*/float3(0, 0, 0)/*end*/;
#endif
GetSurfaceData(surfaceDescription, viewDirectionWS, (uint2)positionSS, angleFadeFactor, surfaceData);
InputData inputData;
InitializeInputData(packedInput, positionWS, surfaceData.normalWS.xyz, viewDirectionWS, inputData);
SurfaceData surface = (SurfaceData)0;
GetSurface(surfaceData, surface);
BRDFData brdfData;
InitializeBRDFData(surface.albedo, surface.metallic, 0, surface.smoothness, surface.alpha, brdfData);
#ifdef _MATERIAL_AFFECTS_ALBEDO
#ifdef DECAL_RECONSTRUCT_NORMAL
half3 normalGI = normalize(lerp(normalWS.xyz, surfaceData.normalWS.xyz, surfaceData.normalWS.w));
#endif
Light mainLight = GetMainLight(inputData.shadowCoord, inputData.positionWS, inputData.shadowMask);
MixRealtimeAndBakedGI(mainLight, normalGI, inputData.bakedGI, inputData.shadowMask);
half3 color = GlobalIllumination(brdfData, inputData.bakedGI, surface.occlusion, normalGI, inputData.viewDirectionWS);
#else
half3 color = 0;
#endif
half3 packedNormalWS = PackNormal(surfaceData.normalWS.xyz);
fragmentOutput.GBuffer0 = half4(surfaceData.baseColor.rgb, surfaceData.baseColor.a);
fragmentOutput.GBuffer1 = 0;
fragmentOutput.GBuffer2 = half4(packedNormalWS, surfaceData.normalWS.a);
fragmentOutput.GBuffer3 = half4(surfaceData.emissive + color, surfaceData.baseColor.a);
#if OUTPUT_SHADOWMASK
fragmentOutput.GBuffer4 = inputData.shadowMask;
#endif
}
ENDHLSL
}
/*ase_pass*/
Pass
{
/*ase_hide_pass*/
Name "DBufferMesh"
Tags
{
"LightMode" = "DBufferMesh"
}
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
HLSLPROGRAM
#pragma vertex Vert
#pragma fragment Frag
#pragma multi_compile_instancing
#pragma multi_compile _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl"
#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
#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 "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.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"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DBuffer.hlsl"
/*ase_pragma*/
struct SurfaceDescription
{
float3 BaseColor;
float Alpha;
float3 NormalTS;
float NormalAlpha;
float Metallic;
float Occlusion;
float Smoothness;
float MAOSAlpha;
};
struct Attributes
{
float3 positionOS : POSITION;
float3 normalOS : NORMAL;
float4 tangentOS : TANGENT;
float4 uv0 : TEXCOORD0;
float4 uv1 : TEXCOORD1;
float4 uv2 : TEXCOORD2;
/*ase_vdata:p=p;n=n;t=t;uv0=tc0;uv1=tc1;uv2=tc2*/
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct PackedVaryings
{
float4 positionCS : SV_POSITION;
float3 positionWS : TEXCOORD0;
float3 normalWS : TEXCOORD1;
float4 tangentWS : TEXCOORD2;
float4 texCoord0 : TEXCOORD3;
/*ase_interp(4,):sp=sp;wp=tc0;wn=tc1;wt=tc2;uv0=tc3*/
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
CBUFFER_START(UnityPerMaterial)
float _DrawOrder;
float _DecalMeshBiasType;
float _DecalMeshDepthBias;
float _DecalMeshViewBias;
#if defined(DECAL_ANGLE_FADE)
float _DecalAngleFadeSupported;
#endif
CBUFFER_END
/*ase_globals*/
/*ase_funcs*/
uint2 ComputeFadeMaskSeed(uint2 positionSS)
{
uint2 fadeMaskSeed;
fadeMaskSeed = positionSS;
return fadeMaskSeed;
}
void GetSurfaceData(PackedVaryings input, SurfaceDescription surfaceDescription, half3 viewDirectioWS, uint2 positionSS, float angleFadeFactor, out DecalSurfaceData surfaceData)
{
#ifdef LOD_FADE_CROSSFADE
LODDitheringTransition(ComputeFadeMaskSeed(positionSS), unity_LODFade.x);
#endif
half fadeFactor = half(1.0);
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
surfaceData.baseColor.xyz = half3(surfaceDescription.BaseColor);
surfaceData.baseColor.w = half(surfaceDescription.Alpha * fadeFactor);
#if defined(_MATERIAL_AFFECTS_NORMAL)
float sgn = input.tangentWS.w;
float3 bitangent = sgn * cross(input.normalWS.xyz, input.tangentWS.xyz);
half3x3 tangentToWorld = half3x3(input.tangentWS.xyz, bitangent.xyz, input.normalWS.xyz);
surfaceData.normalWS.xyz = normalize(TransformTangentToWorld(surfaceDescription.NormalTS, tangentToWorld));
#else
surfaceData.normalWS.xyz = half3(input.normalWS);
#endif
surfaceData.normalWS.w = surfaceDescription.NormalAlpha * fadeFactor;
#if defined( _MATERIAL_AFFECTS_MAOS )
surfaceData.metallic = half(surfaceDescription.Metallic);
surfaceData.occlusion = half(surfaceDescription.Occlusion);
surfaceData.smoothness = half(surfaceDescription.Smoothness);
surfaceData.MAOSAlpha = half(surfaceDescription.MAOSAlpha * fadeFactor);
#endif
}
#define DECAL_MESH
#define DECAL_DBUFFER
#if ((!defined(_MATERIAL_AFFECTS_NORMAL) && defined(_MATERIAL_AFFECTS_ALBEDO)) || (defined(_MATERIAL_AFFECTS_NORMAL) && defined(_MATERIAL_AFFECTS_NORMAL_BLEND))) && (defined(DECAL_SCREEN_SPACE) || defined(DECAL_GBUFFER))
#define DECAL_RECONSTRUCT_NORMAL
#elif defined(DECAL_ANGLE_FADE)
#define DECAL_LOAD_NORMAL
#endif
#if defined(DECAL_LOAD_NORMAL)
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareNormalsTexture.hlsl"
#endif
#if defined(DECAL_PROJECTOR) || defined(DECAL_RECONSTRUCT_NORMAL)
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareDepthTexture.hlsl"
#endif
#include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/DecalMeshBiasTypeEnum.cs.hlsl"
#ifdef DECAL_RECONSTRUCT_NORMAL
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/NormalReconstruction.hlsl"
#endif
void MeshDecalsPositionZBias(inout PackedVaryings input)
{
#if UNITY_REVERSED_Z
input.positionCS.z -= _DecalMeshDepthBias;
#else
input.positionCS.z += _DecalMeshDepthBias;
#endif
}
PackedVaryings Vert(Attributes inputMesh /*ase_vert_input*/ )
{
if (_DecalMeshBiasType == DECALMESHDEPTHBIASTYPE_VIEW_BIAS)
{
float3 viewDirectionOS = GetObjectSpaceNormalizeViewDir(inputMesh.positionOS);
inputMesh.positionOS += viewDirectionOS * (_DecalMeshViewBias);
}
PackedVaryings packedOutput;
ZERO_INITIALIZE(PackedVaryings, packedOutput);
UNITY_SETUP_INSTANCE_ID(inputMesh);
UNITY_TRANSFER_INSTANCE_ID(inputMesh, packedOutput);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(packedOutput);
/*ase_vert_code:inputMesh=Attributes;packedOutput=PackedVaryings*/
#ifdef ASE_ABSOLUTE_VERTEX_POS
float3 defaultVertexValue = inputMesh.positionOS.xyz;
#else
float3 defaultVertexValue = float3(0, 0, 0);
#endif
float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;8;-1;_VertexP*/defaultVertexValue/*end*/;
#ifdef ASE_ABSOLUTE_VERTEX_POS
inputMesh.positionOS.xyz = vertexValue;
#else
inputMesh.positionOS.xyz += vertexValue;
#endif
VertexPositionInputs vertexInput = GetVertexPositionInputs(inputMesh.positionOS.xyz);
float3 positionWS = TransformObjectToWorld(inputMesh.positionOS);
float3 normalWS = TransformObjectToWorldNormal(inputMesh.normalOS);
float4 tangentWS = float4(TransformObjectToWorldDir(inputMesh.tangentOS.xyz), inputMesh.tangentOS.w);
packedOutput.positionWS.xyz = positionWS;
packedOutput.normalWS.xyz = normalWS;
packedOutput.tangentWS.xyzw = tangentWS;
packedOutput.texCoord0.xyzw = inputMesh.uv0;
packedOutput.positionCS = TransformWorldToHClip(positionWS);
if (_DecalMeshBiasType == DECALMESHDEPTHBIASTYPE_DEPTH_BIAS)
{
MeshDecalsPositionZBias(packedOutput);
}
return packedOutput;
}
void Frag(PackedVaryings packedInput,
OUTPUT_DBUFFER(outDBuffer)
/*ase_frag_input*/
)
{
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(packedInput);
UNITY_SETUP_INSTANCE_ID(packedInput);
half angleFadeFactor = 1.0;
/*ase_local_var:wn*/half3 normalWS = 0;
#if defined(DECAL_RECONSTRUCT_NORMAL)
#if defined(_DECAL_NORMAL_BLEND_HIGH)
normalWS = half3(ReconstructNormalTap9(packedInput.positionCS.xy));
#elif defined(_DECAL_NORMAL_BLEND_MEDIUM)
normalWS = half3(ReconstructNormalTap5(packedInput.positionCS.xy));
#else
normalWS = half3(ReconstructNormalDerivative(packedInput.positionCS.xy));
#endif
#elif defined(DECAL_LOAD_NORMAL)
normalWS = half3(LoadSceneNormals(packedInput.positionCS.xy));
#endif
float2 positionSS = packedInput.positionCS.xy * _ScreenSize.zw;
float3 positionWS = packedInput.positionWS.xyz;
half3 viewDirectionWS = half3(1.0, 1.0, 1.0);
DecalSurfaceData surfaceData;
SurfaceDescription surfaceDescription;
/*ase_frag_code:packedInput=PackedVaryings*/
surfaceDescription.BaseColor = /*ase_frag_out:Base Color;Float3;0;-1;_BaseColor*/IsGammaSpace() ? float3(0.5, 0.5, 0.5) : SRGBToLinear(float3(0.5, 0.5, 0.5))/*end*/;
surfaceDescription.Alpha = /*ase_frag_out:Alpha;Float;1;-1;_Alpha*/1/*end*/;
surfaceDescription.NormalTS = /*ase_frag_out:Normal;Float3;2;-1;_NormalTS*/float3(0.0f, 0.0f, 1.0f)/*end*/;
surfaceDescription.NormalAlpha = /*ase_frag_out:Normal Alpha;Float;3;-1;_NormalAlpha*/1/*end*/;
#if defined( _MATERIAL_AFFECTS_MAOS )
surfaceDescription.Metallic = /*ase_frag_out:Metallic;Float;4;-1;_Metallic*/0/*end*/;
surfaceDescription.Occlusion = /*ase_frag_out:Occlusion;Float;5;-1;_Occlusion*/1/*end*/;
surfaceDescription.Smoothness = /*ase_frag_out:Smoothness;Float;6;-1;_Smoothness*/0.5/*end*/;
surfaceDescription.MAOSAlpha = /*ase_frag_out:MAOS Alpha;Float;7;-1;_MAOSAlpha*/1/*end*/;
#endif
GetSurfaceData(packedInput,surfaceDescription, viewDirectionWS, (uint2)positionSS, angleFadeFactor, surfaceData);
ENCODE_INTO_DBUFFER(surfaceData, outDBuffer);
}
ENDHLSL
}
/*ase_pass*/
Pass
{
/*ase_hide_pass*/
Name "DecalMeshForwardEmissive"
Tags
{
"LightMode" = "DecalMeshForwardEmissive"
}
Blend 0 SrcAlpha One
ZTest LEqual
ZWrite Off
HLSLPROGRAM
#pragma vertex Vert
#pragma fragment Frag
#pragma multi_compile_instancing
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl"
#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_FORWARD_EMISSIVE_MESH
#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 "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.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"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DBuffer.hlsl"
/*ase_pragma*/
struct SurfaceDescription
{
float3 BaseColor;
float Alpha;
float3 NormalTS;
float NormalAlpha;
float Metallic;
float Occlusion;
float Smoothness;
float MAOSAlpha;
float3 Emission;
};
struct Attributes
{
float3 positionOS : POSITION;
float3 normalOS : NORMAL;
float4 tangentOS : TANGENT;
float4 uv0 : TEXCOORD0;
float4 uv1 : TEXCOORD1;
float4 uv2 : TEXCOORD2;
/*ase_vdata:p=p;n=n;t=t;uv0=tc0;uv1=tc1;uv2=tc2*/
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct PackedVaryings
{
float4 positionCS : SV_POSITION;
float3 positionWS : TEXCOORD0;
float3 normalWS : TEXCOORD1;
float4 tangentWS : TEXCOORD2;
float4 texCoord0 : TEXCOORD3;
/*ase_interp(4,):sp=sp;wp=tc0;wn=tc1;wt=tc2;uv0=tc3*/
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
CBUFFER_START(UnityPerMaterial)
float _DrawOrder;
float _DecalMeshBiasType;
float _DecalMeshDepthBias;
float _DecalMeshViewBias;
#if defined(DECAL_ANGLE_FADE)
float _DecalAngleFadeSupported;
#endif
CBUFFER_END
/*ase_globals*/
/*ase_funcs*/
uint2 ComputeFadeMaskSeed(uint2 positionSS)
{
uint2 fadeMaskSeed;
fadeMaskSeed = positionSS;
return fadeMaskSeed;
}
void GetSurfaceData(SurfaceDescription surfaceDescription, half3 viewDirectioWS, uint2 positionSS, float angleFadeFactor, out DecalSurfaceData surfaceData)
{
#ifdef LOD_FADE_CROSSFADE
LODDitheringTransition(ComputeFadeMaskSeed(positionSS), unity_LODFade.x);
#endif
half fadeFactor = half(1.0);
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
#if defined( _MATERIAL_AFFECTS_EMISSION )
surfaceData.emissive.rgb = half3(surfaceDescription.Emission.rgb * fadeFactor);
#endif
surfaceData.baseColor.xyz = half3(surfaceDescription.BaseColor);
surfaceData.baseColor.w = half(surfaceDescription.Alpha * fadeFactor);
surfaceData.normalWS.w = surfaceDescription.NormalAlpha * fadeFactor;
#if defined( _MATERIAL_AFFECTS_MAOS )
surfaceData.metallic = half(surfaceDescription.Metallic);
surfaceData.occlusion = half(surfaceDescription.Occlusion);
surfaceData.smoothness = half(surfaceDescription.Smoothness);
surfaceData.MAOSAlpha = half(surfaceDescription.MAOSAlpha * fadeFactor);
#endif
}
#define DECAL_MESH
#define DECAL_FORWARD_EMISSIVE
#if ((!defined(_MATERIAL_AFFECTS_NORMAL) && defined(_MATERIAL_AFFECTS_ALBEDO)) || (defined(_MATERIAL_AFFECTS_NORMAL) && defined(_MATERIAL_AFFECTS_NORMAL_BLEND))) && (defined(DECAL_SCREEN_SPACE) || defined(DECAL_GBUFFER))
#define DECAL_RECONSTRUCT_NORMAL
#elif defined(DECAL_ANGLE_FADE)
#define DECAL_LOAD_NORMAL
#endif
#if defined(DECAL_LOAD_NORMAL)
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareNormalsTexture.hlsl"
#endif
#if defined(DECAL_PROJECTOR) || defined(DECAL_RECONSTRUCT_NORMAL)
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareDepthTexture.hlsl"
#endif
#ifdef DECAL_MESH
#include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/DecalMeshBiasTypeEnum.cs.hlsl"
#endif
#ifdef DECAL_RECONSTRUCT_NORMAL
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/NormalReconstruction.hlsl"
#endif
void MeshDecalsPositionZBias(inout PackedVaryings input)
{
#if UNITY_REVERSED_Z
input.positionCS.z -= _DecalMeshDepthBias;
#else
input.positionCS.z += _DecalMeshDepthBias;
#endif
}
PackedVaryings Vert(Attributes inputMesh /*ase_vert_input*/ )
{
if (_DecalMeshBiasType == DECALMESHDEPTHBIASTYPE_VIEW_BIAS)
{
float3 viewDirectionOS = GetObjectSpaceNormalizeViewDir(inputMesh.positionOS);
inputMesh.positionOS += viewDirectionOS * (_DecalMeshViewBias);
}
PackedVaryings packedOutput;
ZERO_INITIALIZE(PackedVaryings, packedOutput);
UNITY_SETUP_INSTANCE_ID(inputMesh);
UNITY_TRANSFER_INSTANCE_ID(inputMesh, packedOutput);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(packedOutput);
/*ase_vert_code:inputMesh=Attributes;packedOutput=PackedVaryings*/
#ifdef ASE_ABSOLUTE_VERTEX_POS
float3 defaultVertexValue = inputMesh.positionOS.xyz;
#else
float3 defaultVertexValue = float3(0, 0, 0);
#endif
float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;9;-1;_VertexP*/defaultVertexValue/*end*/;
#ifdef ASE_ABSOLUTE_VERTEX_POS
inputMesh.positionOS.xyz = vertexValue;
#else
inputMesh.positionOS.xyz += vertexValue;
#endif
VertexPositionInputs vertexInput = GetVertexPositionInputs(inputMesh.positionOS.xyz);
float3 positionWS = TransformObjectToWorld(inputMesh.positionOS);
float3 normalWS = TransformObjectToWorldNormal(inputMesh.normalOS);
float4 tangentWS = float4(TransformObjectToWorldDir(inputMesh.tangentOS.xyz), inputMesh.tangentOS.w);
packedOutput.positionCS = TransformWorldToHClip(positionWS);
if (_DecalMeshBiasType == DECALMESHDEPTHBIASTYPE_DEPTH_BIAS)
{
MeshDecalsPositionZBias(packedOutput);
}
packedOutput.positionWS.xyz = positionWS;
packedOutput.normalWS.xyz = normalWS;
packedOutput.tangentWS.xyzw = tangentWS;
packedOutput.texCoord0.xyzw = inputMesh.uv0;
return packedOutput;
}
void Frag(PackedVaryings packedInput,
out half4 outEmissive : SV_Target0
/*ase_frag_input*/
)
{
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(packedInput);
UNITY_SETUP_INSTANCE_ID(packedInput);
half angleFadeFactor = 1.0;
/*ase_local_var:wn*/half3 normalWS = 0;
#if defined(DECAL_RECONSTRUCT_NORMAL)
#if defined(_DECAL_NORMAL_BLEND_HIGH)
normalWS = half3(ReconstructNormalTap9(packedInput.positionCS.xy));
#elif defined(_DECAL_NORMAL_BLEND_MEDIUM)
normalWS = half3(ReconstructNormalTap5(packedInput.positionCS.xy));
#else
normalWS = half3(ReconstructNormalDerivative(packedInput.positionCS.xy));
#endif
#elif defined(DECAL_LOAD_NORMAL)
normalWS = half3(LoadSceneNormals(packedInput.positionCS.xy));
#endif
float2 positionSS = packedInput.positionCS.xy * _ScreenSize.zw;
float3 positionWS = packedInput.positionWS.xyz;
half3 viewDirectionWS = half3(1.0, 1.0, 1.0);
DecalSurfaceData surfaceData;
SurfaceDescription surfaceDescription = (SurfaceDescription)0;
/*ase_frag_code:packedInput=PackedVaryings*/
surfaceDescription.BaseColor = /*ase_frag_out:Base Color;Float3;0;-1;_BaseColor*/IsGammaSpace() ? float3(0.5, 0.5, 0.5) : SRGBToLinear(float3(0.5, 0.5, 0.5))/*end*/;
surfaceDescription.Alpha = /*ase_frag_out:Alpha;Float;1;-1;_Alpha*/1/*end*/;
surfaceDescription.NormalTS = /*ase_frag_out:Normal;Float3;2;-1;_NormalTS*/float3(0.0f, 0.0f, 1.0f)/*end*/;
surfaceDescription.NormalAlpha = /*ase_frag_out:Normal Alpha;Float;3;-1;_NormalAlpha*/1/*end*/;
#if defined( _MATERIAL_AFFECTS_MAOS )
surfaceDescription.Metallic = /*ase_frag_out:Metallic;Float;4;-1;_Metallic*/0/*end*/;
surfaceDescription.Occlusion = /*ase_frag_out:Occlusion;Float;5;-1;_Occlusion*/1/*end*/;
surfaceDescription.Smoothness = /*ase_frag_out:Smoothness;Float;6;-1;_Smoothness*/0.5/*end*/;
surfaceDescription.MAOSAlpha = /*ase_frag_out:MAOS Alpha;Float;7;-1;_MAOSAlpha*/1/*end*/;
#endif
#if defined( _MATERIAL_AFFECTS_EMISSION )
surfaceDescription.Emission = /*ase_frag_out:Emission;Float3;8;-1;_Emission*/float3(0, 0, 0)/*end*/;
#endif
GetSurfaceData(surfaceDescription, viewDirectionWS, (uint2)positionSS, angleFadeFactor, surfaceData);
outEmissive.rgb = surfaceData.emissive;
outEmissive.a = surfaceData.baseColor.a;
}
ENDHLSL
}
/*ase_pass*/
Pass
{
/*ase_hide_pass*/
Name "DecalScreenSpaceMesh"
Tags
{
"LightMode" = "DecalScreenSpaceMesh"
}
Blend SrcAlpha OneMinusSrcAlpha
ZTest LEqual
ZWrite Off
HLSLPROGRAM
#pragma vertex Vert
#pragma fragment Frag
#pragma multi_compile_instancing
#pragma multi_compile_fog
#pragma multi_compile _ LIGHTMAP_ON
#pragma multi_compile _ DYNAMICLIGHTMAP_ON
#pragma multi_compile _ DIRLIGHTMAP_COMBINED
#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 _ _ADDITIONAL_LIGHT_SHADOWS
#pragma multi_compile _ _SHADOWS_SOFT
#pragma multi_compile _ LIGHTMAP_SHADOW_MIXING
#pragma multi_compile _ SHADOWS_SHADOWMASK
#pragma multi_compile _ _CLUSTERED_RENDERING
#pragma multi_compile _DECAL_NORMAL_BLEND_LOW _DECAL_NORMAL_BLEND_MEDIUM _DECAL_NORMAL_BLEND_HIGH
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl"
#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_VIEWDIRECTION_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 HAVE_MESH_MODIFICATION
#define SHADERPASS SHADERPASS_DECAL_SCREEN_SPACE_MESH
#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 "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.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"
/*ase_pragma*/
struct SurfaceDescription
{
float3 BaseColor;
float Alpha;
float3 NormalTS;
float NormalAlpha;
float Metallic;
float Occlusion;
float Smoothness;
float MAOSAlpha;
float3 Emission;
};
struct Attributes
{
float3 positionOS : POSITION;
float3 normalOS : NORMAL;
float4 tangentOS : TANGENT;
float4 uv0 : TEXCOORD0;
float4 uv1 : TEXCOORD1;
float4 uv2 : TEXCOORD2;
/*ase_vdata:p=p;n=n;t=t;uv0=tc0;uv1=tc1;uv2=tc2*/
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct PackedVaryings
{
float4 positionCS : SV_POSITION;
float3 positionWS : TEXCOORD0;
float3 normalWS : TEXCOORD1;
float4 tangentWS : TEXCOORD2;
float4 texCoord0 : TEXCOORD3;
float3 viewDirectionWS : TEXCOORD4;
float2 staticLightmapUV : TEXCOORD5;
float2 dynamicLightmapUV : TEXCOORD6;
float3 sh : TEXCOORD7;
float4 fogFactorAndVertexLight : TEXCOORD8;
/*ase_interp(9,):sp=sp;wp=tc0;wn=tc1;wt=tc2;uv0=tc3;wvd=tc4*/
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
CBUFFER_START(UnityPerMaterial)
float _DrawOrder;
float _DecalMeshBiasType;
float _DecalMeshDepthBias;
float _DecalMeshViewBias;
#if defined(DECAL_ANGLE_FADE)
float _DecalAngleFadeSupported;
#endif
CBUFFER_END
/*ase_globals*/
/*ase_funcs*/
uint2 ComputeFadeMaskSeed(uint2 positionSS)
{
uint2 fadeMaskSeed;
fadeMaskSeed = positionSS;
return fadeMaskSeed;
}
void GetSurfaceData( PackedVaryings input, SurfaceDescription surfaceDescription, half3 viewDirectioWS, uint2 positionSS, float angleFadeFactor, out DecalSurfaceData surfaceData)
{
#ifdef LOD_FADE_CROSSFADE
LODDitheringTransition(ComputeFadeMaskSeed(positionSS), unity_LODFade.x);
#endif
half fadeFactor = half(1.0);
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
#if defined( _MATERIAL_AFFECTS_EMISSION )
surfaceData.emissive.rgb = half3(surfaceDescription.Emission.rgb * fadeFactor);
#endif
surfaceData.baseColor.xyz = half3(surfaceDescription.BaseColor);
surfaceData.baseColor.w = half(surfaceDescription.Alpha * fadeFactor);
#if defined(_MATERIAL_AFFECTS_NORMAL)
float sgn = input.tangentWS.w;
float3 bitangent = sgn * cross(input.normalWS.xyz, input.tangentWS.xyz);
half3x3 tangentToWorld = half3x3(input.tangentWS.xyz, bitangent.xyz, input.normalWS.xyz);
surfaceData.normalWS.xyz = normalize(TransformTangentToWorld(surfaceDescription.NormalTS, tangentToWorld));
#else
surfaceData.normalWS.xyz = half3(input.normalWS);
#endif
surfaceData.normalWS.w = surfaceDescription.NormalAlpha * fadeFactor;
#if defined( _MATERIAL_AFFECTS_MAOS )
surfaceData.metallic = half(surfaceDescription.Metallic);
surfaceData.occlusion = half(surfaceDescription.Occlusion);
surfaceData.smoothness = half(surfaceDescription.Smoothness);
surfaceData.MAOSAlpha = half(surfaceDescription.MAOSAlpha * fadeFactor);
#endif
}
#define DECAL_MESH
#define DECAL_SCREEN_SPACE
#if ((!defined(_MATERIAL_AFFECTS_NORMAL) && defined(_MATERIAL_AFFECTS_ALBEDO)) || (defined(_MATERIAL_AFFECTS_NORMAL) && defined(_MATERIAL_AFFECTS_NORMAL_BLEND))) && (defined(DECAL_SCREEN_SPACE) || defined(DECAL_GBUFFER))
#define DECAL_RECONSTRUCT_NORMAL
#elif defined(DECAL_ANGLE_FADE)
#define DECAL_LOAD_NORMAL
#endif
#if defined(DECAL_LOAD_NORMAL)
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareNormalsTexture.hlsl"
#endif
#if defined(DECAL_PROJECTOR) || defined(DECAL_RECONSTRUCT_NORMAL)
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareDepthTexture.hlsl"
#endif
#ifdef DECAL_MESH
#include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/DecalMeshBiasTypeEnum.cs.hlsl"
#endif
#ifdef DECAL_RECONSTRUCT_NORMAL
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/NormalReconstruction.hlsl"
#endif
void MeshDecalsPositionZBias(inout PackedVaryings input)
{
#if UNITY_REVERSED_Z
input.positionCS.z -= _DecalMeshDepthBias;
#else
input.positionCS.z += _DecalMeshDepthBias;
#endif
}
void InitializeInputData( PackedVaryings input, float3 positionWS, half3 normalWS, half3 viewDirectionWS, out InputData inputData)
{
inputData = (InputData)0;
inputData.positionWS = positionWS;
inputData.normalWS = normalWS;
inputData.viewDirectionWS = viewDirectionWS;
inputData.shadowCoord = float4(0, 0, 0, 0);
#ifdef VARYINGS_NEED_FOG_AND_VERTEX_LIGHT
inputData.fogCoord = half(input.fogFactorAndVertexLight.x);
inputData.vertexLighting = half3(input.fogFactorAndVertexLight.yzw);
#endif
#if defined(VARYINGS_NEED_DYNAMIC_LIGHTMAP_UV) && defined(DYNAMICLIGHTMAP_ON)
inputData.bakedGI = SAMPLE_GI(input.staticLightmapUV, input.dynamicLightmapUV.xy, half3(input.sh), normalWS);
#elif defined(VARYINGS_NEED_STATIC_LIGHTMAP_UV)
inputData.bakedGI = SAMPLE_GI(input.staticLightmapUV, half3(input.sh), normalWS);
#endif
#if defined(VARYINGS_NEED_STATIC_LIGHTMAP_UV)
inputData.shadowMask = SAMPLE_SHADOWMASK(input.staticLightmapUV);
#endif
#if defined(DEBUG_DISPLAY)
#if defined(VARYINGS_NEED_DYNAMIC_LIGHTMAP_UV) && defined(DYNAMICLIGHTMAP_ON)
inputData.dynamicLightmapUV = input.dynamicLightmapUV.xy;
#endif
#if defined(VARYINGS_NEED_STATIC_LIGHTMAP_UV && LIGHTMAP_ON)
inputData.staticLightmapUV = input.staticLightmapUV;
#elif defined(VARYINGS_NEED_SH)
inputData.vertexSH = input.sh;
#endif
#endif
inputData.normalizedScreenSpaceUV = GetNormalizedScreenSpaceUV(input.positionCS);
}
void GetSurface(DecalSurfaceData decalSurfaceData, inout SurfaceData surfaceData)
{
surfaceData.albedo = decalSurfaceData.baseColor.rgb;
surfaceData.metallic = saturate(decalSurfaceData.metallic);
surfaceData.specular = 0;
surfaceData.smoothness = saturate(decalSurfaceData.smoothness);
surfaceData.occlusion = decalSurfaceData.occlusion;
surfaceData.emission = decalSurfaceData.emissive;
surfaceData.alpha = saturate(decalSurfaceData.baseColor.w);
surfaceData.clearCoatMask = 0;
surfaceData.clearCoatSmoothness = 1;
}
PackedVaryings Vert(Attributes inputMesh /*ase_vert_input*/ )
{
if (_DecalMeshBiasType == DECALMESHDEPTHBIASTYPE_VIEW_BIAS)
{
float3 viewDirectionOS = GetObjectSpaceNormalizeViewDir(inputMesh.positionOS);
inputMesh.positionOS += viewDirectionOS * (_DecalMeshViewBias);
}
PackedVaryings packedOutput;
ZERO_INITIALIZE(PackedVaryings, packedOutput);
UNITY_SETUP_INSTANCE_ID(inputMesh);
UNITY_TRANSFER_INSTANCE_ID(inputMesh, packedOutput);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(packedOutput);
/*ase_vert_code:inputMesh=Attributes;packedOutput=PackedVaryings*/
#ifdef ASE_ABSOLUTE_VERTEX_POS
float3 defaultVertexValue = inputMesh.positionOS.xyz;
#else
float3 defaultVertexValue = float3(0, 0, 0);
#endif
float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;9;-1;_VertexP*/defaultVertexValue/*end*/;
#ifdef ASE_ABSOLUTE_VERTEX_POS
inputMesh.positionOS.xyz = vertexValue;
#else
inputMesh.positionOS.xyz += vertexValue;
#endif
VertexPositionInputs vertexInput = GetVertexPositionInputs(inputMesh.positionOS.xyz);
float3 positionWS = TransformObjectToWorld(inputMesh.positionOS);
float3 normalWS = TransformObjectToWorldNormal(inputMesh.normalOS);
float4 tangentWS = float4(TransformObjectToWorldDir(inputMesh.tangentOS.xyz), inputMesh.tangentOS.w);
packedOutput.positionCS = TransformWorldToHClip(positionWS);
half fogFactor = 0;
#if !defined(_FOG_FRAGMENT)
fogFactor = ComputeFogFactor(packedOutput.positionCS.z);
#endif
half3 vertexLight = VertexLighting(positionWS, normalWS);
packedOutput.fogFactorAndVertexLight = half4(fogFactor, vertexLight);
if (_DecalMeshBiasType == DECALMESHDEPTHBIASTYPE_DEPTH_BIAS)
{
MeshDecalsPositionZBias(packedOutput);
}
packedOutput.positionWS.xyz = positionWS;
packedOutput.normalWS.xyz = normalWS;
packedOutput.tangentWS.xyzw = tangentWS;
packedOutput.texCoord0.xyzw = inputMesh.uv0;
packedOutput.viewDirectionWS.xyz = GetWorldSpaceViewDir(positionWS);
#if defined(LIGHTMAP_ON)
OUTPUT_LIGHTMAP_UV(inputMesh.uv1, unity_LightmapST, packedOutput.staticLightmapUV);
#endif
#if defined(DYNAMICLIGHTMAP_ON)
packedOutput.dynamicLightmapUV.xy = inputMesh.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw;
#endif
#if !defined(LIGHTMAP_ON)
packedOutput.sh = float3(SampleSHVertex(half3(normalWS)));
#endif
return packedOutput;
}
void Frag(PackedVaryings packedInput,
out half4 outColor : SV_Target0
/*ase_frag_input*/
)
{
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(packedInput);
UNITY_SETUP_INSTANCE_ID(packedInput);
half angleFadeFactor = 1.0;
/*ase_local_var:wn*/half3 normalWS = 0;
#if defined(DECAL_RECONSTRUCT_NORMAL)
#if defined(_DECAL_NORMAL_BLEND_HIGH)
normalWS = half3(ReconstructNormalTap9(packedInput.positionCS.xy));
#elif defined(_DECAL_NORMAL_BLEND_MEDIUM)
normalWS = half3(ReconstructNormalTap5(packedInput.positionCS.xy));
#else
normalWS = half3(ReconstructNormalDerivative(packedInput.positionCS.xy));
#endif
#elif defined(DECAL_LOAD_NORMAL)
normalWS = half3(LoadSceneNormals(packedInput.positionCS.xy));
#endif
float2 positionSS = packedInput.positionCS.xy * _ScreenSize.zw;
float3 positionWS = packedInput.positionWS.xyz;
half3 viewDirectionWS = half3(packedInput.viewDirectionWS);
DecalSurfaceData surfaceData;
SurfaceDescription surfaceDescription = (SurfaceDescription)0;
/*ase_frag_code:packedInput=PackedVaryings*/
surfaceDescription.BaseColor = /*ase_frag_out:Base Color;Float3;0;-1;_BaseColor*/IsGammaSpace() ? float3(0.5, 0.5, 0.5) : SRGBToLinear(float3(0.5, 0.5, 0.5))/*end*/;
surfaceDescription.Alpha = /*ase_frag_out:Alpha;Float;1;-1;_Alpha*/1/*end*/;
surfaceDescription.NormalTS = /*ase_frag_out:Normal;Float3;2;-1;_NormalTS*/float3(0.0f, 0.0f, 1.0f)/*end*/;
surfaceDescription.NormalAlpha = /*ase_frag_out:Normal Alpha;Float;3;-1;_NormalAlpha*/1/*end*/;
#if defined( _MATERIAL_AFFECTS_MAOS )
surfaceDescription.Metallic = /*ase_frag_out:Metallic;Float;4;-1;_Metallic*/0/*end*/;
surfaceDescription.Occlusion = /*ase_frag_out:Occlusion;Float;5;-1;_Occlusion*/1/*end*/;
surfaceDescription.Smoothness = /*ase_frag_out:Smoothness;Float;6;-1;_Smoothness*/0.5/*end*/;
surfaceDescription.MAOSAlpha = /*ase_frag_out:MAOS Alpha;Float;7;-1;_MAOSAlpha*/1/*end*/;
#endif
#if defined( _MATERIAL_AFFECTS_EMISSION )
surfaceDescription.Emission = /*ase_frag_out:Emission;Float3;8;-1;_Emission*/float3(0, 0, 0)/*end*/;
#endif
GetSurfaceData(packedInput,surfaceDescription, viewDirectionWS, (uint2)positionSS, angleFadeFactor, surfaceData);
#ifdef DECAL_RECONSTRUCT_NORMAL
surfaceData.normalWS.xyz = normalize(lerp(normalWS.xyz, surfaceData.normalWS.xyz, surfaceData.normalWS.w));
#endif
InputData inputData;
InitializeInputData(packedInput, positionWS, surfaceData.normalWS.xyz, viewDirectionWS, inputData);
SurfaceData surface = (SurfaceData)0;
GetSurface(surfaceData, surface);
half4 color = UniversalFragmentPBR(inputData, surface);
color.rgb = MixFog(color.rgb, inputData.fogCoord);
outColor = color;
}
ENDHLSL
}
/*ase_pass*/
Pass
{
/*ase_hide_pass*/
Name "DecalGBufferMesh"
Tags
{
"LightMode" = "DecalGBufferMesh"
}
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
HLSLPROGRAM
#pragma vertex Vert
#pragma fragment Frag
#pragma multi_compile_instancing
#pragma multi_compile_fog
#pragma multi_compile _ LIGHTMAP_ON
#pragma multi_compile _ DYNAMICLIGHTMAP_ON
#pragma multi_compile _ DIRLIGHTMAP_COMBINED
#pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN
#pragma multi_compile _ _SHADOWS_SOFT
#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 _ _GBUFFER_NORMALS_OCT
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl"
#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_VIEWDIRECTION_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 HAVE_MESH_MODIFICATION
#define SHADERPASS SHADERPASS_DECAL_GBUFFER_MESH
#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 "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.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"
/*ase_pragma*/
struct SurfaceDescription
{
float3 BaseColor;
float Alpha;
float3 NormalTS;
float NormalAlpha;
float Metallic;
float Occlusion;
float Smoothness;
float MAOSAlpha;
float3 Emission;
};
struct Attributes
{
float3 positionOS : POSITION;
float3 normalOS : NORMAL;
float4 tangentOS : TANGENT;
float4 uv0 : TEXCOORD0;
float4 uv1 : TEXCOORD1;
float4 uv2 : TEXCOORD2;
/*ase_vdata:p=p;n=n;t=t;uv0=tc0;uv1=tc1;uv2=tc2*/
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct PackedVaryings
{
float4 positionCS : SV_POSITION;
float3 positionWS : TEXCOORD0;
float3 normalWS : TEXCOORD1;
float4 tangentWS : TEXCOORD2;
float4 texCoord0 : TEXCOORD3;
float3 viewDirectionWS : TEXCOORD4;
float2 staticLightmapUV : TEXCOORD5;
float2 dynamicLightmapUV : TEXCOORD6;
float3 sh : TEXCOORD7;
float4 fogFactorAndVertexLight : TEXCOORD8;
/*ase_interp(9,):sp=sp;wp=tc0;wn=tc1;wt=tc2;uv0=tc3;wvd=tc4*/
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
CBUFFER_START(UnityPerMaterial)
float _DrawOrder;
float _DecalMeshBiasType;
float _DecalMeshDepthBias;
float _DecalMeshViewBias;
#if defined(DECAL_ANGLE_FADE)
float _DecalAngleFadeSupported;
#endif
CBUFFER_END
/*ase_globals*/
/*ase_funcs*/
uint2 ComputeFadeMaskSeed(uint2 positionSS)
{
uint2 fadeMaskSeed;
fadeMaskSeed = positionSS;
return fadeMaskSeed;
}
void GetSurfaceData(PackedVaryings input, SurfaceDescription surfaceDescription, half3 viewDirectioWS, uint2 positionSS, float angleFadeFactor, out DecalSurfaceData surfaceData)
{
#ifdef LOD_FADE_CROSSFADE
LODDitheringTransition(ComputeFadeMaskSeed(positionSS), unity_LODFade.x);
#endif
half fadeFactor = half(1.0);
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
#if defined( _MATERIAL_AFFECTS_EMISSION )
surfaceData.emissive.rgb = half3(surfaceDescription.Emission.rgb * fadeFactor);
#endif
surfaceData.baseColor.xyz = half3(surfaceDescription.BaseColor);
surfaceData.baseColor.w = half(surfaceDescription.Alpha * fadeFactor);
#if defined(_MATERIAL_AFFECTS_NORMAL)
float sgn = input.tangentWS.w;
float3 bitangent = sgn * cross(input.normalWS.xyz, input.tangentWS.xyz);
half3x3 tangentToWorld = half3x3(input.tangentWS.xyz, bitangent.xyz, input.normalWS.xyz);
surfaceData.normalWS.xyz = normalize(TransformTangentToWorld(surfaceDescription.NormalTS, tangentToWorld));
#else
surfaceData.normalWS.xyz = half3(input.normalWS);
#endif
surfaceData.normalWS.w = surfaceDescription.NormalAlpha * fadeFactor;
#if defined( _MATERIAL_AFFECTS_MAOS )
surfaceData.metallic = half(surfaceDescription.Metallic);
surfaceData.occlusion = half(surfaceDescription.Occlusion);
surfaceData.smoothness = half(surfaceDescription.Smoothness);
surfaceData.MAOSAlpha = half(surfaceDescription.MAOSAlpha * fadeFactor);
#endif
}
#define DECAL_MESH
#define DECAL_GBUFFER
#if ((!defined(_MATERIAL_AFFECTS_NORMAL) && defined(_MATERIAL_AFFECTS_ALBEDO)) || (defined(_MATERIAL_AFFECTS_NORMAL) && defined(_MATERIAL_AFFECTS_NORMAL_BLEND))) && (defined(DECAL_SCREEN_SPACE) || defined(DECAL_GBUFFER))
#define DECAL_RECONSTRUCT_NORMAL
#elif defined(DECAL_ANGLE_FADE)
#define DECAL_LOAD_NORMAL
#endif
#if defined(DECAL_LOAD_NORMAL)
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareNormalsTexture.hlsl"
#endif
#if defined(DECAL_PROJECTOR) || defined(DECAL_RECONSTRUCT_NORMAL)
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareDepthTexture.hlsl"
#endif
#ifdef DECAL_MESH
#include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/DecalMeshBiasTypeEnum.cs.hlsl"
#endif
#ifdef DECAL_RECONSTRUCT_NORMAL
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/NormalReconstruction.hlsl"
#endif
void MeshDecalsPositionZBias(inout PackedVaryings input)
{
#if UNITY_REVERSED_Z
input.positionCS.z -= _DecalMeshDepthBias;
#else
input.positionCS.z += _DecalMeshDepthBias;
#endif
}
void InitializeInputData(PackedVaryings input, float3 positionWS, half3 normalWS, half3 viewDirectionWS, out InputData inputData)
{
inputData = (InputData)0;
inputData.positionWS = positionWS;
inputData.normalWS = normalWS;
inputData.viewDirectionWS = viewDirectionWS;
inputData.shadowCoord = float4(0, 0, 0, 0);
inputData.fogCoord = half(input.fogFactorAndVertexLight.x);
inputData.vertexLighting = half3(input.fogFactorAndVertexLight.yzw);
#if defined(VARYINGS_NEED_DYNAMIC_LIGHTMAP_UV) && defined(DYNAMICLIGHTMAP_ON)
inputData.bakedGI = SAMPLE_GI(input.staticLightmapUV, input.dynamicLightmapUV.xy, half3(input.sh), normalWS);
#elif defined(VARYINGS_NEED_STATIC_LIGHTMAP_UV)
inputData.bakedGI = SAMPLE_GI(input.staticLightmapUV, half3(input.sh), normalWS);
#endif
#if defined(VARYINGS_NEED_STATIC_LIGHTMAP_UV)
inputData.shadowMask = SAMPLE_SHADOWMASK(input.staticLightmapUV);
#endif
#if defined(DEBUG_DISPLAY)
#if defined(VARYINGS_NEED_DYNAMIC_LIGHTMAP_UV) && defined(DYNAMICLIGHTMAP_ON)
inputData.dynamicLightmapUV = input.dynamicLightmapUV.xy;
#endif
#if defined(VARYINGS_NEED_STATIC_LIGHTMAP_UV && LIGHTMAP_ON)
inputData.staticLightmapUV = input.staticLightmapUV;
#elif defined(VARYINGS_NEED_SH)
inputData.vertexSH = input.sh;
#endif
#endif
inputData.normalizedScreenSpaceUV = GetNormalizedScreenSpaceUV(input.positionCS);
}
void GetSurface(DecalSurfaceData decalSurfaceData, inout SurfaceData surfaceData)
{
surfaceData.albedo = decalSurfaceData.baseColor.rgb;
surfaceData.metallic = saturate(decalSurfaceData.metallic);
surfaceData.specular = 0;
surfaceData.smoothness = saturate(decalSurfaceData.smoothness);
surfaceData.occlusion = decalSurfaceData.occlusion;
surfaceData.emission = decalSurfaceData.emissive;
surfaceData.alpha = saturate(decalSurfaceData.baseColor.w);
surfaceData.clearCoatMask = 0;
surfaceData.clearCoatSmoothness = 1;
}
PackedVaryings Vert(Attributes inputMesh /*ase_vert_input*/ )
{
if (_DecalMeshBiasType == DECALMESHDEPTHBIASTYPE_VIEW_BIAS)
{
float3 viewDirectionOS = GetObjectSpaceNormalizeViewDir(inputMesh.positionOS);
inputMesh.positionOS += viewDirectionOS * (_DecalMeshViewBias);
}
PackedVaryings packedOutput;
ZERO_INITIALIZE(PackedVaryings, packedOutput);
UNITY_SETUP_INSTANCE_ID(inputMesh);
UNITY_TRANSFER_INSTANCE_ID(inputMesh, packedOutput);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(packedOutput);
/*ase_vert_code:inputMesh=Attributes;packedOutput=PackedVaryings*/
#ifdef ASE_ABSOLUTE_VERTEX_POS
float3 defaultVertexValue = inputMesh.positionOS.xyz;
#else
float3 defaultVertexValue = float3(0, 0, 0);
#endif
float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;9;-1;_VertexP*/defaultVertexValue/*end*/;
#ifdef ASE_ABSOLUTE_VERTEX_POS
inputMesh.positionOS.xyz = vertexValue;
#else
inputMesh.positionOS.xyz += vertexValue;
#endif
VertexPositionInputs vertexInput = GetVertexPositionInputs(inputMesh.positionOS.xyz);
float3 positionWS = TransformObjectToWorld(inputMesh.positionOS);
float3 normalWS = TransformObjectToWorldNormal(inputMesh.normalOS);
float4 tangentWS = float4(TransformObjectToWorldDir(inputMesh.tangentOS.xyz), inputMesh.tangentOS.w);
packedOutput.positionCS = TransformWorldToHClip(positionWS);
if (_DecalMeshBiasType == DECALMESHDEPTHBIASTYPE_DEPTH_BIAS)
{
MeshDecalsPositionZBias(packedOutput);
}
packedOutput.positionWS.xyz = positionWS;
packedOutput.normalWS.xyz = normalWS;
packedOutput.tangentWS.xyzw = tangentWS;
packedOutput.texCoord0.xyzw = inputMesh.uv0;
packedOutput.viewDirectionWS.xyz = GetWorldSpaceViewDir(positionWS);
#if defined(LIGHTMAP_ON)
OUTPUT_LIGHTMAP_UV(inputMesh.uv1, unity_LightmapST, packedOutput.staticLightmapUV);
#endif
#if defined(DYNAMICLIGHTMAP_ON)
packedOutput.dynamicLightmapUV.xy = inputMesh.uv2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw;
#endif
#if !defined(LIGHTMAP_ON)
packedOutput.sh.xyz = float3(SampleSHVertex(half3(normalWS)));
#endif
half fogFactor = 0;
#if !defined(_FOG_FRAGMENT)
fogFactor = ComputeFogFactor(packedOutput.positionCS.z);
#endif
half3 vertexLight = VertexLighting(positionWS, normalWS);
packedOutput.fogFactorAndVertexLight = half4(fogFactor, vertexLight);
return packedOutput;
}
void Frag(PackedVaryings packedInput,
out FragmentOutput fragmentOutput
/*ase_frag_input*/
)
{
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(packedInput);
UNITY_SETUP_INSTANCE_ID(packedInput);
half angleFadeFactor = 1.0;
/*ase_local_var:wn*/half3 normalWS = 0;
#if defined(DECAL_RECONSTRUCT_NORMAL)
#if defined(_DECAL_NORMAL_BLEND_HIGH)
normalWS = half3(ReconstructNormalTap9(packedInput.positionCS.xy));
#elif defined(_DECAL_NORMAL_BLEND_MEDIUM)
normalWS = half3(ReconstructNormalTap5(packedInput.positionCS.xy));
#else
normalWS = half3(ReconstructNormalDerivative(packedInput.positionCS.xy));
#endif
#elif defined(DECAL_LOAD_NORMAL)
normalWS = half3(LoadSceneNormals(packedInput.positionCS.xy));
#endif
float2 positionSS = packedInput.positionCS.xy * _ScreenSize.zw;
float3 positionWS = packedInput.positionWS.xyz;
half3 viewDirectionWS = half3(packedInput.viewDirectionWS);
DecalSurfaceData surfaceData;
SurfaceDescription surfaceDescription = (SurfaceDescription)0;
/*ase_frag_code:packedInput=PackedVaryings*/
surfaceDescription.BaseColor = /*ase_frag_out:Base Color;Float3;0;-1;_BaseColor*/IsGammaSpace() ? float3(0.5, 0.5, 0.5) : SRGBToLinear(float3(0.5, 0.5, 0.5))/*end*/;
surfaceDescription.Alpha = /*ase_frag_out:Alpha;Float;1;-1;_Alpha*/1/*end*/;
surfaceDescription.NormalTS = /*ase_frag_out:Normal;Float3;2;-1;_NormalTS*/float3(0.0f, 0.0f, 1.0f)/*end*/;
surfaceDescription.NormalAlpha = /*ase_frag_out:Normal Alpha;Float;3;-1;_NormalAlpha*/1/*end*/;
#if defined( _MATERIAL_AFFECTS_MAOS )
surfaceDescription.Metallic = /*ase_frag_out:Metallic;Float;4;-1;_Metallic*/0/*end*/;
surfaceDescription.Occlusion = /*ase_frag_out:Occlusion;Float;5;-1;_Occlusion*/1/*end*/;
surfaceDescription.Smoothness = /*ase_frag_out:Smoothness;Float;6;-1;_Smoothness*/0.5/*end*/;
surfaceDescription.MAOSAlpha = /*ase_frag_out:MAOS Alpha;Float;7;-1;_ColorP*/1/*end*/;
#endif
#if defined( _MATERIAL_AFFECTS_EMISSION )
surfaceDescription.Emission = /*ase_frag_out:Emission;Float3;8;-1;_Emission*/float3(0, 0, 0)/*end*/;
#endif
GetSurfaceData(packedInput, surfaceDescription, viewDirectionWS, (uint2)positionSS, angleFadeFactor, surfaceData);
InputData inputData;
InitializeInputData(packedInput, positionWS, surfaceData.normalWS.xyz, viewDirectionWS, inputData);
SurfaceData surface = (SurfaceData)0;
GetSurface(surfaceData, surface);
BRDFData brdfData;
InitializeBRDFData(surface.albedo, surface.metallic, 0, surface.smoothness, surface.alpha, brdfData);
#ifdef _MATERIAL_AFFECTS_ALBEDO
#ifdef DECAL_RECONSTRUCT_NORMAL
half3 normalGI = normalize(lerp(normalWS.xyz, surfaceData.normalWS.xyz, surfaceData.normalWS.w));
#endif
Light mainLight = GetMainLight(inputData.shadowCoord, inputData.positionWS, inputData.shadowMask);
MixRealtimeAndBakedGI(mainLight, normalGI, inputData.bakedGI, inputData.shadowMask);
half3 color = GlobalIllumination(brdfData, inputData.bakedGI, surface.occlusion, normalGI, inputData.viewDirectionWS);
#else
half3 color = 0;
#endif
half3 packedNormalWS = PackNormal(surfaceData.normalWS.xyz);
fragmentOutput.GBuffer0 = half4(surfaceData.baseColor.rgb, surfaceData.baseColor.a);
fragmentOutput.GBuffer1 = 0;
fragmentOutput.GBuffer2 = half4(packedNormalWS, surfaceData.normalWS.a);
fragmentOutput.GBuffer3 = half4(surfaceData.emissive + color, surfaceData.baseColor.a);
#if OUTPUT_SHADOWMASK
fragmentOutput.GBuffer4 = inputData.shadowMask;
#endif
}
ENDHLSL
}
/*ase_pass*/
Pass
{
/*ase_hide_pass*/
Name "ScenePickingPass"
Tags
{
"LightMode" = "Picking"
}
Cull Back
HLSLPROGRAM
#pragma vertex Vert
#pragma fragment Frag
#pragma multi_compile_instancing
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl"
#define HAVE_MESH_MODIFICATION
#define SHADERPASS SHADERPASS_DEPTHONLY
#define SCENEPICKINGPASS 1
float4 _SelectionID;
#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 "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.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"
/*ase_pragma*/
struct Attributes
{
float3 positionOS : POSITION;
/*ase_vdata:p=p*/
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct PackedVaryings
{
float4 positionCS : SV_POSITION;
/*ase_interp(0,):sp=sp*/
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
CBUFFER_START(UnityPerMaterial)
float _DrawOrder;
float _DecalMeshBiasType;
float _DecalMeshDepthBias;
float _DecalMeshViewBias;
#if defined(DECAL_ANGLE_FADE)
float _DecalAngleFadeSupported;
#endif
CBUFFER_END
/*ase_globals*/
/*ase_funcs*/
#if ((!defined(_MATERIAL_AFFECTS_NORMAL) && defined(_MATERIAL_AFFECTS_ALBEDO)) || (defined(_MATERIAL_AFFECTS_NORMAL) && defined(_MATERIAL_AFFECTS_NORMAL_BLEND))) && (defined(DECAL_SCREEN_SPACE) || defined(DECAL_GBUFFER))
#define DECAL_RECONSTRUCT_NORMAL
#elif defined(DECAL_ANGLE_FADE)
#define DECAL_LOAD_NORMAL
#endif
#if defined(DECAL_LOAD_NORMAL)
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareNormalsTexture.hlsl"
#endif
#if defined(DECAL_PROJECTOR) || defined(DECAL_RECONSTRUCT_NORMAL)
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareDepthTexture.hlsl"
#endif
#ifdef DECAL_MESH
#include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/DecalMeshBiasTypeEnum.cs.hlsl"
#endif
#ifdef DECAL_RECONSTRUCT_NORMAL
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/NormalReconstruction.hlsl"
#endif
PackedVaryings Vert(Attributes inputMesh /*ase_vert_input*/ )
{
PackedVaryings packedOutput;
ZERO_INITIALIZE(PackedVaryings, packedOutput);
UNITY_SETUP_INSTANCE_ID(inputMesh);
UNITY_TRANSFER_INSTANCE_ID(inputMesh, packedOutput);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(packedOutput);
/*ase_vert_code:inputMesh=Attributes;packedOutput=PackedVaryings*/
#ifdef ASE_ABSOLUTE_VERTEX_POS
float3 defaultVertexValue = inputMesh.positionOS.xyz;
#else
float3 defaultVertexValue = float3(0, 0, 0);
#endif
float3 vertexValue = /*ase_vert_out:Vertex Offset;Float3;1;-1;_VertexP*/defaultVertexValue/*end*/;
#ifdef ASE_ABSOLUTE_VERTEX_POS
inputMesh.positionOS.xyz = vertexValue;
#else
inputMesh.positionOS.xyz += vertexValue;
#endif
float3 positionWS = TransformObjectToWorld(inputMesh.positionOS);
packedOutput.positionCS = TransformWorldToHClip(positionWS);
return packedOutput;
}
void Frag(PackedVaryings packedInput,
out float4 outColor : SV_Target0
/*ase_frag_input*/
)
{
/*ase_frag_code:packedInput=PackedVaryings*/
float3 BaseColor = /*ase_frag_out:Base Color;Float3;0;-1;_BaseColor*/IsGammaSpace() ? float3(0.5, 0.5, 0.5) : SRGBToLinear(float3(0.5, 0.5, 0.5))/*end*/;
outColor = _SelectionID;
}
ENDHLSL
}
}
CustomEditor "UnityEditor.Rendering.Universal.DecalShaderGraphGUI"
FallBack "Hidden/Shader Graph/FallbackError"
}