threejs
暂无简介
- License 许可
- Apache-2.0
- 最近更新
- 2026-04-21
- Stars
- ★ 0
- Forks
- 0
02 资源文件 6
- 参考文档references/joint-type-heuristics.md1.1 KB
- 参考文档references/link-export-rules.md680 B
- 参考文档references/urdf-minimal.md677 B
- 脚本scripts/build_urdf_from_scene.mjs3.8 KB
- 脚本scripts/export_instanced_obj.mjs1.7 KB
- 脚本scripts/export_link_objs.mjs2.8 KB
03 SKILL.md 正文
Three.js Scene Graph + Export
Quick start
- Load the module, call
createScene(), thenupdateMatrixWorld(true). - Treat named
THREE.Groupnodes as parts/links. - Assign each mesh to its nearest named ancestor.
- Bake world transforms into geometry before export.
- Export per-part OBJ (and optionally URDF) using deterministic ordering.
Scene graph essentials
Object3D (root)
├── Group (part)
│ ├── Mesh
│ └── Group (child part)
│ └── Mesh
└── Group (another part)
└── Mesh
THREE.Scene/THREE.Object3D: containersTHREE.Group: logical part (no geometry)THREE.Mesh: geometry + material
Part partitioning rules
- Parts are named groups at any depth.
- Each mesh belongs to the nearest named ancestor.
- Nested named groups are separate parts; do not merge their meshes into parents.
- Skip empty parts; sort part names for determinism.
function buildPartMap(root) {
const parts = new Map();
root.traverse((obj) => {
if (obj.isGroup && obj.name) parts.set(obj.name, { group: obj, meshes: [] });
});
root.traverse((obj) => {
if (!obj.isMesh) return;
let parent = obj.parent;
while (parent && !(parent.isGroup && parent.name)) parent = parent.parent;
if (parent && parts.has(parent.name)) parts.get(parent.name).meshes.push(obj);
});
return Array.from(parts.values()).filter((p) => p.meshes.length > 0);
}
Mesh baking (world transforms)
Always bake transforms before export:
root.updateMatrixWorld(true);
let geom = mesh.geometry.clone();
geom.applyMatrix4(mesh.matrixWorld);
if (geom.index) geom = geom.toNonIndexed();
if (!geom.attributes.normal) geom.computeVertexNormals();
InstancedMesh expansion
const tempMatrix = new THREE.Matrix4();
const instanceMatrix = new THREE.Matrix4();
obj.getMatrixAt(i, instanceMatrix);
tempMatrix.copy(obj.matrixWorld).multiply(instanceMatrix);
Axis conversion (Y-up to Z-up)
const axisMatrix = new THREE.Matrix4().makeRotationX(-Math.PI / 2);
geom.applyMatrix4(axisMatrix);
Per-part OBJ export
- Collect meshes owned by each part.
- Do not traverse into child named groups when exporting a part.
- Merge baked geometries per part and write
<part>.obj.
Reference: references/link-export-rules.md.
Relation between Three.js and URDF articulation
- Use named groups as links.
- Parent is the nearest named ancestor link.
- Joint type defaults to
fixedunless evidence suggestsrevolute/prismatic. - Sort link and joint names for determinism.
References:
references/joint-type-heuristics.mdreferences/urdf-minimal.md
Scripts
- InstancedMesh OBJ exporter:
node scripts/export_instanced_obj.mjs - Per-link OBJ exporter:
node scripts/export_link_objs.mjs --input <scene_js> --out-dir <dir> - URDF builder:
node scripts/build_urdf_from_scene.mjs --input <scene_js> --output <file.urdf> --mesh-dir <mesh_dir>
Adjust inputs/outputs inside scripts as needed.
04 同仓库更多 Skills
data-reconciliation
暂无简介
speech-to-text
Transcribe video to timestamped text using Whisper tiny model (pre-installed).
video-processor
Process videos by removing segments and concatenating remaining parts. Use when you need to remove detected pauses/openings from videos, create highlight reels, or batch process segment removals using ffmpeg filter_complex.
silence-detector
Detect initial silence segments in audio/video using energy-based analysis. Use when you need to find low-energy periods at the start of recordings (title slides, setup time, pre-roll silence).
segment-combiner
Combine multiple segment detection results into a unified list. Use when you need to merge segments from different detectors, prepare removal lists for video processing, or consolidate detection outputs.
report-generator
Generate compression reports for video processing. Use when you need to create structured JSON reports with duration statistics, compression ratios, and segment details after video processing.