Unity 3D mesh制作地形工具

时间:2021-05-27 04:51:57

如果要把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相应通道的值。

Unity 3D mesh制作地形工具

上图中,scene窗口中,原点就是笔刷,笔刷可以预览选中的贴图,方便美术绘制。

2 种树,这个就更简单了,把树的模型放到mesh表面。

3 种草,草要会动才有真实感,把草的动画都写在顶点shader里面,只要给shader传入一个时间参数就可以。然后场景中可能存在大量的草,最后考虑到效率的优化,在运行场景的时候,脚本会判断是否是同样mesh,同样材质的草,如果是一样的,会把一定范围内所有的相同的草合并成一个大的mesh,这样做,场景中可以存在许多的草,且效率很高。