大家好,今天来为大家分享《西川善治》【索尼克世界大冒险】图形讲座的一些知识点,和的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!
采集于2009年3月13日注:由于信息是3年前的,有些技术已经不再是最佳解决方案。
原文西川禅师
翻译追踪
校对:千里马干
原文链接http://game.watch.impress.co.jp/.0090410_110682.html
地点:SEGA总部
[索尼克世界冒险]和[刺猬引擎]标志
对于这一代游戏机的3D游戏图形,用户期待的不仅是渲染和纹理分辨率的提升,还有因硬件性能提升而带来的全新视觉体验。为了实现这个目标【这一代机器上的全新视觉体验】,就是这款基于PS3和XBox360开发的动作游戏【索尼克世界大冒险】,(以下简称索尼克WA)。
说到【索尼克】系列,一直都是关于好玩的游戏。不过,在这款游戏中,加入了这一代游戏机中3D图形的新标准和技术【实时全局照明】(以下简称实时GI),因此引起了很多关注。
这次我想让大家关注一下这个实时GI,同时也看一下Sonic WA的图形。
【索尼克世界大冒险】图形规格,当前索尼克角色使用18000个多边形
本次采访对象为世嘉株式会社第二CS研发部第一程序部游戏总监、技术总监桥本善久先生(现SQUARE ENIX CTO)和岩崎先生同为程序员的Hiroshi(和桥本一起去了SQUARE ENIX)和Ogino Koushi先生,一共三人。此外,桥本先生还在2008年举办的游戏开发者大会CEDEC 2008和2009年在美国举办的GCD 2009上发表了关于[Sonic WA]的演讲。
首先,我想整理一下【Sonic WA】的3D游戏画面的基本信息。本游戏中主角索尼克的模型约为18,000个多边形,在过场动画(CutScene)中约为26,000个多边形。另外,代表性NPC角色和村民约4000个多边形,场景中聚集的大量普通村民约1800个多边形,人形敌方机器人约5000个多边形。刺猬索尼克于1991 年在16 位计算机上以Sprite(注: 绘图方法)角色首次亮相,现在是需要18,000 个多边形的角色。这对于老玩家来说真是一个感人的信息!
【索尼克的特写截图和线框截图】
【敌方角色特写截图和线框截图】
构成舞台的建筑物和其他背景物体的多边形总数根据舞台的不同而不同,但一般在400万到500万个左右。所以在一帧中,背景是100,000到130,000。
【千里马干注:400万指的是整个场景,10万指的是同一画面。 】
虽然视频帧率在设计上设定为每秒30帧(30fps),但Xbox360版和PS3版由于种种原因在实现上有细微的变化。在Xbox360版本中很多情况下,该设置是固定的,因为它超过了30fps。它设置为30fps,但PS3 版本没有固定的30fps,而是使用可变帧率,因为帧率可能变化很大。
【实际操作场景及线框截图】
世嘉株式会社CS 第2 研发部第1 程序部游戏总监桥本善久先生
世嘉株式会社第二CS研发部、第一编程部,程序员荻野幸志先生。
在渲染分辨率方面,PS3版和Xbox360版均采用880x720点作为基本分辨率,并使用缩放来扩展显示。另外,Xbox360版和PS3版的抗锯齿(anti-aliasing)均采用2x模式MSAA(MultiSample Anti-Aliasing)。根据距视点的距离减少显示对象的多边形的LOD(细节级别)系统是如何实现的?
【千里马干注:各大主机都以720P和1080P作为高清卖点。为什么这里选择880x720的分辨率呢? 880/720=1.22222.很多2,即不是16/9=1.77777.也不是4/3=1.33333.我能想到的唯一原因是为了节省带宽,但是原因对于选择880还不清楚。如果一定要给出一个理由的话,那就是2.]
桥本老师【关于LOD,几乎没有做任何事情。话虽如此,在Sonic WA的制作中,几何负载几乎没有出现问题。虽然在LOD中只要准备好高模和低模就可以实现,但考虑到成本和效果的比较,还是没有在实现中使用。 Sonic WA 上称为LOD 的系统是纹理的mipmap 方面。 ]
【Chillima Gan注:桥本哥哥你开玩笑吧……】
荻野先生【因为PS3版使用的是Playstation Edge,所以不会有几何性能的问题。 PS3的主内存容量非常紧张,所以如果引入LOD功能,就需要考虑低模机型占用的内存。最后的结果就是什么都不用做就能解决(笑)。 ]
在这个主机时代,近年来游戏项目中的多边形数量有了很大的提高,并且很少有关于几何负载紧张的传闻。即便如此,近来在同一场景中出现无数形形色色的士兵角色还是很流行。 《真三国无双》、《丧尸围城》等游戏作品现在也有必要引入LOD系统。虽然像《索尼克WA》这样同时出现的角色数量并不算多,但粗略计算近期的游戏作品发现,不使用LOD系统的情况较多。
关于物理模拟,使用[HAVOK5]。 HAVOK 物理主要使用活动角色之间的碰撞检测和破坏过程中的碎片等行为控制。 HAVOK动画用于角色与背景交互时姿势控制的IK(Inverse Kinematics:逆动力学)处理。动作捕捉也运用在主要事件场景的表现等方面。虽然有点任性,但还是不得不说,原本以精灵角色出现的索尼克,现在也用了IK和动作捕捉。
另外,这次为【Sonic WA】开发的引擎被命名为【Hedgehog Engine】,未来计划作为PS3和XBox360的Sonic系列的标准开发库。
引擎的开发从2005年中期开始,游戏内容的开发从2006年底开始。虽然引擎的开发是从5人左右的小团队开始的,但在开发最繁忙的时期,编程团队达到了大约40人。大概有80名设计师和艺术家,包括其他策划、导演、制作人、音响等,总共有一百或几十人。这意味着[Sonic WA] 是一个相当大的项目。
[HAVOK5]
HAVOK物理,主要使用行为控制,例如活动角色之间的碰撞检测和破坏过程中的碎片。
【千里马干注:请注意,上图中,索尼克的左脚踩在上台阶上,右脚踩在下台阶上。这就是IK的优点。同样,下图中,如果不使用IK,很容易让人感觉角色漂浮在空中,而不是粘在地图上。 】
对于角色与背景交互时姿势控制的IK处理,必须使用HAVOK动画。
使游戏图形看起来像皮克斯CG 电影的环境
我们经常听到“以3D 游戏图形中的皮克斯风格为目标”之类的说法。 Valve 的《军团要塞2》的视觉效果也采用了独特的灯光技术来设计和引入,以重现皮克斯的风格。
【Sonic WA】的视觉效果并非模仿现实世界的【逼真】视觉效果。不过,它并不是纯粹的卡通风格,而是图像中漂浮着一种独特的环境感,这确实是一种独特的视觉效果。
如果先揭秘的话,可以说是《索尼克WA》中使用的《实时GI》的效果。那么,引入这种实时GI技术的契机是什么?
桥本先生【虽然这一代的游戏图形在Shader上变得更加丰富,但平行光源(例如阳光落在整个场景上的光源)和点光源(局部照亮各个方向的光源)却不是。直接照明位置的阴影被忽略。我开始想,“这里面还缺少一些东西”,这就变成了一个机会。后来,作为长篇CG电影制作工作室,我们推动了实时GI的发展,目标是再现皮克斯著名作品的氛围。
在现实世界中,光在空气中散射和扩散。被光直接照射的物体本身会将光反射到其他物体上,成为二次光源。在现实世界中,这种复杂的反射和扩散会同时发生多次。这就是真正的环境光(Ambient Light)。
在计算机图形学中概括这些就是【光能传递】和【光线追踪】。要在这一代机器的游戏图形上实现光能传递和光线追踪,GPU 的性能还不够。因为,你必须设计一种方法在模拟中做到这一点,并且你必须考虑实时实现它。
为了实现【GI】的实时使用,开发团队采取了将实时GI拆分为两种技术来实现的策略。一种是对应于静止物体的GI,例如不能被破坏或移动的背景物体。还有第二个GI 对应于移动或弯曲四肢的角色。
现实世界中的全局照明示例。虽然实际光源只是办公室天花板上的荧光灯,但这种光线被红色文件夹反射,红色文件夹作为辅助光源将白色刺猬纸偶照亮为红色。说白了,所谓全局照明就是间接照明和相互辐射的现象。
以CG 再现全局照明的示例。作为实际光源,虽然只是顶棚照明场景,但光线经过左右红蓝墙壁反射,这些成为二次光源,清晰地将房间内的物体照亮成淡淡的红色。和蓝色。蓝色的。
【Sonic WA】GI技术(一)----静态物体(Object)的GI
静态物体GI采用预先离线计算并将计算结果绘制(烘焙)为纹理的方法。这种利用预先计算好的GI信息烘焙的纹理在开发团队内部被称为【GI纹理】(GITexture)。
在游戏的实时渲染中,使用这个GITexture作为光照贴图。也就是说,作为一项基础技术,由于光照图不会发生变化,因此渲染上不会有额外的负载。
所以,虽然它【反过来与光照贴图没有什么区别】,但是GITexture的生成可以配置场景的背景物体和道具/大型道具物体,或者所有光源如天体光源和局部照明如电灯具可以在整体情况下使用。设置。这是在GITexture上计算的单位(为了解释方便,这里称为GITexel)
[GI纹理]
显示了GITexture 的特殊屏幕截图。仔细观察后,您应该会看到看起来像斑点的斑点。这些是GITexture 的计算单位。
如果您开始从这些GITexel 向适当的方向发射光线(Ray),您将提前计算出每个GITexel 所照亮的光颜色。顺便说一句,虽然发射的光线可能会被阻挡(或与其他物体碰撞)、反射或扩散,但我们开发了一种方法,即使在这些情况下也可以防止计算发散。
我们简单解释一下原理。首先,通过从每个GITexel 发射有限数量的射线(Ray),您可以找到射线与目标碰撞的对象上的GITexel。此时,如果入射角度越接近碰撞物体的法线,即碰撞越接近直角,则线条的密度就会越高,即采用强透光,并且此计算必须从所有GITexels 开始执行。这样做之后,场景中GITexel单元的光传输网络就生成了。
[GI纹理2]
一、生成光网络(第一阶段)
虽然此时尚未进行光照,但必须考虑附加到多边形上的图像纹理的内容。例如,位于带有图像纹理的红色Texel(纹素)位置的GITexel将反射红色光线。这些特征本质上实现了GI效果【红色物体一旦被光照射,就变成了红色二次光源】。
之后,我们开始进行实际的照明计算。常用的光源有定向光源(Directional)、点光源(Point)和天体光(Sky)三种。配置完游戏中出现的三个光源后,进行计算。从这些光源发出的光必须提前计算它到达哪个GITexel(照明为直接光)。这相当于后续GI计算的光能初始值。
[GI纹理3]
因为贴图纹理的Texel大小和GITexel的大小不同(译者注:通常最终生成的光照图的大小会更小,也可以通过“纹理图集”合并到整个图像中),求平均值的过程非常有用。这是必要的,但是在[Sonic WA]中省略了这个计算。在[Sonic WA]中,采用了由与GITexel中心重叠的图像纹理表示的Texel颜色。
使用的光源有平行光源、点光源、天体光三种。
所有光源都布置在实际场景中,就像之前描述的光传输网络一样。
计算过程
1 对于每个GITexel,通过光传输网络对所有直射光进行光照计算,并将计算结果放入缓冲区A。
2 对于每个GITexel,通过光传输网络对所有间接光进行光照计算,并将计算结果放入缓冲区B中。
3 要计算每个GITexel 的光能量,请将缓冲区A 和B 的内容相加。
4 为了在下一个周期重复计算,计算每个Texel发出的光量(使用【光能总量】】来计算)
从(1)到(4)是一次循环操作。
[Tracer注:如上图所示,循环1到4计算的是微平面的入射光能量(作为本次光照计算的结果)与微平面的发射光能量之和(为下一步计算提供) 。当1 到4 的所有微平面处理完毕后,一次光学计算就完成了。 】
关键是每个计算周期都采用双缓冲计算,这样就不会受到计算顺序的影响。如果重复执行此操作,光线将反弹(发出的光线将开始反射),然后反射多次。顺便说一句,(1)到(4)只进行了一次操作,仅相当于直接光照明,因此没有GI有意义的结果。据开发团队介绍,感觉(反思)3次不够,9次太多,4到6次比较合适。
【千里干注:参考光能传递文献,
原文:http://freespace.virgin.net/hugo.elias/radiosity/radiosity.htm
翻译:http://dev.gameres.com/Program/V…ity_Translation.htm
世嘉公司,第二CS研发部,第一编程部,程序员岩崎宏
岩崎先生【在设计上,GITexel的计算单位是可变的。一般一侧为2厘米至3厘米左右。即使白天场景比较粗糙,也不太明显,但是晚上的场景有路灯等照明造成的GI,很容易看到,所以调整时需要更加仔细]
另外,如果发射的光线与具有透射材质的物体碰撞,也会正确透射,并且还必须添加透射材质的颜色进行处理。举一个容易理解的例子,以非洲为主题的马祖里地区的帐篷屋檐。只要看向屋檐内侧,就能看到帐篷的颜色正在隐隐蔓延。
在设计上,虽然GITexel发射的光线数量是可以改变的,但在【Sonic WA】的开发中,很多情况下使用的是250条左右的光线。虽然发射方向是从基点向各个方向放射状,但必须使其在垂直方向(法线方向)较密,在水平方向(切线方向)较稀疏。即便如此,这个GI计算需要对应整个舞台,GITexel上必须发射250条光线。计算量巨大。
据说这样一来,GITexture的计算时间将会是十分之几,最多可以缩短到百分之一,一个阶段的计算可以缩短到一到两天左右。
[GI纹理4]
生成的GITexture 图例
桥本先生【为了这次GITexture计算的分布式处理,组里添加了几十台PC。如果功率不够,那么就必须使用某种特殊的电源。当电力不足时,其他不重要工作站的电源开关就被关闭(笑)。这样就省去了功率增强的工作】
MI-TRACER 的画面
在[Sonic WA]的开发过程中开发了各种工具。其中,生成GITexture的工具名为【GI-TRACER】。此外,还开发了一种名为[MI-TRACER]的工具来支持GITexture的法线贴图生成,以再现精细的不均匀性。 MI是[Micro Illumination]的缩写,是该小组创造的词。
基本的GITexture 是用GI-TRACER 制作的。为了让玩家在接近时能够观察到细微的凹凸,在物体的纹理上使用了MI-TRACER。 MI-TRACER的具体应用主要是在石墙等细微的凹凸处。
计算时间也缩短了,因为生成的GITexture可以放入AtlasTexture中(很多分散的GITexture放入一个大的Texture中,减少浪费),所以节省了纹理容量。但最终还是保存在实际运行内存(On Memory)中,所以无论如何都会变大。
以舞台为基础,一个舞台周围的GITexture总大小在小舞台上约为200MB,在大舞台上约为1GB。在显存不足的PS3和XBox360上保存所有这些是绝对不可能的。然后通过同步Sonic的运动,动态流式传输GITexture并从媒体中读取(如果是PS3,则为蓝光,如果是XBox360,则为DVD-ROM,如果安装在硬盘中,它将是硬盘)。
岩崎先生【而是将游戏中的BGM和声音全部放入运行内存中。虽然有一些与声音相关的容量限制,但分配了大约40MB。一个阶段的BGM和声音使用量就足够了。因为Sonic的速度超过了每秒100米,所以GITexture读取能否跟上有点不安。不过我们设计了GITexture对应的Streaming读取,结果完全没有问题。 ]
下面的截图是只应用GITexture材质纹理、不使用GITexture进行普通光照、在普通光照上应用GITexture的场景对比。
一旦没有GITexture,我们如果再看游戏形状的影响,就会感觉只是放置了物体(Objects),根本就不会有场景的整体感。图像的立体感和透视感似乎也有所欠缺。
一旦添加GITexture,场景中物体的三维位置关系将更容易在视觉上把握,气氛和触感将更容易传达为感知。
[GI纹理5]
仅GI 纹理
没有GI,只是普通的光照(对于很多普通的游戏画面来说就是这样的感觉)
已完成的拍摄,附有GI
另外,GITexture是一种mipmap结构(低分辨率纹理预教导技术,以便应用于远离视点的地方)。读取的GITexture 包括靠近视点到远离视点的位置使用的高质量GITexture。低分辨率GI 纹理。在游戏中运行时,会动态读取GITexture,即GITexture会切换。为了不让外观显得奇怪,必须仔细调整。
[GI纹理6]
GITexture 的mipmap 级别通过颜色区分可视化(按红绿蓝显示级别)
另外,在[Sonic WA]发布后,还发布了额外的可下载内容(DLC),并且作为隐藏内容,还包含了本文中的GITexture的高品质版本。 《Sonic WA》的用户还必须获得额外的DLC。玩完常规阶段后,你可以看到GITexture的质量差异。
【GITexture的品质差异】
上段是release版本的GITexture质量,下段是DLC版本的GITexture质量。
【Sonic WA】GI技术(二)----动态物体的GI
半球光照概念图通过顶点法向量与天球的角度关系来确定天色和大地色的混合程度,并设置环境光。
虽然GITexture的效果很好,但是它不适合移动物体,因为它使用了预先计算的方法。一旦实现,动态角色的阴影将不会与背景融为一体,而是会有漂浮的感觉。具体来说,背景建筑物和小型道具或大型道具物体通过GITexture通过间接光和相互反射来表示,而动态角色只能通过动态(或静态)光源的直接光进行照明(Lighting)。
开发团队认为适合动态角色的GI技术对于这一代主机上的3D游戏图形来说是不可或缺的,并且一直致力于这个主题。动态简单GI方法、GI模拟等代表性技术已投入实际应用。
【马干千里注:文章一直在强调“当代”和“下一代”。一般来说,主流游戏机上市2年后就会被视为“本世代”,而次世代概念游戏机或者刚刚推出的新游戏机,因为性能比现在的游戏机更强,所以被称为“次世代”。一代”。所以它并不是专指某一种类型的主持人,而是一个时代的象征。例如:DC 和PS2 与SATURN 和PS。 】
最简单也是最古老的是设置固定的环境光。这是一种起源于PlayStation时代的技术,是将区域内的光的颜色设置为指定颜色的技术。但所谓的【环境光】只是名义上的。起初,由于阴影只能通过光源的直接照明来产生,在一些需要太暗的情况下,这种技术被用来达到“改善和强化阴影”的目的(即指定一个区域黑色环境光以弥补黑暗的不足)。
这些进化的技术就是【半球照明】。这是一种将场景中预先计算出的GI信息转换为具有两个方向的环境光,并对活动角色添加光照的方法。将上面描述的环境光的概念进行扩展,环境光有两个方向。方法是根据角色在场景中的位置来切换这两个方向的环境光,从而可以表达场景中每个位置的局部间接光和相互反射。
这种半球照明技术也被用在PS3的《合金装备4》中。但在《MGS4》中,关卡设计师手动放置了半球光源,并依靠高超的专业技能来实现。无论如何,半球照明是一种非常经典的技术。
桥本先生【虽然我们进行了各种讨论,但我们决定引入半球照明的概念**。组内有一项名为【光场】的技术,可以自动计算空间中比半球照明的双向环境光更多方向的环境光的配置。
如果操作索尼克在场景中移动,地面的反射会导致索尼克身体的下半部分受到地面颜色的轻微影响。一旦靠近彩色墙壁,索尼克的一侧就会收到来自该墙壁的间接照明,轻轻地添加墙壁的颜色。头上长着茂盛花朵的人物,在阳光直射下也会被轻微染上颜色。如果从图片整体来看,由于GITexture背景以及大小道具物体的阴影符合GI光照,所以即使对于活动物体也可以使用。
[光场]
没有光场(一般游戏画面的感觉就是这样)
只显示光场画面
应用光场后完成的截图
【Sonic WA】采用的【光场】只是在该场景的空间内以适当的距离间隔配置定向环境光。在[Sonic WA] 的实现中,每个环境光都排列成方形光束配置,向8 个方向发射光。感觉就像在舞台空间中以适当的间隔排列着向八个方向发光的光源。
【光场图案图】
光场图案图。在这张图中,虽然设置的环境光只是一个点,但给人的感觉是每个点都向8个方向发光。
[Sonic WA] 的光场在概念上与Valve 的Ambient Cube 非常相似。
为了用一个简单的例子来说明这张图片,角色周围有8 个环境灯照亮。虽然实现方式不同,但概念上与Valve 在《半衰期2》中使用的[Ambient Cube] 和[Irradiance Volume] 非常接近。在【半条命2】中,根据角色平均体积,将空间划分为120cmW计算数据表。在实时渲染过程中,每个角色必须引用其当前位置的Volume,获取其进入Volume 的6 向光,并将其处理为定向环境光。这个想法与[Sonic WA]的光场非常接近。
桥本先生【在Sonic WA中,光场的每个点都有八个方向的环境光作为数据,但是由于Pixel Shader有一个Constant寄存器,与XYZ的六个直角方向转换后,就形成了Lighting。对于环境光跨越8个光场的情况,根据权重对最近的多个光场进行采样并平均,然后进行后续的照明。
这个光场的设置影响了整个舞台。由于设计者必须手动设置这些,因此花费了太多时间,而且准确性也存在一些问题。然后在【Sonic WA】中,使用前面提到的GI-TRACER,你可以把这个光场
d提前计算。 岩崎先生[生成了背景和大小道具对象使用的GITexture之后,使用这个GITexture的场景的light field值也要算出来。light field的大小虽然依赖于场景,大体上把2米到3米为基本,感觉物体很多被配置在建筑物的附近也许会稍微精细些。但是相邻的light field有时同样缺乏变化,因为会归结为一个来处理,所以实际各light field之间的距离是可变长的。] [light field的区域图] 把light field的区域做成可视化的图片。大概可以看明白light field可以用不同的大小来设定吧。 light field的采样不能在活动角色的多边形面上做处理,而是通过各角色设定好的代表点方式进行处理。这个代表点高度一旦过高,就会影响从下方来的光源,会影响到角色的上半身发生不协调,所以要根据每个角色进行适当的调整。还有,在索尼克的世界观中,没有多少巨大的角色登场,不用考虑在纵方向上跨过多个light field的处理 桥本先生[其实根据材质的不同,不只是法线方向的light field,也要参考和视线向量相对的反射方向的light field。由于这样做,对面的环境光在浸透后也可以在这边溢出,出现微妙感觉的阴影效果] 把逆光渗透到这边的一样的表现称为边缘光(Rim Lighting)表现。边缘光表现,通常是和光源对视时一样的,大多情况是在容易看到逆光时用来作追加高光的效果。[索尼克WA]中,也要在逆光位置的light field上进行边缘光的表现。因为这样做,就好像场景的间接光中也能表现出像是表面散射那样的淡色阴影和透明感。进一步说,能够表现出活动角色在哪个场景中融入GI的感觉,特别是这个效果在开发组里称之为[GI边缘光]。 GI边缘光(Light Field Rim Light)的概念图 [GI边缘光] 无边缘光 只有GI边缘光 完成画面 岩崎先生[虽然也讨论过把这个light field用球谐波函数(SH :Spherical Harmonics)来实现的方案,但考虑使用的内存容量和得到的效果平衡时,很清楚这是没有意义的,所以不再采用了。我们实现了拥有8个方向的环境光,即使不使用SH也可以得到足够的品质。] 球谐波函数作为把分布在全方位放射状的数据值不可逆的压缩手法,在3D图形的应用上发展着,但即使使用球谐波函数第二项,也需要9个必要的系数,所以想要实现的(场景)主题和数据量,以及不能很好的计算平衡性,还是放弃掉比较好。[索尼克WA]的情况中可以说正是那样吧。(阅读Real Time Rendering 3rd P320 获得更多资料) [索尼克WA]因为有很多跑着穿过的动作镜头,不留神的话,也许就会有用户没有注意到这个GI系统的优点。虽然对游戏的进行是没有意义的,但还是希望让索尼克接近游戏世界里的各种背景物体,以确认这种独特的环境感的Lighting。还有,在过场动画(实时Movie场景)和村子的任务场景里,因为能有效的观察,应该可以同时享受村内探索和探索GI系统的效果。 [完成场景] 背景只有GITexture的状态 索尼克只有light field的状态 GITexture的静止影子 完成画面 [索尼克WA]中HDR渲染技法 [索尼克WA],沿袭了近年来3D游戏图形的趋势,当然,也采用了HDR(High Dynamic Range)的渲染。特别是[索尼克WA]几乎全部的场景都在室外,而且要用让玩家能容易区分[昼夜]时间变化的形态来表现,特别是要活用前面提到的HDR渲染的效果。 在PC上说起HDR渲染,现在从16位的浮点的FP16-64位buffer虽然成为了标准的定义,但在本世代家用机很多是采用了8位整数的int8-32位buffer。上次报道的[METAL GEAR SOLID4]也是那样。本世代的家用机的GPU,XBox360和PS3都是用128位的总线连接显存,只有PC的主流GPU的256位总线一半的带宽,很多情况会作出这样的选择是因为填充率不够。 岩崎先生[索尼克WA的HDR渲染,是整数8888的int8-32位buffer配置, XBox360和PS3都是共通的。把0.0-0.2在0-255上分配,就成了所谓的疑似HDR渲染。虽然在开发初期试着使用了FP16-64位,但性能太紧张,就做成了现在的配置。] [HDR渲染表现] 上段关闭HDR渲染表现,下段开启HDR渲染表现 这个正好和[女神侧身像2]等的实现方法相同。这个方法和用通常的LDR(Low Dynamic Range)渲染,把0.0-0.1的亮度分配到0-255上相比较,虽然分辨率只有一半是个弱点,但在[索尼克WA]中,游戏时基本上没有马赫带((Mach bands)的现象。 桥本先生[索尼克WA的情况,没有那种高亮度的震动场景,用最大辉度2.0已经足够了。马赫带不显眼,大概是因为表现单调的物体做的比较少的原因吧。] [索尼克WA]的HDR渲染,虽然是用模拟方法实现,但因为亮度2.0作为“真实”HDR渲染,渲染结果显示时,在适当的阶调范围内,进行toon mapping的工程就有必要了 比如说,进入桥梁下面等昏暗的地方,就会慢慢看到暗处的阶调,面向太阳的景色就可以看到白光溢出。反过来,一旦从暗的地方出来到明亮的地方,光溢出位置的细节就可以慢慢看到。在玩游戏时,注意到这样的HDR渲染Toon Mapping的表现效果的人大概很多吧。 [Toon Mapping] 从明亮的地方到暗的地方,还有从暗的地方到明亮的地方。Toon Mapping的效果很受注目。 [索尼克WA]的Toon Mapping处理,首先获得当前frame的平均亮度,再把这个值用适性阶调来修正, 是一种很正统的技术。但是,在地图内特定的地点,需要配置专用的bounding box,实时的计算平均亮度,再加入补正做调整。 【千里马肝注:HDR不是一个可以放之四海皆准的渲染手法,容易过暗或曝光过度,如何能适配不同场景不同地点,就需要人肉了。】 桥本先生[这些都是为了容易操作游戏的考虑,为了让玩家清楚的看到场景的表现,虽然还有许多理由,不过调整还是必要的啊。原本设计师描绘的纹理,在设计时用适当的颜色来着色,但这些在阶调等级调整中,也有可能会出现那种不能恰当发色的情况。] HDR渲染中的经典效果有高亮度溢出表现[bloom]和[star]的表现。在[索尼克WA]中,采用了本世代中成为趋势的缩小buffer的实现。具体的把frame中的高亮度部分在多个不同低分辨率的buffer中抽出,对于这些应用高斯路径,再用bilinear-filter扩大为统一尺寸进行合成。Star效果也是在低分辨率buffer中抽出高亮度部分进行旋转或压缩,把这些展开后合成,就是把高亮度部分放射状伸出的手法了。[索尼克WA]中Star表现的放射方向是4到7个,主要用在夜晚的场景中。 [后处理(post process)效果] 夜晚的场景,很容易看明白Bloom和Star等HDR渲染带来的后期处理效果。在玩游戏时那些效果也很受注目! 夜晚索尼克的[WereHog]毛皮(Fur)的秘密 要说起[索尼克WA],索尼克的变身是个热门话题。本作中索尼克到了夜晚就会变身成狼人风格的[WereHog]。一旦变成这WereHog,就成了四脚爬行着跑,能用特殊的手臂伸长动作。迄今为止的索尼克系列中都不曾看到的独特的游戏操作虽然让玩家很享受,从3D游戏图形的观点,WereHog的毛发浓密的姿态很勾起人的兴趣。 [索尼克WA]中变成WereHog时的毛皮表现,全都是使用了[Fur Shader]。Fur Shader虽然有几个手法,但WereHog上采用的是把毛的断面图做成纹理,在3D模型的表皮多边形上叠加多层的手法。采用了所谓的[Shell方式的Fur Shader]。 Shell型的Fur Shader也使用在[旺达与巨像](SCE2005)的巨像的毛皮表现和[失落的星球](卡普空2007)的防寒服的领子的毛皮表现中,因为是比较主流的手法,看到的机会也很多。 【千里马肝注:HD复刻版[旺达与巨像]已登陆PS3。失落的星球2也登陆了PS3。】 岩崎先生[毛皮(Fur)的层数大概是15层左右。开发时,设计师可以调整层数和毛的密度等。为了应用在毛皮上,把Shell多边形设置为在引擎里动态生成的结构。所以在建模阶段的角色是没有多层外皮多边形的。事件场景和游戏中,层数是变化的,在事件场景中角色很多情况会大幅度增加,所以层数就要多做。 岩崎先生[毛皮的层数大概是15层左右。开发时,设计师制作了层数和毛的密度等都能调整。因为适用了毛皮的外皮多边形在引擎方面作为动态型生成的结构,所以在建模接的角色中没有多层外皮多边形。事件场景和游戏中,层数是变化的,因为事件场景中角色的特写镜头多层数也会比较多。 [Fur Shader] 毛断面纹理的图例 创作阶段没有毛皮的WereHog 调试画面中登场的没有毛皮WereHog 应用上毛皮的WereHog 因为[旺达与巨像]中是3到6层,[失落的星球]的防寒服上是8层左右,WereHog皮毛的Shell会相当多。因为 “长毛”WereHog的身份,在这里要强调处理。 还有,这样做出的[动物毛皮]的表现中,使用Shell方式来表现毛皮在密度上会不足,还有因为位置关系,顶部附近的毛感觉密度不足,把描绘了侧面毛的纹理应用到多边形上再植入角色,和Fin类型的毛皮共通使用的情况很多。 [Fur Shader 2] NVIDIA的演示。没有毛的模型 只有Shell方式的Fur shader Fin类型的毛皮 最终效果 岩崎先生[Fin类型虽然是我们在开发阶段就尝试加入的技术,但因为[索尼克WA]的WereHog使用的Shell方式的毛皮层数很多,没有觉得毛的密度不足,就没有采用(Fin类型毛皮)] 此外,WereHog的毛皮表现,也加入了其他细致的有趣方法。那就是在毛皮的断面纹理上,提前加入了毛的倾斜信息,把这个断面纹理应用到各层的shell多边形,这个倾斜情报就会产生挪动效果。根据各层上微妙的毛断面纹理偏差,实现了毛沿着一个方向倒着生长的表现。这个就是[毛的样子]的表现生成。 [Fur Shader 3] 关注WereHog的毛的样子,因为Fur Shader的方法毛倒竖着 注意WereHog在手臂周围的毛的方向和手腕周围的毛方向是不同的,这些就是由这种方式来实现的。 桥本先生[这以外,还在毛梢上作出镜面一样的阴影处理,还有内侧的下层Shell的周围因为被遮挡,所以加入了毛梢明亮一些,毛根会变暗的阴影调整。[索尼克WA]的毛皮虽然感觉相当好,但是,会有在景深的表现产生模糊时,毛也会变得模糊就不自然的问题。这个可能是shell方式的Fur Shader的弱点吧,应该如何解决是今后的课题啊] [景深(DOF)效果] 上图是关闭景深效果。可以很清楚的看到毛的样子。下图是开启景深效果。毛和背景一起模糊了。 [索尼克WA]图形的其他看点 Valve开发的Half Lambert Lighting 在[索尼克WA]中,有很多有变化的人类角色作为NPC登场,在lighting上,应用了由Valve实用化的Half Lambert Lighting。 Lambert Lighting用在扩展反射的阴影处理,不依赖视线方向,由光源入射方向和表面方向(法线)计算出阴影的处理方法。这个技法使用[位置的亮度,与这个面的法线与光的入射方向夹角θ的COSθ值成比例]的[Lambert余弦定律]来定义,但实际上一旦使用这个lighting, 明暗就会出现相当强烈区别的倾向。 VALVE为了得到与GI相似的扩散反射表现,使用了在这个剧烈变化的Cos Curve加入了bias来提升黑暗部分阶调的方法。Lambert余弦法则的Cos Curve(-1,1),乘以 “1/2”变成了一半(-0.5,0.5),加上 “1/2”(0,1)并平方,用这个平缓的Curve做阴影处理。被称作[Half Lambert Lighting]。 这个Half Lambert Lighting,于[索尼克WA]的GITexture和light field的模拟GI配合的很好,Half Lambert Lighting稳定的阶调表现加上从light field来的淡色阴影的调和,确实酝酿与 [皮克斯]相似的视觉感。 [Half Lambert Lighting] 左图是通常Lambert Lighting的测试截图。阴影过浓,人的皮肤会发黑不自然。右图是在半成品中使用的Half Lambert Lighting的画面 还有,为了能让人更容易看到法线贴图产生的细微凹凸,从视点位置打了淡淡的光[Camera light].由于这个手法,即使只是从起点稍微移动,也容易看出细微凹凸的高光变化和细微凹凸感。虽然是细小的技术,但在光量少的地方,通过法线贴图来生成细微凹凸表现,无论哪个工作室都会觉得这是辛苦的部分。这个Camera light的技术虽然很单纯,但效果很好。 [Camera light] 上面是关闭Camera light。下面是开启Camera light。在墙壁和地板的法线贴图上出现高光,看起来更立体。得到了接近电影的照明效果。 【千里马肝注:小trick来了,虽然是卡通风格,但也使用了normalmap来表现物体的凹凸,但在游戏中观察时,往往不像使用模型查看器中那样,近距离而且会特地在物体正面打一盏灯来观察。所以本作使用了所谓Camera light的方法,不论实际光源离物体多远,角度多么接近平行,但始终在Camera处有一个light来影响,那么“面对Camera或者称作法线垂直于Camera、画面近距离”的物体的normalmap就更加醒目了。】 [索尼克WA],虽然不是以和水面的互交作用为主的游戏,但由法线贴图生成的轻微水波效果,由Fresnel反射进行水底和水面的镜像的控制等,做出了相当好的水面表现。 岩崎先生[当初开发轻微水波时使用Parallax Mapping,实现了相当立体的微波表现。但是,GPU的负荷也出了问题,以决定由现在的法线贴图来表现。 [水面表现] [索尼克WA]的水面表现很美。Fresnel反射的效果和动态形角色的镜像都会很好的显现,试着去观察吧。 附加---PS3版和XBox360版的辛苦开发 一边画图一边说明的桥本先生 虽然在最后的游戏规格上,PS3版和XBox360完全没有差别,但在开发阶段有着各自特有的辛苦。 首先,XBox360版的DVD媒体的容量紧张。要是除去系统等占有的容量,游戏内容能利用到的是2层媒体大约6.2GB。把本世代的高画质游戏内容塞到一张DVD中是相当辛苦的。还有,XBox360因为发售了没有HDD硬盘的主机,所以必须做出只用DVD就能运行,没有使用把压缩的内容在HDD上展开的方法。微软发表XBox360时,主张[次时代游戏媒体不是光盘而是网络],虽然采用了不是次世代光媒体的DVD-ROM,但那个决定对开发方没有给出很好的影响。 XBox360的GPU因为是3个PowerPC970互换Core让两个hardware thread启动,最多可以同时运行6个线程。[索尼克WA]上,线程0到5的6个线程中,按线程0是主线程,线程1和2和4是HAVOK,线程3是控制动态加载使用,线程5是数据管理处理来分配的。 因为也有XBox360版先登场的关系,游戏制作没有对XBox360版进行基本设计,而是使用同时移植的形式来做PS3版的开发。 荻野先生[PS3版的开发很困难,在XBox360已有程序库中的机能和函数都要对应移植到PS3上。主内存的处理也很费劲。PS3上的DMA情况,数据是用128byte border,一旦不匹配就不能发挥性能。而且和XBox360的512MB内存自由的使用不同,PS3中分成了主内存256MB和显存256MB。] PS3版标准光媒体因为是蓝光,即使是1层也有25GB的容量。正因为这样,虽然不会像XBox360那样媒体容量紧张,但在PS3上主内存不足的问题却浮现出来了。 最后,虽然主内存怎样做都不够,但PS3的有搭载HDD硬盘,可以作为虚拟内存来使用,于是决定活用这个机能。在[索尼克WA]中,结果是使用了HDD硬盘的256MB作为虚拟内存,和主内存方面的50MB范围作**来活用。被放在虚拟内存的有Audio,PVS判定, HAVOK的POOL,字体和文字信息,HUD数据,存盘记录数据,RSX(GPU)的管理领域等。 荻野先生[这次的PS3版的开发中,SCE提供的程序库Playstation Edge起了很大的帮助。包括这个,把CELL处理器的SPE(Synergistic Processor Element)在Vertex Shader上活用的Edge Geometry也显著活跃着。不止是Culling,特别是Skinning的效果很厉害,是只用RSX处理的10倍以上吧。虽然和XBox360版有很多的数据是共通化的,但因为活用了这个Edge Geometry的关系,3D模型数据等都施加了PS3专用的优化。] PS3的CPU,CELL处理器里,能够实际运行的SPE搭载了7个,不过PS3版的[索尼克WA]中SPE使用的方式,SPE1和SPE2为系统活用,空闲时SPE2运行Audio System。SPE3到6是HAVOK和Playstation Edge等,SPE7负责绘制的管理。 3D游戏图形的Lighting向GI的方向进化着 桥本先生郑重的一边用demo演示一边进行各种实现技术的解说。 最后,作为索尼克开发组,请教关于今后的3D游戏图形的动向和想尝试挑战的技术。 桥本先生[一说到关于GI的话,能习惯处理镜面反射的信息就好了。现在我们的GI技术中要处理的只是扩散反射。关于使用球谐波函数之类,或是在场景内物体对象面单位加入光进入的信息,我想一定会做出非常漂亮的光泽。手动的在空间里配置多个立方图的方法虽然也有,但不想让艺术家在这里手动设定,而是考虑作出全自动生成数据的系统。而艺术家在这上面有调整的余地最好。作为相关的话,虽然也打算做出接近最近流行着的[Radiosity Normal Mapping]概念的效果。但在开发时期的情况中完全省略了。感觉我们的Lighting计算系统的实现比较容易,我想不久的将来就会做。之后是实现动态的GI吧。现在已经在Demo级别出现了,我想在次世代机那样的性能,一定可以做出来吧。要是让我对现场人说的话,希望次世代机在架构方面不要有太大的改变。内存更多性能更高更便宜,希望是在现有架构上进化一样的产品(笑)。] 本世代机的3D游戏图形,在本连载中也指出了[HDR渲染][动态阴影生成][根据法线贴图的细微凹凸表现]的[三种神器]是必须流行的特征,[索尼克WA]加了这三种手法以外,以现实形式挑战了实时的全局照明(global illumination)。 虽然GI绝对不是使外观华丽的技术,但因为能做出[完全是游戏的CG]的视觉,让人们看起来画面中的人们好像真的实际气息一样的[真实感],确实隐藏着把影像的真实感推上好几个等级的潜力。 这次[索尼克WA]采用的实时GI系统,在本代机上能合理的运行,而且效果也提高了。今后,我预感会有很大的变化即将到来,那么一起在刺猬引擎的进化中期待吧!
用户评论
终于看到关于《索尼克世界大冒险》图形设计的讲解了!一直觉得这作画面风格非常棒,现在想了解一下是怎么做出来的,期待这场讲座能让我学到更多。西川善司老师可是很厉害的,他的作品一直都很让我印象深刻。
有14位网友表示赞同!
太激动了!我一直很喜欢《索尼克世界大冒险》的游戏,特别是它的画面风格,很有活力和个性。 看看谁说索尼克画风丑?这绝对是游戏的灵魂所在!西川善司老师一定会带来精彩的讲解!
有9位网友表示赞同!
对制作团队的努力感到敬佩。 这种充满活力的图形设计 really 给游戏带来了更强的代入感,让玩家能更好地沉浸在游戏中体验冒险的乐趣。 西川善司讲座,一定要去听!
有7位网友表示赞同!
其实我很喜欢这部电影里的索尼克,但我始终没理解为什么画面风格会像这样,现在终于有机会知道背后的故事了! 感兴趣的是学习如何将2D动画风格应用到3D环境中,希望能从西川善司老师身上学到更多。
有5位网友表示赞同!
我一直觉得《索尼克世界大冒险》的画风有点用力过猛,感觉有些不协调,希望西川善司老师能解释一下设计思路,让我更好地理解这个风格选择.
有17位网友表示赞同!
我很期待能听到西川善司老师对游戏图形设计理念和技术的深度探讨。 现在的游戏画面越来越逼真,但我更喜欢像《索尼克世界大冒险》这样带有独特风格的画风。
有18位网友表示赞同!
看了标题后就想报名参加!我以前做过一些类似的图形设计项目,西川善司老师的经验绝对能给我很多启发。
有19位网友表示赞同!
讲座主题很吸引人,我一直想深入了解一下游戏图形设计的技巧和流程。 从西川善司老师这儿可以学习到许多实用的知识,期待他的分享!
有16位网友表示赞同!
我对西方卡通风格的游戏画风不太熟悉,希望这个讲座能开阔我的眼界,也能让我更好地理解《索尼克世界大冒险》的艺术风格选择。
有18位网友表示赞同!
听过西川善司的其他作品,很喜欢他的风格。这次讲座应该会很精彩! 我也对《索尼克世界大冒险》 的剧情和游戏性都很感兴趣
有5位网友表示赞同!
我一直觉得很多游戏的画面设计都过于追求逼真,失去了创意和特色。 《索尼克世界大冒险》的画风就很好,非常有记忆点,希望能从中学习到一些灵感。
有16位网友表示赞同!
这个讲座听起来很有意思,我希望能从西川善司老师那里学到一些关于游戏图形设计的实用技巧,我也想了解一下他们团队是如何实现这种独特视觉效果的。
有17位网友表示赞同!
我对游戏画面设计很感兴趣,不过《索尼克世界大冒险》的画风我不是很感冒...
有18位网友表示赞同!
我很想看到西川善司老师如何结合现实与虚幻,创造这些充满活力的图像风格! 期待这场讲座带给我新的视野。
有14位网友表示赞同!
终于有人讲解了《索尼克世界大冒险》的图形设计!我对这个游戏印象深刻,尤其喜欢它的角色造型和场景渲染,希望从西川善司老师的分享中能学到更多背后的秘诀。
有13位网友表示赞同!
期待西川善司老师能够详细讲解这种独特风格的设计理念和实现手法,希望能带来一些启发!
有9位网友表示赞同!
虽然《索尼克世界大冒险》不是我最喜欢的游戏,但这个讲座的主题还是很有吸引力的。 我对图形设计的原理以及如何将艺术与技术相结合一直很感兴趣,希望能从西川善司老师身上学到更多。
有19位网友表示赞同!