光照模型就是乙個公式,使用這個公式來計算在某個點的光照效果。
標準光照模型(在標準光照模型裡,我們把進入攝像機的光分為下面四個部分):
自發光高光反射(類似鏡子的反射)
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的渲染狀態等相關知識有乙個基本的了解。...