視頻加速

視頻加速

在586年代以前,計算機的3D及視頻性能很弱,不能滿足多媒體應用和3D 遊戲的需求。那個時代,除了我們現在常見的顯卡和音效卡外,還存在著另外一種與視頻和聲音又著密切關係的板卡,那就是“多媒體卡”或者稱之為“視頻加速卡”。

起源


由於當時的CPU和顯卡性能有限,如果想通過計算機觀看VCD級別的電影,就需要額外為計算機添加這樣一塊板卡,才可以實現。家用電腦的視頻加速一詞,大概就起源於與哪個時代。
586到來之時,CPU的性能得到了很大發展,特別是在Intel推出具備MMX多媒體指令集的奔騰(Pentium)1代時,家用電腦已經具備一定的的多媒體性能。這是,已經可以不依靠專門的“視頻加速卡”,只依靠軟體,就可以進行VCD品質的視頻回放。此後,通過軟體方式的視頻加速技術,也在不斷發展。
並且多媒體時代來臨之際,顯卡的性能也有了長足發展,極大的促進了多媒體的普及與應用,特別是後來飛速發展的電腦3D遊戲,以及MPEG-2MPEG4、HDTV高清視頻等媒體應用,使得性能再強的CPU,也難以應對,而顯卡的發展,恰到好處的補充了CPU在這方面的不足,從而使得顯卡在電腦中的地位,不斷提升。

分類


可以分為硬體加速和軟體加速

硬體加速

簡而言之,硬體加速就是利用硬體模塊來替代軟體演演算法以充分利用硬體所固有的快速特性,以增強計算機的視頻性能。
視頻播放方面
在視頻加速領域,顯卡一直扮演著重要的角色,從MPEG-1到MPEG-2,再到如今的H.264和VC-1,顯卡一直肩負著為CPU“減負”的重任,而這其中又經歷了長期和曲折的發展,我們先來回顧一下顯卡視頻硬體加速的發展歷史。
3D初頻加速
3D加速卡在早期是由3dfx所開發,Voodoo系列是比較有名的產品,當時沒有3D加速卡的稱呼,都是稱為3D子卡或附加卡較多,後來3D遊戲慢慢成主流,許多3D廠商爭相研發3D晶片,當時是2D顯示卡比較多,後來漸漸的把3D功能加在2D顯示卡上,使其既可以顯示2D影像,也可以跑3D遊戲,並最終演變成為3D加速卡。
展望
隨著國家對高清產業的大力支持,以及硬體一日千里的飛速發展,高清的全面普及是遲早的事情。也許過不了多久,當前還被稱為“硬體殺手”的高清解碼就將會如同以前的VCD和DVD一樣,變成計算機再普通不過的一項基本功能了,而到了那個時候,估計下一代更高一級的“高清”又將出現,硬體和軟體之間相互追趕的競賽還將繼續進行下去。

軟體視頻加速

所謂軟體視頻加速,是指通過軟體,對視頻及媒體應用,進行優化加速,一般用於專業圖形設計軟體的加速和網路視頻加速方面,對於普通電腦用戶來說,網路視頻加速應用的比較多。
網路視頻加速軟體
網路視頻加速軟體,是一種p2p插件。
由於受到網速的限制或者遇到網路使用高峰時段,看視頻的時候便會出現很“卡”或緩衝慢等問題,以至於本想好好看視頻,卻在焦急等待緩衝過的程中度過。視頻加速就是在看視屏的時候不僅僅可以從伺服器下載視頻,還可以通過p2p從同樣安裝此插件的正在瀏覽此視頻的用戶那下載,一定程度上緩解了伺服器壓力增加用戶的瀏覽速度,不過在享受從別的客戶那下載視屏增加自己瀏覽速度的同時,自己也得給別人上傳,和BT的原理一樣,會有點傷硬碟

應用


