育碧作为一个年货大厂,在PCG这方面肯定有很深的积累,在GDC2018的这次分享中,其详细的介绍了地形在纯GPU管线上的实现方式,使得最终能够得到一个拥有大片悬崖峭壁的真实地形。

本文是笔者看完FarCry5的分享后写的个人理解,初次学习GPU管线,难免有理解错误的地方,希望大佬指正

本次分享依次介绍了以下内容

1.GPU Pipeline实现

2.地形渲染

3.悬崖渲染

4.高度图之外的技术

5.基于屏幕空间的渲染

6.其他地形相关

GPU Pipeline实现

首先说一下单个平面的实现

先渲染一个毫无起伏的纯平面Mesh

在顶点着色器中,根据InstanceID和vertexId可以得到在高度图上的对应位置,依据此位置去对顶点进行偏移

配合贴图可得到以上效果

之后介绍了如何将四叉树的分化逻辑移到GPU,四叉树的CPU实现已经介绍过了,这里不再细讲

https://zhuanlan.zhihu.com/p/88646346

按2km*2km对地形划分为多个树结构

分化到最大的地形块边长为64米,被称为一个Sector,总共有160*160个sector,也就是如果所有树分化到最大,会存在160*160个lod最大的地形块

正常游戏中会加载大概500个地形块(包含任意lod等级)

正常游戏中,地形一共存在6个lod等级

每一个树结构都对应一个mipmap,mipmap的层级和lod层级相同

每一个Node的信息都保存在对应Mip等级mipmap的一个像素中

像素值是一个16位的Index,根据这个index,可以去Buffer,也就是一个数组中去拿到节点的详细信息,包括高度范围,lod信息,贴图位置信息

如果这个节点是不存在的(地形不是一个标准正方形),则会把一个特殊值赋给index

四叉树是一个递归的结构,但递归难以在GPU上实现,所以这里采用该算法的循环形式

一共存在3个存储节点信息的buffer

首先把根节点放入bufferA,遍历其中每个节点

如果不可分化,则将该节点加入FinalBuffer

如果可分化,则将子节点放入bufferB

当根节点分化完毕,会互换AB两个buffer的作用,清空BufferA,然后遍历bufferB,将子节点加入bufferA。直到处理完所有lod

同时也会将每个lod的节点有多少记录下来

这里还说了一个优化买游戏账号平台,但笔者没用过computershader,所以也没看懂~

同时会生成一个LODMap,每个Sector都会被赋予一个LOD值,用于解决裂缝问题。

LOD的值能够根据FinalBuffer轻松获取

每一个Node会被分为64个Patch,Patch即可视为一个具体的vertex

为16*16的Mesh,经过一系列cull,最终把可视的Patch放到一个RenderLst.

遮挡剔除采用的Hiz,主机上会采用纯Gpu实现,Hiz的算法知乎上有很多文章,之后有时间我也会按自己的理解写一下。

而PC则会把CPU上产生的深度图上传到GPU(这里我的理解是cpu上有剔除逻辑,会把中间生成的深度图传至gpu进一步剔除,但是ppt没讲为什么这么搞)

On console platforms we use a GPU best occluder pass to prime the depth buffer and extracttheHTile.

On PC we have a software rasterized occlusion buffer that we already use for CPU visibility which we upload to atexture.

背面剔除,针对每一个Patch,会离线为其生成一个圆锥体,这个圆锥体Patch内所有顶点法线组成的最小圆锥。之后会把信息存到一个Tex中。

运行时直接如上计算可以判断是否需要剔除

每一个patch都会存储它周围节点的lod信息,如上图,当前节点lod为3,通过周围节点的lod可以得到一个值。根据此值对顶点进行干预以解决裂缝问题

地洞渲染的思路是地形上开两个洞,中间的管道采用单独的mesh渲染

这里用到了一个小技巧,如果是洞穴口,则让坐标除0得到NaN,如果一个顶点坐标为NaN,则用到此顶点的面片都会被discard掉。

