Unity Custom Shader で影の出方がおかしい
解決したいこと
Unity URP で シェーダーを以下のプログラムで作りました。そうすると写真のようにカメラを近づけていくと不要な黒い線が見えてしまいます。この黒い線をなくしたいです。
発生している問題・エラー
該当するソースコード
Shader "Custom/Lit"
{
Properties
{
_BaseColor("Color", Color) = (1,1,1,1)
}
SubShader
{
Pass
{
HLSLPROGRAM
#pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN
#pragma vertex vert
#pragma fragment frag
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
half4 _BaseColor;
struct Attributes
{
float4 positionOS : POSITION;
float3 normal : NORMAL;
};
struct Varyings
{
float4 positionHCS : SV_POSITION;
float3 normalWS :TEXCOORD1;
float3 positionWS :TEXCOORD2;
float4 shadowCoords : TEXCOORD3;
};
Varyings vert(Attributes IN)
{
VertexPositionInputs positions= GetVertexPositionInputs(IN.positionOS);
VertexNormalInputs normals = GetVertexNormalInputs(IN.normal);
Varyings OUT;
OUT.positionHCS = positions.positionCS;
OUT.positionWS = positions.positionWS;
OUT.normalWS = normals.normalWS;
float4 shadowCoordinates = GetShadowCoord(positions);
OUT.shadowCoords=shadowCoordinates;
return OUT;
}
half4 frag(Varyings IN ) : SV_Target
{
half4 base=_BaseColor;
half shadowAmount = MainLightRealtimeShadow(IN.shadowCoords);
return _BaseColor*shadowAmount;
}
ENDHLSL
}
Pass
{
Name "ShadowCaster"
Tags { "LightMode"="ShadowCaster" }
ZWrite On
ZTest LEqual
HLSLPROGRAM
#pragma vertex ShadowPassVertex
#pragma fragment ShadowPassFragment
#pragma shader_feature _ALPHATEST_ON
#pragma shader_feature _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
#pragma multi_compile_instancing
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/SurfaceInput.hlsl"
#include "Packages/com.unity.render-pipelines.universal/Shaders/ShadowCasterPass.hlsl"
ENDHLSL
}
}
}
0 likes