Мыльная текстура при работе с шейдером

Я заставил брать цвет пикселя на текстуре с помощью tex2Dlod, но текстура получается мыльной, размытой

введите сюда описание изображения

А так она должна выглядеть

введите сюда описание изображения

Код

Pass
    {
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
        #pragma multi_compile _ LIGHTMAP_ON
        #include "UnityCG.cginc"
        #pragma glsl
        #pragma target 3.0

        sampler2D _MainTex1;
        float2 uv_MainTex1;
        float4 zy;
        float4 _color;

        half _FogStart;  //определяем новые переменные в рамках CGPROGRAM
        half _FogEnd;

        struct appdata
        {
        float4 vertex : POSITION;
        float4 color : COLOR;
        float4 uv : TEXCOORD1;
        };


        struct v2f
        {
        float4 pos : SV_POSITION;
        float4 uv : TEXCOORD1;
        half fog : TEXCOORD2;  //добавляем новую переменную для расчета расстояния отображения тумана и последующей передачи в fragment функцию
        float4 color : COLOR;
        half3 viewDir : TEXCOORD3;

        fixed3 albedo : Albedo;
        };


        v2f vert(appdata v)
        {               
        v2f o;
        zy = tex2D (_MainTex1, i.uv.xy);
        o.color = zy.rgba;//fixed4(225,225,0,225); // Цвет   ОШИБКА ГДЕ-ТО ЗДЕСЬ
        o.pos = UnityObjectToClipPos(v.vertex);
        //lightmaps
        o.uv.xy = v.uv.xy * unity_LightmapST.xy + unity_LightmapST.zw;
        //fog высчитываем положение тумана в зависимости от заданных значений
        half fogz = UnityObjectToViewPos(v.vertex).z;
        o.fog = saturate((fogz + _FogStart) / (_FogStart - _FogEnd));
        float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
        o.viewDir = -(normalize(UnityWorldSpaceViewDir(worldPos)));
        return o;
        }

        half4 frag(v2f i) : COLOR
        {
        UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
        fixed4 c = i.color;
        //lightmaps
        #ifdef LIGHTMAP_ON
          fixed4 lm = UNITY_SAMPLE_TEX2D(unity_Lightmap, i.uv.xy);
        c.rgb *= lm.rgb * 4;
        #endif
        //fog заменяем плавно цвет поверхности на цвет кубомапы (он же наш туман). Кубомапу нужно задать в настройках освещение (Lighting > Scene > Environment Reflection > Source = Custom > Cubemap = Ваша кубомапа)
        half4 fogCube = UNITY_SAMPLE_TEXCUBE(unity_SpecCube0, i.viewDir);
        return lerp(c, fogCube, i.fog);
        }
        ENDCG
    }

Ответы (1 шт):

Автор решения: Даниил Ганин

Нужно задавать цвет не в vert(), а в frag(), т.к., как я понял,vert() определяет вершины, а frag() сами пиксели со всего объекта

        v2f vert(appdata v)
        {               
        v2f o;

        o.color = v.color;// вершины делаем серыми(по стандарту)
        o.pos = UnityObjectToClipPos(v.vertex);
        //lightmaps
        o.uv.xy = v.uv.xy * unity_LightmapST.xy + unity_LightmapST.zw;
        //fog высчитываем положение тумана в зависимости от заданных значений
        half fogz = UnityObjectToViewPos(v.vertex).z;
        o.fog = saturate((fogz + _FogStart) / (_FogStart - _FogEnd));
        float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
        o.viewDir = -(normalize(UnityWorldSpaceViewDir(worldPos)));
        return o;
        }




        half4 frag(v2f i) : COLOR
        {
        UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);
        float4 RBGTex = tex2D (_MainTex1, i.uv.xy); // Здесь изменения, также tex2D должен работать быстрее
        fixed4 c = RBGTex.rgba; // Задаём цвет из xy
        //lightmaps
        #ifdef LIGHTMAP_ON
          fixed4 lm = UNITY_SAMPLE_TEX2D(unity_Lightmap, i.uv.xy);
        c.rgb *= lm.rgb * 4;
        #endif
        //fog заменяем плавно цвет поверхности на цвет кубомапы (он же наш туман). Кубомапу нужно задать в настройках освещение (Lighting > Scene > Environment Reflection > Source = Custom > Cubemap = Ваша кубомапа)
        half4 fogCube = UNITY_SAMPLE_TEXCUBE(unity_SpecCube0, i.viewDir);
        return lerp(c, fogCube, i.fog);
        }

С вопросом мне помог Yaroslav, который написал свои сообщения в комментариях под вопросом выше

→ Ссылка