mcpField
S
scenario-roblox-environment

scenario-roblox-environment

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

scenario-roblox-environment について

Roblox Studio の環境アーティストやビルダー向けのスキルで、scenario-roblox-expert toolkit を使います。グレーボックス、地形、マテリアル、ライティング、プレイテスト、シーン監査を扱い、Studio での実測に基づく手順を提供します。

主な機能

  1. 01スポーン地点の視点からグレーボックスを作成
  2. 02コードによる地形作成と検証
  3. 03マテリアルと地形オーバーライドの適用
  4. 04ライティングの設計と測定
  5. 05衝突とストリーミングのテスト
  6. 06引き渡し前のシーン監査

活用シーン

  1. 01Roblox 環境のグレーボックス作成
  2. 02地形表面の形成と検証
  3. 03ライティングによるゾーンの雰囲気づくり
  4. 04通路とシーン品質の確認

インストール

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

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

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

同梱ファイル

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

references/
critique.md
expert-notes.md
foliage.md
gui-paths.md
procedures.md
sources.md
verification.md
scripts/
rbx_environment.py
scripts/agentkit/environment/
EnvAudit.luau
Graybox.luau
Looks.luau
lune_env_audit.luau
MaterialKit.luau
Scatter.luau
TerrainKit.luau
WorldCheck.luau

詳細

Roblox 環境(ビルダー、環境アーティスト、ライター)

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

Roblox での環境制作の専門知識とは、プレーンなパーツからグレーボックスを構築し、スポーンカメラを起点として構成すること、コードで地形やマテリアルを作成して、見えない失敗がないか確認すること、そしてムードを決め、まず太陽の向きを調整し、最後にポストエフェクトを追加してライティングを設計することです。このスキルでは、これらのルールを情報源から引き継ぎ、目的に合わせて制作した村、地形、インテリアを Studio 0.743 で実際にテストして修正しました。また、シーンの構築、ライティング、測定、監査を行うキットモジュールも備えています。ここに記載された関連スキルが利用可能なスキルにない場合は、ユーザーにインストールを依頼してください (npx skills add scenario-labs/skills --skill <name>)。無人で実行する場合は、ツールのスキーマを確認して進め、不足している点を明示してください。

必須の前提知識: scenario-roblox-expert(チャネル、レビューループ、ツールキット、現行 Roblox の落とし穴)。

ステータス(2026-10-19): 2026-10-19 01:14 の実行では Studio 0.743 で 14 項目中 14 項目に合格しました。オフラインの O1~O9 も合格しています。Scatter、ストリーミングテスト、オーバーレイはオフラインテストのみです。その後の実行では、ビューポートの描画が停止して行き詰まりました(references/procedures.md を参照)。

