Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. We have updated the language to the Editor Terms based on feedback from our employees and community. Learn more.
    Dismiss Notice

Question sample two texture

Discussion in 'Shaders' started by Burak5312, Jan 29, 2023.

  1. Burak5312

    Burak5312

    Joined:
    Oct 16, 2021
    Posts:
    3
    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 :(

    Code (CSharp):
    1. Shader "Unlit/Wateranim"
    2. {
    3.     Properties
    4.     {
    5.         _Color ("Color", Color) = (1,1,1,1)
    6.         _MainTex ("Base (Texture)", 2D) = "blue" {}
    7.     }
    8.     SubShader
    9.     {
    10.         Tags {
    11.             "RenderType"="Transparent"
    12.             "Queue" = "Transparent"
    13.         }
    14.  
    15.         LOD 100
    16.         Cull Off
    17.         Blend One OneMinusSrcAlpha
    18.  
    19.         Pass
    20.         {
    21.             CGPROGRAM
    22.             #pragma vertex vert
    23.             #pragma fragment frag
    24.  
    25.             #include "UnityCG.cginc"
    26.  
    27.             struct appdata
    28.             {
    29.                 float4 vertex : POSITION;
    30.                 float2 uv : TEXCOORD0;
    31.             };
    32.  
    33.             struct v2f
    34.             {
    35.                 float2 uv : TEXCOORD0;
    36.                 float4 vertex : SV_POSITION;
    37.             };
    38.  
    39.             sampler2D _MainTex;
    40.             fixed4 _Color;
    41.             float4 _MainTex_ST;
    42.  
    43.             v2f vert (appdata v)
    44.             {
    45.                 v2f o;
    46.                 o.vertex = UnityObjectToClipPos(v.vertex);
    47.                 o.uv = TRANSFORM_TEX(v.uv, _MainTex);
    48.                 return o;
    49.             }
    50.  
    51.             fixed4 frag (v2f i) : SV_Target
    52.             {
    53.                 // sample the texture
    54.                 fixed4 col = tex2D(_MainTex, i.uv + cos(_Time) * 0.015) + tex2D(_MainTex, i.uv) * _Color;
    55.                 return col;
    56.             }
    57.  
    58.             ENDCG
    59.         }
    60.     }
    61. }
    62.  
     

    Attached Files:

    Last edited: Jan 29, 2023
  2. bgolus

    bgolus

    Joined:
    Dec 7, 2012
    Posts:
    12,256
    This is a basic math order of operations issue. X + Y * Z … X doesn’t get multiplied by Z.
     
  3. Burak5312

    Burak5312

    Joined:
    Oct 16, 2021
    Posts:
    3
    I didn't understand clearly what you mean
     
  4. bgolus

    bgolus

    Joined:
    Dec 7, 2012
    Posts:
    12,256
    Code (csharp):
    1. fixed4 col = (tex2D(_MainTex, i.uv + cos(_Time) * 0.015) + tex2D(_MainTex, i.uv)) * _Color;
     
    Burak5312 likes this.
  5. Burak5312

    Burak5312

    Joined:
    Oct 16, 2021
    Posts:
    3
    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
     
  6. bgolus

    bgolus

    Joined:
    Dec 7, 2012
    Posts:
    12,256
    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.
     
    Burak5312 likes this.