JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://cdn.jsdelivr.net/npm/[email protected]/build/three.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/examples/js/shaders/HorizontalBlurShader.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/examples/js/shaders/VerticalBlurShader.js"></script>
JavaScript
let camera, scene, renderer;
init().then( render );
async function init() {
camera = new THREE.PerspectiveCamera(70, window.innerWidth / window.innerHeight, 0.01, 10);
camera.position.z = 3;
scene = new THREE.Scene();
renderer = new THREE.WebGLRenderer({
antialias: true
});
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
const loader = new THREE.TextureLoader();
const texture = await loader.loadAsync('https://threejs.org/examples/textures/uv_grid_opengl.jpg');
//scene.background = texture;
scene.background = blurTexture( texture );
}
function blurTexture(texture) {
const width = texture.image.width;
const height = texture.image.height;
const cameraRTT = new THREE.OrthographicCamera(-1, 1, 1, -1, 0, 1);
const sceneRTT = new THREE.Scene();
// render targets
const renderTargetTemp = new THREE.WebGLRenderTarget(width, height);
const renderTargetFinal = new THREE.WebGLRenderTarget(width, height);
// shader materials
const hBlurMaterial = new THREE.ShaderMaterial({
vertexShader: THREE.HorizontalBlurShader.vertexShader,
fragmentShader: THREE.HorizontalBlurShader.fragmentShader,
uniforms: THREE.UniformsUtils.clone(THREE.HorizontalBlurShader.uniforms)
});
hBlurMaterial.uniforms.tDiffuse.value = texture;
hBlurMaterial.uniforms.h.value = 1 / width;
const vBlurMaterial = new THREE.ShaderMaterial({
vertexShader: THREE.VerticalBlurShader.vertexShader,
fragmentShader: THREE.VerticalBlurShader.fragmentShader,
uniforms: THREE.UniformsUtils.clone(THREE.VerticalBlurShader.uniforms)
});
vBlurMaterial.uniforms.tDiffuse.value = renderTargetTemp.texture;
vBlurMaterial.uniforms.v.value = 1 / height;
// fullscreen quad
const planeGeometry = new THREE.PlaneGeometry(2, 2);
const fullScreenQuad = new THREE.Mesh(planeGeometry, hBlurMaterial);
sceneRTT.add(fullScreenQuad);
...