在很多仿真和游戏应用中都需要大规模地形,这样会使3D环境似乎“无限大”,增加用户的真实感,比如飞行模拟游戏。那么在Unity中如何实现大规模地形场景呢?官方中文论坛中有一个帖子讲得比较在点,帖子地址在这里:http://forum.china.unity3d.com/forum.php?mod=viewthread&tid=117。总结起来有三点:地形分块,动态加载和卸载,内存优化。其中前两点是最基本的。
最近一直在研究这个问题,也查了好多资料,博客、论坛,甚至一些科研论文,还并没有发现一套完整的解决方案(也许Asset Store上有,不过并没有找到免费的)。于是决定在这里将研究过程中的一些思路和实施方法分享给诸位Unity开发者,我会根据研究的进度不定时地更新这个系列。欢迎各位一起讨论!
我采用WorldMachine来绘制地形,并分块导出heightmap和texture。WorldMachine的使用暂时并没有深入研究,而分块导出的方法在WM手册上描述的比较详细。这一部分以后会单独更一篇,现在我们暂且不论。那么有了heightmap和texture如何创建Unity地形,或者说是Terrain Object呢?这里介绍两种方法:
1. 在Editor中手动创建
这部分很多博客都有介绍,简单介绍,有几个关键地方提一下。
创建Terrain对象,它自动包含一个Terrain组件,包含了所有属性设置。
点击这个Import Raw...按钮,导入你的高度图,我从WM中导出的heightmap资源采用.r16格式(16位raw),选择后弹出这个对话框: