mcpField
S
scenario-maya-fx

scenario-maya-fx

github.com/scenario-labsクリエイティブ・メディア1.2k177 回インストール1 日前に更新
リポジトリ

scenario-maya-fx について

FX TD向けのMaya FXスキルで、Nucleus、Bifrost、MASH、キャッシュを扱います。スケールと入力の確認、シミュレーション結果の測定、キャッシュからのレンダリングを重視します。

主な機能

  1. 01シーンスケールと入力の確認
  2. 02布、エアロゾル、パーティクルの構築
  3. 03BifrostとMASHのワークフロー設定
  4. 04シミュレーションキャッシュの測定とレビュー
  5. 05Alembicとファイルキャッシュの書き出し

活用シーン

  1. 01衣服のクロスシミュレーション設定
  2. 02煙、ほこり、粒状の衝突エフェクト作成
  3. 03貫通とソルバー収束の問題診断
  4. 04レンダリング用FXキャッシュの準備

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/scenario-labs/skills --skill scenario-maya-fx

インストール後、Claude Code で/scenario-maya-fxを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
critique.md
expert-notes.md
gui-paths.md
procedures.md
sources.md
scripts/
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

ワークフロー

  1. スケールと入力。 mx_fx.scale_report(meshes, expected_size_m=...)を実行します。モデルが実寸でない場合は、アセットを修正します(Julan [00:02:02])。意図的に非物理的なスケールを指定している場合(182 cmのキャラクターに対するSARKAMARIの0.25など)は、art_choice=Trueを付けて記録します。ゲート:エラー行がないこと。

  2. システムを選択します(ブリーフに応じて選択肢を決めます)。

    エフェクトデフォルト代替案と使用条件
    ケープ、キャラクターが着用する衣服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は廃止されています
  3. 布の入力を準備します。 トポロジーゲート 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 以内で追従すること。

  4. 構築します。

    • 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)) の内容を確認すること。
  5. まず低コストで初回パスを実行し、その後キャッシュします。 低解像度(Aero の detail 0.1、cloth の初回パス)で、 開始フレームから順にフレームを評価し(mx_fx.run_sim、step_frames)、GUI ですべてのフレームを再生します。 geo_detail_size または time_step_size を変更した後、あるいは compound を作成または Explode した後は、 開始フレームから再実行します(シミュレーションガイド)。GATE:非有限値も空のフレームもないこと。

  6. 計測して確認します。 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)を使います。 評価ガイドに従って判断します。

  7. この順で問題を切り分けます(最初に剛性を上げないでください):スケール、開始状態(プリロール、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 を適用します (フレーム順に、元のソースとコライダーを使います。シミュレーションガイド)。

  8. 最終キャッシュを作成して納品します。 最終パスの設定を適用し、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.01cm シーン2027 Help;Stamatelos
Nucleus 3 / 4(プリセット)、初回調整 10 / 12、最終 30 / 35サブステップ数 / 最大衝突反復回数doc;SARKAMARI
プリロールのホールド 25 + ブレンド 25、開始 -500 でアクションSARKAMARI
ズボンの摩擦 0.1、伸縮 80、圧縮 20、ダンプ 0.4 から 0.2、質量 0.8T シャツのプリセット 0.3 / 35 / 10 / 0.8 / 0.6SARKAMARI;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/。

コメント