Shader "HalfLambert"
{
// 属性
Properties
{
// 主纹理 : 初始值白色
_MainTex("_MainTex", 2D) = "white" {}
}
SubShader
{
// 标签
Tags
{
// 渲染类型 : 不透明物体
"RenderType" = "Opaque"
}
// 层次细节 : 200
LOD 200
// CG代码
CGPROGRAM
// 预处理指令
// surface surf : 指定此为suface类型的shader, 渲染函数为surf
// HalfLambert : 指定所使用的光照模型为自定义半兰伯特光照模型
#pragma surface surf HalfLambert
// 自定义半兰伯特光照模型
// lightDir参数 : 顶点到光源的方向向量
// atten参数 : 光照强度衰减值
inline float4 LightingHalfLambert(SurfaceOutput s, fixed3 lightDir, fixed atten)
{
// 漫反射光照方向 = 顶点的法线向量与光照方向的点积
float4 difLight = dot(s.Normal, lightDir);
// 半兰伯特光照方程
float4 hLambert = difLight * 0.5 + 0.5;
float4 col;
// _LightColor0 : 是UnityShader的内部变量,代表全局光照颜色,可直接使用
col.rgb = s.Albedo * _LightColor0.rgb * (hLambert * atten * 2);
col.a = s.Alpha;
return col;
}
// CG变量 : 与Properties中的变量名保持一致
sampler2D _MainTex;
// 输入结构体
struct Input
{
// 在在纹理名称前直接加上uv,代表取纹理的uv
float2 uv_MainTex;
};
// 着色函数
void surf(Input IN, inout SurfaceOutput s)
{
// 纹理采样,样本为_MainTex
half4 c = tex2D(_MainTex, IN.uv_MainTex);
// 将颜色进行像素输出
s.Albedo = c.rgb;
s.Alpha = c.a;
}
ENDCG
}
}
漫反射着色 - 创建半兰伯特光照模型
最新推荐文章于 2024-07-08 10:27:54 发布