[sig12]几个AAA游戏中的阴影技术
![[sig12]几个AAA游戏中的影子技术](http://img.reader8.net/uploadfile/jiaocheng/201401101/3000/2014013015003711696.jpg)
http://www.dimension3.sk/downloads/valient12_shadows_in_games.pdf
killzone的开发公司Guerrilla的tech lead, michal valient带来,这个文章可以说是我看过的shadow的文章最特别的一篇,其中众星云集,包括:
god of war 3(奎爷一出谁与争锋,封面图片当然是奎爷的了)far cry 3killzone 3infamoustwo worldkillzone3是一个30fps的游戏,作者表示做60fps游戏的人都是”骑着迅猛龙长大的,和北极熊干架的大神“,这个深有同感,当为了零点几毫秒的优化而费劲脑筋的时候,有人以翻一倍的性能在跑,这tmd也太恐怖了。33ms是ps3上的一个数据,其中13ms:geometry10ms : post process10ms : lighting&shadowshadow发展到现在,在这一代,技术上已经比较稳定了,常规做法大家基本有了共识:cascaded shadow mappercentage close filtervariance shadow maps这个文章并不是一个革命性的带来什么新奇算法的,而是更加实用的,集中了几个AAA游戏的做法。
little big planet这波哥们最暴力了,他们把场景都voxel话,然后计算irradiance volume, 用ray casting计算shadow和ao。当然little big planet场景简单太多了。
killzone3![[sig12]几个AAA游戏中的影子技术](http://img.reader8.net/uploadfile/jiaocheng/201401101/3000/2014013015003711697.jpg)
基本部分:4 cascaded shadow mappcfstabilization(或者说是pixel snapping)防止抖动1408x1408 d16 shadow map,1张10+带阴影的点光源5k+ objectshadow map渲染时间是4-5ms点光源比较远的时候使用低精度的shadow map小物体skipdepth bound特别部分:kz3有offline cook的lightmap(只有shadow的信息),这样的话realtime shadow map可以在80米的地方就截止,而且lightmap可以产生stencil mask,进而skip掉不少像素。
infamous![[sig12]几个AAA游戏中的影子技术](http://img.reader8.net/uploadfile/jiaocheng/201401101/3000/2014013015003711698.jpg)
基本:3 cascadecascade之间有blend来避免生硬的过渡放置了不少大型的occluder来cull掉挡住的物体,然后也可以避免light bleeding特别:会调整shadow map的方向,让建筑竖直的边和shadow map的u coordinate一致最后一个cascade用于particle的shadowcut scene时候用专门的shadow map---专门绕着主角来
GodOfWar(psp&god of war collection ps3)。。。原来psp的god of war与god of war collection ps3不是一个团队开发的。这个版本的有一个引擎叫做ReadyAtDawnEngine。light indexed deferredevsmsample distribution shadow mapsoverdraw counting这个很有nice,在构建shadowmap的时候使用stencil来查每个像素的overdraw,如果没有发生overdraw,也就意味着这个像素点上是只有shadow caster,没有receiver,那么这点上可以不画caster但是这个信息怎么拿来来skip掉一些object,没说。。。
farcry3![[sig12]几个AAA游戏中的影子技术](http://img.reader8.net/uploadfile/jiaocheng/201401101/3000/2014013015003711699.jpg)
这个真正亮,farcry3是一个超大场景,有日夜变换的游戏。csm只延伸到40米,之后是使用另外一个shadow技术,可以覆盖到2kmx2km的范围。![[sig12]几个AAA游戏中的影子技术](http://img.reader8.net/uploadfile/jiaocheng/201401101/3000/2014013015003711700.jpg)
做法是在每一个tile(64mx64m)上构建了一个heightmap(低端机器32x32,高端pc48x48),每一个像素投射到具体的这个tile的heightmap中,高于这里的高度值的就是没shadow,反之就是有shadow。构建的过程是逐tile的,而且分帧计算:
![[sig12]几个AAA游戏中的影子技术](http://img.reader8.net/uploadfile/jiaocheng/201401101/3000/2014013015003711701.jpg)