<STRAY

/>

WEBGL

DEVELOPING A SERIES OF MINI-PROJECTS TO EXPLORE THE POSSIBILITIES OF SHADER CODING.

TIMELINE

SPRING 2024

MEMBERS

JEREMY CHANG

TECHNOLOGIES

THREE.JS

GLSL (WEBGL)

THREATER.JS

BLENDER

SKILLS

DIGITAL DESIGN

3D DESIGN

EXPERIENCE DESIGN

WEB DEVELOPMENT

<

DIVING INTO THE REALM OF CUSTOME SHADERS FOR A ELEVATED WEB EXPERIENCE.

/>

AS I SLOWLY BECOME LITERATE IN THREE.JS, I AM DETERMINED TO DIVE DEEPER INTO THE WORLD OF WEBGL AND CUSTOM SHADERS. WHILE THREE.JS IS POWERFUL, WE CAN LEVEL UP THE EXPERIENCE WITH CUSTOME SHADERS. LIKE MANY OTHER THINGS I’VE LEARNED, I STARTED BY BUILDING VARIOUS PROJECTS EVEN THOUGH I HAVE NO IDEA WHAT WAS HAPPENING HALF THE TIME. BUILDING THINGS HAS ALWAYS BEEN THE BEST WAY FOR ME TO LEARN, AND IT WORKS WONDERS. WITH JUST A COUPLE OF PROJECTS. I WANT FROM NOT UNDERSTANDING TO NOW CAPABLE OF FORMULATING A GENERAL STRUCTURE WHEN LOOKING AT AN EFFECT FROM OTHER WEBSITES.

SPECIAL SHOUTOUTS TO BRUNO SIMON AND YURI ARTIUKH FOR THE AMAZING GUIDANCES.

GLSL code and the results of the rendered wobbly model

DANCING VERTEX

DYNAMIC THUMBNAILS

PATHFINDING CURSOR

WINDOWED RENDERING

FLOW FIELD PARTICLES

DISTORTED POSTPROCESSING

RAYMARCHING

<

ALLOW THE MODEL VERTICES TO DANCE WITH RYTHM.

/>

SHADERS ALLOW US TO ACCESS AND CONTROL EACH VERTEXT’S DATA ON AN MESH. THIS APOWER ENABLES US TO CREATE MANY DIFFERENT EFFECTS BYOND THREE.JS’S CAPABILITIES. TO MAKE THE WOBBLY EFFECT, I FIRST UTILIZED A SIMPLEX NOISE TO APPLY A “RANDOMIZED” POSITION FOR EACH VERTEX AND ANIMATE IT WITH TIME DATA EXTRACTED FROM JAVASCRIPT. AS WE UPDATE THE POSITION, WE MUST ALSO UPDATE THE NORMALS SO THAT THREE.JS CAN CAST THE CORRECT LIGHTING EFFECT. TO ACHIEVE THAT, I CACULATED AND APPLIED THE CORRECT NORMALS BACK TO THE VERTICES SO THE SHADOWS AND REFLECTIONS WOULD WORK AS INTENDED.

NOW THAT WE HAVE THE DESIRED EFFECT, WE CAN GO CRAZY WITH THE COLORs AS WE’VE GOT ALL THE DATA WE NEEDED. I UTILIZED THE MIX() FUNCTION TO CREATE A BLEND OF COLORS AND ROUGHNESS DEPENDING ON THE POSITION.

A violet and yellow colored wobbling sphere with a matte materialA red and blue colored wobbling sphere with a metal-like material
A green and cyan colored wobbling sphere with a matted metal materialA violet and turqoise colored wobbling sphere with a reflective metal material
A green and blue colored wobbling monkey model with a matted metal material

DANCING VERTEX

DYNAMIC THUMBNAILS

PATHFINDING CURSOR

WINDOWED RENDERING

FLOW FIELD PARTICLES

DISTORTED POSTPROCESSING

RAYMARCHING

<

RECREATING THE DYNAMIC THUMBNAIL EFFECT FROM AIRCORD.

/>

I ADORE MANY ASPECT OF THE AIRCORD’S WEBSITE. FROM THE INCREDIBLY SMOOTH SCENE TRANSITION BETWEEN PAGES TO THE INFINITE 3D SLIDER OF PROJECT ARE ALL SPECTACULAR. I’M PARTICULARLY AMUSED BY THE THUMBNAIL INTERACTION ON THEIR ARCHIVES PAGE. WHILE THE SCREEN-LIKE PLANE UPDATES THE THUMBNAIL AS YOU HOVER OVER DIFFERENT PROJECTS, IT ALSO SLOWLY TURN TORWARDS YOUR CURSOR. THIS SCENE PERFECTLY DEMONSTRATES WHAT I BELIEVE TO BE AN EFFECTIVE INTERACTIVE 3D WEB EXPERIENCE.

