【问题标题】:How to apply 2-pass postprocessing without using EffectComposer?如何在不使用 EffectComposer 的情况下应用 2-pass 后处理?
【发布时间】:2018-04-11 11:46:34
【问题描述】:

我需要使用我的自定义着色器对之前在纹理 A(作为渲染目标)上渲染的场景进行后处理,并将结果保存到纹理 B(输入:纹理 A,输出:纹理 B)。因此,我不需要场景和相机。我觉得这太简单了,连三个.js 的类都懒得管了,比如 EffectComposer、Shaderpass、CopyShader、TexturePass 等等。

那么,如何以简单的方式设置这种类似计算的后处理?

【问题讨论】:

    标签: three.js post-processing


    【解决方案1】:

    我为您创建了一个小提琴,它显示了没有EffectComposer 的基本后处理效果。这段代码背后的想法是使用WebGLRenderTarget 的实例。

    首先,将场景绘制到此渲染目标中。在下一步中,您将此渲染目标用作使用正交相机渲染的平面的纹理。渲染循环中的代码如下所示:

    renderer.clear();
    
    renderer.render( scene, camera, renderTarget );
    
    renderer.render( sceneFX, cameraFX );
    

    这个平面对应的材质就是你自定义的shader。我使用了官方 repo 中的亮度着色器。

    因此,我不需要场景和相机。

    请按照示例中的方式进行操作。这就是图书馆的预期方式。

    演示https://jsfiddle.net/f2Lommf5/5149/

    three.js R91

    【讨论】:

    • 谢谢,但这不是我问的。就像我在上面写的那样,我已经将一个场景渲染到了 textureA,我想通过将其渲染到 textureB(没有 EffectComposer)而不是屏幕上来对它进行后期处理。每个示例都显示了您在上面显示的内容。我已经实现了屏幕的最后一步,但我需要一个 intermediate 步骤,其中 textureA 输入到后处理着色器,textureB 输出(因为我需要两次后处理)。这就是为什么我说我不需要场景和相机。
    • 我编辑了标题和文字以使其更清晰。
    猜你喜欢
    • 2019-09-06
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多