转载请注明出处:
文章目录
一、设计目的与适用环境
草大部分是做为地图装饰作用,与其他地形装饰物共用同一种系统,多数由物件系统或者地形刷编辑到场景中。由于性能原因,这种实现方式无法大面积覆盖地图(图1)。本文介绍的是草原效果(图2),目的是通过高密度的草地配合适当的“风”在视觉效果上营造“风吹麦浪”的效果,使草地更具整体感,并参与到游戏交互中。
草地装饰物
草原系统
场景中有供草原采样地形高度和疏密度的依据。
例如使用地形mesh组合采样高度,疏密度使用地表材质权重图的某些通道关系采样。
二、工作流程
三、技术点划分
- 地形高度、疏密度采样。
- 地形数据存储、加载。
- 草块随焦点移动。
- 草块刷新。
- 麦浪效果。
- 草地生长过渡。
- 砍草(交互事例)。
- uv动画。
四、技术点实现
地形高度、疏密度采样
草原的覆盖区域由地表材质的权重图通道决定,权重比例参数用来调整草地在不同地表材质上的疏密度。虽然非必须使用权重图,但是需要有草地疏密度采样的依据。地形高度采样选取地形mesh即可。(如下图)
每个采样点记录地形高度与密度值,并且根据地块大小将整体数据按地块划分,基准点使用地形的bounds.min方便后边草块刷新时抓取数据时的索引定位。
密度值计算:
Color col = ReliefMap.GetPixel(Mathf.RoundToInt(hit.textureCoord.x * ReliefMap.width)
, Mathf.RoundToInt(hit.textureCoord.y * ReliefMap.height));
Density = (byte)(DENSITY_LEVEL *