mcpField
B
blender-environment-kits

blender-environment-kits

github.com/el4cteoクリエイティブ・メディア1.1k282 回インストール今日更新
リポジトリ

blender-environment-kits について

blender-environment-kitsは、地形生成、アセット散布、モジュール式環境パーツの検査を行うBlenderスキルです。ゲーム環境アーティスト向けに、地形作成、プロシージャル配置、キット検証のスクリプトを備えています。

主な機能

  1. 01プロシージャル地形とハイトマップの生成
  2. 02ハイトマップと地形スプラットマップの書き出し
  3. 03傾斜と高さでコレクションを散布
  4. 04モジュールキットのグリッドとピボットを検証
  5. 05オブジェクトの変換と原点を修正

活用シーン

  1. 01ゲーム環境の地形を作成
  2. 02地形に樹木や岩を配置
  3. 03ゲームエンジン向けに地形データを出力
  4. 04モジュール式の壁や床の接合を確認

インストール

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

$npx skills add https://github.com/el4cteo/blender-skills --skill blender-environment-kits

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

同梱ファイル

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

scripts/
_bpyx.py
kit_check.py
scatter.py
terrain.py

詳細

環境キット

実行モデルはblender-coreにあります。カスタムGNツールはblender-geometry-nodes、マテリアルはblender-texturing(トリム、頂点ブレンド)、時間帯や天候はblender-time-of-day/blender-weather-fxにあります。

それぞれを1回呼び出す

scripts/terrain.py -- --size 400 --res 513 --height 60 --type ridged --erosion 30 --flatten 0 0 40 --material
scripts/terrain.py -- --heightmap //hm.png --size 1000 --res 1009 --height 120 --export-splat //T_Splat.png
scripts/scatter.py -- --target Terrain --collection Trees --density 0.02 --min-distance 5 --max-slope 25 --height-max 45
scripts/scatter.py -- --target Terrain --collection Rocks --density 0.05 --max-slope 70 --align 0.8 --name ENV_Rocks
scripts/kit_check.py -- --objects SM_Wall_4m SM_Floor_4m SM_Door_4m --grid 0.5 --fix

地形(terrain.py)

  • --size mの範囲に、--res²個の頂点でグリッドを作成します。Unityでは2^n + 1(513/1025/2049、.raw 16ビットLE)を使用し、UE Landscapeでは推奨サイズ(505/1009/2017/4033、16ビットPNG)を使用してください。1025を超える場合はタイルに分割してください。
  • --type fbm(起伏)、ridged(山岳)、hills(不均一な地形)。--scale = 地形の特徴サイズ(m)。--erosion N = 熱侵食の反復回数(安息角33°):斜面が緩やかになり、土砂が谷を埋めます。--terrace m = 段状の平地。--flatten X Y R = 平坦なプレイ/建築エリアを作り、スムーズステップで周囲になじませます。
  • ENV_Slope(度/90)とENV_Height(0~1)のポイント属性を書き込みます。--materialはこれらを使って草、岩、雪を設定します。35°を超える斜面には岩、標高が上位25%で傾斜が約40°未満の斜面には雪を配置し、ノイズで境界を崩します。
  • エンジン:--export-heightmap(PNG = 16ビットグレースケール、.raw = 16ビットリトルエンディアン、行0 = −Y端。Unityで反転して表示される場合は垂直方向に反転してください)と、インポート時のZスケールを指定するheightmap_z_scale_m。--export-splat = 地形レイヤー用の16ビットRGBAウェイト(Rは草、Gは岩、Bは雪、合計1)。どちらもRaw(ディスプレイトランスフォームなし)で書き出されます。往復変換誤差は0.001未満です。

散布(scatter.py)

  • レイヤーごとにGNモディファイアーを1つ使用します。ポアソンディスク(--densityは最大密度/m²、--min-distanceはm)に基づき、補間されたサーフェス法線が--max-slope以内で、Zが--height-min/maxの範囲内(オブジェクト空間)の位置に配置します。--mask = 頂点グループまたは密度係数として使う浮動小数点属性(ペイントするか、ENV_Heightを使用してください)。
  • コレクションの子オブジェクトはそれぞれの原点を基準に、ランダムなヨー、--scaleの範囲、--align(0 = 直立した木、0.6~1 = 斜面に沿う岩)でインスタンス化されます。ソースコレクションはビューレイヤーから除外されます。
  • 結果では、各インスタンスを実際のサーフェス(slope_max_deg、height_range)に照らして確認し、ソースごとの数を数えます。インスタンスはインスタンスのまま維持されます。エクスポーターやブーリアン処理で実メッシュが必要な場合にのみ--realizeを使用してください。
  • 密度:森林の木は0.01~0.05/m²(最小距離4~8 m)、低木は0.05~0.2、岩は0.01~0.1、草の株は2~20/m²(カメラ付近のみ)。大きいものから小さいものへレイヤーを重ねます。木、幹から離すマスクをかけた低木、草の順です。
  • エンジン:glTFではexport_gpu_instances=True(EXT_mesh_gpu_instancing)、またはUEのFoliage/PCGやUnityのインスタンシングスクリプト向けに--export-points file.json(ワールド変換、Z-up、m、wxyzクォータニオン)を使用します。FBXでは実体化したジオメトリか、インスタンスごとのオブジェクトが必要です。

モジュラーキット(kit_check.py)

  • まず寸法を決めます:グリッド(0.5 m単位、1/2/4 mモジュール)を選び、全体で統一してください。屋内の壁の高さは3~4 m(プレイヤーの目の高さは約1.8 m、目線は1.6 m、ドアは幅1 m以上、高さ2.2 m以上)、床は4 × 4 m、階段は蹴上げ0.18 m/踏面0.28 mです。UEはcm単位(インポート時に×100)、Unityはm単位です。
  • パーツを一定間隔でスナップできるよう、--pivot corner(デフォルト)、bottom-center、centerのピボット規約を使います。フットプリントの長さはグリッドの倍数にします。1セルより薄い寸法(壁の厚さ、トリムなど)はグリッドに合わなくてもかまいません。
  • 開いたエッジを設けてよいのはパーツの外面(継ぎ目)のみです。内部の穴はエラーです。継ぎ目の頂点はグリッド上に配置し、隣接パーツと視覚的につながるようにします。テクセル密度はキットの中央値から25%以内にします(--texture px)。名前にはSM_を付けます(--prefix)。
  • --fixは回転/スケールを適用し、ジオメトリを動かさずに各原点をピボットへ移動します。リンク複製はメッシュデータを共有するため、ソースは一度だけ修正してください。
  • トリムやデカール(blender-texturing)、頂点カラーのブレンド、回転/ミラーのバリエーションを使って繰り返しを目立たなくします(ミラーでは法線が反転するため、blender-asset-qaで確認してください)。継ぎ目は接合部を覆うトリムパーツで隠します。

注意点

  • 散布する前に、地形/キットのスケールを適用してください。密度と傾斜はワールド座標基準です。
  • 散布の高さはターゲットのオブジェクト空間での値です。地形は原点に配置するか、--height-* でオフセットしてください。
  • ポアソン数が非常に大きいと処理が遅くなります。タイル/エリアごとに散布するか、ビューポートでは密度を下げ、レンダリング時に上げてください。
  • blender-asset-qa(崖に浮いたインスタンス、デカールのZファイティング)と blender-game-optimization(インスタンス、LOD、ドローコール)で、地形と散布を検証してください。

コメント