blender-workflow-recipes について
Blenderで3Dアセットを制作する人向けのワークフローレシピ集です。ゲーム用プロップ、キャラクター、環境、製品レンダーなどの作業別に手順をまとめ、各段階の品質確認やクリーンアップ、ベイク、エクスポートを扱います。
主な機能
- 01ゲーム用プロップの高・低ポリ手順
- 02キャラクターのリギングとアニメーション出力
- 03Robloxアセットの制作手順
- 04生成アセットの整理と品質確認
- 05プロシージャル環境と製品レンダー
活用シーン
- 01ゲーム用プロップの制作と出力
- 02アニメーション用キャラクターメッシュの準備
- 03生成・取得モデルの整理と最適化
- 04製品ターンテーブルや環境レンダーの作成
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ el4cteo/ blender-skills --skill blender-workflow-recipesインストール後、Claude Code で/blender-workflow-recipesを入力して読み込まれたか確認します。
詳細
ワークフローレシピ
S = スキルフォルダーです。すべての .py は python S/blender-core/scripts/run_in_blender.py --blend F.blend S/<skill>/scripts/<x>.py -- ... でヘッドレス実行するか、MCP からインポートして run() を実行することでライブ実行できます(blender-core を参照)。ゲート = 続行する前に停止して修正します。各ステージの後に保存します(--save)。
1. ゲーム用プロップ、ミッドポリ(高速、ベイクなし)
- 実寸でブロックアウトします(
blender-hardsurface-modeling)。ゲート:ob.dimensionsとリファレンスを比較します。 - ベベル前にブロックアウトの UV を作成します(Bevel/Boolean モディファイアーは UV を引き継ぎます):
uv_pack.py --objects SM_X --method seams --seams-from-sharp 60→texel_density.py --res 2048 --set 512 apply_stack.py --objects SM_X --preset midpoly [--cutters ...](ライブ状態を維持します。エクスポート用コピーにのみ--apply --triangulateを指定します)- マテリアル:
build_pbr_material.py --preset ...またはタイリング/トリムテクスチャを使用します。 - ゲート:
qa_check.py --objects SM_X --profile gameに合格し、さらにlook(角度、マテリアル+ワイヤーフレーム)を確認します。 mesh_stats.py --budget <platform>→make_lods.py --objects SM_X --renameexport_asset.py --preset <engine> --objects SM_X_LOD0 SM_X_LOD1 ...ゲート:再インポート後の寸法/GLB の概要を確認します。
2. ゲーム用プロップ、ハイポリからベイク済みローポリへ(高品質)
- ハイポリ:ハードサーフェスでは
--preset subdを使用するか、スカルプト(sculpt_ops.py)を行い、X_highと命名します。 - ローポリ:
auto_retopo.py --objects X_high --tris N --method planar|decimate|quadriflowを実行するか、手動で作成します。SM_Xに名前を変更します。 uv_pack.py --objects SM_X --method seams --seams-from-sharp 60 --margin-px 16- ゲート:
SM_X(game)とX_high(render プロファイル、反転したパーツなし)の両方に対してqa_check.pyを実行します。 bake_maps.py --low SM_X --high X_high --maps normal ao curvature id --pack-orm [--directx for Unreal]build_pbr_material.py --name M_X --textures //textures --objects SM_X(+テクスチャリングでベースカラー/ラフネスを設定します)。- ゲート:マテリアルシェーディングで
lookを確認し(継ぎ目/波打ちなし)、レシピ 1 の手順 6~7 に進みます。
3. ゲームキャラクター(スカルプトまたは AI メッシュからアニメーション付きエクスポートへ)
- ソースメッシュ(スカルプト/
generate_3d/スキャン)を実際の身長で作成し、-Y 方向を向かせ、足を Z=0 に配置します。qa_check.py --profile renderを実行します。 auto_retopo.py --method quadriflow --tris 20000を実行します(またはヒーローキャラクターの場合は、エッジフローのルールを守って手動でリトポロジーします)。uv_pack.py --method min_stretchを実行します。bake_maps.py --low Body --high Body_src --maps normal ao basecolorを実行します(ソースにカラー/マテリアルがある場合は、エミッションオーバーライドを使ってベースカラーをベイクします)。rigify_build.py --add basic_human --fit Bodyを実行し、関節を配置して(X 線表示で確認)、--metarig META_Body --generateを実行します。bind_mesh.py --armature RIG_Body --meshes Body→stress_poses.py --armature RIG_Body→look(mode="frames")を実行します。ゲート:肘/膝/肩が潰れていないことを確認します。ウェイトを修正します。rigify_build.py --rig RIG_Body --game-skeleton→rig_check.py --armature GAME_RIG_Body --profile unity|unreal- RIG_Body 上でアニメーションを作成します(
blender-animation)→bake_action.py --source RIG_Body --target GAME_RIG_Body [--root-motion xy --hips spine] export_asset.py --preset unity_skeletal|unreal_skeletal --objects GAME_RIG_Bodyを実行します(メッシュは子として含まれます)。ゲート:GLB/FBX の概要にスキンとすべてのクリップが表示されることを確認します。エンジン内でスケールを確認します。
4. Roblox
- MeshPart プロップ:レシピ 1 をベースに、QA で
--profile robloxを指定します(20k トライアングル以下、ウォータータイト、N ゴンなし、UV は 0~1 の範囲で 1 セット)。グレースケールマップを個別に用意し(ORM は使用しません)、export_asset.py --preset roblox(FBX)またはroblox_gltfでエクスポートします。テクスチャは 1024²(PBR)です。 - 剛体アクセサリー:4k トライアングル以下とし、R15 の
_Att名に一致するアタッチメントポイントのエンプティを用意し、--preset robloxを指定します。 - レイヤード衣服:Roblox の公式ケージテンプレートから始めます。
<Name>_InnerCage/<Name>_OuterCageを作成します(ケージの頂点数/順序/UV は絶対に変更しません)。R15 ボーンにスキンを設定し、インフルエンスは 4 以下、Root にはウェイトを設定しません。Studio の Accessory Fitting Tool で検証します。 - アバターのボディ:15 個の
_Geoパーツ、R15 スケルトン、アタッチメント、アウターケージを用意し、トライアングル数を 10,742 以下にします。最初にblender-export-pipelines/references/roblox.mdを読みます。 - アップロード:複数アセットのアップロードには Studio の
AssetService:CreateAssetAsyncを使用します。
5. AI 生成/ダウンロードしたアセットのクリーンアップ
- インポート(
import_asset/generate_3d/ file)。実寸にスケールし(world_bounding_box)、原点を底面に合わせ、地面を z=0 に設定して、transform_applyを実行します。 scene_audit.py --fix purge scale→qa_check.py --profile gameを実行します。よくある検出項目:非多様体、重複頂点、法線が反転した島状部分、浮遊する破片、Z ファイティングを起こすシェル。- 修正:
make_lods.py --cleanup(マージ/縮退/ルーズ要素の処理)を実行し、法線を再計算して、浮遊する破片を削除します(トポロジーがひどい場合はsculpt_ops.pyからremeshを実行)。その後、auto_retopo.py --method decimateで予算に収めます。 - UV が分断されている場合は再 UV 展開し(
uv_pack.py)、オリジナルから再ベイクします(bake_maps.py --high original)。 - 確認条件:QA に合格し、
lookで確認すること。生成メッシュは、レビューせずにリリースしないでください。
6. プロシージャル環境
- 地形/地面メッシュを作成し、次に
gn_builder.py --spec scatter.json --apply Ground --set Density=... Seed=...で樹木を散布します(レシピはblender-geometry-nodes/references/recipes.mdを参照)。 - 散布するアセットには、LOD を設定した最適化済みのプロップ(レシピ 1)を使用します。インスタンス化に対応したエンジンでは、インスタンスを維持してください(実体化しない)(
export_gpu_instances)。 - 確認条件:評価後の結果に対して
mesh_stats.pyを実行し、ゲームプレイカメラの高さからlookで確認します。
7. Web/AR アセット
レシピ 1 または 2 を使用し、--budget web の予算(≤30k トライアングル、マテリアル 1~2 個、テクスチャ 2k)に収めます → export_asset.py --preset web(meshopt + WebP)を実行します → 必要に応じて gltf-transform optimize --texture-compress ktx2 を実行します。iOS AR 用の USDZ:--preset usd --out x.usdz。確認条件:GLB の概要(サイズ < 5 MB)と Khronos PBR Neutral のルックデブの一致。
8. 製品ショット/ターンテーブル
- 実測値を使ってマテリアルを作成し(
build_pbr_material.py --preset)、Z ファイティング/浮遊するパーツの QA を行います(クローズアップでは特に目立ちます)。 - レンダリング解像度を設定してから、
turntable.py --objects Product --rig studio --backdrop --frames 120 --lens 85を実行します。 render_batch.py --preset preview --frames 1→ レビュー →--preset product --frames 1-120 --format PNGを実行してエンコードするか、--format MP4を使用します。- 確認条件:ファイアフライや白飛びしたハイライトがないこと(AgX / Khronos PBR Neutral)。また、製品が背景に接地していること(接地影)。
9. ムード/天候ショット(雨の夜、雪の朝、霧の夜明け)
- カメラを設置し、実寸スケールでシーンを作成します。まず主要アセットの QA を行います(濡れた反射や雪によって、Z ファイティングや隙間が目立ちます)。
scene_mood.py --time night --fog-visibility 250(または--mood cyberpunk|horror|underwater|desert)を実行します。実際の色温度に合わせて、実用光源(街灯、窓、ネオン)を追加します。- 天候:
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。雪の場合:--type snow+--snow 0.8 --snow-depth 0.06。 - 確認条件:最終アスペクト比で
render_batch.py --preset preview --frames <mid>,<flash>を実行します。雨が認識でき(逆光で照らされている)、水たまりに光が反射し、夜景のコントラストが保たれている必要があります。その後、ループ全体をレンダリングします(フレーム範囲 = 降水ループ)。
コメント
Markdown 対応