西川善司【神秘海域(Uncharted)】的图形分析

 
    本文是为传播0月8日发售的【神秘海域 合集】魅力而短篇连载的第2回,这次主要集中在神秘海域系列的图形的技术方面。原文链接在 http://weekly.ascii.jp/elem/000/000/370/370079/
 
    译者注:另外因为本文引用的神秘海域的技术分享大多是在GDC2010和2012年的,图形技术上距离2016发售的神秘海域4有了一些差距,在角色渲染部分,我追加了一些西川善司以前分享过的角色渲染方面的资料,另外原文网站里的贴图较小还加入了网站水印,这里为了方便理解,我重新从引用的PPT里截取了更高清一些的图,另外我也注释了对应的PPT的名称,一些具体的技术细节,还是建议自行搜索下载来阅读原文。
    

跨越“恐怖谷理论”的神秘海域系列的角色表现

    神秘海域是冒险动作类的故事,由有魅力的角色来进行表演。这些有魅力的角色是人类,而不是拟人化的动物。我们对于游戏中登场的拟人化的动物角色,从宽容的视角可以感觉到“可爱”,要是人类时情况有所变化。不成熟的人类表现会有感到“很难受”。这个就是有机器人专家森政弘提出的“恐怖谷理论”的现象。
 
 
    根据森政弘的假设,随着人类物体的拟人程度增加,人类对它的情感反应呈现增-减-增的曲线。恐怖谷就是随着机器人到达“接近人类”的相似度时,人类好感度突然下降至反感的范围。“活动的类人体”比“静止的类人体”变动的幅度更大。    https://zh.wikipedia.org/wiki/恐怖谷理论
 
    神秘海域系列中,通过加入先进的图形技术,在PS3世代实现了最高真实等级的人类表现。
 
    首先,人类表现中最重要的项目是皮肤的表现。人在人类社会中生活已经已经习惯了真实的人类皮肤。因此,看到不自然的皮肤会有强烈的违和感。PS2世代的人类角色的皮肤看起来像纸质的塑料或陶瓷感。这是因为在人类皮肤的反射元素中,只有扩散反射“Diffuse”的部分被绘制了,扩散反射就是像被照射的光那样来扩散的反射现象。相对的就是镜面反射“Specular”。和入射光同样的角度来射出,像镜子一样的反射现象。
 
  PS3世代时,人类皮肤中加入镜面反射颜色的游戏图形也增多了,这次看起来像是光滑的厚的化妆一样。
    
 
 実は人間の肌は透過率こそ低いものの半透明材質なので、拡散反射と鏡面反射の反射モデルを採用しただけでは表現が出来ないのである。では、人肌はどんな反射現象をするかというと、半透明材質の人肌に光が差し込むと、光は皮膚下に浸透し、皮膚内部で散乱して差し込んだ場所とは別の場所から出てくるのだ。しかし、そんな複雑な反射現象はゲームグラフィックスでは実現不可能である。
 
    实际是因为人类皮肤是透过率低的半透明材质,只是采用扩散反射和镜面反射模型是无法表现出来的。光射入到半透明材质的皮肤,渗透到皮下,在肌肤内散射并从其他地方射出。但这种负责的反射现象在游戏图形中是无法实现的。
 
    这里,神秘海域里把电影【黑客帝国2:重装上阵】的CG制作采用的“皮下散射模拟”做游戏向的省略化来使用。
 
アンチャーテッド コレクション
关于人类皮肤的皮下散射现象的概念图。
 
    神秘海域系列采用的近似皮下散射模拟,是把普通的扩散反射模型的光照结果,通过人类皮肤射入白色光时观测到的颜色分布(接近照射点是白色,向远处由经由黄色并接近红色)来做模糊,是相当简单的方法。但但是这种方法的效果非常好,发挥出的真实性与以往游戏的皮肤表现划清了界限。
 
アンチャーテッド コレクション
人类皮肤的“Diffusion Profile”,在黑暗中对人的皮肤照射白色的激光,测量照射点外围的发出的光的颜色,这样容易理解一些。中央接近白色,经过黄色向远处变红色。
 
