一. 合并的方法
- 通过地形块之间夹角来合并块,这是基础
- 通过特殊范围(例如海域)判断来加大夹角来使合并更容易
- 通过遮挡关系加大夹角使合并更容易
二. 按地形的夹角合并
- 方法步骤:
a.使用四叉树, 从最大的开始,每次等分四格,
b.子格重复四格等分,直到分出的子格大小小于等于预设的宽度
c.从最小子格开始, 求出四个子格的法线, 计算他们的之间夹角, 小于M值后, 两两之间合并
d.往上一级处理, 找出合并的子格, 重复上面的步骤合并子格, 直到最大的格子 - 该方法, 对于比较平的地形上, 效果很好, 基本在减少50%的面数
- 效果见如下, 把网格从4万多面降至不足2万
合并前
合并后
三. 特殊范围的判断
- 这里取海面为特殊范围, 方法步骤
a.判断最小格子里四个顶点最处于海平面下
b.往上一级, 四个子格都在海面时, 该格标记为在海面下
c.重复上一步骤到最大的格子
d.在判断合并时, 在海平面下的格子会加大M的值,使子格子更容易合并
2.该对于在海面下的减面效果很显, 对野图减面效果也很好,因为有大面积在水下的地形
3.例如以下,直接把3万多的面降到只有几百面
合并前
合并后
四. 遮挡判断
- 步骤:
a.先生成地形的实体Mesh
b.收集与地形包围盒相交的物件
c.创建RenderTarget, 清除为黑色
d.绘制地形Mesh的深度
e.绘制相关物件,但要大于地形像素深度的才绘制,且填充白色
f.把绘制结果保存到一张贴图上
结果例如:
g.生成最小格子时, 读取这张贴图, 计算这格子四个顶点与贴图的映射, 如果都是白色,标记为被遮挡
h.到上一级格子,如果所有格子,都被标记遮挡, 则这格也算遮挡
i.重复步骤直到最大的格子
j.在判断合并时,如果该格子是被遮挡的,使用更大的判断夹角,以使格子更容易合并
- 该方法对于地形有很多物件的情况下,减面明显, 对于凹凸地形也有一定帮忙
- 例如以下,可以使用面数从6万降至4万
使用前
使用遮挡判断后:
五. Q&A
- 当前使用静态网格对于手机还是有一定的性能提升
- 静态网格的使用,对于物理系统也算友好
- 不直接使用减面工具,可以保持顶点的规则性,有利于物理与渲染的贴合性.
- 但静态网格生成依然有一定精度问题, 而且面数依然居高不下.