Upload project file
This commit is contained in:
130
Runtime/HDRP/Shaders/HairShadowRenderer.shader
Normal file
130
Runtime/HDRP/Shaders/HairShadowRenderer.shader
Normal file
@@ -0,0 +1,130 @@
|
||||
Shader "Renderers/HairShadowRenderer"
|
||||
{
|
||||
Properties
|
||||
{
|
||||
_Color("Color", Color) = (1,1,1,1)
|
||||
_ColorMap("ColorMap", 2D) = "white" {}
|
||||
|
||||
// Transparency
|
||||
_AlphaCutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5
|
||||
[HideInInspector]_BlendMode("_BlendMode", Range(0.0, 1.0)) = 0.5
|
||||
}
|
||||
|
||||
HLSLINCLUDE
|
||||
|
||||
#pragma target 4.5
|
||||
#pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal switch
|
||||
|
||||
// #pragma enable_d3d11_debug_symbols
|
||||
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
|
||||
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/ShaderPass/ShaderPass.cs.hlsl"
|
||||
//#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/ShaderPass/FragInputs.hlsl"
|
||||
|
||||
//enable GPU instancing support
|
||||
#pragma multi_compile_instancing
|
||||
#pragma multi_compile _ DOTS_INSTANCING_ON
|
||||
|
||||
ENDHLSL
|
||||
|
||||
SubShader
|
||||
{
|
||||
Tags{ "RenderPipeline" = "HDRenderPipeline" }
|
||||
|
||||
Pass
|
||||
{
|
||||
Name "HairShadow"
|
||||
Tags { "LightMode" = "HairShadow" }
|
||||
|
||||
Blend Off
|
||||
ZWrite On
|
||||
ZTest LEqual
|
||||
|
||||
Cull Front
|
||||
|
||||
HLSLPROGRAM
|
||||
|
||||
#define _SURFACE_TYPE_OPAQUE
|
||||
|
||||
// Toggle the alpha test
|
||||
#define _ALPHATEST_ON
|
||||
|
||||
// Toggle transparency
|
||||
// #define _SURFACE_TYPE_TRANSPARENT
|
||||
|
||||
// Toggle fog on transparent
|
||||
#define _ENABLE_FOG_ON_TRANSPARENT
|
||||
|
||||
// List all the attributes needed in your shader (will be passed to the vertex shader)
|
||||
// you can see the complete list of these attributes in VaryingMesh.hlsl
|
||||
#define ATTRIBUTES_NEED_TEXCOORD0
|
||||
#define ATTRIBUTES_NEED_NORMAL
|
||||
#define ATTRIBUTES_NEED_TANGENT
|
||||
|
||||
// List all the varyings needed in your fragment shader
|
||||
#define VARYINGS_NEED_TEXCOORD0
|
||||
#define VARYINGS_NEED_TANGENT_TO_WORLD
|
||||
|
||||
#define SHADERPASS SHADERPASS_FORWARD_UNLIT
|
||||
|
||||
int _HairShadowPassChannel;
|
||||
TEXTURE2D(_ColorMap);
|
||||
TEXTURE2D(_HairShadowTex);
|
||||
SAMPLER(sampler_HairShadowTex);
|
||||
|
||||
// Declare properties in the UnityPerMaterial cbuffer to make the shader compatible with SRP Batcher.
|
||||
CBUFFER_START(UnityPerMaterial)
|
||||
float4 _ColorMap_ST;
|
||||
float4 _Color;
|
||||
|
||||
float _AlphaCutoff;
|
||||
float _BlendMode;
|
||||
CBUFFER_END
|
||||
|
||||
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/RenderPass/CustomPass/CustomPassRenderersV2.hlsl"
|
||||
|
||||
// If you need to modify the vertex datas, you can uncomment this code
|
||||
// Note: all the transformations here are done in object space
|
||||
// #define HAVE_MESH_MODIFICATION
|
||||
// AttributesMesh ApplyMeshModification(AttributesMesh input, float3 timeParameters)
|
||||
// {
|
||||
// input.positionOS += input.normalOS * 0.0001; // inflate a bit the mesh to avoid z-fight
|
||||
// return input;
|
||||
// }
|
||||
|
||||
// Put the code to render the objects in your custom pass in this function
|
||||
void GetSurfaceAndBuiltinData(FragInputs fragInputs, float3 viewDirection, inout PositionInputs posInput, out SurfaceData surfaceData, out BuiltinData builtinData)
|
||||
{
|
||||
float cDepth = SampleCameraDepth(posInput.positionNDC);
|
||||
float mDepth = posInput.deviceDepth;
|
||||
|
||||
float opacity = 1;
|
||||
// const float3 color = float3(LinearEyeDepth(posInput.deviceDepth, _ZBufferParams), 0, 0);
|
||||
|
||||
// A manual depth test is needed here. Custom pass will always draw with no regard of depth.
|
||||
// This test was given a quite large leeway to avoid discarding when cDepth = mDepth [Suomi, 20230915]
|
||||
|
||||
//float3 color = float3(cDepth < mDepth + 0.01 ? mDepth : 0, 0, 0); // Can get that in HDRP directly
|
||||
float3 color = float3(0, 0, 0);
|
||||
color.r = mDepth;
|
||||
|
||||
#ifdef _ALPHATEST_ON
|
||||
DoAlphaTest(opacity, _AlphaCutoff);
|
||||
#endif
|
||||
|
||||
// Write back the data to the output structures
|
||||
ZERO_BUILTIN_INITIALIZE(builtinData); // No call to InitBuiltinData as we don't have any lighting
|
||||
ZERO_INITIALIZE(SurfaceData, surfaceData);
|
||||
builtinData.opacity = opacity;
|
||||
builtinData.emissiveColor = float3(0, 0, 0);
|
||||
surfaceData.color = color;
|
||||
}
|
||||
|
||||
#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/ShaderPass/ShaderPassForwardUnlit.hlsl"
|
||||
|
||||
#pragma vertex Vert
|
||||
#pragma fragment Frag
|
||||
|
||||
ENDHLSL
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user