获取WebGLDeferredRenderer与SSAO一起使用

时间:2015-03-31 04:06:40

标签: three.js

以下是比较,以表明我确实正确设置了SSAO。

带有EffectsComposer + SSAO的WebGLRenderer传递 WebGLRenderer with EffectsComposer + SSAO pass

SSGL传递的WebGLDeferredRenderer WebGLDeferredRenderer with SSAO pass

我试图将WebGLDeferredRenderer与SSAO编辑器效果混合起来,如下所示:

renderer = new THREE.WebGLDeferredRenderer({
  antialias: true,
  tonemapping: THREE.FilmicOperator,
  brightness: 2.5,
  scale: 1.0,
  width: renderWidth,
  height: renderHeight
});

var depthShader = THREE.ShaderLib[ "depthRGBA" ];
var depthUniforms = THREE.UniformsUtils.clone( depthShader.uniforms );

depthMaterial = new THREE.ShaderMaterial( { fragmentShader: depthShader.fragmentShader, vertexShader: depthShader.vertexShader, uniforms: depthUniforms } );
depthMaterial.blending = THREE.NoBlending;

composer = new THREE.EffectComposer( renderer );
composer.setSize( window.innerWidth, window.innerHeight );

depthTarget = new THREE.WebGLRenderTarget( window.innerWidth, window.innerHeight, {
  minFilter: THREE.NearestFilter,
  magFilter: THREE.NearestFilter,
  format: THREE.RGBAFormat,
  antialias: true
});

var ssao = new THREE.ShaderPass( THREE.SSAOShader );
ssao.uniforms[ 'tDepth' ].value = depthTarget;
ssao.uniforms[ 'size' ].value.set( window.innerWidth, window.innerHeight );
ssao.uniforms[ 'cameraNear' ].value = camera.near;
ssao.uniforms[ 'cameraFar' ].value = camera.far * 0.8;
ssao.uniforms[ 'aoClamp' ].value = 0.3;
ssao.uniforms[ 'lumInfluence' ].value = 0.1;

renderer.addEffect( ssao );

scene.overrideMaterial = depthMaterial;
renderer.render( scene, camera, depthTarget );
scene.overrideMaterial = null;

renderer.render( scene, camera );

结果是......好吧......没什么。

我做错了什么?我如何在延迟渲染器中启用SSAO?

1 个答案:

答案 0 :(得分:3)

不确定为什么会这样,但请尝试更换:

renderer.render( scene, camera, depthTarget );

使用:

renderer.renderer.render( scene, camera, depthTarget );