Notice
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

자라고싶다

[HLSL]2 Pass Outline 본문

Unity/UnityShader

[HLSL]2 Pass Outline

멍산 2023. 10. 16. 02:04

Shader "Example/Outline"
{

    Properties
    {
         _TintColor("TintColor", Color) = (1,1,1,1)
         _LineColor("LineColor", Color) = (0,0,0,0)
         _LineWidth("LineWidth", Range(0,1)) = 0.5
    }

        SubShader
    {

        Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" }

        Pass
        {

            HLSLPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"

            struct Attributes
            {
                float4 positionOS   : POSITION;
            };

            struct Varyings
            {
                float4 positionHCS  : SV_POSITION;
            };

            half4 _TintColor;

            Varyings vert(Attributes IN)
            {
                Varyings OUT;
                OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz);
                return OUT;
            }


            half4 frag(Varyings IN) : SV_Target
            {
                half4 color = _TintColor;
                return color;

            }
            ENDHLSL
        }

            Pass
            {
                Name"Outline"
                Tags{"LightMode" = "Outline"}

                Cull front

                HLSLPROGRAM

                #pragma vertex vert
                #pragma fragment frag

                #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"

                    struct Attributes
                {
                    float4 positionOS   : POSITION;
                    float4 normal       : NORMAL;
                };

                struct Varyings
                {
                    float4 positionHCS  : SV_POSITION;
                    float4 normal       : NOMRAL;

                };

                half4 _LineColor;
                half _LineWidth;

                Varyings vert(Attributes IN)
                {
                    Varyings OUT;

                    OUT.normal.xyz = TransformObjectToWorldNormal(IN.normal);
                    IN.positionOS.xyz += OUT.normal.xyz * _LineWidth;
                    OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz);

                    return OUT;
                }


                half4 frag(Varyings IN) : SV_Target
                {
                    half4 color = _LineColor;
                    return color;
                }
                    ENDHLSL
            }
    }
}

 

Universal Renderer Data 에서 Add Renderer Feature - Render Objects 를 추가하고 LightMode Tags에 Outline 추가.

'Unity > UnityShader' 카테고리의 다른 글

[HLSL]Tessellation + Displacement  (1) 2023.11.23
[HLSL] Diffuse Wrap + Shadow Ramp  (0) 2023.10.17
[HLSL]Triplanar  (0) 2023.10.16
[HLSL]DepthTexture  (0) 2023.10.16
[HLSL]MainLight  (0) 2023.10.16