// Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject'
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
Shader "LXC/10 Diffuse Specular"{
Properties{
_Diffuse("Diffuse Color",Color) = (1,1,1,1) //漫反射
_Specular("Specular Color",Color) = (1,1,1,1) //高光反射
_Gloss("Gloss",Range(10,200)) = 20 //高光系数
}
SubShader{
Pass{
Tags{"LightMode" = "ForwardBase"} //正确的Tags才能取到光的属性,LightMode还有其他选项
CGPROGRAM
#include "Lighting.cginc" //跟光有关的属性在这个文件里
#pragma vertex vert //顶点函数
#pragma fragment frag //片元函数
fixed4 _Diffuse;
fixed4 _Specular;
half _Gloss;
struct a2v { //给顶点函数传递的结构体
//1 取得顶点位置
float4 vertex:POSITION;
//5.2 取得发线
float3 normal:NORMAL;
};
struct v2f { //顶点函数跟片元函数传递的结构体
//2 剪裁空间下的顶点位置
float4 svPos:SV_POSITION;
//5.1 传递世界空间下的法线 TEXCOORD0纹理坐标
float3 worldNormal:TEXCOORD0;
//6.2 世界空间下的顶点坐标
float4 worldVertex:TEXCOORD1;
};
v2f vert(a2v v) { //顶点函数,返回值v2f,参数a2v
v2f f;
//3 顶点位置的矩阵转换,模型空间转换到剪裁空间
f.svPos = UnityObjectToClipPos(v.vertex);
//5.3 模型空间到世界空间的发线转换
f.worldNormal = UnityObjectToWorldNormal(v.normal);
//6.3 把顶点坐标从模型空间转到世界空间 mul(v.vextex, _World2Object 矩阵);
f.worldVertex = mul(v.vertex, unity_WorldToObject);
return f;
}
fixed4 frag(v2f f):SV_Target { //片元函数,返回值颜色fixed4,参数v2f,颜色要输出的屏幕上需要定义:SV_Target
//5.4 单位化发线值
fixed3 normalDir = normalize(f.worldNormal);
//6.1 光的方向 需要传递世界空间下的顶点坐标6.3 1.自己计算。2.内置方法。
fixed3 lightDir = normalize(WorldSpaceLightDir(f.worldVertex));
//4 漫反射的颜色 _LightColor0 取得平行光的颜色 _Diffuse漫反射的颜色 dot需要一个cos值光的方向6.1和法线5.4的夹角
fixed3 diffuse = _LightColor0.rgb*_Diffuse.rgb*max(dot(normalDir, lightDir), 0);
//9 相机方向 需要传递顶点坐标6.3
fixed3 viewDir = normalize(UnityWorldSpaceViewDir(f.worldVertex));
//8 平分线 需要光6.1和相机的方向9
fixed3 halfDir = normalize(lightDir + viewDir);
//7 高光反射的颜色 dot(normalDir, halfDir)是cos值:法线5.4和平分线的值8 dot用来取得两个向量的点积(余弦值)
fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(max(dot(normalDir, halfDir), 0), _Gloss);
//10 光的综合运用 UNITY_LIGHTMODEL_AMBIENT环境光
fixed3 tempColor = diffuse + specular + UNITY_LIGHTMODEL_AMBIENT.rgb;
//11 颜色返回
return fixed4(tempColor, 1);
}
ENDCG
}
}
Fallback "Specular"
}
Shader-漫反射与高光反射综合(详细版)
猜你喜欢
转载自blog.csdn.net/qq_42459006/article/details/84112645
今日推荐
周排行