MCPLive > 杂志文章 > AMD TressFX技术解析与实际体验

AMD TressFX技术解析与实际体验

2013-04-26林以诺《微型计算机》2013年4月下

在经过多年以来的发展,3D游戏的画面质量已经获得了长足的进步,很多场景几乎可以以假乱真。然而,回想一下我们熟悉的游戏,就算在公认的具有极高画质的《孤岛危机3》、《战地3》等游戏里面,我们可以说“光影效果逼真、纹理细腻、建模精度高”,但是几乎没有说“人物表现真实”。相信这里面有很大一部分原因就是人物的头发实在是太假了,甚至我们可以说那根本不是头发,只是一顶塑胶帽子而已。为了不让整体画质受到“塑胶帽子”的拖累,游戏厂商通常都巧妙地运用剧情把角色的头发隐藏起来—设计一个光头形象或者是戴上头盔。

在硬件性能高速发展、图形接口不断升级和完善的今天,出现了诸如曲面细分、环境光遮蔽、平面光源等高级效果。但为什么游戏中人物的头发依然僵硬呢?这得从毛发渲染的难点说起:

一、数量众多

正常人拥有大约10万根头发,就算剔除掉遮挡并且把头发按照“缕”而不是按“丝”来处理,所需要的计算量也是非常可观的。

二、光照和阴影难以处理

喜欢摄影的玩家都知道用侧逆光能勾勒出模特美妙的头发边缘。因为头发其实是半透明物体, 对于半透明的物体处理起来本身就非常复杂,再加上我们必须处理好头发的阴影,否则看上去一点立体感都没有。

三、需要大量物理计算

头发是非常柔软的物体,无论是随风飘动还是跟随人物头部的运动做出相应的反应都需要物理计算的帮助。而以现有的硬件机能处理数以万计的毛发物理效果很难满足实时应用的要求。

四、需要特殊的抗锯齿算法

发丝在屏幕上终是以曲线的形式表现出来的,如果不进行抗锯齿处理,可以想象画面的质量会有多么的糟糕。然而由于头发非常细小,很多时候也许只有几个象素甚至一个象素的宽度。因此,常规的通过对物体边缘附近多个象素采样并进行模糊的抗锯齿技术难以奏效。正是由于以上种种原因,我们至今都很难在实际游戏当中看到处理得很自然的毛发。不过有几个关于头发的DEMO值得回顾一下。首先,是2004年的Nalu(图1)。这款DEMO在DirectX 9.0时代是展示图形技术的经典范例。虽然Nalu集合了HDR效果、凹凸贴图、柔和阴影等当时先进的图形技术,但是对于普通玩家来说,印象深刻的无疑是Nalu在水中四散飘扬的长发。在这个示中,NVIDIA首先使用暴力堆砌顶点的方式构建了她浓密的头发。继而配合“深度阴影”及HDR技术勾勒出了高光和阴影细节,使得头发看上去立体感十足。后NVIDIA为每根头发都设定了物理状态,因此我们可以看到Nalu的长发在水中展现出较为软、真实地摆动。当然,若是以现在挑剔的眼光来看Nalu,我们会发现她的发丝非常粗,并且间距很大,换句话说就是细密程度不足。

Nalu的长发让许多玩家难以忘怀
Nalu的长发让许多玩家难以忘怀

Hair通过DirectX 11的曲面细分技术生成浓密的长发
Hair通过DirectX 11的曲面细分技术生成浓密的长发

A New Dawn中NVIDIA使用的曲面细分以及特殊的抗锯齿算法获得了迄今为止好的实时毛发渲染效果
A New Dawn中NVIDIA使用的曲面细分以及特殊的抗锯齿算法获得了迄今为止好的实时毛发渲染效果

我不是AMD牌洗发水,我是TressFX毛发渲染技术
我不是AMD牌洗发水,我是TressFX毛发渲染技术

从左至右分别为《古墓丽影》(1996),《古墓丽影2》(1997),《古墓丽影:周年纪念》(2007),《古墓丽影:地下世界》(2008)的游戏画面截图。
从左至右分别为《古墓丽影》(1996),《古墓丽影2》(1997),《古墓丽影:周年纪念》(2007),《古墓丽影:地下世界》(2008)的游戏画面截图。

《古墓丽影9》是第一款支持TressFX技术的游戏

《古墓丽影9》是第一款支持TressFX技术的游戏

TressFX完全重塑了劳拉的头发
TressFX完全重塑了劳拉的头发

在对头发光影的表现上TressFX技术远超传统方法
在对头发光影的表现上TressFX技术远超传统方法

近距离下观察,TressFX的细腻程度还有待加强。
近距离下观察,TressFX的细腻程度还有待加强。

