(十二)unity shader基础之——————基础光照:下篇(unity中实现漫反射)

基础光照上篇主要讲的是unity中的光照模型及其原理,还有几种光照类型(自发光、环境光、漫反射、高光反射),后面几篇文章就开始在unity中实现这几种光照类型,本篇在unity实现漫反射。

一、在unity shader中实现漫反射光照模型

 下面我们来实现光照模型中的漫反射光照部分,计算公式如下:

基本光照模型中漫反射部分的计算公式:

Cdiffuse=(Clight · mdiffuse)∗max(0,n^ · l^)

要计算漫反射需要4个参数:
Clight = 入射光线的颜色和强度
mdiffuse = 材质的漫反射系数
n^ = 表面法线
l^  = 光源方向

为了防止点积结果为负值,我们需要使用max操作,而Cg提供了这样的函数。在本例中使用Cg的另一个函数可以达到统一的目的,即saturate函数。

函数:saturate(x)

参数x用于操作的标量或矢量,可以是float、float2、float3等类型。把x截取在[0,1]范围内,如果x是一个矢量。那么会对它的每一个分量进行这样的操作。

1.1实践:逐顶点光照

我们看一下如何实现一个逐顶点的漫反射光照效果。

1.为了得到并控制材质漫反射颜色,首先在shader中声明属性漫反射颜色,设置初始值白色:

Properties {
		_Diffuse ("Diffuse", Color) = (1, 1, 1, 1)
	}

2.然后在subshader语句块定义了一个pass,指明光照模式:

Pass { 
			Tags { "LightMode"="ForwardBase" }

LightMode标签是Pass标签中的一种,它用于定义该Pass在unity光照流水线的角色,定义了正确的LightMode,才能得到一些untiy的内置光照变量,例如后面要说的_LightColor0。

3.声明指令,包含内置文件Light.cginc,定义变量:

#pragma vertex vert
#pragma fragment frag

#include "Lighting.cginc
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值