計算機圖形學-渲染管線


渲染管線

一、流水線的概念

  • 流水線最終目的:生成或渲染一張二維紋理,輸入是一個虛擬像機,光源,Shader,紋理等。

  • 硬盤 –>> RAM –>> 顯存

  • CPU發指令從硬盤到RAM內存,GPU將要顯示的緩存發到顯存

二、GPU渲染管線

  • 渲染管線功能:決定在給定虛擬相機、三維物體、光源、照明模式,以及紋理等諸多條件的情況下生成或繪制一幅二維圖像過程。

  • 流水線三個概念階段:應用階段、幾何階段、光柵化階段

    1、應用階段:

    • 將需要在屏幕上顯示出來的幾何體,也就是繪制圖元,比如點、線、矩形等輸入到繪制管線的下一個階段。輸出圖元的頂點數據、攝像機位置、光照紋理等參數。
  • 將數據加載到顯存中:(硬盤–>內存RAM –>顯存–> VRAM)

    • 設置渲染狀態:使用哪個着色器、光源屬性、材質等
  • 調用DrawCall:一個命令,CPU調用GPU的命令,一個DrawCall指向需要渲染的圖元列表

    2、幾何階段:

    • 需要將頂點數據最終進行屏幕映射,輸出屏幕空間二維頂點坐標,頂點對應的深度值,顏色等相關信息。
    • 將各個圖元從模型坐標系轉換到世界坐標系中,也就是模型變換
  • 根據光照紋理等計算頂點材質的光照着色效果

    • 根據攝像機位置、取景進行觀察變換和裁剪
  • 進行屏幕映射,也就是把三維模型轉換到屏幕坐標系

    3、光柵化階段:

    • 輸入是經過變換和投影后的頂點、顏色以及紋理坐標,工作是給每個像素正確配色,以便繪制整幅圖形。
    • 由於輸入的是三形頂點,所以需要根據三角形表面的差異,逐個遍歷三角形計算各個像素的顏色值。之后根據其可見性等進行合並得到最后的輸出。

三、幾何階段

  • 頂點着色器:(可編程)模型變換(模型空間到世界空間)、視圖變換(世界空間到觀察空間)、逐頂點光照着色
  • 幾何、曲面細分着色器:(可編程)頂點增刪,曲面細分,增加點使曲面更光滑
  • 裁剪:(可配置)規范化投影變換(觀察空間到規范化觀察空間)、裁剪
  • 屏幕映射:(固定)(規范化觀察空間到屏幕坐標系)

四、光柵化階段

  • 三角形設置:(固定)將頂點設置成三角形
  • 三角形遍歷:(固定)遍歷三角形,通過頂點的深度插值得到深度,得到三角形的每一個片元,片元是狀態的集合,用來計算每個像素的最終顏色。狀態包括屏幕坐標、深度信息、頂點信息、法線、紋理坐標等。
  • 片元着色器:(可編程)根據上面狀態的集合對三角形的每一個片元計算顏色值
  • 逐片元操作:(可配置)模板測試、深度測試、顏色混合、幀緩存

五、CPU到GPU

應用程序調用CPU去顯示,CPU從硬盤加載渲染需要的數據到內存,然后從內存里取到頂點數據傳給顯存。

CPU再通過Shader語言調用顯卡驅動來調用GPU,GPU取得顯存里的頂點數據等來計算得到要顯示到屏幕的幀緩存。

六、Shader 語言

OpenGL語言是GLSL(OpenGL Shading Language):優點是跨平台沒有提供着色器編譯器,由顯卡驅動來完成着色器編譯工作。依賴硬件而非操作系統層級的。

DirectX語言是HLSL(High Level Shading Language):由微軟控制着色器編譯,支持平台受限。

NVIDIA的CG(C for Graphic):真正的跨平台,會編譯成相應的中間語言,因為跟微軟合作,所以語法很像HLSL。

HLSL、GLSL、Cg是高級語言,會被編譯成匯編語言,也就是中間語言(Intermediate Language,IL),然后中間語言交給顯卡驅動來翻譯成真正的機器語言,即GPU可以理解的語言。

頂點着色器:Vertex Shader

幾何着色器:Geometry Shader

曲面細分着色器:Tessellation Shader

片元着色器:Fragment Shader

EBO(Element Buffer Object也叫IBO(Index Buffer Object))索引緩沖區對象,這個緩沖區主要用來存儲頂點的索引信息。

VBO(Vertex Buffer Object)頂點緩沖區對象,主要用來存儲頂點的各種信息。好處:模型的頂點信息放進VBO,這樣每次畫模型時,數據不用再從CPU的內存取,而是直接從GPU的顯存里取,提高效率。

VAO(Vertex Arrary Object)頂點數組對象,保存了所有頂點數據屬性的狀態結合,存儲了頂點數據的格式以及頂點數據所需的VBO對象的引用。本身並沒有存儲頂點的相關屬性數據,這些數據是存儲在VBO中的,VAO相當於是對很多個VBO的引用,把一些VBO組合在一起作為一個對象統一管理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM