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,生成高度图 -- 生成法线贴图 -- 生成树的密度图--生成树的真正位置信息--渲染场景

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246321.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

巨控 自建服务器,GRM云服务器的Web数据接口.PDF

GRM云服务器的Web数据接口.PDFGRM 云服务器的 Web 数据接口版本2.092019-06-281目录一.系统简介31.客户端的操作原理32.客户端登录的推荐作法43.历史数据的容量档次5二.客户端操作命令说明61.[登录] 62.[读变量] 63.[重复上次读] 74.[写变量] 75.[枚举变…

GPU Gems1 - 1 用物理模型进行高效的水模拟(Effective Water Simulation from Physical Models)

该读书笔记大多内容参照了大神浅墨的该篇文章https://zhuanlan.zhihu.com/p/35974789 本章介绍了一种在GPU中模拟和渲染大的水体的系统。它把基本网格的集合波动于动态发现贴图的生成结合起来。 1.1 目标和范围 这章里,我们将由计算简单正弦函数之和开始&#xf…

GPU Gems1 - 2 水刻蚀的渲染

2.1 引言 光线从弯曲的表面反射或折射,因此只聚焦在受光面上的某些区域,于是就产生了刻蚀现象。本文从美学角度出发,不以纯物理的方式计算,使其很容易在大多数图形硬件上实现,效果又十分逼真。 2.2 刻蚀的计算 如果想…

邮箱服务器ip地址白名单,申请SSL证书时如何设置IP地址白名单和邮箱白名单

8月3日消息 在申请SSL证书时,由于您的邮箱可能默认设置或自定义设置了拦截国外邮件,可能会导致您接收不到CA的邮件,给验证、收取证书带来了不便;如果服务器,防火墙也设置了拦截操作,那么即使您按CA要求完成…

求生2本地服务器怎么修改参数,《求生之路2》服务器指令及难度参数设置(难度篇)...

本文整理的都是一些有关难度的服务器参数命令,许多插件都会用到这些相关的指令实现一些功能,比如是购物插件中技能的实现,彩色坦克插件掉宝配置的实现等.安装了插件这些指令可以直接使用,可以根据自己对于难度的需要作一些调整,关于作弊.榴弹炮参数的一些指令,没有收录.服务器命…

GPU Gems1 - 3 Dawn Demo中的皮肤渲染(Skin in the Dawn Demo)

该篇文章参照浅墨的这篇文章:https://zhuanlan.zhihu.com/p/35974789 Dawn是由NVIDIA创建的,用来介绍GeForce FX产品线的演示程序,它说明如何使用可编程的着色技术创建出逼真的人类角色。 最初的Dawn Demo由NVIDIA于2002年发布,…

jest测试ajax,ajax – 如何使用Jest来测试React呈现的异步数据?

我正在使用React for render和Jest / Jasmine进行测试.我使用旧的Jest / Jasmine等待测试并运行,但现在这些已经在Jasmine 2中消失了,我不知道如何用新的asyncs替换.在我的代码中,React呈现了一个关于用户的小页面.该页面有一个AJAX调用来获取用户帖子.我想测试一下用户的帖子回…

GPU Gems1 - 5 改良的Perlin噪声的实现

Perlin 噪声 KenPerlin(1985a,2002)KenPerlin(1985a,2002) 定义的噪声函数是最常用的噪声函数,称为 Perlin 噪声。PerlinPerlin 噪声在全部 (x,y,z)(x,y,z) 整形顶点处的参数值都为 00,变化源自各顶点间的梯度向量,然后再进行平滑插值。 计算…

GPU Gems1 - 7 无数波动草叶的渲染

本文部分参照该文章https://zhuanlan.zhihu.com/p/35974789 1.引言 本章介绍了一种灵活的,广泛应用的草模拟。该方案渲染的草不仅生长得自然,也能够逼真地在风中舞动,而且性能很高。 2.概述 首先,需要意识到,对单个…

2003文件服务器迁移2016,服务器2016设置文件共享

服务器2016设置文件共享 内容精选换一换为了保证使用生成的镜像创建的新云服务器可以实现一键式重置密码功能,建议您安装密码重置插件CloudResetPwdAgent,可以应用一键式重置密码功能,给云服务器设置新密码。下载一键式重置密码插件CloudRese…

GPU Gems1 - 8 衍射的模拟

1.什么是衍射 小尺度的表面细节引起反射波彼此干扰,这个现象就是衍射。首先,计算机绘图的大多数表面反射模型都忽略自然光的波动效果。当表面的细节比光的波长(约1um)大许多时,不存在问题。但对于小尺寸的细节&#x…

GPU Gems1 - 9 有效的阴影体渲染

这章全面讲述了用于实时阴影渲染中常见两种流派之一的阴影体(Shadow Volumes)技术,又称模板阴影(Stencil Shadows)技术,重点是得到正确的角度的情形,减少几何图形和填充率的消耗。 简单谈谈阴影…

GPU Gems1 - 10 电影级的光照

本章中介绍了一个的简化的uberlight(可理解为“全能光照”)实现,此光照shader根据Ronen Barzel(1997,1999)提出的照明模型编写而成。而该模型的超集已由Pixar动画开发,并应用于《玩具总动员》、《怪物公司》、《海底总动员》等一系…

GPU Gems1 - 11 阴影贴图反走样

这章介绍了如何通过邻近百分比过滤方法(Percentage-Closer Filtering , PCF)有效减少阴影贴图的反走样,并描述了如何实现一个简化版本,并对PCF方法进行了一定改进。关于阴影贴图和PCF技术的一些链接 https://pubweb.eng.utah.edu…

GPU Gems1 - 12 全方位的阴影映射

在这章中,把阴影贴图的思路扩展到正确处理全方位的(点)光源中,其中包括了实现细节,也涉及到基本硬件能力不足时的低效运行策略。 首先,这篇文章也谈到了在实时计算机图形学中产生可见阴影的两个流行方法是…

GPU Gems1 - 13 使用遮挡区间映射产生模糊的阴影(Generating Soft Shadows Using Occlusion Interval Maps)

这章介绍了一种渲染软阴影的技术,称为遮挡区间映射(Occlusion Interval Maps),能够正确地在静态场景中渲染出光源沿着预定路径移动时产生的模糊阴影。之所以叫遮挡区间映射,是因为此算法使用纹理贴图来存储这种光源可见…

粗糙表面的微表面模型——Physically Based Material

关于文章 Microfacet Models for Refraction through Rough Sufaces的一点笔记,欢迎指正。 BSDF BSDF(Bidirectional Sacttering Distribution Function) 描述了光如何在物体表面散射。如果仅仅限制反射或者透射,BSDF经常被称作BRDF或者BTDF,然而BSDF将…

GPU Gems1 - 14 透视阴影贴图(Perspective Shadow Maps: Care and Feeding)

开篇先说,这文章好难懂啊,到现在也没完全弄明白,有大佬的话欢迎指点。这篇大体意思是对Perspective Shadow Maps进行部分优化。GEMS这书这点是真挺蛋疼,很多文章都是对某项技术的优化,那先介绍介绍原来技术嘛&#xff…

C++——lambda表达式

介绍 lambda表达式是一种局部类类型&#xff0c;它含有一个构造函数&#xff0c;和一个const成员函数operator()()。 lambda表达式除了能做参数外&#xff0c;还能用于初始化一个声明为auto或者std::function<R(LA)>的变量。R是lambda的返回类型&#xff0c;LA是它的类…

GPU Gems1 - 15 逐像素光照的可见性管理

这章讲到了可见性在逐像素渲染光照场景中的作用&#xff0c;也考虑如何使用可见性减少必须渲染的批次数量&#xff0c;从而改善性能。 假设一个非常简单的场景&#xff0c;一个房间&#xff0c;因为房间的不同部位是不同的材质&#xff0c;所以将其分为8个batch&#xff0c;另…