國立中山大學資訊工程學系...

56
國立中山大學資訊工程學系 碩士論文 三維呈像之進階材質單元設計 Advanced Texture Unit Design for 3D Rendering System 研究生:林煌倫 指導教授:張雲南 中華民國 九十六

Transcript of 國立中山大學資訊工程學系...

  • 國立中山大學資訊工程學系

    碩士論文

    三維呈像之進階材質單元設計

    Advanced Texture Unit Design for 3D Rendering System

    研究生:林煌倫 撰

    指導教授:張雲南

    中華民國 九十六 年 七 月

  • i

    摘要

    為了達到更真實的視覺效果,材質貼圖在三維圖學應用上是相當重要且常被

    使用的技術。在許多進階的著色效果,包含陰影、環境與凹凸貼圖全都仰賴多樣

    化的材質貼圖功能應用。因此,如何在三維呈像系統中設計一個有效率的材質單

    元是非常重要的。本論文所針對呈像系統,在像素填充率可達到每一個週期產生

    兩筆像素輸出下,提出一種進階材質單元設計方法。這組單元可以支援多種過濾

    功能,其中包含Nearest neighbor, Bi-linear與Tri-linear filtering。它也能夠支援

    mip-map功能,使得在進行呈像過程中自動的選擇最好的材質圖片。此外,為了

    提供這些複雜的過濾功能,必須提供大量的圖素讀取以供運算,在材質快取記憶

    體的設計上採用交錯的記憶體設計,將資料分散到成四組記憶體中,可以提供每

    一個週期最多八筆圖素的輸出。在過濾單元設計上,為了減少算術單元的使用,

    本論文將常用的等式利用硬體共享的技術,減少硬體的使用。本論文提出的材質

    單元架構已經實做完成,且嵌入到三維呈像加速器中,透過與幾何模組整合到

    ARM versatile平台上,能夠在Linux環境下執行與OpenGL-ES軟體模組溝通,達

    到成功的軟硬體整合。本設計在0.18um製程下,時脈可達到150Mhz,且最高可

    以產生1.2G texel/s。

  • ii

    Abstract

    In order to achieve more realistic visual effect, the texturing mapping has

    become a very important and popular technique used in three-dimensional (3D)

    graphic. Many advanced rendering effects including shadow, environment, and

    bump mapping all depend on various applications of texturing function. Therefore,

    how to design an efficient texture unit is very important for 3D graphic rendering

    system. This thesis proposes an advanced texture unit design targeted for the

    rendering system with the fill rate of two fragments per cycle. This unit can support

    various filtering functions including nearest neighbor, bi-linear and tri-linear

    filtering. It can also provide the mip-map function to automatically select the best

    texture images for rendering. In order to realize the high texel throughput

    requirement for some complex filtering function, the texture cache has been divided

    into four banks such that up to eight texels can be delivered every cycle. The

    data-path design for the filtering unit has adopted the common expression sharing

    technique to reduce the required arithmetic units. The proposed texturing unit

    architecture has been implemented and embedded into a 3D rendering accelerator

    which has been integrated with OpenGL-ES software module, Linux operation system

    and geometry module, and successfully prototyped on the ARM versatile platform.

    With the 0.18um technology, this unit can run up to 150 Mhz, and provide the peak

    throughput of 1.2G texel/s.

  • iii

    目錄

    第 1章 簡介 .................................................................................................................1

    1.1 研究動機 .............................................................................................................1 1.2 論文架構 .............................................................................................................2

    第 2章 研究背景及相關研究 .....................................................................................3

    2.1 TEXTURE介紹 ......................................................................................................4 2.1.1 Texture Mapping ...........................................................................................5 2.1.2 Texture Filtering............................................................................................6 2.1.3 Texture Wrapping ........................................................................................10

    2.2 FILTERING ALGORITHM .......................................................................................10 2.2.1 Nearest Neighbor ........................................................................................ 11 2.2.2 Bi-linear Filtering....................................................................................... 11 2.2.3 Tri-linear Filtering......................................................................................12 2.2.4 MIP-map .....................................................................................................13

    第 3章 三維呈像之材質單元硬體架構 ...................................................................16

    3.1 材質快取記憶體硬體設計 ...............................................................................16 3.1.1 材質快取記憶體硬體架構........................................................................17 3.1.2 材質快取記憶體效能分析........................................................................17 3.1.3 材質快取記憶體之硬體支援....................................................................19 3.1.4 材質快取記憶體之資料排列....................................................................20

    3.2 材質快取記憶體位址產生器 ...........................................................................22 3.3 材質快取記憶體之標籤設計 ...........................................................................23 3.4 材質基底位址表格 ...........................................................................................25 3.5 材質過濾器硬體架構 .......................................................................................26

    3.5.1 Nearest Neighbor ........................................................................................27 3.5.2 線性內插....................................................................................................27 3.5.3 雙線性過濾器............................................................................................27 3.5.4 三重線性過濾器........................................................................................28 3.5.5 可組態化材質過濾單元............................................................................29

    3.6 TEXTURE ENVIRONMENT ....................................................................................30 3.7 貼圖單元硬體架構 ...........................................................................................32

    第 4章 設計、驗證及測試環境 ...............................................................................34

    4.1 設計模型 ...........................................................................................................34 4.2 軟體驗證 ...........................................................................................................34

  • iv

    4.3 RTL驗證 ...........................................................................................................35 4.4 NLINT..................................................................................................................37 4.5 CODE CONVERGE.................................................................................................37 4.6 GATE LEVEL VERIFICATION..................................................................................38 4.7 SYSTEM LEVEL VERIFICATION..............................................................................38

    第 5章 實驗結果 .......................................................................................................39

    5.1 軟硬體介面規格 ...............................................................................................39 5.2 實驗結果 ...........................................................................................................41

    5.2.1 Bi-linear Filtering.......................................................................................41 5.2.2 MIP-map .....................................................................................................42 5.2.3 各種材質過濾演算法之比較....................................................................42 5.2.4 硬體合成....................................................................................................43

    第 6章 結論與未來目標 ...........................................................................................45

    6.1.1 結論............................................................................................................45 6.1.2 未來目標....................................................................................................45

    第 7章 參考文獻 .......................................................................................................47

  • v

    LIST OF FIGURES PAGE 圖 2-1標準的繪圖流程 ...............................................................................................4 圖 2-2 階層式的記憶體架構 ......................................................................................4 圖 2-3 Texture Mapping................................................................................................5 圖 2-4 材質貼圖效果 ..................................................................................................5 圖 2-5 放大取樣 ..........................................................................................................6 圖 2-6 線性內差 ..........................................................................................................7 圖 2-7 雙線性內差效果 ..............................................................................................7 圖 2-8 訊號縮小取樣 ..................................................................................................8 圖 2-9 MIP-map應用實例 ...........................................................................................9 圖 2-10 三重線性內差效果 ........................................................................................9 圖 2-11 Texture Wrapping ..........................................................................................10 圖 2-12 Nearest Neighbor...........................................................................................11 圖 2-13 線性內差 ......................................................................................................11 圖 2-14 雙線性內差 ..................................................................................................12 圖 2-15 三重線性內差 ..............................................................................................13 圖 2-16 MIP-map image pyramid...............................................................................13 圖 2-17 Pixel inverse mapped to texture-space using constant partial derivatives.....15 圖 3-1 Texture cache資料流程圖 ..............................................................................17 圖 3-2 快取區塊大小對於失誤代價的影響(16KB cache, direct map)...................18 圖 3-3 快取區塊大小對於失誤代價的影響(64KB cache, direct map)...................18 圖 3-4 快取大小對於失誤代價的影響(4X4 words/block, direct map)...................18 圖 3-5 Texture Cache架構改善 .................................................................................19 圖 3-6 材質資料分配 ................................................................................................21 圖 3-7 材質快取記憶體中資料排列 ........................................................................21 圖 3-8 Cache Address Translation ..............................................................................22 圖 3-9 CAT硬體架構圖.............................................................................................23 圖 3-10 材質座標表示圖 ..........................................................................................23 圖 3-11 選用記憶體位址做為標籤 ..........................................................................25 圖 3-12 選用材質座標與 LOD做為標籤 ................................................................25 圖 3-13 材質基底位址 ..............................................................................................26 圖 3-14 線性內插資料流程圖 ..................................................................................27 圖 3-15 雙線性過濾器資料流程圖 ..........................................................................28 圖 3-16 三重線性內插資料流程圖 ..........................................................................29 圖 3-17 Texture Cache與 Texture Filtering整合架構圖 ..........................................30 圖 3-18 材質單元資料流程圖 ..................................................................................33

  • vi

    圖 4-1 C語言設計模擬介面-1 ..................................................................................35 圖 4-2 C語言設計模擬介面-2 ..................................................................................35 圖 4-3 RTL模擬結果 .................................................................................................36 圖 4-4 模擬結果顯示工具 ........................................................................................36 圖 4-5 FPGA雛型實際輸出畫面 ..............................................................................38 圖 5-1 I/O definition。左圖是 IP Top design I/O,右圖是加上 AMBA AHB wrapper之 I/O ...........................................................................................................................41 圖 5-2 RTL模擬結果-1..............................................................................................41 圖 5-3 RTL模擬結果-2..............................................................................................42 圖 5-4 RTL模擬結果-3..............................................................................................42 圖 5-5 材質過濾效果 ................................................................................................43 圖 6-1 Anisotropic Filtering........................................................................................46 圖 6-2 Bump Mapping................................................................................................46

  • vii

    LIST OF TABLES PAGE

    表 3-1 材質快取記憶體之標籤選用比較 ................................................................25 表 3-2 材質過濾參數與硬體設定 ............................................................................30 表 3-3 Texture Environment Formula.........................................................................31 表 4-1 Code style check列表 .....................................................................................37 表 4-2 Code coverage結果 ........................................................................................38 表 5-1 Top design IO定義 .........................................................................................40 表 5-2 硬體之合成面積(TSMC 0.18um Slow 150Mz) ............................................44

  • 1

    第1章 簡介

    1.1 研究動機

    隨著摩爾定律(Moore’s Low)所預期,晶片製程技術發展每一年十個月進步一

    倍,也推動市面上各式各樣電子產品不斷地推出,產品體積愈做愈小,功能確愈

    來愈強大。從以往單一產品功能的市場,轉而朝向行動化個人整合資訊平台的方

    向來推進。而平台所包含的功能,除了傳統的聲音、影像等多媒體應用、及行動

    通訊外,即時三維電腦圖形呈像功能的需求,也逐漸地被大家所重視。其主要的

    原因不單只是提供遊戲娛樂的功能,另一面乃是可以實現更逼真、更有效的互動

    式使用者介面。因此不論在家用產品或是行動設備的發展上,如何引進圖形呈像

    技術以產生更豐富的多媒體效果,乃是未來資訊軟硬體業者努力的重點方向之

    一。

    電腦圖學(Computer Graphics)乃是探討如何透過電腦顯示圖形技術的課題,

    從很久以前即是資訊領域研究的重要一環,尤其是最近幾十年來,隨著電腦效能

    的提昇,電腦圖學的應用也由傳統二維延伸到三維。三維圖形的重要性不僅只是

    在於提供一個立體化的三維圖像而已,也藉著其能真實反映三度空間物件圖像的

    特點,計算創造出虛擬的真實,無論是我們生活週遭環境的自然現象、人物、想

    像中或已經不存在的生物,都可以從電腦圖學的研究中與利用電腦強大的運算能

    力產生栩栩如生的畫面,提供人們更精緻、更生動的視覺享受。因此電腦圖學廣

    泛地使用在許多領域,譬如空間設計、模型設計、虛擬實境、電腦動畫、電腦輔

    助設計等涵蓋包括商業、工業、藝術、娛樂、廣告、教育、研究、訓練和醫療等

    各個領域之應用,這些電腦圖型的應用不單純是靜態的影像,也可以是動態的互

    動式應用。也因此針對三維電腦圖學(3D Computer Graphics)的基礎技術研究,也

  • 2

    不斷地在進行。

    如何藉由程式演算法的處理讓電腦能夠繪製呈現出更細緻的物體模型,表現

    出更接近真實的視覺效果,一直以來都是電腦圖學不斷追求的主要目標,其中材

    質貼圖(Texture Mapping)是用來呈現生動的畫面所需要的主要運算之一。使用材

    質貼圖可以允許複雜的三維場景不用過渡耗費在如何去設計幾何造型,只要貼圖

    運算進行的適當,就能使材質影像任意地貼到物件的表面。從材質影像取回的資

    料經過重新取樣,再送到螢幕上的呈現,這個過程稱為材質過濾 (Texture

    Filtering)。本篇論文設計一組材質單元,在像素填充率每一個週期可產生兩筆像

    素輸出下,提供 Nearest Neighbor、Bi-linear Filtering與 Tri-linear Filtering等不同

    品質的像素輸出,並且支援 mip-map 功能,能夠選取最好的材質圖片進行材質

    貼圖。

    1.2 論文架構

    本論文分為五大章節。第一章說明研究動機以及論文摘要。第二章是針對三

    維(3D)電腦圖學中後端繪圖引擎的材質單元(Texture Unit, TU)簡介與應用。

    接著針對 3D繪圖當中材質過濾單元的各種演算法如何利用數學式運算以及相關

    原理做介紹,並且對於目前硬體架構的研究簡單介紹。第三章詳細介紹如何實做

    TU 的硬體單元,從各個硬體化的運算模組,到如何組成 TU 系統、如何設計排

    程等的推導。第四章是如何驗證整個系統,從各方面來驗證,並且分析其效能。

    第五章是介紹整個 Rendering System與軟體的溝通及各種貼圖效果在 RTL環境

    下的展示。第六章是對於此論文的研究結論,並且提出未來研究的方向。

  • 3

    第2章 研究背景及相關研究

    在傳統三維呈像演算法發展的過程中,訂定了如圖 2-1之標準的繪圖流程,

    在這個繪圖流程之中,每個處理步驟所提供的功能都被明確規範。針對以上電腦

    繪圖之運算所提出的硬體設計架構有相當多[1]-[9],其中有採用多媒體可程式化

    處理器之槪念設計[1]、[2],也有針對三維電腦呈像之管線化流程的運算來設計

    特定的硬體模組[3]-[6]、[8]、[9]。而整體硬體設計除了考量到需要提供足夠的整

    數或浮點運算能力之外,另一個重要的考量就是記憶體頻寬。根據許多研究

    [12]、[13],後端像素層級的呈像系統的瓶頸主要在於記憶體的頻寬,因為呈像

    系統對於材質(Texture)的讀取以及 Depth Buffer與 Frame Buffer讀寫的需求量非

    常高,對於記憶體頻寬使用上的改善對於整體系統效能提昇是相當迫切的。為了

    避免頻繁的外部記憶體存取,許多方法被提出來改善硬體的效能。[24]、[25]有

    深度測試在繪圖流程中對於材質貼圖運算時,減少讀取記憶體的次數;也有使用

    階層式記憶體架構用來改善記憶體頻寬,其中使用快取記憶體(Cache)架構如圖

    2-2,在加速材質貼圖運算上最為常見。材質快取記憶體(Texture cache)架構設計

    上,例如快取記憶體大小、快取記憶體區塊大小及快取集合數目對於貼圖效能之

    影響[22],以及藉由選取合適的材質快取記憶體索引[23]來減少快取失誤。本論

    文所設計重點是著色子系統中材質單元,其中包括有效率的材質快取記憶體,使

    用交錯式記憶體設計,能夠有效率的提供資料給後端材質過濾單元運算,加速材

    質貼圖處理。在材質過濾單元設計上,藉由硬體共享的技術,減少算術邏輯單元

    的使用,並且能夠與軟體端溝通,動態提供不同品質的過濾像素輸出。

  • 4

    ViewingTransform Culling Lighting

    PerspectiveTransform Clipping

    TriangleSetup Rasterization

    Texturing&

    fog

    TextureBuffer

    Per-fragment operation(alpha/depth/stencil testBlending/logic op etc.)

    Depthbuffer

    Framebuffer

    Geometry system

    Raster system

    Display

    圖 2-1標準的繪圖流程

    圖 2-2 階層式的記憶體架構

    2.1 Texture介紹

    材質貼圖在物體著色方面是最引人注意、也是最擬真的方法,同時也多為目

    前的遊戲軟體所採用。一張平面圖像(可以是數字化圖像、小圖標或點陣位圖)

    會被貼到多邊形上。例如,在賽車遊戲的開發上,可用這項技術來繪製輪胎胎面

    及車體著裝。而貼圖的應用不單單只是將圖片繪製到物件上,像是Mip-Mapping

    貼圖技術,可以根據物件的遠近貼上不同解析度的材質;Bump Mapping(凹凸貼

    圖),能夠在 3D場景中模擬粗糙外表的技術,達到凹凸的表面效果。而在材質過

    濾效果又依照不同品質貼圖的要求,有 Nearest Neighbor(近鄰取樣)、Bi-linear

    Filtering(雙線過濾)、Tri-linear Filtering(三線過濾)與 Anisotropic Filtering(各向異

  • 5

    性過濾)等這些不同演算法,後面的章節會對這些技術做介紹。

    2.1.1 Texture Mapping

    材質貼圖(Texture mapping)是今日電腦圖學中一個相當重要的運算,所謂貼

    圖就是將二維材質貼到三維的物件表面這個動作,如圖 2-3所示 X,Y是螢幕上

    的座標,S,T則是二維材質上的座標。貼圖是三維圖形處理過程中相當重要的功

    能,經過貼圖之後能使繪製出來的物件更栩栩如生,如圖 2-4所示。

    圖 2-3 Texture Mapping

    圖 2-4 材質貼圖效果

    然而貼圖所使用的材質本身是一個數位影像,所以貼圖已經是由一個訊號取

    樣後的結果。現在要把材質貼到物件上,繪製物件所需要的取樣點,並不一定會

    剛好是材質所使用的取樣點,所以在這裡會出現二次取樣的情形。貼圖在被重新

    取樣的過程中,主要會面臨的問題有兩種。第一種就是放大的取樣,即取樣點的

    間距,比原先材質的取樣點間距要來得小;第二種是縮小的取樣,即取樣點的間

    距較大,圖 2-5就是一個放大取樣的例子。因此為了解決貼圖時取樣點間距比原

  • 6

    先材質小所產生的失真問題,不同品質的過濾演算法就被提出來降低失真的情

    況。

    圖 2-5 放大取樣

    2.1.2 Texture Filtering

    重新取樣的第一個動作,就是要重建原來的訊號。如果重建訊號的動作不正

    確,就會在重新取樣的時候,造成失真的問題。因此為了要能夠快速重建出訊號,

    一定要使用簡單的運算。最簡單的運算,當然就是在重新取樣的時候,直接取距

    離最近的取樣點。因此,這個方法稱為 Nearest Neighbor 。因為只取一個取樣

    點,所以有時也稱為 Point Sampling。它的結果當然不會太好,而且還會產生新

    的失真問題。其實 Point Sampling 也可以看成利用零次多項式,即常數多項式

    去逼近的方法。所以,一個很自然的想法,就是用一次多項式去逼近,也就是線

    性內插(Linear interpolation),圖 2-6是線性內插的示意圖。

  • 7

    圖 2-6 線性內差

    不過線性內插的問題在於它所產生的結果並非平滑的,所以在某些情形下表

    現並不好。因此,在二維的訊號,像是二維貼圖上,那就要同時對兩個方向都做

    線性內插,稱為雙線性內插(Bi-linear interpolation)。使用雙線性內插的時候,

    每個取樣點需要取 2*2個點來計算, 圖 2-7是使用雙線性內差出來的效果,使

    用 Point Sampling 的方法很明顯字母四周都有明顯的鋸齒狀,而使用 bi-linear

    interpolation則明顯改善許多。

    (A) Point sampling (B) Bi-linear interpolation

    圖 2-7 雙線性內差效果

    如果重新取樣時,取樣點的間距比原來要大,即縮小物件的時候,會出現新

    的問題。最明顯的問題,在於取樣點間距放大時,相對的取樣頻率也就減少。這

    時,訊號中就可能會包含一些過高的頻率成份。在圖 2-8 (A)中,原始圖形越靠

    近右下角波紋越密集,具有相當多的高頻率成份,但由於沒有超出取樣頻率的一

    半,所以並沒有失真的現象。但是,如果直接進行重新取樣,將物件縮小為原來

    的一半時,由於超過原本取樣頻率的一半,在原本頻率越高的部份就會出現失真

    的現象。如圖 2-8 (B)中除了左上角以外,其他三個角都出現失真的情形。

  • 8

    (A)原始圖片 (B)Point sampling

    圖 2-8 訊號縮小取樣

    為了解決這個問題,Lance William[14]在 1983年的提出了一篇重要的論文。

    這篇論文提出了一個解決方法:如果事先把材質用各種大小的過濾器處理,建立

    許多不同解析度的材質。將來在縮小的時候,只要選擇適當的大小,就不需要使

    用額外的過濾器來處理這個動作,這個方法就是MIP-map。舉個例子來說:如果

    材質的大小是 256×256,可以事先計算出 128×128、64×64、32×32、…、4×4、2×2

    和 1×1 等不同解析度的材質。假設現在對材質做重新取樣,長與寬為原本的 1/4

    時,這時只要取用 64×64 的材質就可以很快得到重新取樣的結果。當然,這樣

    會使材質貼圖所需的空間增加,但是最多只會增加原來的二分之一的空間。圖

    2-9(A)是直接將原圖去做 Bi-linear interpolation產生的結果,可以發現遠方的圖片

    會有失真情形,而圖 2-9(B)是先利用 MIP-map 方式產生不同大小的圖片,再選

    擇適當的圖片去 Bi-linear Filtering,遠方的圖片看起來就比較清楚一些。

  • 9

    (A)未使用MIP map (B)使用MIP map

    圖 2-9 MIP-map應用實例

    接下來介紹另一種 Filtering 的方法,稱為三重線性內差 (Tri-linear

    interpolation)。圖 2-10(A)是使用MIP-map產生不同解析度的圖片去做 bi-linear

    interpolation,但由於圖片中的路不同距離需要選取不同解析度的圖片做貼圖,

    在不同解析度的貼圖有很明顯的接縫情形。圖 2-10(B)則是使用三重線性內差後

    的結果,可以看出在使用不同解析度圖片的接縫地方比起圖 2-10(A)更平滑,有

    效的降低明顯的接縫情形。

    (A)Bi-linear interpolation with MIP map (B)Tri-linear interpolation with MIP map

    圖 2-10 三重線性內差效果

    三重線性內差的方法比起雙線性內差處理一次所需要讀取的圖素多一倍,所

    需要運算量也比雙線性內差大,但在開啟MIP-map時能有效的減少不同解析度

    之間的材質貼圖所造成的接縫情形,在接縫的地方能夠更自然平滑。

  • 10

    2.1.3 Texture Wrapping

    Texture Wrapping 中 提 供 了 三 種 操 作 模 式 - REPEAT 、 CLAMP 、

    CLAMP_TO_EDGE來對貼圖座標做處理。首先介紹REPEAT這個模式,由於貼圖

    座標的給定不一定會符合貼圖來源圖像大小,三角形內部像素的貼圖座標是由

    Rasterizer內插計算得到的,所以可能產生超出原始圖像大小的材質座標,

    REPEAT模式對此的處理方式是捨棄整數部份,只取其小數部分為真正的貼圖座

    標,這樣可以在那些超出來源圖像大小的像素上造成重複貼圖的效果,如圖 2-11

    中B圖所示。在CLAMP模式處理上,則是將其限制在圖像大小的範圍內,如果

    貼圖座標小於0,將其貼圖座標設為0,相反的,如果貼圖座標大於1將其貼圖座

    標設為1,可以造成重複圖像邊緣貼圖的效果,貼圖效果可參考圖 2-11中C所示。

    CLAMP_TO_EDGE模式的作用與效果則是跟CLAMP很類似,只是它功能不單單

    只是對貼圖座標作限制的動作,還必須參考貼圖材質影像的大小決定實際限制的

    範圍,根據OpenGL ES中所定義,會將像素的貼圖座標範圍限制在[ 1/2N , 1 -

    1/2N ],其中N是材質圖片大小。

    A.原始貼圖 B. Repeat mode C. Clamp mode 圖 2-11 Texture Wrapping

    2.2 Filtering Algorithm

    這一節會介紹本材質過濾器運用到的幾種 Filtering Algorithm,包括 Nearest

    Sampling、Bi-linear Filtering以及 Tri-linear Filtering等。其中 Bi-linear Filtering

    與 Tri-linear Filtering 是由基本的 linear interpolation 運算所組成,而 Tri-linear

    Filtering 又是由 Bi-linear Filtering 與 linear interpolation 所組成。本節會先介紹

  • 11

    Nearest Neighbor 之設計方法,接著介紹基本的 linear interpolation,再介紹

    Bi-linear Filtering與 Tri-linear Filtering。為了支援 Tri-linear Filtering,必須要有

    MIP-map 之支援以及 Level-of-detail(LOD)之計算,這在最後一節會做介紹。

    2.2.1 Nearest Neighbor

    如圖 2-12橘色點為材質座標 U,V經過 scale過後成座標(S,T);黑色線條交

    叉點為材質顏色。Nearest Neighbor材質過濾算法要將 Scale過後的座標 S,T選取

    最近的整數點顏色,也就是將黃色箭頭指到的位址資料讀取出來即可。因此在設

    計上會根據送進材質快取記憶體中之座標(S,T)之 fraction來選取最近的整數點

    texel,最後再做輸出。

    圖 2-12 Nearest Neighbor

    2.2.2 Bi-linear Filtering

    Bi-linear Filtering是利用2.2節所提到,將鄰近的四個texl進行雙線性內差。雙

    線性內差顧名思義即是在二維的線性系統做線性內差,如圖 2-13 所示在一維座

    標系統上,T0、T1為整數位址上之兩筆texel,f為目標距離T0點之小數部分,因

    此將目標點做線性內差,演算法如方程式 2-1所示。

    圖 2-13 線性內差

  • 12

    Target = T0*(1-f)+T1*f

    方程式 2-1線性內差公式

    二維座標系上相鄰的四個整數點如圖 2-14所示,Fx、Fy分別是目標點距離

    T0點之X座標與Y座標之小數部分,分別對T0與T1,T2與T3做X方向之線性內插

    完;兩筆X方向線性內插完之結果再做Y方向之線性內插,其結果即是雙線性內

    插,雙線性內插演算法如方程式 2-2所示。

    圖 2-14 雙線性內差

    Target = (T0*(1-Fx)+T1*Fx)*(1-Fy)+ (T2*(1-Fx)+T3*Fx)*Fy

    方程式 2-2雙線性內差

    2.2.3 Tri-linear Filtering

    Tri-linear Filtering從字面上的意思來看,即是做三次的線性內插,上一節介

    紹之Bi-linear Filtering是分別在橫軸與縱軸上做線性內插,而Tri-linear Filtering與

    Bi-linear Filtering的差別在於除了原本的橫軸與縱軸需要做內插之外,還增加了

    不同解析度的兩張材質之間,層與層之間的線性內差。所謂層與層之間的線性內

    插,即是目標點經過LOD計算之後與經過MIP-map產生後整數層級的差距。如圖

    2-15所示Tri-linear Fraction即是經過LOD計算完之後與第0層之差距。因此,圖

    2-15 先分別對第0層與第1層兩張不同解析度材質做Bi-linear Filtering之結果再根

    據Tri-linear Fraction做一次線性內差,這樣即是Tri-linear Filtering。

  • 13

    圖 2-15 三重線性內差

    2.2.4 MIP-map

    上一節提到執行Tri-linear filtering時,需要MIP-map的支援才能計算出目前

    的像素最適合的LOD。所以,在這一節首先會介紹MIP-map的作法,以及計算每

    一個像素最適合的材質解析度。

    MIP-map可以快速提供適當的材質尺寸進行材質過濾,硬體所需要耗費額外

    的負擔,最多只需要提供比原本的Texture buffer多1/2儲存空間,但卻能有效的減

    少Filtering的重複執行的次數,降低執行材質過濾的時間。使用MIP-map時,首

    先會定義原始材質圖片為LOD 0(level-of-detail 0),然後將此張貼圖材質中每四個

    相鄰的texel做平均產生一筆新的texel,最後產生LOD 1這張解析度的材質,如圖

    2-16所示 LOD 1之材質長寬各是LOD 0的1/2。如此不斷重複執行,直到產生的

    材質尺寸為1×1 texel為止。

    圖 2-16 MIP-map image pyramid

    當產生不同解析度的材質之後,接下來材質單元就能根據每點像素在 Screen

  • 14

    space 與 Texture space中的關係,選擇最適當的解析度材質。在 Screen Space中

    四點像素經過貼圖計算過後,選擇在 Texture Space中的這四點 texel。在 Screen

    Space中的這四點像素的座標關係分別是 X方向與 Y方向差距為 1,但對應到的

    Texture Space的四點 texel的座標卻不是連續的。因此,當關閉MIP-map功能時,

    材質單元會直接讀取這四點 texel,做為 Screen Space上四點像素的材質顏色。由

    於這四點 texel在 Texture Space上的座標位置並不是連續的,所以經過貼圖之後

    像素的顏色會有失真的情形發生。

    當開啟MIP-map功能時,材質單元可以經由計算出的 LOD選取最適合的解

    析度材質。所謂最適合解析度材質,即為經過貼圖計算選取到的四點 texel座標

    位址差距接近為 1,如此一來可以減少因為讀取到的 texel為不連續的位置,所

    產生失真。Texture Space中的四點像素對應到 Screen Space四點 texel這之間的

    比例在這稱為 Texture minification。有許多高品質過濾演算法被提出及實作

    [17]-[21],但由於在貼圖的過程中,像素對應到 Texture Space的 texel所形成的

    形狀一般都是不規則之四邊型,因此要計算 Texture minification就會十分困難。

    為了降低計算 Texture minification的複雜度,採取部份像素反對應材質空間

    的方法就被提出。在圖 2-17中,P點與 A點在 Screen Space中的座標關係在 X

    方向增加一個單位,對應到 Texture Space 上 S 與 T 座標則是相差 Sx 與 Tx。P

    點與 B點在 Screen Space中的座標關係在 Y方向增加一個單位,對應到 Texture

    Space上 S與 T座標則是相差 Sy與 Ty。再根據畢氏定理,即可求出r1與r2這兩個邊長,選擇最大的邊即是 Texture minification,Heckbert[15]認為由這三點,來

    計算 Texture minification是一個合理的近似方法。方程式 2-3為計算出 LOD之

    數學式,一開始先算出 texture minification之後,再利用 texture minification算出

    Level-of-detail(LOD)與 Tri-linear fraction。

  • 15

    圖 2-17 Pixel inverse mapped to texture-space using constant partial derivatives

    ( )2y2y,2x2x tstsMaxj ++= LOD = Floor(log j)

    LOD

    LOD

    22j ractionfTrilinear −=

    方程式 2-3 Level-of-detail計算公式

  • 16

    第3章 三維呈像之材質單元硬體架構

    在這個章節,首先會介紹本論文設計之材質單元,其中包含了一組材質快取

    記憶體以及材質過濾單元。本設計之材質快取記憶體能支援同時八筆 texel 輸

    出;材質過濾單元可以依照應用程式的需求,提供 Nearest Sampling、Bi-linear

    Filtering與 Tri-linear Filtering等不同模式材質過濾演算法使用。

    3.1 材質快取記憶體硬體設計

    材質快取記憶體是用於材質單元中的快取記憶體,功能是到要進行貼圖的材

    質中讀取顏色。當開啟MIP-map功能時,理論上相鄰的像素所需要讀取 texel在

    材質中的位置差距會在一個單位左右。因此,使用材質快取記憶體對於材質單元

    讀取 texel上會減少貼圖的處理時間。

    有別於一般快取記憶體,材質快取記憶體只會對外部的記憶體做讀取的動

    作,而不需要去寫入任何資料到外部記憶體中,且為了支援 Bi-linear Filtering與

    Tri-linear Filtering,本設計在記憶體設計上採取交錯設計方式,將資料分散放置

    在四組雙埠記憶體中。因此,最多能提供兩筆 Bi-linear Filtering 像素或一筆

    Tri-linear Filtering像素輸出。

    材質快取記憶體從輸入端接收材質座標(S,T)以及 LOD,判斷所屬之材質顏

    色是否存在於快取記憶體中。如果不存在,即發生 miss,此 texel在 Texture Buffer

    中的位址就會被計算好,之後送到匯流排介面(Bus Interface),經由匯流排去讀取

    Texture Buffer中所需要的 texel。如果所需要的 texel存在 Cache中,即發生 hit,

    則直接將 texel輸出。

  • 17

    3.1.1 材質快取記憶體硬體架構

    圖 3-1是 Texture Cache之資料流程圖,座標 U,V經過 Clamp與Wrap之後,

    再經過位移 LOD之後,即是第 LOD層之 texel座標 S,T。計算完之材質座標(S,T)

    送進材質快取記憶體中,經由 CAT(Cache Address Translation)產生材質快取記憶

    體中之記憶體位址;另一方面經由 DMA(Direct Memory Access)產生此 texel擺放

    在 Texture Buffer 中之位址。由 CAT 產生之位址與快取記憶體之標籤(Tag)比對

    後,如果是 hit則直接將快取記憶體中之 texel送給後端材質過濾單元運算;否則

    發生 miss,通知狀態控制器(State Machine),控制 DMA模組去材質緩衝區讀取

    一個 4*4 區塊之 texel,一次將材質快取記憶體中一個快取區塊(Cache Block)取

    代,再將發生 Cache Miss那筆 texel輸出。

    圖 3-1 Texture cache資料流程圖

    3.1.2 材質快取記憶體效能分析

    圖 3-2與圖 3-3是使用C model模擬相同的快取記憶體大小對應到不同區塊

    大小所造成之Miss Penalty,可以看出區塊 4*4大小所造成之誤失代價為最小,

    而本論文採用一個區塊擺放 4*4筆 texel。

  • 18

    Cache size 16KB, Direct map

    0

    5

    10

    15

    20

    25

    4X4(256 lines) 8X8(64 lines) 16X16(16 lines) 32X32(4 lines)

    Block size

    Mis

    s pe

    nalt

    y Maverick

    Soccer

    Orange

    Gun

    圖 3-2 快取區塊大小對於失誤代價的影響(16KB cache, direct map)

    Cache size:64 KB, Direct map

    0

    5

    10

    15

    20

    25

    4X4(1024 lines) 8X8(256 lines) 16X16(64 lines) 32X32(16 line)

    Block size

    Mis

    s pe

    nalt

    y Maverick

    Soccer

    Orange

    Gun

    圖 3-3 快取區塊大小對於失誤代價的影響(64KB cache, direct map)

    在 Cache Size上的分析,使用一個區塊擺放 4x4筆 texel來觀察不同快取記

    憶體大小影響Miss Penalty。由圖 3-4可以看出當 Cache size在 4KB時誤失代價

    的曲線已趨於平緩,根據評估之後,本論文採用 4KB 記憶體大小當做快取記憶

    體的容量。

    Block size : 4X4 pixel, Direct map

    0

    1

    2

    3

    4

    5

    6

    7

    256B(4 lines) 1KB(16 lines) 4KB(64 lines) 16KB(256 lines)

    Cache size

    Mis

    s pe

    nalty Maverick

    Soccer

    Orange

    Gun

    圖 3-4 快取大小對於失誤代價的影響(4X4 words/block, direct map)

  • 19

    3.1.3 材質快取記憶體之硬體支援

    本材質單元必須支援一次兩筆相鄰像素之材質過濾之 texel 讀取,所以一次

    會送進材質快取記憶體兩筆 texel 材質位址。由於在兩條平行管線上各放置一個

    快取記憶體,能夠很方便的處理 texel 之讀取,但可以預期相鄰之像素對應到材

    質中的 texel 都會落在同一個區塊中。因此,如果在兩條管線上各放置兩塊獨立

    的快取記憶體,經過一段時間的讀取,快取記憶體中的資料會幾乎相同,在硬體

    面積使用上會十分浪費。因此,本論文採用一組快取記憶體一次支援兩筆 texel

    讀取,如圖 3-5所示。

    圖 3-5 Texture Cache架構改善

    為了支援每次兩筆材質過濾的顏色輸出以供 Bi-linear Filtering與 Tri-linear

    Filtering運算,而每筆 Bilinear Filtering又必須讀取四筆 texel,每筆 Tri-linear

    Filtering則需要八筆 texel做運算。所以本設計之快取記憶體為了一次能提供八

    筆資料,採用交錯記憶體之設計方法,將原本之記憶體切成四份同樣大小之記憶

    體,並將讀取回來之資料分散放置入這四份記憶體,記憶體種類則是採用雙埠記

    憶體。

  • 20

    3.1.4 材質快取記憶體之資料排列

    在上一節提到,材質快取記憶體為了一次提供兩筆 Bi-linear Filtering之結

    果,在架構上使用交錯記憶體之設計方式,而如何擺置記憶體中資料,進而提供

    後端材質過濾單元做運算,這也是非常重要的議題。

    如圖 3-6是一張帶有 N×N筆 texels之材質,先將此材質以 4×4筆 texels為

    一個區塊分割,可分成(N/4)×(N/4)個區塊。由於 Bi-linear Filtering一次必須讀取

    2×2筆 texels,所以只要將這 2×2筆 texels分散放置到四組記憶體中,就能滿足

    一次 2×2筆 texels輸出。每一組 4×4大小的區塊,依照 2×2為一單位可分成 4

    組小區塊,而每一組 2×2的 texels是執行 Bi-linear Filtering時所要讀取的 texels。

    接下來要將此 texels分散放置到四組記憶體中,擺放 texels的方法先從一組

    4×4筆 texels區塊來看,材質區塊擺放的方法由左到右由上到下放置到快取記憶

    體中,如圖 3-6中虛線所指示的順序放置,記憶體則由低位址開始擺放到高位

    址。接下來為了滿足四組記憶體能一次讀取 2×2筆 texels,所以每 2×2筆 texels

    必須放置到四組記憶體同樣位址的地方,也就是這 2×2筆 texels必須放置到圖

    3-7同一列的位址,區塊中的四組 2×2 texels擺放準則也是依照由左到右由上到

    下依序放置到記憶體中,記憶體也是由低位址放置到高位址。如圖 3-6依照順序

    從編號 0到編號 15放置到圖 3-7中快取記憶體中的對應的編號位置。

    由於一個 2×2區塊中的四筆資料的材質座標(S,T)在捨棄最低位元之後會是

    相同的,依照這樣的資料擺放方法,將捨棄最低位元後的材質座標當作記憶體讀

    取的位址,同時輸入到四組記憶體,能夠一次讀取出一組 2×2區塊的資料。如圖

    3-7中,快取記憶體中讀取位址由材質座標 T的第一個位元與材質座標的第一個

    位元合併起來,就能一次讀取 2×2筆個資料。

  • 21

    圖 3-6 材質資料分配

    圖 3-7 材質快取記憶體中資料排列

  • 22

    Texture cache中資料經過這樣擺置,可以確保每次讀取四筆相鄰的 texel不

    會有衝突發生,讀取之四筆 texel會分別從四組記憶體輸出,而不會發生有兩筆

    資料必須從同一組記憶體輸出。下一章會介紹如何設計材質快取記憶體位址產生

    器。

    3.2 材質快取記憶體位址產生器

    為了支援交錯記憶體設計,在讀取記憶體之位址也必須經過特別的處理。將

    原本送進材質快取記憶體中之一組材質座標(S,T),經過位址產生器產生鄰近之四

    筆材質座標,以供材質過濾單元使用。圖 3-8中,Cache Address Translation(CAT)

    的功能是將兩組管線所送進來的材質座標讀取進來,產生八筆 texel在 Cache中

    的位址輸出。

    RAM0

    RAM1

    RAM2

    RAM3

    CAT

    S0

    T0

    Pixel0_T0

    Pixel0_T1

    Pixel0_T2

    Pixel0_T3

    S1

    T1

    Pixel1_T0

    Pixel1_T1

    Pixel1_T2

    Pixel1_T3

    圖 3-8 Cache Address Translation

    圖 3-9是 CAT模組硬體架構圖,一組材質座標(S,T)送進 CAT模組後,會產

    生周圍三組材質座標(S,T)以供材質快取記憶體讀取。由於輸入進 CAT 模組的材

    質座標(S,T)中的最低位元,會有圖 3-10中這四組情形,所以 CAT模組中的多工

    器根據材質座標(S,T)之最低位元,產生其他三筆材質座標。

  • 23

    圖 3-9 CAT硬體架構圖

    圖 3-10 材質座標表示圖

    3.3 材質快取記憶體之標籤設計

    材質快取記憶體之標籤(Tag)的設計上本論文捨棄原本使用記憶體位址當作

  • 24

    標籤,採用材質座標(S,T)與 LOD合併起來使用。圖 3-11是直接使用記憶體位

    址當作標籤,本論文設計之快取記憶體有 64個區塊,每個區塊內放有 4*4筆資

    料。因此,32bit的記憶體位址扣除掉 Byte offset(4 bits)與 Block index(6 bits),其

    他部份都選做標籤的部份。所以,整個快取記憶體標籤的部份為 64*22bits。

    本論文採用的標籤設計方法考慮到材質尺寸在硬體支援上會有限制,因此選

    用記憶體當作標籤的來源會浪費硬體上的資源。本材質單元最大可支援到

    1024×1024 大小的材質,因此材質座標(S,T)為 10bit;因為 1024×1024 使用

    MIP-map功能時,會產生 11層不同解析度的材質,所以 LOD部份使用 4bits來

    存放 LOD 資料。圖 3-12 中,(S,T)材質座標中的第零到第四位元是用來選取區

    塊以及字元,所以選用(S,T)中的第九到第五位元以及 LOD資訊當作標籤。表 3-1

    是兩種標籤選用方法的比較,可以看出減少了 36%的快取記憶體中標籤位元數的

    使用。

  • 25

    標籤選用 位元/區塊 位元/快取記憶體 減少位元 減少位元百分比(%)

    記憶體位址 22 64*22bits 0bit 0%

    材質座標 14 64*14bits 512bits 36%

    表 3-1 材質快取記憶體之標籤選用比較

    圖 3-11 選用記憶體位址做為標籤

    圖 3-12 選用材質座標與 LOD做為標籤

    3.4 材質基底位址表格

    當材質快取記憶體發生失誤時,此時 DMA模組就會讀取發生 miss 的 texel

    記憶體位址。在沒有開啟 MIP-map 功能時,也就是只有一層材質的時候,只要

    直接把材質的基底位址加上 texel相對於材質的位址計算出來即可。

    當開啟MIP-map,讀取不同 LOD的 texel顏色所需要的計算,可以知道如果

    要讀取第 i層的 texel時,必須將 LOD0到 LOD(i-1)每一層所使用的材質大小計

  • 26

    算出來,且根據 OpenGL 定義材質尺寸為 2m×2n,每一層 LOD 材質的尺寸不一

    定是等長,如圖 3-13。可想而知在即時系統上這樣會花費相多時間來計算。

    圖 3-13 材質基底位址

    本論文設計一個表格,表格中存放每一層材質基底位址。當啟動呈像系統

    時,便開始計算各不同解析度材質之基底位址。如此便能節省執行材質貼圖時,

    計算 texel位於記憶體位址的時間。

    3.5 材質過濾器硬體架構

    在本節會介紹材質過濾單元,包括 Nearest Neighbor、Bi-linear Filtering 與

    Tri-linear Filtering 等設計。材質過濾單元之設計先將所需要執行的等式化簡之

    後,再找出相同的算術單元,達到硬體共享的目的。如第二章所提到,Tri-linear

    Filtering需要兩組雙線性內差以及一組線性內差,而 Bi-linear Filtering則是需要

    三組線性內差即能完成。因此,線性內差模組是執行材質過濾所需要最基本之模

    組。本論文會先介紹 Nearest Neighbor之設計,接著會介紹 linear interpolation之

    設計,再依序介紹 Bi-linear Filtering與 Tri-linear Filtering。

  • 27

    3.5.1 Nearest Neighbor

    Nearest Neighbor 材質過濾演算法只要將材質座標(U,V)依據材質尺寸 scale

    成座標(S,T),之後將小數部份選取最近的整數點 texel 做輸出即可。由於做

    Bi-linear Filtering時一次會讀取鄰近的四筆 texel放置在四組記憶體,所以只要判

    斷 S與 T方向之 fraction 是否大於一半,即可選擇由這四筆 texel哪組記憶體做

    輸出。

    3.5.2 線性內插

    方程式 3-1是線性內插原始數學式,經由化減之後可以看出化簡過後需要之

    數學式比原本的數學式少一組乘法器,因此本論文選擇化簡過後的數學式實做線

    性內插。圖 3-14是線性內插之資料路徑圖。

    Li = T0*(1 - f) + T1*f = T0 - T0*f + T1*f = T0 + f*(T1 - T0)

    方程式 3-1 線性內插等式化簡

    圖 3-14 線性內插資料流程圖

    3.5.3 雙線性過濾器

    方程式 3-2是所提到雙線性過濾之演算法,根據上一節線性內插化減方式,

    可以先對兩組線性內插部份做化簡,之後再將 Fy提出做一次同樣之化減。圖

  • 28

    3-15是雙線性過濾器資料路徑圖。

    Bi =[T0*(1-Fx)+T1*Fx]*(1-Fy)+[T2*(1-Fx)+T3*Fx]*Fy

    =[T0+Fx(T1-T0)]*(1-Fy)+ [T2+Fx(T3-T2)]*Fy

    =[T0+Fx(T1-T0)]+Fy{[T2+Fx(T3-T2)]-[T0+Fx(T1-T0)]}

    方程式 3-2雙線性內插等式化簡

    圖 3-15 雙線性過濾器資料流程圖

    3.5.4 三重線性過濾器

    根據前面章節所提到,三重線性過濾是經由 LOD計算之後,選擇MIP-map

    產生之鄰近之兩層材質,再分別對這兩層分別做雙線性內插之後,根據 LOD計

    算完 LOD之 Tri-linear Fraction,再做一次線性內插。圖 3-16是三重線性內插資

    料路徑流程圖。

  • 29

    圖 3-16 三重線性內插資料流程圖

    3.5.5 可組態化材質過濾單元

    表 3-2 是 Texture Filtering 所 能 支 援 OpenGL 中 材 質 功 能 中

    GL_TEXTURE_MIN_FILTER 與 GL_TEXTURE_MAG_FILTER 這兩個參數所給

    的不同設定值。其中 GL_LINEAR_MIPMAP_LINEAR即是 Tri-linear Filtering;

    GL_LINEAR 是 關 閉 MIPMAP 所 做 的 Bi-linear Filtering ,

    GL_LINEAR_MIPMAP_NEAREST 是開啟 MIPMAP 所做的 Bilinear Filtering。

    GL_NEAREST 與 GL_LINEAR 會 選 擇 Level 0 之 材 質 做 過 濾 ,

    MIPMAP_NEAREST會根據 LOD及 Trilinear Fraction選擇最近的一層材質做過

    濾,MIPMAP_LINEAR 則會選擇最近之上下兩層材質做過濾。圖 3-17 是將

    Texture Cache與 Texture Filtering整合架構圖,其中 Point Sampling是用來選擇由

    Texture Cache 送出的四筆 Texel 中離目標點(S,T)最近一筆整數點 Texel;

    Filter_enable 是用來開關 Filter 功能,MIPMAP_enable 是用來開關 MIPMAP 功

    能,藉由這種 reconfigurable硬體架構,可以利用最少的硬體透過軟體端的設定,

    有彈性的達成各種材質過濾的效果,比起一種材質過濾演算法獨立設計一份硬體

    可以省下為數不少的硬體。Throughput部分,本設計可以提供每個週期兩筆過濾

    完的 Pixel輸出,而在MIPMAP設定值為 Linear時,由於處理一筆 Pixel必須讀

    取上下兩層不同解析度之材質,所以一次會送進八筆 request到 Texture Cache,

    故 Throughput會降低一半。

  • 30

    Texture Cache

    Fraction_x

    Linear interpolation

    Linear interpolation

    Linear interpolation

    Fraction_xFraction_y

    Bilinear FilterD

    D

    D

    Fraction_x

    Linear interpolation

    Linear interpolation

    Linear interpolation

    Fraction_xFraction_y

    Bilinear FilterD

    D

    D

    Linear interpolation

    Point Sampling

    MIPMAP_enable

    D

    DTexel0

    Texel1

    Filter_enable

    Point Sampling

    Filter_enable

    Filter_enable

    DFraction_Level 圖 3-17 Texture Cache與 Texture Filtering整合架構圖

    Function MIPMAP Select Level

    Filter Throughput

    GL_NEAREST Off Always LOD 0

    Off 2 pixel/cycle

    GL_LINEAR Off Always LOD 0

    On 2 pixel/cycle

    GL_NEAREST_MIPMAP_NEAREST On 1 Off 2 pixel/cycle GL_LINEAR_MIPMAP_NEAREST On 1 Off 2 pixel/cycle GL_NEAREST_MIPMAP_LINEAR On 2 On 1 pixel/cycle GL_LINEAR_MIPMAP_LINEAR On 2 On 1 pixel/cycle

    表 3-2 材質過濾參數與硬體設定

    3.6 Texture Environment

    在前面的小節討論了有關於材質快取記憶體與材質過濾單元之硬體設計,最

    後在Texture Environment方面,本論文依據OpenGL ES Spec.所制定的規格來設計

  • 31

    其硬體單元,以下便先從OpenGL ES規格中制定的運算式討論起,表 3-3是

    OpenGL ES為Texture Environment所制定的運算方式。

    Texture Base Internal

    Format

    REPLACE MODULATE DECAL

    BLEND ADD

    ALPHA Cv = Cf

    Av = As

    Cv = Cf

    Av = Af As

    undefined Cv = Cf Av = Af As

    Cv = Cf

    Av = Af As

    LUMINANCE Cv = Cs

    Av = Af

    Cv = Cf Cs

    Av = Af As

    undefined Cv = Cf (1 - Cs)

    + Cf Cs

    Av = Af

    Cv = Cf + Cs

    Av = Af

    LUMINANCE_ALP

    HA

    Cv = Cs

    Av = As

    Cv = Cf Cs

    Av = Af As

    undefined Cv = Cf (1 - Cs)

    + Cf Cs

    Av = Af As

    Cv = Cf + Cs

    Av = Af As

    INTENSITY Cv = Cs

    Av = As

    Cv = Cf Cs

    Av = Af As

    undefined Cv = Cf (1 - Cs)

    + Cf Cs

    Av = Af (1 - As)

    + Af As

    Cv = Cf + Cs

    Av = Af + As

    RGA Cv = Cs

    Av = Af

    Cv = Cf Cs

    Av = Af

    Cv = Cs

    Av = As

    Cv = Cf (1 - Cs)

    + Cf Cs

    Av = Af

    Cv = Cf + Cs

    Av = Af

    RGBA Cv = Cs

    Av = As

    Cv = Cf Cs

    Av = Af As

    Cv = Cf

    (1- As)+

    Cf As

    Av = As

    Cv = Cf (1 -

    Cs)+ Cf Cs

    Av = Af As

    Cv = Cf + Cs

    Av = Af As

    表 3-3 Texture Environment Formula

    其運算的原理為:首先依照材質影像的格式(ALPHA、LUMINANCE、

    LUMINANCE_ALPHA、INTENSITY、RGB、RGBA)與使用者設定的Texture

    Environment模式(REPLACE、MODULATE、DECAL、BLEND、ADD)選擇相對

    應的混合參數,然後再將從材質記憶體中讀取出來的材質顏色與像素原本顏色乘

    上各自的混合參數,並根據Texture Environment模式作混合便可得到最終Texture

    Environment的顏色。

  • 32

    3.7 貼圖單元硬體架構

    圖 3-18是本論文設計之材質單元資料流程圖,其中整個材質貼圖流程又可

    細分為 9個階段。在階段 0時會將有材質的相關設定送入快取記憶體中,直到階

    段 2時資料將會由快取記憶體中取得。階段 2到階段 6為材質過濾單元處理的階

    段,此時材質過濾單元會根據不同的材質過濾設定,產生不同品質過濾結果。最

    後階段 6到階段 8則執行 Texture Environment的運算,最後將像素輸出。

  • 33

    圖 3-18 材質單元資料流程圖

  • 34

    第4章 設計、驗證及測試環境

    4.1 設計模型

    本論文設計之材質單元提供了下列幾種設計模型:

    u System behavior model

    按照 OpenGL規範,自行開發了一個簡易 3DGRE simulation engine,用來模

    擬材質快取記憶體之失誤比例,能提供我們在 3D貼圖中所評估不同物件大小、

    材質大小以及不同過濾演算法產生的失誤比例。此軟體除了可以當作硬體設計之

    參考,產生對應的測試數據檔案之外,還可以當作應用軟體開發之 API library

    使用,提供設計者在高階抽象層次直接進行初步的整合。

    u RTL model

    3DGRE IP提供了所有設計之 synthesizable RTL Verilog code,使用者可以根

    據系統需求,加以修改這些模組,或直接利用這些模組進行整合,進行後端 gate

    level或 FPGA之實現。

    4.2 軟體驗證

    在硬體開發設計的早期,使用 C的 system behavior model開發一個虛擬的系

    統環境。雖然還沒有硬體的 RTL 實做模型,但是可以藉由這個系統模擬得到硬

    體可能的各項行為資訊。這些模擬系統的建立以及模擬的速度都很快,還可以提

    供軟體設計者早期的硬體參考環境,開始相關軟體之設計。

  • 35

    圖 4-1 C語言設計模擬介面-1

    圖 4-2 C語言設計模擬介面-2

    4.3 RTL驗證

    在驗證方面,我們也採取對應的 bottom-up流程。當各子模組設計完成之後,

    先個別進行子模組之各項驗證工作,包含了檢查 coding style,測量 code coverage

    等步驟。待整體設計皆完成之後,由於各子模組都已經經過驗證,所以只需進行

    整體的功能上之驗證,以及部份整合模組之驗證。如此整體驗證上的複雜度簡化

    許多,可以節省許多驗證時間。

  • 36

    在驗證流程上,本作品也提供相關的自動化驗證流程,因為 RTL驗證最主

    要是依照輸入資料,去比對硬體所產生的資料是否為應輸出的結果。而當測試資

    料量相當大的時候,設計者不可能能一筆一筆資料去做人工比對,所以我們利用

    C語言模型去自動產生輸入資料,並且也產生相對應的應輸出結果。這些測試資

    料經過硬體運算,再將輸出結果與預期的結果相比對,就可以知道結果的正確

    性。自動化驗證也會產生相關的輸出結果,包含錯誤訊息以及繪圖結果等資訊,

    提供設計者進一步的追蹤問題。除此之外,我們可以利用前述的開發工具,將現

    有物件轉換成 RTL模擬環境的測試輸入,提供使用者可以測試具有意義的物件

    繪圖,而實際模擬的結果也可以藉由專用的工具,將其畫面顯示在螢幕上,讓使

    用者直接觀察模擬結果,如圖 4-3、圖 4-4。

    圖 4-3 RTL模擬結果

    圖 4-4 模擬結果顯示工具

  • 37

    4.4 nLint

    使用 n-Lint進行測試,整個 IP模組皆經過 coding style check,也符合絕大部

    分的語法規範,但是在 User Define項目之下的部份規則,Rule 30003與 Rule

    30006,由於設計命名上的因素,這兩條規則已盡量配合設計所規定。

    Rule Result Rule Result

    Coding Style Pass Design for Test Pass

    Naming Convention Pass File Header Pass

    Simulation Pass Comments Pass

    Synthesis Pass User Define *

    Static Timing Analysis Pass

    表 4-1 Code style check列表

    4.5 Code converge

    使用 TransEDA Verification Navigator進行測試,表 4-2為本論文設計之材質

    單元執行 Code converge結果。

    Code coverage FSM Coverage

    項目 result 項目 result

    Statement 99.1% State 95.6%

    Branch 97.7% Arc 84.3%

  • 38

    Condition 95.8%

    Toggle 97.8%

    表 4-2 Code coverage結果

    4.6 Gate level verification

    使用 TSMC Artisan 0.18um製程,以 Synopsis Design Vision進行合成。使用

    合成後得到的 net-list和 timing information進行 Gate-level simulation。這個階段

    與 RTL 階段一樣,都有提供自動化驗證工具,大幅簡化驗證時間。而本設計在

    150MHz 之下的合成結果可以正確的動作無誤,將來將更進一步的進行

    post-layout的相關驗證及模擬。

    4.7 System level verification

    在完成材質單元功能測試之後,將材質單元整合到呈像系統中,並於 FPGA

    上進行整合之測試,透過 FPGA將硬體加速模組加入到 ARM versatile發展版系

    統之匯流排上,圖 4-5為執行材質貼圖實際輸出畫面。

    圖 4-5 FPGA雛型實際輸出畫面

  • 39

    第5章 實驗結果

    5.1 軟硬體介面規格

    本論文設計之材質單元必須與其他 Rendering Engine模組做整合,與軟體溝

    同時必須以整個 Rendering Engine對外溝通。作品之核心模組的輸出入連線主要

    包含硬體控制訊號,DMA控制訊號,以及 OpenGL ES設定,這些輸出入之定義

    如表 5-1,圖示如圖 5-1左。

    Usage Port name I/O Active description

    Global Control z_base[31:0] IN N/A Base address of system Z buffer

    Frame_base[31:0] IN N/A Base address of system frame buffer

    Tri_base[31:0] IN N/A Base address of Triangle list buffer

    Image_base[31:0] IN N/A Base address of texture image

    Render_start IN High hardware module enable signal

    Render_finish OUT High hardware module finish signal

    Monitor data OUT N/A 硬體內部執行狀態數據

    Frame_size[31:0] IN N/A 定義 frame buffer大小配置

    Color_domain IN N/A 定義 RGB顏色順序

    ADDR[31:0] OUT N/A DMA讀寫之位址 DMA Interface

    WDATA[31:0] OUT N/A 欲寫入之資料

  • 40

    RDATA[31:0] IN N/A 由外部讀回之資料

    WRITE OUT High Write enable,表示進行寫入動作

    READ OUT High Read enable,表示進行讀取動作

    ACK IN High 表示讀寫動作完成,且 RDATA資料已經

    就緒

    TADDR[31:0] OUT N/A DMA讀寫之位址

    TRDATA[31:0] IN N/A 由外部讀回之資料

    TREAD OUT High Read enable,表示進行讀取動作

    Texture cache

    Interface

    TACK IN High 表示讀寫動作完成,且 RDATA資料已經

    就緒

    OpenGL

    parameters

    OUT N/A 請參閱附件Memory_map.pdf

    表 5-1 Top design IO定義

    此外我們的 IP已經設計好 AMBA的 AHB Wrapper,包括一個 Slave port以及兩個Master Port,可以供使用者直接整合進入 ARM-based平台,如表 5-1右。

  • 41

    圖 5-1 I/O definition。左圖是 IP Top design I/O,右圖是加上 AMBA AHB wrapper之 I/O

    5.2實驗結果

    5.2.1 Bi-linear Filtering

    圖 5-2(A),(B)為 RTL模擬結果,圖(B)開啟了 Bi-linear Filtering,所以在字體

    的周圍比起 Nearest Neighbor材質過濾演算法來的平滑。

    (A) Nearest Neighbor (B) Bi-linear Filtering

    圖 5-2 RTL模擬結果-1

  • 42

    5.2.2 MIP-map

    圖 5-3為未開啟MIP-map功能 RTL模擬之材質貼圖,由於為開啟MIP-map

    功能,所以整個物件都以最高解析度(LOD 0)來做材質貼圖。圖 5-4 則是開啟

    MIP-map功能之結果,在遠方的貼圖由於選用了解析度比較低的材質,所以呈現

    較模糊的結果。

    圖 5-3 RTL模擬結果-2

    圖 5-4 RTL模擬結果-3

    5.2.3 各種材質過濾演算法之比較

    圖 5-5是方塊物件使用材質貼圖之後,開啟不同品質的材質過濾設定。圖

    5-5(1)中間黑線為一個像素,所以使用 Nearest Neighbor可以看到因為黑線部份並

    不是那麼平滑。圖 5-5(2)為開啟 Bi-linear Filtering,原本黑線鋸齒狀的地方都被

    解決了,但 Cube上方面因為都使用 LOD 0的材質,遠方的黑線顯得有點失真。

    圖 5-5(3)使用 Tri-linear Filtering,解決了遠方黑線失真的問題。

  • 43

    (1) Nearest Neighbor (2) Bi-linear Filtering (3) Tri-linear Filtering

    圖 5-5 材質過濾效果

    5.2.4 硬體合成

    本設計所提出的材質單元在 0.18um的製程可以達到 150Mhz工作頻率,同

    時可以達到瞬間最高 1.2GM texel/sec材質填充之處理效能,並支援材質貼圖且

    提供 Nearest Neighbor、Bi-linear Filtering、Tri-linear Filtering等材質貼圖過濾功

    能,並支援 OpenGL-ES相關貼圖功能,硬體合成後面積如表 5-2。

    Module Name Gate Count (NAND2) %

    Cache (Control + Tag) 35,611 19.7%

    Cache memory 95,236 52.9%

    DMA 2,004 1.1%

    Mip-map controller 22,256 12.3%

    Texture base address table 4,686 2.6%

    Filtering include Bi-linear and Tri-linear Filtering

    33,367 18.5%

    Others 1,369 0.7%

  • 44

    Total 179,978 100% 表 5-2 硬體之合成面積(TSMC 0.18um Slow 150Mz)

    本設計材質單元中的 Critical path在 Filtering模組中的線性內插硬體,其中包含了兩組加法器以及一組乘法器。由於後端材質過濾單元資料路徑包含了三組

    線性內插,對此線性內插硬體加速,增加一級管線的深度時,整個材質過濾單元

    便會增加三級的管線深度。因此,這部份留到未來目標探討。

  • 45

    第6章 結論與未來目標

    6.1.1 結論

    本論文實做出 Texture Unit,包括 Texture Cache, Texture Filtering, Texture

    Wrapping以及 Texture Environment。一開始從實做出基本的 Texture Cache,只

    能滿足 Point Sampling 最基本的材質貼圖演算法,之後慢慢加入 Bi-linear

    Filtering 與 Tri-linear Filtering。Texture Cache 架構也為了配合不同的 Texture

    Filtering演算法,並且改善Miss Rate問題。未來持續針對硬體的面積以及效能

    去做改善。

    6.1.2 未來目標

    根據本論文實做出來的 TU已經可以支援材質貼圖的部份運算。而接著可以

    繼續做改進的地方有(一) Texture Cache 改善,(二) 整體架構加速,(三)加入

    Anisotropic Filtering材質過濾演算法,(四)支援Multi-texturing功能,達到 Bump

    Mapping的效果。

    n Texture Cache改善:

    在開啟Mip-map功能時,因為一次會讀取兩層 LOD的資料,所以可以在開啟Mip-map時,將記憶體分成兩部份,分別提供兩層 LOD的資料。

    n 整體架構加速:

    本論文設計之材質單元的 Critical path是在一組線性內插運算,未來可

    以針對此硬體模組做改善,以達到對整體材質單元加速的目標。

    n 加入 Anisotropic Filtering材質過濾演算法:

  • 46

    Anisotropic Filtering 演算法在視角很大的時候能提供比 Tri-linear

    Filtering更好的貼圖品質,其中又分為 1:2,1:4,…..1:16等。其中長寬比比例

    越大,處理一個像素所需要讀取的 texel 越多,因此系統的效能也會因此而

    下降。圖 6-1為開啟 Anisotropic Filtering與 Tri-linear Filtering之比較。

    (1)Tri-liner Filtering (2)16 sample Anisotropic Filtering

    圖 6-1 Anisotropic Filtering

    n 支援Multi-texturing功能:

    Multi-texturing顧名思義就是把多張圖中的 texel經過一些運算最後做輸

    出,有了Multi-texturing功能即能達到更多采多姿的貼圖效果,如圖 6-2為

    Bump-Mapping的效果。

    圖 6-2 Bump Mapping

  • 47

    第7章 參考文獻

    [1] N. Ide, M. Hirano, Y. Endo, S. Yoshioka, H. Murakami, A. Kunimatsu, T. Sato, T. Kamei, T. Okada and M. Suzuoki, “2.44-GFLOPS 300-MHz Floating-Point Vector-Processing Unit for High-Performance 3D Graphics Computing,” in Proc. of IEEE J. Solid- State Circuits, vol. 35, no. 7, pp. 1025-1032, July 2000.

    [2] Wolfe and D. B. Noonburg, “A Superscalar 3D Graphics Engine,” in Proc. of the 32nd annual ACM/IEEE international symposium on Microarchitecture , pp. 50-61, Nov. 1999.

    [3] C. -L. Chen, B. -S. Liang and C. -W. Jen, “A Low-Cost Raster Engine for Video Game, Multimedia PC and Interactive TV,” in Proc. of IEEE Trans. on Consumer Electronics, vol. 41, no. 3, pp. 724-730, August 1995.

    [4] G. J. Dunnett, M. White, P. F. Lister, R. L. Grimsdale, and F. Glemot, “The Image Chip for High Performance 3D Rendering,” in Proc. of IEEE Computer Graphics & Applications, vol. 12, no. 6, pp. 41-52, Nov. 1992.

    [5] M. Awaga, T. Ohtsuka, H. Yoshizawa, and S. Sasaki, “3D Graphics Processor Chip Set,” in Proc. of IEEE Micro, vol. 15, no. 6, pp. 37-45, Dec. 1995.

    [6] R. Woo and etc., “A 210mW Graphics LSI Implementing Full 3D Pipeline with 264 Mtexels/s Texturing for Mobile Multimedia Applications,” in Proc. of IEEE Journal of Solid-State Circuits, vol. 39, No. 2, pp. 358-367, Feb. 2004.

    [7] J. H. Sohn, J. H. Woo, M. W. Lee, H. J. Kim, R. Woo and H. J. Yoo, “A 50 Mvertices/s Graphics Processor with Fixed-Point Programmable Vertex Shader for Mobile Applications,” in Proc. of IEEE International Solid-State Circuits Conference, Digest of Technical Papers., vol. 1, pp. 192-592, Feb. 2005.

    [8] D. Kim, K. Chung, C. H. Yu, C. H. Kim, I. Lee, J. Bae, Y. J. Kim, J. H. Park, S. Kim, Y. H. Park, N. H. Seong, J. A. Lee, J. Park, S. Oh, S. W. Jeong and L. S. Kim, “An SoC with 1.3 Gtexels/s 3-D Graphics Full Pipeline for Consumer Applications,” in Proc. of IEEE Journal Solid-State Circuits, vol. 41, pp. 71-78, Jan. 2006.

    [9] ARM Ltd., ARM MBX HR-S 3D Graphics Core Technical Overview, 2002.

    [10] J. Montrym and H. Moreton, “The GeForce 6800,” in Proc. of IEEE vol. 25, issue 2, pp. 41 - 51, March-April 2005.

    [11] M. Chen, G. Stoll, H. Igehy, K. Proudfoot and P. HANRAHAN, “Simple models of the impact of overlap in bucket rendering,” in Proc. of 1998 SIGGRAPH/ Eurographics Workshop on Graphics Hardware, pp. 105 - 112, 1998

  • 48

    [12] J. Montrym and H. Moreton, “The GeForce 6800,” in Proc. of IEEE vol. 25, issue 2, pp. 41 - 51, March-April 2005.

    [13] M. Chen, G. Stoll, H. Igehy, K. Proudfft and P. HANRAHAN, “Simple models of the impact of overlap in bucket rendering,” in Proc. of 1998 SIGGRAPH/ Eurographics Workshop on Graphics Hardware, pp. 105 - 112, 1998.

    [14] L. Williams, “Pyramidal Parametrics,” in Proc. of Computer Graphics, vol. 17, no. 3, pp. 1-11, July 1983.

    [15] P.S. Heckbert, “Texture Mapping Polygons in Perspective,” Computer Graphics Lab, New York Inst. of Technology, Technical Memo no. 13 1983. [16] Jon P. Ewins, Marcus D. Waller, Martin White and Paul F. Lister, “MIP-Map Level Selection for Texture Mapping,” in Proc. of Digital Object Identifier vol.4, issue 4, pp.317-329, Oct.-Dec. 1998. [17] J.F. Blinn and M.E. Newell, “Texture and Reflection in Computer Generated Images,” in Proc. of Comm. ACM, vol.19, no. 10, pp. 40-53, Oct 1976. [18] E.A. Feibush, M. Levoy, and R.L. Cook, “Synthetic Texturing Using Digital Filters, “in Proc. of Computer Graphics, vol. 14, no. 3, pp.294-301, July 1980. [19] A. Fournier and E. Fiume, “Constant –Time Filtering with Space-Variant Kernels,” in Proc. of Computer Graphics (SIGGRAPH ’88 Proc.), vol. 22, no. 4, pp. 229-238, Aug. 1988. [20] M. Gangnet, D. Perny, and P. Coueignoux, “Perspective Mapping of Planar Textures,” in Proc. of Eurographics ’82, vol. 16, no. 1, pp.57-71, 1982. [21] N. Greene and P.S. Heckbert, “Creating Raster Omnimax Images from Multiple Perspective Views Using the Elliptical Weighted Average Filter,” in Proc. of IEEE Computer Graphics and Applications, vol. 6, no. 3, pp.21-27, June 1986. [22] Ziyad S. Hakura and Anoop Gupta, “The Design and Analysis of a Cache Architecture for Texture Mapping,” in Proc. of the 24th International Symposium on Computer Architecture, pp. 108-119, May 1998. [23] Chum-Ho and Lee-Sup Kim, “Adaptive Selection of an Index In a Texture Cache,” in Proc. of the IEEE International Conference on Computer Design (ICCD’04), pp. 295-300, 2004. [24] S. Morein, “ATI Radeon HyperZ Technology,” in Proc. of Workshop on Graphics Hardware, Hot3D Proceedings. ACM SIGGRAPH/Eurographics, pp. 58, 61, 65, 78, August 2000. [25] N. Greene, M. Kass and G. Miller, “Hierarchical Z-Buffer visibility,” in Proc. of ACM SIGGRAPH, pp. 231-238, 1993.