Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Post-Process example #5648

Open
wants to merge 37 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 34 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
9094de9
Create base html file for post-processing bloom example
enzofrancescaHM Jan 30, 2025
19f78b4
Create bloom.js for post-process bloom example
enzofrancescaHM Jan 30, 2025
868863a
Update index.html changing path
enzofrancescaHM Jan 30, 2025
22ad7d0
Update index.html to use importmap
enzofrancescaHM Jan 30, 2025
fbd5cef
Update bloom.js to use importmap
enzofrancescaHM Jan 30, 2025
d6b9d96
Update examples/post-process/index.html
enzofrancescaHM Jan 30, 2025
d86dd9f
Update examples/post-process/bloom.js
enzofrancescaHM Jan 30, 2025
2b409aa
Update bloom.js to discard useless wait
enzofrancescaHM Jan 30, 2025
5617d2f
Update index.html to set bloom directly on a-scene tag
enzofrancescaHM Jan 30, 2025
485fe53
Update index.html to fix typo and fix importmap paths
enzofrancescaHM Jan 31, 2025
f12edb5
Update bloom.js to fix various issues and to optimize code
enzofrancescaHM Jan 31, 2025
b8fc265
Rename examples/post-process/bloom.js to examples/showcase/post-proce…
enzofrancescaHM Jan 31, 2025
2c30d30
Rename examples/post-process/index.html to examples/showcase/post-pro…
enzofrancescaHM Jan 31, 2025
d1f9285
Update index.html to get rid of useless tags
enzofrancescaHM Jan 31, 2025
003bb43
Update bloom.js to use right value of delta
enzofrancescaHM Jan 31, 2025
c72fb8c
Update bloom.js to reflect better formatting of schema
enzofrancescaHM Jan 31, 2025
97c97f7
Update index.html to get rid of semicolon and trailing comma
enzofrancescaHM Jan 31, 2025
fbf8c44
Update bloom.js to implement multisampling
enzofrancescaHM Jan 31, 2025
53afd13
Update bloom.js to resize EffectComposer
enzofrancescaHM Jan 31, 2025
97d4fed
Update bloom.js with correct parameter in setSize
enzofrancescaHM Feb 1, 2025
3ecf142
Update index.html to get right position and raise red cube emissive
enzofrancescaHM Feb 1, 2025
b08a29d
Update bloom.js to fix distorsions in VR Mode
enzofrancescaHM Feb 1, 2025
cdc609c
Update bloom.js to add OutputPass, improving quality
enzofrancescaHM Feb 1, 2025
70ca6bd
Update bloom.js, removed useless parameter in OutputPass
enzofrancescaHM Feb 1, 2025
3c422ac
Update index.html, added toneMapping tag
enzofrancescaHM Feb 1, 2025
3276558
Update bloom.js, FullScreenQuad global patch
enzofrancescaHM Feb 1, 2025
4c2cb7c
Update index.html to list post-processing example
enzofrancescaHM Feb 1, 2025
0a342d0
Update bloom.js to get rid of reduntant parts already implemented in …
enzofrancescaHM Feb 1, 2025
eae775a
Update examples/showcase/post-processing/bloom.js
enzofrancescaHM Feb 2, 2025
379acfe
Update examples/showcase/post-processing/bloom.js
enzofrancescaHM Feb 2, 2025
4e4041f
Update examples/showcase/post-processing/bloom.js
enzofrancescaHM Feb 3, 2025
b954921
Updated bloom.js after lint:fix passed
Feb 3, 2025
ec757df
Final demo scene with toon car
Feb 5, 2025
3c73498
Refactor names
Feb 5, 2025
448ea27
Update index.html
enzofrancescaHM Feb 5, 2025
cce2821
change description
Feb 5, 2025
4570f97
Merge branch 'master' of https://github.com/enzofrancescaHM/aframe_po…
Feb 5, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added examples/assets/models/fancy-car.glb
Binary file not shown.
1 change: 1 addition & 0 deletions examples/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,7 @@ <h2>Examples</h2>
<li><a href="mixed-reality/anchor/">Anchor (Mixed Reality)</a></li>
<li><a href="mixed-reality/real-world-meshing/">Real World Meshing (Mixed Reality)</a></li>
<li><a href="boilerplate/importmap/">Importmap (import teapot geometry from three/addons)</a></li>
<li><a href="showcase/post-processing/">Post-Processing (bloom effect)</a></li>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No need to add (bloom effect) for simplicity

</ul>

<h2>Examples from Documentation</h2>
Expand Down
97 changes: 97 additions & 0 deletions examples/showcase/post-processing/bloom.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
/* global THREE */
/**
* Unreal Bloom Effect
* Implementation for A-Frame
* Code modified from Akbartus's post-processing A-Frame integration
* https://github.com/akbartus/A-Frame-Component-Postprocessing
*/

import AFRAME from 'aframe';
import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js';
import { RenderPass } from 'three/addons/postprocessing/RenderPass.js';
import { UnrealBloomPass } from 'three/addons/postprocessing/UnrealBloomPass.js';
import { OutputPass } from 'three/addons/postprocessing/OutputPass.js';

