前言
最近想要制作动态模糊的效果,又想起之前研究过的postprocesisng来制作模糊,网上搜索了一下如何通过Three.js制作动态模糊,没想到居然是这个案例里面有动态模糊。
postprocessing难学的地方在于没有官方文档的说明,连引用的脚本也没有使用说明,所以只能先从简单的入手,慢慢去看懂postprocessing的运行原理。
postprocesing的作用
正如名字所说的,这个是后期处理,可以给画面添加后期合成软件的滤镜效果。
当然上面的说法易于理解但也不完全准确,three.js的后期处理更多的是计算机图形学意义上的后期处理,因此辉光、AO生成都属于这里范畴,不只是单纯的滤镜。
如此说来,postprocessing应该有很多的效果,官方确实给了不少效果,而且有些使用了postprocessing的效果还不在postprocessing的分类当中。
找出他们去学习就得费不少的周折。
postprocessing的运用
先从最简单的postprocessing效果入手,去理解它是怎么运作的。
官方案例
前面的流程就是Three.js的三件套,生成物体等等的,我就不加赘述了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
composer = new THREE.EffectComposer( renderer );
composer.addPass( new THREE.RenderPass( scene, camera ) );
var effect = new THREE.ShaderPass( THREE.DotScreenShader ); effect.uniforms[ 'scale' ].value = 4; composer.addPass( effect );
var effect = new THREE.ShaderPass( THREE.RGBShiftShader ); effect.uniforms[ 'amount' ].value = 0.0015; effect.renderToScreen = true; composer.addPass( effect );
window.addEventListener( 'resize', onWindowResize, false );
function onWindowResize() { camera.aspect = window.innerWidth / window.innerHeight; camera.updateProjectionMatrix(); renderer.setSize( window.innerWidth, window.innerHeight );
composer.setSize( window.innerWidth, window.innerHeight ); }
function animate() {
requestAnimationFrame( animate );
object.rotation.x += 0.005; object.rotation.y += 0.01;
composer.render();
}
|