Unity Shader 漫反射光照模型

        在计算光照模型时,通常来讲会有两种:在顶点着色器中计算的称为逐顶点光照;在片元着色器中计算的被称为逐像素光照,我们先讲逐顶点光照。

        逐顶点光照也被称为高洛德着色,我们在每个顶点上计算光照,然后会在渲染图元内部进行线性插值,最后输出成像素颜色。由于顶点数目往往远小于像素数目,因此逐顶点光照的计算量往往要小于逐像素光照。但是由于逐顶点光照依赖于线性插值来得到像素光照,因此当光照模型中有非线性的计算(如计算高光反射时),逐顶点光照就会出现问题。且逐顶点光照会在渲染图元内部对顶点颜色进行插值,会导致渲染图源内部的颜色总是暗于顶点处的最高颜色值,这在某些情况下会产生明显的棱角现象。

        在Unity Shader中实现漫反射光照模型,计算公式:

        为了防止点积结果为负值,我们需要使用max操作,在CG中提供了saturate(x)函数能达到同样的效果。

Shader "Unlit/Diffuse Vertex-Level" {
	Properties {
        //声明一个Color类型的属性,初始值设为白色
		_Diffuse ("Diffuse", Color) = (1, 1, 1, 1)
	}
	SubShader {
		Pass { 
            //设置光照模式,只有定义正确的光照模式才能得到Unity的内置光照变量
			Tags { "LightMode"="Forward

你可能感兴趣的:(shader,unity,游戏引擎)