본문으로 건너뛰기
cccskills
무료GitHub에 공개

scenario-blender-rigging

Use when rigging a character, creature or prop in Blender through Python: "rig this character", Rigify metarig fitting or generation errors, automatic weights or "Bone Heat Weighting failed", weight painting fixes, clothes that do not follow, IK/FK switch, foot roll, twist bones, drivers and custom properties, corrective shape keys, a stylized face rig, ARKit 52 blend shapes or viseme shape keys for face capture, lip sync or a game engine, a mechanical or hard-surface rig, or testing how a rig deforms.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

연동 도구Blender
설치 방법 보기

포함된 파일(7)

  • SKILL.md19.4 KB
  • references/critique.md12.8 KB
  • references/expert-notes.md28.3 KB
  • references/face-shapes.md5.0 KB
  • references/procedures.md20.6 KB
  • references/sources.md19.7 KB
  • scripts/bx_rig.py136.4 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Blender rigging

Expert rigging means the rig is specified by bone placement, proven by deformation under stress poses, and shaped around what the animator will actually use. The stance of every source expert: place joints precisely, generate or build the simplest mechanism that works, then pose it, measure it, render it and fix it before calling it done. If a sibling skill named here is missing from your available skills, ask the user to install it (npx skills add scenario-labs/skills --skill <name>); unattended, proceed from tool schemas and flag the gap.

REQUIRED BACKGROUND: scenario-blender-expert (execution channel, review loop, 5.2 API changes).

Module: scripts/bx_rig.py (tested on 5.2.1, headless and GUI). import sys; sys.path.append("<skills>/scenario-blender-rigging/scripts"); import bx_rig as R.

Stance (the expert delta)

  • Placement is the specification. Joints sit in the center of the volume they move, not on the anatomical skeleton ("bones simulate bone, muscle and tissue"); knees and elbows get a slight pre-bend because the chain's curvature IS the IK plane; rolls put each hinge on one local axis so the animator uses one curve (CGDive; Demeter: the bend, not the roll, decided where his pole landed).
  • The metarig is the source, the generated rig is disposable. Every fix goes into metarig bones, Rigify parameters or a post-generation script; regenerating keeps control names, so weights and animation survive (CGDive, Demeter, Ivan Cappiello).
  • Automatic weights fail silently. parent_set returns FINISHED while a warning says bone heat failed; measure unweighted vertices and empty deform groups, and fall back to a voxel proxy plus Data Transfer (CGDive; verified). They also leak across the crotch and armpits: strip .L weights from the right half.
  • Weights are judged in motion, firm beats mushy. Paint in pose or against a test animation; limit each seam to 2 or 3 bones ("bones fighting for influence"); slight intersection is better than rubbery transitions; rigid parts are assigned at 1.0, never painted (CGDive, Demeter, Dikko).
  • Everything that deforms together gets weights from the same source, transferred and applied, so garments cannot drift while animating (Dikko, CGDive).
  • Export decides the deformation tools. Four twist bones per segment instead of Preserve Volume; Preserve Volume, Corrective Smooth and B-bones are Blender-only, which is why Rigify segments its DEF bones (CGDive, Ivan).
  • The animator is the client. Cut features nobody uses, restrict only what breaks the rig, keep automated bones hand-animatable (constraint plus child, Mix Add, Transformation instead of drivers), stop when fit for purpose (Wayne Dixon, Demeter, CGDive).
  • Faces are per-character hybrids. There is no generic stylized face (Demeter); production faces mix joints, ribbons, shape keys and lattices (Rik Schutte).

Establish first

InputChangesDefault when silent
Target: Blender render vs game/FBXsegmented DEF bones, max 4 influences, no Preserve Volume / Corrective Smooth / B-bone deformationBlender-only keyframe animation
Character: biped, quadruped, mechanical, propmetarig preset or custom samples; rigid islandsbiped, Rigify
Face need and stylenone / Rigify face / bones + shape keys + on-face controlsbody rig + eye and jaw bones only
FingersRigify Human (fingers + face) vs Basic HumanBasic Human (CGDive: first rig)
Pose, pieces, scaleT or A pose, separate eyes/teeth/clothes, real scalemeasure; fix in the model check
Animator conventionsFK/IK defaults, side colors, finger controlslegs IK, arms FK, follow 0; left blue, right red (ask)

Choose the path

