《上古卷轴4:湮没》前瞻
2002年最好的CRPG除了《地牢围攻》和《无冬之夜》就是Bethesda的《晨风》了。《晨风》有着先进的引擎,虽然系统要求非常高,但是玩家会觉得很值当。此游戏得过众多奖项,还先后推出两作扩展包。现在Bethesda就要完成上古卷轴最新一作——《上古卷轴:地狱》,如果你降低画面细节的话,连今天的怪物级显卡都可以应付的了。对于这款PCXbox双平台游戏,我们对开发者进行了一次访谈来揭示一下画面以外的人工智能和物理系统等等。Gavin Carter很慷慨的为Beyond3D的读者回答了下面的问题。
能谈谈你们使用的动态阴影技术么?他们看起来像是某种阴影贴图。
他们确实是一种阴影贴图,不过和我们在E3看到的那种很不一样。在最开始的阴影测试中我们在游戏中每个表面都用上了立体贴图(cube maps),不过在时候的进一步测试中我们发现这并不是一种实用的解决方案,速度太慢了!我们改变了方法开始给每个角色直接使用阴影贴图(shadow maps)。系统支持完全的自阴影,我们使用了多重取样(multiple samples)和深度检测(depth comparisons)来提供柔和阴影效果(soft-shadowing effect 译者:在有些游戏中,我们看到的阴影边缘都非常锐利,这不符合显示,因为现实中没有真正的点光源,而且还存在大量的环境反射,真实世界中的影子边缘都是模糊的。)。最终我们达成了一个可以在同时保证效率和效果的前提下普遍支持地狱中多种环境的系统。
是不是我们在各种等级的机器上都可以看到动态阴影效果?即使在低端机器上效果稍稍有些缩水。还是说动态阴影只是给高端机定制的效果?和3代相比有什么质的飞跃?
所有等级的系统都可以看到动态阴影效果。使用低端机的玩家可以通过取消自阴影和柔和阴影或者调整角色接受阴影的数目来提高速度。和晨风相比飞跃是显著的。我们不再使用模板阴影了(stencil shadows ),我们现在的的系统可以以更小的代价获得更好的效果。而且,阴影改为使用世界坐标系而不是晨风中的屏幕坐标系,这样我们就可以加入一些新的效果像是淡出和随着距离而模糊的阴影边缘。
你们对一些静态阴影使用了预计算阴影技术了么?(译者:比如说,在CS中,因为太阳是不动的,而且那些箱子什么也是不动的,所以我只要预先计算出阴影,然后“画”到贴图上就好了)如果用了,他们和动态阴影结合的如何?
我们没有使用任何预计算阴影。主要理由是预计算阴影贴图和我们的动态阴影技术结合的不好。而且完全使用动态阴影方案还有一个好处就是我们的艺术家可以在一个更灵活的全所见即所得的环境中创造他们喜欢的环境。
在最近的一篇访谈中你提到地狱中物体表面使用了各种光照效果(法线贴图和平行贴图,举个例子)你是如何处理平行贴图的交界和曲面变形问题的?
在高端显卡中,我们通过以每象素为单位儿不是每向量为单位进行可见向量计算(eye vector calculation)来避免贴图扭曲的问题。有些贴图扭曲问题是固有的,你用什么卡也解决不了。不过一般来讲这不是什么问题,除非你把镜头紧紧的贴着贴图看,否则你肯本看不出来。我们的艺术家很快就学会了怎么样看起来好,怎么样看起来不好。T形贴图汇合边缘在进行任何光照计算的时候总是有问题,所以我们在艺术设计阶段就通过避免构造那些会出问题的东西来避免这个问题了。
地狱貌似是第一个在发售之时就带有完整HDR特性的游戏了。你能讲讲你们具体的实现方法么?是否使用了浮点混合(fp blending ),可否在象素渲染下进行混合?地狱使用了浮点贴图么?
《地狱》里的HDR使用了浮点贴图以带来更好的精确度,同时还使用了浮点缓存混合(floating point buffer blending)。我们的场景太复杂了,如果使用在象素渲染下进行混合硬件需求太高。
你们打算使用多少的渲染引擎(Shader Model )?在最近的访谈中你提及使用到了渲染引擎3.0;你们只是使用渲染引擎3.0来提高速度还是使用到了其中特别的内容,比如说在定点渲染中的贴图获得(texture fetches )?
我们打算使用渲染引擎2.0到3.0。对于渲染引擎3.0效果,使用渲染引擎3.0编程可以使用分支和循环,这点很有好处,不过主要还是为了提高效率。在3.0中我们可以在一道处理中完成所有的光照,其中包括混合物件的光照。
请谈谈在不同版本的渲染引擎中处理同样效果的感受。
大部分上,我们的渲染是最初先在脑子里用2.0的规格写好。在3.0里,因为我们可以让效率提高,讲不同的处理过程合并,写代码就更有趣了。虽然有时候我们需要做一些完全相反的事情,那很痛苦,不过在大多数情况下我们尽量避免那样。
在截图中看到世界真是细节丰富,确定能见度一定非常重要。你们使用了什么先进的技巧么?比如说入口裁剪(portal culling )?
我们主要依靠LOD模型,当一个物件距离足够远或者清晰度足够低的时候他的面数就会减少,这样光照,几何和渲染负荷就会降低了。我们同样使用了简单快捷的隐藏面剔除(occlusion culling)。重申,我们的目标是在不影响艺术家的自由的情况下最优化系统。
之前的访谈中你提到了使用多线程技术来加速新区域的载入速度。在这点上你觉得其他不那么显著的设备比如说内存速度,CPU L2缓存,AGP/PCIe速度有多重要?
优化是一件综合性的工作。比如我们花了一些时间来优化代码防止L2缓存错失并提高效率。我们试着在没个硬件上进行优化,综合起来速度就能得到很大的提升。
我们很好奇平均每屏幕包含多少三角形和定点?游戏大约会有多少定点渲染,你们平均使用了多少象素和定点渲染指令?
我们的三角形和定点数偏高,但是符合微软和主流显卡公司对下一代开发的推荐值。对于象素渲染,如果你计算因为不同显卡组合导致的不同情况的话,有上百种。在一般情况下大概有25种主要的渲染效果。对于不同的渲染模型我们用到了不同数量的指令,所以在快速的显卡上低端2.0渲染和3.0光照渲染可以结合的非常紧密。