From blender-mcp
Full 6-phase terrain cleanup pipeline for photogrammetry tiles - assessment, cleanup, envelope, classification, UV, optimization.
npx claudepluginhub jenkinsm13/claude-plugins --plugin better-blender-mcpThis skill uses the workspace's default tool permissions.
Processes raw photogrammetry terrain tiles from Metashape into clean, classified, UV-mapped meshes ready for game engine export. This is the core workflow for Real Sim Roads.
Guides Next.js Cache Components and Partial Prerendering (PPR): 'use cache' directives, cacheLife(), cacheTag(), revalidateTag() for caching, invalidation, static/dynamic optimization. Auto-activates on cacheComponents: true.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Share bugs, ideas, or general feedback.
Processes raw photogrammetry terrain tiles from Metashape into clean, classified, UV-mapped meshes ready for game engine export. This is the core workflow for Real Sim Roads.
Tool: classify_surfaces(object_name)
For each tile:
classify_surfaces with default thresholds (road > 0.85, cliff 0.2-0.85, vegetation < 0.2)15% canopy: HEAVY (full envelope, may need manual review)
Tools: separate_loose, remove_faces
For MARGINAL, MODERATE, and HEAVY tiles:
separate_loose(object_name, keep_largest=True) - remove disconnected fragmentsremove_faces(object_name, normal_threshold=-0.2) - remove downward-facing + high facesseparate_loose(object_name, keep_largest=True) - clean up post-cut fragmentssave_file()Tool: compute_envelope
For MODERATE and HEAVY tiles only:
compute_envelope(object_name, grid_res=3.0, height_threshold=4.0)separate_loose(object_name, keep_largest=True) - post-envelope cleanupsave_file()Parameters:
grid_res=3.0 - ray grid spacing in meters (smaller = more precise, slower)height_threshold=4.0 - faces this far above ground are canopyTool: classify_surfaces
classify_surfaces(object_name) on all processed tilesTool: project_uv
project_uv(object_name, direction="top_down") on all tilessave_file()Tool: decimate_mesh
Only if tiles exceed target face count:
decimate_mesh(object_name, target_count=1000000)save_file()For each tile:
Phase 1: classify_surfaces -> determine category
If SKIP: go to Phase 5
If MARGINAL: Phase 2 -> Phase 4 -> Phase 5
If MODERATE: Phase 2 -> Phase 3 -> Phase 4 -> Phase 5
If HEAVY: Phase 2 -> Phase 3 -> Phase 4 -> check if < 5% -> Phase 5
Phase 6: if faces > 2M
save_file after every phase