BlenderでPython使ってPLATEAUのモデルをランダム選択して結合
ぷちスタで作成したUE5のタイムアタックゲームを拡張しようとマップの作成を考えていたところ、PLATEAUという国のサービス?の存在を知り、23区のFBXデータをダウンロードした。解凍後のサイズは約9GBで結構でかい。
LOD2のモデルはテクスチャ付きだが加工難易度が高そうなのでLOD1のモデルを使用することにした。が、一つ一つはローポリの豆腐建築であってもUE5へインポートするとオブジェクト数が多すぎて応答なしが多発してうまくいかなかった。
Blenderで加工
とりあえず以下のような作業を機能を試しながらポチポチとやってみた。7回なのはテトリスのあれが7色だからなんとなく。
- ランダムに選択
- 選択したオブジェクトを結合
- マテリアルを追加
- 非表示にする
- 1に戻って7回繰り返す
一つのエリアは100個に分割されている。23区全体で14エリアで1400回もポチポチする気になれない。存在だけは知っていたBlender Pythonの出番かと、重い腰を上げて使ってみた。
Blender Pythonを使ってみる
Editor Type
をInfo
にするとこんな画面が出てくる。マウスやキーボードでBlenderを操作するとそのたびにログが出てくる。これをコピペでやればいいんだろうと最初は甘く見ていた。
すんなりいかなかった点
オブジェクトの結合
Ctr + J
をするのには複数選択したうえでActive
な状態のオブジェクトが必要、マウス無しでどうやるの?Brows Material to be linked
をクリックして選んでたけどどうすんの?
ググったらなんとかなった。
- セレクトしてるオブジェクトのうち最初の1つをターゲットにする
target = bpy.context.selected_objects[0] bpy.context.view_layer.objects.active = target
- 結合されたターゲットに対して
if target.data.materials: target.data.materials[0] = bpy.data.materials[sd] else: target.data.materials.append(bpy.data.materials[sd])
そんな感じでこんな感じになった。
まとめ
23区全体を処理しようとすると結局1400回近くFBXをBlenderへインポートしてスクリプトを走らせる作業があると思うとぞっとしてきた。それも自動化できたらいいなぁと思いつつも、時間がないのでエリアを縮小することする。