Shader "Custom/Lighting001" {
Properties{
_diffuseColor("diffuse :",color) = (1,1,1,1)
_specularColor("specular:",color) = (1,1,1,1)
_shimininess("specular power",range(1,100)) = 10
}
SubShader{
pass{
CGPROGRAM
#pragma vertex verx
#pragma fragment frag
#include "unitycg.cginc"
#include "Lighting.cginc"
float4 _diffuseColor;
float4 _specularColor;
fixed _shimininess;
struct v2f{
float4 pos:POSITION;
float3 normal:NORMAL;
float4 vertex:TEXCOORD0;
};
v2f verx(appdata_base IN)
{
v2f OUT;
OUT.pos = mul(UNITY_MATRIX_MVP,IN.vertex);
OUT.normal = IN.normal;
OUT.vertex = IN.vertex;
return OUT;
}
fixed4 frag(v2f IN):COLOR
{
float4 color = UNITY_LIGHTMODEL_AMBIENT;
float3 N = UnityObjectToWorldNormal(IN.normal);
float3 L = WorldSpaceLightDir(IN.vertex);
L = normalize(L);
float diffuseScale = saturate(dot( N,L));
float3 diffuse = _diffuseColor.rgb * _LightColor0.rgb * diffuseScale;
//不用reflect方法進行求的specular
float3 R = normalize(2 * dot(N,L) * N - L);
float3 V = WorldSpaceViewDir(IN.vertex);
V = normalize(V);
//不用公式自己計算出來的光照強度
//float specularScale = dot(R,V);
//float3 specular= _specularColor.rgb * _LightColor0.rgb * pow(max(0.0,specularScale),_shimininess);
//Phong 光照模型
// float3 reflectDir = reflect(-L,V);
// float3 specular= _specularColor.rgb * _LightColor0.rgb * pow(max(0.0,dot(reflectDir,V)),_shimininess);
//
//Blinn phong 光照模型
float3 H = L + V;
H = normalize(H);
float HNDot = dot(H,N);
float3 specular= _specularColor.rgb * _LightColor0.rgb * pow(max(0.0,HNDot),_shimininess);
return color + float4(diffuse,1.0)+ float4(specular,1.0) ;
}
ENDCG
}
}
}
phong 光照模型和 blinn phong 模式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.