← LeaderboardThe Skill Leaderboard

blender-workflow-recipes

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.

Published by EL4CTEO ↗EL4CTEO/blender-skills

Try your first task

A source-grounded starter task has not been verified for this skill yet.

SKILL.md

name: blender-workflow-recipesdescription: 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.license: MITmetadata:   author: blender-agent-skills  version: "1.2.0"

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).