Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SSAO[Three.js]渲染多个场景,其中只有一个场景_Three.js_Ssao - Fatal编程技术网

使用SSAO[Three.js]渲染多个场景,其中只有一个场景

使用SSAO[Three.js]渲染多个场景,其中只有一个场景,three.js,ssao,Three.js,Ssao,在我对Three.js的持续实验中,我碰到了另一堵我似乎无法逾越的墙 我尝试在前景场景下渲染一个背景场景(其中有一个地板),前景场景具有SSAO后期处理效果。背景场景不应应用任何后处理 我尝试了多种方法(使用面具等),但我似乎无法解决这个问题。我看到的主要问题是SSAO场景的背景是不透明的,因此背景场景不显示。我仍然不相信,即使透明度问题得到解决,事情也会像预期的那样进行 这就是没有SSAO后处理时的情况: 这就是启用SSAO后处理后当前的情况: 知道我做错了什么吗?我做的事情非常相似。在SSA

在我对Three.js的持续实验中,我碰到了另一堵我似乎无法逾越的墙

我尝试在前景场景下渲染一个背景场景(其中有一个地板),前景场景具有SSAO后期处理效果。背景场景不应应用任何后处理

我尝试了多种方法(使用面具等),但我似乎无法解决这个问题。我看到的主要问题是SSAO场景的背景是不透明的,因此背景场景不显示。我仍然不相信,即使透明度问题得到解决,事情也会像预期的那样进行

这就是没有
SSAO
后处理时的情况:

这就是启用SSAO后处理后当前的情况:


知道我做错了什么吗?

我做的事情非常相似。在SSAO中,您是否尝试过“ssaoPass.material.transparent=true;”。似乎如果您使用前景RGBA而不是默认RGB,它可以解决您的问题。

您可以使用掩蔽过程来实现这一点。我相信这是解决问题的正确方法。您的原始代码需要添加一些内容才能实现这一点

首先,您需要创建一个渲染目标,该目标启用了一个模具缓冲区,以便传入到要使用的效果生成器。模具缓冲区中的信息允许进行掩蔽

renderTargetParameters = { minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat, stencilBuffer: true };
renderTarget = new THREE.WebGLRenderTarget( window.innerWidth, window.innerHeight, renderTargetParameters );
composer = new THREE.EffectComposer( renderer, renderTarget );
接下来,我建议将背景和前景过程都放在composer中。它使渲染堆栈更干净。渲染前景场景时,请确保其“清除”属性设置为false,以便为遮罩过程保留模具缓冲区数据

然后是一个遮罩过程、ssao过程、一个清晰的遮罩路径和一个最终的着色器过程,以将其全部渲染到屏幕上。您可以在此处使用简单的直通着色器或fxaa。可能还有另一种渲染到屏幕的方法,我不知道,但您不能将ssao过程指定为渲染到屏幕,并在清除遮罩过程之后使其工作


这里有一个链接,链接到一个对这种方法的修改,谢谢你的建议,尽管它没有改变任何东西,至少没有明显改变。我能看到你的工作实例吗?或者您在上面的问题中将您所做的添加到我的JSFIDLE中?我真的很感激。谢谢安德鲁!我从来没有完全了解过面具,所以您的JSFIDLE示例真的很有帮助。