說起專業繪圖卡,大家有什麼感覺呢?是不是“哇,好神聖!買不起!和我沒關係!...”的敬而遠之的態度呢?呵呵,其實 3D 加速卡最初是在專業領域發展起來並逐漸轉變為民用。所以,在了解到 3D 遊戲卡的同時呢,我們大家也因該對它的前身—專業 3D 繪圖卡有所了解。好了,讓我們來看專業繪圖卡的職責。
大家來想象一下,如果遊戲中所有的三角形,都不去填充,而只用直線把它們的三個邊畫出來… 你會看到什麼??哇,亂死了!是亂七八糟的一堆… :wacko: 呵呵,這就是 3D 繪圖人員每天所面對的東西。

線筐的世界

在專業領域,圖形設計者往往要求不單看到物體的表面顏色和材質,更要求看到物體內部的結構和精確的形狀輪廓。這樣呢,花里胡哨的紋理貼圖和材質不僅不能起到應有的作用,反而還會幹擾設計者對形狀的掌握。所以,快速,精確,大量的繪製線條就成了專業繪圖卡的“基本功”了 呵呵。
兩點確定一條直線,所以在專業領域,物體不一定要用三角形來表示也一樣可以被編輯和顯示出來。所以專業繪圖更偏向於使用四邊形來繪製物體。這樣一來看起來整齊,二來容易和外部的一些採集設備,比如 3D 掃描儀的數據介面。
在繪製遊戲的過程中,要用少量的三角形,加上大量的紋理貼圖來繪製場景。由於紋理貼圖的讀取和顏色運算占絕大多數處理時間,所以遊戲卡的顯存帶寬和像素處理能力就顯得非常重要,因此出現了 4 條 乃至 8 條 像素管線并行運作的顯卡,和高達 256bits, 20GB/s 的顯存帶寬。
而在只繪製線筐這種情況下,專業繪圖卡的工作模式以及瓶頸分佈也和遊戲卡有所不同了:在專業軟體的編輯窗口裡,線條填充了所有空間。專業繪圖卡需要可以接受的速度處理數量巨大的頂點數據,而這些數據量,通常都在遊戲場景的成千上萬倍。而畫線的過程相比頂點的處理過程,就顯得比較輕鬆了。這種工作方法,使得專業繪圖卡需要有非常強勁的頂點處理能力。這點,在頂點處理能力相似的顯卡專業性能也相近的表現中也能看得出來。
既然畫線條是主要任務,人們當然想讓專業卡把它的主要任務完成的更好。所以,人們想到了用一種方法來讓畫出來的線更漂亮:
線筐反鋸齒 (Anti-Aliased Lines)
如果用 Windows 的 畫筆 畫一條斜線,你看到了什麼?(當然是線啦)你看到的是鋸齒!其實斜線也是由很短的水平或豎直的線段組成的。這個就是線段光柵化的缺點。怎麼才能讓畫出來的線更平滑,更漂亮呢?這就要用到光柵化的高級技巧了:浮點坐標光柵化法則(Floating Point Coordinate Rasterization: 具體的名字可能不是這樣的,不過這個名字絕對能說明問題!)。以往,在畫線的時候,都要把線段頂點的坐標先轉換成整數,再畫在屏幕上,比如( 124.5, 11.2 ) => ( 125, 11 )。因為屏幕上像素的坐標都是整數的,所以這種方法簡單快速,可是畫出來的線就是那樣的充滿鋸齒…
而浮點光柵化法則呢,就是把浮點數表示的坐標直接映射到屏幕上,而取該點鄰近的四個像素做顏色的權重分配(最複雜的地方哦,別急,我來慢慢講):比如線上有一個點,它的坐標是 ( 124.5, 11.2 )。那麼我們來取這鄰近四個點:( 124, 11 ), ( 125, 11 ), ( 124, 12 ), ( 125, 12 )。而用坐標的小數部分表示該點的權重的話,四個點的顏色濃度分別是這樣的:
( 124(0.5), 11(0.2) ) : 50% * 20% = 10%, ( 125(-0.5), 11(0.2) ) : 50% * 20% = 10%;
( 124(0.5), 12(-0.8) ) : 50% * 80% = 40%, ( 125(-0.5), 12(-0.8) ) : 50% * 80% = 40%;
這樣,就把一個浮點坐標映射到了四個整數坐標上,由於色彩的濃度是隨浮點坐標在整數坐標映射的權重來計算的,所以整個線就變得非常的平滑了。
我上面介紹的只是反鋸齒光柵化的方法之一,有很多種更快速的方法已經被廣泛的使用了。由於這些方法涉及到的知識太專業了,所以我就不再多做引申了(其實有的我也不很清楚…)。線筐反鋸齒在新型專業繪圖卡里做了良好的優化,所以使用專業繪圖卡時,可以通過使用線筐反鋸齒而得到更清晰精確美觀的線筐效果圖。

