mcpField
S
scenario-roblox-assets

scenario-roblox-assets

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

scenario-roblox-assets について

Blender と Roblox Studio で小道具やアバターアクセサリーを準備する、Roblox 向けアセット制作スキルです。メッシュやテクスチャの処理、Studio でのプレビュー、フィット確認、ローカル検証を扱い、最終アップロードは人またはコンピューター操作エージェントに委ねます。

主な機能

  1. 01GLB の検査と Blender 処理
  2. 02メッシュの寸法・向き・三角形数確認
  3. 03Roblox 用テクスチャの準備と監査
  4. 04Studio プレビューとアクセサリー適合テスト
  5. 05UGC アクセサリーのローカル検証

活用シーン

  1. 01目標のスタッド寸法に合わせた小道具制作
  2. 02Studio へのインポート前のメッシュ確認
  3. 03帽子アクセサリーの適合と監査
  4. 04アップロード前のアバターアイテム検証
  5. 05Roblox インポート用アセットの引き継ぎ

MCP 対応

scenario-roblox-expert ツールキットと Studio MCP を使い、Roblox のプレース内で準備済みアセットをプレビュー・監査します。アップロードせずにローカル検証できます。

インストール

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

$npx skills add https://github.com/scenario-labs/skills --skill scenario-roblox-assets

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

同梱ファイル

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

references/
avatar-item-checks.md
critique.md
expert-notes.md
gui-paths.md
procedures.md
sources.md
scripts/
blender_roblox_prep.py
rbx_assets.py
scripts/agentkit/assets/
AssetAudit.luau
MeshBuild.luau
Payload.luau
UGCCheck.luau

詳細

Roblox アセットパイプラインとUGC

対象:macOS 上の Roblox Studio(2026年10月ビルド)。scenario-roblox-expert ツールキットを通じて操作します。

ここでいうエキスパートレベルとは、すべてのメッシュが Studio に届く時点で、すでにスタッド単位のサイズに調整され、-Z 方向を向き、三角形数の予算内に収まり、必要に応じて閉じられ、Roblox に合わせたサイズと分割のマップを備え、その数値で状態が証明されていることを意味します。Blender で修正し、Studio でアップロードせずにプレビューと監査を行い、ローカルで緑判定になるまで検証したら、Roblox がアセットのアップロードを必要とする時点で正確に作業を止めます。

ここで名前が挙がっている関連スキルが利用可能なスキルにない場合は、ユーザーにインストールを依頼してください (npx skills add scenario-labs/skills --skill <name>)。無人で作業を進める場合は、ツールのスキーマを確認し、欠落しているスキルを明記してください。

必須の背景知識: scenario-roblox-expert(チャンネル、レビューループ、ツールキット、Roblox の最新の落とし穴)。

