游戲為何總是卡?人眼成像背后的秘密
找到兇手并不是本文的終結(jié),因為結(jié)案不光需要人臟俱獲,而且要理清犯罪動機。正向推演出結(jié)論,下面我們逆過來解釋一下為什么AA和DX10會讓個別幀產(chǎn)生如此夸張的延遲,而導致游戲畫面的卡頓。
● 罪魁禍首之一:抗鋸齒(Anti-aliasing)
抗鋸齒(Anti-aliasing):標準翻譯為”抗圖像折疊失真“。由于在3D圖像中,受分辨的制約,物體邊緣總會或多或少的呈現(xiàn)三角形的鋸齒,而抗鋸齒就是指對圖像邊緣進行柔化處理,使圖像邊緣看起來更平滑,更接近實物的物體。它是提高畫質(zhì)以使之柔和的一種方法。
如今最新的全屏抗鋸齒(FullSceneAnti-Aliasing)可以有效的消除多邊形結(jié)合處(特別是較小的多邊形間組合中)的錯位現(xiàn)象,降低了圖像的失真度。全景抗鋸齒在進行處理時,須對圖像附近的像素進行2-4次采樣,以達到不同級別的抗鋸齒效果。簡單的說也就是將圖像邊緣及其兩側(cè)的像素顏色進行混合,然后用新生成的具有混合特性的點來替換原來位置上的點以達到柔化物體外形、消除鋸齒的效果。
通過以往的測試,編輯認為抗鋸齒對顯存的容量和帶寬、延遲都提出了很高的要求,雖然FarCry2這款游戲?qū)︼@卡核心要求不高,但抗鋸齒倍數(shù)過高造成頻繁的像素采樣,依然有可能堵塞存儲堆棧,造成個別畫面延遲異常。
● 罪魁禍首之二:DirectX 10
DirectX 10最大的革新就是統(tǒng)一渲染架構(gòu)(Unified Shader Architecture)。DX9之前的各類圖形硬件和API均采用分離渲染架構(gòu),即頂點渲染和像素渲染各自獨立進行,前者的任務(wù)是構(gòu)建出含三維坐標信息的多邊形頂點,后者則是將這些頂點從三維轉(zhuǎn)換為二維,這樣便可以通過視覺欺騙在屏幕上顯示出“三維”的場景。
微軟在DirectX 10中提出了統(tǒng)一渲染架構(gòu)的思想:在相同物理類型的渲染單元上執(zhí)行不同類型的渲染程序。換句話說,只用一種渲染單元,讓它既能完成頂點渲染,也能完成像素渲染,甚至還能實現(xiàn)幾何渲染。這樣一來,渲染單元可以得到最大程度的利用,減少了資源閑置的情形。但是,相對頂點渲染來說,像素渲染將面臨大規(guī)模使用紋理所帶來的材質(zhì)延遲,這是統(tǒng)一渲染架構(gòu)不得不面對的現(xiàn)實。
文章的最后,我們從理論上找到了問題的所在:不顧一切追求高AA和DX10特效,但目前顯卡的架構(gòu)并不能完全保證這些特效的流暢輸出。我想這也是為何最為流行的FPS游戲依然采用DX9C,而職業(yè)競技選手也不喜歡高畫質(zhì)、高AA的原因。限于篇幅的限制,我們很難在此進一步探索不同硬件對超時幀產(chǎn)生的影響,本文的測試和討論也只是揭開了渲染效率和畫面質(zhì)量之間矛盾的冰山一角。■<
關(guān)注我們