<

DECONSTRUCTING A DIFFICULT PROBLEM INTO SMALL PROBLEMS.

/>

AT FIRST GLANCE, THIS SEEMS TRICKY AS THIS SCENE HAS MANY MOVING PARTS, SO I BROKE THEM DOWN INTO MORE MINOR PROBLEMS TO TACKLE ONE AT A TIME. WE CAN EASILY BREAK DOWN THE EFFECTS INTO FIVE SMALL INTERACTIONS: PLANE ROTATION, BENDING THE VERTICES, LOADING TEXTURES, PARALLAX THUMBNAIL, AND UPDATING THE TEXTURE ON HOVER. NOW THAT I HAVE A TODO LIST, I CAN TACKLE THEM INDIVIDUALLY AND EVENTUALLY COMPILE THEM INTO ONE ENTITY.

A step-by-step image demostration on how I broke down the project into smaller pieces to resolve

DANCING VERTEX

DYNAMIC THUMBNAILS

PATHFINDING CURSOR

WINDOWED RENDERING

FLOW FIELD PARTICLES

DISTORTED POSTPROCESSING

RAYMARCHING

<

BUILDING A LIGHT CURSOR INSPIRED BY LUIGI’S MANSION.

/>

GROWING UP, I’VE PLAYED A LOT OF MARIO GAME. WHILE MANY OF THEM ARE GREAT MEMORIES, I WILL NEVER FORGET THE TIME THAT I WAS HIDING IN BED TRYING TO CATCH ALL THE BOOS BY SCRIBBLING LIGHTS ON MY NINTENDO DS. INSPIRED BY THE MINIGAME, I WANT TO BUILD AN EXPERIENCE WHERE PLAYERS CAN REVEAL DETAILS BY MOVING THE CURSOR.

<

ENGAGE THE PLAYER THROUGH THEIR CURSOR.

/>

YOU MAY HAVE NOTICED, BUT I LOVE BINDING DIFFERENT INTERACTIONS TO THE CURSOR. IT IS A GREAT WAY TO IMMERSE USERS IN THE EXPERIENCE. IN THIS CASE, I ESSENTIALLY USE THE CURSOR POSITION TO ANIMATE PRETTY MUCH EVERYTHING THAT’S ON SCREEN. WHILE THE HEAD LOOKS WHEREVER THE CURSOR IS, THE ARMS FLAP OUTWARD BASED ON THE X POSITION OF THE CURSOR. LASTLY, I LAOS BONDED A POINT LIGHT TO THE CURSOR SO IT LIGHTS UP WHEREVER THE USER CURSOR IS.

A code snippet showing the process of adding a referencing mesh for the cursor and robot movement
A code snippet showing how I animated the robot model using the cursor position as the base value

DANCING VERTEX

DYNAMIC THUMBNAILS

PATHFINDING CURSOR

WINDOWED RENDERING

FLOW FIELD PARTICLES

DISTORTED POSTPROCESSING

RAYMARCHING

<

RECREATING A WINDOW THUMBNAIL INSPIRED BY KENTA TOSHIKURA.

/>

AS AN ASPIRING CREATIVE DEVELOPER, I’M INSPIRED BY MANY OTHERS WHO ARE GENERATING INCREDIBLE WORKS, AND I HOPE ONE DAY I CAN DO THE SAME. AS KENTA TOSHIKURA FROM GARDEN EIGHT IS ONE OF MY FAVORITES, I WANT TO RECREATE THE WINDOW EFFECT FROM HIS CURRENT PORTFOLIO. IT’S A BRILLIANT CREATION, FILLED WITH DETAILS LIKE THE SEE-THROUGH GLASS DISTORTION, THE PARALLAX MOVEMENT, AND THE TRANSITION FROM HOMEPAGE TO PROJECT CASE STUDIES. IT’S ALWAYS A TREAT BROWSING THROUGH HIS WORKS, AS THEY ARE ALL FILLED WITH AMUSING DETAILS, INTERACTIONS, AND TRANSITIONS THAT FULLY IMMERSE US IN THE EXPERIENCES.

<

OVERLAYING RENDERS WITH A RENDER TARGET FOR POSTPROCESSING.

/>

