室外地形的铺草系统



  茂密的草地一直是3D游戏难以表现的地貌特征,其原因不外乎渲染草地需要大量的多边形和很高的像素填充率。但游戏界一直没有放弃对渲染草地的渴望,大概两年前,一些游戏的宣传文字中渐渐把茂密的草地作为自己的特色来宣传。《奇迹》这款固定视角游戏中随风摇曳的茂密草地给很多人留下了深刻印象。然而时至今日,草地渲染依然不是一件轻松的事情,象魔兽世界这样的大作也只是把草作为一种点缀,稀稀拉拉地放在地形上。

  终于我也抵不住草地的诱惑,在地形编辑器中加入了铺草系统。系统实现的效果比较令人满意,总结起来有下面几个特点:
  1.美术不需要提供草的模型,只要提供左右对称的草的贴图,系统自动生成十字交叉的面片。
  2.通过VertexShader控制每棵草的上面四个顶点按一定规律做摆动,模拟微风吹动的效果。
  3.从每棵草所在位置的地面上取得地面光照亮度信息作为这棵草的基本亮度,将上面四个顶点随机调亮一个幅度,将下面四个顶点随机调暗一个幅度,模拟草的光照不均匀的效果。
  4.绘制通过视锥剪裁和以前提到的PVS信息剔除不可见Patch,将可见Patch上的草按种类排序更新到一个动态顶点Buffer。每种草通过一个DrawIndexedPrimitive调用全部绘制,总调用次数不会超过草的种类。
  5.采用特殊的记录方式,一棵草在存盘文件中只占四个字节
  6.铺草系统全面融合到现有的Undo/Redo架构中去

  通过视锥剪裁和PVS剔除,加上很少的DIP调用,铺草系统达到了很好的绘制效率,今后的地形设计应该可以更加自由的表现草地效果,实现更丰富的地貌特征,带来更有趣的游戏体验。

原文地址:https://www.cnblogs.com/cproom/p/480797.html