您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
189 行
4.8 KiB
189 行
4.8 KiB
Pass
|
|
{
|
|
Name "ShadowCaster"
|
|
Tags{"LightMode" = "ShadowCaster"}
|
|
|
|
ZWrite On ZTest LEqual
|
|
|
|
// Material options generated by graph
|
|
${Culling}
|
|
HLSLPROGRAM
|
|
// Required to compile gles 2.0 with standard srp library
|
|
#pragma prefer_hlslcc gles
|
|
#pragma exclude_renderers d3d11_9x
|
|
#pragma target 2.0
|
|
|
|
//--------------------------------------
|
|
// GPU Instancing
|
|
#pragma multi_compile_instancing
|
|
|
|
#pragma vertex ShadowPassVertex
|
|
#pragma fragment ShadowPassFragment
|
|
|
|
// Defines generated by graph
|
|
${Defines}
|
|
#include "LWRP/ShaderLibrary/Core.hlsl"
|
|
#include "LWRP/ShaderLibrary/Lighting.hlsl"
|
|
#include "ShaderGraphLibrary/Functions.hlsl"
|
|
#include "CoreRP/ShaderLibrary/Color.hlsl"
|
|
|
|
${Graph}
|
|
struct VertexOutput
|
|
{
|
|
float2 uv : TEXCOORD0;
|
|
float4 clipPos : SV_POSITION;
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
UNITY_VERTEX_OUTPUT_STEREO
|
|
};
|
|
|
|
// x: global clip space bias, y: normal world space bias
|
|
float4 _ShadowBias;
|
|
float3 _LightDirection;
|
|
|
|
VertexOutput ShadowPassVertex(GraphVertexInput v)
|
|
{
|
|
VertexOutput o;
|
|
UNITY_SETUP_INSTANCE_ID(v);
|
|
UNITY_TRANSFER_INSTANCE_ID(v, o);
|
|
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
|
|
|
|
// Vertex transformations performed by graph
|
|
${VertexShader}
|
|
VertexDescriptionInputs vdi = (VertexDescriptionInputs)0;
|
|
|
|
// Vertex description inputs defined by graph
|
|
${VertexShaderDescriptionInputs}
|
|
VertexDescription vd = PopulateVertexData(vdi);
|
|
v.vertex.xyz = vd.Position;
|
|
|
|
o.uv = uv1;
|
|
|
|
float3 positionWS = TransformObjectToWorld(v.vertex.xyz);
|
|
float3 normalWS = TransformObjectToWorldDir(v.normal);
|
|
|
|
float invNdotL = 1.0 - saturate(dot(_LightDirection, normalWS));
|
|
float scale = invNdotL * _ShadowBias.y;
|
|
|
|
// normal bias is negative since we want to apply an inset normal offset
|
|
positionWS = normalWS * scale.xxx + positionWS;
|
|
float4 clipPos = TransformWorldToHClip(positionWS);
|
|
|
|
// _ShadowBias.x sign depens on if platform has reversed z buffer
|
|
clipPos.z += _ShadowBias.x;
|
|
|
|
#if UNITY_REVERSED_Z
|
|
clipPos.z = min(clipPos.z, clipPos.w * UNITY_NEAR_CLIP_VALUE);
|
|
#else
|
|
clipPos.z = max(clipPos.z, clipPos.w * UNITY_NEAR_CLIP_VALUE);
|
|
#endif
|
|
o.clipPos = clipPos;
|
|
|
|
return o;
|
|
}
|
|
|
|
half4 ShadowPassFragment(VertexOutput IN) : SV_TARGET
|
|
{
|
|
UNITY_SETUP_INSTANCE_ID(IN);
|
|
return 0;
|
|
}
|
|
|
|
ENDHLSL
|
|
}
|
|
|
|
Pass
|
|
{
|
|
Name "DepthOnly"
|
|
Tags{"LightMode" = "DepthOnly"}
|
|
|
|
ZWrite On
|
|
ColorMask 0
|
|
|
|
// Material options generated by graph
|
|
${Culling}
|
|
HLSLPROGRAM
|
|
// Required to compile gles 2.0 with standard srp library
|
|
#pragma prefer_hlslcc gles
|
|
#pragma exclude_renderers d3d11_9x
|
|
#pragma target 2.0
|
|
|
|
//--------------------------------------
|
|
// GPU Instancing
|
|
#pragma multi_compile_instancing
|
|
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
|
|
// Defines generated by graph
|
|
${Defines}
|
|
#include "LWRP/ShaderLibrary/Core.hlsl"
|
|
#include "LWRP/ShaderLibrary/Lighting.hlsl"
|
|
#include "ShaderGraphLibrary/Functions.hlsl"
|
|
#include "CoreRP/ShaderLibrary/Color.hlsl"
|
|
|
|
${Graph}
|
|
struct VertexOutput
|
|
{
|
|
float2 uv : TEXCOORD0;
|
|
float4 clipPos : SV_POSITION;
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
UNITY_VERTEX_OUTPUT_STEREO
|
|
};
|
|
|
|
VertexOutput vert(GraphVertexInput v)
|
|
{
|
|
VertexOutput o = (VertexOutput)0;
|
|
UNITY_SETUP_INSTANCE_ID(v);
|
|
UNITY_TRANSFER_INSTANCE_ID(v, o);
|
|
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
|
|
|
|
// Vertex transformations performed by graph
|
|
${VertexShader}
|
|
VertexDescriptionInputs vdi = (VertexDescriptionInputs)0;
|
|
|
|
// Vertex description inputs defined by graph
|
|
${VertexShaderDescriptionInputs}
|
|
VertexDescription vd = PopulateVertexData(vdi);
|
|
v.vertex.xyz = vd.Position;
|
|
|
|
o.uv = uv1;
|
|
o.clipPos = TransformObjectToHClip(v.vertex.xyz);
|
|
return o;
|
|
}
|
|
|
|
half4 frag(VertexOutput IN) : SV_TARGET
|
|
{
|
|
UNITY_SETUP_INSTANCE_ID(IN);
|
|
return 0;
|
|
}
|
|
ENDHLSL
|
|
}
|
|
|
|
// This pass it not used during regular rendering, only for lightmap baking.
|
|
Pass
|
|
{
|
|
Name "Meta"
|
|
Tags{"LightMode" = "Meta"}
|
|
|
|
Cull Off
|
|
|
|
HLSLPROGRAM
|
|
// Required to compile gles 2.0 with standard srp library
|
|
#pragma prefer_hlslcc gles
|
|
#pragma exclude_renderers d3d11_9x
|
|
#pragma target 2.0
|
|
|
|
#pragma vertex LightweightVertexMeta
|
|
#pragma fragment LightweightFragmentMeta
|
|
|
|
#pragma shader_feature _SPECULAR_SETUP
|
|
#pragma shader_feature _EMISSION
|
|
#pragma shader_feature _METALLICSPECGLOSSMAP
|
|
#pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
|
|
#pragma shader_feature EDITOR_VISUALIZATION
|
|
|
|
#pragma shader_feature _SPECGLOSSMAP
|
|
|
|
#include "LWRP/ShaderLibrary/InputSurfacePBR.hlsl"
|
|
#include "LWRP/ShaderLibrary/LightweightPassMetaPBR.hlsl"
|
|
ENDHLSL
|
|
}
|