基礎理論 渲染管線

2022-09-19 11:45:09 字數 1756 閱讀 3446

前言:博學靜思才能成長,筆記是記錄筆者自己的學習路程。

01:渲染(rendering)是什麼?

渲染是以軟體由模型生成影象的過程。模型是用語言或資料結構進行嚴格定義的三維物體或

虛擬場景的描述。

02:渲染的類別:離線渲染(電影) 實時渲染(遊戲)

實時渲染的要求是:需要我們一秒鐘完成24幀以上的影象的渲染。(不卡頓)效能表現尤為重要

一秒鐘完成60幀以上(流暢),因此需要我們進行優化手段加速渲染,達到理想要求

03:渲染管線是什麼?

完成渲染操作的一道流水線。也就是完成渲染的一套流程。一般而言就是把模型資料,貼圖資源種種檔案給與渲染管線,通過渲染管線最終生成我們想要的畫面。(其中明顯涉及到了3d到2d的轉化)

04:unity內建渲染管線(unity build-in rendering pipeline)的講解

廣義的渲染管線有兩部分,乙個是cpu端的渲染邏輯,乙個是gpu端的渲染管線。口頭的渲染管線大都是gpu端的渲染管線,但實際上cpu端的渲染邏輯也是乙個十分重要的內容。

cpu端的渲染邏輯工作:1.剔除:進行視椎體剔除,遮擋剔除,根據層級等規則

2.渲染順序:按照距離,渲染佇列等規則

3:打包資料:比如頂點資料,材質資料等等

4:呼叫shader:setpasscall以及drawcall

cpu端的任務也被稱為應用階段(unityshader入門精要),身為開發者的三大任務:提交場景資料其中包括攝像機的位置,模型,光源等等,再進行粗粒度剔除(culling)目的在於把不需要處理的資料進行篩選,防止移交到了幾何階段。最後就是確立渲染狀態這也是最為重要的一點,比如用那些shader,什麼材質,什麼紋理等等。

幾何階段(gpu內)的目的是決定渲染的圖元,怎樣繪製,在**繪製,同時進行逐頂點,逐多邊形的操作。

應用階段的產物:就是渲染圖元(點,線,三面角)

而幾何階段就是將頂點的三維座標(包括對應的深度值,著色等資訊)通過螢幕空間的光柵器轉化到輸出空間的二維座標(保留那些資訊)。

gpu端的渲染管線工作:使用資訊產生畫素,並渲染出最終的影象(這是乙個很多的過程如下我們進行說明)

接收到了cpu的drawcall後,顯示卡的gpu從cpu獲得了幾何階段的資訊後知道了我可以開始工作了。注意drawcall命令僅僅指向是需要被渲染的圖元列表,而不會包含任何乙個材質資訊。

gpu根據渲染狀態,所有輸入的頂點資料進行計算得到畫素,也就是頂點資料(應用階段得到的圖元)先由頂點shader(vertex shader)將頂點座標從模型空間變化到裁剪空間,通俗的理解也就是拍照,拍照實則也是乙個三維到二維的過程,注意的是頂點shader並不會產生2d的影象,僅使得場景中的3d物件產生變形效果。變形後自然要進行著色細分,便會到曲面細分著色器(tesselltry shader)將圖元細分方便於著色,此時處於裁剪空間,需要到螢幕上,要進行乙個裁剪,得到我們想要的乙個畫面範圍,再進行螢幕對映。要分清楚剔除和裁剪。裁剪是裁剪出我們視野之外的物體,並剔除某些三角圖元的麵片。螢幕對映做的工作是乙個圖元座標系到螢幕座標系的過程。此時才算幾何階段結束了。

那麼開始光柵化:光柵化的過程是通過三角形設定,三角形遍歷,此時就可以著色了,用片元著色器(fragment shader)進行片元的著色,其中還有乙個逐片元著色(per-fragment operations)進行顏色的一些修改,深度緩衝以及混合

最後到了逐片元操作:要進行模板測試,深度測試(用於渲染陰影,輪廓渲染),再進行混合(不透明物體。混合要關閉,透明物體混合要開啟)最終得到螢幕的影象。

(作為渲染管線基礎的解釋,後續會做出更多深層次的說明,同時包括數學原理,紋理取樣等等)

opengl渲染管線理論

opengl 渲染管線理論 這幾天稍微看了一些關於glsl的頂點著色以及片元著色的一些相關知識.目前來講還有乙個著色器則是geometry shader.我的顯示卡用不了這個功能.當然有點遺憾 在看了一些之後,大概了解了一些關於opengl渲染管線的知識.看了這個之後對於opengl的學習我想應當是...

OpenGL 渲染管線理論

學習著色器,並理解著色器的工作機制,就要對opengl的固定功能管線有深入的了解。渲染 rendering 計算機根據模型 model 建立影象的過程。模型 model 根據幾何圖元建立的物體 object 幾何圖元 包括點 直線和多邊形等,它是通過頂點 vertex 指定的。最終完成了渲染的影象是...

OpenGL 渲染管線理論

如 點 線 三角形.等一些幾何圖元.opengl繪製幾何圖元的方法有以下三種 1 一次乙個頂點.即使用glbegin glvertex glend 指定幾何物件.2 使用頂點陣列.如gldrawarrays.gldrawelements.等.一次性的繪製大量圖元.上面這兩種模式則是立即模式.即指定完...