unityshader學習筆記3

2022-03-30 06:04:44 字數 1583 閱讀 6748

phong高光反射

標準光照模型也被稱為phong光照模型,早期的遊戲引擎中往往只有乙個光照模型,就是標準光照模型。標準光照模型只關心直接光照,也就是那些直接從光源發射出來照射到物體表面後經過物體表面的一次反射直接進入攝像機的光線。

如圖,反射光與視角的夾角越小,光強越大 ---->>  反射光與視角夾角的余弦值cosθ,即 r向量(反射光)*v向量(視角方向)

已知視角方向有現成的值,需要求反射光向量

反射光向量

注意:各個向量都當做單位向量

如圖可得: 

r向量(反射光) + l向量 = 2 * |l| * cosθ * n向量(這裡n向量表明方向,因為n向量為單位向量,不用除以它的模)

= 2 * cosθ * n向量 

= 2 * (l向量 * n向量) * n向量                //cosθ = l向量*n向量,漫反射已經說過

所以:   r向量 =  2 * (l向量 * n向量) * n向量  - l向量

unity內建函式reflect(i, n)  返回入射光線i對表面法線n的反射光線    可以直接得到反射光線,  注意:入射光線i與unity光源方向是相反的,需要用"-"號

高光反射 = 光源顏色 * 物體表面顏色 * (法線與光源方向的點乘)

= 光源顏色 * 物體表面顏色 * saturate( pow(dot(反射光, 視角),  高光光澤度) )

頂點高光反射

shader "

custom/vertexphong

" subshader

lod

100pass

;fixed4 frag (v2f i) : sv_target

endcg}}

}

片元高光反射

blinn-phong高光反射

fixed3 viewdir = normalize(_worldspacecamerapos.xyz -i.worldpos.xyz);

fixed3 hdir = normalize(worldlightdir +viewdir);

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

h→

'>

unity shader 學習筆記

upgrade note replaced world2object with unity worldtoobject upgrade note replaced mul unity matrix mvp,with unityobjecttoclippos shader unity shader b...

unity shader 學習筆記(2)

自定義顏色變數,在材質面板設定顏色來改變物體的顏色 properties subshader 片斷著色器主要處理最終顯示在螢幕上的畫素結果 float4 flag sv target endcg 最終結果 cg hlsl中的資料型別和shader屬性中資料型別 cg hlsl中的資料型別 浮點型別 ...

unity shader學習筆記2

官網文件 language syntax 包括標量,向量,矩陣,陣列,結構體,著色器,紋理等資料型別 和c c 差不多.bool 正確或錯誤。int 32位有符號整數。uint 32位無符號整數。dword 32位無符號整數。half 16位浮點值。僅出於語言相容性提供此資料型別。direct3d ...