【Shader笔记1】基础光照-光照模型

光照模型
1.定义:光照模型就是一个公式,使用这个公式来计算在某个点的光照效果
2.标准光照模型
在标准光照模型中,我们把进入摄像机的光分为下面四部分:
1)自发光
2)高光反射
Specular=平行光 * pow (max(0,cosθ),参数x)
(θ为平行光的反射光与视野方向的夹角)
在这里插入图片描述

************Blinn光照模型和Blinn-Phong 光照模型 ************
Blinn光照模型:Specular =平行光 * pow ( max ( 0 , cosθ) , 参数x )
Blinn-Phong光照模型:Specular =平行光 * pow ( max ( 0 , cosθ) , 参数x )
(θ为平行光与视野方向夹角的平分线与法线的夹角)
区别:Blinn-Phong 的高光范围比Blinn的大点,比较常用,因为效果好

3)漫反射
Diffuse = 平行光.颜色 * max(0,cosθ)
(cosθ=光和法线的夹角)
(因为背光面与光的夹角都大于90°,取负数相乘的话没意义,所以用max)
*cosθ的计算: 在这里插入图片描述

PS:逐顶点光照:要把光照的计算放在顶点函数里;逐像素光照,则放在片元函数里面。
一个模型顶点的数量较少,放在顶点函数里计算会快点,不过效果可能不那么好,想法放在片元函数里效果会比较好,因为处理的次数更多,不过速度会慢

兰伯特光照模型与半兰伯特光照模型
兰伯特光照模型:Diffuse = 平行光.颜色 * max(0,cosθ)
半兰伯特光照模型:Diffuse = 平行光.颜色 * (cosθ * 0.5 +0.5)
区别:通过公式我们可以看到处于背光面(与平行光的夹角 >= 90° )的cosθ值基本全为0到-1,这样呈现出来的颜色即全为黑色;而半兰伯特通过变换公式,使得这部分的cosθ值处在0~1之间,使得背光面不是全黑的

cosθ
在这里插入图片描述
(cosθ * 0.5 +0.5)
在这里插入图片描述
4)环境光

3.相关平行变量
1)只有定义了正确的LightMode才能得到一些unity的内置光照变量
Tags{“LightMode”=”ForwardBase”} (ForwardBase:前向渲染)
2)#include "Lighting.cginc"包含unity的内置文件,才可以使用unity内置的一些变量
3)normalize()把向量归一化
4)max()用来取得函数中最大的一个
5)dot() 用来取得两个向量的cosθ值
6)_WorldSpaceLightPos0 取得平行光的向量
_LightColor0 取得平行光的颜色
UNITY_MATRIX_MVP 这个矩阵用来把一个坐标从模型空间转换到剪裁空间
UNITY_LIGHTMODEL_AMBIENT.rgb环境光的颜色

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值