react-three-fiber
React Three Fiber 渲染器,提供 19 个内置 3D 组件,支持服务端渲染的 schema 定义
npx skills add https://github.com/vercel-labs/json-render --skill react-three-fiberBefore / After 效果对比
1 组从零开始用 Three.js 构建 3D 场景,需要编写大量样板代码,一个简单的 3D 组件需要 2-3 小时,光照、材质、相机设置都需要手动配置
直接使用预置的 19 个 3D 组件,通过 JSON schema 定义场景,10 分钟完成复杂 3D 可视化,支持声明式配置和服务端渲染
react-three-fiber
@json-render/react-three-fiber
React Three Fiber renderer for json-render. 19 built-in 3D components.
Two Entry Points
Entry Point Exports Use For
@json-render/react-three-fiber/catalog
threeComponentDefinitions
Catalog schemas (no R3F dependency, safe for server)
@json-render/react-three-fiber
threeComponents, ThreeRenderer, ThreeCanvas, schemas
R3F implementations and renderer
Usage Pattern
Pick the 3D components you need from the standard definitions:
import { defineCatalog } from "@json-render/core";
import { schema } from "@json-render/react/schema";
import { threeComponentDefinitions } from "@json-render/react-three-fiber/catalog";
import { defineRegistry } from "@json-render/react";
import { threeComponents, ThreeCanvas } from "@json-render/react-three-fiber";
// Catalog: pick definitions
const catalog = defineCatalog(schema, {
components: {
Box: threeComponentDefinitions.Box,
Sphere: threeComponentDefinitions.Sphere,
AmbientLight: threeComponentDefinitions.AmbientLight,
DirectionalLight: threeComponentDefinitions.DirectionalLight,
OrbitControls: threeComponentDefinitions.OrbitControls,
},
actions: {},
});
// Registry: pick matching implementations
const { registry } = defineRegistry(catalog, {
components: {
Box: threeComponents.Box,
Sphere: threeComponents.Sphere,
AmbientLight: threeComponents.AmbientLight,
DirectionalLight: threeComponents.DirectionalLight,
OrbitControls: threeComponents.OrbitControls,
},
});
Rendering
ThreeCanvas (convenience wrapper)
<ThreeCanvas
spec={spec}
registry={registry}
shadows
camera={{ position: [5, 5, 5], fov: 50 }}
style={{ width: "100%", height: "100vh" }}
/>
Manual Canvas setup
import { Canvas } from "@react-three/fiber";
import { ThreeRenderer } from "@json-render/react-three-fiber";
<Canvas shadows>
<ThreeRenderer spec={spec} registry={registry}>
{/* Additional R3F elements */}
</ThreeRenderer>
</Canvas>
Available Components (19)
Primitives (7)
-
Box-- width, height, depth, material -
Sphere-- radius, widthSegments, heightSegments, material -
Cylinder-- radiusTop, radiusBottom, height, material -
Cone-- radius, height, material -
Torus-- radius, tube, material -
Plane-- width, height, material -
Capsule-- radius, length, material
All primitives share: position, rotation, scale, castShadow, receiveShadow, material.
Lights (4)
-
AmbientLight-- color, intensity -
DirectionalLight-- position, color, intensity, castShadow -
PointLight-- position, color, intensity, distance, decay -
SpotLight-- position, color, intensity, angle, penumbra
Other (8)
-
Group-- container with position/rotation/scale, supports children -
Model-- GLTF/GLB loader via url prop -
Environment-- HDRI environment map (preset, background, blur, intensity) -
Fog-- linear fog (color, near, far) -
GridHelper-- reference grid (size, divisions, color) -
Text3D-- SDF text (text, fontSize, color, anchorX, anchorY) -
PerspectiveCamera-- camera (position, fov, near, far, makeDefault) -
OrbitControls-- orbit controls (enableDamping, enableZoom, autoRotate)
Shared Schemas
Reusable Zod schemas for custom 3D catalog definitions:
import { vector3Schema, materialSchema, transformProps, shadowProps } from "@json-render/react-three-fiber";
import { z } from "zod";
// Custom 3D component
const myComponentDef = {
props: z.object({
...transformProps,
...shadowProps,
material: materialSchema.nullable(),
myCustomProp: z.string(),
}),
description: "My custom 3D component",
};
Material Schema
materialSchema = z.object({
color: z.string().nullable(), // default "#ffffff"
metalness: z.number().nullable(), // default 0
roughness: z.number().nullable(), // default 1
emissive: z.string().nullable(), // default "#000000"
emissiveIntensity: z.number().nullable(), // default 1
opacity: z.number().nullable(), // default 1
transparent: z.boolean().nullable(), // default false
wireframe: z.boolean().nullable(), // default false
});
Spec Format
3D specs use the standard json-render flat element format:
{
"root": "scene",
"elements": {
"scene": {
"type": "Group",
"props": { "position": [0, 0, 0] },
"children": ["light", "box"]
},
"light": {
"type": "AmbientLight",
"props": { "intensity": 0.5 },
"children": []
},
"box": {
"type": "Box",
"props": {
"position": [0, 0.5, 0],
"material": { "color": "#4488ff", "metalness": 0.3, "roughness": 0.7 }
},
"children": []
}
}
}
Dependencies
Peer dependencies required:
-
@react-three/fiber>= 8.0.0 -
@react-three/drei>= 9.0.0 -
three>= 0.160.0 -
react^19.0.0 -
zod^4.0.0
Weekly Installs491Repositoryvercel-labs/json-renderGitHub Stars14.3KFirst SeenMar 12, 2026Security AuditsGen Agent Trust HubPassSocketPassSnykPassInstalled oncodex449cursor408gemini-cli407github-copilot406cline398opencode395
用户评价 (0)
发表评价
暂无评价
统计数据
用户评分
为此 Skill 评分