當前位置:編程學習大全網 - 編程語言 - 渲染原理

渲染原理

啥玩意是渲染?

遊戲圖像的繪制被稱為渲染

啥玩意是渲染管線?

表示繪制到遊戲視圖的過程中,壹個模型文件的數據經過了哪些轉換步驟

通常指的是GPU流水線,不包含CPU部分

CPU主要是準備好頂點、貼圖、法線、燈光方向、顏色等東西之後,告訴GPU

GPU接收到數據後,就要對其處理最終顯示到屏幕上

因為屏幕是2D畫面,模型是3D資源,必然有壹部操作,就是將3D轉化為2D。

這個操作之前被稱為頂點階段(幾何階段),主要是處理3D模型數據

之後被稱為片元階段(光柵化階段),處理2D像素數據

1.頂點著色器(Vertex Shader)

如下所示:

每個頂點都會調用壹次這個函數,並轉化為這個函數的輸出,這些輸出被稱為圖元(Primitive)

壹般可以在這裏改變頂點或者法線相關信息

2.曲面細分(Tessellation Shader)

是OpenGL 4.0新加入的特性,很多設備還不支持

主要的作用是可以優化曲面,eg:使曲面更平滑

3.幾何著色器(Gemoetry Shader)

幾何著色器的輸入輸出都是圖元(Primitive),不是頂點

可以將簡單的圖元擴展成更為復雜的形式

4.變化回執(Transform Feedback)

是在OpenGL 3.0之後加入的特性

可以將圖元存放到 Transform Feedback Buffer中,並可以決定是否按照先前的流程光柵化

主要特性:在下壹幀渲染時,可以得到上壹幀圖元的數據,對於定量變化的情況,可以節省掉流水線之前的步驟

(常被用於粒子系統 or 角色的頭發)

5.裁剪(Clipping)

圖元會根據視域的平截頭體(Frustums)做可見性判斷

區域外的定點會被舍棄,與這個定點連線的三角形的邊會與平截體求交點,這些交點就變成裁剪後的新頂點

6.屏幕映射(Screen Transform)

圖元的坐標從齊次裁剪空間變換到屏幕空間

7.圖元裝配(Primitive Assembly)

頂點會被轉化成基礎圖元,供後續步驟使用

三角形的朝向剔除(Face Culling)是在這個階段完成的

8.光柵化(Rasterization)

三角形會經歷兩個步驟:

1.三角形會被轉化成片段

2.會遍歷三角形,獲取頂點屬性進行插值,在每個像素點上產生壹個插值

如果開啟了多重采樣抗鋸齒(Multisample Antialiasing,MSAA),此處就會對每個像素進行多次采樣,產生多個偏遠,最後在混合,以達到抗鋸齒的效果

9.提前深度測試(Early Depth Test)

檢查片元的深度,如果不需要顯示則丟棄它

可以在片元著色器運行之前去掉不合理的值,減少運算的消耗

但是 與後續的透明測試有沖突 ,如果在後續的透明度測試中失敗,這步深度測試也不應該將其通過

有些GPU會判斷是否有此類沖突,如果有就跳過(有壹定消耗)

10.片元著色器(Fragment Shader)

可以自定義光照計算、讀取貼圖顏色、設置透明度等

輸入是光柵化後得到的片元數據,輸出值也為片元數據

Unity中會把函數返回值寫為運算後的顏色

11.逐片元操作(Pre-Sample Operation)

這個階段:主要是先測試後混合

測試***經歷了4個測試:

他們的作用都是確定壹個像素是否應該顯示

1.裁切測試(Scissor Test)

通過區域判斷的,與基於頂點的 Clipping 階段不同

2.透明測試(Alpha Test)

透明度達不到,就不繪制

3.模板測試(Stencil Test)

通過緩沖區來進行像素比較,與ColorBuffer或DepthBUffer,StencilBuffer是壹個8位圖像,每個像素保存壹個無符號整型

4.深度測試(Depth Test)

通過深度緩沖區的比較,判斷是否應該繪制像素

需要先制定深度寫入規則,然後再指定比較規則

分別對應Unity的 ZWrtie 和 ZTest

(深度寫入不透明物體默認打開,透明物體默認關閉,測試方法默認是小於等於)

混合階段主要有2個階段:

1.混合(Blending)

通過測試的顏色與ColorBuffer中顏色的疊加方式

混合有多種疊加方式,壹般會使用RGBA的值作為計算因子,采用插值的方式進行線性計算

2.寫入遮罩(Write Mask)

主要是顏色遮罩(Color Mask),在最終繪制時,對顏色進行過濾

so,

經過上面所有的步驟後,最終這個像素會被繪制到顏色緩沖區,並被顯示到屏幕上

  • 上一篇:當初《變形計》中的吳宗宏,他向“爸爸”要錢卻被拒絕,當時發生了什麽?
  • 下一篇:2019622李善友公開課
  • copyright 2024編程學習大全網