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

育碧作为一个年货大厂,在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掉。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: CTB-Tile是一款用于生成地形的软件工具,其最常用的功能就是生成地形terrain。 它可以将DEM(Digital Elevation Model,数字高程模型)图像转换成Unity游戏引擎所需的Terrain数据格式。这样游戏的开发人员就可以轻松地将这些地形数据用在游戏,创造出复杂的山峰、河流、海洋等自然地形。 CTB-Tile生成地形terrain有如下步骤: 首先,将DEM文件导入到CTB-Tile,并通过手动或自动设置CTB-Tile来调整地形数据。 然后,可以选择地形纹理和贴图进行美化。在此过程可以添加多个纹理层,并为每个层设置不同的高度和混合度,以创建更丰富多彩的地形纹理。 随后,设置光照和阴影效果,以使地形更具真实感。 最后,将生成好的地形terrain导出到Unity,并用于游戏的开发和制作。 总之,CTB-Tile生成地形terrain是一种方便快捷的方式,可以为游戏的环境创造出富有变化、贴近自然的地形景象,提高游戏的沉浸感和可玩性。 ### 回答2: ctb-tile是一个用于生成地形的工具,它可以根据提供的输入数据生成具有真实感的地形地貌。 ctb-tile的工作原理是通过分析海拔、坡度、土壤类型等数据来生成地形。它使用了一系列的算法和模型,包括噪声生成、插值和渲染等,来模拟地球上的地形特征。 使用ctb-tile生成地形的过程,首先需要准备一些输入数据。这些数据包括地形高度数据、地质数据、植被数据等。这些数据可以来自于测量结果、地理信息系统或者卫星遥感影像。 接下来,将这些输入数据导入到ctb-tile,并根据需要进行参数设置。可以调整的参数包括地形分辨率、插值方法、噪声生成方法等。 一旦参数设定完成,ctb-tile就会开始生成地形。它会根据输入的数据和参数设置,使用算法和模型来生成地形地貌。生成地形可以包括山脉、平原、河流、湖泊等。 最后,生成地形可以以高度图、色彩贴图等形式进行展示和导出。高度图可以用于量化地形特征,如测量坡度、海拔等。色彩贴图可以用于艺术设计、虚拟场景制作等。 总之,ctb-tile是一个用于生成地形的强大工具,它可以根据提供的输入数据和参数设置,生成具有真实感的地形地貌。它的应用范围广泛,可以用于地理信息系统、虚拟场景制作、游戏开发等领域。 ### 回答3: CTB-Tile是一个用于生成地形地图的工具。它是基于云存储技术的,可以利用卫星数据和地理信息系统(GIS)数据来生成地理地形。 CTB-Tile的原理是通过卫星数据和GIS数据,结合地理坐标系统和地形上的高程信息,生成地形地图。它可以将地球表面的地理信息转化为数字化的地形数据,包括海洋、陆地、山脉、江河、湖泊等。 CTB-Tile生成地形地图的过程包括以下几个步骤:首先,收集卫星数据和GIS数据。这些数据包括地形的高程信息、地物类别信息、坐标系统信息等。然后,使用算法对收集到的数据进行处理和分析,将地理信息转化为数字化的地形数据。最后,将生成地形数据进行可视化处理,生成地形地图。 CTB-Tile可以应用于各种领域,包括自然资源管理、城市规划、地理教育等。它可以为这些领域提供详细的地形地图,并帮助人们更好地了解地球表面的地理特征。 总结来说,CTB-Tile是一个用于生成地形地图的工具,利用卫星数据和GIS数据,结合地理坐标系统和地形上的高程信息,将地理信息转化为数字化的地形数据,并生成地形地图。它在自然资源管理、城市规划、地理教育等领域具有广泛的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值