Three.js 将 StereoEffect 与 FXAA ShaderPass 相结合

zoo*_*oom 2 javascript webgl three.js

我使用 Three.js StereoEffect 创建了一个 Google Cardboard 场景

effect = new THREE.StereoEffect(renderer);
effect.render(scene, camera);
Run Code Online (Sandbox Code Playgroud)

现在我想通过 FXAA Shader 运行它以平滑输出。我知道我可以使用 EffectComposer 来做到这一点:

renderScene = new THREE.RenderPass(scene, camera);
effectFXAA = new THREE.ShaderPass(THREE.FXAAShader);
effectFXAA.uniforms['resolution'].value.set(1 / (window.innerWidth * dpr), 1 / (window.innerHeight * dpr));
effectFXAA.renderToScreen = true;

composer = new THREE.EffectComposer(renderer);
composer.setSize(window.innerWidth * dpr, window.innerHeight * dpr);
composer.addPass(renderScene);
composer.addPass(effectFXAA);
composer.render();
Run Code Online (Sandbox Code Playgroud)

这使图像变得平滑,但是我不知道如何将其与立体效果视图结合起来。

Chr*_*ens 7

示例渲染:带有 EffectComposer 的 StereoCamera

在我自己的项目上对同样的问题进行研究和试验后,我发现 EffectComposer 和 StereoEffect 不能很好地混合。它们都尝试在管道的同一级别渲染场景。一个不会流过另一个。

我的解决方案是创建一个新类 StereoCamera,它是从 StereoEffect 更改而来的。没有效果时几乎是一样的,而是返回由 EffectComposer(或其他效果)渲染的摄像机。

您可以在此处找到StereoCamera 类,并在此处找到完整的工作示例

由于这帮助我前进(如果这个问题不太旧,也许你也可以),我提交了一个拉取请求,将类和示例与其他 Three.js 示例一起添加,希望对其他人有所帮助。

===

更新:事实 证明,其他一些人最近也首先解决了这个问题。请参阅此拉取请求和不同的、更优化的StereoCamera 类