2013-03-11 115 views
2

我正在尝试渲染带有SSAO后期处理着色器的场景。没有任何错误,但我看不到SSAO通过渲染的场景之间的任何差异。我初始化这样渲染:如何使用three.js SSAO着色器?

// Create WebGL Renderer 
var renderParameters = { antialias: false, alpha: false, clearColor: 0xFFFFFF }; 
renderer = new THREE.WebGLRenderer(renderParameters); 
renderer.autoClear = false; 
renderer.setSize(viewportWidth, viewportHeight); 

// Create render targets 
renderTargetParametersRGB = { minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBFormat }; 
renderTargetParametersRGBA = { minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBAFormat }; 
depthTarget = new THREE.WebGLRenderTarget(width, height, renderTargetParametersRGBA); 
colorTarget = new THREE.WebGLRenderTarget(width, height, renderTargetParametersRGB); 

// The shader pass to draw the scene 
var renderScenePass = new THREE.RenderPass(scene, camera); 

// Copy to screen render pass 
var copyToScreenPass = new THREE.ShaderPass(THREE.CopyShader); 
copyToScreenPass.renderToScreen = true; 

// SSAO render pass 
effectSSAO = new THREE.ShaderPass(THREE.SSAOShader); 
effectSSAO.uniforms['tDepth'].texture = depthTarget; 
effectSSAO.uniforms['size'].value.set(width, height); 
effectSSAO.uniforms['cameraNear'].value = camera.near; // 1 
effectSSAO.uniforms['cameraFar'].value = camera.far; // 1000 
//effectSSAO.uniforms.onlyAO.value = 1; 

// Setup post processing chain 
composer = new THREE.EffectComposer(renderer, colorTarget); 
composer.addPass(effectSSAO); 
composer.addPass(copyToScreenPass); 

// Depth pass 
depthPassPlugin = new THREE.DepthPassPlugin(); 
depthPassPlugin.renderTarget = depthTarget; 
renderer.addPrePlugin(depthPassPlugin); 

在渲染功能,我呈现这样的景象:

requestAnimationFrame(render); 
depthPassPlugin.enabled = true; 
renderer.render(scene, camera, composer.renderTarget2, true); 
depthPassPlugin.enabled = false; 
composer.render(0.1); 

正如我之前所说的,一切似乎都做工精细,但没有AO效果在屏幕上可见。也许我只是使用了错误的参数值?我已经确定深度传球是通过将depthTarget渲染到场景来更新的。如果我将效果SSAO.uniforms.onlyAO.value打开,我会对实际场景(包括纹理)进行非常“平坦”的褐色渲染,但仍然没有AO。有人能给我一个建议接下来要做什么?

回答