維尼的蜂巢

RealTime??!! It’s amazing!!!!

隱藏面移除(hidden surface removal) 十月 18, 2005

Filed under: 3D Graph — kevinlin @ 1:25 上午
看了一些東西
                                                                               
先來紀錄一下 隱藏面移除(hidden surface removal)
我們在繪製一個3d物體的時候 通常後面的會被前面蓋掉 我們是看不到的
所以我們 如果只畫出我們看的到的 看不到的東西 都不畫
那整體的繪製速度會提高不少
                                                                               
目前最常用的是z-buffer演算法 因為簡單又快速
                                                                               
我們傳送artist做好的資料到繪圖管線後 經過一個叫做投影轉換以後
每個vertex都會有一個[0,1]的z值 然後再經過一個Gouraud著色法(是1971年
一個法國人的一篇論文 目前被普遍用在real-time render中)的內插計算
會得到每個pixel的z值
                                                                               
在動畫中 我們稱一個畫面為一個frame
不過在描繪硬體中用來儲存每一個pixel color的buffer稱 color buffer 或frame buffer
同樣的 在z-buffer演算法中 也準備了一個和color buffer相同尺寸的buffer稱作
depth buffer或z buffer相對應的存放著每個pixel內插而得到的z值

 
我們在填點的過程中描繪每一個多邊形的時候 每當一個pixel的color跟z值被計算出來
就會到 depth buffer去比較 如果這個z比depth buffer中既有的z還小 才把這個pixel
的顏色寫到color buffer 然後把這個比較小的z值取代原本的z值 這個比較並取代的動作
叫做 depth test
                                                                               
舉個例 假設 A和B兩個三角形(A在B前面) 這兩個三角形都有描繪到同一個pixel位置
然而Za <Zb 所以在這個pixel畫出來的是A的顏色 留在Depth buffer也是A的 z值
所以不論我們先算A還是B 最後結果都一樣
                                                                               
這很重要
假設我們沒用這個方法
再render時 電腦會都畫 只是因為B在後面 畫出來的東西會被A蓋掉 不過他還是有畫
只是我們不知道 所以這個方法相當重要
就我所知 有一些顯示卡可以幫我們做到這個動作 不過在設計artist的data時
就要做適當的處理 會得到較好的performace
在SAMS 出版的 3D graphics programming – Games and beyond 作者是Savchenko 中有特別的一個章節在介紹hidden surface removal 裡面提供了6種左右的演算法來實現 都還蠻有趣的
 
 

 

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s