【光照】[光照模型]是什么?以UnityURP为例

【从UnityURP开始探索游戏渲染】专栏-直达

核心定义

光照模型 ‌是计算机图形学中用于模拟光线与物体表面相互作用的数学算法,它通过计算光能传播的物理特性,决定场景中每个像素的最终颜色值。其本质是求解‌光能传输方程‌的简化实现。
graph LR A[光源发射光子] --> B[与物体表面交互] B --> C[反射/折射/吸收] C --> D[进入人眼或传感器] D --> E[形成视觉颜色]

核心组成要素

光照模型通常包含以下物理现象的数学描述:

光-物交互基础组件

组件 物理原理 数学描述
环境光 全局间接光照 Lₐ = kₐ * Iₐ
漫反射 朗伯余弦定律 L_d = k_d * I * max(0, N·L)
镜面反射 菲涅尔反射 L_s = k_s * I * (R·V)^n
自发光 物体辐射 L_e = emissiveColor

高级光传输特性

  • 能量守恒 ‌:入射光能 = 反射光能 + 吸收光能 + 透射光能
  • 微表面理论‌:使用法线分布函数(D)、几何遮蔽(G)、菲涅尔(F)描述微观结构
  • 次表面散射‌:光在材质内部的传播(皮肤、玉石等)

光照模型的数学本质

光照模型是‌渲染方程‌的特定解形式:

L_o(x,ω_o) = L_e(x,ω_o) + ∫_Ω f_r(x,ω_i,ω_o) L_i(x,ω_i) (n·ω_i) dω_i

其中:

  • L_o:出射辐射度
  • f_r:双向反射分布函数(BRDF)
  • L_i:入射辐射度
  • (n·ω_i):余弦衰减项

光照模型分类体系

游戏中的光照模型分类

graph TD A[标准光照模型] --> B[漫反射] A --> C[高光反射] B --> D[兰伯特模型] C --> E[Phong模型] C --> F[Blinn-Phong模型] G[BRDF] --> H[漫反射] G --> I[镜面反射] I --> J[GGX] I --> K[菲涅尔效应] L[PBR] --> G L --> M[能量守恒] L --> N[微表面理论]

按物理经验分类

graph TD A[光照模型] --> B[经验模型] A --> C[物理模型] B --> B1[Lambert] B --> B2[Phong] B --> B3[Blinn-Phong] C --> C1[Cook-Torrance] C --> C2[Oren-Nayar] C --> C3[Disney BRDF]

按光照范围分类

类型 原理 代表模型
局部光照 仅考虑直接光照 Phong, Blinn-Phong
全局光照 包含间接光照 路径追踪,辐射度算法
混合光照 直接+简化间接 屏幕空间环境光遮蔽(SSAO)

典型光照模型实现对比

模型 核心公式 适用场景 计算复杂度
Lambert L = k_d I (N·L) 粗糙无光泽表面 ★☆☆☆☆
Phong L = k_d(N·L) + k_s(R·V)^n 塑料/陶瓷 ★★☆☆☆
Blinn-Phong L = k_d(N·L) + k_s(N·H)^n 实时渲染通用 ★★☆☆☆
Cook-Torrance f = (D·F·G)/(4(N·V)(N·L)) 金属/高光材质 ★★★★☆
Oren-Nayar L = k_d I (A + B·max(0,cosφ)sinα tanβ) 布料/粗糙表面 ★★★☆☆

现代应用中的关键作用

在游戏引擎中的实现

  • Unity URP‌:

    c 复制代码
    csharp
    // 表面着色器示例
    void surf (Input IN, inout SurfaceOutputStandard o) {
        o.Albedo = _Color.rgb;
        o.Metallic = _Metallic;
        o.Smoothness = _Glossiness;
        o.Normal = UnpackNormal(tex2D(_NormalMap, IN.uv_MainTex));
    }
  • Unreal Engine‌:基于物理的材质编辑器(PBR)

电影级渲染应用

  • RenderMan RIS‌:使用路径追踪求解完整渲染方程

  • Arnold:

    c 复制代码
    surface PBR(
      color baseColor = 0.8,
      float metallic = 0,
      float roughness = 0.5)
    {
      // GGX微表面BRDF实现
      bsdf = ggx_brdf(normal, roughness, metallic);
      Ci = baseColor * illuminate(bsdf);
    }

技术演进里程碑

  • 1967‌:Bui Tuong Phong 提出漫反射模型
  • 1975‌:Phong 镜面反射模型完善
  • 1981‌:Cook-Torrance 推出首个物理BRDF
  • 2010‌:Disney 提出艺术家友好的PBR工作流
  • 2020‌:神经辐射场(NeRF)实现照片级渲染

前沿研究方向

  • 神经光照模型 ‌:使用深度学习预测复杂光传输
    • 示例:MIT 2023年提出的NeILF(神经逆光场)
  • 量子光照计算‌:光量子处理器加速路径追踪
  • 全息光场渲染‌:光波前重建技术(如Looking Glass显示屏)

光照模型是连接虚拟与现实的桥梁------从简单的(N·L)点积运算到包含数百万光路的路径追踪,其演进史就是计算机图形学追求物理真实性的奋斗史。理解光照模型不仅需要掌握其数学形式,更要洞察光与物质相互作用的物理本质。


【从UnityURP开始探索游戏渲染】专栏-直达

(欢迎点赞留言探讨,更多人加入进来能更加完善这个探索的过程,🙏)

相关推荐
在路上看风景9 小时前
15. 纹理尺寸是4的倍数
unity
AT~12 小时前
unity 使用Socket和protobuf实现网络连接
unity·游戏引擎
怣疯knight18 小时前
Cocos creator判断节点是否能用的方法
unity·cocos2d
tealcwu18 小时前
Google Play的Keystore不可用时的解决方法
unity
呼呼突突18 小时前
Unity使用TouchSocket的RPC
unity·rpc·游戏引擎
qq 180809511 天前
从零构建一个多目标多传感器融合跟踪器
unity
平行云1 天前
实时云渲染支持在网页上运行UE5开发的3A大作Lyra项目
unity·云原生·ue5·webgl·虚拟现实·实时云渲染·像素流送
鹏飞于天1 天前
Shader compiler initialization error: Failed to read D3DCompiler DLL file
unity
wonder135791 天前
UGUI重建流程和优化
unity·游戏开发·ugui
那个村的李富贵2 天前
Unity打包Webgl后 本地运行测试
unity·webgl