scenario-maya-fx について
FX TD向けのMaya FXスキルで、Nucleus、Bifrost、MASH、キャッシュを扱います。スケールと入力の確認、シミュレーション結果の測定、キャッシュからのレンダリングを重視します。
主な機能
- 01シーンスケールと入力の確認
- 02布、エアロゾル、パーティクルの構築
- 03BifrostとMASHのワークフロー設定
- 04シミュレーションキャッシュの測定とレビュー
- 05Alembicとファイルキャッシュの書き出し
活用シーン
- 01衣服のクロスシミュレーション設定
- 02煙、ほこり、粒状の衝突エフェクト作成
- 03貫通とソルバー収束の問題診断
- 04レンダリング用FXキャッシュの準備
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ scenario-labs/ skills --skill scenario-maya-fxインストール後、Claude Code で/scenario-maya-fxを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/critique.mdexpert-notes.mdgui-paths.mdprocedures.mdsources.mdscripts/mx_fx.py詳細
Maya FX(Nucleus、Bifrost、MASH、キャッシュ)
熟練の FX TD は、ノブに触れる前にスケールと入力を修正し、一度に少数の設定だけを変更します。計算中のシミュレーションで判断せず、キャッシュ上の数値(貫通、伸び、ポップ、収束)とショットカメラからのレンダーで結果を検証します。ここで名前が挙がっている関連スキルが利用可能なスキルにない場合は、ユーザーにインストールを依頼してください
(npx skills add scenario-labs/skills --skill <name>)。無人で進める場合は、ツールスキーマに基づいて作業し、不足している点を明記してください。
必須の背景知識: scenario-maya-expert(実行チャネル、レビューの反復、2027 年版の注意点)。
ステータス(2026-09-24): Maya 2027 はインストールされていません。
scripts/mx_fx.py の純粋な Python 層はオフラインでテストに合格しました(tests/code/maya-fx/test_fx_offline.py)。
Maya の呼び出しはすべてまだ Maya で実行されていません。[verify] と記された名前は job_00_fx_probe.py(python3 tests/code/maya-fx/run_all.py)で確認できます。
方針(エキスパートならではの要点)
- 何よりもまずスケールを調整します。 Nucleus と Bifrost は Maya の単位にかかわらずメートル単位で計算します。cm のシーンでは Space Scale と
scene_units_in_metersを 0.01 に設定します。あるいは、182 cm のキャラクターはソルバーには 182 m として渡されます(2027 Help、SARKAMARI [00:29:22]、Stamatelos [00:30:21])。MPM のdetail_sizeはメートル単位なので、単位を変更すると解像度も気付かないうちに変化します(Gast [00:07:29])。 - 本番用メッシュはシミュレーションに使いません。 スキン適用済みのボディと衣装を複製し、ウェイト 1 のブレンドシェイプで複製を駆動し、オリジナルを非表示にします(SARKAMARI [00:10:04])。
- ソルバーをきれいな状態から始めます。 25 フレーム停止し、最初のポーズに向けて 25 フレームかけてブレンドし、アクションを 0、Nucleus の開始フレームを -50 に設定します(SARKAMARI [00:05:26])。Julan の場合は、0 フレームで A ポーズ、24 フレームまでに歩行します。
- 剛性より先にサブステップを調整します。 コリジョン反復回数がサブステップ数を下回ると効果がありません。サブステップ数が少ない状態で伸び抵抗を高くしても収束できません(2027 Help、Tips)。SARKAMARI では、Space Scale を同じ調整工程で 0.25 に変更し、サブステップ数 30、反復回数 35 にすると、残っていた貫通が解消しました [00:29:22] [00:29:57]。
- キャッシュを作り、キャッシュで判断し、キャッシュをレンダーします。 プレイブラストの前には必ず nCache を作成し、レンダーシーンには Alembic のみを置きます(SARKAMARI [00:19:32]、[00:40:07])。
- Bifrost はエラーを出さずに失敗します。 出力が引き出されていない場合は計算されません。空の配列も有効なデータとして扱われ、配列の長さが一致しない場合は短い方に切り詰められます(Jason E3aOt5wuvoo [00:22:49]、Nordenstam [00:38:11]、graph doc)。シミュレーションは自身の開始フレームから先の方向にのみ解かれます。デフォルトは 1 で、タイムライン上に存在していなければなりません(sim guide、Nordenstam [00:56:23])。
- 必要のないものはシミュレーションしません。 雪玉はコライダーの位置から開始し、衝突時の速度を与えます(Gast [00:55:18])。衣装は Alembic コライダーを介してレイヤー化します(SARKAMARI [00:32:06])。背景のソースは粗い解像度にします(Stamatelos [00:21:25])。
- 実行ごとに変更は 1 つだけにし、ログを記録します(Jason cd3HgvM8sXg [00:21:43])。
mx_fx.set_attrsはログを返します。
最初に確認する項目
| 入力 | 計画に影響する理由 | 指定がない場合のデフォルト |
|---|---|---|
| ショット範囲、fps、アクション開始 | プリロール、キャッシュ範囲、ハンドル | 24 fps、アクション開始の50フレーム前からプリロール |
| キャラクターの受け渡し方法 | シミュレーションの複製には、スキン付きまたはキャッシュ済みのボディが必要です | 参照リグ、またはscenario-maya-animationのAlembic |
| リニア単位と実寸 | ソルバーのスケール | cm、mx_fx.scale_reportで実寸を確認 |
| 出力先 | 映画(Arnold、VDB、Alembic)かゲーム(スプライト、ベイク済みメッシュ、USD)か | Arnoldの映画 |
| カメラとモーションブラー | どの程度の貫通を許容できるか | ショットカメラ、ブラー有効 |
| 布地またはマテリアル | プリセット、剛性 | ケープ:ヘビーデニムの値[追加で選択]、ダスト:Aeroのスムーズ |
| 予算 | サブステップ、解像度、フレームあたりのシミュレーション時間 | 初回パスは10/12、ディテール0.1、最終は30/35 |
ワークフロー
-
スケールと入力。
mx_fx.scale_report(meshes, expected_size_m=...)を実行します。モデルが実寸でない場合は、アセットを修正します(Julan [00:02:02])。意図的に非物理的なスケールを指定している場合(182 cmのキャラクターに対するSARKAMARIの0.25など)は、art_choice=Trueを付けて記録します。ゲート:エラー行がないこと。 -
システムを選択します(ブリーフに応じて選択肢を決めます)。
エフェクト デフォルト 代替案と使用条件 ケープ、キャラクターが着用する衣服 nCloth 破れが必要な場合、Bifrostグラフ内で動作させる場合、またはUSD経由でゲームに出力する場合は、Bifrost MPM布地を使用します(Jason hmuWr2nWSms、yo6y7cANfX0) ダストパフ、煙、霧 Bifrost Aero 土の塊にはMPMの砂または雪を追加します。砂粒にはnParticlesを使用します(ドキュメントレベルのみ) 雪、砂、泥の衝突 MPM粒状 ソースに代替案はありません 散布、コピーの群衆、モーショングラフィックス MASH (Repro) 高速化にはInstancer、USDポイントインスタンサーにはBifrostの scatter_pointsを使用します液体 basic_liquid_graph従来のBifrost Fluidsは廃止されています -
布の入力を準備します。 トポロジーゲート
mx_fx.cloth_topology_verdict(mx_audit.audit(garment), expected_border_loops=1): 均等に配置された 四角形ポリゴン(クロスリンクには四角形ポリゴンが必要です)、マニフォールド、片面、穴がふさがれていること(SARKAMARI [00:03:05])。 プリロールにはmx_fx.add_preroll(ctrls, action_start, rest=bind_pose)を使います。バインドフレームにmx_fx.sim_duplicateで複製します。GATE:判定に問題がなく、複製が元のオブジェクトに対して 0.01 cm 以内で追従すること。 -
構築します。
- nCloth:
mx_fx.build_cloth_rig(garment_SIM, body_SIM, action_start, preset=...):nucleus は 1 つ、 単位に合わせた Space Scale、プリロールから開始、初回パスはサブステップ 10/反復 12、プリセット値、 薄い布とコライダーを使用します。入力アトラクトのロックマップ(値 1 と Input Attract Method の 「Lock values of 1.0 or greater」、Collide Last Threshold 1.0、[added] ドキュメントのレシピ)または Point to Surface と Exclude Collisions(SARKAMARI [00:23:40])で ケープの襟をピン留めします。メンバーは入力メッシュ上に設定します(出力メッシュのメンバーは DG ループの リスクがあります。ドキュメントを参照してください。point_to_surface(..., cloth=)がメンバーを置き換えます)。GATE:rig["verdict"]にエラーがないこと。 - Bifrost:
basic_*_graphと Explode から始めます(Stamatelos [00:39:07])。すべての VNN 呼び出しを ログに記録するmx_fx.BifrostGraphでスクリプト化するか、GUI の Echo All Commands ログを再利用します。 持ち込んだものは非表示にします(Jason)。開いたエミッターまたは平面エミッター(リング、地面パッチ)には Shell、閉じたものには Solid を使います(Stamatelos [00:10:40])。シミュレーションの開始フレームを設定します。 GATE:emitter_facts(mesh)に対するaero_source_verdict(...)とsim_range_verdict(...)に問題がなく、 すべての出力がプルされ、すべてのフレームでポイント数またはボクセル数が 0 を超えていること。 - MASH:
mx_fx.mash_network(sources, geometry="Repro")[MASH.api を確認]。サイズ 1 のソースを使います (Waters)。GATE:mx_fx.mash_cache_reasons(mx_fx.mash_inventory(waiter))の内容を確認すること。
- nCloth:
-
まず低コストで初回パスを実行し、その後キャッシュします。 低解像度(Aero の detail 0.1、cloth の初回パス)で、 開始フレームから順にフレームを評価し(
mx_fx.run_sim、step_frames)、GUI ですべてのフレームを再生します。geo_detail_sizeまたはtime_step_sizeを変更した後、あるいは compound を作成または Explode した後は、 開始フレームから再実行します(シミュレーションガイド)。GATE:非有限値も空のフレームもないこと。 -
計測して確認します。
rep = mx_fx.sim_report(cloth_out, body_SIM, start, end, action_start=..., thickness=...)、rep["convergence"] = mx_fx.convergence_test(...)、mx_fx.sim_verdict(rep, budget_spf=...)(ドキュメントの Timing Output ゲートを追加します。フレームあたりの計算秒数を概要の予算と照合します)。続いて確認します: ヘッドレスでmx_review.review([cloth_out, body_SIM], out, views=("side","back","threequarter"), modes=("clay",), focus=fixed)を使い、アクション開始時、ピーク時、最終フレームを確認します。GUI ではショットカメラからmx_review.playblastを 使います。ボリュームにはmx_fx.volume_review(Arnold、tricubic)を使います。 評価ガイドに従って判断します。 -
この順で問題を切り分けます(最初に剛性を上げないでください):スケール、開始状態(プリロール、Push Out、 Trapped Check を使用した Crossover Push)、反復数をサブステップ数より多く設定、厚みを下げて Self Collide Width Scale を上げる、伸縮と圧縮を同時に調整する(SARKAMARI [00:24:50])、反転には Bend Solver High Quality を使う、 アトラクトまたは剛性によって布が貫通する場合は Collide Last Threshold 1.0 にする、制約が跳ねる場合は Strength を下げる、 「frame change too large」は開始時点から再生するかキャッシュすることを意味します(2027 Help)。 残る突き抜けには、キャッシュ済みメッシュにスカルプトした補正を加えるか、モーションブラー下では許容します (SARKAMARI [00:37:12])。Aero のディテールには、2027 のシャープ化(
aero_refinement_settings、値は小さく)、 適応性の境界、またはディテールサイズを全体的に下げる前にキャッシュにpost_refine_aeroを適用します (フレーム順に、元のソースとコライダーを使います。シミュレーションガイド)。 -
最終キャッシュを作成して納品します。 最終パスの設定を適用し、nucleus の開始フレームから nCache を作成します (
ncache_verdict:mcc は 2 GB で停止するため、mcx を使います。位置情報のみを保存するため、布のトランスフォームは 動かさないでください)。nucleus を無効にし、ショット範囲にわたって UV とカラーセットを含む布とボディの Alembic を エクスポートします(mx_fx.alembic_export)。Bifrost では、レンダラーに必要なプロパティだけを指定してfile_cacheを使います。キャッシュのみのレンダーシーンを作成します。GATE:mx_fx.alembic_checkとfile_sequence_reportに問題がなく、キャッシュを確認できること。
数値
| 値 | 比較対象 | 出典 |
|---|---|---|
Space Scale、scene_units_in_meters 0.01 | cm シーン | 2027 Help;Stamatelos |
| Nucleus 3 / 4(プリセット)、初回調整 10 / 12、最終 30 / 35 | サブステップ数 / 最大衝突反復回数 | doc;SARKAMARI |
| プリロールのホールド 25 + ブレンド 25、開始 -50 | 0 でアクション | SARKAMARI |
| ズボンの摩擦 0.1、伸縮 80、圧縮 20、ダンプ 0.4 から 0.2、質量 0.8 | T シャツのプリセット 0.3 / 35 / 10 / 0.8 / 0.6 | SARKAMARI;doc |
| ゆったりしたシャツの伸縮 40、圧縮 15、質量 0.2、ダンプ 0.3 | 同上 | SARKAMARI |
| 静止長 0.9(きつめ)、0.5(たるみ)、アトラクト 0.7 [?](襟) | ペイントした領域 | SARKAMARI |
| Collide Last Threshold 1.0(デフォルトは 0.2) | アトラクトまたはリジディティの使用時 | doc |
| Aero の環境値 20、ソース 580、浮力 -9.81 | 上昇はその差による | Stamatelos |
| Aero の詳細度 0.1(プレビュー)、0.05(デフォルト)、0.025(高精細) | Absolute モード(ワールド単位);Relative はボクセル数を一定に保つ | Jason;Stamatelos |
MPM の initial_firmness は速度の二乗にほぼ比例(10 m/s:100) | 衝突速度 | Gast |
| MPM のクロスの面積保持 0.1(0 = 最も硬い)、振動速度 +10 ステップ、最大衝突速度は約半分 | クロス | Jason |
| スプライトは 64 フレーム x 512 px、4096 上に 8 x 8;SDF の密度は 0.005 | フリップブック | Jason |
品質ゲート
- コード内:
cloth_topology_verdict、scale_report、nucleus_verdict(サブステップ数に対する反復回数、スケール、プリロール)、sim_verdict(アクション後の貫通頂点がゼロ、静止長の 1.10 x 未満の伸縮[追加]、ポップ、安定、スタンドオフ、収束、ソルブ時間)、alembic_check(範囲、メッシュ 1 つ、頂点数)、file_sequence_report(全フレーム、増加が際限なく続かないこと)、sim_range_verdict(キャッシュとレビューがショットの終端まで到達すること)、ncache_verdict、mash_cache_reasons、overlaps(インスタンス)、sprite_framing、usd_check_unreal。 - ビジュアル: キャラクターの速度に応じたクロスの重みと揺れをリファレンスと比較し、折り目、脇の下と背面のビューをスムーズなプレビューで確認し、襟の硬さ、衣服が肩に留まること、ショットカメラで貫通が見えるか、またはブラーで隠れること(SARKAMARI [00:36:39]、[00:37:46]);煙が上昇し、分散し、消散すること、ボクセルが消えないこと、段差のある軌跡やコライダーの隙間がないことをレンダーで判定(Stamatelos;シミュレーションガイド);MPM のひび割れパターン、破片のサイズ、デブリ;変形するメッシュをスクラブした際の MASH のジッター(Waters [00:03:53])。
よくある間違い
| 間違い | こう見える | 修正 |
|---|---|---|
| cm シーンで Space Scale 1 | 布がゆっくり、ふわふわと巨大に動く | 0.01 にするか、アート上の選択として記録します |
| サブステップ以下のイテレーション数 | ステップ数を増やしても何も変わらない | イテレーション数をサブステップ数より大きくします |
| プリロールなしで、アクション開始時にシミュレーションを開始 | 1 フレーム目に爆発または交差が起きる | ホールドとブレンドを使い、開始を -50 にします |
| Alembic の範囲が nucleus の開始後から始まる | ソルバーが飛び、布が跳ねる、またはフリーズする[追加、要確認] | 先にキャッシュするか、開始フレームからエクスポートします |
| 自己衝突に厚い布を使う | 布が膨らみ、身体から浮いて見える | 薄い布を使い、Self Collide Width Scale を設定します |
| Bifrost の出力が取り出されていない | オブジェクトが消えるが、エラーは出ない | フィードバックノードとデバッグノードを出力に接続します |
| シミュレーションの開始フレームより後からステップする、または開始フレームがタイムライン外にある | 最初のフレームが解決されない、または何も起きない | 開始フレームからステップします(sim_range_verdict) |
| 詳細サイズが小さい状態で絶対解像度を使う | ボクセル数が急増し、Maya がハングする | Relative を使うか、予算内に収まる aero_source_verdict の推定値を使います(Stamatelos[00:12:48]) |
| 高温の状態でダストを発生させる | 広がらずに煙の柱のように上昇する | 温度を周囲温度の 20 にし、初速と継承速度を設定します[Stamatelos のノブから追加] |
| 均一な煙のソース | でこぼこしたキノコ雲 | vary_source_property、ノイズで変形させたエミッター、乱流、散逸を使います(Jason) |
| 大きな地面に対して相対コライダー詳細度を使う | 煙や雪の下に隙間ができる | コライダー詳細度を下げ、link_collider_detail を使います(MPM) |
| MPM のピンとシミュレーションへの直接リンクを併用する | 布が二重にシミュレーションされる | 直接リンクを削除します |
| スキンメッシュで面積ベースの MASH 散布を使う | ポイントが揺れる | Mesh from Points、スキン、ウェイトのコピー、Vertex + Flood を使います |
| Simulated Time を使わずに Time Scale をアニメーションさせる | 追いつき時にバーストが起きる | Simulated Time を使い、その後ベイクします |
引き継ぎ
- scenario-maya-animation から受け取るもの: 参照リグまたはキャラクターの Alembic、承認済みのショット範囲と fps、バインドポーズ(プリロール用)が利用可能であること、
validate(profile="shot")がクリーンであること。タイムラインがアクションの開始位置から始まる場合は、その前にプリロール用の余裕を設けるよう依頼します。 - scenario-maya-lighting-rendering への納品物: キャッシュのみを保持する新しいシーンバージョン
<shot>_fx_render_v###.ma、Alembic<asset>_<fx>_v###.abc(UV、カラーセット、ハンドルを含むショット範囲)と、衝突したボディ(SARKAMARI [00:39:34])、密度と速度のみを含む VDB シーケンス(火の場合は温度も含む)、作業を再開できる Bifrost キャッシュ.bob、sim_report.json、確認したレビューシートまたはプレイブラスト、未検証の項目。単位は cm、Y-up。フレーム範囲を明記します。 - scenario-maya-pipeline-scripting(ゲーム)への納品物:
sprite_framingがクリーンなフリップブックパス(エミッション、volume_direct、タンジェント空間法線)、usd_check_unrealで確認したベイク済み Alembic または USD メッシュ、エンジン向けの低解像度データ(Jason yo6y7cANfX0 [00:05:09])。 - レンダリング用ボディが開いている、または重い場合は、閉じた簡略化コライダープロキシを scenario-maya-rigging に依頼します。
Maya 2027 に関するメモ
- Bifrost 3.0(2027.1 では 3.1.0.8)は常にインストールされています。非同期評価、Batch Execute と Write State、ノード検索に対応しています。従来の Bifrost Fluids は廃止されました。
basic_liquid_graphを使用してください。 - MPM 2027:
link_collider_detail、max_voxel_movementの再試行、lag_colliders、initial_firmness。 - Bifrost のドキュメントでは名称に食い違いがあります(
simulate_liquid(s)、liquid_solver_settingsと_properties、Solid/Shell と Absolute/Relative の両方に指定されるgeo_volume_mode)。BifrostGraph.find_portでポートを確認してください。 - nCloth Bend Solver のデフォルトは High Quality です。Cached Playback はダイナミクスをメモリにキャッシュできますが、引き継ぎにはディスク上のファイルを使用します。
- MASH:Signal が Noise と Trig に置き換わり、Strength が Mute に置き換わりました。ノードは TRS に作用し、Repro がデフォルトです。Delay はトランスフォームアニメーションをオフセットします。
- Alembic は Ogawa のみです。AbcExport の
-j文字列はスペースで分割されます[追加済み、要検証]:alembic_exportはまずスペースを含まない一時パスに書き込みます。
参考資料
references/procedures.md:すべての工程(クロス、Bifrost、MPM、キャッシュ、VDB レビュー、スプライト、USD、MASH)の完全なコード。スクリプト作成前に読み込んでください。references/expert-notes.md:エキスパートによる原則とタイムスタンプ、エキスパート間で意見が分かれる選択肢。設定の根拠が必要なときに読み込んでください。references/critique.md:シミュレーション、キャッシュ、または散布を評価する基準です。エフェクトを完成と判断する前に読み込んでください。references/gui-paths.md:コンピューター操作エージェント向けのメニューとホットキー、および Echo All Commands の検出手順です。references/sources.md:すべての情報源、認証情報、URL、推奨タイムスタンプです。scripts/mx_fx.py:ツールキットです(すべての関数は docstring に記載されています)。テスト:tests/code/maya-fx/。