【问题标题】:Bloom and Antialiasing causing banding in Three.js renderBloom 和 Antialiasing 导致 Three.js 渲染中的条带
【发布时间】:2021-04-18 19:40:25
【问题描述】:

我正在尝试为我的场景添加发光效果。据我所知,最好的方法是使用 EffectComposer 使用布隆过滤器。不幸的是,使用 EffectComposer 否定了渲染器附带的漂亮的抗锯齿。我添加了一个 SSAARenderPass,但即使将 unbiased 设置为 true,并且将 sampleLevel 设置为 32,它也会导致条带化。请参见下面的附图。

我遇到了处理类似问题的讨论:https://discourse.threejs.org/t/effect-composer-gamma-output-difference/12039/23,我相信我通过为类型设置为 THREE.FloatType 的 EffectComposer 显式创建 RenderTarget 集成了讨论的解决方案。这肯定有帮助,但我仍然有一些非常明显的条带。

如何获得发光效果并保持干净的渲染而不会出现锯齿或条纹?

const pixelRatio = renderer.getPixelRatio();
const renderScene = new RenderPass( scene, camera );
const bloomPass = new UnrealBloomPass(new THREE.Vector2(window.innerWidth, window.innerHeight), 1.5, 0.4, 0.85);
bloomPass.threshold = 0.9;
bloomPass.strength = 1.5;
bloomPass.radius = 0.15;

var ssaaRenderPass = new SSAARenderPass( scene, camera );
ssaaRenderPass.sampleLevel = 32;
ssaaRenderPass.unbiased = true;

var adaptToneMappingPass = new AdaptiveToneMappingPass(true, 256);
var gammaCorrectionPass = new ShaderPass( GammaCorrectionShader );

var renderTarget = new THREE.WebGLRenderTarget( window.innerWidth * pixelRatio, window.innerHeight * pixelRatio, 
{
    minFilter: THREE.LinearFilter,
    magFilter: THREE.LinearFilter,
    format: THREE.RGBAFormat,
    stencilBuffer: false,
    type: THREE.FloatType
});
renderTarget.texture.name = 'EffectComposer.rt1';

composer = new EffectComposer(renderer, renderTarget);
composer.addPass(renderScene);
composer.addPass(ssaaRenderPass); //Seems to be better than fxaa but has terrible banding
composer.addPass(adaptToneMappingPass);
composer.addPass(bloomPass);
composer.addPass(gammaCorrectionPass);

这没有 SSAA 或 Bloom。没有条带但可怕的混叠

这是 Bloom 但没有 SSAA。尽管有绽放效果,但背景中没有条纹

这适用于 Bloom 和 SSAA。混叠更好,但背景中的条带和绽放很糟糕

【问题讨论】:

    标签: javascript three.js


    【解决方案1】:

    我相信您遇到了 this demo solves 的确切问题。当unbiased = false 看到色带时:

    但是当unbiased = true时,条带是固定的:

    设置ssaaRenderPass.unbiased = true;应该是一个简单的修复

    【讨论】:

    • 感谢马奎佐的建议。不幸的是,我已经将 unbiased 设置为 true(参见上面的代码),虽然与关闭它相比它确实减少了条带,但它仍然是一个问题
    • 哦,我的错。我应该更彻底地阅读您的代码! :)
    猜你喜欢
    • 2016-12-10
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    相关资源
    最近更新 更多