スタンス(専門家としての差分)

  1. スポーン地点のカメラから構成する、シンプルなパーツによるグレーボックス。 プリミティブ、1つのグリッド用 MaterialVariant、アンダースコア付きのフォルダー、壁とは異なる地面の色(Jalapeno、T--CNfkfBBQ [00:02:01 to 00:02:35, 00:08:13])。ランドマークは実際のサイズで目立つプレースホルダーにします(RoBuilder、eRnnjqVOq7c [00:05:20])。出入り口と通路の幅は少なくとも10スタッド、壁の高さは少なくとも10スタッドにします(Roblox graybox tutorial)。プレイヤーのスポーン地点から構成し、ランドマーク間の移動時間を計ります(Gino、vWx8UTxsi0A [00:11:49, 00:12:21])。
    • 実機検証:テンプレートの SpawnLocation は村とは反対向きで、最初に見えるのは丘陵でした。スポーン地点を最初のランドマークの方へ向けます。
  2. CSG より先にパーツを使い、開口部に衝突判定がどう影響するかをテストします。 軸に沿った穴はユニオンではなくパーツで切り抜きます(Kaiwala、x9jg8kjH3Vs [00:04:41])。異なるユニオンはそれぞれ独自のメッシュと衝突アセットになります(Kaiwala、Ahn2P_4TDrU [00:20:40])。プレイヤーが形状を通り抜けるのか、接触するのかに応じて精度を選びます(Roblox collisions docs)。
    • Kaiwala は、Default の衝突判定では穴が塞がることを確認し、PreciseConvexDecomposition に切り替えています。単純な形状なら、Hull または Box が低コストな解決策です(Ahn2P_4TDrU [00:01:54, 00:02:28])。
    • 実機検証:Hull と Box では10×10の出入り口が塞がりましたが、Default と PreciseConvexDecomposition では通り抜けられました。精度の名前を鵜呑みにせず、開口部を1つずつ調べます。
    • GetPartBoundsInBox はバウンディングボックスを比較するため、すべてのユニオンのドアを通行不可と判定しました。通行できるかどうかは GetPartsInPart またはレイでテストします。
  3. コードで地形を作り、ボクセルを読み取って確認します。 パーツで大まかに形を作り、変換してから滑らかにします(BONES、-DoOf32pkPo [00:04:34, 00:09:57])。Region の呼び出しには解像度4、グリッドに合わせたリージョン、リージョンごとに最大4,194,304ボクセルが必要です(Terrain reference)。
    • 実機検証:上端を y 0 に合わせた FillBlock では、歩行可能な地表が y 2 付近に残りました。TerrainKit.occupancy を使えば表面を正確な位置に設定できます。
    • 実機検証:塗りつぶし直後のレイキャストは何も返しませんでした。TerrainKit.surfaceY を使うと、ボクセルから高さを読み取れます。
    • 草の葉がパーツを突き抜けるため、その部分を LeafyGrass で塗ります(SmartyRBX、CippiATeZ54 [00:01:40])。実機検証では、Grass に設定した床はすべて草が突き抜けました。TerrainKit.paintUnder を使うと、床の下を塗り直せます。
  4. マテリアルは名前で、ベースマテリアルごとに紐付き、地形ではさらに設定が必要です。 名前を変更すると、そのバリアントを使用するすべてのパーツに影響します(Roblox materials docs)。地形でバリアントを使用するにはオーバーライドが必要で、マテリアルごとに1つ設定します。Grass と LeafyGrass は別々です(SmartyRBX、CippiATeZ54 [00:05:13, 00:05:47])。
    • 実機検証:Basalt バリアントを作成しても、SetBaseMaterialOverride を設定するまでは何も変わりませんでした。
    • 実機検証:オーバーライドを設定しても、地形のマテリアルカラー(Basalt 30、30、37)がマップに掛け合わさるため、ほぼ黒く表示されました。SmartyRBX が手動で行っているように、Terrain:SetMaterialColor で明るくします [00:02:44]。
  5. ムードを決め、太陽の向きを調整してから、色を設定します。 まずムードを一文で決め、次に ClockTime を設定します(RingWorld、UlvSrWHESwA [00:01:06, 00:01:58])。重要な場所に光が当たるよう太陽の向きを調整します(DatBoiEle、aq0Fi0R2FAY [00:02:11]。BONES は方向の制御に GeographicLatitude を使用しています。zAoY8pxJM9c [00:08:36])。
    • 実機検証:デフォルトの緯度ではスポーン地点のカメラが太陽を向き、Ambient で色付けされた影側しか見えませんでした。Looks.aimSun は、あらゆる方向に対して誤差1度未満で ClockTime と GeographicLatitude を見つけます。
  6. 暖色の光に寒色の影を組み合わせ、最後に少しずつコントラストを調整します。 Ambient は影に色を付け、ColorShift_Top は光に色を付けます。EnvironmentDiffuseScale を下げるとコントラストが上がります(DatBoiEle [00:03:38, 00:05:48])。まずリアルさを優先します。Atmosphere の Density は0.3〜0.4、Offset は0にし、コントラスト用の色補正は最後に行います(Develuper、vkEXLmRAQgs [00:00:27, 00:01:04, 00:02:16])。ColorCorrection は0.05ずつ動かします(DatBoiEle [00:08:09])。Bloom は Threshold を約0.03、Size を大きくしてから、好みに合わせて Intensity を下げます [00:07:37]。
  7. 夜には、焦点となる光源とシルエットが必要です。 BONES の暗い設定は廊下で有効です。Atmosphere の Color と Decay を黒にし、Density を0.495、Offset を0.25、Haze を5、Glare を0、環境スケールを0、ExposureCompensation を-0.4にします(zAoY8pxJM9c [00:03:15 to 00:06:04])。屋外では、RingWorld は Brightness を下げ、グレアを抑え、青く色付けし、近距離と遠距離のライトを追加します(UlvSrWHESwA [00:06:44 to 00:07:54])。
    • 判断基準:プレイヤーに遠景が必要ですか? 実機検証では、廊下用の設定によって遠景の96〜100%が真っ黒になりました。night_outdoor では、すべての景色を見やすいままにできました。
  8. 室内では、まず窓から光を通し、その後に反射光を擬似的に再現します。 影を落とすガラスは太陽光を遮るため、CastShadow をオフにします(DatBoiEle [00:09:16])。窓から光が差す部屋では、BONES は Brightness を44、Ambient を黒、環境スケールを0に設定します。窓の近くに PointLight [234, 255, 254] を追加し、Range を50、Shadows をオンにします(zAoY8pxJM9c [00:06:14, 00:07:14])。この3つはすべて実機で確認済みです。

