【渲染流水線】主線索引-從數據到圖像以UnityURP為例
【從UnityURP開始探索游戲渲染】專欄-直達
有了開篇的渲染管線和渲染流水線的基本概念,接下來先從原理上看看渲染流水線是怎么運作的,然后再看看UnityURP是對應是怎么實現的,最后再看UnityURP是怎么構建渲染管線,逐層探索剖析。本篇作為渲染流水線的主線文章,將列舉渲染流水線中的各個階段,將數據到圖像的每一步處理步驟都列出,每個階段的具體的詳細討論在后續(xù)相應的文章鏈接中展開詳解。
(對渲染的探索是個持續(xù)不斷完善的過程,記錄這個過程將零散的內容整理起來,其中肯定會有理解偏差和問題,如果哪里有問題,歡迎在評論區(qū)探討和指出)
基于URP默認的渲染路徑:前向渲染Forward 來講解基本的渲染流水線
渲染路徑 概念在最后會講解,默認的前向渲染路徑就是最通用的復合常規(guī)的渲染流水線中的流程,其他路徑都是優(yōu)化特定情況而出現的,先用前向的學習后再看其他的渲染路徑。
渲染流水線(Rendering Pipeline)中可編程或可配置階段,按順序執(zhí)行:
應用階段 -〉幾何階段 -〉 光柵化階段 -〉逐片元階段 -〉輸出
應用階段(CPU)包括(包圍盒裁剪、遮擋剔除、其他裁剪算法等)
幾何階段(GPU)包括(頂點著色器(可編程)、細分著色器(可選)、幾何著色器(可選)、圖元裝配(固定)、裁剪(固定)、歸一化設備坐標(透視除法;固定)、屏幕映射(固定))
光柵化階段(GPU)包括(光柵化(三角形設置、三角形遍歷;固定)、片元著色器(可編程))
逐片元階段(GPU)包括((可見性測試Scissor、多重采樣測試)透明度測試、模版測試、深度測試、深度寫入、混合)(全可配置)
接下來詳細列出渲染流水線的階段索引
應用階段
- 包圍盒裁剪
- 遮擋剔除
- 其他裁剪算法
- 渲染命令隊列和其中的渲染指令(drawcall)、渲染狀態(tài)設置
幾何階段
- 關鍵順序?:
- 頂點著色器輸出齊次裁剪坐標(如
UnityObjectToClipPos返回值)?。 - GPU執(zhí)行裁剪(依賴
w分量的動態(tài)范圍)?。 - ?透視除法觸發(fā)歸一化?,生成NDC坐標供屏幕映射?
模型空間 →(Model矩陣)→ 世界空間 →(View矩陣)→ 觀察空間 →(Projection矩陣)→ ?裁剪空間?→(透視除法)→ ?NDC空間? →(視口變換)→ 屏幕空間
- 其中模型空間到裁剪空間是在頂點著色階段運算的。(在頂點著色器中手動用MVP矩陣進行左乘計算)
- NDC空間是歸一化時做的 (GPU自動計算)
- 屏幕空間是屏幕映射階段做的 (GPU自動計算)
- 頂點著色器(Vertex Shader)?
- 可選階段:曲面細分著色器(Tessellation Shader)?
- 可選階段:幾何著色器(Geometry Shader)?
- ?圖元裝配
- 裁切
- 歸一化設備坐標(Normalized Device Coordinates, NDC)
- 屏幕映射
光柵化階段
- 光柵化?
- 片元著色器(Fragment Shader)?
逐片元階段
- 逐片元操作(Per-Fragment Operations)?
- 深度偏移(Slope Scale Depth Bias)?
- 渲染順序與層級
Unity中基于SRP的URP渲染管線
- SRP提供的核心功能與架構?
- URP在SRP上的具體實現?
- URP對SRP的擴展與簡化?
- 對URP的擴展
- URP中的渲染路徑選擇?
其他
URP中實時陰影計算流程
計算著色器(Compute Shader)?:GPU 通用計算,可并行處理非圖形任務(需單獨編寫)。
后處理(Post-Processing)?:屏幕空間特效(如 Bloom),通過 URP Renderer Feature 添加。
投影Projector。
平面陰影
【從UnityURP開始探索游戲渲染】專欄-直達
(歡迎點贊留言探討,更多人加入進來能更加完善這個探索的過程,??)

本文系統(tǒng)介紹了Unity URP渲染流水線的工作原理與實現流程。文章首先概述了渲染管線的三大階段(應用、幾何、光柵化),詳細分解了從頂點著色到屏幕映射的每個處理步驟,重點講解了URP在前向渲染路徑下的實現機制。內容包括:頂點著色器坐標變換流程、GPU自動執(zhí)行的裁剪和歸一化處理、光柵化階段操作,以及URP在SRP架構上的擴展特性。文章還提及了實時陰影計算、后處理特效等擴展功能,旨在為開發(fā)者提供完整的URP渲染管線知識框架,并鼓勵讀者參與討論完善內容。
浙公網安備 33010602011771號