2.转动的地球shader
生活随笔
收集整理的這篇文章主要介紹了
2.转动的地球shader
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原理很簡單,根據時間對uv中的x軸進行位移,對于地面和云層,取不同的移動速度,分別計算對應的uv坐標,再根據uv坐標從地面和云層的紋理中分別取出對應的值,最后把兩者用lerp函數進行混合作為最終結果。
下邊的代碼包含兩個版本,一個是vertex fragment shader,是不帶光照的,一個是surface shader版本,帶Lambert光照,運行時場景里加上光照才會顯得很明亮
Shader "Study/2_Earth" {Properties{_Color("Main Color", Color) = (1,1,1,0.5)_MainTex("Texture", 2D) = "white" { } //地面紋理_Cloud("_Cloud", 2D) = "white" { } //云層的紋理_SpeedE("SpeedE", Float) = 0.25 //地面移動速度_SpeedC("SpeedC", Float) = 0.5 //云層移動速度}///vertex fargment shader版本/*SubShader{Tags{ "Queue" = "Transparent" "RenderType" = "Transparent" } //其實設為常用的Opaque也是可以的Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"float4 _Color;sampler2D _MainTex;sampler2D _Cloud;uniform float _SpeedE;uniform float _SpeedC;struct v2f{float4 pos : SV_POSITION;float2 uv : TEXCOORD0;};float4 _MainTex_ST;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坐標并取出紋理值float u = i.uv.x + -_SpeedE * _Time;float2 uv_tmp = float2(u , i.uv.y);half4 texcol = tex2D(_MainTex, uv_tmp);texcol = texcol;//移動云層uv坐標并取出紋理值u = i.uv.x + -_SpeedC * _Time;uv_tmp = float2(u , i.uv.y);half4 texcol3 = tex2D(_Cloud, uv_tmp);half4 texcol0 = float4(1,1,1,0) * (texcol3.x);//這步操作是因為使用的圖片云層顏色并不是白色// 混合二者作為最終輸出half4 res = lerp(texcol, texcol0, 0.5);return res;}ENDCG}}*////帶光照的surface shader版本SubShader{Tags{ "Queue" = "Transparent" "RenderType" = "Transparent" } //其實設為常用的Opaque也是可以的CGPROGRAM#pragma surface surf Lambert #include "UnityCG.cginc"float4 _Color;sampler2D _MainTex;sampler2D _Cloud;uniform float _SpeedE;uniform float _SpeedC;// 獲取_MainTex的UV信息定義輸入結構體struct Input{// 在貼圖變量前加上uv表示提取uv值(二維坐標)float2 uv_MainTex;};void surf(Input IN, inout SurfaceOutput o){//移動地面uv坐標并取出紋理值float u = IN.uv_MainTex.x + -_SpeedE * _Time;float2 uv_tmp = float2(u, IN.uv_MainTex.y);half4 texcol = tex2D(_MainTex, uv_tmp);texcol = texcol;//移動云層uv坐標并取出紋理值u = IN.uv_MainTex.x + -_SpeedC * _Time;uv_tmp = float2(u, IN.uv_MainTex.y);half4 texcol3 = tex2D(_Cloud, uv_tmp);half4 texcol0 = float4(1, 1, 1, 0) * (texcol3.x);//這步操作是因為使用的圖片云層顏色并不是白色// 混合二者作為最終輸出half4 res = lerp(texcol, texcol0, 0.5) * _Color;// RGBo.Albedo = res.rgb;// 透明度o.Alpha = 1;}ENDCG} } 帶光照的Surface版本 :
不帶光照的Vertext Fragment版本:
最后附上工程文件:http://download.csdn.net/detail/yinfourever/9564149
總結
以上是生活随笔為你收集整理的2.转动的地球shader的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 光大携程菁英白金信用卡额度是多少?附赠提
- 下一篇: 3.顶点外扩方法实现的描边shader