天天看點

渲染管線簡單梳理圖形渲染管線GPU渲染管線

渲染管線

  • 圖形渲染管線
    • 應用程式階段
    • 幾何階段
    • 光栅化階段
  • GPU渲染管線
    • 頂點着色器(The Vertex Shader)
    • 幾何着色器(The Geometry Shader)
    • 裁剪(Clipping)
    • 像素着色器(Pixel Shader)
    • 合并階段(The Merger Stage)

圖形渲染管線

渲染管線簡單梳理圖形渲染管線GPU渲染管線

應用程式階段

主要任務是在應用程式階段的末端,将需要在螢幕上顯示出來繪制的集合體(如點、線、矩陣等)輸入到繪制管線的下一個階段。

對于被渲染的每一幀,應用程式階段将錄影機位置,光照和模型的圖元輸出到管線的下一個主要階段——幾何階段。

幾何階段

可以劃分為一下幾個功能階段:

• 模型視圖變換 Model & View Transform:分為模型變換和視圖變換,模型變換即旋轉、平移、縮放,視圖變換可以了解為将模型轉到相機坐标系下。

• 頂點着色 Vertex Shading:确定模型上頂點處材質的光照效果。

• 投影 Projection:将視體變換到規範立方體(Canonical View Volume,CVV)中,模型位于歸一化裝置坐标系中(NDC)。分為正交投影和透視投影,Z 坐标将不會再儲存于的得到的投影圖檔中,是以就是将模型從三維空間投射到了二維的空間中的過程。

• 裁剪 Clipping:對部分位于視體内部的圖元進行裁剪操作。

• 螢幕映射 Screen Mapping:将之前得到的坐标映射到對應的螢幕坐标系上。

光栅化階段

可以分為以下幾個功能階段:

• 三角形設定(Triangle Setup)階段:計算三角形表面的差異和三角形表面的其他相關資料。

• 三角形周遊(Triangle Traversal)階段:找到哪些采樣點或像素在三角形中的過程。

• 像素着色(Pixel Shading)階段:所有逐像素的着色計算都在像素着色階段進行,使用插值得來的着色資料作為輸入,輸出結果為一種或多種将被傳送到下一階段的顔色資訊。紋理貼圖操作就是在這階段進行的。

• 融合(Merging)階段:合成目前儲存于緩沖器中的由之前的像素着色階段産生的片段顔色。此外,融合階段還負責可見性問題(Z 緩沖相關)的處理。

GPU渲染管線

渲染管線簡單梳理圖形渲染管線GPU渲染管線
渲染管線簡單梳理圖形渲染管線GPU渲染管線
  • 綠色的階段是完全可程式設計的
  • 黃色的階段可配置,但不可程式設計
  • 藍色的階段完全固定

頂點着色器(The Vertex Shader)

是完全可程式設計的階段,頂點着色器可以對每個頂點進行諸如變換和變形在内的很多操作,提供了修改/建立/忽略頂點相關屬性的功能,這些頂點屬性包括顔色、法線、紋理坐标和位置。頂點着色器的必須完成的任務是将頂點從模型空間轉換到齊次裁剪空間。

幾何着色器(The Geometry Shader)

位于頂點着色器之後,允許 GPU 高效地建立和銷毀幾何圖元。幾何着色器是可選的,完全可程式設計的階段,主要對圖元(點、線、三角形)的頂點進行操作。幾何着色器接收頂點着色器的輸出作為輸入,通過高效的幾何運算,将資料輸出,資料随後經過幾何階段和光栅化階段的其他處理後,會發送給片段着色器。

裁剪(Clipping)

屬于可配置的功能階段,在此階段可選運作的裁剪方式,以及添加自定義的裁剪

面。

螢幕映射(Screen Mapping)、三角形設定(Triangle Setup)和三角形周遊(Triangle Traversal)階段是固定功能階段。

像素着色器(Pixel Shader)

像素着色器(Pixel Shader, Direct3D 中的叫法)常常又稱為片斷着色器,片元着色器(FragmentShader, OpenGL 中的叫法),是完全可程式設計的階段,主要作用是進行像素的處理,讓複雜的着色方程在每一個像素上執行。

合并階段(The Merger Stage)

處于完全可程式設計和固定功能之間,盡管不能程式設計,但是高度可配置,可以進行一系列的操作。其除了進行合并操作,還分管顔色修改(Color Modifying), Z 緩沖(Zbuffer),混合(Blend),模闆(Stencil)和相關緩存的處理。

《Real-Time Rendering 3rd》提煉總結

繼續閱讀