反派角色Zoran Lazarevic的用白色光来光照的结果。图像用Texture空间来显示。
 
把光照结果用“ Diffusion Profile”来做模糊。
 
把它与进行普通的扩散反射与镜面反射的结果相加,再现出真实的皮肤的半透明感。
 
译者注:由于最初由Nvidia提出的方法太费内存,神秘海域使用的是ShaderX7提到中更轻量的近似方法(Fast Skin Shading by John Hable, George Borshukov, and Jim Hejl.)
 
实际的游戏场景中的一个镜头(神秘海域2)
 
要在2016年发售的神秘海域4。采用了同样的近似皮下散射模拟,品质进一步提升。第4作可以看出是把迪士尼动画工作室在SIGGRAPH2012上发表的基于物理渲染技术面向实时进行简略化来实现的。
 
译者注:这里要解释是,上文中神秘海域2采用的技术Naughty Dog是在Siggraph2010年分享的,而后几年, Activision Blizzard的Jorge Jimenez提出Screen-Space SSS成为了主流的方法。皮肤渲染相关的一些新的技术,在我翻译的西川善司的【WITCH CHAPTER 0 [cry] 绝密开发中的史克威尔艾尼克斯的DX12技术演示全貌】中也有描述,在SQUARE ENIX的自研引擎 Luminous Studio中也得到了很好的实现。
 
Jorge Jimenez 的基于屏幕空间的角色渲染的ppt在 http://www.iryoku.com/ 里有下载,另外Siggraph2011上Eric Penner提出的Pre-Integrated Skin Rendering效果比神秘海域2的方法更好,也成为了在移动和低端设备上实现皮肤渲染的主流方法。
 
Jorge Jimenezz的SSSSS的算法概念图,通过屏幕空间的后处理来进行模拟次级表面散射的模糊处理。
 
 SQUARE ENIX中的WITCH Demo中的皮肤的表现
 
Eric Penner的Pre-Integrated Skin Rendering,相比屏幕空间的方法,更适合移动终端这种带宽和填充率比较低的设备。
 
    和皮肤同样重要的毛发在神秘海域系列中实现了有讲究的表现
 
    现实中的毛发是很细的圆筒形,这样光在头发表面反射的同时也会向内部渗透,渗透的光会在其他的位置射出。这样就产生出称作各向异性反射的特殊的光泽感,在日本通常被称作“天使之轮”。
 
    神秘海域系列中的毛发,采用的是基于SIGGRAPH2004上ATI Research(AMD)的Thorsten Scheuermann发表的论文【Practical Real-Time Hair Rendering and Shading】的各向异性反射模型,作为多边形片植入到头皮的“鳍型”方式实现的毛发表现来说,是相当真实的外观。
    

 在AMD的在Rendermonkey的Example里就有这种方法的实现。
 
 
Improved Hair:
左图是神秘海域1的内森(主人公),右图是神秘海域2的内森。不光是多边形数是从2308提升到了4002,第2作中也对应了毛发特有的各向异性反射的表现。
 
Improved Hair:
渲染
 
关闭毛发Shader时,相当于神秘海域1的效果
    

打开毛发shader时,神秘海域2之后的效果
 
    译者注:这里神秘海域并没有完全使用AMD的方法,在Specular上还是采用的Kajiya-Kay的方法。最近几年,除了着色外,头发的生成方式也有了很大的进步,比如SQUARE ENIX的Luminous Studio中借鉴的Nvidia的Hair技术以及子公司EIDOS与AMD合作开发的TressFX3.0,借助Directx11的Compute Shader和Tessellation Stage,实现出了更真实的头发。  
 

Luminous Studio的毛发是基于NVIDIA的Sarah Tariq氏的论文  http://sarahtariq.com/HairCourseNotes_SIGGRAPH2010.html,另外在Nvidia的SDK11中也有这个的Demo和源码
   
