[sig10]CryENGINE 3: reaching the speed of light

本文深入探讨了CryEngine3在SIGGRAPH 2010中展示的高级实时渲染技术,包括纹理压缩改进、遮挡剔除、延迟渲染管线、光照模型等,并分析了其对游戏画质提升的具体贡献。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://advances.realtimerendering.com/s2010/Kaplanyan-CryEngine3(SIGGRAPH%202010%20Advanced%20RealTime%20Rendering%20Course).pdf

siggraph10的paper。

总体看下来,crytek在处理很多我们还没发掘到的问题,看着有种无力感。

另外感觉crytek在逐渐从engineer升级到scientist,说是大师级也不为过。

 


 texture compress improvement

 看着就比较烦,

  • 一顿搞---做的时候用16bit的texture,然后histogram normalize什么的,然后出来的效果得放大了才能看出些许优势。
  • srgb space的texture

normalmap用3dc格式压缩---大家都这么干。

但是crytek又要改进算法,还是在很少的情况(很近很精细)下才会有不同可以看出来。

在看一些类似车的表面的时候,平滑中带着些许糙面的情况,16bit的normal优势很大。 


 occlusion culling

console上是把上一帧的zbuffer downsample几个mipmap,然后用hi-z的算法在cpu端针对obj的aabb做culling----省了大量的cpu和gpu的计算。

pc上是使用比较传统的手工occluder,因为cpu-gpu带宽太低,没法搞zbuffer的传输。


 ssao

轻描淡写的一页,里面充满了名词,好几个不懂

  • encode depth into 2 16bit channel
  • quater buffer
  • bilateral blur fetch----囧
  • VolumetricObscurrance with 4! samples----囧
  • reprojection 

最后是720p情况下:360 1.1ms, ps3 1.3ms,orz!


 deferred pipeline

 lighting model:

• Indirectlighting
– Ambientterm
– Taggedambient areas
– Localcubemaps
– Localdeferred lights
– DiffuseIndirect Lighting from LPVs
– SSAO
• Directlighting
– Alldirect light sources, with and without shadows
使用的是light prepass, format:
  • 24bit depth, 8bit stencil----各种mask信息的存储
  • 24bit normal, 8bit glossness

 normal

这一块觉得巨给力。

用24bit存normalized normal会精度很差:

其实24bit真的已经很多了,可以存储相当大的信息量,足够了。

之所以精度不够根本原因是我们存的是normalized normal,这样一来,只用了%1.73的理论存储能力。

crytek给了算法利用到了%98.2,因此也获得了非常高的精度:

算法和代码文中都给了,大致思路就是根据normal的方向取一个最接近的方向来存(因为最终存起来的是离散的定点数),存的这个不是normalized的。

然后在lighting的时候只要再normalize一下就可以了。

的确相当巧妙,这种高效利用存储的空间的思想真是太太太给力了。


 后面一部分将phong brdf,这个目前的lighting model和这个在玩家看起来没有明显差距。

说实话关于这里,halo3在社区里画面质量和gears of war相提并论真是让我很不爽,甚至说gears更好。

halo3在理论上明显高出一截的。

需要硬件继续发展,到了更具区别能力的shading model的时候才行了。


hdr

力求在同样带宽上实现hdr效果,ps3上rgbm,360上用r11g11b10的格式。

最后tonemapping的时候有exponential tone mapping和film tone mapping,两者各有千秋吧。


clip volume

不用shadow的话,lighting容易出现bleeding的情况,解决办法是放置一个clip volume用stencil mask来解决。


anti aliasing

crytek上来说msaa和mlaa都没法解决画面在变化时候的闪烁问题。

尤其是在很细的地方,栏杆,草这些东西。

也就是说关注点已经不是静态画面,而是动态时候的画质问题。

这个我稍微抱有怀疑态度,找了些mlaa的video,觉得还是没有太大问题:

http://www.desivideonetwork.com/view/tji5w7378/incredible-killzone-3-mlaa-incorporated-gameplay-and-graphics-best-looking-game-ever-made/

还有战神的一些video。

 

crytek的解决方案是继续用reverse projection,记录变化的地方,然后对这些地方blur,来降低camera移动时候造成的flicker。

 

静态画面上是edge aa.


最后看credit:

•VaclavKyba from R&D for implementation oftemporal AA

• CarstenDachsbacher for suggestions on the talk
• HolgerGruen for invaluable help on effects
• IvanNevraev and David Cook for consulting on Xbox 360 GPU
• YuryUralsky and Miguel Sainz for consulting
• PhilScott, Sebastien Domine, Kumar Iyer and the whole Parallel Nsight team
• TiagoSousa, Sergey Sokov and the whole Crytek R&D department
这就是大师级crytek和其他工作室根本区别所在。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值