Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
daffy0208 avatar

3d Visualizer

  • 624 installs
  • 33 repo stars
  • Updated December 25, 2025
  • daffy0208/ai-dev-standards

3d-visualizer is an agent skill that generates production-ready Three.js scenes, React Three Fiber components, and interactive 3D web visualizations for developers who should not start from a blank WebGL canvas.

About

3d-visualizer is an agent skill (version 1.0.0) from daffy0208/ai-dev-standards tagged for three-js, 3d, webgl, react-three-fiber, and visualization. It scaffolds 3D models and scenes with materials, lighting, animations, and camera controls, plus data-visualization use cases such as 3D charts, network graphs, geospatial plots, and scientific views. Interactive patterns include 360° product viewers, configurators, demos, and lightweight 3D games. Developers reach for 3d-visualizer when a README, dashboard, or marketing page needs immersive WebGL content without hand-rolling boilerplate scene graphs from scratch.

  • Creates 3D models, scenes, materials, lighting, animations and camera controls
  • Builds 3D data visualizations including charts, network graphs, geospatial and scientific views
  • Delivers interactive 3D experiences such as 360° product viewers, configurators and demos
  • Provides ready-to-use React Three Fiber + Drei patterns with TypeScript
  • Supports Three.js, WebGL, React Three Fiber and related 3D web standards

3d Visualizer by the numbers

  • 624 all-time installs (skills.sh)
  • Ranked #555 of 2,245 Frontend Development skills by installs in the Skillselion catalog
  • Security screen: MEDIUM risk (skills.sh audit)
  • Data as of Jul 30, 2026 (Skillselion catalog sync)
npx skills add https://github.com/daffy0208/ai-dev-standards --skill 3d-visualizer

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs624
repo stars33
Security audit3 / 3 scanners passed
Last updatedDecember 25, 2025
Repositorydaffy0208/ai-dev-standards

How do you build Three.js scenes with React Three Fiber?

Generate production-ready Three.js scenes, React Three Fiber components, and interactive 3D visualizations without starting from a blank canvas.

Who is it for?

Frontend developers adding WebGL product viewers, 3D data visualizations, or interactive demos who want scaffolded Three.js expertise.

Skip if: Native mobile 3D (Unity/Unreal) projects or teams needing only flat 2D charts without WebGL overhead.

When should I use this skill?

A user asks for Three.js, React Three Fiber, WebGL visualization, 3D product viewers, or interactive 3D charts in a web app.

What you get

Production-ready Three.js or React Three Fiber components with scenes, materials, lighting, animations, and interactive camera controls.

  • Three.js or R3F scene components
  • Materials and lighting setup
  • Interactive camera and animation code

By the numbers

  • Skill version 1.0.0 in ai-dev-standards manifest
  • Tags include three-js, webgl, react-three-fiber, and visualization

Files

SKILL.mdMarkdownGitHub ↗

3D Visualizer Skill

I help you create 3D visualizations, interactive 3D graphics, and immersive web experiences using Three.js.

What I Do

3D Graphics:

  • 3D models and scenes
  • Materials and lighting
  • Animations and interactions
  • Camera controls

3D Data Visualization:

  • 3D charts and graphs
  • Network visualizations
  • Geospatial data
  • Scientific visualization

Interactive 3D:

  • Product viewers (360°)
  • Configurators
  • Interactive demos
  • 3D games

Three.js with React Three Fiber

npm install three @react-three/fiber @react-three/drei

Basic 3D Scene

// components/Scene3D.tsx
'use client'
import { Canvas } from '@react-three/fiber'
import { OrbitControls, Box, Sphere } from '@react-three/drei'

export function Scene3D() {
  return (
    <Canvas camera={{ position: [5, 5, 5], fov: 50 }}>
      {/* Lighting */}
      <ambientLight intensity={0.5} />
      <pointLight position={[10, 10, 10]} />

      {/* 3D Objects */}
      <Box position={[-2, 0, 0]} args={[1, 1, 1]}>
        <meshStandardMaterial color="hotpink" />
      </Box>

      <Sphere position={[2, 0, 0]} args={[0.7, 32, 32]}>
        <meshStandardMaterial color="cyan" metalness={0.8} roughness={0.2} />
      </Sphere>

      {/* Camera Controls */}
      <OrbitControls />
    </Canvas>
  )
}

---

3D Model Loader

'use client'
import { useGLTF } from '@react-three/drei'
import { Canvas } from '@react-three/fiber'

function Model() {
  const { scene } = useGLTF('/models/product.glb')
  return <primitive object={scene} />
}

