Arrow icon pointing up and rightArrow icon pointing up and right
Interactivity
UI
3D Integration
Navigating the Challenges of 3D Interactivity on the Web: The Good Way Approach
May 29, 2025
by Joe Broadbent

The web is evolving into a dynamic platform for immersive experiences, with 3D interactivity at the forefront of modern design. From interactive product displays to virtual showrooms, 3D on the web promises enhanced engagement and innovative storytelling. However, the journey to successfully implementing 3D content is fraught with technical and creative hurdles. Here, we explore some of the key challenges and share the good way co.’s approach to overcoming them using React Three Fiber, Three.js, and Blender.

1. Performance Optimisation

One of the biggest hurdles when working with 3D on the web is maintaining smooth performance, especially across devices with varying capabilities. Websites must render complex models, handle lighting, and enable user interactions—all without compromising the experience.

Our Solution at the good way co.: We start by optimising our models in Blender before export. We use the decimate modifier to reduce polygon counts and employ normal maps to simulate high detail without increasing mesh complexity. Within React, we implement lazy loading with React.Suspense and reduce the number of dynamic lights in Three.js to minimise GPU strain. This ensures a seamless experience across desktops and mobiles.

2. Cross-Browser Compatibility

Despite ongoing advancements, WebGL and 3D rendering can behave inconsistently across different browsers. Some features may work perfectly in Chrome but be unreliable or entirely unavailable in Safari or older versions of Edge.

Our Solution at the good way co.: We rely on React Three Fiber’s abstraction over Three.js to handle browser inconsistencies. Before deployment, we include feature checks like WEBGL.isWebGLAvailable() to gracefully notify users if their browser doesn’t support the required features. We also carry out comprehensive cross-browser testing using tools like BrowserStack to ensure a consistent experience on all platforms.

3. Complex User Interactions

Adding interactivity such as dragging, rotating, and zooming presents a new layer of complexity. Interactions need to be intuitive and responsive, accommodating both mouse and touch inputs.

Our Solution at the good way co.: We leverage React Three Fiber’s hooks and libraries like use-gesture to streamline user controls. For complex interactions, we build simplified collision meshes in Blender, which allow for precise click and pointer event detection on specific parts of the model. This helps create fluid and natural interactions, whether users are on desktops or touch devices.

4. Handling Large File Sizes

3D models, textures, and animations can significantly bloat file sizes, leading to long loading times and poor user experiences. Keeping file sizes in check without compromising visual fidelity is a delicate balancing act.

Our Solution at the good way co.: We optimise models directly in Blender, using the decimate modifier and baking high-quality textures instead of relying on detailed geometry. We also compress GLB files using tools like gltfpack or Draco compression, supported in Three.js. For web projects, we implement lazy loading, so that detailed models are only fetched when required, ensuring fast load times and better UX.

5. Scene and Object Management

3D scenes can quickly become unmanageable, with multiple meshes, textures, lights, and animations all competing for attention. If not structured correctly, this can lead to confusion during development and potential performance pitfalls.

Our Solution at the good way co.: We use React Three Fiber’s declarative approach to separate logic and structure. For state management, we employ libraries like zustand to keep track of complex scenes. To maintain order, we organise models into collections in Blender and export logically grouped GLB files. This makes it easy to build modular scenes in React, enhancing maintainability and scalability.

6. Physics and Collision Detection

Simulating realistic physics and collisions is often required to create believable 3D experiences. However, these calculations can be expensive, impacting performance and introducing bugs if not implemented properly.

Our Solution at the good way co.: We use the @react-three/cannon library to handle physics in our React Three Fiber projects, integrating simplified meshes created in Blender for collision detection. For less complex interactions, we employ bounding boxes or spheres to handle hit detection, reducing computational overhead while maintaining interactivity.

7. Responsive Design and Mobile Support

Unlike traditional 2D web design, achieving responsive design in 3D is significantly more challenging. Camera settings, interaction controls, and even lighting might need to be adjusted based on the device.

Our Solution at the good way co.: In React, we use the useThree hook to dynamically update scene properties based on screen size and device type. Additionally, we use media queries to load different versions of our models for desktop and mobile. For example, we implement a detailed GLB for desktops and a lower-polygon version for mobiles, ensuring smooth performance and user experience on any device.

8. Lighting and Shadows

Lighting can make or break a 3D experience. Poor lighting can obscure details, while overusing dynamic lights can degrade performance.

Our Solution at the good way co.: For static scenes, we bake lighting and shadows directly into our models in Blender, which reduces the need for real-time calculations in Three.js. When dynamic lighting is needed, we utilise softShadows() from @react-three/drei, providing a good balance between visual quality and performance.

9. Integrating with UI/UX Frameworks

3D content often needs to work in tandem with traditional HTML/CSS interfaces, such as tooltips, buttons, or modals. Balancing these can be a nightmare, leading to overlapping events and clashing styles.

Our Solution at the good way co.: We use React Three Fiber’s HTML component from @react-three/drei to place React components within the 3D scene, bridging the gap between HTML/CSS and 3D elements. By using portals, we overlay 3D content onto our standard HTML UI, ensuring a seamless integration between traditional and interactive elements.

10. Debugging and Maintenance

Debugging 3D applications is notoriously tricky due to the spatial nature of issues—misaligned meshes, incorrect lighting, or performance bottlenecks can be difficult to pinpoint.

Our Solution at the good way co.: We use r3f-inspector for real-time debugging of our Three.js scenes. In Blender, we employ viewport overlays to inspect and fine-tune meshes, animations, and lighting before exporting. In React, we implement visual helpers like axesHelper and gridHelper to keep track of transformations and object positions, making it easier to troubleshoot and maintain our projects.

Ready to harness the power of 3D interactivity on your website? At the good way co., we have the expertise to overcome these challenges and deliver cutting-edge 3D experiences that captivate and engage your audience. Contact us via https://www.good-way.co/contact to learn how we can support you.