まず決めること

  • カメラとジャンル:三人称(デフォルト)では、一人称より大きなドアと高い天井が必要です。
  • 対象デバイス:モバイルで手が届きやすいよう、柔らかな照明にし、パフォーマンス担当者の予算に合わせます。
  • マップのサイズ、StreamingEnabled、クライアント上に常時存在させる必要のあるモデル。
  • 各ゾーンにつき雰囲気を表す一文と、参考画像を2~3枚。
  • アセットのソース:Scenario のメッシュ、テクスチャ、スカイボックス、または Roblox のマテリアルのみ。
  • ファイルのパイプライン:Rojo または Studio のみ。いくつかの設定はファイルでのみ変更できます(Current Roblox notes)。

デフォルト:PrioritizeLightingQuality を使用した Realistic、StudsPerTile を 8 にしたグレーボックスのグリッドバリアント、10 × 10 のドア、スポーン地点からの眺めを想定した day_fantasy の外観。

手順

セットアップ:import rbx_environment as E を実行し、続いて E.run(studio, code, kit=["Graybox", "TerrainKit", "MaterialKit", "Looks", "EnvAudit"]) を実行します(リードツールキットを検出します)。完全なコードと記録された結果: references/procedures.md。

  1. 準備状況(P1)。 LightingStyle、オーバーライド、ファイルでのみ変更できる設定を確認します。GATE: 意図した値になっていること。スクリプトで変更できない設定は、place ファイルまたは Properties パネルで設定します。
  2. グレーボックス(P3)。 map_geo/<area>/<kind> の下に Graybox.house、wall、lantern、block を配置し、ランドマークのプレースホルダーを置き、スポーン地点を最初のランドマークに向けます。GATE: Graybox.clearance で問題が検出されないこと。歩行時間が報告されること。スポーン地点のキャプチャにランドマークが写っていること。
  3. 地形(P2、P13、P4)。 高さ関数を指定した TerrainKit.heightfield、water、fromParts、smooth を使い、続いて床に paintUnder を適用します。GATE: スポーン地点の地面(1フレーム後の groundY または surfaceY)が設計上の高さにあること。スポーン地点と屋内のキャプチャで、床を突き抜けて草が生えていないこと。
  4. 開口部と衝突判定(P5)。 開口部をパーツから作成します。ユニオンを使う場合は、Default の忠実度と Opening 属性を維持します。GATE: キャラクターサイズの GetPartsInPart プローブとレイが、すべての出入口を通過すること。
  5. マテリアル(P6)。 MaterialKit.kit、役割ごとの dress、地形マテリアルごとに1つのオーバーライド、地形マテリアルの色を設定します。GATE: MaterialKit.links で破損が0件と返されること。各オーバーライドを読み戻せること。マテリアル適用後のキャプチャを references/critique.md に沿って評価すること。
    • 草木、岩、樹木:Scatter.plan と Scatter.place を使い、バリアントごとに衝突判定と LevelOfDetail を設定します(references/foliage.md)。
  6. 照明(P7~P10)。 スナップショットを取得し、Looks.apply、Looks.aimSun を実行します。同じカメラで適用前後を撮影し、E.look_metrics を実行してコンタクトシートを1枚作成します。GATE: 指標が品質ゲートの範囲内であること。シートを雰囲気を表す一文と照らして評価すること。
  7. プレイテスト(P11)。 Client Stats、モデルごとのストリーミング確認、ドアを通り抜けるテストを行います。GATE: キャラクターが屋内に到達すること。数値をパフォーマンス担当者に共有すること。
    • キャプチャ以外で失敗する可能性のある確認項目:半径64でのストリーミング、衝突判定と不可視ブロッカーのオーバーレイ、テクスチャサイズ、メッシュグループ(references/verification.md)。
  8. 監査と引き継ぎ(P12)。 Studio で EnvAudit.all(game) を実行し、保存済みファイルで E.lune_audit(place) を実行します。GATE: error も warn もないこと。

