3d-web-experience

精通构建网页3D体验——涵盖Three.js、React Three Fiber、Spline、WebGL及交互式3D场景开发。专注于产品配置器、3D作品集、沉浸式网站设计,为网页体验注入立体深度。适用场景:三维网站开发、three.js应用、WebGL项目、react three fiber集成、3D交互体验打造。

查看详情
name:3d-web-experiencedescription:"Expert in building 3D experiences for the web - Three.js, React Three Fiber, Spline, WebGL, and interactive 3D scenes. Covers product configurators, 3D portfolios, immersive websites, and bringing depth to web experiences. Use when: 3D website, three.js, WebGL, react three fiber, 3D experience."source:vibeship-spawner-skills (Apache 2.0)

3D Web Experience

Role: 3D Web Experience Architect

You bring the third dimension to the web. You know when 3D enhances
and when it's just showing off. You balance visual impact with
performance. You make 3D accessible to users who've never touched
a 3D app. You create moments of wonder without sacrificing usability.

Capabilities

  • Three.js implementation

  • React Three Fiber

  • WebGL optimization

  • 3D model integration

  • Spline workflows

  • 3D product configurators

  • Interactive 3D scenes

  • 3D performance optimization
  • Patterns

    3D Stack Selection

    Choosing the right 3D approach

    When to use: When starting a 3D web project

    ## 3D Stack Selection

    Options Comparison


    <div class="overflow-x-auto my-6"><table class="min-w-full divide-y divide-border border border-border"><thead><tr><th class="px-4 py-2 text-left text-sm font-semibold text-foreground bg-muted/50">Tool</th><th class="px-4 py-2 text-left text-sm font-semibold text-foreground bg-muted/50">Best For</th><th class="px-4 py-2 text-left text-sm font-semibold text-foreground bg-muted/50">Learning Curve</th><th class="px-4 py-2 text-left text-sm font-semibold text-foreground bg-muted/50">Control</th></tr></thead><tbody class="divide-y divide-border"><tr><td class="px-4 py-2 text-sm text-foreground">Spline</td><td class="px-4 py-2 text-sm text-foreground">Quick prototypes, designers</td><td class="px-4 py-2 text-sm text-foreground">Low</td><td class="px-4 py-2 text-sm text-foreground">Medium</td></tr><tr><td class="px-4 py-2 text-sm text-foreground">React Three Fiber</td><td class="px-4 py-2 text-sm text-foreground">React apps, complex scenes</td><td class="px-4 py-2 text-sm text-foreground">Medium</td><td class="px-4 py-2 text-sm text-foreground">High</td></tr><tr><td class="px-4 py-2 text-sm text-foreground">Three.js vanilla</td><td class="px-4 py-2 text-sm text-foreground">Max control, non-React</td><td class="px-4 py-2 text-sm text-foreground">High</td><td class="px-4 py-2 text-sm text-foreground">Maximum</td></tr><tr><td class="px-4 py-2 text-sm text-foreground">Babylon.js</td><td class="px-4 py-2 text-sm text-foreground">Games, heavy 3D</td><td class="px-4 py-2 text-sm text-foreground">High</td><td class="px-4 py-2 text-sm text-foreground">Maximum</td></tr></tbody></table></div>

    Decision Tree


    Need quick 3D element?
    └── Yes → Spline
    └── No → Continue

    Using React?
    └── Yes → React Three Fiber
    └── No → Continue

    Need max performance/control?
    └── Yes → Three.js vanilla
    └── No → Spline or R3F

    ### Spline (Fastest Start)
    jsx
    import Spline from '@splinetool/react-spline';

    export default function Scene() {
    return (

    );
    }

    ### React Three Fiber
    jsx
    import { Canvas } from '@react-three/fiber';
    import { OrbitControls, useGLTF } from '@react-three/drei';

    function Model() {
    const { scene } = useGLTF('/model.glb');
    return ;
    }

    export default function Scene() {
    return (





    );
    }

    3D Model Pipeline

    Getting models web-ready

    When to use: When preparing 3D assets

    ## 3D Model Pipeline

    Format Selection


    <div class="overflow-x-auto my-6"><table class="min-w-full divide-y divide-border border border-border"><thead><tr><th class="px-4 py-2 text-left text-sm font-semibold text-foreground bg-muted/50">Format</th><th class="px-4 py-2 text-left text-sm font-semibold text-foreground bg-muted/50">Use Case</th><th class="px-4 py-2 text-left text-sm font-semibold text-foreground bg-muted/50">Size</th></tr></thead><tbody class="divide-y divide-border"><tr><td class="px-4 py-2 text-sm text-foreground">GLB/GLTF</td><td class="px-4 py-2 text-sm text-foreground">Standard web 3D</td><td class="px-4 py-2 text-sm text-foreground">Smallest</td></tr><tr><td class="px-4 py-2 text-sm text-foreground">FBX</td><td class="px-4 py-2 text-sm text-foreground">From 3D software</td><td class="px-4 py-2 text-sm text-foreground">Large</td></tr><tr><td class="px-4 py-2 text-sm text-foreground">OBJ</td><td class="px-4 py-2 text-sm text-foreground">Simple meshes</td><td class="px-4 py-2 text-sm text-foreground">Medium</td></tr><tr><td class="px-4 py-2 text-sm text-foreground">USDZ</td><td class="px-4 py-2 text-sm text-foreground">Apple AR</td><td class="px-4 py-2 text-sm text-foreground">Medium</td></tr></tbody></table></div>

    Optimization Pipeline


  • Model in Blender/etc

  • Reduce poly count (< 100K for web)

  • Bake textures (combine materials)

  • Export as GLB

  • Compress with gltf-transform

  • Test file size (< 5MB ideal)

  • ### GLTF Compression
    bash

    Install gltf-transform


    npm install -g @gltf-transform/cli

    Compress model


    gltf-transform optimize input.glb output.glb \
    --compress draco \
    --texture-compress webp
    ### Loading in R3F
    jsx
    import { useGLTF, useProgress, Html } from '@react-three/drei';
    import { Suspense } from 'react';

    function Loader() {
    const { progress } = useProgress();
    return {progress.toFixed(0)}%;
    }

    export default function Scene() {
    return (

    }>



    );
    }

    Scroll-Driven 3D

    3D that responds to scroll

    When to use: When integrating 3D with scroll

    ## Scroll-Driven 3D

    R3F + Scroll Controls

    jsx
    import { ScrollControls, useScroll } from '@react-three/drei';
    import { useFrame } from '@react-three/fiber';

    function RotatingModel() {
    const scroll = useScroll();
    const ref = useRef();

    useFrame(() => {
    // Rotate based on scroll position
    ref.current.rotation.y = scroll.offset Math.PI 2;
    });

    return ...;
    }

    export default function Scene() {
    return (





    );
    }

    ### GSAP + Three.js
    javascript
    import gsap from 'gsap';
    import ScrollTrigger from 'gsap/ScrollTrigger';

    gsap.to(camera.position, {
    scrollTrigger: {
    trigger: '.section',
    scrub: true,
    },
    z: 5,
    y: 2,
    });

    ### Common Scroll Effects
  • Camera movement through scene

  • Model rotation on scroll

  • Reveal/hide elements

  • Color/material changes

  • Exploded view animations
  • Anti-Patterns

    ❌ 3D For 3D's Sake

    Why bad: Slows down the site.
    Confuses users.
    Battery drain on mobile.
    Doesn't help conversion.

    Instead: 3D should serve a purpose.
    Product visualization = good.
    Random floating shapes = probably not.
    Ask: would an image work?

    ❌ Desktop-Only 3D

    Why bad: Most traffic is mobile.
    Kills battery.
    Crashes on low-end devices.
    Frustrated users.

    Instead: Test on real mobile devices.
    Reduce quality on mobile.
    Provide static fallback.
    Consider disabling 3D on low-end.

    ❌ No Loading State

    Why bad: Users think it's broken.
    High bounce rate.
    3D takes time to load.
    Bad first impression.

    Instead: Loading progress indicator.
    Skeleton/placeholder.
    Load 3D after page is interactive.
    Optimize model size.

    Related Skills

    Works well with: scroll-experience, interactive-portfolio, frontend, landing-page-design

      3d-web-experience - Agent Skills