Шейдер Unity, вызывающий потерю деталей - PullRequest
0 голосов
/ 20 октября 2019

Я работал над своей игрой в Unity и начал экспериментировать с шейдерами. Я использовал какой-то код из другого проекта, и я не до конца понимаю, как он работает, поэтому я надеялся на объяснение и то, как достичь своей цели.

У меня есть два шейдера, один для «основания», которые представляют собой 2d плиткии другой для другого для объектов поверх этих плиток "tilables". Я хочу контролировать яркость плитки, поскольку я внедряю систему освещения. Запасной шейдер имеет возможность вносить эти изменения, а основной шейдер - нет.

Как я могу изменить свой шейдер основания, чтобы я мог изменять цвет и яркость в единстве. До сих пор, когда я использую шейдер tilables для основания, он работает, но я теряю детализацию на плитках. Почему это происходит и как я могу это исправить?

Шейдер Grounds

Shader "Fy/Grounds" 
{
    Properties 
    {
        _MainTex ("Main texture", 2D) = "white" {}
    }

    SubShader 
    {
        Cull Back
        Lighting Off
        ZWrite Off
        Tags { "Queue"="Transparent" }
        Blend One OneMinusSrcAlpha
        LOD 200

        Pass {
            CGPROGRAM

            #pragma vertex vert
            #pragma fragment frag

            sampler2D _MainTex;

            #include "UnityCG.cginc"

            struct v2f {
                float4 pos : SV_POSITION;
                float2 uv : TEXCOORD0;
                fixed4 color: COLOR; 
            };

            v2f vert(appdata_full v) {
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);
                o.color = v.color;


                //
                o.uv = v.vertex.xy/4;
                return o;
            }

            half4 frag (v2f i) : COLOR {
                half4 texcol = tex2D(_MainTex, i.uv.xy) * i.color.a;
                return  texcol;
            }

            ENDCG
        } 
    }
}

Tilables Shader

Shader "Fy/Tilables" 
{
    Properties 
    {
        _MainTex ("Main texture", 2D) = "white" {}
        _Color ("Color", Color) = (1,1,1,1)
    }

    SubShader 
    {
        Cull Back
        Lighting Off
        ZWrite Off
        Tags { "Queue"="Transparent" }
        Blend SrcAlpha OneMinusSrcAlpha
        LOD 200

        Pass {
            CGPROGRAM

            #pragma vertex vert
            #pragma fragment frag
            #pragma multi_compile_instancing

            #include "UnityCG.cginc"

            sampler2D _MainTex;
            float4 _MainTex_ST;
            float4 _Color;

            struct v2f {
                float4 pos : SV_POSITION;
                float2 uv : TEXCOORD0;
                UNITY_VERTEX_INPUT_INSTANCE_ID              
            };

            v2f vert(appdata_full v) {
                v2f o;
                UNITY_SETUP_INSTANCE_ID(v);
                UNITY_TRANSFER_INSTANCE_ID(v, o);

                o.pos = UnityObjectToClipPos(v.vertex);
                o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
                return o;
            }

            void frag (v2f i, out half4 outDiffuse : SV_Target0) {
                UNITY_SETUP_INSTANCE_ID(i);
                outDiffuse = tex2D(_MainTex,  i.uv) * _Color;
            }

            ENDCG
        } 
    }
}

Кто-нибудь может посоветовать это? Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...