海水深度图烘焙工具更新
发表于2018-07-10
海水实现后(https://blog.csdn.net/yxriyin/article/details/80462620),在商店反响还不错,两周卖出了几十份,有人评论说需要增加一个烘焙深度图的工具,想想也有道理,于是就做了一个。原理其实非常简单,就是放一个摄像机照射岛屿,然后用shader将z的值归一化存在贴图中, 然后再将贴图转成png保存。
最重要的部分如下:
Shader "depthShader" { Properties { } SubShader { Pass { CGPROGRAM // Upgrade NOTE: excluded shader from DX11 and Xbox360; has structs without semantics (struct v2f members pos1) #pragma exclude_renderers xbox360 #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; }; struct v2f { half4 pos : SV_POSITION; float4 depth : TEXCOORD0; }; v2f vert (appdata v) { v2f o; o.pos = UnityObjectToClipPos (v.vertex); o.depth.x = mul(unity_ObjectToWorld,(v.vertex)).y; return o; } float4 frag(v2f i) : COLOR { float d = i.depth.x; float high = 0; float low = -2; float a = (high - d) / (high - low); return float4(1, 0, 0, a); } ENDCG } } }
非常简单的一个shader,但却非常实用。因为手机上并不支持深度图的直接抓取,所以通过这种方式获取深度图非常适合手机。
而例子我也提供了一个效果对比:
接下来我会写一个运行时烘焙深度图的水,适用任何场景。敬请期待。