Unity ShaderLab 基础四(漫反射光照)

学习笔记  整理来至《Unity Shader入门精要》 

漫反射,是投射在粗糙表面上的光向各个方向反射的现象.当一束平行的入射光线射到粗糙的表面时,表面会把光线向着四面八方反射,所以入射线虽然互相平行,由于各点的法线方向不一致,造成反射光线向不同的方向无规则地反射,这种反射称之为“漫反射”或“漫射”.

Unity ShaderLab 基础四(漫反射光照)_第1张图片

漫反射计算公式如下 :

Unity ShaderLab 基础四(漫反射光照)_第2张图片

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;
   

你可能感兴趣的:(unity,shader,cg,hlsl)