讀書筆記——實時渲染(二)

graphics rendering pipeline(圖形渲染管線)

      graphics rendering pipeline(圖形渲染管線 or the pipeline 管線)是實時圖形學的核心,主要功能是根據給定的虛擬攝像機、three-dimensional object(三維物體)、光源以及其他來生成或者渲染一個二維圖像。

一、architecture(架構)

        圖形渲染管線包含幾個階段(stages),而每個階段又包含幾個任務(tasks),各個階段並行(parallel)執行,且每一個階段依賴於前一個階段的結果。4個主要階段:application(程序)、geometry processing(幾何處理)、rasterization(光柵化)和pixel processing(像素處理)

二、應用程序階段

       開發者對應用程序有完全的控制權,CPU中執行(execute),可以完全自行決定實現方式,此階段的算法可以提高後續階段的性能。一些應用程序也可以在GPU中使用一個單獨的模塊——computer shader(計算着色器)。應用程序階段輸出是渲染圖元,數個處理核心並行執行——超標量結構(superscalar construction)。碰撞檢測(collision detection)、加速算法(acceleration algorithms)

 

三、幾何處理階段

      幾何處理階段在GPU中發生,分成4個功能階段:vertex shading(頂點着色)、projection(投影)、clipping(裁剪)、screen mapping(屏幕映射)

3.1vertex shading

         vertex shading有兩個任務:計算頂點的位置和計算想要的輸出數據(normal and texture coordinates 法線和紋理座標)。傳統上,物體的陰影計算:在頂點位置和法線上應用光線方程。物體顏色只存儲在頂點上,三角形顏色使用頂點插值得到。可編程的頂點處理單元也叫做vertex shader(頂點着色器)。現在,GPU的發展,頂點着色器變得通用,不用計算着色方程,設置與頂點關聯的數據(頂點動畫)。

3.1.1頂點位置的計算

        一組座標系:

模型座標(model coordinate ),模型完全沒有變換,每個模型都可以和一個模型的轉換相關聯;

世界座標(world coordinate or world space 世界空間):世界座標唯一

視圖轉換(view transform)目的將世界座標轉換成觀察空間(view space or camera space相機空間),將攝像機放置於原點,朝向向上。在攝像機視野中的物體纔會被渲染。

3.1.2輸出類型計算

真實場景包含內容:渲染對象的形狀和位置以及外觀(材質、燈光)

shading(着色):決定光照對材質的影響的操作,包含計算不同點的着色方程,計算階段:集合處理和像素處理。頂點會存儲各種材質數據:點的位置、法線、顏色值

 單位立方體(the unit cube or canonical view volume 標準觀察體積)(-1,-1,-1)到(1,1,1)的單位立方體

3.2投影

投影有兩種:orthographic projection(正交投影or parallel projection平行投影)和 perspective projection (透視投影)

正交投影:變換後的平行線依舊平行

透視投影:模擬人類的感知,物體離攝影機越遠,投影后物體就越小

投影之後,z座標存儲在z緩存中,不存儲在圖像中,模型從三維變成二維

3.3可選頂點處理

        在投影之後,GPU中有幾個可選的頂點處理:tessellation(細分)、geometry shading(幾何着色)、stream output(流輸出)

細分:使用合適數量的三角形生成曲面(curved surface),細分將patch(小片)頂點集轉換成更大的頂點集,從而創建三角形集合。

細分階段包含一系列階段:hull shader(殼着色器)、tessellator(細分器)、domain shader(域着色器)

幾何着色器:將各種圖元的輸入轉換成頂點

流輸出:將頂點輸出爲數據進一步處理

3.4裁剪

       只有部分體積位於觀察空間類的對象將進行裁剪。圖元在單位立方體上進行裁剪,新頂點會代替就頂點。裁剪使用投影生成的4值齊次座標。幾何階段的最後一步將座標轉換成窗口座標(window coordinate)

3.5屏幕映射

      經過剪裁的圖元會傳遞到屏幕映射階段,屏幕映射負責在屏幕上尋找座標,圖元的x和y座標會轉換成屏幕座標。屏幕座標和z座標叫窗口座標。z座標會重新映射爲z座標。窗口座標和重新映射的z座標會傳遞到光柵階段。

OpenGL支持笛卡爾座標系,左下角爲原點,DirectX有時左上角爲原點

四、rasterization(光柵化)

        光柵化的目標是找到圖元內的所有像素簡稱圖片像素。光柵階段有兩個子階段:triangle setup(三角形設置 or primitive assembly 圖元裝配)和triangle traversal(三角形遍歷)。

光柵化也叫scan conversion(掃描轉換)將屏幕空間的頂點和與頂點相關的着色信息轉換爲屏幕上的像素。

       如何判斷三角形是否和像素重疊,可以使用點採樣的方法。最簡單的是單點採樣,像素的中心位於三角形內側被認爲處於三角形內。以及supersampling(超級採樣)或multisampling antialiasing(多重採樣抗鋸齒)每一個像素多於一個採樣。另一種方式的使用保守光柵化,像素有部分在三角形內側就認爲像素在三角形內

4.1triangle setup(三角形設置)

計算三角形的各種數據,三角形微分、方程、以及幾何階段生成的陰影數據的插值,這些都有硬件完成。

4.2triangle traversal(三角形遍歷)

中心被三角形覆蓋的像素會生成一個fragment(片段)。尋找三角形內的採樣或像素叫做三角形遍歷

五、像素處理

       像素處理階段分成兩個子階段:pixel shading(像素着色)和merging(合併)。像素處理是針對在圖元內的像素或採樣,是每一個像素和每一個採樣的計算

5.1像素着色

        任何逐像素計算都在此階段進行。使用專門的硬件完成,GPU。將經過插值的着色數據作爲輸入,最終結果是一個或多個顏色傳遞給下一個階段,最重要的是texturing(貼圖)

5.2merging(合併)

         每一個像素的信息都存在顏色緩存中,合併階段的任務是將像素着色階段生成的fragment(片段)顏色和當前存儲在緩存中的顏色想結合。這一階段也叫做ROP,raster operations pipeline(光柵操作管線 or render output unit 渲染輸出單元 )

合併階段解決可見性問題(沒有看懂)

stencil buffer(模板緩存):記錄被渲染圖元的位置的一種離屏緩存,每個像素8位。

frame buffer(幀緩存):包含系統中的所有緩存

當圖元到達光柵階段,從攝像機角度可見的圖元就會顯示在屏幕上,屏幕顯示顏色緩存中的顏色。

爲了避免人眼能夠看清楚繪製過程,使用double buffer(雙緩存)back buffer和front buffer,一個不顯示繪製,一個顯示,然後交換。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章