Unity_Shader学习(四)基础光照Shader

本文介绍了Unity中基础光照Shader的学习,包括基本概念如光照类型、兰伯特定律,以及Shader实现,涉及逐顶点光照、逐像素光照、半兰伯特模型和高光反射的计算。通过实例展示了不同光照模型的效果。
摘要由CSDN通过智能技术生成

一.基本概念

首先,对于基础光照Shader我们需要先学习光照相关的知识。

我们使用辐照度来量化光,假设顶点法线为normal,入射光线向量为light,二者夹角为a,辐照量与cos(a)的值成正比。

着色指的就是根据材质属性,光照信息等根据一个公式计算辐照度的过程。我们把计算辐照度的这个公式称作光照模型。

在我们的光照模型中,需要考虑如下四种光类型:

自发光:一个物体本身发光的辐射量。

高光反射:完全镜面反射散射的辐射量。

漫反射:不规则反射散射的辐射量。

环境光:描述其他所有的间接光照。

 

对于环境光与自发光的计算,我们均采用简单的等式计算(a为已知量):

x(ambient)= a(ambient)

x(emissive)= a(emissive)

 

对于漫反射的计算,我们采用兰伯特定律来计算,即反射光线的强度与  表面法线和光源方向之间夹角的余弦值  成正比。

x(diffuse)=a(light) * a(material) * max(0, n*l)

a(light)是光照信息,a(material)是材质信息。n*l是法线与光照方向点乘计算得到的,其中n与l都是单位矢量,这样就得到了余弦值。max(0, n*l)是因为辐照度不能为负,我们的计算中不存在负强度的光照。

 

对于高光反射的计算,我们有两种策略:

1.x(specular)=a(light) * a(specular) *( max(0, v * r) ^ gloss )

gloss是光泽度,反光度。gloss值越高,高光区域的亮点就越小。a(specular)是材质信息,a(light)是光照信息。v是视角方向,r是反射向量。

2.Blin-Phong模型:

x(specular)=a(light) * a(specular) *( max(0, n * h)^gloss)

其中n为法线方向单位矢量,h为((v+l)/ | v+l |  )即v+l之后截取为单位矢量。

 

二.Shader实现

在下面的Shader中我们先不考虑自发光emissive,只考虑环境光ambient与漫反射光diffuse与高光反射sp

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我只知道我要大开杀戒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值