TressFX之BUG1—头发居然穿过了箭筒
TressFX之BUG1—头发居然穿过了箭筒

TressFX之BUG2—头发永远不会接触肩膀和背部
TressFX之BUG2—头发永远不会接触肩膀和背部

《古墓丽影9》TressFX性能测试帧数曲线
《古墓丽影9》TressFX性能测试帧数曲线

我们要回忆的第二款DEMO是2008年的Hair(图2)。它使用了DirectX 11 API,与Na lu采用暴力堆砌顶点的方式不同,Hair充分利用了DirectX 11的曲面细分技术。实际上仔细观察图2我们可以看到,Hair中的头发其实是按照“组”来进行处理的,每组中真实的头发只有一根,其他都是通过曲面细分扩展出来的。并且在每组头发中只对那一根真实的头发设定物理状态,其他扩展出来的头发都只是跟随着这根真实的头发一起摆动,这样的做法既能呈现出浓密的头发,又能降低对硬件资源的消耗,可谓一举两得。

虽然Hair的头发模拟效果在2010年无可匹敌。不过和两年后的A New Dawn(图3)相比就是小巫见大巫了。NVIDIA在A New Dawn中为仙子设置了40000根头发,因此看上去十分浓密。并且由于曲面细分的级数更高,头发上的顶点也更多,所以在弯折的时候表现出更加柔的效果。此外,仔细观察Nalu和Hair里面的头发我们能看到较为明显的锯齿。而在A New Dawn中,NVIDIA使用了一种能根据发丝方向进行模糊的后处理式抗锯齿算法,从而获得了十分平滑的效果。可以说A New Daw n在毛发处理上的水准已经登峰造极了。

作为NVIDIA直接的竞争对手,AMD在毛发渲染方面除了DirectX 9.0时代的“黑猩猩”Demo外几乎没有拿得出手的作品。然而在2013年2月,AMD的网站上突然出现了一副神秘图片(图4),联想到之前先后推出自有品牌的内存和SSD产品,难道这次又要出洗发水了?事实上,我们都知道这肯定是AMD的某项和毛发渲染有关的图形技术。很快,在2月26日,AMD正式发布了TressFX技术。

按照AMD的介绍,Tress FX技术通过Direct Compute接口进行编程,能够充分发挥出GCN架构(Graphics Core Nextarch itecture)的大规模并行计算能力从而获得以往需要预先渲染才能实现图像品质。同时TressFX基于当前的OIT(Order Independent Transparency,无序透明度)工作,也适用PPLL( Per-Pixel Linked-List,每像素链表)数据结构来管理内存使用和渲染的复杂度。

另一方面,Direct Compute还要负责处理实时物理计算。在Tress FX的物理系统中,每束头发都是一条拥有几十个节点的链条,从而能够模拟出重力、风力以及人物移动对头发的影响。此外,碰撞检测机制保证画面不会出现类似一束头发穿过另一束或是其他固体(比如背包、衣物)的奇异现象。

AMD推荐使用Radeon HD 7000系列显卡来运行搭载Tress FX技术的游戏,不过却非常大方地没有把竞争对的产品拒之门外,只要是支持DirectX 11的显卡都能启动Tress FX。更让玩家激动的是,与其他许多先进的图形技术仅仅只是纸面发布,却迟迟得不到实际应用不同,第一款搭载TressFX技术的游戏《古墓丽影9》已经于2013年3月5日正式发售。

著名的《古墓丽影》系列诞生于1996年。在对游戏人物进行设定的时候,已经厌烦了硬汉充当主角的Core Design小首席图像设计师提出创作一个女性冒险英雄的角色,再加上英国的贵族风格,劳拉诞生了。受限于当时的硬件机能,《古墓丽影》第一个版本仅用了约250个多边形来构建劳拉的身体。尽管如此,为了突出其女性身份,制作组还是为劳拉设计了一个长发的形象。当然,以今天的眼光来看,第一代劳拉的头发基本上就是几个多边形加上简单的纹理填充,如果不是看到那一小段扎头绳,我们甚至都不能分辨她到底是不是长发(图5)

在此之后,《古墓丽影》系列不断有新作上市,尽管硬件性能的瓶颈一直未能突破,制作组还是花费不少精力来处理每一代劳拉的长发。这使得《古墓丽影》系列对头发的处理一直领先于同时代的其他游戏。由图5的对比我们可以明显地感受到12年来(1996~2008)毛发处理技术的巨大进步。在《古墓丽影:地下世界》中我们甚至已经能够清晰地分辨出劳拉的发丝,尤其是鬓角部位已经做得相当逼真了。只不过她的马尾辫实质上仍然是一个整体,永远都不会散开,因此绝不会有Nalu或者Hair这两个Demo里面飘逸的感觉。