RigifyManual / scripted rig
Humans and animals with standard anatomy, many characters sharing controls, fast production-grade resultUnusual anatomy, mechanical parts, strict game-engine hierarchies, rigs that must stay small, or when the brief asks for a custom control scheme
add_metarig then fit_metarig, generatenew_bone, twist_chain, fk_ik_switch, ik_chain, foot_roll, make_def_layer, organize
Metarig types: arm exactly 3 bones, leg 4 + heel, spine 3+, super_copy 1 boneDEF / MCH / CTRL: only DEF deforms, MCH is never animated, everything else is a control

Workflow

  1. Model check. R.model_check([body, *parts], fix=True): transforms applied (shape keys included), feet on Z=0, centered on X, facing -Y, about 1.8 m for an adult human. Apply Mirror modifiers or keep their mirror object. GATE: model_check(...)["problems"] == [].
  2. Landmarks. lm = R.landmarks(body, eyes=eyes): cross-sections find crotch, hips, ankle, neck, armpit, wrist; eye centers from the eye mesh; nose tip and chin from the face profile. Override any joint with overrides={...}. GATE: joint order sane, lm["notes"] empty or explained.
  3. Fit. Rigify: meta = R.add_metarig("basic"|"human"), R.fit_metarig(meta, lm) (joints as shared points, pre-bends, hinge rolls, left side symmetrized; hands and face by similarity, coarse). Manual: build the deform skeleton with new_bone from the same landmarks. GATE: R.check_metarig(meta, body) == [] AND R.placement_sheet([body, eyes], out, arm_obj=meta, views=("front","right","top")) looked at; zoom the head with center=, size=.
  4. Face (Rigify Human). Fit, then R.upgrade_face(meta) (irreversible; eyelid follow Z 0.3, bottom lip 0.9, Overwrite Widget Meshes on). Stylized hero face: bones for jaw, eyes, tongue plus shape keys instead (stage 7).
  5. Generate or build. rig, err = R.generate(meta); err is the first Rigify error line naming the bone ("Cannot connect chain - bone position is disjoint", "Expected 2 eye corners"): fix the metarig, regenerate. Manual: twist chains, FK/IK layers with settings properties, IK with solved pole angle, foot roll, symmetrize, mirror_drivers, make_def_layer, organize, widgets. GATE (manual): static_cycles == [], cycle_check() == [], root_test < 1e-4, FK and IK coincide at rest, pole error < 1e-3.
  6. Bind. rep = R.bind(rig, body, garments=[shirt, pants], rigid={eyes: None, teeth: "DEF-teeth.T"}): auto weights, verification, proxy fallback, cross-side strip, garment transfer (applied), rigid islands, clean and normalize, Armature after Mirror and before Subdivision. GATE: rep["ok"], unweighted == 0, no non-deform groups; for export max_influences=4.
  7. Range of motion. dr = R.deformation_report(rig, [body, *garments], R.RIGIFY_POSES), R.flag_report(dr), then R.pose_sheet(...) and R.joint_sheet(...) close-ups and LOOK at them. GATE: no leaks, no unexplained collapse, renders acceptable at armpit, elbow, wrist twist, groin, knee, collar.
  8. Fix, in this order. Placement or roll problems: back to the metarig and regenerate. Weights: targeted data edits (strip_opposite_side, assign_rigid, smooth_weights with a vertex mask, clean_weights). Volume at deep bends: corrective shape keys (volume_restore_targets, corrective_from_targets, corrective_driver). Blender-only candy wrapper: preserve_volume_mask. Re-run stage 7 after every fix; re-check earlier poses (CGDive).
  9. Usability and delivery. Controls visible with In Front off, widgets, side colors, MCH/DEF hidden, at least one Rigify UI row, rig_ui.py needs Auto Run in a GUI, switches exactly 0 or 1, rest pose clean, test action removed. Report numbers, renders and what was not verified.

Numbers

