agentleFS
EL4CTEOEL4CTEO/blender-skills/skills/blender-workflow-recipes/SKILL.md

blender-workflow-recipes

Skill779 starsChanged 15 days agoMITView on GitHub

End-to-end Blender 5.2 playbooks chaining the blender-* skills with QA gates - game props (mid-poly, high-to-low), game characters (sculpt/AI mesh to rigged, animated export), Roblox props/accessories/avatars, AI or downloaded asset cleanup, procedural environments, web/AR assets, product turntables, mood/weather shots (night, rain, snow, fog). Use for complete multi-stage asset requests.

The file

We split this skill into the rules it gives an agent

2 rules. About 0 are common, 0 are distinctive, and 2 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈0

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Layered clothing: start from Roblox's official cage templates.

    line 46
  2. Very specific:

    Import (import_asset / generate_3d / file).

    line 51

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Workflow Recipes

S = the skills folder. Every .py runs headless via python S/blender-core/scripts/run_in_blender.py --blend F.blend S/<skill>/scripts/<x>.py -- ..., or live via MCP import + run() (see blender-core). Gate = stop and fix before continuing. Save after every stage (--save).

1. Game prop, mid-poly (fast, no bake)

  1. Blockout at real scale (blender-hardsurface-modeling). Gate: ob.dimensions vs reference.
  2. UV the blockout before beveling (the Bevel/Boolean modifiers carry UVs): uv_pack.py --objects SM_X --method seams --seams-from-sharp 60 → texel_density.py --res 2048 --set 512
  3. apply_stack.py --objects SM_X --preset midpoly [--cutters ...] (keep it live; --apply --triangulate only on the export copy)
  4. Materials: build_pbr_material.py --preset ... or tiling/trim textures.
  5. Gate: qa_check.py --objects SM_X --profile game passes, plus look (angles, material + wireframe).
  6. mesh_stats.py --budget <platform> → make_lods.py --objects SM_X --rename
  7. export_asset.py --preset <engine> --objects SM_X_LOD0 SM_X_LOD1 ... Gate: re-import dims / GLB summary.

2. Game prop, high → low baked (hero quality)

  1. High poly: hardsurface --preset subd or sculpt (sculpt_ops.py), named X_high.
  2. Low: auto_retopo.py --objects X_high --tris N --method planar|decimate|quadriflow, or manual. Rename it SM_X.
  3. uv_pack.py --objects SM_X --method seams --seams-from-sharp 60 --margin-px 16
  4. Gate: qa_check.py on SM_X (game) and X_high (render profile, no inverted parts).
  5. bake_maps.py --low SM_X --high X_high --maps normal ao curvature id --pack-orm [--directx for Unreal]
  6. build_pbr_material.py --name M_X --textures //textures --objects SM_X. Wear/grime: smart_material.py --curvature-map //textures/T_X_CURV.png --ao-map //textures/T_X_AO.png --wear 0.4 --grime 0.4, then self-bake (bake_maps.py --low SM_X --maps basecolor roughness metallic) (blender-texturing).
  7. Gate: look in material shading (no seams/waviness), then steps 6–7 of recipe 1.

3. Game character (sculpt or AI mesh → animated export)

  1. Source mesh (sculpt / generate_3d / scan) at real height, facing -Y, feet on Z=0. Run qa_check.py --profile render.
  2. auto_retopo.py --method quadriflow --tris 20000 (or manual retopo for heroes, keeping the edge flow rules). uv_pack.py --method min_stretch.
  3. bake_maps.py --low Body --high Body_src --maps normal ao basecolor (basecolor via emission override if the source has colors/materials).
  4. rigify_build.py --add basic_human --fit Body → place joints (look xray) → --metarig META_Body --generate
  5. bind_mesh.py --armature RIG_Body --meshes Body → stress_poses.py --armature RIG_Body → look(mode="frames"). Gate: no collapse at the elbows/knees/shoulders. Fix weights.
  6. rigify_build.py --rig RIG_Body --game-skeleton → rig_check.py --armature GAME_RIG_Body --profile unity|unreal 6b. Clothes and hair: garment.py --body Body --group Torso --name Shirt --hide-body --morphs (blender-clothing), groom.py --surface Head --mask Scalp → --cards Hair for engines (blender-hair-grooming). Gate: garment.py --check in every stress pose.
  7. Animate on RIG_Body, or retarget mocap: retarget.py --source Mocap --target RIG_Body --show-map → run (blender-animation). Then bake_action.py --source RIG_Body --target GAME_RIG_Body [--root-motion xy --hips spine] and loop_check.py --fix on cycles.
  8. export_asset.py --preset unity_skeletal|unreal_skeletal --objects GAME_RIG_Body (meshes are included as children). Gate: GLB/FBX summary shows skins + all clips. Engine scale check.