方針(エキスパートに必要な追加事項)

  1. AI が生成した GLB は、既知の欠陥を持つ未加工の入力として扱います。 画像から生成された3Dデータは、幅が約0.95ユニットで、正面が+Zを向き、すべてのマテリアルで doubleSided が有効になり、部分的な金属感を塗装で表現した metallicFactor 1.0、2048 px の JPEG マップ、ピンホールを含む状態で出力されます[追加、2つの生成結果で測定]。未加工メッシュには、リメッシュ、ピボット、スケールの調整が必要です(CallMeDogey)。
  2. Studio ではなく Blender でスタッド単位のサイズを決めます。 Blender の1単位は1スタッドです。glTF は Importer でスケール調整が不要になります(Creator Docs、Importer;KatsBits[00:02:56])。小道具のピボットは底面の中心に(Common Sense Machines[00:02:39])、アクセサリーのピボットはメッシュの中心に設定します(validation #173)。
  3. エクスポート前に正面を-Zに向けます。 glTF の正面は+Zを向きますが、Roblox の LookVector は-Zです。Blender でヨーを180度回転させれば、正しい向きにできます[追加]。
  4. アクセサリーのサイズはバウンディングボックスで決まり、帽子のサイズはクラウンで決まります。 バウンディングボックスは AccessoryType ごとに異なり、アタッチメントの周囲で測定されます。回転させるとボックスが大きくなります(KatsBits[00:10:34])。ボックスは AvatarPartScaleType に従います。none または Classic では GetValidationRules() のボックス(Hat は 3 x 4 x 3)、ProportionsNormal ではドキュメントの値(1.87 x 2.5 x 1.87)を使います[追加、実環境で確認]。帽子はクラウンが頭に干渉しないようにスケールし、そのうえでボックスを確認します。テスト用の帽子では、つばが Normal のボックスいっぱいまで広がる状態で、クラウンがデフォルトの頭よりも狭くなっていました[追加]。
  5. 水密性を測定し、塗りつぶし処理を過信しないでください。 テスト用の帽子では、bmesh.ops.holes_fill が9つのピンホールのうち2つしか塞がず、さらにデシメーションによって3つの面を持つエッジが生成されました[追加]。各ループを塞ぎ、デシメーション後に修復し、境界エッジの数を再度数えます。穴を隠すために Make Double Sided を使用してはいけません(Creator Docs、Importer)。
  6. アップロードせずにプレビューします。 EditableMesh と EditableImage を使えば、準備済みのメッシュと PBR マップをプレース内に再構築し、監査、着用テスト、キャプチャを行えます[追加]。そのコンテンツはセッション中のみ有効で、プレイテスト用のコピーでは空になります[追加]。反復作業中は、Roblox へのアップロードをオフにした状態で Importer を使って出力してください(Creator Docs;Templates[00:02:31])。
  7. ローカルで緑判定になるまで検証し、そこで止めます。 ValidateUGCAccessoryAsync はプレイテスト中に Roblox のバリデーターを実行します。ジオメトリ、スキーマ、マテリアル、バウンディングボックスに関する文字列はすべて修正してください。所有権とモデレーションに関する文字列はアセットのアップロードが必要になるため、エージェントの作業はそこで終了です(Creator Docs、validation system)。
  8. テクスチャは元データではなく、密度に合わせます。 2 x 2 x 2 スタッドあたり256 px、べき乗のサイズにします。法線マップは OpenGL 形式を使用し、デザイン上サテンが必要な場合を除き、メタルネスは0または1にします。アクセサリーの ColorMap は不透明にします(Creator Docs、texture specifications and SurfaceAppearance)。

最初に確認すること

  • 配置先:体験内のプロップ、またはマーケットプレイスのアバターアイテムです。検証を通過し、かつ水密である必要があるのは後者だけです。
  • アセットごとのサイズ(スタッド単位。R15 キャラクターの身長は約 5~6 スタッドです)。アクセサリーの場合は、AccessoryType と、宣言する AvatarPartScaleType(Classic、ProportionsNormal、ProportionsSlender)も確認します。
  • 予算クラス:ヒーロープロップ、クラッター、またはアクセサリー(4,000 三角形)です。
  • ソース:scenario-3d の GLB(推奨)、FBX(FBX Unit Scale が必要)、または OBJ(メッシュのみ)です。
  • リグまたはスキニング済みの入力は、インポート後に scenario-roblox-animation に渡します。
  • 未回答の場合の既定値:プロップ、底面ピボット、コンセプトのスケールに基づく最長辺、texture_side に基づくテクスチャの辺の長さ、帽子のクラウン開口部は 1.35 スタッド、スケールタイプなし(Classic ボックス)。

手順

コード全文と記録された結果:procedures.md。セットアップ: import rbx_assets as ra(リードツールキットを自動検出します)。以下のすべてのスニペットは、未実行と記されているものを除き、2026-10-19 に Studio 0.743 または Blender 5.2 で実行しました。Edit とプレイテストのキャプチャで適合を確認しました(覆われた窓は暗いフレームを返すため、ここでは数値で判断します)。

  1. トリアージ。 目的:欠陥を把握します。方法:オフラインで ra.glb_info(path) を実行します。GATE:アセットごとに三角形数、サイズ、マップサイズ、doubleSided、スキン、拡張機能を記録します。
  2. Blender で修正。 目的:サイズ、向き、ピボット、予算、閉じたメッシュ、Roblox マップを整えます。方法:ra.blender_prep({**ra.PROP_PREP or ra.ACCESSORY_PREP, "input", "out_dir", "yaw": 180, "scale": ...}) を実行します。帽子には {"opening": 1.35, "band": [0.08, 0.2], "cap": [3, 4, 3]} を指定します。マシンガードを待ってから blender -b を実行し、レポートと 4 枚の Workbench ビューを書き出します。GATE:ra.gates(report["after"], kind, type) がすべて合格し、正面ビューに正面が表示されていること。
  3. 現在のルールを確認。 目的:本日時点の制限を確認します。方法:ra.run(studio, "return AssetAudit.rules()", kit=["AssetAudit"]) を実行します。GATE:AccessoryMaxTriangles、MaxTextureSize、およびタイプのアタッチメントの Size と Offset を記録します。オフラインのゲートではこれらの値を使用します。
  4. Studio でプレビューと監査。 目的:配置先にアセットを置き、測定します。方法:パック済みのメッシュとマップを ra.stage でステージングし、次に MeshBuild.build と AssetAudit.prop を実行します。GATE:Size が Blender のサイズと 0.01 スタッド以内で一致し、三角形数が一致し、監査エラーがなく、正面キャプチャに正面が表示されていること。
  5. アクセサリーを作成。 目的:タイプに応じた名前の Accessory、Handle、アタッチメントを 1 つ作成します。方法:MeshBuild.accessory を実行し、続けて AssetAudit.accessory(acc, rules) を実行します。GATE:エラーがゼロであること。AvatarPartScaleType のみ警告として残ります(Accessory Fitting Tool が追加します)。
  6. 装着テスト。 目的:正しく装着されることを確認します。方法:Edit で UGCCheck.rig と UGCCheck.wear を実行し、正面と側面をキャプチャします。GATE:ジョイントが存在し、アタッチメントの誤差が 0.01 スタッド未満で、opening.clears が成立し(クラウンが頭頂部で少なくとも頭の幅以上あり)、キャプチャでつばが頭に載っていること。
  7. ローカルで検証。 目的:アップロード時にしか確認できない文字列だけを残します。方法:Playtest で ra.stage(..., dm="Server") と UGCCheck.validate(acc, Enum.AccessoryType.Hat) を実行します。単一障害のコピーをネガティブコントロールとして実行し、60 秒あたり最大 10 回呼び出します。GATE:アイテムが文字列なしで有効と返され、すべての障害コピーが失敗すること。
  8. インポートを引き継ぐ。 目的:出荷までの手順を確定します。方法:担当者またはコンピューター操作エージェントが、gui-paths.md の設定で <name>_roblox.glb をインポートします。Accessory Fitting Tool が最終的なアクセサリーを生成します。GATE:インポートした MeshPart の Size がプレビューと一致し、P7 が再度監査すること。

数値

値対象出典
20,000 三角形1つの場所にある1つのメッシュCreator Docs
4,000 三角形剛体またはレイヤー化されたアクセサリーCreator Docs;ライブの AccessoryMaxTriangles
60,000 頂点、20,000 三角形1つの EditableMesh。四角形は2としてカウントEditableMesh reference
2 x 2 x 2 スタッドあたり 256 pxテクスチャの辺の長さ。次の2の累乗Texture specifications
4096 px場所のテクスチャ(2026-01-30以降)DevForum
1024 pxアバターの ColorMap、ライブの MaxTextureSize。その他のアバターマップは256Validation system;ライブ
1024 pxEditableImage の辺の長さAssetService reference
帽子 3 x 4 x 3 スタッドAvatarPartScaleType なし、または Classic の場合。ProportionsNormal は 1.87 x 2.5 x 1.87ライブのルールとバリデーター;アクセサリーの仕様
10 個アクセサリーの MeshPart あたりの分離したコンポーネント数Validation #187
0.05~4.0 スタッドアバターパーツの MeshPart の軸ごとのサイズValidation #176, #177
0.02AlphaMode Transparency の場合にソフトアルファを実現する、最小の MeshPart.TransparencySurfaceAppearance
0~40Marketplace アイテムの EmissiveStrengthSurfaceAppearance
1.35 スタッド帽子のクラウン開口部。デフォルトの高さ 1.16 スタッドの R15 ヘッド用[追加、着用テスト]
0.3 スタッドメッシュの底面より上にある帽子のアタッチメント:つばは頭の高さの4分の1だけ頭頂部より下[追加、着用テストとフィット確認用レンダリング]
60秒あたり10回ValidateUGCAccessoryAsync のレート制限ライブのエラー文字列

品質ゲート

測定可能な項目:

  • Blender レポート:すべての ra.gates エントリーに合格し、未加工の入力は本来失敗すべき項目で失敗する(ネガティブコントロール)。
  • Studio:AssetAudit でエラーが返されず、Size と三角形数がレポートと一致する。
  • 着用時:ジョイントがあり、アタッチメントの誤差が 0.01 スタッド未満。
  • バリデーター:アップロードなしで修正できる文字列が残っていない。

視覚的な確認(接触シート1枚、最大1,600 px。開いて内容を確認):

  • 各アセットの正面をカメラの -Z 方向に向け、プロップは地面に立たせます。黒い部分や裏返しの部分がないことを確認します。
  • 帽子が正面と側面の両方で頭に装着され、浮いたり、つばを越えて頭に沈み込んだりしていないことを確認します。
  • テクスチャがコンセプトどおりに見え、ディテールが適切な位置にあり、アトラスがにじんでいないことを確認します。

完了と判断する前に、critique.md を使って結果を評価してください。

よくある間違い

間違い症状修正
ユニットサイズの GLB をそのままインポートするレンガほどの大きさになるBlender でスタッド単位にスケールします。Scale Unit Studs
glTF 入力でヨー回転を指定しないロックまたは正面が背面を向くエクスポート前に yaw: 180
穴を隠すために両面表示にする検証で境界エッジエラーが発生し、三角形が二重になるBlender で穴を閉じます
holes_fill を信頼する修正後も「水密ではありません」と表示されるループに蓋をし、デシメーション後に修復して、再カウントします
Studio でのデシメーションに頼るアップロード時に三角形が 4,000 個を超えるBlender で 3,800 個までデシメーションします
パックされたメタリック・ラフネスマップを 1 つのマップとして使う全体が金属になる、または金属にならないG と B をグレースケールマップに分割します
部分的な金属度をそのままにする金属が色付きでプラスチックのように見えるマスクを読み取った後、0 または 1 に丸めます
アクセサリにアルファ付きの ColorMap を使用する検証エラー #145、透けて見える箇所が発生するopaque_color
TextureID と SurfaceAppearance の両方を設定する検証エラー #146どちらか一方にします
アクセサリに属性やタグを残す検証エラー #191検証前に削除します
アクセサリのピボットを足元に置く「メッシュデータが中央に配置されていません」ピボットを中央に配置します
フィッティングボックス内で帽子を回転させるメッシュが内側に見えてもボックスが赤くなるBlender で再び中央に配置し、向きを調整します
つばを基準に帽子のサイズを決める頭がクラウンから突き出るscale.opening、続いて opening.clears
Handle の Massless を true にするバリデーターに「false である必要があります」と表示されるデフォルトのままにします
クライアントから自分のキャラクターに AddAccessory を実行するジョイントがなく、帽子が落ちるサーバーでアタッチし、CFrame でローカルプレビューを配置します
サーバー上で Editable コンテンツから帽子のメッシュとテクスチャを作成するクライアントで Handle に小さなチェック柄の立方体が表示されるジョイントはサーバーに保持し、各クライアントでローカルに構築したメッシュ(ApplyMesh)と SurfaceAppearance を適用します(手順 P8)
EditableMesh のプレビューが保存されると思い込む再度開くとパーツが空になるセッション内のみです。実際に使うにはインポートします
プレイテストで編集プレビューが表示されると思い込むコピーしたパーツには Size があるが、メッシュがないそのデータモデル内で配置して構築します

引き継ぎ

  • scenario-3d から受け取ります:PBR マップ付きの GLB または FBX メッシュ(画像からの3D生成、リメッシュ、テクスチャの再適用、リギング)。デシメーションでシルエットが損なわれた場合は、リメッシュの実行を依頼してください。
  • scenario-textures から受け取ります:1つのメッシュ用の PBR セット。ここでは SurfaceAppearance に変換します。タイル可能なセットは、MaterialVariants として scenario-roblox-environment に渡します。
  • scenario-game-assets から受け取ります:scenario-3d がメッシュに変換するコンセプト画像(中央に配置した被写体1つ、シンプルな背景、正面図)。アイコン、スプライト、UI アートは scenario-roblox-ui に、デカールは scenario-roblox-environment に渡します。
  • scenario-roblox-environment に渡します:実寸で底面にピボットを設定した MeshParts、推奨する CollisionFidelity、およびゲートレポート。配置、最終的なフィデリティと LevelOfDetail の設定、ライティングは同シナリオで行います。
  • scenario-roblox-animation に渡します:スケールと向きを確認した、リギング済みまたはスキニング済みのインポートデータ。
  • scenario-roblox-performance に渡します:インポートの各バッチを渡し、メモリとバッチ処理の監査(references/memory-and-crowds.md、PerfAudit.assets)を依頼します。このスキルではその監査を繰り返しません。

Roblox の最新情報

  • EditableMesh と EditableImage は Instance.new では作成できません。AssetService:CreateEditableMesh()、CreateEditableImage()、Content.fromObject を使用してください。公開済みのエクスペリエンスでは、Mesh API と Image API の設定が必要です。
  • CreateSurfaceAppearanceAsync が受け取るのは EditableImage コンテンツのみです。マップは後から差し替えられません。
  • Avatar Joint Upgrade では、剛体アクセサリーはウェルドではなく RigidConstraint で接続されます。アタッチメントの検索には FindFirstChild(name, true) を使用してください。
  • GenerateMeshAsync は非推奨になる予定です。代わりに、スキーマ Car5 または Body1 を指定して GenerationService:GenerateModelAsync を使用します。
  • 2026-01-30 以降、Places では 4096 px のテクスチャを使用できます。アバターの制限は GetValidationRules() で確認できます。
  • Studio MCP はプラグイン権限で実行されます。Edit では SurfaceAppearance.ColorMap、ColorMapContent、MeshPart.CollisionFidelity をエラーなしで書き込めました。ゲームスクリプトの権限は少ないため、出荷前に Script でスニペットをテストしてください。
  • generate_mesh(Studio MCP)が返すのは {generationName, tag} のみで、セグメント分割された MeshParts、アセット ID、TextureID を含む Model を挿入します。size、maxTriangles、segmentation を渡してください。

参考資料

  • references/expert-notes.md:ソースごとの原則、見解の相違、実際の実行で得られた追加情報。
  • references/procedures.md:P1 から P11 までの完全なコード、テスト ID、結果。
  • references/avatar-item-checks.md:各ラッパーが内部で呼び出すエンジン API、複数のボディでの動作、6方向からの不透明度、傾き、Fitting Tool に残る項目(Unknown type、TexturePack、MeshSize)。
  • references/critique.md:自身の出力に対するブロッキングチェックと品質チェック。
  • references/gui-paths.md:Importer、Accessory Fitting Tool、検証プラグイン、Blender のパス。
  • references/sources.md:認証情報とタイムスタンプを含む、すべてのドキュメントと動画。
  • scripts/rbx_assets.py:GLB のトリアージ、マシンガード付き Blender ランナー、ゲート、テクスチャサイズの設定、ペイロード、キットランナー。
  • scripts/blender_roblox_prep.py:ヘッドレス Blender による検査および準備処理。
  • scripts/agentkit/assets/:Payload、MeshBuild、AssetAudit、UGCCheck。

コメント