Проблема с Outline шейдером

Шейдеры и все-все-все.

Проблема с Outline шейдером

Сообщение Balphagore 09 май 2020, 00:02

Скомбинировал стандартный Surface Shader Юнити и вертексный шейдер для создания обводки объекта:
Синтаксис:
Используется csharp
Shader "Custom/NewSurfaceShader 1"
{
    Properties
    {
        _Color ("Color", Color) = (1,1,1,1)
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _Glossiness ("Smoothness", Range(0,1)) = 0.5
        _Metallic ("Metallic", Range(0,1)) = 0.0
        _OutlineColor("Outline Color", Color) = (1,1,1,1)
        _OutlineWidth("Outline Width", Range(1,5)) = 1.2
    }
    SubShader
    {
                        CGINCLUDE
                        #include "UnityCG.cginc"
                        struct appdata
                                {
                                        float4 vertex : POSITION;
                                        float2 uv : TEXCOORD0;
                                };
                                struct v2f
                                {
                                        float4 vertex : SV_POSITION;
                                        float2 uv : TEXCOORD0;
                                };
                                sampler2D _MainTex;
                                float _OutlineWidth;
                                float4 _OutlineColor;
                        ENDCG
                Pass
                {
                        Zwrite Off
                        ZTest Always
                        CGPROGRAM
                        #pragma vertex vert
                        #pragma fragment frag
                        v2f vert(appdata v)
                        {
                                v.vertex.xyz *= _OutlineWidth;
                                v2f o;
                                o.vertex = UnityObjectToClipPos(v.vertex);
                                o.uv = v.uv;
                                return o;
                        }
                        fixed4 frag(v2f i) : SV_Target
                        {
                                return _OutlineColor;
                        }
                        ENDCG
                }

        CGPROGRAM

        #pragma surface surf Standard fullforwardshadows

        #pragma target 3.0


        struct Input
        {
            float2 uv_MainTex;
        };

        half _Glossiness;
        half _Metallic;
        fixed4 _Color;

        void surf (Input IN, inout SurfaceOutputStandard o)
        {
            fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
            o.Albedo = c.rgb;
            o.Metallic = _Metallic;
            o.Smoothness = _Glossiness;
            o.Alpha = c.a;
        }
        ENDCG
    }
    FallBack "Diffuse"
}
 

В принципе результат устроил:
https://wdho.ru/5gqw
но при использовании под определенными углами он начинает отображаться некорректно:
https://wdho.ru/5gqx
При этом в самой сцене шейдер работает без этих исчезновений. В чем может быть дело?
P.S. Так и не понял, как нормально вставить скриншоты в сообщение
Balphagore
UNIт
 
Сообщения: 84
Зарегистрирован: 04 июл 2019, 13:00

Вернуться в Shader Lab

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1