專業 OpenGL 和後起之秀 D3D8/9

說到專業繪圖卡,我就不能不提起OpenGL。OpenGL 是什麼?你首先想到的一定是 Open Graphics Library 是由 Silicon Graphics Inc. 於 1992 年提出的專業繪圖介面。它被廣泛的應用在了幾乎所有的計算機繪圖領域。包括 SGI, DEC, IBM, PC 和MAC 等等,都提供了對它的支持,所以說 OpenGL 是一個跨平台的專業繪圖介面。大家平常玩的遊戲里使用的 OpenGL,只是整個 OpenGL 繪圖庫函數的很小很小一部分,而這一部分足以讓我們的廣大玩家體驗驚心動魄的 3D 世界了!呵呵。
既然這麼神,那麼支持它的軟體肯定不少嘍!對了。像 3dsmaxMaya, SoftImage 這PC 3D 製作工具的“三巨頭”就提供了對 OpenGL 圖形介面的支持。既然是介面,也就代表了“與硬體無關的隔離層”。所以專業繪圖卡只需要專心做好對 OpenGL 介面的支持,也就是支持了所有主流的 3D 製作軟體。這也是專業繪圖卡價格高昂的原因,因為它的驅動研發也佔了很大一部分的成本。
也許有不少朋友還在納悶:OpenGL 到底是幹什麼用的?每天聽你們說呀說,我怎麼沒有看見!其實,OpenGL 的常用功能說起來讓你嚇一跳:畫點,畫線,畫多邊形,就是這些。作為遊戲,使用OpenGL 提供的這三個功能就足夠了。而在專業領域,它提供了曲線,曲面繪畫的支持,三角形分割,頂點變形以及其他一些專業人士津津樂道的功能,而在最新版本的 OpenGL 之中,也引入了可編程圖形流水線的概念(比 D3D8 晚了半拍)這樣一來,也可以通過對顯卡編程來靈活的實現個性的圖像效果。
也許大家從我的話里能看出來,OpenGL 在後來的發展中,正如大家所料的,掉到了D3D 的後面。說起 D3D,就要提一下 MicrosoftDirectX 娛樂多媒體引擎了。DirectX 對廣大玩家一定如雷貫耳吧。事實上,採用 DirectX 的 D3D 圖形引擎的遠遠多於OpenGL。這也是受 OpenGL 和 D3D 開發使得定位不同所影響。D3D 更偏向於為遊戲設計者提供直接的,功能強大的與遊戲繪圖直接相關的功能,所以對於遊戲設計者來說更具親和力。
而 D3D 的快速發展也得益於它是獨家技術:由 Microsoft 親自製定,親自研發,提供詳細強大的技術支持。以往的 D3D 總是給人小氣的感覺,而 D3D 也把 OpenGL 作為競爭目標而努力的發展;而在 DirectX 8.0 推出的時候,D3D8 從功能和易用性上一舉超越了 OpenGL。它首先提出了可編程幾何/像素處理流水線的概念。配合當時上市的 nVIDIA GeForce 3 系列顯卡的完美硬體支持,從視覺上給了人們全新的震撼。題歸正傳:當 D3D8 在遊戲介面方面超越了 OpenGL 之後,貪婪的 Microsoft (!) 更開始讓 D3D 在專業功能上也發展起來。時至今日,D3D 得到了眾多專業繪圖軟體的支持,比如3dsmax 從 4.0 起加入了對 DirectX 8.0 的支持,使得近似最終渲染效果的材質/燈光在可編程GPU 的支持下,在預覽窗口裡顯示了出來。
DirectX 9.0 的繪圖組件 D3D9,又是一個里程碑。它重新定義了可編程圖形流水線的概念,使全浮點精度,無失真的圖像在 PC 遊戲里成為可能。而且 D3D9 引入了另一個新的概念,就是在繼承了 D3D8的彙編語言給顯卡編程的同時,提供了用高級語言來撰寫顯卡的程序的功能,這個語言被命名為 HLSL(High Level Shader Language)。到此,D3D 超越了 OpenGL,也使的 OpenGL 新版本的制定開始向 D3D 靠攏。OpenGL 所支持的 Vertex Program / Fragment Shader 就是在 D3D 的 VertexShader / PixelShader 的基礎上發展起來的。
D3D 的功能已經足夠強勁,也在遊戲領域得到了完全的支持。可是要想在專業繪圖領域真正的擁有一席之地,還需要各大專業繪圖軟體開發商對其表示肯定和投入支持。讓我們衷心的祝 D3D 和 OpenGL 一路走好...