以SQUARE ENIX在2012年的 AGNI'S PHILOSOPHY里的方法为例,首先是在角色头皮上植入板型多边形的方法。
 
接着加入了线段方式的头发。
 

SE的最新的WITCH Demo中的毛发效果
 

上图着色方式中,最右边的就是AMD的方法。
 

 SQUARE ENIX的WITCH Demo中,使用了Marschner的方法来做毛发的阴影。
    
使用EIDOS与AMD合作开发的TressFX3.0,最有代表性的游戏就是古墓丽影,在AMD的网站上可以下载到TressFX2.2和相关技术文档。
    
    译注结束。
 
    人类的表现,不光是看起来真实,在运动上也有要求。
    
    神秘海域系列的主要角色,人体的Rig(骨骼)数,大约250根左右(包括手足,手指和面部),比同时代的其他作品要多。250多根骨头中,运动面部的Rig约100根,相对也是多了一些。接下来看看多彩的肢体运动和表情丰富的面部运动的秘密。
 
Rig Pipeline:3 seperate skeletons:Skeleton Sharing: Males, Females, Children, CreaturesAll rigs have the same general orie...
神秘海域系列的Rig构造。实际游戏运行时使用的是左边的。
 
    在神秘海域系列中,因为在每作中改变PS3的CPU和GPU的应用以及最优化技术的进化,同样是PS3上运行的作品,后期的作品中表现力也进化了。
 
    后期作品的话,不光是GPU做Geometry处理(多边形单位的几何运算),PS3的CPU,CELL处理内的多个128bitSIMD型的RISC处理器”SPU“(Synergistic Processor Unit)也积极的使用了,这样1个角色的多边形数也增加了。额外说一下,比起使用PS3的GPU搭载的可编程顶点Shader,使用SPU方法的Geometry处理更加的高速,这种技术倾向也影响到神秘海域以外的PS3专用游戏上。
 
 
Face Comparison:
左边是神秘海域1的主人公内森,右边是2的。多边形数增加了。
 
Face Comparison:
面部动画的表现力也增加了
 
 
上图是神秘海域1的眼睛,下面是2的。眼睛周围的多边形数也上升了。眼球上的高光根据场景内主光源位置的方向来表现。
 
Improve the eyes:Uncharted 2 Eyes
神秘海域2中,皱纹的绘制也变得真实。
 
另外,2016年的面向PS4的系列最新作【神秘海域:盗贼末路】中,人的皮肤表现比PS3世代的神秘海域更加进化。
 
神秘海域1~4的主人公内森的渲染进化对比
 
神秘海域3与4的内森对比
 
 2016年发售的第4作眼球shader也更加进化,对应了角膜的折射效果
 
SQUARE ENIX的 Luminous Studio中使用的眼球折射技术

 
 
 
通过视频,可以看出神秘海域4里使用了提注释中提到的一些最新技术
 

卓越的“水”的表现

    神秘海域系列,也有着考古学探险的一方面,主人公内森一行人在自然丰富的场景中旅行
 
    表现自然物上动植物,地形和水等要素有很多,不过因为“水”是象征着PS3时代的神秘海域系列的表现要素,在本稿中进行介绍。
 
    第1作的【神秘海域1 德雷克船长的宝藏】中,海岸,河边的场景中有大量水的表现。特别是激流的河川上游的战斗场景,现在看也有使人感到【很厉害】的真实感和说服力。
 
神秘海域1中的上游的水面 (GDC2012 Water Technology of Uncharted)
 
    水面自身,对应Fresnel反射的折射/反射表现,浑水的表现,大浪,波纹的表现,泡沫插入等全部加入。通过Fensnel反射是对应视点位置和水面的角度,改变水底状况和反射场景的混合率的各向异性反射现象。脚下的水塘可以看清水底的泥土和沥青,远处的水塘几乎看不到水底,把周围环境很强的反射的风景,就像实际生活中所看到的反射那样。
 
第1作的水面表现的要素分解截图
 