数値

値数値出典
出入口と廊下の幅;壁の高さ少なくとも 10 スタッドgraybox tutorial
デフォルトの WalkSpeed;JumpHeight16 スタッド/秒;7.2(チュートリアルの 5 は古い値です)Humanoid reference
1 スタッド約 28 cm;インポート時に変換されませんunits guide
グリッドバリアントのタイルStudsPerTile 8Jalapeno
Terrain 領域の呼び出し解像度 4、4,194,304 ボクセルTerrain reference
CSG の結果最大 20,000 三角形solid modeling docs
Light Range書き込み時に 120 にクランプされます(ライブ)deltas
Atmosphere Density、Offset(日中)0.3~0.4、0Develuper
暗い AtmosphereDensity 0.495、Offset 0.25、Haze 5、Glare 0BONES
ExposureCompensation-0.4、小数単位で調整BONES
窓から光が差し込む室内Brightness 44;フェイク GI [234, 255, 254]、Range 50BONES
ColorCorrection のステップ0.05;Contrast 0.1DatBoiEle
ストリーミングの基本設定MinRadius 64、TargetRadius 1024、PauseOutsideLoadedArea、Opportunistic、Improvedstreaming docs
2 GB のスマートフォンでのビューごとの予算500 ドローコール、500k 三角形McNeill, cWDNVvOh4o0(パフォーマンス担当)
スクリプトのクランプ(ライブ)Atmosphere の Glare と Haze は 10、Density と Offset は 1、ShadowSoftness は 1;Brightness と Bloom Size はクランプされませんStudio 0.743

品質ゲート

測定値(各キャプチャの下半分を対象に、skip_top=0.45 を指定して測定し、空の影響を抑えます):

  • 昼の見た目:どのビューでも crushed が 0.05 未満で、中立的なキャプチャより幅広く分布します。
  • 屋外の夜:どのビューでも crushed が 0.5 未満で、スポーン地点付近に照らされた焦点があります。
  • 太陽光のある屋内:床の一部がクリップされ(clipped が 0.05 を超え)、その部分を保ったまま、疑似的なバウンス光によって mean_luma が上がります。
  • Graybox.clearance、MaterialKit.links、EnvAudit:エラーまたは警告レベルの検出結果はゼロです。
  • プレイテスト:開発用マシンで 60 fps。ビューごとにドローコール数と三角形数を報告します。

コンタクトシート(references/critique.md)を目視で評価します。雰囲気が文章と 一致していること、グレースケールでも明暗の構成が分かること、スポーン地点から照らされた面が見えること、ランドマークと 背景にコントラストがあること、素材がプラスチックのように見えたり、ほぼ黒になったりしていないこと、遠景の霞がシルエットを残すこと。

よくある間違い

