• In which direction? In the direction of the deer.

    What are we hunting? Deer.

  • Revo Realms

    Three.jsTypeScriptWebGPU< 20 draw calls< 8.5ms per frame> 250k foliage instances

    Born as a 3D open-world portfolio, it grew into a sandbox for experimenting with TSL (Three.js Shading Language), physics and advanced graphics programming and optimization techniques. Built with Three.js, WebGPU and TypeScript, it combines interactive terrain, procedural vegetation, water, fire, and spatial audio, with subtle references to the worlds and stories I love.

    • Built a compute-driven foliage pipeline: per-instance soft culling, animation, interaction, and dynamic effects, no CPU round trips, entirely on the GPU.
    • Optimized third-party models in Blender via polycount reduction, hidden-geometry removal, and custom texture atlases.
    • Created a fire system using a similar compute pipeline to foliage, handling transforms and lifetime fully in a GPU compute shader with pooled particles and custom color blending to convey both heat and depth.
    Revo Realms - Lake
    Revo Realms - Leviathan Axe and Fire
    Revo Realms - Vegetation and Dragon Ball
    Revo Realms - JoJo and One Piece
  • Zanka no Tachi

    Three.jsR3FBlenderWebGL50k particles< 3.5ms per frame

    A real-time tribute to Yamamoto Genryūsai's Bankai from Bleach. Built with Three.js (via R3F) and GLSL to convey its heat, motion, and intensity. Featuring a stylized, dynamic fire effect and a simple low-poly environment, powered by GPGPU particle systems, custom shaders, and Blender assets, aiming to capture the raw power of that iconic moment.

    • Developed a useGPGpu hook to declaratively manage GPU-based computation in WebGL, via fragment shaders, buffers, and ping-pong rendering.
    • Implemented a post-processing shader to convey the heat haze generated by Yamamoto's Bankai.
    • Modeled Yamamoto and his sword in Blender with stylized cloth and footwear, and built a minimal low-poly environment to frame the effect.
    • Shaped each particle procedurally in GLSL (circular → hexagonal) using masks, avoiding alpha textures entirely.
    Zanka no Tachi - Shikai
    Zanka no Tachi - Bankai
  • Unshaken

    Three.jsR3FDreiBlender

    A low-poly homage to one of the most unforgettable video game experiences ever made: Red Dead Redemption II. Modeled and baked in Blender, brought to life with Three.js (via R3F), it depicts Arthur Morgan riding his horse down a hill beneath the warm colors of dawn.

    • Modeled an entire stylized low-poly scene in Blender: from terrain, vegetation, and rocks to characters (Arthur and horse), with manual UV unwrapping and baking everything in a single 4K texture atlas.
    • Lit the scene with the Drei's <Sky /> component, matching Blender's Nishita Sky dawn lighting.
    • Added an RDR2-inspired cinematic mode: disabling orbit controls, animating letterbox bars, and rotating the scene set to western ambient music for a cutscene-like experience.
    Unshaken - Front view
    Unshaken - Side view
    Unshaken - Arthur Morgan
    Unshaken - Arthur Morgan
    Unshaken - Arthur Morgan
  • Cosmic Canvas

    Three.jsR3FDreiWebGL< 3ms per frame

    My first solo Three.js piece (via R3F): a shader-driven study of Jupiter. One compact GLSL material recreates the swirling bands—no textures, just procedural noise, flow, and custom lighting tuned to remain smooth on low-end devices.

    • Implemented a compact GLSL material that layers animated noise to drive Jupiter's banding and storm motion.
    • Added rim (Fresnel) and specular highlights, with a softened day-night terminator to sell curvature and depth.
    • Reused early iterations of the planet shader for four of Jupiter's largest moons, adapting them for surface detail, and framed the scene with Drei's <Stars /> and <Trail /> components to make the satellites stand out.
    Cosmic Canvas - Jupiter and Io
    Cosmic Canvas - Half shade view
    Cosmic Canvas - Front view