Fw: [新闻] WoW 6.0 的图像引擎进化

楼主: ONISUKA (我不是鬼冢英吉)   2014-09-21 14:30:40
※ [本文转录自 C_Chat 看板 #1K7d06e_ ]
作者: ONISUKA () 看板: C_Chat
标题: Re: [新闻] WoW 6.0 的图像引擎进化
时间: Sun Sep 21 14:28:09 2014
对这个领域稍微有点了解,底下介绍给不熟悉电脑图学的朋友
官方繁体中文版在这:
http://tw.battle.net/wow/zh/blog/15936285/
在讲CSAA跟MSAA之前,先要从AA说起。
什么是AA(Anti-Aliasing)呢?
http://zh.wikipedia.org/wiki/%E5%8F%8D%E9%8B%B8%E9%BD%92
撷取WIKI的解释:
在3D绘图时,每个图形由像素组成,每段瞬间画面由影格组成,因为萤幕上的像素有限,
如果要表现出多边形的位置时,因技术所限,使用绝对坐标定位法是无法做到的,只能使
用在近似位置采样来进行相对定位。由于没有足够的采样来表现出3D世界中的所有物品的
图形,所以在最后影像显示上,这些现象便会造成在物品与物品中过渡的边缘就会产生波
浪状、圆形、锯齿和闪烁等失真现象,严重影响了画面的品质。
简单来说,AA(反锯齿)顾名思义就是将画面上的锯齿给消除掉,
可以把它想成是一种柔化、模糊化的技术。
Aliasing的情形很常在电脑上看到,大家可以打开小画家,画一条斜线,
然后再用放大镜放大好几倍,就可以看到斜线的边缘呈现锯齿状。
会有这样的原因,是因为一般位图片储存的方式,都是用像素矩阵来储存。
由于斜直线很常会在相邻的整数X座标上,其Y值刚好差一的情形,
但我们又不能使用绝对坐标(因为像素矩阵是整数X整数),
所以斜直线在两个相邻的像素列上,就很容易出现锯齿状的现象。
如下图左。
http://www.markhamilton.info/wp-content/uploads/2011/08/Antialiasing.png
而AA的作用就是将这种现象柔化(模糊化),如上图右。
只要将线条边缘的地方用介于黑色跟白色之间的灰色来填补,
(颜色根据该像素距离黑色线条的远近而有所深浅)
远远的看就会发现眼睛不再觉得锯齿状那么明显(当然近看还是会有)。
回到游戏来说,由于电脑萤幕也是由像素矩阵所构成,
所以当游戏内的物体投影到萤幕时,
只要物体与物体相邻的地方,或者物体的边缘(与背景相邻的地方),
如果没有刚好都在整数数值(也就是刚好落在像素上)的话,
就容易出现锯齿或失真的现象。
那么Aliasing要怎么实作呢,最简单也最暴力的做法就是超级采样
Super sampling anti-aliasing (SSAA),又被称作Full-scene anti-aliasing (FSAA)。
http://www.spec.org/gwpg/publish/fsaa_in_vp10.html
作法很简单,先把影像放大几倍:
http://www.spec.org/gwpg/images/fsaa_in_vp10_clip_image005.gif
再用Super sampling进行采样。
通常是根据放大的倍率取对应的像素,上图就是把上头有绿点的四个像素的颜色值混合,
再除以四以后填回要填的像素位置。
http://upload.wikimedia.org/wikipedia/en/6/61/Supersampling.png
这样子做虽然简单暴力,但缺点就是很消耗GPU资源。
因此OpenGL就提出了多重采样的反锯齿技术,MSAA(Multisample anti-aliasing),
这个方法可以有效地降低GPU所需的资源。为什么呢?
由于多边形的内部通常不太会有锯齿或失真的情形发生,只会在多边形的边缘发生,
所以MSAA先使用Z buffer跟Stencil buffer(按:这两个有兴趣的可以自行估狗)
来找出到底有哪些像素正好是落在多边形的边缘,
然后找出有哪些物体或背景会落在这些像素,然后分别对这些点取颜色、混合、平均。
这样一来就可以省下很多资源,但又可以将输出的游戏画面更柔化。
那么为什么WOW要改用由nVIDIA所提出的CSAA(CoverageSampling Anti-Aliasing)呢?
原因是因为CSAA比起MSAA又更省GPU资源,
一般来说,16xCSAA的效果跟8xMSAA差不多,但其性能下降程度只比4xMSAA高一点。
由于许多新的绘图技术不断加入WOW,导致WOW对于GPU的需求比过去越来越高,
改用CSAA可以把GPU的资源分给那些新的绘图技术,让效能更加提升。
(CSAA的效能提升的原因是采样的方式不同,由于牵扯到很多技术内容,
所以略过不提,详情请参考:http://www.anandtech.com/show/2116/9 )
另外对于只支援DirectX 9的显示卡而言,
可以使用更快速的FXAA(Fast approximate anti-aliasing),
这种作法的取样方式并不会从3D模型上取样,而是直接从输出到萤幕上的图片来取样。
不过有点让人疑惑的就是,nVIDIA在最新推出的Maxwell架构中已不再使用CSAA,
那么使用这些显示卡可不可以获得CSAA效果呢?
由于我们并不知道WOW程式是怎么运行CSAA的,
如果是写在WOW里面,那就不成问题;
如果是需要使用显示卡的CSAA功能,
那么使用新一代不支援此技术显卡(800系列及之后)有可能就得使用其它的技术取代。
(例如用显卡上的MSAA)
但毕竟这些新的显示卡也是今年才推出的,短时间应该不用担心这问题。
而且我想暴雪应该会针对这点做出改良方案吧。
TLDR: CSAA比MSAA更不吃GPU资源,因此更多进阶的显像技术就能充分发挥GPU效果。
所以使用同样的配备,玩6.0的WOW应该可以获得更好的画面品质。
作者: arcross (阿插)   2014-09-21 14:33:00
那我只有ATI的卡怎么办?!!
楼主: ONISUKA (我不是鬼冢英吉)   2014-09-21 14:35:00
哈哈 其实我也不知道 但AMD有EQAA跟CSAA很像
作者: Layase1 (Layase)   2014-09-21 14:36:00
救命阿 680 4G卖不掉
作者: genesys75 (不宅的某色)   2014-09-21 15:03:00
....完全看不懂,可是好像很厉害,只好给推
作者: teddywinglee   2014-09-21 15:55:00
比官网的文章好懂一点 但还是看不懂
作者: NewCop (新警察里王)   2014-09-21 15:56:00
快推,不然人家会以为我们看不懂
作者: cloudwolf (狼)   2014-09-21 15:59:00
快推!! 可以解释为硬件不变的情形下画面可以变好吗?
作者: lienghot (一注独买)   2014-09-21 16:16:00
我一直都用nvidia
作者: LVE (强尼屁股)   2014-09-21 16:19:00
恩 跟我想的差不多
作者: Killercat (杀人猫™)   2014-09-21 16:24:00
其实锯齿在45度线算很不明显了 1-10度或者30度都很明显简单的说就是一片平滑突然高一快起来
作者: uluvu0 (闲)   2014-09-21 17:29:00
官网说那叫CMAA。CSAA应该是本来就有的,CMAA是新招反锯齿我不太懂,以上是我对官网的解读。
作者: dragon6 (阿龙)   2014-09-21 17:57:00
其实以目前beta的画面我觉得就算不开反锯齿也没严重锯齿话说画面变很漂亮但其实显卡需求更高了
作者: qaz12wsx45 (我是我自己)   2014-09-21 18:01:00
我AMD 280X 玩BETA全开没差喔
作者: forever05520 (芵茪)   2014-09-21 18:17:00
怎么不用TXAA呢,感觉这个也不错阿XD
作者: charmed10i (iL)   2014-09-21 19:54:00
快嘘不然人家以为我们看得懂
作者: Wolfen (新竹中半兵卫)   2014-09-21 20:03:00
嗯嗯,就是这样,原来如此
作者: zooxalju (不吃鱼的猫)   2014-09-21 20:37:00
反正WOW画面再怎么进化>幅度也相当有限了吧
作者: capoboy (永远的残念门土)   2014-09-21 21:39:00
这就是A阵营与N阵营永远不歇的斗争 在每款新作品或续作
楼主: ONISUKA (我不是鬼冢英吉)   2014-09-22 03:00:00
哈哈 原来我眼残了 不过基本上CMAA或CSAA都是较进阶的技术,目的就是降低内存使用量
作者: pipi5867 (夏影真是太好听了..)   2014-09-22 08:23:00
现在玩BETA 感觉转画面角度跟点选目标都有种延迟感 不知道为啥..
作者: MingingT (MingingT)   2014-09-22 09:24:00
研究这些算法真的很有趣啊~
作者: Dopin (ats.twbbs.org)   2014-09-23 00:12:00
用绘图卡的表示 ... DX 用的好痛苦呀阿阿阿阿

Links booklink

Contact Us: admin [ a t ] ucptt.com