Unity Shader学习(3)-光照模型

本文介绍了Unity Shader中如何实现漫反射和高光反射光照模型,包括逐顶点光照和逐像素光照的效果。通过Lambert定律、Phong模型和Blinn模型详细阐述了漫反射和高光反射的计算过程,同时讨论了半兰伯特光照模型在解决背光面明暗问题上的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模拟真实的光照环境:

光线从光源发射
光线与场景中的物体相交
被物体吸收
散射到其他方向
摄像机吸收光线产生图像
相交
散射Scatering
吸收Absorption
物体内部 折射refraction
物体外部 反射reflection

高光反射(specular):表示物体表面是如何反射光线的
漫反射(diffuse):表示有多少光线被折射、吸收和散射出表面

标准光照模型:

直接光照(direct light):直接从光源发射出来经过物体表面一次发射后进入摄像机的光线

基本方法:把进入到摄像机的光线分为4部分,每一部分单独计算贡献度

  • 自发光(emissive)部分:当给定一个方向时,物体本身会向这个方向发射多少辐射量。
  • 高光反射(specular)部分:描述当光线从光源照射到模型表面时,该表面会在完全镜面反射方向散射多少辐射量。
  • 漫反射(diffuse)部分:描述当光线从光源照射到模型表面时,该表面会向每个方向散射多少辐射量。
  • 环境光(ambient)部分:描述其他所有的间接光照。

环境光:一般是一个全局变量,即场景中的所有物体都使用同一个环境光

cambient=gambientc_{ambient} = g_{ambient}cambient=gambient

自发光:直接使用该材质的自发光颜色

cemissive=memissivec_{emissive} = m_{emissive}cemissive=memissive

漫反射:符合兰伯特定律(Lambert’s Law):反射光线的强度与表面法线和光源方向的夹角的余弦值成正比

cdiffuse=(clight⋅mdiffuse)max(0,n⃗⋅l⃗)c_{diffuse} = (c_{light}·m_{diffuse})max(0,\vec{n}·\vec{l})cdiffuse=(clightmdiffuse)max(0,n l )

  • clightc_{light}clight:光源颜色
  • mdiffusem_{diffuse}mdiffuse:材质漫反射颜色
  • n⃗\vec{n}n :表面法线
  • l⃗\vec{l}l :指向光源的单位矢量
  • max(0,n⃗⋅l⃗)max(0,\vec{n}·\vec{l})max(0,n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值