shader入門精要讀書筆記11 基礎光照模型

2021-10-02 15:15:26 字數 2803 閱讀 8989

渲染包含了兩大部分:

1.決定乙個畫素的可見性

2.決定這個畫素上的光照計算

一、光照模型背後的基本原理

1.光源:

在光學中,我們用 輻照度 來量化光(確定乙個光源發出了多少光),

光方向為l,光線間距為d

垂直照射時,物體表面光線間距d,垂直時θ為0,也可以表示為d/cosθ。

斜著照射時,物體表面光線間距為d/cosθ,θ為光線與物體法線夾角。

物體表面光線越密集,輻照度越大,所以輻照度與d/cosθ成反比,與cosθ成正比。

cosθ可以通過光源方向l和法線的點積得到。這就是點積計算輻照度的由來。

2.吸收和散射

光線與物體相交時,兩種結果:吸收或者散射。

散射改變光的方向,但不改變密度和顏色。而吸收相反。

散射又分為:折射和反射。

為了區分這兩種不同散射,光照模型中兩種部分表示:高光反射和漫反射。

高光反射部分表示物體表面如何反射光線,漫反射部分表示有多少光線會被折射、吸收、散射出表面。

根據入射光線的數量和方向,我們可以計算出出射光線的數量和方向,使用出射度來描述。

輻照度和出射度是滿足線性關係的,他們之間的比值就是材質的漫反射和高光反射屬性。

3.著色

著色指 根據材質屬性(如漫反射屬性)、光源資訊(光源方向、輻照度等),使用乙個等式去計算沿某個觀察方向的出射度的過程。

我們把這個等式就叫做 光照模型 。

不同的光照模型有不同的目的,例如,一些用於描述粗糙的物體表面,一些用於描述金屬表面等等。

4.brdf光照模型(經驗模型)

這個brdf模型是用來解決 光線從某個方向照射到乙個表面時,有多少光被反射,反射方向等等。

brdf大多使用乙個數學公式來表示,並且提供一些引數來調整材質屬性。

(就是給定入射光線方向和輻照度後,brdf可以給出某個出射方向上的能量分布)。

二、標準光照模型

基本理念:只關心直接光照(直接從光源發射出來,照射到物體表面,經過反射直接進入攝像機的光線)。

基本方法(將進入攝像機的光線分為4部分):

自發光:c(emissive),描述給定(出射)方向時,乙個表面本身會向該方向發射多少輻射量。

高光反射:c(specular),描述光線從光源照射到模型表面時,該表面會在完全鏡面反射方向散射多少輻射量。

漫反射:c(diffuse),描述光線從光源照射到模型表面時,該表面會向每個方向散射多少輻射量。

環境光:c(ambient),描述其他的所有間接光照。

1.環境光

指其他的所有間接光照,是乙個全域性變數,場景中所有物體都是用這個光照。

c(ambient)=g(ambient)

2.自發光

直接使用該材質的自發光顏色 c(emissive)=m(emissive)。

通常實時渲染中,自發光的表面不會照亮周圍的表面,也就是這個物體不被當成光源。

3.漫反射

漫反射光照滿足蘭伯特定律:反射光線的強度與表面法線和光源方向之間夾角的余弦值成正比。

c(diffuse)=(c(light)·m(diffuse)) max(0,n·l)

c(light)是光源顏色,m(diffuse)是材質的漫反射顏色,

我們需要防止法線與光源方向點乘的結果為負,所以擷取到0,防止物體被後面來的光源照亮。

4.高光反射

高光反射是一種經驗模型,而不符合現實現象。

用來計算沿著完全鏡面反射方向被反射的光線,這種可以在金屬材質表面適用。

反射方向的計算(字醜勿嫌):

兩種模型計算方式:

phong模型:

c(specular)= (c(light)·m(specular))max(0,v·r)(max()的m(gloss)次方)

m(gloss)是材質的光澤度(反光度),控制亮點額寬度、大小,它越大,亮點越小。

m(specular)是材質的高光反射顏色,控制高光反射的強度顏色。

c(light)是光源的顏色強度。

blinn模型:

h=(v+l)/|v+l| (引入新向量h)

c(specular)= (c(light)·m(specular))max(0,v·h)(max()的m(gloss)次方)

區別:在硬體實現時,會認為v、l等為定值,這樣h就是乙個常量,所以blinn會快一些。

而當v、l不定值,那麼phong可能會更快。

兩種情況沒有關係,也不存在誰比誰好,還是要視情況而定。

5.逐畫素、逐頂點

片元著色器—逐畫素

我們以每個畫素為基礎,得到它的法線(可以是對頂點法線插值得到的,也可以是從法線紋理中取樣得到的),然後進行光照模型的計算,這種在麵片之間對頂點法線進行插值的技術被稱為----phong著色。

頂點著色器—逐頂點

我們在每個頂點上計算光照,然後在渲染圖元內部進行線性插值,在輸出成畫素顏色。----高洛德著色。

由於頂點數目往往小於畫素數目,所以逐頂點會快於逐畫素。

但逐頂點是依靠線性插值,這樣當光照模型中存在非線性計算時就會發生問題。

總結:標準光照模型–也叫 phong光照模型—blinn-phong光照模型。

也有侷限性,很多物理現象不能應用(例如菲涅爾反射:視線垂直於表面時,反射較弱,而當視線非垂直表面時,夾角越小,反射越明顯)。

blinn-phong光照模型是 各向同性(書中是不是寫錯字了哈哈) 的 ,也就是說當我們固定視角和光源方向旋轉平面時,反射不變。

而有些表面是 各向異性 的,例如金屬、毛髮等,這時我們需要使用基於物理的光照模型。

Shader入門精要讀書筆記3

笛卡爾座標系 標準正交基 左 右手座標系 點 向量 向量的運算 點積叉積 矩陣 矩陣的運算 矩陣變換 線性變換 縮放 旋轉 仿射變換 合併了線性變換和平移變換 齊次座標 縮放矩陣 旋轉矩陣 zxy 平移矩陣 依次 座標空間 父空間 子空間 模型空間 物件空間 世界空間 觀察空間 相機空間 裁剪空間 ...

Shader入門精要讀書筆記4

unity版本號和環境 建立場景,shader 材質 球體 簡單shader中每一行 的作用 使用語義 例如sv position 作為輸入輸出 sv position sv target 頂點 片元著色器輸出 結構體的引入,並用於著色器間資訊傳遞 頂點著色器插值後送給片元著色器 propertie...

Shader入門精要讀書筆記5

漸入佳境 光照 光源 方向,輻射度 吸收 散射 散射 折射 投射 反射 高光反射 specular 反射 漫反射 diffuse 折射 吸收 反射 出射度 輻射度 光照模型 brdf 標準光照模型 亦可稱為phong光照模型 blinn phong光照模型 標準光照模型 4部分 以下總結均基於此模型...