Adding 3D Effects to Your Portfolio with React Three Fiber
When most developers think of adding visual flair to a portfolio, they reach for CSS animations or Framer Motion. But for a truly unforgettable experience, React Three Fiber (R3F) — a React renderer for Three.js — opens up the entire world of interactive 3D graphics, right in the browser.
Why React Three Fiber?
Three.js is the most popular WebGL library for the web, but its imperative API can feel out of place inside a React component tree. React Three Fiber solves this with a declarative, component-based approach that makes complex 3D scenes as composable as your regular UI:
import { Canvas } from '@react-three/fiber';
import { OrbitControls, Sphere, MeshDistortMaterial } from '@react-three/drei';
export default function AnimatedSphere() {
return (
<Canvas>
<ambientLight intensity={0.5} />
<directionalLight position={[10, 10, 5]} intensity={1} />
<Sphere args={[1, 100, 200]} scale={2}>
<MeshDistortMaterial
color="#f59e0b"
attach="material"
distort={0.5}
speed={1.5}
/>
</Sphere>
<OrbitControls enableZoom={false} />
</Canvas>
);
}
Key Libraries in the Ecosystem
The @react-three/drei helper library is where the real power is. It provides a collection of ready-made abstractions:
<OrbitControls>— Mouse-driven camera controls.<Environment>— HDR lighting environments for realistic materials.<Text3D>— 3D text with full font support.<MeshDistortMaterial>— Animated, morphing shader materials.<Stars>— A beautiful star-field particle system.
Performance Considerations
3D graphics are computationally intensive, so a few rules apply:
- Lazy-load your Canvas: Wrap it with
React.lazyor conditionally render it to avoid blocking the initial page load. - Use
useFramewisely: Only put animation logic inuseFrame; avoid re-renders at all costs. - Respect reduced-motion preferences: Check
prefers-reduced-motionand disable animations for users who need it. - Dispose resources: Three.js geometries and materials must be disposed of when a component unmounts to prevent memory leaks.
What I Built
For this portfolio, I used R3F to create the interactive 3D showcase on the homepage. The scene features custom geometries and environment-mapped materials, giving it a premium, live feel while keeping the bundle cost manageable through careful tree-shaking and code splitting.
If you haven't explored R3F yet, it's a genuinely fun way to level up your frontend projects. The learning curve pays off quickly.
