【光照】[光照模型]是什么?以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开始探索游戏渲染】专栏-直达

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

相关推荐
RReality1 小时前
【Unity Shader URP】Matcap 材质捕捉实战教程
java·ui·unity·游戏引擎·图形渲染·材质
魔士于安1 小时前
unity urp材质球大全
游戏·unity·游戏引擎·材质·贴图·模型
AIminminHu1 小时前
OpenGL渲染与几何内核那点事-项目实践理论补充(一-3-(4):你敢说你真的懂OpenGL?一个老师傅眼中的“图形API进化史”)
渲染·opengl·渲染管线
南無忘码至尊4 小时前
Unity学习90天 - 第 6 天 -学习物理 Material + 重力与阻力并实现弹跳球和冰面滑动效果
学习·unity·游戏引擎
mxwin6 小时前
Unity 单通道立体渲染(Single Pass Instanced)对 Shader 顶点布局的特殊要求
unity·游戏引擎·shader
魔士于安9 小时前
unity 低多边形 无人小村 木质建筑 晾衣架 盆子手推车,桌子椅子,罐子,水井
游戏·unity·游戏引擎·贴图·模型
RReality9 小时前
【Unity Shader URP】简易卡通着色(Simple Toon)实战教程
ui·unity·游戏引擎·图形渲染·材质
Evavava啊9 小时前
Android WebView 中 React useState 更新失效问题
android·前端·react.js·渲染
魔士于安9 小时前
unity 骷髅人 连招 武器 刀光 扭曲空气
游戏·unity·游戏引擎·贴图·模型
瑞瑞小安12 小时前
Unity功能篇:文本框随文字内容动态调整
ui·unity