GPU Pro2 - 3.Procedural Content Generation on the GPU

GPU Pro2  - 3.Procedural Content Generation on the GPU

 

这篇文章着重介绍了基于Brownian 噪声和高度图在GPU中实时生成和渲染无限大地形系统。

Procedural content generation (PCG)程序化生成在许多游戏中已经有广泛应用,从简单的随机物体摆放,到全自动生成武器,建筑或者AI等等。PCG在计算机图形学中最基本的应用之一就是基于高度图的地形生成。

现如今已经有许多不同的实时地形生成技术,大多数是利用过程化生成噪音去创建高度图。目前最新引人的技术是模拟1/f 噪音(called “pink noise”),因为这种噪音在自然中普遍存在,而且便于在现代gpu中实现,并且有很好的表现和速度。在这篇文章里,我们决定使用近似的不规则Brownian motion(fBM)(布朗运动)算法。

该方案使用了光谱混合(spectral synthesis,我也不知道咋翻译),计算了多层级噪音,最基础的噪音生成算法是Perlin噪音。尽管柏林噪音的实现已经完全依赖于GPU,但是由于其他的过程化生成算法,该算法依然不够快,因此我们采用了一个可以根据自身需要而进行配置的系统。

将地形分成多个正方形node(node的数量必须是高度图大小的出书,以避免生成后出现错误),将摄像机初始置于最中间,每个临近最中心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,生成高度图 -- 生成法线贴图 -- 生成树的密度图--生成树的真正位置信息--渲染场景

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Get to know techniques and approaches to procedurally generate game content in C++ using Simple and Fast Multimedia Library About This Book This book contains a bespoke Simple and Fast Multimedia Library (SFML) game engine with complete online documentation Through this book, you'll create games that are non-predictable and dynamic and have a high replayability factor Get a breakdown of the key techniques and approaches applied to a real game. Who This Book Is For If you are a game developer who is familiar with C++ and is looking to create bigger and more dynamic games, then this book is for you. The book assumes some prior experience with C++, but any intermediate concepts are clarified in detail. No prior experience with SFML is required. What You Will Learn Discover the systems and ideology that lie at the heart of procedural systems Use Random number generation (RNG) with C++ data types to create random but controlled results Build levels procedurally with randomly located items and events Create dynamic game objects at runtime Construct games using a component-based approach Assemble non-predictable game events and scenarios Operate procedural generation to create dynamic content fast and easily Generate game environments for endless replayability Table of Contents Chapter 1. An Introduction to Procedural Generation Chapter 2. Project Setup and Breakdown Chapter 3. Using RNG with C++ Data Types Chapter 4. Procedurally Populating Game Environments Chapter 5. Creating Unique and Randomized Game Objects Chapter 6. Procedurally Generating Art Chapter 7. Procedurally Modifying Audio Chapter 8. Procedural Behavior and Mechanics Chapter 9. Procedural Dungeon Generation Chapter 10. Component-Based Architecture Chapter 11. Epilogue
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值