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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值