unity四叉树地形

发布时间 2023-04-05 18:36:46作者: 遥岑寄

在unity中,我们可以使用unity自带的地形系统创建一个超大的地形场景,并且可以利用地形图层,创建出富有真实感的地表材质。但是当我们需要更改地形的渲染方式的时候,比如需要风格化渲染时,使用unity自带的地形系统就会很麻烦。因此,我尝试在unity中使用mesh的方式实现了一个简易的地形系统,这样地形的渲染就和场景中其他网格物体的渲染没有什么区别了,可以很方便地实现各种效果。

以下我将分步简要描述实现思路与过程,目录如下:

1、 将world machine中创建的地形导入到unity的mesh中;

2、 处理地形数据,按照四叉树层级分块;

3、 根据摄像机位置动态地组合分块,达到动态地形LOD的效果;

以下是实现的具体过程,个人编码水平比较低,希望大家多多提出意见。

 

一、导入地形数据

在unity自带的地形系统中,我们可以通过一张高度图的方式将地形数据从地形生成软件(World Machine,Gaea等)导入到unity引擎中,这张高度图通常是原始图片数据格式(.raw)。.raw格式的图片保存了最原始、无损的信息,而我们常用的png、jpg图片采用了一些压缩算法来减小图片的大小,但是会损失一些数据,因此在程序化地形工作流中,我们常常使用.raw来保存地形信息。

但是.raw格式的图片并不方便,windows本身是无法查看这类图片的,而C#也需要配置一些环境,并且也比较复杂。因此我选择不使用.raw图片来存储地形数据,转而直接使用模型文件.obj格式。

在World Machine中,我们可以直接导出.obj文件格式,方式如下: