3d-web-experience – skill Lập trình cho agent AI
Dùng khi xây dựng hoặc gỡ lỗi cảnh 3D trên web, product configurator hoặc portfolio với Three.js, React Three Fiber hoặc Spline; rà soát tài nguyên, tải, điều khiển, phương án dự phòng và hiệu năng.
Cài skill 3d-web-experience bằng một lệnh
Chọn công cụ bạn đang dùng, copy lệnh và dán vào terminal. Skill sẽ nằm trong thư mục skills của công cụ đó và sẵn sàng dùng ở phiên làm việc tiếp theo.
Claude Code
mkdir -p ~/.claude/skills && curl -fsSL https://skill.dn1nguoi.com/z/3d-web-experience-33501.tgz | tar xz -C ~/.claude/skills
Gọi trong Claude Code: /3d-web-experience – rồi mô tả công việc bạn muốn làm.
Codex
mkdir -p ~/.codex/skills && curl -fsSL https://skill.dn1nguoi.com/z/3d-web-experience-33501.tgz | tar xz -C ~/.codex/skills
Gọi trong Codex: $3d-web-experience – rồi mô tả công việc bạn muốn làm.
Hermes Agent
mkdir -p ~/.hermes/skills && curl -fsSL https://skill.dn1nguoi.com/z/3d-web-experience-33501.tgz | tar xz -C ~/.hermes/skills
Gọi trong Hermes Agent: /3d-web-experience – rồi mô tả công việc bạn muốn làm.
DeepSeek
mkdir -p ~/.deepcode/skills && curl -fsSL https://skill.dn1nguoi.com/z/3d-web-experience-33501.tgz | tar xz -C ~/.deepcode/skills
Gọi trong DeepSeek: /3d-web-experience – rồi mô tả công việc bạn muốn làm.
Nội dung SKILL.md
Nội dung SKILL.md gốc bằng tiếng Anh.
3D Web Experience
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.
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.
Expertise
- Three.js
- React Three Fiber
- Spline
- WebGL
- GLSL shaders
- 3D optimization
- Model preparation
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
| Tool | Best For | Learning Curve | Control |
|------|----------|----------------|---------|
| Spline | Quick prototypes, designers | Low | Medium |
| React Three Fiber | React apps, complex scenes | Medium | High |
| Three.js vanilla | Max control, non-React | High | Maximum |
| Babylon.js | Games, heavy 3D | High | Maximum |
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 R3FSpline (Fastest Start)
import Spline from '@splinetool/react-spline';
export default function Scene() {
return (
<Spline scene="https://prod.spline.design/xxx/scene.splinecode" />
);
}React Three Fiber
import { Canvas } from '@react-three/fiber';
import { OrbitControls, useGLTF } from '@react-three/drei';
import { Suspense } from 'react';
function Model() {
const { scene } = useGLTF('/model.glb');
return <primitive object={scene} />;
}
export default function Scene() {
return (
<Canvas>
<ambientLight />
<Suspense fallback={null}>
<Model />
</Suspense>
<OrbitControls enableZoom={false} />
</Canvas>
);
}3D Model Pipeline
Getting models web-ready
When to use: When preparing 3D assets
3D Model Pipeline
Format Selection
| Format | Use Case | Size |
|--------|----------|------|
| GLB/GLTF | Standard web 3D | Depends on geometry/textures/compression |
| FBX | From 3D software | Large |
| OBJ | Simple meshes | Medium |
| USDZ | Apple AR | Medium |
Optimization Pipeline
1. Model in Blender/etc
2. Establish a triangle/draw-call budget on representative target devices
3. Bake textures (combine materials)
4. Export as GLB
5. Compress with gltf-transform
6. Measure transfer size, decode time, memory and frame time against the project budgetGLTF Compression
# Use the reviewed version already pinned in the project lockfile.
# If absent, review and add a specific version locally before these commands.
# Compress model
./node_modules/.bin/gltf-transform optimize input.glb output.glb \
--compress draco \
--texture-compress webpLoading in R3F
This component needs the React/R3F/drei versions installed by the project and an
actual /model.glb asset. Add an application error boundary for failed asset loads.
import { useGLTF, useProgress, Html } from '@react-three/drei';
import { Suspense } from 'react';
import { Canvas } from '@react-three/fiber';
function Model() {
const { scene } = useGLTF('/model.glb');
return <primitive object={scene} />;
}
function Loader() {
const { progress } = useProgress();
return <Html center>{progress.toFixed(0)}%</Html>;
}
export default function Scene() {
return (
<Canvas>
<ambientLight />
<Suspense fallback={<Loader />}>
<Model />
</Suspense>
</Canvas>
);
}Scroll-Driven 3D
3D that responds to scroll
When to use: When integrating 3D with scroll
Scroll-Driven 3D
R3F + Scroll Controls
import { ScrollControls, useScroll } from '@react-three/drei';
import { Canvas, useFrame } from '@react-three/fiber';
import { useRef } from 'react';
function RotatingModel() {
const scroll = useScroll();
const ref = useRef();
useFrame(() => {
// Rotate based on scroll position
if (ref.current) ref.current.rotation.y = scroll.offset * Math.PI * 2;
});
return (
<mesh ref={ref}>
<boxGeometry args={[1, 1, 1]} />
<meshNormalMaterial />
</mesh>
);
}
export default function Scene() {
return (
<Canvas>
<ScrollControls pages={3}>
<RotatingModel />
</ScrollControls>
</Canvas>
);
}GSAP + Three.js
import gsap from 'gsap';
import ScrollTrigger from 'gsap/ScrollTrigger';
gsap.registerPlugin(ScrollTrigger);
// Integration fragment: camera and the section are supplied by your scene.
// Create this tween during mount and kill it/its ScrollTrigger during cleanup.
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
Performance Optimization
Keeping 3D fast
When to use: Always - 3D is expensive
3D Performance
Performance Targets
The following are illustrative starting budgets, not hardware limits or guarantees.
Measure GPU time, draw calls, memory and load time; triangle count alone cannot
establish performance. Respect reduced-motion settings and retain ordinary controls.
| Device | Target FPS | Max Triangles |
|--------|------------|---------------|
| Desktop | 60fps | 500K |
| Mobile | 30-60fps | 100K |
| Low-end | 30fps | 50K |
Quick Wins
These are independent integration fragments, not one copyable module. Configure
instances/LOD and lights in your actual scene, and wrap lazy components in Suspense.
// 1. Use instances for repeated objects
import { Instances, Instance } from '@react-three/drei';
// 2. Limit lights
const lights = (
<>
<ambientLight intensity={0.5} />
<directionalLight />
</>
);
// 3. Use LOD (Level of Detail)
import { LOD } from 'three';
// 4. Lazy load models
import { lazy } from 'react';
const Model = lazy(() => import('./Model'));Resolution budget
Use a conservative initial DPR and measure actual rendering performance rather
than inferring device capacity from the user-agent string:
import { Canvas } from '@react-three/fiber';
export default function Scene() {
return (
<Canvas dpr={[1, 1.5]} fallback={<p>3D preview unavailable.</p>}>
<mesh>
<boxGeometry />
<meshNormalMaterial />
</mesh>
</Canvas>
);
}Fallback strategy
Canvas supports a DOM fallback when GL cannot initialize. Also wrap the scene
in an application error boundary for context crashes and asset errors; Suspense
handles loading, not failures. Keep product descriptions, variant controls and
purchase actions in accessible DOM so the task works without the canvas. Test
keyboard operation, zoom, reduced motion and an unavailable WebGL context.
See the [Canvas API and fallback guidance](https://r3f.docs.pmnd.rs/api/canvas).
Validation Checks
No 3D Loading Indicator
Severity: HIGH
Message: No loading indicator for 3D content.
Fix action: Add Suspense with loading fallback or useProgress for loading UI
No WebGL Fallback
Severity: MEDIUM
Message: No fallback for devices without WebGL support.
Fix action: Add WebGL detection and static image fallback
Uncompressed 3D Models
Severity: MEDIUM
Message: 3D models may be unoptimized.
Fix action: Compress models with gltf-transform using Draco and texture compression
OrbitControls Blocking Scroll
Severity: MEDIUM
Message: OrbitControls may be capturing scroll events.
Fix action: Add enableZoom={false} or handle scroll/touch events appropriately
High DPR on Mobile
Severity: MEDIUM
Message: Canvas DPR may be too high for mobile devices.
Fix action: Limit DPR to 1 on mobile devices for better performance
Collaboration
Optional collaboration areas
These are capability labels; check actual IDs and read their scope in the current
catalog before recommending them. They do not authorize spawning agents.
- scroll animation|parallax|GSAP -> scroll-experience (Scroll integration)
- react|next|frontend -> frontend-developer (React integration)
- performance|slow|fps -> performance-engineer (3D performance optimization)
- product page|landing|marketing -> frontend-design (Product landing with 3D)
Product Configurator
Skills: 3d-web-experience, frontend-developer, frontend-design
Workflow:
1. Prepare 3D product model
2. Set up React Three … (nội dung đầy đủ có trong gói tải về)
Skill liên quan
- aas-review-stack – Rà soát manifest stack AAS, xem trước kế hoạch và bằng chứng lựa chọn trong Workbench mà…
- ab-test-setup – Dùng khi thiết kế A/B test hoặc split test: xác định giả thuyết, nhóm kiểm soát và biến…
- ab-testing – Khi người dùng muốn lên kế hoạch, thiết kế hoặc triển khai A/B test hoặc thí nghiệm…
- angular-migration – Di chuyển từ AngularJS sang Angular bằng chế độ hybrid, viết lại component dần dần và…
- access-lifecycle – Dùng khi chuẩn bị hoặc thực hiện đợt rà soát quyền truy cập người dùng, kiểm tra người…
- adversarial-reviewer – Review code đối kháng nhằm phá vỡ thói quen tự review. Dùng khi muốn một đánh giá thực…
- access-review – Thực hiện rà soát quyền truy cập và chứng nhận định kỳ. Triển khai quy trình quản trị…
- api-design-principles – Nắm vững nguyên tắc thiết kế REST và GraphQL để xây dựng API trực quan, mở rộng tốt và…