預覽 vs. 渲染

有很多專業繪圖的初學者,常常分不清兩個概念:預覽和渲染的區別,以及圖形加速卡是給哪裡加速的。下面我就來講一下這些到底是什麼東西
使用過專業繪圖軟體的朋友,一定見過它的互動式編輯窗口吧。不同的軟體和設置,開有不同數量的互動式編輯窗口,也被稱為預覽窗口。這些窗口裡的內容呢,就是由圖形加速卡繪製的(如果啟用硬體加速的話)。一般除了有一個窗口裡的物體是由顏色和紋理貼圖填充的以外,其它的窗口裡的圖像都是線筐。呵呵 說道這裡,大家應該明白專業繪圖卡對線筐加速的意義了吧。其實,在專業繪圖軟體里,有且只有這部分的繪圖工作是由圖形加速卡來完成的。另一部分繪圖功能,則超越了圖形加速卡的功能:
這就是成品渲染。當你調整好所有參數,包括攝像機的位置和燈光以後,按動“渲染”( Render )按鈕,電腦在做的就是這一步。稍微複雜的場景,這一步通常要花費數小時的時間,有的甚至於要好幾天才能完成。為什麼這麼慢呢?!你如果打開預覽窗口的圖像,和渲染好的成品對比一下,馬上就能發現區別所在:成品比預覽圖細膩真實的多。其實這一步是完全由 CPU 來完成的。而它們所使用的演演算法的複雜度,也遠在顯卡的光柵圖形之上。有的是用了 Ray-Tracing 光線追蹤來計算物體的材質和光線的反射/折射,有的甚至利用到了輻射度( Radiosity ) 來計算物體表面接受光線照射的強度。這些真實的演演算法異常的複雜,而且靈活度很高。因此 GPU 的可編程特性根本不能“代勞”,唯有我們可憐的 CPU 孤軍奮戰了。
到這裡,大家應該明白,專業繪圖卡在繪圖軟體的使用過程中充當了預覽視口加速的功能。別認為只能加速預覽視口沒有什麼大用處,其實繪圖工作者們有 90% 的時間是用來繪製圖形的,也就是圖形加速卡在 90% 的時間裡,都在為系統起著重要的加速作用。好了,看著激動人心的 Hollywood 特效大片,欣賞著美輪美奐的 3D 動畫片的時候,讓我們為默默無聞的專業繪圖卡致敬…

