2013-03-11 127 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。有人能給我一個建議接下來要做什麼?

回答