export function ProductViewer() {
  return (
    <Canvas>
      <ambientLight intensity={0.5} />
      <spotLight position={[10, 10, 10]} angle={0.15} />

      <Model />

      <OrbitControls
        enableZoom={true}
        enablePan={false}
        minPolarAngle={Math.PI / 4}
        maxPolarAngle={Math.PI / 2}
      />
    </Canvas>
  )
}

---

Animated 3D

'use client'
import { useRef } from 'react'
import { useFrame } from '@react-three/fiber'
import { Mesh } from 'three'

function RotatingCube() {
  const meshRef = useRef<Mesh>(null)

  useFrame((state, delta) => {
    if (meshRef.current) {
      meshRef.current.rotation.x += delta
      meshRef.current.rotation.y += delta * 0.5
    }
  })

  return (
    <mesh ref={meshRef}>
      <boxGeometry args={[2, 2, 2]} />
      <meshStandardMaterial color="orange" />
    </mesh>
  )
}

export function AnimatedScene() {
  return (
    <Canvas>
      <ambientLight />
      <pointLight position={[10, 10, 10]} />
      <RotatingCube />
    </Canvas>
  )
}

---

3D Chart (Bar Chart)

'use client'
import { Canvas } from '@react-three/fiber'
import { OrbitControls, Text } from '@react-three/drei'

interface DataPoint {
  label: string
  value: number
  color: string
}

function Bar3D({ position, height, color, label }: {
  position: [number, number, number]
  height: number
  color: string
  label: string
}) {
  return (
    <group position={position}>
      <mesh position={[0, height / 2, 0]}>
        <boxGeometry args={[0.8, height, 0.8]} />
        <meshStandardMaterial color={color} />
      </mesh>

      <Text
        position={[0, -0.5, 0]}
        fontSize={0.3}
        color="black"
      >
        {label}
      </Text>
    </group>
  )
}

export function BarChart3D({ data }: { data: DataPoint[] }) {
  return (
    <Canvas camera={{ position: [5, 5, 8] }}>
      <ambientLight intensity={0.5} />
      <pointLight position={[10, 10, 10]} />

      {data.map((item, i) => (
        <Bar3D
          key={i}
          position={[i * 1.5 - (data.length * 1.5) / 2, 0, 0]}
          height={item.value}
          color={item.color}
          label={item.label}
        />
      ))}

      <OrbitControls />
    </Canvas>
  )
}

// Usage
const salesData = [
  { label: 'Jan', value: 4, color: '#3b82f6' },
  { label: 'Feb', value: 3, color: '#3b82f6' },
  { label: 'Mar', value: 6, color: '#3b82f6' },
  { label: 'Apr', value: 8, color: '#3b82f6' }
]

<BarChart3D data={salesData} />

---

Interactive 3D Product Configurator

'use client'
import { useState } from 'react'
import { Canvas } from '@react-three/fiber'
import { OrbitControls } from '@react-three/drei'

const colors = {
  red: '#ef4444',
  blue: '#3b82f6',
  green: '#10b981',
  yellow: '#f59e0b'
}

function Product({ color }: { color: string }) {
  return (
    <mesh>
      <boxGeometry args={[2, 2, 2]} />
      <meshStandardMaterial color={color} metalness={0.5} roughness={0.3} />
    </mesh>
  )
}

export function ProductConfigurator() {
  const [selectedColor, setSelectedColor] = useState('blue')

  return (
    <div className="flex gap-4">
      <div className="w-2/3">
        <Canvas camera={{ position: [3, 3, 3] }}>
          <ambientLight intensity={0.5} />
          <spotLight position={[10, 10, 10]} />

          <Product color={colors[selectedColor]} />

          <OrbitControls />
        </Canvas>
      </div>

      <div className="w-1/3">
        <h3 className="font-bold mb-4">Choose Color</h3>
        <div className="grid grid-cols-2 gap-2">
          {Object.entries(colors).map(([name, hex]) => (
            <button
              key={name}
              onClick={() => setSelectedColor(name)}
              className={`p-4 rounded border-2 ${
                selectedColor === name ? 'border-black' : 'border-gray-300'
              }`}
              style={{ backgroundColor: hex }}
            >
              {name}
            </button>
          ))}
        </div>
      </div>
    </div>
  )
}

---

Network Graph 3D

'use client'
import { Canvas } from '@react-three/fiber'
import { Line } from '@react-three/drei'

interface Node {
  id: string
  position: [number, number, number]
}

interface Edge {
  from: string
  to: string
}