4. Roblox

  • MeshPart prop: recipe 1 with --profile roblox in QA (≤20k tris, watertight, no n-gons, single UV 0–1), separate grayscale maps (no ORM), export_asset.py --preset roblox (FBX) or roblox_gltf. Textures 1024² (PBR).
  • Rigid accessory: ≤4k tris, an attachment point empty matching an R15 _Att name, --preset roblox.
  • Layered clothing: start from Roblox's official cage templates. Build <Name>_InnerCage/_OuterCage (never change cage vertex count/order/UVs), skin to R15 bones, ≤4 influences, no weights on Root. Validate in Studio's Accessory Fitting Tool.
  • Avatar body: 15 _Geo parts, R15 skeleton, attachments, outer cages, 10,742 tri budget. Read blender-export-pipelines/references/roblox.md first.
  • Upload: Studio AssetService:CreateAssetAsync for batches.

5. Cleaning AI-generated / downloaded assets

  1. Import (import_asset / generate_3d / file). Scale to real size (world_bounding_box), origin to the bottom, ground at z=0, transform_apply.
  2. scene_audit.py --fix purge scale → qa_check.py --profile game. Typical findings: non-manifold, duplicate verts, inverted islands, floating debris, z-fighting shells.
  3. Fix: make_lods.py --cleanup (merge/degenerate/loose), recalc normals, delete floating debris (or remesh via sculpt_ops.py for garbage topology), then auto_retopo.py --method decimate to budget.
  4. Re-UV if the UVs are fragmented (uv_pack.py) and re-bake from the original (bake_maps.py --high original).
  5. Gate: QA passes + look. Never ship generated meshes unreviewed.

6. Procedural environment

  1. terrain.py --size 400 --res 513 --type ridged --erosion 30 --material (or --heightmap), then one scatter.py layer per biome element (trees by slope/height, rocks aligned, grass masked) (blender-environment-kits). Custom scatter logic: gn_builder.py (recipes in blender-geometry-nodes/references/recipes.md). Modular buildings: kit_check.py --grid 0.5 --fix on every kit piece.
  2. Assets to scatter: optimized props with LODs (recipe 1). Keep instances (don't realize) for engines that support instancing (export_gpu_instances).
  3. Gate: mesh_stats.py on the evaluated result, plus look from the gameplay camera height.

7. Web / AR asset

Recipe 1 or 2 with budgets --budget web (≤30k tris, 1–2 materials, 2k textures) → export_asset.py --preset web (meshopt + WebP) → optional gltf-transform optimize --texture-compress ktx2. USDZ for iOS AR: --preset usd --out x.usdz. Gate: GLB summary (size < 5 MB) and Khronos PBR Neutral look-dev match.

8. Product shot / turntable

  1. Materials with measured values (build_pbr_material.py --preset), and QA for z-fighting/floating parts (very visible in close-ups).
  2. Set the render resolution, then turntable.py --objects Product --rig studio --backdrop --frames 120 --lens 85
  3. render_batch.py --preset preview --frames 1 → review → --preset product --frames 1-120 --format PNG → encode, or --format MP4.
  4. Gate: no fireflies or clipped highlights (AgX / Khronos PBR Neutral), and the product sits on the backdrop (contact shadow).

9. Mood / weather shot (rainy night, snowy morning, foggy dawn)

  1. Scene at real scale with a camera. QA the hero assets first (wet reflections and snow expose z-fighting and gaps).
  2. scene_mood.py --time night --fog-visibility 250 (or --mood cyberpunk|horror|underwater|desert). Add practical lights (street, windows, neon) at real color temperatures.
  3. Weather: precipitation.py --type rain --intensity heavy --ground <ground/roofs> → surface_weather.py --objects <surfaces> --wetness 0.7 --puddles 0.4 --ripples 1 --streaks 0.5 → lightning.py --flashes 2. Snow: --type snow + --snow 0.8 --snow-depth 0.06.
  4. Gate: render_batch.py --preset preview --frames <mid>,<flash> at the final aspect ratio. Rain must read (backlit), puddles must reflect a light, the night must keep contrast. Then render the full loop (frame range = the precipitation loop).

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.