神秘海域1的水Shader要素的分解
 
只有顶点单位的波浪和反射的清静,
 
增加了波纹(使用Normal Texture的Bump Mapping)表现的状态。
 
关闭波浪和反射表现,折射效果和浑水表现的状态
 
加入阴影的状态
 
在波浪的顶部附近加入泡沫Texture
 
通过太阳光的镜面反射光照的结果
 
合成全部要素的最终截图
 
    而且,【神秘海域1 德雷克船长的宝藏】中溪流的表现特别厉害。
 
    溪流的激烈复杂的“流动的波浪和水面”的表现,通过顶点单位和像素单位把事先计算好的“水流向量场(Flow Vector Field)”作为参数用自己的方法实现的圆循环性的映射函数来算出的程序化的方法来实现的。
 

“Sin”和“Cos”非常有用
 
    在【神秘海域3 德雷克的诡计】中,进一步的挑战游戏中实现难度很高的“海洋表现(Ocean Waves)”和“翻滚的海浪(Rolling Waves)”
 
    【神秘海域3 德雷克的诡计】中,有渗入到在暴风雨中航行的海贼改造的豪华客船的场景,这时的大海的波浪也实行了独特的程序化的方法。采用了美国德克萨斯州农工大学的的Cem Yuksel在SIGGRAPH2007发表的论文【Wave Particle】中的方法。这个是把波的凹凸的最小单位作为图章(Stamp),对海面模型适用数百个的方法。另外,之前表现溪流的预计算的水流向量场的技术也被应用了。
    
【神秘海域3 德雷克的诡计】的豪华客船的场景
 

随处剧情发展,船体发生崩坏,
 
大海的波浪使用了”Wave Particle“的方法。这个技术在其他游戏中也被采用。
 
水流和波浪的高低控制使用了第1作的溪流时的技术
 
    这个豪华客船场景里还有一个惊叹的技术被使用了。那就是在角色们乘船时,这个豪华客船自身被波浪的摄动而运动这点上。粗略的讲 ,取得船体和海面上波浪的碰撞,使用通过这个计算出的立场的弹簧模型,来控制船体的运动。与其说是模拟,不如说是程序化的方法,被这种”创意与技术“的独创的混合技术所震惊了。
    
第3作的14章,被狂暴的大浪翻弄的作为海贼主根据地的豪华客船的场景。成为这个场景的游戏舞台的摇晃的船体,实际上,是根据波浪来运动的。
 
    ”翻滚的海浪(Rolling Waves)“,是冲浪运动员们喜欢的”大浪“,伴随游戏进行的过程中崩坏表现的波浪。为了【神秘海域 德雷克的诡计】中暴风雨场景和海啸的场景不得不挑战这个表现。
    对于被认为是【实行流体模拟是不可能】这个表现主题,作为开发方的Naughty Dog,再一次用”创意与技术“简单的实现了。
 
    做法简单,不实用流体模拟。用数学曲线函数”B Spline“曲线,制作出大浪的断面形状的曲线,用它抬高水面来进行实现。在大浪的细微的波纹和泡沫,是组合以前的水面表现的技术的同时,根据进展的崩坏表现,用适当的Scale值的搭配和精致的动画来实现的。
 
把水面,用B Spline曲线稍微加工来提升形状(图中的红色曲线)。但是,要控制两端,稍微调整外观。
 
实际游戏中的大浪,翻滚的波浪表现
 
渲染后。
 
关于实际场景中的水面表现,使用了之前描述的技术。
 
第3作中,下沉的豪华客船的船内场景也是扣人心弦。
 
译者注:除了西川善司提到的GDC2012:Water Technology of Uncharted里分享的水的技术外,GDC2012 : Creating Flood Effects in Uncharted 3里也介绍了用Houdini预创建水流模拟网格,并通过粒子来渲染的水流特效

 
接下来,是关于神秘海域的的“环境光的影响”,“足迹”和“粒子”的表现解说
 

