Unity 3D mesh製作地形工具
如果要把unity3D的工程,轉到flash平臺,是有一些限制的,其中,unity3d的地形不能使用,這就是一個很大的問題。
所以,使用mesh來替代unity自帶的地形,就變成首選的解決方案。
問題接著而來,mesh怎麼像unity自帶的地形一樣刷地表貼圖,怎麼種樹,草。這就需要一套完整的系統與工具來支援。
於是有了這個新的工具。
1 先說刷地表貼圖的實現,這個其實就很簡單,首先是mesh材質的shader的支援,shader要支援4層紋理混合,外加一個mix texture,也就是5層貼圖的shader。這個很簡單了,就是4層貼圖根據mix texture的R G B A通道來混合最後的顏色。
half4 splat_control = tex2D (_Control, IN.uv_Control);
half3 col;
col = splat_control.r * tex2D (_Splat0, IN.uv_Splat0).rgb;
col += splat_control.g * tex2D (_Splat1, IN.uv_Splat1).rgb;
col += splat_control.b * tex2D (_Splat2, IN.uv_Splat2).rgb;
col += splat_control.a * tex2D (_Splat3, IN.uv_Splat3).rgb;
有了shader之後,刷mesh的貼圖,無非就是修改mix texture的各個通道的顏色而已。用從螢幕中心點發出射線做碰撞,碰撞得到的mesh的點的uv座標,來確定被修改的mix texture的部分。然後根據筆刷的值來修改mix texture相應通道的值。
上圖中,scene視窗中,原點就是筆刷,筆刷可以預覽選中的貼圖,方便美術繪製。
2 種樹,這個就更簡單了,把樹的模型放到mesh表面。
3 種草,草要會動才有真實感,把草的動畫都寫在頂點shader裡面,只要給shader傳入一個時間引數就可以。然後場景中可能存在大量的草,最後考慮到效率的優化,在執行場景的時候,指令碼會判斷是否是同樣mesh,同樣材質的草,如果是一樣的,會把一定範圍內所有的相同的草合併成一個大的mesh,這樣做,場景中可以存在許多的草,且效率很高。