概述:对于地形来说,无非是对地形中每个顶点的有效管理,而UV的控制也是为了控制顶点的y坐标。
位置计算:
1.需要的参数:
(1).TILE_EDGE_VTX_NUM:Tile每行顶点数,边数 = 顶点数-1
(2).tileSize:Tile的宽度
(3).viPosition:Tile相对于整个地形的位置
(4).WORLD_SCALE:整个地形放大的倍数
其中1和4是固定参数,可以调节4对地形进行缩放。2和3需要在CPU端计算获取,2是每一个环的Tile宽度相等,不同环之间成2的倍数关系。
2.过程:
(1).渲染的时候,以每个Tile块为单位进行Instance渲染,在渲染前计算出viPosition作为每个Tile块相对于整个地形的位置。
(2).对每个顶点计算
第一步:通过顶点的索引计算出顶点相对于Tile的位置
第二步:然后乘tileSize以及加viPosition,这个时候的结果是此顶点相对整个地形的位置
第三步:顶点乘WORLD_SCALE,这个时候其实是对整个地形的放大,得到一个真实的地形。
纹理计算:
一共有四张纹理,两张高度图,两张地形贴图纹理
1.高度计算:
需要的参数:
pos:顶点计算时,第二步的产物,此时的地形还没有放大。
Coarse_HUV_Repeat_Interval:粗糙高度图UV坐标的跨度,这个是控制纹理覆盖的面积的。
Detail_HUV_Repeat_Interval:同理这是细节高度图UV坐标的跨度,一般来说这个跨度应该比粗糙的小。
Coarse_Height_Scale:这个是控制获取到的高度的比例的,与粗糙高度图匹配
Detail_Height_Scale:同上,与细节高度纹理匹配