TO ACHIEVE THE SAME EFFECT, I CREATED TWO SEPARATE SCENES, EACH WITH ITS PURPOSE. THE PRIMARY SCENE IS RENDERED TO THE AUDIENCE, CREATING WINDOW EFFECTS, AND THE MODEL SCENE RENDERS AND ANIMATES THE MODEL. ONCE BOTH SCENES ARE SET UP, I ASSIGN THE PLANE IN THE PRIMARY SCENE AS A RENDER TARGET, WHICH WILL RENDER THE MODEL SCENE THROUGH ITS LENS, CREATING THE WINDOW EFFECT. LASTLY, I DISTORTED THE UV WITH SHADERS TO CREATE A GLASS-LIKE EFFECT ON TOP OF THE RENDERED MODEL. ESSENTIALLY, I’M APPLYING POSTPROCESSING TO A RENDERED IMAGE.

Iterations of the same window-glass effect with a robot head modelIterations of the same window-glass effect with a game controller model

DANCING VERTEX

DYNAMIC THUMBNAILS

PATHFINDING CURSOR

WINDOWED RENDERING

FLOW FIELD PARTICLES

DISTORTED POSTPROCESSING

RAYMARCHING

<

CALCULATING POSITION AND COLOR WITH GPGPU.

/>

CREATING PARTICLES IS HARD. IT’S EVEN HARDER TO ANIMATE THEM AS IT INVOLVES A LOT OF CALCULATIONS WITH HUNDREADS OF VERTICES, AND WE HAVE TO DO IT FOR EVERY FRAME. TO ACHIEVE A FLOWING PARTICLE EFFECT, WE NEED TO LEVERAGE A TECHNIQUE CALLED GENERAL-PURPOSE COMPUTING ON GRAPHICS PROCESSING UNITS (GPGPU). FROM THIS, WE CAN EMBED POSITIONAL DATA ONTO A TEXTURE, DECODE THEM, AND UPDATE EACH FRAME’S VERTICES’ POSITION ACCORDINGLY. IT’S A SUPER POWERFUL TOOL WHEN PROCESSING LARGE AMOUND OF DATA. ONCE WE ACHIEVE THIS PROCESS, WE CAN APPLY ANIMATION WITH DIFFERENT FORMULAS AND NOISES.

A boat model using the same flow field engine to show a more colorful resultsA game controller model distorted using the flow field engine to showcase a contrasting color, which is yellow and cyan

DANCING VERTEX

DYNAMIC THUMBNAILS

PATHFINDING CURSOR

WINDOWED RENDERING

FLOW FIELD PARTICLES

DISTORTED POSTPROCESSING

RAYMARCHING

<

DISTORTING THE RENDER UV WITH POSTPROCESSING.

/>

INSTEAD OF MODIFYING THE VERTEX POSITION, WE CAN ALSO DISTORT IMAGES BY APPLYING A LAYER OF POSTPROCESSING ON TOP TO DISTORT THE UV. INSPIRED BY HOMUNCULUS’S WEBSITE, I WANT TO RECREATE THE SAME PATTERN BY DISTORTING COLORFUL IMAGES TO GENERATE BEAUTIFUL PATTERNS. TO CREATE A CUSTOM POSTPROCESSING LAYER, I REUSE CODE FROM THREE.JS AND DIRECTLY MODIFIED THE UV ON THE FRAGMENT SHADER TO DISTORT THE IMAGE LAYER UNDERNEATH. WITH THE BASE CODE, WE CAN SWITCH OUT THE IMAGES TO CREATE DIFFERENT COLOR PALETTES AND GENERATE PATTERNS BY ADJUSTING THE VALUES.

Iteration of the distorted UV pattern with different images gnerating different patter and colors. In the case, is yellow and blue.
Iteration of the distorted UV pattern with different images gnerating different patter and colors. In the case, I've tried a highly saturated and colored blend of images

DANCING VERTEX

DYNAMIC THUMBNAILS

PATHFINDING CURSOR

WINDOWED RENDERING

FLOW FIELD PARTICLES

DISTORTED POSTPROCESSING

RAYMARCHING

<

SMOOTH BLENDING SHAPES TO CREATE A FLUID-LIKE EFFECTS.

/>

TO TEST THE POWER OF SHADER CODE, I FOLLOWED A RAYMARCHING GUIDE TO CREATE A FLUID BLENDING EFFECT WITH CIRCLES AND SQUARES. ALTHOUGH THE FINAL RESULT LOOKS 3D, IT IS ACHIEVED WITH MATCAP TEXTURE, HENCE THE RENDER STYLE DIFFERENCES. ESSENTIALLY, I’M BLENDING CIRCLES AND SQUARES TO CREATE THE BEAUTIFUL RENDERS.

Exploring a more matte metal matcap texture.
Exploring a highly reflective metal matcap texture

NEXT

PROJECT

<

HYPER
:D

/>