TressFX画质对比

简单地回忆过后,我们马上进入《古墓丽影9》,看看AMD的TressFX技术能否重塑劳拉的秀发。我们只需在影像选项->进阶->头发品质中选择Tress FX就能开启这个特效(图6)。

由图7可以看到,传统的头发处理方法依然是简单的顶点堆砌加上贴图,这使劳拉的头部轮廓棱角分明,尽管在鬓角部位也有单独处理的几缕散发,不过马尾辫就像是被胶水黏在一起,即使有风吹动也根本不会散开。

而开启Tress FX后我们的第一感觉就是劳拉的头部轮廓不再棱角分明,而是变得十分圆滑,这说明她的长发与现实当中柔软的头发会自然贴近头部是一致的。另外,我们也不难发现,开启Tress FX后“头发丝”取代了以往的“宽面条”,无论是鬓角还是颈后的发丝都分毫毕现。同时在海风吹拂下,劳拉的马尾辫随风飘动,呈现自然的散开状,显然这离不开复杂的物理计算。不过在光影效果上,Tress FX还稍欠火候,从图7中劳拉左肩部位的边缘光照可以判断出此时视角处于逆光状态,然而飘动的长发竟然连一点逆光透亮的效果都没有,这使得发梢部位看上去不太真实。

值得庆幸的是,Tress FX在处理顺光效果时做得还不错。由图8可以看出,在顺光环境下,劳拉的头发出现了层次分明的光照效果,尤其是扎头绳上方的一圈高光,配合细腻的发丝表现出相当强烈的质感。此外,开启Tress FX后,我们可以看到头发在肩部和背部产生的阴影,而在普通的处理方法下,头发根本没有产生任何阴影。

刚才两个场景都是在较远的距离下观察,现在我们把镜头稍微拉近一些。从图9中我们可以看到,相对A New Dawn中的仙子来说,劳拉的发丝其实还是比较粗的,细腻程度也不如刚才的两个场景。另外某些零散的发丝还出现了锯齿和断开的情况,显然这是抗锯齿处理算法的小缺陷。不过玩家们对此不用太介意,因为这幅截图取自《古墓丽影9》自带的Benchmark运行过程中,在实际游戏时我们通常都是从图8展现的角度进行观察,所以很难发现锯齿的存在。

在游戏中我们比较容易发现的BUG是劳拉的头发会穿越某些物体,比如10中的箭筒。与之恰恰相反的是,之前AMD宣称Tress FX技术拥有碰撞检测机制,因此能够避免头发穿越身体和头部。事实上劳拉的头发的确没有出现穿越身体和头部的现象,但是在游戏中笔者发现,在任何情况下,劳拉的头发都绝不会落到背部和肩膀上,尤其从侧面看这个现象非常显(图11)。推测这是由于物理计算设定的检测边界与我们看到的劳拉身体边缘不一致造成的,这个问题有望通过后期游戏升级得到解决。

除了实际的画面效果,玩家们肯定也非常关心Tress FX的执行效率。毕竟这个技术是服务于实际游戏的,画质再好如果不能流畅运行也是白搭。接下来我们就使用《古墓丽影9》自带的Benchmark功能对TressFX的效率进行一下了解。平台如表1所示,测试时使用1920×1080分辨率,所有画质选项均为高。从图12和表2可以看到,在关闭Tress FX特效时,AMD、NVIDIA两家的顶级单芯显卡应付《古墓丽影9》都是比较轻松的,低帧数均在50帧以上,而在开启Tress FX后,HD 7970 GE的平均帧数仅下降了11.5帧,依然处于非常流畅的级别。而GTX 680的平均帧数跌至38帧,幸好低帧数依然在30帧以上,刚好能够保证游戏流畅运行。

对于这样的测试结果,N(NVIDIA)卡用户难免有些失望,毕竟这个游戏是AMD参与合作开发的,同档次下A(AMD)卡表现更好不足为奇。但好消息是NVIDIA表示正积极研究游戏代码,开启Tress FX性能损失过大的问题有望在更新驱动后得到解决。

表1:测试平台

表1:测试平台

总结:

如果之前没有看过ANew Dawn演示,相信《古墓丽影9》中Tress FX渲染出来的头发一定是我们见过真实、飘逸的。不过我们也不能忽略仙子的头发长度远远不及劳拉,而且A New Dawn对硬件的需求也远高于《古墓丽影9》,现阶段难以应用到实际游戏中。反观Tress FX技术不仅能够提供逼真的效果,而且对硬件资源的消耗处于合理的范围,加上这个技术并不封闭,相信很快会被更多的游戏采纳。

分享到:

用户评论

用户名:

密码: