首页 > 代码库 > Shader-应用V&F实现透明材质
Shader-应用V&F实现透明材质
看到风宇冲实现的地球很帅。他写的这个程序很精妙,将地球和云的颜色做一个插值,作为此像素的颜色值,很妙。先膜拜一下大神嘛!
http://blog.sina.com.cn/s/blog_471132920101d6xb.html
不过,我今天写的shader也是实现相同的效果,咱的思路就很常规:地球作为不透明物体,先渲染。云层作为透明体后渲染。废话不多说开始!
Earth.shader
Shader "Custom/Earth" { Properties { _MainTex ("Texture", 2D) = "white" { } } SubShader { Tags { "Queue" = "Geometry" "RenderType"="Opaque" } Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" sampler2D _MainTex; 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 x即横向在动 float u = i.uv.x + -0.1*_Time; float2 x=float2(u , i.uv.y); half4 texcol = tex2D (_MainTex, x); return texcol; } ENDCG } } }
Cloud.shader
Shader "Custom/Cloud" { Properties { _MainTex ("Texture", 2D) = "white" { } } SubShader { Tags { "Queue"="Transparent" "RenderType"="Transparent" } Pass { Blend SrcAlpha OneMinusSrcAlpha CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" sampler2D _MainTex; 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 x即横向在动 float u = i.uv.x + -0.2*_Time; float2 x = float2 (u, i.uv.y); half4 texcol = tex2D (_MainTex, x); texcol = float4(1, 1, 1, 0) * (texcol.x); if (texcol.x + texcol.y + texcol.z > 0.95) { texcol = half4(texcol.xyz, 0.5); } return texcol; } ENDCG } } }
ok之所以,texcol这一步,是因为给的图是多彩的,像热成像图。经过了
texcol = float4(1, 1, 1, 0) * (texcol.x);转化成了黑白图,其中白色为云效果。
然后再判断一下,即可。
思路上是没问题的,可是当我写出大部分代码的时候,总是不出效果。
怎样在0没有云的地方透明。后来我加入了Blend SrcAlpha OneMinusSrcAlpha 就出了效果
ok。剩下的 就是百度他的作用了,这就不是我的工作了。哈哈
http://download.csdn.net/detail/lihuozhiling/8365965
Shader-应用V&F实现透明材质
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。