神秘海域系列里其他要关注的图形要素是?

 
    神秘海域系列的图像魅力,也有其他值得看的地方。
 
    神秘海域系列作为冒险动作游戏,玩家操作的主人公内森是要经常的跳来跳去。因为在第2作的【神秘海域 纵横四海】中,stealth action(潜入行动)的要素加强,隐藏在隐蔽处的重要度也增加了。
 
    在这种表现真实的显现的同时,为了描绘出操作对象的内森和背景物“如何接触”,环境遮蔽(Ambient Occlusion)作为游戏中的影像效果,在各处被使用着。
 
    现实世界的话, 避开太阳的阳光进入建筑物的“背阴处”,会注意到自己的鞋和底边周围会出现比背阴的黑暗程度更“深一些的影子”。这个就是AO的效果。
 
脚下的AO表现(这节的贴图都是引用自 Naughty Dog John Hable :Uncharted 2 HDR Lighting这篇PPT)
 

开发中的画面关闭SSAO
 

开发中的画面打开SSAO.
 
    AO的效果,本来是必须要考虑间接照明和天空落下的天球照明而行计算的,这样在游戏图形中执行很难。不过,在神秘海域系列中,是对GPU绘制的影响,实时的进行图像修正一样,用实时的后处理特效处理来实行AO。把这个技术称作““Screen Space Ambient Occlusion(SSAO)”。
 
    现在的游戏图形中绘制一次场景的话,和这个影像的像素一一对应的深度信息,就会保留在每帧的显示画面的不可视存储区域中(深度缓冲)。虽然这个可以在绘制过程中随意的放弃掉,但在神秘海域系列中,在显示绘制的影像前,访问这个深度缓冲,把认为是凹面,以及面与面交叉的地方进行加入“阴暗色”的处理。这个虽然并不是屋里正确的,不过因为可以实现“合理的AO效果”,非常的方便。
 
绘制普通场景的直接绘制的图像
 
绘制这个场景过程中生成的深度缓冲的内容
 
读取上面的深度缓冲来实行SSAO。黑色部分是作为SSAO处理结果来生成追加阴影。特意变成了一半的分辨率。SSAO是模糊的因应表现而有意图的生成低分辨率。这样,也有降低GPU负荷的效果。
 
合成水面和其他的半透膜素材的最终影像。
 
其他场景的正常绘制的影像。
 
加入了SSAO后的影像。可以看到深处的凹部和面与面交叉处产生了阴影
 
其他场景中正常绘制的影像
 
使用SSAO后的映像。
 
    神秘海域系列中使用的图形技术无法一一列举,最后几个值得一看的地方,是每次作品中得到进化的“足迹”表现和“粒子”表现吧。
 
    作为足迹表现,普通的考虑的话,有第2作【神秘海域2: 纵横四海】中“雪山上的足迹”,第3作【神秘海域3: 德雷克的欺骗】中的“沙漠的足迹”,  可以说是成为核心印象的重要表现主题。
    
    这种足迹,基本方法是在地面上绘制足迹的Texture,实际上,在神秘海域2里也就是这样做的。在神秘海域3中,变成了存在于沙丘上的细微的波浪一样凹凸。成为了像实际陷入一样的表现,进一步在沙丘的斜面,方向上足迹崩坏的表现中被使用。这个在水面的涟漪表现和细微的凹凸表现里也有使用,是把Normal Map作为Bump Mapping的应用技术来实行的。
 
第2作的雪原的足迹是像Texture Stamp的方式来实现的(GDC2012 Effects Techniques Used in Uncharted 3: Drake’s Deception)
 
第3作的沙漠的沙子的凹凸,并不是做出实际有凹凸,而是用Normal Map Texture的Bump Mapping的方法。
 
沙漠上的足迹也是Texture Stamp的一种,Stamp的不是足迹画像,而是足迹形状的凹陷的Normal Map Texture
 
把脚印Stamp的Foot Print渲染到World Normal Buffer(GDC2012 The Tricks Up Our Sleeves A Walkthrough of the Special FX of Uncharted 3: Drake’s Deception)
 