ValueRelative toSource
Knee/elbow pre-bend 1 to 3 deg (fit: 1.2% of limb length, 2.7 deg); check 1 to 15chain in the bend viewCGDive; check [added]
4 twist bones, Copy Rotation 1.0 / 0.66 / 0.33 / 0.1 (thigh 0.05)from the driving endCGDive
IK chain length 2; IK Stretch 0.1; lock IK Y/Z on shin and forearmIK boneWayne, CGDive
Foot roll: heel X [-90, 0], toe X [0, 90], inside/outside Z one-sidedpivot local, roll 0, pointing upCGDive (verified)
Weight brush Add, strength 0.1 to 0.2, Auto Normalize; seams Mix 0.5 at strength 1Weight PaintCGDive
Clean near-zero weights before blurring (Demeter); limit 0.001 (CGDive), 0.01 in bind [added]; 4 influences for gamesper vertexDemeter, CGDive
Eyelid follow 0.15 (bone face); Rigify eyelid follow Z 0.3 (default 0.7); jaw bottom lip 0.9; mouth corners follow jaw 0.5faceCGDive
Palm 0.5 / 0.25; elbow plate 0.2 of forearm rotationCopy Rotation Local, Mix AddCGDive
Finger curl: Transformation Scale Z 0..1 to Rot Z 90..0 deg, Extrapolatefinger controlCGDive
Action constraint: keys frames 1 and 10, LINEAR, max = measured control travelcontrol local YCGDive, Demeter
Shoulder test range about 20 to 30 deg of clavicle raiseanatomyCGDive
Face: about 16 Stop Staring shapes; 52 ARKit for mocapshape keysCGDive
Proxy voxel H/180, then H/90, H/45character height[added, verified]
Collapse < 0.85, bulge > 1.25 (joint band), leak > 0.001 H, strain 0.5 to 1.6rest[added]

Quality gates

Code (all in bx_rig): check_metarig, weight_report (unweighted, empty_major, non_deform_groups, over4, sum_dev, mirror_err), deformation_report + flag_report (strain, joint volume bands, cross-side leak, new self-intersections via bx_audit), static_cycles, cycle_check, root_test, twist_angles, solve_pole_angle, rigid_check.

Visual: placement sheet (front, right, top; head zoom) before generating; pose sheet of RIGIFY_POSES (front, right, three-quarter); joint close-ups (arm joints front/top/three-quarter, others front/right/three-quarter) at every flagged pose. Look for armpit collapse, pointy or pinched elbows and knees, candy-wrapper wrists, groin and butt volume, collar clipping, garments sliding or intersecting, teeth and eyes lagging, widgets hidden inside the mesh. Numbers passed while a render showed broken arms or crease spikes during testing: always open the render. Rubric: references/critique.md.

Face shapes for engines and capture

Face capture apps, engines and lip-sync tools find shape keys by exact name. A key named with the wrong case (JawOpen) or still equal to the Basis animates nothing. Both survive FBX and glTF export [verified], so the file looks complete.

  • R.SHAPE_SETS: "arkit" (Apple's 52 names) and "visemes" (Meta Lipsync's 15, sil to U). Lists, sources and Roblox's 50 FACS poses: references/face-shapes.md.
  • R.shape_set(face, "arkit", rename={"JawOpen": "jawOpen"}) renames, then adds each missing key at value 0 as a copy of the Basis, and returns the names it created. Existing keys keep their value: set every key to 0 before export, or the face deforms at rest.
  • Sculpt the Left keys, then build each Right with R.mirror_shape_key(face, n, n[:-4] + "Right") for every n in R.ARKIT_52 ending in Left.
  • Before export, R.shape_report(face, "arkit"). GATE: missing, wrong_case and side_conflicts empty, left_is == "+X".
  • empty is the list of keys still to sculpt: report it when delivering placeholders, empty it for a final head. The sil viseme is the neutral face, so it always stays in empty.
  • Sides: Apple's pages say "left eye" without saying whose, and its face coordinate space puts +X on the face's own left. Build Left keys on the character's left (+X, the .L side) and check one capture take before sculpting the whole set.
  • Roblox dynamic heads take joint poses, one per frame from frame 1 with the neutral face on frame 0, not shape keys.

Common mistakes

MistakeWhat it looks likeFix
Metarig scale or pose not appliedgenerated rig differs in size or poseapply scale, Apply Pose as Rest Pose
Neck moved without the spine tip"bone position is disjoint"move joints as units (move_points)
Straight knee or elbowIK bends sideways or backwardpre-bend in the bend view
Parented to the metarigmesh follows nothing usefulbind to the generated rig
Heat failure unnoticedmesh does not moveweight_report; proxy route
Armature below Subdivision, or before Mirrorslow; mirrored half copies the posed halfarmature_first
Left thigh weights on the right legopposite side movesstrip_opposite_side
Eyes and teeth auto-weighteddrift, poke throughassign_rigid
Live Data Transfer on clothesweights change while animatingapply it
Driver on an animatable bonechannel cannot be keyedTransformation or Copy Rotation Mix Add
Inherit Rotation off for isolationroot rotation breaks the limbfollow bones (World Copy Loc/Rot/Scale)
IK target parented inside its chainjitter, flipsclear parent; static_cycles
Re-parenting a connected bonehead jumps to the new parent's tailreparent clears use_connect first
Symmetrize expected to copy drivers; .L.001 namesright side deadmirror_drivers; side_of
IK/FK left at 0.86mixed, unreadable deformationexactly 0 or 1
ARKit key misspelled or left at the Basiscapture app or engine moves nothingshape_set, then shape_report