function NetworkGraph({ nodes, edges }: {
  nodes: Node[]
  edges: Edge[]
}) {
  const nodeMap = new Map(nodes.map(n => [n.id, n]))

  return (
    <>
      {/* Nodes */}
      {nodes.map((node) => (
        <mesh key={node.id} position={node.position}>
          <sphereGeometry args={[0.2]} />
          <meshStandardMaterial color="cyan" />
        </mesh>
      ))}

      {/* Edges */}
      {edges.map((edge, i) => {
        const from = nodeMap.get(edge.from)
        const to = nodeMap.get(edge.to)
        if (!from || !to) return null

        return (
          <Line
            key={i}
            points={[from.position, to.position]}
            color="white"
            lineWidth={1}
          />
        )
      })}
    </>
  )
}

export function Network3DVisualization() {
  const nodes = [
    { id: 'A', position: [0, 0, 0] },
    { id: 'B', position: [2, 1, 0] },
    { id: 'C', position: [-2, 1, 0] },
    { id: 'D', position: [0, 2, 1] }
  ]

  const edges = [
    { from: 'A', to: 'B' },
    { from: 'A', to: 'C' },
    { from: 'B', to: 'D' },
    { from: 'C', to: 'D' }
  ]

  return (
    <Canvas camera={{ position: [0, 0, 8] }}>
      <ambientLight />
      <pointLight position={[10, 10, 10]} />

      <NetworkGraph nodes={nodes} edges={edges} />

      <OrbitControls />
    </Canvas>
  )
}

---

Performance Tips

Instanced Mesh (Many Objects)

'use client'
import { useRef, useMemo } from 'react'
import { useFrame } from '@react-three/fiber'
import * as THREE from 'three'

export function Particles({ count = 1000 }: { count?: number }) {
  const meshRef = useRef<THREE.InstancedMesh>(null)

  const particles = useMemo(() => {
    const temp = []
    for (let i = 0; i < count; i++) {
      const t = Math.random() * 100
      const factor = 20 + Math.random() * 100
      const speed = 0.01 + Math.random() / 200
      temp.push({ t, factor, speed, mx: 0, my: 0 })
    }
    return temp
  }, [count])

  useFrame((state) => {
    if (meshRef.current) {
      particles.forEach((particle, i) => {
        let { t, factor, speed, mx, my } = particle

        t = particle.t += speed
        const a = Math.cos(t) + Math.sin(t * 1) / 10
        const b = Math.sin(t) + Math.cos(t * 2) / 10
        const s = Math.cos(t)

        const dummy = new THREE.Object3D()
        dummy.position.set(
          (mx / 10) * a + Math.cos((t / 10) * factor) + (Math.sin(t * 1) * factor) / 10,
          (my / 10) * b + Math.sin((t / 10) * factor) + (Math.cos(t * 2) * factor) / 10,
          (my / 10) * b + Math.cos((t / 10) * factor) + (Math.sin(t * 3) * factor) / 10
        )
        dummy.scale.set(s, s, s)
        dummy.updateMatrix()
        meshRef.current!.setMatrixAt(i, dummy.matrix)
      })
      meshRef.current.instanceMatrix.needsUpdate = true
    }
  })

  return (
    <instancedMesh ref={meshRef} args={[undefined, undefined, count]}>
      <sphereGeometry args={[0.05, 16, 16]} />
      <meshPhongMaterial color="cyan" />
    </instancedMesh>
  )
}

---

When to Use Me

Perfect for:

  • Building 3D product viewers
  • Creating data visualizations
  • Interactive 3D experiences
  • Scientific visualization
  • 3D game prototypes

I'll help you:

  • Set up Three.js projects
  • Load 3D models
  • Create interactive 3D
  • Optimize 3D performance
  • Build 3D charts

What I'll Create

🎨 3D Scenes
📦 Product Viewers
📊 3D Charts
🌐 Network Graphs
🎮 Interactive 3D
⚡ Performance-Optimized 3D

Let's bring your data and products to life in 3D!

Related skills

How it compares

Pick 3d-visualizer for browser WebGL and R3F scaffolds; choose charting libraries when flat 2D visuals suffice without a 3D scene graph.

FAQ

What 3D stacks does 3d-visualizer support?

3d-visualizer targets Three.js and React Three Fiber (version 1.0.0) with tags for webgl and visualization. Outputs include scenes with materials, lighting, camera controls, and interactive viewers.

What interactive 3D use cases does 3d-visualizer cover?

3d-visualizer scaffolds 360° product viewers, configurators, demos, 3D charts, network graphs, geospatial plots, and scientific visualizations—browser WebGL experiences, not native game engines.

When should developers invoke 3d-visualizer?

3d-visualizer fits when a web app needs immersive 3D without hand-rolling scene boilerplate. Skip it for flat 2D charts or Unity/Unreal native 3D targets outside the browser.

Is 3d Visualizer safe to install?

skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.

Frontend Developmentfrontendintegrations

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.