You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中如何通过RGB值计算HDR颜色的强度

HDR颜色强度计算方案(适配Bloom发光控制)

针对你用HDR材质+Bloom效果的场景,完全可以通过RGB值计算出对应强度来初始化滑块,这里给你几个实用的方案:

1. 基于人眼感知的亮度公式(最贴合Bloom逻辑)

Bloom效果的核心是提取画面中亮度超过阈值的区域进行模糊,所以直接用人眼感知的亮度值作为“发光强度”是最合理的,行业通用的标准公式是ITU-R BT.709相对亮度计算:

强度 = 0.2126 * R + 0.7152 * G + 0.0722 * B

这个公式里的R、G、B是HDR颜色的线性空间值(引擎里HDR材质基本都是线性空间,不用额外转换),计算结果会和Bloom实际捕捉到的发光强度直接对应——值越大,发光越明显,刚好能作为滑块的初始值。

2. 针对色调锁定的强度拆分(适合自定义颜色时保持色调)

如果你的需求是让玩家调整强度时不改变颜色的色调,还可以把HDR颜色拆成「基础色+强度」:

  • 先计算上述的亮度值作为初始强度
  • 把原颜色除以亮度值得到归一化的基础色(亮度为0时直接用原颜色)
  • 滑块调整时,用基础色乘以滑块值得到新的HDR颜色

伪代码示例(以Unity为例):

// 初始化阶段:从HDR颜色获取强度
Color hdrColor = material.GetColor("_EmissionColor");
float intensity = 0.2126f * hdrColor.r + 0.7152f * hdrColor.g + 0.0722f * hdrColor.b;
// 设置滑块初始值
colorIntensitySlider.value = intensity;

// 滑块调整时更新颜色
Color baseColor = intensity > 0 ? hdrColor / intensity : hdrColor;
Color newHdrColor = baseColor * colorIntensitySlider.value;
material.SetColor("_EmissionColor", newHdrColor);

注意事项

  • 如果你用的是sRGB空间的HDR值(很少见),需要先转换为线性空间再计算亮度,否则结果会偏差
  • 部分引擎的Bloom可能有自定义阈值,你可以根据实际阈值调整强度的映射范围(比如把亮度值除以阈值,让滑块0-1对应刚好触发到强发光)

内容的提问来源于stack exchange,提问作者G-han

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 20:52:33