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

路径追踪器环境贴图采样萤火虫问题:如何保留阴影并消除噪点

解决路径追踪中环境贴图采样的萤火虫噪点问题

1. 针对环境贴图的重要性采样(核心方案)

萤火虫的根源是低概率采样到高亮度小区域,单次采样的贡献被放大导致噪点。重要性采样能让射线更倾向于命中环境贴图中亮的区域,减少极端值的出现:

  • 先对环境贴图做预处理,生成累积亮度分布纹理(比如2D的CDF纹理),采样时根据这个分布生成采样方向,让亮区被采样的概率和其亮度成正比。
  • 这样既不会错过太阳这类高亮度区域(保证阴影细节),又能避免单次采样偶然命中亮区产生的极端值,因为采样次数会更均匀地分配到亮区,平均后的结果更稳定。

2. 自适应采样 + 局部降噪

  • 对画面中亮度波动大的区域(比如萤火虫容易出现的区域)增加采样次数,对平滑区域减少采样,平衡效率和质量。
  • 采样后用双边滤波或非局部均值滤波做局部降噪:这类滤波能保留边缘(比如太阳阴影的边界),同时消除孤立的亮噪点。注意要在线性色彩空间中处理,避免色彩偏差。

3. 替代硬钳制的概率性亮度截断

硬钳制会直接压低所有高亮度值,导致画面暗淡。换成概率性处理:

const float maxLuminance = 10.0f;
float lum = dot(hitValue, vec3(0.212671f, 0.715160f, 0.072169f));
if(lum > maxLuminance) {
    // 按比例降低采样贡献的权重,而非直接缩放颜色
    float weight = maxLuminance / lum;
    hitValue *= weight;
    // 同时记录这个采样的权重,在最终累加时用加权平均代替简单平均
    // (需在路径追踪的采样循环中维护权重累加变量)
}

这种方式不会一刀切压低所有高亮度,而是让极端采样的贡献被合理降低,同时保留正常高亮度区域的细节。

4. 结合色调映射的后期处理

把去噪和色调映射结合起来:

  • 先完成路径追踪的线性空间渲染,保留所有高动态范围信息(包括太阳的亮度)。
  • 用Reinhard色调映射或ACES色调映射压缩动态范围,这类映射会对高亮度区域做非线性压缩,既保留暗部和阴影细节,又不会让亮区溢出产生萤火虫。
  • 色调映射后再做一次轻微的去噪处理,消除剩余的小噪点。

5. 预处理环境贴图

如果环境贴图的太阳区域是硬边缘的高亮块,可以先对环境贴图做轻微的高斯模糊,但只模糊高亮区域(用蒙版控制):

  • 这样能降低高亮区域的峰值亮度,同时不影响阴影的清晰度——因为阴影是由太阳的方向决定的,轻微模糊不会改变光照方向。

内容的提问来源于stack exchange,提问作者Zydak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 12:46:18