建设银行网站app,一个大佬做的本子网站,wordpress cms模版,114啦网址导航官网GPU Pro2 - 3.Procedural Content Generation on the GPU 这篇文章着重介绍了基于Brownian 噪声和高度图在GPU中实时生成和渲染无限大地形系统。
Procedural content generation (PCG)程序化生成在许多游戏中已经有广泛应用#xff0c;从简单的随机物体摆放#xff0c;到全…GPU Pro2 - 3.Procedural Content Generation on the GPU 这篇文章着重介绍了基于Brownian 噪声和高度图在GPU中实时生成和渲染无限大地形系统。
Procedural content generation (PCG)程序化生成在许多游戏中已经有广泛应用从简单的随机物体摆放到全自动生成武器建筑或者AI等等。PCG在计算机图形学中最基本的应用之一就是基于高度图的地形生成。
现如今已经有许多不同的实时地形生成技术大多数是利用过程化生成噪音去创建高度图。目前最新引人的技术是模拟1/f 噪音called “pink noise”)因为这种噪音在自然中普遍存在而且便于在现代gpu中实现并且有很好的表现和速度。在这篇文章里我们决定使用近似的不规则Brownian motionfBM布朗运动算法。
该方案使用了光谱混合spectral synthesis我也不知道咋翻译计算了多层级噪音最基础的噪音生成算法是Perlin噪音。尽管柏林噪音的实现已经完全依赖于GPU但是由于其他的过程化生成算法该算法依然不够快因此我们采用了一个可以根据自身需要而进行配置的系统。
将地形分成多个正方形nodenode的数量必须是高度图大小的出书以避免生成后出现错误将摄像机初始置于最中间每个临近最中心node的四个node上下左右拥有边界碰撞体当摄像机和其中任意一个发生碰撞时新的高度图就会生成。基于摄像机的碰撞方向和碰撞体的位置我们可以得到新的噪音UV坐标。这个操作和高度图生成算法保证了地形将是连续且无尽的。
比如下图原先在中心向左移动后于左侧node发生碰撞根据碰撞位置重新计算出与左侧node相邻的新的node信息。 该算法也利用了LOD系统因为我们知道所有node的相对位置所以可以提前计算出index buffer中的相关信息。中间的node最接近摄像机所以应该有最低的LOD等级也就是更多的三角形面片数量展示更多细节。
另外我们还模拟了侵蚀效果最简单的侵蚀效果类型是thermal erosion它是由于温度变化导致的。这个侵蚀算法通过迭代利用附近点的高度计算出地形点的高度该算法的实现用了两个pass第一个pass计算出材质中需要移动到附近点的顶点数量第二个pass中通过第一个pass提供的信息计算出实际效果。
地形中的树植被系统的实现分两个步骤第一步生成树的密度图它定义了树的布置信息。下一步根据该信息实际渲染树的mehs。地形中的高度和坡度信息对生成树是最常用的参数这两个信息可以由高度图和法线图轻松的得到。通过这两个信息以及一些我们自定义的参数我们就可以生成地形中树的密度图。
有了密度图之后我们不能直接将他用于在地形中生成树的植被因为密度图可能对应非常巨大的世界空间如果直接每个texel生成一棵树那结果有可能植被会非常稀疏。因此我们为每个类型的树设置了半径这个参数代表这颗树会占多大地儿。我们的解决方法是将当前的patch根据这个patch中最大的那棵树的半径划分成gird通过从密度图中取出的值以及占地空间两者一起决定出如何渲染树。通过摄像机的裁剪和LOD等技术再加入Rayleigh-Mie atmospheric scattering我们就完成了地形系统的渲染。
概况下整个流程
碰撞触发需要生成新一部分地形 -- 生成噪音 -- 计算erosion生成高度图 -- 生成法线贴图 -- 生成树的密度图--生成树的真正位置信息--渲染场景