学习笔记 整理来至《Unity Shader入门精要》
漫反射,是投射在粗糙表面上的光向各个方向反射的现象.当一束平行的入射光线射到粗糙的表面时,表面会把光线向着四面八方反射,所以入射线虽然互相平行,由于各点的法线方向不一致,造成反射光线向不同的方向无规则地反射,这种反射称之为“漫反射”或“漫射”.
漫反射计算公式如下 :
Clingt:入射光颜色,强度
Mdiffuse:漫反射系数
n:表面法线
I:方向光源
逐顶点光照(DiffuseVertex)
//漫反射逐顶点
Shader "DiffuseVertex" {
Properties{
_Diffuse("Diffuse",Color)=(1,1,1,1)//漫反射颜色
}
SubShader {
pass {
Tags{"LightMode"="ForwardBase"}
//只有定义了LightMode才能得到一些Unity的内置光照变量
CGPROGRAM //-------CG------
#pragma vertex vert //声明顶点着色器
#pragma fargment farg //声明片元着色器
#include "Lighting.cginc" //引用内置文件
fixed4 _Diffuse; //定义Properties参数
struct a2v { //定义顶点着色器输入结构体
float4 vertex : POSITION;
//把模型空间下的顶点坐标填充给vertex
float3 normal : NORMAL;
//把模型空间下的顶点法线填充给normal
};
struct v2f { //定义顶点着色器输出结构体
float4 pos : SV_POSITION;
fixed3 color : COLOR;
};
//顶点着色器的输出结构体同时也是片元着色器的输入结构
v2f vert(a2v v){ //定义顶点着色器
v2f o; //定义返回值o
o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
//通过内置矩阵把顶点位置从模型空间转换到裁剪空间
fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;
//通过内置变换获得环境光(想要获得正确的值需要定义合适的LightMode标签)
fixed3 w