精華區beta VideoCard 關於我們 聯絡資訊
雖然主題是如何選擇合適的顯示卡記憶體大小. 在這邊打算解釋解析度,顯示記憶體大小,頻寬,AA/AF,SLI/CF 之間的互動關係,不過也得先從很基本的觀念開始講起. 螢幕是2D的 彩色螢幕是ㄧ個2D的裝置,通常具有X*Y個彩色的點(比如說,1280x1024, 那麼每一行的點就有1280個,上下共有1024行). 因此顯示卡,最基本的資料就是要存放這些要輸出到螢幕上彩色的點的資料. 用來告訴螢幕"第一行的第一個點是紅色...第三十八個點是黑色.......第二行 的第六十四個點是藍色".等等的資訊.. 最簡單的做法,就是把這些點的色彩值建立成陣列資料.又通常都用(R,G,B) 三種值的組合來描述色彩.所以只要存放第一個點的(R,G,B),第二個點的(R,G,B). .......就能表示最後要輸出到螢幕上的畫面.如果一個點要表達的是"最亮的紅色" 實際上存的可能是(255,0,0).如果該點是最亮的白色,那麼(R,G,B)就存成(255,255, 255). 在顯示卡記憶體中存放這個資料的陣列稱為Frame Buffer. 世界是3D的 在3D顯示卡計算出最後要送給螢幕的Frame Buffer資料以前,沒有經過處理的 原始場景資料等,這些"3D資料"應該是甚麼樣子的 ??所謂3D,當然是指跟我們現實 相同,處在X,Y,Z三個軸的座標系中的物體. 假設我有一個正方形的骰子,剛好其中一個角處在座標系的原點[0.0,0.0,0.0] 若是這個骰子的大小是1單位長度.而且它的八個點剛好在座標系的 : [0.0,0.0,0.0],[1.0,0.0,0.0],[1.0,1.0,0.0],[1.0,1.0,1.0], [1.0,0.0,1.0],[0.0,1.0,0.0],[0.0,1.0,1.0],[0.0,0.0,1.0] 用這個方式就可以描述出一個存在3D空間中的正方體骰子. 不過也很容易和其他同樣有八個點卻不是正方體的東西搞混 當然,骰子有6個正方形的平面,所以也可以用6個正方形的平面表示, 更不會搞混的方法,則是把6個正方形平面拆開,使用12個三角面表示. 因為在空間中,3角形是最基本的單位,任意三個座標點一定會指定出 一個唯一對應的三角形. 但是現實生活中的物體的外觀沒有那麼規律.用三角形的方法建立 物體的模型是否可以?答案是,不能完全相同但是只要用的三角形夠多 就可以越逼近真實的情況. 如果只用幾十個三角形描述人的五官或者是四肢,那麼形狀多半很糟糕 看起來會像是方塊人. 提供一個古老的範例,第一代Virtual Fighter圖片 http://www.klaxxx.com/public/sega/virtua-fighter/virtua-fighter-1.jpg
如果採用幾十幾百倍的三角形數量,那麼就會看起來比較接近於實際的形狀. 骨肉有了,皮毛不存 ? 前面用三角形只是把物體的形狀建立好而已.但如果我要做的是人,外觀上 我會希望有皮膚,做的是可口可樂罐子,會希望它是紅色並且有Logo等等. 可是要怎麼描述?描述皮膚表面的毛孔跟每個細胞以構建出足夠的物理性質 嗎?那是不可能的.最簡單的方法就只要是"畫出來像"就好了.就像是製作燈籠, 把骨架紮好,然後畫個外觀圖案的表皮,把表皮紮上去. 所以在顯示卡上就會做建立一個平面的貼圖資料,然後決定要經過何種 的處理後,顯示在螢幕上 100x100大小的貼圖 ------ --------------------------- | |----------> | | | | X軸轉43度,Y軸轉 | | ------ 37度,縮放0.85倍 | | 螢幕上某塊 後貼在螢幕上 | ++ |區域為貼圖的結果 | ++++ | | +++ | --------------------------- 知道以上這些最基本存在的東西之後,就可以想像出"顯示卡記憶體內 通常存放了甚麼",基本上會有的就是對應2D每個點的各種buffer,不只 之前提到的frame buffer,也包含了Z-buffer等.以及建立3D場景的三角面 資料,物體表面的貼圖資料等等... buffers 貼圖/場景資料 |***|+++++++++| |-----------| 顯示卡記憶體 系統記憶體 從AGP顯示卡開始(事實上應該是從PCI的nVidia Riva128開始...) 顯示卡就可以取用分享主記憶體,實際上因為效率的差別,通常是將 較不常用的貼圖資料暫時搬移過去.而各種buffer因為要隨時讀寫. 因此都會處在較快的顯示卡記憶體上. 終於進入第一個主題 前面打了這麼多其實是為了導入到第一個主題,我們已經建立好一個簡單 描述顯示卡記憶體使用的Model,那麼,就實際應用而言,在同一個遊戲中, 通常可以讓使用者調整的有 : 1.解析度 2.遊戲的品質/精細度 3.AA/AF Level .....也有的遊戲中這個調整和2合併. 在各種buffer中,基本記錄的單位和點有關,所以buffer的大小也就和 解析度成正比,但是並不會跟遊戲場景貼圖資料的品質成正比. 相對的,遊戲的場景資料,貼圖的量跟解析度則是沒有直接關係,通常 取決於遊戲的品質設定,比如說,低品質的時候可能每個角色只有1000 個三角面,每張貼圖最大只到256*256,高品質的時候提供每個角色5000 個三角面建立的模型,每張貼圖最大到1024*1024等等. 所以剛剛建立的記憶體使用量Model可以擴充表示為 : 低解析度,低品質 buffers 貼圖/場景資料 |***|+++++++++| |-----------| 顯示卡記憶體 系統記憶體 高解析度,低品質 buffers 貼圖/場景資料 |******|+++++++++| |-----------| 顯示卡記憶體 系統記憶體 低解析度,高品質 buffers 貼圖/場景資料 |***|+++++++++++++++| |-----------| 顯示卡記憶體 系統記憶體 高解析度,高品質 buffers 貼圖/場景資料 |******|+++++++++++++++| |-----------| 顯示卡記憶體 系統記憶體 由於頻寬足夠的顯示卡記憶體容量有限,因此不論因為解析度提高, 因為遊戲的貼圖場景資料增加,任何一個原因讓顯示卡記憶體的用量 開始吃緊後,遊戲效能就會大量低落.同時,一般解析度增加後FPS降低. 不純然因為"總點數增加,計算量成正比增加".也有把顯示卡記憶體塞爆 造成的效率暴跌--通常會在某個門檻上跌到差異5~10倍 補充說明的是,解析度和系統內的貼圖總數量無關,但是和常用貼圖 的容量會有關係.為何?這要從貼圖系統的基本開始解釋起. 一般貼圖在螢幕上,可能的大小會差異幾百倍,比如說FPS眼睛緊貼在牆壁上, 那麼牆壁的貼圖就會佔滿螢幕的大部分,但是如果離牆壁很遠,它所佔用的 面積就只需要很小....那麼為了品質以及效能考慮,通常不會讓同一張貼圖 去應付這種大小差異可以到幾百倍的場合,而是一開始就做好一系列貼圖. 由小到大,計算時候依照需要在螢幕上顯示的點數,而去讀取相應size的貼圖. 比如說我們準備一系列的貼圖,最小自8x8,最大達到1024x1024. 8x8 (最小) 16x16 .............. 1024x1024 (最大) 那最後需要貼圖的面積約為5x7的時候,就是取得8x8的那塊來縮放. 若最後需要貼圖的部分達到800x800大小,就會去取得1024x1024的那塊 貼圖來貼.......這種做法稱為Mip-Map,如果不這樣處理,讓1024x1024的 貼圖縮放到約5x7.或者是讓8x8的貼圖縮放到800x800大小,不是過度浪費 記憶體頻寬就是品質會很差. 因此同一系列的貼圖MIP-MAP,總容量雖然是相同的,但是解析度很低的時候 就會偏好選到較小的貼圖,解析度高的時候就會偏好選到較大的貼圖. 8x8 16x16 32x32 64x64 128x128 256x256 512x512 1024x1024 |------低解析度-----------------------------| |-------------------高解低度-----------------| 但是同樣讀取一次,大塊的貼圖的容量是比小塊貼圖大很多倍的.所以 雖然貼圖總容量不變,可是"常讀取"的容量或者是比例卻因為解析度不同 而有不同,這是高解析度除了buffer變大以外,另外一個影響顯示記憶體 是否足夠使用的因素 ...........待續 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.78.250
GoodFriday:先推再看!! 10/20 19:20
ENEP:推推 10/20 19:31
levine21:未看先推!!! 10/20 19:31
ikbbsj:看板長見識!! 10/20 20:42
iuytjhgf:這不是閒聊 這是專業!! 10/20 20:51
greg7575:Magic 魂!大容量 DDR2 不死傳奇 (誤) 10/20 22:33
wearebest:推推推 10/21 01:18
JonTalbain:感謝好文!! 推!!! 10/21 02:00