從渲染管線理解Shader

2021-10-02 18:30:55 字數 1376 閱讀 8671

一、cpu:

在unity的執行過程中,cpu的作用就是載入模型,並把模型通過meshrender這個元件渲染出來。那麼實質上meshrender元件的作用就是將模型的頂點資訊,uv資訊,法線等資訊傳遞給gpu。

二、gpu:

渲染管線(不了解渲染管線可以先看:這裡實際上是乙個補充):

頂點著色器 ——> 光柵化 ——> 片段著色器 ——> apha測試 ——> 模板測試 ——> 深度測試 ——> blend

——> gbuffer  ——>  fronbuffer  ——>  framebuffer  ——> 顯示器

頂點著色器:計算頂點的顏色,把頂點的本地座標變為檢視(相機)座標。

光柵化:將各頂點所構成的圖形的每個畫素計算並顯示出來。

片段著色器:紋理取樣(將紋理中的畫素點取出,賦給即將渲染的每個畫素點)。

逐片元計算(畫素跟燈光計算)。

apha測試:挑選合格的畫素顯示,所謂合格就是根據apha值,如果apha小於多少就不顯示。

模板測試:挑選達到條件的模板值的畫素。

深度測試:挑選符合深度條件的畫素,據攝像機遠的畫素深度高,被遮擋了就不顯示。

blend:   將當前要渲染的畫素和已經渲染出來的畫素進行混合運算。

頂點著色器和片段著色器是我們可以使用shader進行程式設計的,也就是shader可以實現或者改變其中一些渲染效果。

一句話概括:shader 是可程式設計圖形管線的演算法片段。

它主要分為兩類,vertex shader和 frament shader也就是對應的頂點著色器和片元著色器。

vertex shader頂點處理shader(計算機中圖形都是無數個頂點組成的)

frament shader片段shader(也可以說是頂點顏色填充處理)

頂點著色器(vertex shader):

頂點著色器的處理單位是點,所以輸入的每個頂點都會呼叫一次頂點著色器,頂點著色器本身不可以建立或銷毀頂點,而且無法得到其他頂點的關係。頂點著色器的主要工作:座標變換和逐頂點光照。同時為下一階段準備資料。

座標轉換:頂點著色器可以在這個階段進一步改變頂點位置,在頂點動畫中非常有用,可以模擬水面,布料等。

乙個最基本的頂點著色器必須完成的工作是,把頂點座標從模擬空間轉換到齊次裁剪空間。

例子:o.pos=mul(unity_mvp,v.postions);

頂點座標轉換齊次裁剪空間,經過透視剔除後得到

歸一化裝置座標(normalized device coordinates,ndc)

opengl 的z值是[-1.1] directx的z值是[0,1]

頂點著色器的常見輸出路徑是頂點--片元,也可以傳送給曲面細分或幾何著色器。

固定渲染管線Shader

固定渲染管線是標準的幾何 光照 t l 管線,功能是固定的,它控制著世界 視 投影變換及固定光照控制和紋理混合 t l管線可以被渲染狀態控制,矩陣,光照及採製引數 固定渲染管線一般用於shader在老顯示卡無法顯示時的fallback 在shader的subshader都無法使用的時候呼叫 命令小括...

Shader筆記(渲染管線)

頂點處理,面處理,光柵化,畫素處理 本地座標系 以模型自己為中心。比如旋轉 胳膊的擺動,等是以本地座標係為參考。觀察座標系 以攝像機作為原點。觀察座標系轉投影座標系 將每個物體模型的位置從觀察者所在的座標體系中,轉到觀察者投影平面上。包括 面組裝 面擷取 面剔除 面組裝 通常採用 strip 面擷取...

Shader基礎(渲染管線)

目的 將空間中的3d物體轉換成螢幕中的2d影象進行顯示出來 渲染繪圖管線流程 1.頂點處理 座標系的轉換 乙個模型有自身的方向 前方,上方,右方等 和中心點,既本地座標系 將這個模型放到場景當中,通過場景中的世界座標原點和世界座標的方向,計算出當前模型的世界座標,從本地座標系轉換到世界座標系 乙個模...