u3d shader著色器學習筆記(三) 光照

2021-08-20 06:27:50 字數 1328 閱讀 5635

光照模型就是乙個公式,使用這個公式來計算在某個點的光照效果。

標準光照模型(在標準光照模型裡,我們把進入攝像機的光分為下面四個部分):

自發光高光反射(類似鏡子的反射)

specular = 直射光的顏色* pow(max(cos θ(反射光方向和視野方向的夾角), 0), 10);

漫反射(類似石頭) 

蘭伯特光照模型:

diffuse = 直射光顏色 *  max(0,cos θ(光和法線的夾角))

半蘭伯特光照模型:

diffuse = 直射光顏色 *  (cosθ  *0.5 +0.5) θ為光和法線的夾角

環境光(均勻反射)

一些方法:

normalize() 用來把乙個向量,單位化(原來的方向保持不表,長度為1)即向量的方向向量

max()用來取得函式中最大的乙個

dot 用來取得兩個向量的點積

_worldspacelightpos0取得平行光的位置

_lightcolor0取得平行光的顏色

unityobjecttoclippos(*) 這個矩陣用來把乙個座標從模型空間轉換到剪裁空間

_world2object 這個矩陣用來把乙個方向從世界空間轉換到模型空間

unity_lightmodel_ambient用來獲取環境光

漫反射在頂點函式中:

shader" diffuse vertex" 

subshader;

struct v2f ;

v2f vert(a2v v)

fixed4 frag(v2f f) :sv_target

endcg

} }fallback"vertexlit"

}

漫反射在片元函式中:

shader"diffuse fragment" 

subshader;

struct v2f ;

v2f vert(a2v v)

fixed4 frag(v2f f) :sv_target

endcg

} }fallback"vertexlit"

}

高光反射在頂點函式中

shader"custom/ 08 specular vertex" 

subshader;

struct v2f ;

v2f vert(a2v v)

fixed4 frag(v2f f) :sv_target

endcg

} }fallback"diffuse"

}

u3d shader學習筆記1

促使我學習shader的重要原因是希望深入理解3d渲染的機制,在此基礎上可以靈活達到某種效果與效能的平衡,開發出具有良好體驗的vr應用。因為vr應用體驗的好壞,直接由遊戲的幀率決定,而遊戲的幀率則受到渲染一幀畫面所花時間的影響,因此如何提公升渲染時間,而又可以得到期望的效果,必須要對shader或者...

u3d shader入門寫法

星期二的時候,開始要做乙個按鈕切換的效果,功能就是點一下選擇鍵盤,再點一下,選擇藍芽搖桿,其實可以用很簡單,或者很笨,但能用的方法實現 2個png切換 最後決定用shader 真的對 shader一竅不通,結果足足花了2天才完成,1個小功能,2天還是很值得,起碼shader技能1級,get。其實前面...

U3d Shader整理筆記(二)

第二篇知識點整理 作者主要介紹如何學習unity shader的基本寫法框架,以及學習shader中properties 屬性 的詳細寫法,光照 材質與顏色的具體寫法。因為作者說,學習unity中的shader程式設計,最好是之前對opengl或direct3d的渲染狀態等相關知識有乙個基本的了解。...