< ThreeJS Virtual Tour / >

Experience ABM

npm run case_study

Building a 3D webGL experience with interactive hotspots for ABM's tradeshows and digital marketing endeavors.

ABM builds solutions to keep distribution running smoothly. White Rhino and myself were asked to put together a 3D experience showing their wide range of services, that provided for interaction and intrigue, and to make sure it could be deployed on tablet devices for an upcoming tradeshow.

Creative programming.
The warehouse scene was the first scene we prototyped.

Experience ABM was an interesting project from the start due to the time crunch of needing to get this live before a tradeshow, and the limitations of needing it to work on tablet devices. While the White Rhino team worked on the CodeIgniter backend and setting up the 2D interface elements, I got to work developing a webGL 3D experience that the user could navigate through by clicking on relevant hotspots.

Each hotspot focuses on an area of improvement that ABM helps companies achieve within their distribution centers, and when clicked would trigger additional information about that particular service. The hotspots were built as 3D elements in the scene, allowing them to be occluded by geometry. A raycaster from the camera determined hover events, whereas they triggered modal counterparts in the regular DOM when clicked.

Creative programming.
A view of the warehouse glTF model, with it’s various nodes.

The experience used Three.js and custom-built GLTF models for each scene. I implemented dynamic camera positioning logic with smooth animations from hotspot-to-hotspot using GSAP, plus a full render engine to correctly light the scene and provide for realistic shadows, ambient occlusion, and global illumination. Soft-shadows and tone mapping helped to sell a level of realism that would otherwise be difficult to achieve in real-time.

A significant amount of work went into performance enhancements, treading the fine line between a photorealistic scene and one that renders quickly across multiple devices - especially as the primary deployment was on touchscreen kiosks at a tradeshow with less-than-optimal GPUs.

Creative programming.
The breakroom scene, with a few hotspots and the “scene selector wheel” at the bottom.

The end product was a high-performing touchscreen experience that was cross-browser and cross-device friendly, and optimized for their digital marketing efforts with built-in lead capture forms and calls-to-action.

To ensure we provided compatibility with older devices, we ultimately made 2D variations of each scene using a draggable environment mapped onto the inside of a sphere. This also helped at the tradeshow where mobile data was particularly slow; as significantly less data needed to be downloaded before the experience could run.

Creative programming.
Someone didn’t clean up the conference room.

Configuration of the software was simplified into a repeatable process, with a folder structure that ensured all 3D models/textures were available to the front-end, and XML files used to determine hotspot positioning, copy, icons, etc. The front-end code ingested these files and dynamically rendered the scene from them, so that less had to be hard-coded for each scene.

Creative programming.
An example of graceful fallbacks, the bathroom here is rendered without reflections in the mirrors on a lower-performing device.
Creative programming.
Ah yes, generic soda machines, my favorite.
npm run feedback

"It's looking really great! Thank you for all of your work, I appreciate your putting thought and care into building this correctly from the get-go.