Blender 5.2 notes

  • Rigify ships disabled on factory startup (enable_rigify); the Human metarig still has the legacy face (upgrade it); Overwrite Widget Meshes still defaults off.
  • Bone collections and per-bone colors replace layers and bone groups; edit_bones.new() joins no collection; pose selection is pose.bones[n].select.
  • parent_set appends the Armature modifier last; weight operators (vertex_group_smooth, _clean) need Weight Paint mode headless; bx_rig does clean, normalize and limit on data instead.
  • shape_key_add leaves new keys at value 1.0 in 5.2.1: set 0 before driving [verified]. VertexGroup.remove with out-of-range indices crashes 5.2.1 [verified].
  • Setting a parent's tail moves a connected child's head; EditBone.transform on a connected group double-moves shared ends [verified]: use transform_bones.
  • Python drivers start with keys (0,0),(1,1); remap them (remap_driver). Action constraints pick the action slot automatically. Only Insert Available is on by default; keyframe_insert from Python is unaffected.
  • Custom shapes: Affect Gizmo (use_transform_at_custom_shape), Use As Pivot (use_transform_around_custom_shape). 5.2 adds Duplicate and Rename and Add Bone align Axes.

References

  • references/procedures.md: full tested code for each stage and the test script behind it; load before writing rig code.
  • references/expert-notes.md: judgment by expert (placement, Rigify internals, weighting, mechanisms, faces) with timestamps; load when a decision is not covered above.
  • references/critique.md: the review rubric; load at every gate.
  • references/face-shapes.md: ARKit, viseme and Roblox FACS names with their sources; load when naming face shapes for an engine or capture app.
  • references/sources.md: videos, experts, best timestamps.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Handle review comments received on GitHub for the current branch's PR or a given PR number or URL, by triaging each unresolved thread, fixing what is warranted, pushing, and replying in each thread, when asked to address, fix or answer PR comments. Works in any Scenario repository.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

scenario-labs/skills1.1천2026년 10월 21일 업데이트

Generate one short Conventional Commits squash message describing only the net diff between the PR's base and head, set its header as the PR title, validate it with the repository's commitlint and both copy its description to the clipboard and display it, when asked for a squash message. Works in any Scenario repository, whatever its default branch.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

scenario-labs/skills1.1천2026년 10월 21일 업데이트

Refresh the current pull request description from its net changes, following the repository's PR template, when asked to update or write the PR summary. Works in any Scenario repository, whatever its default branch.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

scenario-labs/skills1.1천2026년 10월 21일 업데이트

scenario

무료

Use when connecting an AI agent to Scenario (scenario.com) through MCP, or when a task involves generating images, video, 3D, audio, sprites, textures, or game assets. Also when picking a Scenario model, running a LoRA, refining a generation prompt, uploading reference images, waiting on generation jobs, checking credits or quota, hitting Scenario auth, scope, or Forbidden errors, or setting up mcp.scenario.com in Claude Code, Cursor, VSCode, or another agent.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

scenario-labs/skills1.1천2026년 10월 21일 업데이트

Use when generating or handling 3D assets through the Scenario MCP server, including text-to-3D or image-to-3D meshes, GPT-6 Astra 3D or Claude Opus 5.5 3D, GLB, FBX, OBJ, STL, or VOX files, PBR-textured or game-ready models, voxel models, multi-view reconstruction, editing a mesh by prompt, retexture, remesh, UV unwrap, auto-rigging a biped or quadruped, or retargeting an animation, previewing a mesh in the 3D viewer, or downloading a model for import into Unity, Unreal, Godot, or Blender.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

scenario-labs/skills1.1천2026년 10월 21일 업데이트

Use when generating navigable 3D worlds or Gaussian splat scenes on Scenario via MCP: text-to-world, image-to-world, a 360 panorama or skybox turned into a walkable splat, multi-view photos or a video walkthrough reconstructed as a splat, or one object photo to splat. Keywords: World Labs Marble 1.1, 1.1 Plus, 1.0 Draft, Hunyuan World, HY World, image-to-skybox, skybox-to-splat, multiview-to-splat, TripoSplat, gaussian splatting, 3DGS, spz, world generation, explorable scene, VR.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

scenario-labs/skills1.1천2026년 10월 21일 업데이트

scenario-labs의 스킬 모두 보기

이 스킬의 문제 신고