转动的地球

来源:互联网 发布:胡歌的演技知乎 编辑:程序博客网 时间:2024/04/28 19:16
Shader "Custom/testShader" {
properties
{
   _MainTex("earth", 2D)="white"{}
   _Cloud("cloud", 2D)="white"{}
}
Subshader
{
   Tags{"Queue"="Transparent" "RenderType"="Transparnt"}
   pass
   {
      CGPROGRAM
      #pragma vertex vert
      #pragma fragment frag
      #include "UnityCG.cginc"

      float4 _Color;
      sampler2D _MainTex;
      sampler2D _Cloud;
      float4 _MainTex_ST;

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

      v2f vert(appdata_base v)
      {
         v2f o;
         o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
         o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
         return o;
      }

      half4 frag(v2f i):COLOR
      {                                                    //地球的贴图uv, x即横向在动
         float u_x = i.uv.x + -0.1*_Time;
         float2 uv_earth = float2(u_x, i.uv.y);
         half4 texcolor_earth = tex2D(_MainTex, uv_earth);

         float u_y = i.uv.x + -0.2*_Time;             //云层的贴图uv,x动的更快些
         float2  uv_cloud = float2(u_y, i.uv.y);
         half4 tex_cloudDepth = tex2D(_Cloud, uv_cloud);

         half4 texcolor_cloud = float4(1,1,1,0)*(tex_cloudDepth.x);   //深度值=该点的云颜色
         return lerp(texcolor_earth, texcolor_cloud, 0.5f);              //地球和云的颜色混合
      }
      ENDCG
   }
}

}

原理:

(1)通过uv.x,即纹理坐标的横轴与时间相乘,产生球在移动的效果

(2)通过地球和云的颜色值叠加形成层叠效果

0 0
原创粉丝点击