Re: [新聞] WoW 6.0 的圖像引擎進化

作者: ONISUKA (我不是鬼塚英吉)   2014-09-21 14:28:09
對這個領域稍微有點了解,底下介紹給不熟悉電腦圖學的朋友
官方繁體中文版在這:
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應該可以獲得更好的畫面品質。
作者: zseineo (Zany)   2014-09-21 14:31:00
作者: frostmourne (Task Force141)   2014-09-21 14:34:00
優文
作者: Layase1 (Layase)   2014-09-21 14:35:00
你這個宅宅
作者: WindSpread (陽だまりの詩)   2014-09-21 14:50:00
長知識推
作者: kashiwa27 (UDON)   2014-09-21 14:50:00
2ch很多AA
作者: king45682 (KingCross)   2014-09-21 14:52:00
你這個宅宅
作者: ONISUKA (我不是鬼塚英吉)   2014-09-21 14:55:00
...
作者: LeftNight (左曲夜鳴)   2014-09-21 15:00:00
你這個宅宅
作者: e04su3no (鋼鐵毛毛蟲)   2014-09-21 15:04:00
所以我2年前的R6850還能全開嗎?
作者: Depersonaliz (無用重物)   2014-09-21 15:46:00
推,簡單易懂,專業優文

Links booklink

Contact Us: admin [ a t ] ucptt.com