shader高光反射漫反射學習

2021-08-17 07:01:17 字數 2097 閱讀 7722

高光反射:會受到相機方向的影響  specular=直射光 *pow(max(cosθ,0),10);

shader效果 類似於乙個亮點

//反射光的方向,unity方法reflect() 反射光是平行光的反射 -lightdir  法線是normaldir  得到的是光照的反射方向 reflectdir

fixed3 reflectdir = normalize(reflect(-lightdir, normaldir));

//相機位置減去對應光照點的座標,得到viewdir的是視野的方向

fixed3 viewdir=normalize(_worldspacecamerapos.xyz - mul(v.vertex, unity_worldtoobject).xyz);

// 得到夾角。光照方向的反射方向和視野方向 進行點乘

fixed3 speacular = _lightcolor0.rgb * _specular.rgb * pow(max(dot(reflectdir, viewdir),0),_gloss);

高光反射中的半蘭伯特方式:

//這個是半蘭伯特公式(2個的叉乘)*0.5+0.5 ,用於遊戲方面比較多,因為背光的材質不容易發黑 

float halflambert = dot(normaldir, lightdir)*0.5 + 0.5;

//取得漫反射的顏色

fixed3 diffuse = _lightcolor0.rgb*halflambert*_diffuse.rgb;//dot()用來取得函式的點乘//_lightcolor0用來取得平行光的顏色

高光反射的公升級版本  blinnphong

//取到系統內建的環境光線 unity_lightmodel_ambient.rgb

fixed3 ambient = unity_lightmodel_ambient.rgb;

//unity_worldtoobject從世界空間轉換到模型空間

fixed3 normaldir = normalize(f.worldnormal);

//_worldspacelightpos0用來取得平行光的位置

//fixed3 lightdir = normalize(_worldspacelightpos0.xyz);//normalize用來把乙個向量單位化。

//下面的是對上面的進行更改,利用cg函式來實現

fixed3 lightdir = normalize(worldspacelightdir(f.worldvertex));

float halftemp = dot(normaldir, lightdir)*0.5 + 0.5;

//取得漫反射的顏色

fixed3 diffuse = _lightcolor0.rgb*halftemp*_diffuse.rgb;//dot()用來取得函式的點乘//_lightcolor0用來取得平行光的顏色

//相機位置減去對應光照點的座標,得到viewdir的是視野的方向

fixed3 viewdir=normalize(_worldspacecamerapos.xyz - f.worldvertex);

//這個是求相機視野方向和光的方向的平分線的值

fixed3 halfdir = normalize(viewdir + lightdir);

// 得到夾角。 法線跟平分線進行點乘

fixed3 speacular = _lightcolor0.rgb * _specular.rgb * pow(max(dot(normaldir, halfdir),0),_gloss);

漫反射 :不會受到相機方向的影響 diffuse=直射光顏色 *max(0,cos夾角(光和法線的夾角)) coso=光方向*法線方向

求叉乘用dot(法線,燈光);

fixed3 diffuse = _lightcolor0.rgb*max(dot(normaldir, lightdir), 0)*_diffuse.rgb;

shader入門5 高光反射

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

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

高光反射計算公式 我們需要4個引數,光源的顏色和強度,材質的高光反射係數,視角方向和反射方向.在高光反射中我們要取得反射光線和視線的夾角.cg提供了反射光線的函式reflect i,n 1.宣告三個屬性,specular控制高光反射材質,diffuse漫反射材質,gloss控制高光區域大小 prop...

逐頂點高光反射

逐頂點高光反射 shader unity shader book chapter 6 specular vertex leve1 subshader cgprogram pragma vertex vert pragma fragment frag 引用內建的變數 include lighting....