[gdc2012]战地3的地形系统

原创 2012年03月24日 18:30:53

link:

http://publications.dice.se/attachments/GDC12_Terrain_in_Battlefield3.pptx

<Terrain in Battlefield 3: A modern, complete and scalable system>

两个我比较喜欢的图:



说是地形系统,其实说环境系统更合适一些,这里提到地形包括这样一些:

  • 基于高度图的地形,可破坏
  • 多层混合的材质
  • 路面等各种decal
  • decoration:植被,小石头等
  • 水(河,湖。。。)
地形涉及到的资源:
  • 高度图
  • 混合材质用的mask贴图
  • 一个color map
  • 有物理信息的材质--可模拟声音等
  • 用于记录破坏信息的depth mask
  • 由于记录间接反射光的albedo map
Scalability

dice使用四叉树做lod的管理,这里lod是一个比较广泛的概念,包括:
  • terrain本身的资源:高度图,mask等
  • decoration
  • decal
  • water
这些的lod管理统一在一个quad tree系统中来做,进而控制streaming in/out,所以尽管地形是非常大的,但是实际在系统中的资源是比较恒定的。
这个也是主要针对dice这种地形信息包含的非常多而且复杂(lod层级多,甚至没有lod层级的概念,都是smooth的:比如decoration)的情况,一般项目可能只有2级,那么也不用这么复杂了,也是具体问题具体分析了。

编辑器
dice这里做的比较好的是对于“导入”支持的比较充分,可以分块的进行信息的导入,这个对于现代地形系统很关键。
因为随着技术的进步,刷刷高度图远不能满足需求,需要用更专业的软件来处理,比如dice提到的world machine和geo control,这些达到的程度对于engine开发者来说要做到就太难了,所以导入的支持是很重要的。

效率
ps3上给出的数据:
  • gbuffer:单纯地形是2.5--3, 加上各种细节是2.5--7
  • decoration:1--4ms
  • virtual texture composite:0.2--0.5
virtual texture
这个在本博客里面也提了n遍了,就是为了解决多层混合(splatting)的效率问题。
dice这上面的一些细节:
  • 1米32个sample
  • 使用使用atlas来进行贴图合并,每一个子块是256x256的tile,为了避免filter的问题,还有2个pixel的border
  • 用于virtual texture的贴图大小是4kx2k
  • virtual texture是2个dxt5,normal分别放在压缩损失少的alpha&g通道里
然后使用了indirection texture来存储指向atlas 贴图那一个部分的信息,格式rgba8,分别放了:
  • index x&y
  • scale:如果一个tile里面包含了多个atlas的贴图tile,需要scale来处理
  • lod的fade factor
这里的indirection texture是做了clipmap,因为不做任何atlas的处理的话,一个真正的virtual texture会达到1Mx1M=1T的texel量,然后256一个tile,indirection texture也会到4kx4k,这个也太大了。
所以使用了clipmap处理indirection texture,size是64x64,个数是6,每一个还有mip chain.

具体用那一个clipmap的level是cpu端算出来的,而且里面贴图需要按照world space position来分布,这个对于地形完全没问题。

tile是在gpu上混合并且压缩的(ps3上spu参与压缩),这里两大额外消耗:
  • 用于混合(compositing)的额外的render target的内存消耗
  • 混合的时间消耗

Streaming:
首先dice列了一些地形上一个tile的数据:
  • height field:133x133x2byte
  • mask: 66x66x1byte
  • color map, 264x264x0.5byte
fixed size tile pool:
  • height map:2kx2k
  • mask:2kx1k
  • color:2kx2k
disk seek:
  • 把资源根据地形的位置分布放到比较近的地方,可以节省%20--%50的seek时间

全局优先级(global priority):
使用优先级对各种资源进行管理,按照顺序来进行streaming。
优先级的制定也是比较复杂,来源颇多:
  • culling信息
  • speed
  • update
mesh
pc和360上是vertex texture sampling
ps3上貌似是render to vertex buffer

小结:
几个地方比较喜欢:
  • 把地形的概念进一步扩展,进而做一个更统一的管理(渲染到streaming),设计上也更紧凑简洁
  • virtual texture很棒



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

GDC战地3图片之次表面散射半透明印射

以下图片来自由EA蒙特利尔图像程序员 Colin Barré-Brisebois 带来的《为快速,低消耗,效果显著的次表面散射效果提供近似半透明印射法》(Approximating Transluce...

浅谈《战地3》光照反射/曲面细分地形/SRAA反锯齿

EA DICE,全称EA Digital Illusions Creative Entertainment AB,也称DICE,是美国艺电旗下的一个游戏制作工作室,总部位于瑞典斯德哥尔摩。EA DIC...

蓝鸥Unity开发教程之课时3 Terrain地形系统

蓝鸥Unity开发教程之课时3 Terrain地形系统

GlassBox GDC 2012 Slides

  • 2012年04月02日 03:12
  • 3.98MB
  • 下载

GDC2012_ErinCatto

  • 2012年08月08日 22:44
  • 3.67MB
  • 下载

Linux战地日记——查看文件系统块的大小

在文件系统级别定义的硬盘块就是OS space allocation block size。在windows中这个叫做簇,在其他操作系统中叫做block(块)。...

[gdc13]《孤岛危机3》渲染技术

http://crytek.com/download/Sousa_Tiago_Rendering_Technologies_of_Crysis3.movhttp://crytek.com/downlo...
  • ccanan
  • ccanan
  • 2013年04月27日 09:59
  • 4157

【Game】GDC2013:《暗黑3》游戏开发历程的自我反省

这是一篇来自日本媒体有关GDC2013开发者大会上 Jay Wilson 对于暗黑3开发历程的讲座。除了大会发言外,还有很多重要的游戏早期开发图片曝光。由于原文是日文,所以以下内容在翻译过程中可能存在...

[gdc12]《孤岛惊魂3》的全局光照技术

使用的全局光照技术 也就是会在场景里放置大量的probe,然后做预计算radiance transfer. 实时的时候,会首先对probe做lighting,然后lighting结果放入volume ...
  • ccanan
  • ccanan
  • 2016年11月01日 14:30
  • 3807
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[gdc2012]战地3的地形系统
举报原因:
原因补充:

(最多只允许输入30个字)