lambert光照模型,根據光照向量與頂點法線的夾角來確定光照強度:
//phong光照模型,根據光照向量的反射向量與視線的夾角來計算鏡面高光的強度,另外再加上漫射光的成分:upgrade note: replaced 'mul(unity_matrix_mvp,*)' with 'unityobjecttoclippos(*)'
shader
"james/lambert
" }
subshader
cgprogram
#pragma vertex vert
#pragma fragment frag#include
"unitycg.cginc
"fixed4 _lightcolor0;
sampler2d _maintex;
float4 _maintex_st;
struct
v2f ;
float4 frag(v2f i) : color
endcg}}
fallback
"diffuse
"}
//blinnphong光照模型,根據光照向量和視線的半形向量,與頂點法線的夾角來計算鏡面高光的強度,另外再加上漫射光的成分:upgrade note: replaced 'mul(unity_matrix_mvp,*)' with 'unityobjecttoclippos(*)'
shader
"james/phong
" _gloss(
"gloss
", float) = 1
_shininess(
"shininess
", float) = 10
_speccolor(
"specular color
", color) = (1,1,1,1
) }
subshader
cgprogram
#pragma vertex vert
#pragma fragment frag#include
"unitycg.cginc
"fixed4 _lightcolor0;
sampler2d _maintex;
float4 _maintex_st;
float
_gloss;
float
_shininess;
fixed4 _speccolor;
struct
v2f ;
float4 frag(v2f i) : color
endcg}}
fallback
"diffuse
"}
//binnphong比phong少計算一次反射向量,會更簡潔和高效。upgrade note: replaced 'mul(unity_matrix_mvp,*)' with 'unityobjecttoclippos(*)'
shader
"james/blinnphong
" _gloss(
"gloss
", float) = 5
_shininess(
"shininess
", float) = 10
_speccolor(
"specular color
", color) = (1,1,1,1
) }
subshader
cgprogram
#pragma vertex vert
#pragma fragment frag#include
"unitycg.cginc
"fixed4 _lightcolor0;
sampler2d _maintex;
float4 _maintex_st;
float
_gloss;
float
_shininess;
fixed4 _speccolor;
struct
v2f ;
float4 frag(v2f i) : color
endcg}}
fallback
"diffuse
"}
帶光源衰減的計算方式:
shader "參考:james/direct2
" subshader
cgprogram
#pragma multi_compile_fwdbase
#pragma vertex vert
#pragma fragment frag#include
"lighting.cginc
"#include
"autolight.cginc"//
計算陰影所用的巨集包含在autolight.cginc檔案中
fixed4 _color;
fixed4 _specularcolor;
float
_gloss;
struct
a2v ;
struct
v2f
;v2f vert(a2v v)
fixed4 frag(v2f i) :sv_target
endcg
}pass
blend one one
cgprogram
#pragma multi_compile_fwdadd
#pragma vertex vert
#pragma fragment frag#include
"lighting.cginc
"#include
"autolight.cginc
"fixed4 _color;
fixed4 _specularcolor;
float
_gloss;
struct
a2v ;
struct
v2f ;
v2f vert(a2v v)
fixed4 frag(v2f i) :sv_target
endcg}}
fallback
"specular
"}
簡單光照模型(Lambert 光照模型)
環境光是對光照現像的最簡單抽象,因而侷限性很大。它僅能描述光線在空間中無方向並均勻散布時的狀態。很多情況下,入射光是帶有方向的,比如典型的陽光。如果光照射到比較粗糙的物體表面,如粉筆,由於這些表面從各個方向等強度地反射光,因而從各個視角出發,物體表面呈現相同的亮度,所看到的物體表面某點的明暗程度不隨...
基本光照模型
基本方法是把進入攝像機的光線分成4個部分,每個部分分別有一種分發來計算其貢獻度 自發光 emissive 物體本身產生的光 高光反射 specular 光線從光源照到物體表面反射到眼睛裡的光 漫反射 diffuse 這個部分是光線從光源照到物體表面時,物體向各個方向產生的光。環境光 ambient ...
8 光照模型 蘭伯特光照模型
光照模型就是乙個公式,使用這個公式來計算在某個點的光照效果。標準光照模型 在標準光照模型裡,我們把進入攝像機的光分為下面幾個部分 自發光 self luminous 如螢火蟲 高光反射 specular 漫反射 diffuse 向量點乘和叉乘 點乘 標量 代表a在b上的投影和b的乘積 a b a b...