Unity 光照技术精华专题新手友好技术精华3 / 25 已发布

光照基础认知体系重建:物理光照(PBR)的本质与误用陷阱

能量守恒 · 微表面理论 · Metallic vs Specular · 独立游戏反模式

· 12 分钟阅读·2.8k 阅读·198
光照基础认知体系重建:物理光照(PBR)的本质与误用陷阱 — Unity 光照技术精华专题

光照基础认知体系重建:物理光照(PBR)的本质与误用陷阱

基于物理的渲染(Physically Based Rendering, PBR)是过去十年游戏图形学最重要的标准确立——它从根本上改变了开发者与光照之间的关系:以前我们「调出一个好看的光照」靠的是经验和运气,现在我们「定义一组物理属性,光照系统根据这些属性自动计算出物理上正确的结果」。

但 PBR 在独立游戏中的普及也带来了新的问题:开发者在不理解 PBR 核心原则的情况下使用 PBR 材质,导致画面「物理正确但视觉平庸」甚至「物理正确反而更难看了」。本文的目标是建立 PBR 的核心认知框架,同时识别独立游戏中最常见的 PBR 误用陷阱。

能量守恒:PBR 的第一条物理法则

能量守恒在 PBR 中的含义异常简单:一个表面反射的光 不能多于 它接收到的光。在 Unity 的 PBR Shader 中,反射率(Specular)和透射/漫射率(Diffuse)之和必须等于或小于 1。

违反能量守恒的直接后果是画面看起来「塑料感」过强——物体像涂了一层油一样闪闪发亮且颜色饱和度异常。这是新手最常犯的 PBR 错误:在 Albedo 贴图中保留了光照信息(如阴影、高光),然后在材质参数中又叠加了一层 Specular 高光。

正确操作:Albedo 贴图只包含材质的固有色(颜色),不包含任何光照信息。光照计算全部由 Shader 处理——不要在贴图里「预烘焙」阴影或高光。

微表面理论与粗糙度-光滑度

PBR 假设所有表面在微观尺度上都是凹凸不平的。这些微小的表面元(微表面)的法线方向各不相同,它们的整体统计分布决定了宏观表面的反射行为。粗糙度(Roughness)就是对这个分布的量化描述:

  • 粗糙度 0(光滑表面):微表面法线几乎全部指向同一方向,产生清晰的镜面反射
  • 粗糙度 1(粗糙表面):微表面法线随机分布,产生弥散的漫反射

在 Unity URP 的 Lit Shader 中,Smoothness(光滑度)是 Roughness 的反向映射——Smoothness = 1 对应 Roughness = 0,即完全光滑。理解这个映射关系是正确使用 PBR 参数的前提。

菲涅耳效应与非金属的普遍规律

菲涅耳效应(Fresnel Effect)描述了反射率随视角变化的现象:垂直看一个表面时反射较弱,掠射角看时反射显著增强。在 PBR 中,菲涅耳效应对所有非金属材质自动生效,由 Shader 的 Fresnel 函数基于微表面分布自动计算。

它的一个实际影响是:在游戏场景中,所有非金属物体在视线接近平行于表面时都会出现明显的反射增强——这是物理正确的,但很多开发者错误地认为这是材质问题而去调整 Specular 颜色,反而破坏了 PBR 的一致性。

Metallic 工作流 vs Specular 工作流

Unity URP 的 Lit Shader 默认使用 Metallic 工作流。两种工作流的本质差异在于如何定义材质的反射行为:

维度Metallic 工作流Specular 工作流
核心参数Metallic(金属度)+ SmoothnessSpecular Color + Smoothness
非金属(0 Metallic)统一使用 4% 反射率(固定值)可自定义各通道反射颜色
金属(1 Metallic)反射颜色由 Albedo 驱动反射颜色由 Specular Color 驱动
参数数量2 个3 个
物理准确性更高(标准化反射率)更灵活

选择建议:除非有明确的非标准反射需求(如特殊的彩虹色材质、非金属但具有有色反射的物体),否则使用 Metallic 工作流。Metallic 工作流的参数更少、物理约束更强、在不同光照条件下的表现更可预测。

独立游戏 PBR 高频误用陷阱 TOP5

  1. Albedo 贴图中混入光照信息:在 Albedo 贴图中绘制阴影或高光细节。修复方法:将贴图中的光照信息分离出来,让 Shader 处理光照计算。

  2. Emissive 滥用:使用 Emissive 通道来模拟光照(而不是光照去照亮物体)。Emissive 的正确用法是模拟自发光的材质(如灯丝、屏幕),而不是用 Emissive 去「照亮」周围的场景。

  3. 不合理的 Intensity 数值:将 Point Light 的 Intensity 设为 100+(默认范围 0–8)。Unity 的物理光照单位是基于真实世界照度设计的——室内光源通常在 1-5 强度范围,超过 10 就会产生严重的曝光压缩问题。

  4. 透明材质的 PBR 失效:透明物体在 Deferred 渲染路径中不受光照影响。如果使用 Deferred 路径,透明物体会变成「自发光」状态——这不是 PBR 的问题,是渲染路径的限制。

  5. Linear vs Gamma 色彩空间混淆:在 Gamma Color Space 下使用 PBR 材质,会导致光照计算中物理精度严重损失。所有 PBR 工作流必须在 Linear Color Space 下进行。检查方法:Project Settings → Player → Color Space → 必须为 Linear。

一个快速的 PBR 正确性测试:在场景中放置一个 Unity 自带的 Standard Sphere(默认 Lit Shader,Metallic=0, Smoothness=0.5),与你的材质在同一个光照环境下对比。如果你的材质在相同光照条件下显示出明显不同的「光泽性格」,说明你的 PBR 参数设置偏离了物理基线。

关键词

PBR物理光照能量守恒微表面理论 菲涅耳效应Metallic 工作流Specular 工作流 Albedo 贴图Linear Color SpaceUnity PBR 独立游戏常见错误渲染基础
文章标签
Unity 光照URP 光照HDRP 光照Global IlluminationLight Probes烘焙光照EnlightenLPPV实时GI独立游戏光照优化CSMShadow Map
更多专题全部专题
觉得有价值?点赞或收藏支持内容持续产出。
← 返回专题:Unity 光照技术精华专题