Shader 基礎光照 高光反射光照模型

2021-09-24 14:45:59 字數 1661 閱讀 5755

高光反射計算公式:

我們需要4個引數,光源的顏色和強度,材質的高光反射係數,視角方向和反射方向.

在高光反射中我們要取得反射光線和視線的夾角.

cg提供了反射光線的函式reflect(i,n)

1.宣告三個屬性,_specular控制高光反射材質,_diffuse漫反射材質,_gloss控制高光區域大小

properties

2.在subshader語句塊中定義pass語句塊,tags指明光照模式

subshader
3.定義著色器 包含內建檔案 定義結構體 定義與屬性相同型別的變數等

cgprogram

#pragma vertex vert

#pragma fragment frag

#include "lighting.cginc"

fixed4 _diffuse;

fixed4 _specular;

float _gloss;

struct a2v ;

struct v2f ;

4.頂點著色器:包含了ambient環境光,diffuse漫反射光,specular高光

v2f vert(a2v v)
5.片元著色器:輸出色彩

逐畫素渲染光照更加平滑

將光照的處理交給fragment

實現完整的phong光照模型

在blinn模型中我們引入乙個新的向量h

blinn-phong.png

得到乙個新的公式

fixed3 halfdir = normalize(worldlightdir + viewdir);

fixed3 specular = _lightcolor0.rgb*_specular.rgb*pow(saturate(dot(worldnormal,halfdir)), _gloss);

更改高光部分的**

對比phong模型,高光部分更加明顯

Shader 基礎光照 漫反射光照模型

漫反射 diffuse 當光線從光源照射到模型表面,該表面回向每個方向散射多少輻射量 漫反射符合蘭伯特定律 反射光線的強度與表面法線與光源方向之間的夾角的余弦值成正比.漫反射的計算 diffuse.png n表面法線和l指向光源的向量的單位向量點乘來表示余弦值,用max防止點乘結果為負數,防止物體被...

高光反射Phong光照模型

高光反射是一種經驗模型,並不完全符合真實世界中的高光反射現象。先根據表面法線 視角方向 光源方向計算出反射方向。通過 phong 模型來計算高光反射的部分。一般都用逐畫素,得到更平滑的高光效果。公式 高光反射光線強度 入射光線顏色 高光反射顏色 max 0,視角方向 反射方向 高光反光度 case ...

shader入門5 高光反射

高光反射一般用於實現金屬光澤的效果,原理是反射光與物體朝相機的方向的夾角cos值為標準進行光照補償,夾角越小補償值越高.其實現原理與在漫反射基礎上加了高光補償的部分,要注意的是世界座標系中的光照與入射角方向是相反的 n是normaldir v是viewdir l是lightdir 因為反射公式的入射...