技術發展


2004年12月20日,NVIDIA正式推出了基於GeForce 6系列圖形晶元(NV 4x)的PureVideo技術,其目的是為了提升GeForce 6系列圖形晶元的視頻播放性能,主要作用是獲得更低的CPU佔用率與更清晰的畫面。
總所周知,在電腦上播放的視頻絕大部分都是從電視或電影中轉換而來。但在轉換過程會遇到兩個突出的矛盾:一是電視的片源為隔行掃描,而電腦上是逐行掃描;二是電影的幀數為每秒24幀,而電腦上播放的要求是每秒30幀。雖然絕大部分視頻編輯加工軟體都能對其實行轉換,但如果對這兩個矛盾處理得不好,畫面就會出現嚴重的重疊、模糊等失真。而PureVideo技術就是為解決這些問題而出現的。
實際上,PureVideo是一項基於GeForce 6系列GPU中整合的可編程視頻處理引擎,同時結合硬體與軟體技術,能夠對MEPG2(DVD)、WMV9以及HD Video等視頻播放進行硬體加速的顯卡特色技術。PureVideo的關鍵技術包括一個集成於GPU中的專門硬體——16路向量處理器,通過它來完成高清視頻播放的硬體加速,從而達到減輕CPU負擔的目的。
PureVideo技術在播放DVD視頻、HD Video以及WMV(包括高清WMV)視頻時可以獲得比傳統視頻解決方案更清晰的畫面,同時也會降低CPU佔用率。而要想發揮這項技術的優勢,除了要有一塊GerForce 6系列的顯卡外,還需要安裝三個軟體:包括WMV視頻插件、Windows Media Player 10(這兩個用於支持WMV視頻的加速)以及NVIDIA Decoder(用於支持DVD視頻加速)。
PureVideo技術針對DVD回放的優化解碼器全稱為NVIDIA DVD Decoder,必須要該解碼器配合GeForce 6系列GPU中的視頻處理引擎才能對視頻回放起到優化加速的作用。
安裝了NVIDIA Decoder后,當插入DVD光碟或播放MPEG2視頻文件時,無論採用什麼播放器,當播放器向系統提出掛接解碼器的要求時,NVIDIA Decoder就會自動負責解碼部分的任務,此時我們可以看到在桌面右下角系統托盤中會出現一個NVIDIA的圖標。
解碼器在默認狀態下是按照最佳質量進行的設置,一般不建議讀者更改,除非出現畫面顯示錯誤才有必要進行調試。主界面右上部分的“Bitrate(Mbps)”能實時顯示所播放文件的比特率,用戶可憑此辨別DVD視頻是否為真正的可變比特率格式。需要注意的是,該控制面板只有在播放DVD視頻(包括DVD光碟和MPEG2文件)時才能打開。
在針對WMV格式文件的視頻加速中,所要採用的WMV插件主要包含兩個文件:wmp.dll(10.0.0.3646)與wmvdmod.dll(10.0.0.3663)。根據NVIDIA的官方說明,這款插件可在Windows Media Player10的插件下載中獲得。要想實現在Windows Media Player 10中播放高清格式的WMV文件,這兩個插件是必不可少的。
PureVideo技術的另一特點在於它是基於視頻硬體級加速的技術,能分擔CPU對視頻的運算任務,從而減少CPU佔用率。
相對NVIDIA的CUDA技術而言,AMD採用的Stream技術是一項開放性的技術。實際上,最初ATI採用的流處理技術並非完全開放,而是僅針對單一的一個項目而研發的。在2006年,ATI就曾經藉助非統一架構設計的Radeon X1950XTX顯卡為斯坦福大學的Folding@Home (蛋白質摺疊的分佈計算項目)項目進行科學計算。而全新的流處理技術的改進就是要將這一技術全面開放,能夠讓更多的開發人員參與進來,藉助HD4000系列顯卡超強的浮點運算能力,為更多的并行計算應用進行加速。