《孤岛惊魂5》游戏中的地形渲染技术-网格生成相关推荐

  1. 游戏中的角色渲染技术之皮肤篇

    原文链接https://blog.uwa4d.com/archives/Usparkle_Skin.html 这是侑虎科技第253篇原创文章,感谢作者洛城供稿,欢迎转发分享,未经作者授权请勿转载.当然 ...

  2. 小程序[渲染层网络层错误] failed to load image_游戏中水的渲染技术

    水的渲染一直是图形学需要解决的问题,本篇博客主要介绍用傅里叶变换算法实现的水反射,也是一种假反射效果,目的是优化效率.实现的效果如下图所示: 使用傅里叶系数来表示地形高度的假反射效果,在我们开发的游戏 ...

  3. Games104笔记---LE6--渲染系统3:游戏中的地形/天空/云渲染

    目录 地形几何 高度图: 自适应网格细分 几个原则: 网格细分的方法: 实时变形的地形: 体素化: Marching Cubes算法: 地形着色: 存储内容: 地形纹理采样: 正确的过渡算法: 凹凸/ ...

  4. 游戏中的实时光线追踪技术与技巧

    提到游戏使用的实时渲染,很多人都会觉得光栅化渲染是唯一的方法,而想要在游戏中使用实时的光线追踪,似乎还是遥远的梦想. 虽然整体的光线追踪实时渲染架构以及相关硬件还在试验阶段,但从2016GDC的技术展 ...

  5. 游戏中的抗锯齿技术Anti-Alasing提炼总结

    游戏中的抗锯齿技术Anti-Alasing提炼总结 锯齿(走样,失真)产生的根本原因 图形学的根本过程是一个图形转化成图像的过程,该过程是一个连续信号经过采样转化成离散信号(显示设备的像素是离散的)的 ...

  6. 游戏中应用强化学习技术,目的就是要打败人类玩家?

    来源:AI前线 作者:凌敏 采访嘉宾:黄鸿波 2016 年,DeepMind 公司开发的 AlphaGo 4:1 大胜韩国著名棋手李世石,成为第一个战胜围棋世界冠军的人工智能机器人,一时风头无两.Al ...

  7. 网易游戏人工智能实验室分享:游戏中应用的AI技术

    在2019网易游戏开发者峰会上,网易游戏人工智能实验室技术总监Weldon Zhang,分享了人工智能实验室在游戏AI上的探索和成果,对游戏中应用的AI技术进行了盘点. 总体来看,AI技术可以在游戏中 ...

  8. LOD地形渲染技术概述

    参考文章 http://blog.sina.com.cn/s/blog_5e3213f30100zxet.html LOD技术简述 http://blog.sina.com.cn/s/blog_458 ...

  9. 游戏中的影子制作技术

    本文版权归 17173 所有,如有转载请按如下方式显示标明原文出处,以示尊重! 原创:17173 原文:http://job.17173.com/content/2009-07-30/20090730 ...

最新文章

  1. SQL repeat()函数
  2. seq2seq和Transformer
  3. Cygwin,Nutch安装配置,检验是否正确(对网友守望者博客的修改---在此感谢守望者)2
  4. SQL Server遍历表中记录的2种方法
  5. [Java基础]Lambda表达式练习
  6. [js] axios拦截器原理是什么?
  7. 推荐算法--利用用户标签数据(04)
  8. layui时间日期控件使用
  9. python处理json数据 乱码报错_python json.loads json.dumps(ensure_ascii = False) 汉字乱码问题解决...
  10. 蓝牙扫描_无线扫描枪常见的传输模式及其区别
  11. 解决mysql锁表终极方法
  12. python爬虫基本原理_Python爬虫【一】爬虫的基本原理
  13. openstack: No valid host was found. There are not enough hosts available
  14. linux grep查找指定文件或目录下文件的字符
  15. linux系统小米球(ngrok)实现内网穿透
  16. Firefox Pale Moon此连接是不受信任的、无效的安全证书解决办法
  17. 【R语言】常用基本函数
  18. 刘雨昕成为Swisse斯维诗胶原蛋白系列代言人
  19. curl -u “username“ https://api.github.com 转换http请求
  20. 【机器学习】信息论基础(联合熵、条件熵、交叉熵、KL散度等)+ Python代码实现

热门文章

  1. 计算机二级通app打不开,计算机二级通app
  2. java文本区显示在右边_怎么让文本区从右边开始显示文本
  3. 通过doi可以检索到文献_怎么查看中外文献的期号和卷号?
  4. matlab根据成绩划分等级_学生成绩分等级:ABCD,分优秀 良好合格 不及格,一组公式即可解决...
  5. 多线程相关-ThreadPoolExecutor
  6. 适配移动端的文字超出隐藏并添加省略号
  7. [Linux] Vmware 15安装CentOs后显示网络不可用
  8. 使用XmlReader读Xml
  9. filebeat相关registry文件内容解析
  10. 32位汇编第七讲,混合编程,内联汇编