为何PBR材质中的光源颜色值可大于1?
PBR与Phong光照模型的光源强度差异解析
你的理解完全正确,PBR光照模型确实需要远高于Phong模型的光源颜色/强度值才能达到正常的亮度表现,核心原因在于两者的物理基础和能量计算逻辑完全不同:
1. 能量守恒的严格性差异
- Phong是经验驱动的光照模型,没有严格遵循能量守恒:它的高光、漫反射计算是人为设计的经验公式,甚至可能出现反射光总能量超过入射光的情况,所以用0~1的归一化强度值就能得到视觉上足够亮的效果,但这不符合真实物理规律。
- PBR基于物理渲染原则,严格遵守能量守恒:材质的总反射率(由albedo、金属度、粗糙度共同决定)不会超过1,所有反射光的总能量永远小于等于入射光能量。这意味着如果光源强度沿用Phong的0~1范围,大部分能量会被材质吸收,场景自然会偏暗。
2. 光源值的物理意义不同
- Phong的光源值是无物理意义的相对强度,只是为了调整视觉效果的经验参数,完全脱离真实世界的光能量量级。
- PBR的光源值更贴近真实世界的光辐照度/光通量单位:比如LearnOpenGL教程中用到的20300,对应的是真实场景中光源的实际能量量级(比如室内台灯、室外太阳光的辐照度远高于01的归一化值)。你测试中把平行光强度调到10才恢复正常亮度,正是因为这个值更接近真实光源的能量范围。
3. 色调映射的配套需求
PBR渲染流程通常会配合HDR色调映射步骤:高亮度的光源值可以保留更多高光细节,之后再通过色调映射将HDR范围的亮度压缩到显示器的0~1 LDR范围。如果用Phong的低强度值,HDR阶段就没有足够的动态范围,最终输出的画面会显得平淡发暗。
附你测试的效果对比:
- 平行光强度1时的暗场景:

- 平行光强度10时的正常场景:

内容的提问来源于stack exchange,提问作者tigertang
相关产品推荐
相关产品推荐

