
Volumetric Clouds
August 2026A high-performance, real-time 3D atmospheric cloud simulation built with WebGL, Three.js, and custom GLSL raymarching shaders incorporating physical light scattering models and procedural 3D noise.

A high-performance, real-time 3D atmospheric cloud simulation built with WebGL, Three.js, and custom GLSL raymarching shaders incorporating physical light scattering models and procedural 3D noise.

This Buddhabrot WebGPU Explorer aims to be a high-performance fractal renderer built with Three.js and the Three Shading Language (TSL). Unlike traditional escape-time fractals, this application implements a probabilistic density-mapping algorithm that tracks the entire orbital trajectory of points outside the Mandelbrot set, revealing the iconic "ghost" figure hidden within the chaos. To ensure true non-determinism, the simulation is seeded with verifiable quantum randomness from the CURBy beacon, derived from Bell-certified quantum entanglement. Key technical features include WebGPU compute shaders for real-time path accumulation, 4D Juddhabrot rotation through higher-dimensional space, and a multi-spectral Nebulabrot mode that maps different iteration depths to discrete RGB channels.

This project is a technical exploration of the future of web graphics, featuring six procedural planets built using WebGPU and Three.js Shading Language (TSL). By shifting away from traditional textures, I leveraged TSL’s node-based architecture to experiment with real-time vertex displacement, custom atmospheric lighting, and complex noise functions. Each planet serves as a unique case study in high-performance shader logic, demonstrating how next-generation GPU APIs can be used to create immersive, mathematically-driven environments directly in the browser.

This is a lightweight neural network classifier built with Vite and powered by Brain.js, designed to predict whether mushrooms are edible or poisonous based on their physical characteristics. It uses the UCI Mushroom Dataset, which contains 8,000+ samples of gilled mushrooms from the Agaricus and Lepiota families, each described by 22 categorical features such as cap shape, odor, gill color, and spore print color. The project converts these categorical features into one-hot encoded input vectors suitable for training in Brain.js. A feedforward neural network is configured with a single hidden layer and trained entirely in the browser, leveraging Brain.js’s JavaScript-based GPU acceleration when available. Once trained, the model can classify new mushroom samples with reasonable accuracy and immediate feedback. Everything runs client-side with zero dependencies beyond Brain.js and Vite, making it fast, interactive, and easy to experiment with directly in the browser.

This project presents a straightforward implementation of Dijkstra's algorithm for calculating the shortest path on a mesh surface using Three.js. Leveraging Vite for rapid development, Three.js for 3D graphics, and React-Three-Fiber for seamless integration with React, it creates an interactive visualization where users can explore and understand the algorithm's functionality in real-time.

Earth Data Visualization is a proof-of-concept project developed during a hackathon. It offers a simple tool for visualizing data usage on a globe. It uses datasets with geographic coordinates, and the tool plots the data points on the Earth globe accordingly. It provides a straightforward means of exploring data geographically within a limited scope. It was created using three.js for the 3D graphics and Next.js as a framework.
This project is an experimental blend of Three.js and GLSL shaders, designed to generate dynamic particle effects upon hovering over images. It originated as a variation of @brunoimbrizi's Interactive Particles repository and is featured in his Domestika course, Creative Coding 2.0 in JS: Animation, Sound, & Color. The demo showcases a series of Buddhist mandalas, offering users the opportunity to interact with them by simply hovering over each image.

As part of the Domestica Creative Coding: Making Visuals with JavaScript course by Bruno Imbrizi, is an variation of the previous exercise done during the course to learn about typography and bitmap mapping with canvas-sketch. This one is using an image as the source of data instead of a text. There is a control panel that allows you to input text, choose the glyphs you want to map and tweak multiple parameters in order to achieve different results.

As part of the Domestica Creative Coding: Making Visuals with JavaScript course by Bruno Imbrizi, is an variation of an exercise done during the course to learn about typography and bitmap mapping with canvas-sketch. There is a control panel that allows you to input text, choose the glyphs you want to map and tweak multiple parameters in order to achieve different results.

As part of the Domestica Creative Coding: Making Visuals with JavaScript course by Bruno Imbrizi, is an variation of an exercise done during the course to learn about trigonometry, arcs and randomness with canvas-sketch. You can refresh the page to generate a random new image, or you can try the animated version as well.

As part of the Three.js Journey course by Bruno Simon I further developed an exercise done during the course, in order to improve the portal shader and make it look like there is another world behind. Everything in this experiment was modelled, coloured and textured by me. It is using baked lighting to achieve better performance. Modelling and baking were done using Blender.

As part of the Three.js Journey course by Bruno Simon, this exercise focused on creating a configurable galaxy shader with millions of particles moving at different speeds.

As part of the Three.js Journey course by Bruno Simon, this exercise focused on creating an ocean shader, on which I tried to improve slightly by adding an environment map, reflections and some refraction. Still very far away from a realistic shading but I will continue to work on this one.

As part of the Three.js Journey course by Bruno Simon, this exercise focused on creating a simple geometry instancing with matcap shading in order to create an interesting effect. Although it isn’t technically impressive, it sort of stands out visually by itself.

This happened as part of an accident while playing with shaders some years ago, trying to create a geometry displacement shader that would become transparent on hover. The result was this sort of black hole into hell, which I thought looked quite interesting.
All the experiments are interactive, you can click through to try them out.