沙漠上的足迹,是随着时间经过,一起向下方流动
 
实际的游戏画面中,沙子上的足迹的情况
 
    然后“粒子表现”也是在不断的作品中激烈的进化的。
 
    电影的CG中,烟和火的气体表现是实行流体模拟来绘制。现在的游戏图形中,因为还是不可能的,例子都是在多边形板(3D Sprite)贴上烟和火焰的Texture,表现立体的飞舞。这样的表现称作Billboard显示,没做好的话,就真像看到广告牌在飞舞一样。在神秘海域系列中,并不是直接把火焰和烟的Texture直接贴在Billboard上,而是和多个的Normal Map Texture香橙,通过Noise Texture来散开Texture坐标的同时,运动立场Texture,看起来好像真正的流体一样。
 
用湍流扭曲Texture左边在使用立场Texture,实现了真实的粒子表现
 
    绘制时,对billboard单位(多边形粒度)进行了简单的光照,通过对应光源位置的远近加入浓淡,就好像其他烟的在别的烟上投射了阴影一样的“模拟的自阴影表现”。
 
第3作中有印象的飞机坠落场景的大的黑烟,当时并不认为是基于粒子的绘制,而是立体的烟。
 
基本原理是是作为普通的粒子系统来绘制,因为Texture是Normal Texture,进行光照时会有实时的细微的凹凸阴影。而且,多个Normal Map Texture相乘,做出了流体形状的变化。
 
对应太阳的严禁调整粒子的阴影,像自阴影那样的表现也加入了
 
 
    这种先进的粒子表现不光是烟,火焰的表现中也被使用了,第3作中期在燃烧的古城内激战的场景,从地板到柱子无数的火焰升起,这里也是使用前述的粒子技术。
 
燃烧的古城内的激斗场景。火焰的表现很真实。
 

"可以游玩的电影"并不仅仅是宣传词

    索尼电子娱乐(SCE)对于神秘海域系列,给予了【可游戏的电影】这样的宣传词,作为"营销词"不能轻视,实际上,从技术的角度看,SCE"并没有撒谎"。
    
    在绘制神秘海域系列的影像中,没有直接显示,而是使用了实际好莱坞电影的拍摄中也使用的柯达制作的电影拍摄用胶片【KODAK VISION Premier Color Print Film 2393】的颜色特性和色阶特性,实时的加入色调的修正。把正经的数字CG影像,强硬的转为模拟电影胶片的效果。
 
KODAK VISION Color Print Film 2393 Sample
 KODAK VISION Premier Color Print Film 2393 
 
柯达制作的电影摄影用的胶片【KODAK VISION Premier Color Print Film 2393】的色调曲线。神秘海域接近这个特性,把绘制结果进行试试的色调修正。
 
把绘制结果,用影像的平均亮度来线性修正的结果
 
进行电影摄影用胶片的非线性颜色修正。明暗的灰度并不平衡,颜色风格也不同,容易看出的是皮肤的颜色
 
    而且,PS3版的神秘海域系列,基本上采用的是把1280×720像素左右的分辨率来渲染的图形Upsacle到1920×1080像素输出的方式,还有,帧率基本上是30fs的可变帧率。
 
    笔者的性能试算对于PS3,图形性能提升了约8倍的PS4上的【神秘海域 合集】,渲染分辨率是没有Upscale的真实的1920×1080像素,帧率是公开说对应60fps。负责PS4移植版开发的是,是由有着参与了【ICO】和【旺达与巨像】的PS3版移植的成绩的Bluepoint Games来负责。品质值得期待。
 
   因为分辨率和帧率的提升,前面描述的各种先进的图形表现,也变得更容易看清楚,希望PS3时就玩过本作的人们也可以意识到本篇介绍的各种技术来玩本次合集。应该可以感受到卓越的魅力影像中加入的,软件工程师们的热情。
    
 
 
原文地址:https://www.cnblogs.com/TracePlus/p/5123321.html