GDC2017【神秘海域 4】中所使用的顶点着色器技术


 
会場:San Francisco Moscone Convention Center

 
Naughty Dog的Lead Technical Artist、Andrew Maximov氏

    在 GDC 2017的最后一天, Naughty Dog在题为【 Technical Art Techniques of Naughty Dog: Vertex Shaders and Beyond 】的分享会上,对公司的人气动态作冒险游戏【神秘海域4( Uncharted 4 )】的Vertex Shader(顶点着色器)的使用实现的要素作了解说。

    登场解说的,是 Naughty Dog的 技术美术组长( Lead Technical Artist) Andrew Maximov。 Maximov所列举的【 神秘海域 4 】的粒子着色器所作的内容,至关的丰富和有意思。

    此次是基本上是沿袭 SIGGRAPH 2016上的内容,不过由于是 GDC 2017最后一天最后的一个主题,会场里包含站着听的开发者彻底的满员,不得不进行入场的限制。

    所谓的 Vertex Shader是什么呢 ,在最近GPU上的支持了没有分工区别的统一渲染架构的Unified-Shader的同时,由于计算阶段也被细分化了,不能简单的来区别了,传统的GPU绘制图形进行演算的部分,Vertex所指的是负责的3维顶点的计算,到写入到缓冲部分的计算单元。而此次分享中提到的Vertex Shader,也是如此做为上下文来使用。而后为了绘制实际的图形,经过Pixel shader的运行,得出画面上像素的颜色后,来进行绘制。

   现代的Vertex Shader是把3D的顶点数据的集合,转化为相机所看到的2D的顶点数据,在制做“绘制元素”时,把美术师制做的原始的3D的形状和颜色数据进行加工,就能够动态的制做出变化的形状和颜色。这部分Shader有着程序化(Procedural)的意义在里面。能这部分作好,实现与其余游戏的差别化,有着很是重要的意义。


【Uncharted 4 General-Purpose Vertex Processing - Naughty Dog】
Uncharted 4 General-Purpose Vertex Processing - Naughty Dog.mp4

    在【神秘海域4】中实现的颇有意思的,是经过几种基本系统的组合,制做出丰富多彩的变化。以此为大前提,在总体的空间,有着控制风的风系统(Wind System)。

    
    组合这个风系统的对象,有着以一点为中心轴(Pivot)进行变形的元素,具体来说就是以草木树枝的根为中心轴来弯曲的那样的白哦先。可是,草木随风的飘动,不光有风系统的影响,像叶子顶端激烈的晃动,是经过激烈切换法线贴图,用法线的凹凸表面来实现动画效果。这样把每一个局部的动做用适当的技法组合来实现的。

    另外,使用Wind System和Pivot制做的动态效果,不光只有背景。角色的毛发和衣服随风飘动的样子也是受风系统影响的。另外毛发还受重力变化的影响。在毛发干燥的时候,是不受重力影响的,而是跟随风系统随风摆动的,而切换到下雨的场景里,头发被雨润湿后受重力影响运动也变得沉重起来。为了实现这种变法,角色在一般使用的法线贴图外,还要准备其余用途信息的法线贴图。

【头发的Pivot受风的影响控制】
 
 

    衣服飘动时候的处理也是,利用了方向信息的扩展贴图。并非 整个衬衣 受风力控制,把飘动的那部分皱折 用Mask的方式用法线来做出 皱折 的形状。而后再经过与向下Scroll的2轴向的2D法线进行混合,来做出衣服受风运动的效果。

【风对衣服的影响】
 
 
    在垂直的旗杆挂着的旗子的飘动表现,也是采用的相似的方法。旗子飘动,是参考的保存在顶点颜色中的值,经过对描述的在无风状态下沿着旗杆下垂的状态和受风影响彻底横向飘动状态之间作变形(Morph),再与风系统影响的动做作混合来表现。另外那种水平放置的旗杆,旗子垂下的状态,是经过Pivot和法线的来进行风的模拟的。

【重力对头发的影响以及旗子的飘动】
 

    变形方面,又称做“Step Morph”,在脚底起伏所产生的步调的变化,足迹和脚下地面的变换,尘土粒子的控制上也被使用了。另外还有碰撞所产生的汽车的变形,是预先在顶点颜色里保存表现碰撞产生的凹凸的坐标信息。用变形状态的变化管理在Render Target中写入损坏值。在经过损坏值来对车体表面进行变形,称做“Skinned Morph Target”。

【地面的変化】
 
 

【汽车碰撞的变形】
 
 

【飞行物的控制】
 

     除了这些实现以外,为了能充实细节,控制降雨强弱的信息,也保存了做为Scale值的动画数据,再参考这个值自动变化的来使用RayCast,水面上浮动的小船和水面的涟漪的表现,能够根据小船上下移动和左右旋转的偏移自动的生成。

【雨天/水面的控制】
 
 
【人群的控制】
 

   在下降渲染处理负荷的措施上,例如Billboard的特效动画,加入了相机看不到的像素就不会描绘的优化。还有为了避免会产生特效纹理的分辨率的低劣化,最低也会使用一半数据尺寸。也加入了跟随玩家角色的移动,增长角色包围网格范围内草的生成密度。
    
【负荷下降 / 优化】
 
 
 
 

    除此以外,还有不少的“小技巧”,都是使用顶点着色器的功能来实现,每一个都不是什么高级技术,不过实现了那么多要素,不得不佩服这些复合技术的使用。

     Naughty Dog的下一款做品预订为【最后的生还者2 The Last of Us Part II 】,虽然游戏风格不一样,但能够肯定的是下一款做品中确定会实现更高密度的信息,很是的期待【 The Last of US II 】以及【 Uncharted 】系列的续做。
相关文章
相关标签/搜索