@yuusuke0706d (yu da)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Unity Custom Shader で影の出方がおかしい

解決したいこと

Unity URP で シェーダーを以下のプログラムで作りました。そうすると写真のようにカメラを近づけていくと不要な黒い線が見えてしまいます。この黒い線をなくしたいです。

発生している問題・エラー

スクリーンショット 2025-07-13 202341.pngスクリーンショット 2025-07-13 202346.pngスクリーンショット 2025-07-13 202351.png

該当するソースコード

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

No Answers yet.

Your answer might help someone💌