From dt-brigid
3D asset pipeline for Godot 4.6 — Blender to Godot workflow, glTF import, PBR materials, LOD, mesh optimization, MeshInstance3D, and procedural mesh generation
npx claudepluginhub dreamteam-hq/brigid --plugin dt-brigidThis skill uses the workspace's default tool permissions.
glTF 2.0 is the primary interchange format between Blender and Godot.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Checks Next.js compilation errors using a running Turbopack dev server after code edits. Fixes actionable issues before reporting complete. Replaces `next build`.
glTF 2.0 is the primary interchange format between Blender and Godot.
.glb (binary) for production builds — smaller files, faster loading..gltf (text + separate .bin) for debugging — human-readable JSON, diffable in version control.Ctrl+A > All Transforms) to avoid scale/rotation issues in Godot.ResourceLoader.Load<PackedScene>("res://models/asset.glb").Configure in the Godot Import dock after selecting the asset in FileSystem.
.import files are auto-generated metadata — commit them to version control but never edit manually.Godot uses StandardMaterial3D for physically-based rendering.
AlbedoColor or AlbedoTexture.MetallicTexture for per-pixel variation.RoughnessTexture for detail.NormalEnabled = true, assign NormalTexture. Adds surface detail without geometry.EmissionEnabled = true, set Emission color and EmissionTexture for glow effects.meshInstance.SetSurfaceOverrideMaterial(surfaceIdx, material).The primary node for displaying 3D geometry in the scene tree.
Mesh property holds the mesh resource (geometry + surface definitions).BoxMesh, SphereMesh, CapsuleMesh, CylinderMesh, PlaneMesh.ArrayMesh for procedural/runtime-generated geometry (see Procedural Mesh section).GetAabb() for bounds queries and culling logic.CastShadow modes: Off, On, DoubleSided, ShadowsOnly.Critical for MMO performance with many visible entities.
MeshInstance3D.LodBias — per-instance multiplier. Values < 1.0 use lower LODs sooner (better perf), > 1.0 keeps higher LODs longer (better quality).VisibilityRangeBegin / VisibilityRangeEnd — distance thresholds.VisibilityRangeFadeMode — Disabled, Self, or Dependencies for smooth transitions.Runtime mesh generation for terrain, VFX, and dynamic geometry.
SurfaceBegin(), add vertices, SurfaceEnd(). Rebuilt each frame, not for production geometry.ArrayMesh via Commit().AddSurfaceFromArrays(). Best performance for large procedural meshes.SurfaceTool builds geometry, commits to ArrayMesh, assigned to MeshInstance3D.Mesh.CrystalMagica is a 3D MMO platformer (CharacterBody3D, Node3D, Vector3, 3D physics) with a sidescroller camera angle (2.5D gameplay). All engine APIs are 3D — MeshInstance3D and LOD3D apply directly.
Current placeholder meshes — art is not yet in the game. All characters and enemies are represented by built-in primitive meshes:
CapsuleMesh assigned to a MeshInstance3D child of CharacterBody3DSphereMesh or BoxMesh depending on enemy typeBoxMesh platforms and wallsThis is intentional scaffolding. The primitive meshes allow the gameplay, physics, and networking systems to be fully developed before art is integrated.
Future pipeline — when art production begins, the flow will be:
.glbMeshInstance3D.Mesh with the imported mesh resourcegamedev-blender skill for Blender-specific export settings, armatures, and animation retargeting — do not duplicate that content hereIf CrystalMagica adopts sprite art rendered in 3D space (common in 2.5D platformers like Dead Cells, Hollow Knight with 3D backgrounds), Sprite3D is the relevant node:
Sprite3D renders a Texture2D as a billboard or fixed-orientation quad in 3D spaceBillboard = Enabled): sprite always faces the camera — good for VFX, hit numbers, health barsBillboard = Disabled): sprite is placed at a fixed angle in 3D space — good for characters viewed from a consistent camera angle in a sidescrollerSprite3D.PixelSize converts pixel units to 3D world units — calibrate so sprite scale matches CharacterBody3D collision shapeAnimatedSprite3D extends Sprite3D with SpriteFrames — frame-based animation without a full skeletal rigSprite3D participates in 3D rendering (shadow casting, lighting, LOD) unlike a 2D Sprite2D overlaySprite3D (or AnimatedSprite3D) under CharacterBody3D, replacing the placeholder MeshInstance3D when art is readyThis skill covers Godot-side import, materials, and optimization. For Blender-side workflow (export settings, armature prep, UV unwrapping, normal baking), see the gamedev-blender skill. Do not duplicate that content here — load both skills when the full pipeline is in scope.
Techniques for maintaining framerate with large 3D scenes.
ArrayMesh merging or RenderingServer APIs. Reduces draw calls at the cost of per-object culling.VisibleOnScreenNotifier3D to also pause logic on off-screen entities.CharacterBody3D + MeshInstance3D with CharacterBody2D + Sprite2D to achieve a sidescroller look. CrystalMagica runs a 3D physics simulation — mixing 2D nodes breaks collision, physics layers, and the networking model..import files manually: these are generated metadata. Any manual edits are overwritten on reimport. Change settings only via the Godot Import dock.Ctrl+A > All Transforms before glTF export.ImmediateMesh rebuilds every frame and is intended for debug visualization only. Use SurfaceTool → ArrayMesh for any geometry that persists.