笔记09 图形 2.4 传统经验光照模型详解 | 【先行】基础渲染光照介绍(一)

铁名_IronName Lv4

图形 2.4 传统经验光照模型详解

相关笔记:读书笔记05《Unity Shader入门精要》

光照模型

光照模型(illumination model),也称为明暗模型,用于计算物体某点处的光强(颜色值)。从算法理论基础而言,光照模型分为两类:一种是基于物理理论的,另一种是基于经验模型的。

基于物理理论的光照模型:偏重于使用物理的度量和统计方法,效果非常真实,但是计算复杂,实现起来也较为困难;
经验模型:是对光照的一种模拟,通过实践总结出简化的方法,简化了真实的光照计算,并且能达到很不错的效果

为什么需要经验模型

现实世界的光照是极其复杂的,而且会受到诸多因素的影响,有限的计算能力无法完全模拟。使用简化的光照模型对现实的情况进行近似,使得计算处理起来会更容易,并且令效果更符合需求。这些经验模型就是基于我们对光的物理特性的理解。

局部光照模型

(和全局光照模型相对)局部光照模型只关心直接光照部分,即直接从光源发出并照射到物体表面,并反射至摄像头的光线。由漫反射,高光反射,环境光,自发光组成。

漫反射

定义:在光照模型的定义中,当光线从光源照射到模型表面时,光线均匀被反射到各个方向,这种现象就是漫反射。漫反射效果与观察者位置无关。

计算方法:漫反射光照符合 Lambert 定律(反射光强与 法线和光源方向之间的夹角的余弦值成正比)光照公式:color=clightalbedodot(normal,L)color=c_{light}*albedo*dot(normal,L)

高光反射(镜面反射)

定义:当光线到达物体表面并发生了反射,观察视线在反射光线的附近时,便能够观察到了高光反射。高光反射描述了光线与物体表面发生的反射(光强不变,方向改变)
高光反射的反射率是由菲涅尔效应决定,通常使用对应的 反射贴图 描述物体表面的反射率,并且使用光泽度(粗糙度,反光度)描述高光范围的大小。
光照公式:

cspecular=clightmspeculardot(v,r)mglossr=I2dot(n,l)n\begin{aligned} & c_{specular}=c_{light}*m_{specular}*dot(v,r)^{m_{gloss}}\\ & r=I-2*dot(n,l)*n \end{aligned}

其中mglossm_{gloss}表示了材质的光泽度;mspecularm_{specular} 表示材质的反射光;rr 表示反射光线;vv 表示视线向量

环境光

定义:在局部光照模型中,由于没有考虑间接光照的影响,因此为了处理这种间接光照,为光照模型引入环境光

光照公式:cambient=AlbedoAmbientlightc_{ambient}=Albedo*Ambient_{light}

自发光

顾名思义,物体自身发射的光线,通常作为单独的一项加入光照模型。一般使用一张发光贴图描述物体的自发光

经典光照模型

Lambert 模型

color=clightalbedodot(normal,L)color=c_{light}*albedo*dot(normal,L)

Phong 模型

第一个有影响力的光照模型。考虑直接光照的反射作用,使用环境光代替间接光照
光照公式:

cfinal=Alightmdiffuse+Clight(mdiffusedot(l,n)+mspeculardot(v,r)gloss)c_{final}=A_{light}*m_{diffuse}+C_{light}*(m_{diffuse}*dot(l,n)+m_{specular}*dot(v,r)^{gloss}) AlightA_{light} 是 环境光量;ClightC_{light} 是 入射光量;mdiffusem_{diffuse} 是 漫反射率;mspecularm_{specular} 是 镜面反射率; l,n,rl,n,r 是 指向光源的入射光向量,物体表面法线,反射向量;glossgloss 光泽度(控制高光反射区域大小)

Blinn-Phong 模型

Blinn-Phong模型不再依赖于反射向量,而是采用了所谓的半程向量(Halfway Vector),即光线与视线夹角一半方向上的一个单位向量。当半程向量与法线向量越接近时,镜面光分量就越大。

cfinal=Alightmdiffuse+Clight(mdiffusedot(l,n)+mspeculardot(h,n)gloss)c_{final}=A_{light}*m_{diffuse}+C_{light}*(m_{diffuse}*dot(l,n)+m_{specular}*dot(h,n)^{gloss})

和 Phong 模型的区别

  • 半角向量比反射向量的计算更加简洁
  • 当光源与视线都在物体表面之上时,半角向量与法线的角度永远不大于90度
    设想一种情况,当材质的反光度非常低,因此物体的被光线照射的大部分区域都会发生高光反射。这些区域中一部分高光部分的反射向量与视线的夹角超过了90度。如果使用 Phong 模型就会导致高光区域一部分发生缺失。
    这是由于Phong模型只考虑视线与光照分布在法线两侧的情况。当视线与光照在法线同侧时且高光反射对亮度有较大影响时,就会发生断层。

Flat 模型

平面着色模型,计算多边形的单个强度,每个三角形只有一个法线方向。以相同的光强度值显示多边形的所有点。通常适用于lowPoly风格的场景

-作业-

参考备用 苏格拉没有底。的笔记anesu的笔记

1.学习【先行】基础渲染光照介绍(一)。说出能量守恒的理念在基础光照模型中的作用

  1. 揭示基础模型的物理缺陷
  2. 引导理解材质参数的物理意义
  3. 为过渡到PBR提供桥梁

2.基于能量守恒的理念,自己写一套完整的光照模型,需要包含环境光照

在 Blinn-Phong 公式的基础上改(?)

2种着色模型x3种基础光照模型;遵循能量守恒的Blinn-Phong

这下完事大吉(


【先行】基础渲染光照介绍(一)

不想看视频,故直接参考了 苏格拉没有底。的笔记

一、Lambert 模型

只有漫反射项

二、Phong 模型

  • 三部分:漫反射、高光、环境光

三、Blinn-Phong

  • 对与Phong模型的改进:少了一个反射计算,把高光项改为用半程向量和法线的余弦值计算。

四、使用法线贴图

读书笔记06《Unity Shader入门精要》的法线纹理,以及对应的时间代码

五、cubemap

读书笔记09《Unity Shader入门精要》
  • IBL(image based lighting,基于图像的光照):一种通过环境贴图(如立方体贴图)来捕捉来自周围环境的入射光信息,并利用这些信息计算物体表面漫反射和镜面反射的技术。

小技巧:金属感/非金属感 的近似

用粗糙度来控制“金属感”,并不是 PBR 标准中的金属度。

1
2
specular = lerp(diffuse * specular, specular, _Gloss/255);
reflcol.rgb = lerp(reflcol * diffuse.rgb, reflcol, _Gloss/255);
  • 用 _Gloss(粗糙度)作为插值因子,在 “受漫反射影响” 和 “不受漫反射影响” 之间过渡。
  • 当 _Gloss 很大(即表面很光滑)时,选择右边(specular 或 reflcol),让高光和反射不受漫反射颜色干扰,模拟金属质感。
  • 当 _Gloss 很小(表面粗糙)时,选择左边(diffuse * specular 或 reflcol * diffuse),让高光和反射被漫反射颜色调制,模拟非金属质感。
  • 标题: 笔记09 图形 2.4 传统经验光照模型详解 | 【先行】基础渲染光照介绍(一)
  • 作者: 铁名_IronName
  • 创建于 : 2026-02-16 13:07:25
  • 更新于 : 2026-02-24 10:13:10
  • 链接: https://blog.ironname.top/2026/02/16/笔记09-技术美术百人计划/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论