AFRAME.registerComponent('bloom', {
schema: {
threshold: { type: 'number', default: 1 },
strength: { type: 'number', default: 0.5 },
radius: { type: 'number', default: 1 }
},
events: {
rendererresize: function () {
this.renderer.getSize(this.size);
this.composer.setSize(this.size.width, this.size.height);
}
},
init: function () {
this.size = new THREE.Vector2();
this.scene = this.el.object3D;
this.renderer = this.el.renderer;
this.camera = this.el.camera;
this.bind();
},
update: function () {
if (this.composer) {
this.composer.dispose();
}
// create composer with multisampling to avoid aliasing
const resolution = this.renderer.getDrawingBufferSize(new THREE.Vector2());
const renderTarget = new THREE.WebGLRenderTarget(
resolution.width,
resolution.height,
{ type: THREE.HalfFloatType, samples: 8 }
);

this.composer = new EffectComposer(this.renderer, renderTarget);

// create render pass
const renderScene = new RenderPass(this.scene, this.camera);
this.composer.addPass(renderScene);

// create bloom pass
const strength = this.data.strength;
const radius = this.data.radius;
const threshold = this.data.threshold;
if (this.bloomPass) {
this.bloomPass.dispose();
}
this.bloomPass = new UnrealBloomPass(
resolution,
strength,
radius,
threshold
);
this.composer.addPass(this.bloomPass);

// create output pass
if (this.outputPass) {
this.outputPass.dispose();
}
this.outputPass = new OutputPass();
this.composer.addPass(this.outputPass);
},

bind: function () {
this.originalRender = this.el.renderer.render;
const self = this;
let isInsideComposerRender = false;

this.el.renderer.render = function () {
if (isInsideComposerRender) {
self.originalRender.apply(this, arguments);
} else {
isInsideComposerRender = true;
self.composer.render(self.el.sceneEl.delta / 1000);
isInsideComposerRender = false;
}
};
},

remove: function () {
this.el.renderer.render = this.originalRender;
this.bloomPass.dispose();
this.outputPass.dispose();
this.composer.dispose();
}
});
69 changes: 69 additions & 0 deletions examples/showcase/post-processing/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<!DOCTYPE html>
<html>
enzofrancescaHM marked this conversation as resolved.
Show resolved Hide resolved

<head>

<meta charset="utf-8" />
<title>Post Processing Bloom Effect</title>
<meta name="description" content="Post Processing Bloom Effect • A-Frame" />

<style src="./style.css"></style>

<script type="importmap">
{
"imports": {
"aframe": "../../dist/aframe-master.module.min.js",
"three": "../../../super-three-package/build/three.module.js",
"three/addons/": "../../../super-three-package/examples/jsm/"
}
}
</script>
<script type="module" src="./bloom.js"></script>

</head>

<body>

<div id="infopanel">
<a href="https://aframe.io/" target="_blank" rel="noopener" style="color:#00ceff;pointer-events: auto;">A-Frame</a>
PostProcessing - Bloom<br />
Model: <a href="https://skfb.ly/owUr9" target="_blank" rel="noopener">Low-poly cartoon style car 03</a> by
<a href="https://sketchfab.com/arturs.vitas" target="_blank" rel="noopener">artus.vitas</a>, CC Attribution.
</div>

<a-scene bloom="threshold: 1.0; strength: 0.3; radius: 1;" background="color: #000000"
renderer="toneMapping: ACESFilmic;">

<a-assets>
<!-- model by arturs.vitas https://skfb.ly/owUr9 -->
<a-asset-item id="testbed" src="../../assets/models/fancy-car.glb"></a-asset-item>
</a-assets>

<a-entity id="rig" position="0 0 2">
<a-entity id="camera" position="0 1.6 0" camera look-controls wasd-controls></a-entity>
</a-entity>

<a-entity id="base" geometry="primitive: cylinder; height: 0.1; radius: 1.93" position="0 0 -2"
material="color: #201d1d" shadow
animation="property: rotation; to: 0 360 0 ; loop: true; dur: 15000; easing: linear;">

<a-entity id="tooncar" gltf-model="#testbed" position="0 0.050 0" scale="2 2 2" shadow>
</a-entity>

<a-entity id="neon01"
geometry="primitive: torus; radius: 1.92; radiusTubular: 0.02; segmentsRadial: 50; segmentsTubular: 40"
material="color: #d100e0; emissive: #b300a4; emissiveIntensity: 9.34" rotation="90 0 0">
</a-entity>

</a-entity>

<a-entity id="ambient" light="type: ambient; intensity: 0.48; color: #ffffff">
</a-entity>

<a-entity id="point01" light="color: #7cd2fe; intensity: 5; type: point;" position="0 3.51 -1">
</a-entity>

</a-scene>
</body>

</html>
23 changes: 23 additions & 0 deletions examples/showcase/post-processing/style.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#infopanel {
font-family: Monospace;
font-size: 13px;
line-height: 24px;
color:#ffffff;
position: absolute;
top: 0px;
width: 100%;
padding: 10px;
box-sizing: border-box;
text-align: center;
pointer-events: none;
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
z-index: 1;
}

#infopanel a {
color:#00ceff;
pointer-events: auto;
}
Loading