scenario-maya-modeling について
ハードサーフェス、有機モデル、プロップ制作を対象とする、Agent向けのMayaモデリングスキルです。トポロジーの指針とスクリプト検査を組み合わせ、品質確認と引き渡しを支援します。
主な機能
- 01目的に沿ったトポロジー設計
- 02ブロックアウトから納品までの手順
- 03スクリプトによる形状監査と検証
- 04ハイライトとシルエットのレビュー
- 05ゲーム、サブディビジョン、変形の検査
活用シーン
- 01ゲーム用プロップメッシュの制作
- 02クローズアップ用サブディビジョンモデルの準備
- 03アセット引き渡し前のトポロジー確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ scenario-labs/ skills --skill scenario-maya-modelingインストール後、Claude Code で/scenario-maya-modelingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/critique.mdexpert-notes.mdgui-paths.mdprocedures.mdsources.mdscripts/mx_modeling.py詳細
Maya モデリング(ハードサーフェス、有機的な形状、小道具)
エキスパートによるモデリングとは、目的のあるトポロジーを作ることです。各ループはシルエット、ハイライト、ベイク、UV シーム、または関節のために存在し、モデルは後工程で次の担当者がクリーンアップする必要のない状態で渡されます。エージェントは大きな形状から細部へ進み、ツールキットで各段階を計測し、金属のハイライトをレンダリングしてからサーフェスを確認します。ここで挙げた同系列のスキルが利用可能なスキルにない場合は、ユーザーにインストールを依頼してください(npx skills add scenario-labs/skills --skill <name>)。無人で作業を進める場合は、ツールのスキーマに基づいて進め、不足している点を明記します。
必須の背景知識: scenario-maya-expert(実行チャネル、レビューループ、2027 年版の注意点)。
ツールキット:scripts/mx_modeling.py
(sys.path[:0] = ["<skills>/scenario-maya-modeling/scripts", "<skills>/scenario-maya-expert/scripts"]; import mx_modeling as MM)。
mx_audit、mx_validate、mx_review、mx_run と併用します。Maya ではまだ実行していません: 純 Python レイヤーのオフラインテストには合格していますが、Maya の呼び出しはすべて tests/code/maya-modeling/run_all.sh での実行待ちです。
方針(エキスパートとの差分)
- まず目的、次に密度。 CAD やブーリアンの静止画ならクリーンなトポロジーを省略できる場合がありますが、ゲーム、アニメーション、クローズアップではそうはいきません(Mario Elementza [00:00:32])。最小密度は最も狭い特徴、つまり「2 つのエッジ間の最短距離」です [00:17:19]。その後、カメラからの距離で判断します。密度が低い場合はエッジを迂回させ、わずかにピンチさせる必要があります(背景)。密度が高い場合はどちらも不要です(ヒーローのクローズアップ)[01:09:20] [01:39:46]。実際のコストは頂点数です。UV シーム、ハードエッジ、マテリアルによって頂点が分割されます。UV シーム上のハードエッジは追加コストがかかりません(Polycount)。
- クリーンな未カット形状を作ってから切り込みます。 平面では切る前にオフセットします。オフセットしたリングがサポートループになります。曲面ではディテールを加える前にサポートループを切ります(Mario [00:16:13] [00:38:16] [01:19:49])。
- 均一なグリッドを保ち、二重にしません。ループが証明になります。 隣り合うクワッドの比率は 2:1 未満にします(Mario [00:08:31])。途切れるループは未解決の領域を示し、突然行き止まりになるループは隠れた二重押し出しを示します [00:18:57] [00:39:22]。
- 三角形は取り除き、解決し、戻します。N ゴンは使いません。 ケージでは三角形を取り除いて残りを解決し、金属テストに耐える場所に限り 1 つだけ戻します。平面は許容しますが、曲面や変形する領域では許容しません(Mario [00:20:36] [00:29:59];Jessica Dru Johnson [01:12:33])。ゲーム用ローポリでは、三角形によってループを局所的に終端させます(On Mars [00:10:29])。クリーンアップで修正するのは、ラミナ、非多様体、長さゼロのジオメトリだけです。N ゴンは手作業で処理します(FlippedNormals ToWRH4IXF7A [00:11:15] [00:11:50])。
- シリンダーは四分割し、キャップはクワッドにして、ループはリングのみとします(Mario [00:57:43] [01:12:04] [01:14:16];Pixar OpenSubdiv:高バレンスのファンは使用しません)。
- エッジを保持する方法は最終用途に合わせて選び、サブディビジョンは 1 か所で行います。 Arnold は Smooth Mesh Preview の状態を自身のイテレーションに重ねてレンダリングするため、保存時には毎回プレビューをオフにします(Arnold subdivision doc;FlippedNormals [00:24:00])。クリースはエクスポート時に失われます(antCGi RlNnp4qQIrU [00:28:12])。
- 変形用トポロジーはモデラーの責任です。 関節ごとにコントロールを 1 つ、サポートループを 2 つ配置します(Jessica [01:15:51])。アイソレーションループでコントロールを囲み [01:14:11]、変形するサーフェスにポールを置きません(antCGi QW8w15J00Ok [00:09:58])。設定を同一にした 2 つのトポロジーを曲げて修正を実証します(antCGi x07USYlvu2o [00:16:24])。
- 衛生管理は納品条件です。 修復より作り直しを優先し、短く一意な名前を付け、レンダリング統計はデフォルトのままにします。両面ライティングは反転した面を隠します(FlippedNormals [00:08:31] [00:18:16] [00:02:35] [00:20:47])。
最初に確認すること
| 入力 | 変更する内容 | 指定がない場合のデフォルト |
|---|---|---|
| 用途 | エッジ保持方式、三角測量、法線 | エンジン名が挙がっていればゲーム(PC/コンソール)、それ以外はオフライン SubD |
| ポリゴン数の予算 | 削減量 | リードに確認します。それまでは On Mars の基準を目安にします(手榴弾クラスのプロップ):画面上で大きく見えるヒーロープロップは 20k~30k tris、画面の 10~15%を占めるセカンダリまたはターシャリのプロップは「かなり少なく」(数値の指定なし)、背景は 10k または 5k。tris とエンジン上の頂点数を報告し、保持するエッジそれぞれの理由を説明します |
| カメラ距離 | 保持する最小幅の特徴、密度と方向転換のバランス、角の丸み | 中景。プレイヤーが近づける距離です[レポートに記載する前提] |
| 変形 | 関節あたりのループ数、ウェイト付き法線を使わない、対称性 | プロップではなし。キャラクターではあり |
| サイズ、単位 | ベベル幅、テクセル計算 | 実寸を cm で指定し、接地させます。Z-up のエンジンでも Maya シーンは Y-up のままにします(FBX のエクスポートまたはインポート時に軸が変換されます) |
| ピボット | エンジンへの配置 | 原点を底面の中心にします。レベルを角でスナップする場合は角にします(Epic) |
| テクスチャセット | 重ね合わせ、ミラーリング、UV2 | 2048、固有の UV(UV は scenario-maya-retopology-uv に属します) |
ワークフロー
各ステージはヘッドレスの mx_run ジョブで、プレビューをオフにして新しいバージョンを保存します。GUI ブリッジはプレイブラストとインタラクティブツールに使用します(代替手段は
references/procedures.mdを参照)。コンポーネントリストをステージ間で引き継ぐ場合は、MM.component_record と MM.carry_components のみを使用し、名前や、トポロジ編集前に読み取ったインデックスは使用しません(P18)。
- セッションとブリーフ。
cmds.about(version=True)(Smart Bevel は 2027.1 と 2027.2 で変更)、単位は cm、Y 軸を上方向に設定し、ブリーフは数値で記述します(P1)。GATE:前提条件を文書化します。 - 実寸でのブロックアウト。 プリミティブは作成時に名前を付け、グリッド上に立たせ、規約に従ってピボットを設定し、フリーズしてヒストリを削除します(P2)。GATE:
mx_auditでフリーズ済みであること、default_nameまたはduplicate_short_nameがないこと、寸法が 2% 以内であること[追加]を確認し、シルエットとクレイのシートをリファレンスと比較します。 - プライマリフォームとクリーンなグリッド。 最も幅の狭い特徴(溝、くぼみの壁、隙間)とその幅を書き留めます。その近くのグリッド間隔はその幅に合わせ、残りはそれに合わせてバランスを取ります。カメラからの距離に応じて、コーナーごとに密度を上げるか、エッジを流すかを決めます。最大のクワッドを閉じてバランスを取り、ループを追加してストレステストします(Mario[00:10:11])。カーブには Edit Edge Flow を使用します(antCGi[00:16:04])。GATE:サポートループを追加する前に
MM.balance(m)["edges_over_limit"] == 0を満たすこと。MM.cage_report(m)で、N ゴンが 0 であること、カーブ上の三角形がすべて削除されているか、ハイライトレビューで問題ないと確認されていること、ワイヤーシート上でループが連続していることを確認します。 - セカンダリフォーム。
MM.extrude(faces, offset_cm=...)を実行してからくぼませます(P3。空の押し出しは拒否されます)。開口部は 1 つのクワッドから作成します。シリンダーにはMM.cylinder_sides_forとMM.build_quad_cylinderを使用します(P4)。開口部を作る前にサポートループを切ります。または、マニホールドメッシュにpolyCBoolOpを適用し、その後 Smart Bevel を使用します(P5)。GATE:長さ 0 のエッジ、重複ペア、非マニホールドをすべて 0 にします。 - 適用先に応じたエッジ保持:
- SubD のヒーローアセット、またはベイク用のハイポリで、ポータブルにする場合:サポートループ(オフセットリング、ベベル付きキューブのコーナールーティング、Mario[00:44:24])。
- Maya、Arnold、または USD で SubD を維持する場合:クリースを 1 つの方法で使用し、値はレンダーレベル以下にします(
MM.crease、MM.crease_report、P6)。 - ゲーム用ローポリ:
MM.bevelによる面取り(ブーリアン後は Smart Bevel、クリーンなクワッドには旧式の Fractional)に加え、MM.weighted_normalsを使用します。または、UV シーム上のハードエッジとベイクした法線マップを使用します(Polycount)。 - CAD またはブーリアン由来のままにする場合のみ:Smart Bevel を使用し、リトポロジーは行いません。GATE:
MM.cage_report(cage)["ready_to_smooth"](ハードエッジ 0。ファセット状のパッチもハードエッジです。Mario[01:28:38]。ファンキャップなし。6 個以上のポールには根拠があること)。MM.highlight_review(..., subdiv=n)で、すべてのカットを横切るストライプが連続していることを確認します。ベベルのproblemsが空であること、crease_reportがクリーンであることを確認します。
- ゲーム用ローポリとベイク準備(P10)。ハイポリから
MM.smooth_copyを作成します。ケージを複製し、エッジを削除する方法のみでローポリにします(シルエットから離れたエッジにはMM.flat_edgesを適用し、ループは三角形で終わらせます)。丸いコーナーではエッジを丸め、間隔を均等にし、頂点に 1 本配置します(On Mars[00:12:50][00:26:34])。ボディに接するパーツは溶接するか、隠れた面を削除します(Polycount:連続したローポリ)。MM.shrink_wrap、MM.set_hard_by_angle(low, 45)を実行します。ベイクとエクスポート用にMM.triangulated_copy(low, toward=high)を作成します。GATE:MM.deviationを記録し、シルエットが重なり合っていること、三角形数が予算内であること、エンジンでの頂点数が報告されていること、各独立シェル(polyEvaluate(shell=True))に根拠があること、diagonals_wrong_after == 0を確認します。 - キャラクター:変形チェック(P13)。手首と足首を横切るループ、カウントを一致させたまぶたと唇、頬の下を通る口角のループ、中立表情を用意します(antCGi、Jessica[01:00:30])。GATE:
MM.bend_testで反転がなく、以前のトポロジに対するデグレードもないことを確認します。restoredが true であることを確認します。 - クリーンアップと引き渡し(P14、P15)。
MM.cleanup_technical、MM.inverted_shells、MM.handoff_report(roots, out, to=...)、mx_validate.validate(profile="model", fix=SAFE_FIXES + ("render_stats",))を実行し、再度レポートを生成して、新しいバージョンを保存します。GATE:レポートがok、クリーンアップがok、反転シェルが 0、プレビューがオフ、保留項目に名前が付いていること、シートが開いていることを確認します。
数値
| 値 | 設定 | 相対値/出典 |
|---|---|---|
| 隣接する四角形のサイズ | 2:1 未満 | ベースグリッド基準、サポートループを除く(Mario [00:08:31]) |
| 最小密度 | 間隔 = 最も狭いフィーチャー | それに合わせて残りのバランスを取る(Mario [00:17:19]) |
| 円柱の側面数 | 20, 24, 28, 32 | 4 の倍数、カットに合わせて配置(Mario [01:12:04]) |
| ケージ上の丸いフィーチャー | 主役は約 6 スパン、背景は 4 | OpenSubdiv |
| バレンス | 4 は通常、6 以上は注意、GPU の上限は約 27 | OpenSubdiv |
| 目に見える丸い角の半径エッジ | 2~3 本以上、間隔を均等にし、頂点に 1 本配置 | On Mars [00:25:29] [00:26:34] |
| ジョイントあたりのループ | 制御用 1 本 + サポート用 2 本、指関節は 3 本 | Jessica [01:15:51] [01:17:34] |
| クリース | Maya の値 N はクリースを N 段階にする。5 を超えることはまれ。変位下では 10 で破綻する | Maya Help; OpenSubdiv |
| スマートベベル | 幅はワールド単位。深さ 1 は面取り、0.5 は丸み。セグメント 1 はハード、2~3 が一般的 | Maya 2027 Help |
| 従来のベベルのデフォルト | 比率指定、セグメント 1、深さ 1、スムージング角 30。ボックスの角ではセグメント 2 | Maya 2027 Help; FlippedNormals [00:18:18] |
| メカニカルなローポリのハードエッジ | 約 45 度を超える箇所、および UV シーム上 | Polycount |
| グレネードの予算 | ケージ 61k、ローポリ 24k。「ポリゴン」は三角形数のおよそ半分 | On Mars [00:04:21] [00:21:31] |
| シートの占有率 | 表面 cm² x (px/cm)² / マップ px²(10.24 の場合、12,800 cm² は 2048² の 32%) | 計算 [追加] |
| サブディビジョンのコスト | レベルごとにポリゴン数が x4。プレビューレベルと Arnold の反復回数は累積する | Arnold doc |
品質ゲート
測定可能なメッシュごとのチェック:
mx_audit.verdict(mx_audit.audit(m, texture_size=2048), "game" | "film" | "subd", max_tris=budget)
に error がなく、各 GATE で指定された MM チェックも合格していること。シーン:
mx_validate.validate(profile="model") に fail がないこと。両方を合わせて MM.handoff_report を使用します。視覚チェックは毎回実施します:mx_review.review シート(シルエットと参照の比較、クレイ、ワイヤーループ、法線);
MM.highlight_review で focus= を指定し、すべてのカットをクローズアップで確認します(折れ、暗い筋、揺らぎはピンチングの兆候です。Mario のフレーム 00:12:45、01:38:42)。ハイポリとローポリのシルエットを並べて比較します。GUI セッションでは、
両面ライティングをオフにするか、バックフェースカリングを使用します。判断には
references/critique.md を参照してください。
よくある間違い
| 間違い | 見た目 | 修正方法 |
|---|---|---|
| 空の押し出し | ループが途中で止まる。スムーズプレビューでは折れ目ができる | MM.extrude はこれを拒否します。mx_audit で長さ 0 のエッジを確認します |
| 円柱の垂直カット | ハイライトが揺れる | 側面数を増やして作り直すか、一度スムーズします |
| ファン状のキャップ | キャップの中央にくぼみができる | cage_report でファン状のポールを確認します。MM.build_quad_cylinder を使用します |
| ケージにハードエッジが残っている | スムーズ化するとパッチがファセット状になる | cage_report のハードエッジが 0 になるまで polySoftEdge(angle=180) を実行します |
| テッセレーションを有効にした状態でクリーンアップ | 不規則な三角形分割 | MM.cleanup_technical を使用し、n ゴンは手動で処理します |
| 保存時にプレビューが有効で、Arnold の反復も多い | ファイルが重くなり、レンダリングが極端に遅くなる | MM.subdiv_setup を一か所にまとめます。mx_validate で smooth_preview を確認します |
| FBX アセットにクリースがある | エンジン内でシャープさが失われる | ベベルを適用するか、スムーズ化したコピーを出荷します |
| 変形するメッシュにウェイト付き法線を設定 | スキニング中にシェーディングが固定されたままになる | 静的メッシュのみに使用します |
| UV シームのハードエッジが無効 | 頂点数が増えるが、効果がない | ハードエッジにシームを設定します(hard_edge_components) |
| シェル全体が裏返っている | 両面ライティングがオフだと黒く、オンだと正常に見える | MM.inverted_shells で確認し、反転します |
| 溶接せずに V スナップする | スムーズプレビューでシームができる | ターゲット溶接を使用します。coincident_vertices を確認します |
| 上側の角は丸く、下側は鋭い | ベイクにアーティファクトが出る | ローにエッジ半径を設定し、頂点側にも 1 つ設定します |
| ローが浮いている、またはパーツが交差している | ベイクの抜け、重複エラー、隠れた面での UV 空間の浪費 | MM.shrink_wrap を使用し、パーツを溶接するか隠れた面を削除します |
| エンジンが対角線を選ぶ | 谷ではなく稜線になり、シェーディングがジグザグになる | MM.triangulated_copy(toward=high) を使用し、三角形分割した状態でエクスポートします |
| 編集後にコンポーネント ID を再利用する | 間違ったエッジが削除され、シルエットが失われる | MM.carry_components はこれを拒否します。再導出してください |
| 手足のループがらせん状で、胸にポールがある | ウェイトが不明瞭になり、キンクが発生する | 同心円状のループにし、ポールの位置を変更します |
引き継ぎ
- scenario-maya-expert からブリーフを受け取ります。scenario-zbrush-expert からスカルプトを受け取ります(スケールを確認してください。ZBrush には単位がありません。向きとロックされた法線も確認してください)。scenario-3d から生成メッシュを受け取ります(参照用、またはベイクするハイポリのみ)。
- scenario-maya-retopology-uv(UV、ベイク準備)への納品物:新しいバージョンの
<asset>_model_v###.ma、_geoメッシュを含む<asset>_GRP(ゲーム用のSM_やUCX_などのエンジン名)、ケージ、フローターを分離し、AO 用にcastsShadowsをオフにした<asset>_high(Polycount)、作成済みの場合はローポリ、UV が保留中であることを示すhandoff_<to>.json、UV カット用のハードエッジリスト、確認したシート。三角形化後もマニフォールドである必要があります。Unfold3D は非マニフォールドメッシュを受け付けず、三角形化したコピーを展開します(P17)。 - scenario-maya-rigging(変形対応)への納品物:
to="rigging"に適したクリーンな状態(X 軸対称、法線のロックなし、ヒストリーなし)、接地して中央に配置、目は分離して前方を向き、対称パーツは結合済み、bend_testの数値(antCGi e74K チェックリスト)。 - scenario-maya-lookdev(フィルム向け SubD)への納品物:サブディビジョンを一か所に設定し、クリースセットに名前と値を設定、プレビューはオフ。FBX のエクスポート先は scenario-maya-pipeline-scripting です。
Maya 2027 の注意事項
- Smart Bevel(
polySmartBevel、2027):Width はワールド単位、Depth profile、Filter のデフォルトは Selected Edges です。出力は 2027.0、.1、.2 で異なります。フラグは調査するまで不明です(MM.bevelがattr_mapを記録します)。ボックスの角での動作は未検証です。2 セグメントのルールは従来のベベルに由来するため、problemsの集計を確認してください。従来のベベルは「legacy bevel」です。2025 以降、Filter 属性と交差部分のみをベベルするブーリアン処理が追加されています。 - Shift を押しながらドラッグする操作は「Shift Extrude」(2025)です。Smart Extrude は重なった面を結合しますが、Edit Mesh > Extrude は結合しません。ブーリアン:
polyBoolean(2023)、3ds Max エンジン(2025.3)、Volume モード(2026)。 - Smooth Mesh Preview は OpenSubdiv Catmull-Clark です。Crease Tool と Crease Sets はコンポーネントごとに排他的です。
- 新規シーンのデフォルトは OpenPBR Surface です。ハイライトのレビューでは aiStandardSurface を使用します。
- Reduce はデシメーションであり、リトポロジーではありません。Quad Draw はインタラクティブ操作専用です。
- FBX のインポートではユーザー法線を取り込めます(2027)。インポートした法線はロックされている場合があります(Mesh Display > Unlock Normals)。
- macOS のキー:Ctrl は Control、Alt は Option です。
参考資料
references/procedures.md:テストパスを含む P1 から P18 までの全コードです。モデリングコードを書く前に読み込んでください。references/critique.md:評価基準です。各ゲートで、また報告前に読み込んでください。references/expert-notes.md:各エキスパートの推論、タイムスタンプ、意見の相違を記載しています。未経験のアセットタイプや判断に迷う場合に読み込んでください。references/gui-paths.md:GUI またはコンピューター操作セッション用のメニューとホットキーです。references/sources.md:情報源、認証情報、最適なタイムスタンプです。