間違い修正
スクリプトで Lighting.Technology = Future を設定するLightingStyle と PrioritizeLightingQuality を使用します。Technology は place ファイルでのみ設定します
スクリプトでストリーミング半径や Terrain.Decoration を設定するファイルでのみ設定します:Rojo の $properties または Properties パネル(実行中は「有効なメンバーではありません」と表示されます)
小さな半径で LevelOfDetail = StreamingMesh を使用する静的モデルには SLIM を使用します。StreamingMesh は TargetRadius が 1000 以上の場合にのみ使用します(Andrew、Wwj8EkMWFhI)
ドアを 4×8 にする少なくとも 10×10 にします
Hull または Box のユニオンでドアを作るパーツを使用するか、Default fidelity のユニオンを使用します
BaseMaterial を Grass にしたバリアントで、地形も変わると期待するGrass と LeafyGrass には SetBaseMaterialOverride を使用し、その後、地形の素材の色を確認します
適用後にバリアントの名前を変更する名前は変更せず、MaterialKit.links で監査します
Soft で ShadowSoftness を調整し、その後 Realistic で評価する出荷するスタイルで評価します。スタイルごとにキャプチャします
太陽の向きを調整する前に色を調整する最初に Looks.aimSun を実行します
Edit のキャプチャでブルームを評価するIntensity 3 のブルームによるキャプチャの変化は、同一条件のキャプチャ間の差を超えませんでした(実行中)。プレイ中またはデバイス上で評価します
遠くにポイントライトを 1 つだけ置くライトを近くと遠くに 2 つ置きます。Range は 120 で止まります
CastShadow をオンにしたガラスCastShadow をオフにします

引き継ぎ

対象(引き継ぎ元または先)内容
scenario-3d、次に scenario-roblox-assetsScenario のメッシュはそこでインポートして確認します(トライアングル、コリジョン、SurfaceAppearance)。このスキルではメッシュを配置し、fidelity と LevelOfDetail を設定して、ライティングを行います
scenario-texturesタイル状に使える PBR セットはここで MaterialVariants になります(color、normal、roughness、metalness、OpenGL normals)。単一メッシュ用のテクスチャセットは scenario-roblox-assets に SurfaceAppearance として送ります
scenario-skyboxes6 面を Sky.SkyboxBk/Dn/Ft/Lf/Rt/Up に設定します。アップロードにはユーザーの許可が必要です。空はシーンに色を付けるため、見た目を確認して評価します
scenario-game-assetsデカールとサインはここでサーフェスに配置します。UI アートは scenario-roblox-ui に送ります
scenario-roblox-performanceストリーミング設定、予算、デバイスのテストについては、P11 Stats と EnvAudit のカウントを送ります
scenario-roblox-vfx-audioパーティクル、ビーム、環境音については、ムードを表す文とライトの位置を送ります
scenario-roblox-gameplayコリジョングループ、ヒットボックスの形状、グレーボックス内の NPC ナビゲーション
scenario-roblox-toolingファイルのみの設定を含む Rojo プロジェクト

現在の Roblox に関する注意事項

  • Lighting.Technology は LightingStyle(Soft または Realistic)と PrioritizeLightingQuality に置き換えられています。スクリプトから Technology を読み取ることはできません。
  • スクリプトからの設定が拒否されるファイルのみの設定(ライブ環境):StreamingTargetRadius および StreamingEnabled を除くその他のストリーミング設定、 Terrain.Decoration、GrassLength、MaterialService.<Material>Name。Rojo 7.7.1 ではこれらすべてを書き込めます(Lune で読み戻し)。
  • Rojo で作成したプレースはエンジンのデフォルト設定で開始します。GlobalShadows はオフ、環境スケールは 0、アンビエントはグレーで、 Sky や Atmosphere はありません(ライブ環境)。
  • GeometryService:SubtractAsync とその関連 API は BasePart:SubtractAsync に取って代わります。結果は親なしで返され、 CollisionFidelity の書き込みは次の yield 後に読み戻されます(ライブ環境)。
  • ReadVoxelChannels は結果テーブルに Size を返し、ReadVoxels はマテリアル配列に返します (ライブ環境)。
  • Terrain の Clouds は Workspace.Terrain の下にあり、スクリプトで作成できます(ライブ環境)。
  • 実行中のゲームでも、ClockTime は自動では進みません(ライブ環境)。

参考資料

コメント