sample two texture

there are 2 textures here, one will stay fixed and the other will move, the colors will be the same but it gives results like this I get what I want but the color is distorted

i think i’m doing it wrong but i don’t know how :frowning:

Shader "Unlit/Wateranim"
{
    Properties
    {
        _Color ("Color", Color) = (1,1,1,1)
        _MainTex ("Base (Texture)", 2D) = "blue" {}
    }
    SubShader
    {
        Tags {
            "RenderType"="Transparent"
            "Queue" = "Transparent"
        }

        LOD 100
        Cull Off
        Blend One OneMinusSrcAlpha

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
            };

            sampler2D _MainTex;
            fixed4 _Color;
            float4 _MainTex_ST;

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                // sample the texture
                fixed4 col = tex2D(_MainTex, i.uv + cos(_Time) * 0.015) + tex2D(_MainTex, i.uv) * _Color;
                return col;
            }

            ENDCG
        }
    }
}

This is a basic math order of operations issue. X + Y * Z … X doesn’t get multiplied by Z.

I didn’t understand clearly what you mean

fixed4 col = (tex2D(_MainTex, i.uv + cos(_Time) * 0.015) + tex2D(_MainTex, i.uv)) * _Color;
1 Like

thanks, this works, but there are bugs, the fog does not come out, there are errors in the alpha code, the color of the objects changes in the water, etc. i think i will have to do more but thank you this worked

Fog doesn’t show on it because there’s no code to do the fog. If you create a default unlit shader in Unity, the shader it makes has the code needed to do fog.

Alpha blending isn’t working properly because your blend mode isn’t for traditional alpha blending, it’s for premultiplied alpha blending. If you lower only the alpha, it becomes an additive shader.

Things under water change color for two reasons, one being that premultiplied alpha blend, and because adding the two textures together means the color value is sometimes going over 1.0. You probably want to either multiply everything by 0.5, or clamp the color between 0.0 and 1.0.

1 Like