WebGL
• Graphics API for Web (= OpenGL for Web)
• Web site, Game, Generative Art, Demoscenes….
• GPGPU (AI / ML, Physics simulation, etc)
Slide 12
Slide 12 text
WebGL is powerful, but…
• WebGL API is too low-level
• Three.js solves many problems, but..
• Still have to set up Camera, Renderer, Scene, Texture….
• Loading / Unloading resources are HARD!!
Slide 13
Slide 13 text
No content
Slide 14
Slide 14 text
No content
Slide 15
Slide 15 text
No content
Slide 16
Slide 16 text
https://amagi.dev/vfx-js/
Slide 17
Slide 17 text
Shader?
Slide 18
Slide 18 text
Shader is for shading
Slide 19
Slide 19 text
Fragment Shader
• Special program that runs on GPU
• Fragment shader determines pixel colors
•It runs for every pixel, every frame!!!
• FullHD 60Hz -> 124,416,000 times / sec
Shaders can be used for image effects
Input image Output image
Slide 23
Slide 23 text
GLSL - OpenGL Shading Language
Slide 24
Slide 24 text
Sinewave effect
Slide 25
Slide 25 text
How VFX-JS works
Slide 26
Slide 26 text
What VFX-JS does under the hood…
• Load / as a WebGL texture
• Add 3D planes to the element positions
• Sync with the original /
• Apply shader effects
Slide 27
Slide 27 text
Syncing 3D planes to HTML elements
• Cover entire window with a
WebGL canvas
Slide 28
Slide 28 text
Syncing 3D planes to HTML elements
• Cover entire window with a
WebGL canvas
• Sync element position / size
to 3D planes
Slide 29
Slide 29 text
Syncing 3D planes to HTML elements
• Cover entire window with a
WebGL canvas
• Sync element position / size
to 3D planes
• Hide the original HTML
elements
Slide 30
Slide 30 text
Syncing 3D planes to HTML elements
• Cover entire window with a
WebGL canvas
• Sync element position / size
to 3D planes
• Hide the original HTML
elements
Slide 31
Slide 31 text
No content
Slide 32
Slide 32 text
Text effects…?
• Text can’t be loaded as a texture in WebGL
• VFX-JS converts DOM elements to SVG image
• SVG’s
Slide 33
Slide 33 text
No content
Slide 34
Slide 34 text
No content
Slide 35
Slide 35 text
No content
Slide 36
Slide 36 text
Limitations
• Deeply nested DOM tree
• Can’t use Web fonts…!!