【第19回】3Dモデルを自在に操る!iDesktopXの3Dシーン構築・編集テクニック
こんにちは!GIS導入支援コンサルタントのippuku_timeです。
「5分で分かるSuperMap iDesktopX製品・機能紹介シリーズ」、第19回です。前回は、iDesktopXの基本的な「3Dビジュアライゼーション」機能で、2Dデータから3Dシーンを立ち上げる方法を見ました。今回はさらに一歩踏ль込み、3Dモデルをより詳細に、そして自在に作成・編集するための高度な「3D地理シーンの構築・編集」機能について解説します。これはまさに、デジタルツインを自らの手で育て上げるためのテクニックです。
【第19回】3Dモデルを自在に操る!iDesktopXの3Dシーン構築・編集テクニック
3D GISの価値は、単に現実世界を眺めるだけでなく、そこに新しい計画を加えたり、既存のオブジェクトを修正したり、さらには3D空間ならではの解析を行ったりすることで飛躍的に高まります。iDesktopXは、そのための包括的なツールセットを提供します。
図 GISインターフェース上での精密な3Dモデル編集のイメージ
1. ルールベースモデリング:2Dから精密な3Dへ
前回の「クイックモデリング」は単純な押し出しでしたが、「ルールベースモデリング」はより詳細なモデルを作成するための機能群です。
(1) 建物の構築:
2Dの建物ポリゴン(フットプリント)から、壁の高さ、軒の出、屋根の形状や勾配などをパラメータで指定して、リアルな建物を自動生成します。
(2) ロフト (Loft):
複数の断面形状を、指定した経路(パス)に沿ってつなぎ合わせ、滑らかな3D形状を作成します。地下鉄のトンネルや、複雑な形状の橋梁などをモデリングするのに非常に強力です。
(3) テクスチャの抽出と貼付:
航空写真などの画像から、建物の屋上部分のテクスチャを自動で切り出して、作成した3Dモデルの屋根に貼り付けることができます。これにより、モデルのリアリティが格段に向上します。
2. モデルの軽量化と最適化
BIMモデルや詳細な3D都市モデルは、データ量が非常に大きくなりがちです。これらをGIS環境でスムーズに扱うためには、データの最適化が欠かせません。(1) BIMの軽量化:
BIMモデルから、解析や可視化に不要な内部の構造(壁の中の鉄筋など)を取り除き、外殻だけを抽出する「外殻抽出」や、モデルの見た目を損なわない範囲でポリゴン数を削減する「メッシュ単純化」といった機能で、データを大幅に軽量化します。
(2) メッシュ操作:
3Dモデルの品質を向上させるための基本的な編集ツールです。重複した頂点や面を削除したり、面の向きがバラバラになっているのを修正(トポロジー修正)したりすることで、クリーンで安定したモデルデータを作成します。
3. モデル編集と3Dボリューム分析
既存の3Dモデルを編集したり、その体積を対象とした解析を行ったりする機能です。(1) 3Dブール演算:
複数の3Dモデルを対象に、集合演算を行う非常に強力な機能です。
① 和 (Union): 2つの建物を1つに結合します。
② 差 (Difference): あるモデルから別のモデルの形状をくり抜きます。例えば、地形モデルから建物の基礎部分を掘削するシミュレーションが可能です。
③ 積 (Intersection): 2つのモデルが重なり合う部分だけを抽出します。
(2) 3Dバッファ:
点、線、面から3次元的なバッファを作成します。例えば、地下鉄の路線(3Dライン)から半径30mの円筒状バッファを作成し、建設工事が影響を及ぼす可能性のある範囲を3次元的に特定するといった解析が可能です。
4. 地形と写真測量モデルの専門的な操作
(1) TIN地形操作:TIN(不規則三角網)で表現された地形データに対して、穴あけ(建物の基礎部分など)、クリッピング(特定の範囲の切り出し)、インセット(道路や河川モデルを地形に綺麗にはめ込む)といった操作が可能です。
(2) 写真測量モデルの操作:
Project PLATEAUなどで提供されるリアルな3D都市モデル(写真測量モデル)に対しても、同様の編集機能が提供されています。不要なオブジェクト(通行中の車や、撮影エラーで生じた浮遊物など)を削除したり、テクスチャを修正したりすることで、モデルの品質を向上させることができます。
まとめ
今回は、3Dモデルを自在に作成・編集するためのiDesktopXの高度な機能群をご紹介しました。単純な2Dデータからの詳細な3Dモデル作成、BIMなどの大規模データの最適化、そして3Dブール演算や3Dバッファといった高度な編集・解析まで、iDesktopXはデジタルツインの構築から維持管理、そして高度なシミュレーションまで、3D GISのライフサイクル全体をサポートする強力なツールセットを提供します。
次回は、**第20回「さらに深く!3Dデータ処理の専門技術」**です。モデル、地形、点群といった各種3Dデータの、より専門的な変換や処理機能について解説します。お楽しみに!
付録:サンプルコード(Python)
iDesktopXのPython IDEを使い、3D空間解析の基本である「3Dバッファ」を作成するサンプルコードです。ここでは、仮想的な地下鉄路線(3Dライン)の周囲に円筒状のバッファを作成します。
Python
# -*- coding: utf-8 -*-
from PySuperMap import *
from PySuperMap.Analyst import *
from PySuperMap.Data import *
from PySuperMap.Realspace import *
def create_3d_buffer_sample():
"""
3Dラインデータセットに対して3Dバッファを作成するサンプル
"""
try:
# ワークスペースとデータソースを取得
workspace = Workspace()
datasource = workspace.get_datasource("Minato_Data_3D")
if datasource is None:
print("3Dデータソース 'Minato_Data_3D' が見つかりません。")
return
# 入力となる3Dラインデータセットを取得 (例: "Subway_Line")
line3d_dataset = datasource.get_dataset("Subway_Line")
if line3d_dataset is None or line3d_dataset.get_type() != DatasetType.LINE3D:
print("3Dラインデータセット 'Subway_Line' が見つかりません。")
return
print("3Dバッファ分析を開始します...")
# 1. 3Dバッファ分析のパラメータを設定
buffer_param_3d = BufferAnalystParameter3D()
# バッファ半径を設定 (単位はデータセットの座標系に依存)
buffer_param_3d.set_radius(30.0) # 30メートルの円筒バッファ
# バッファの端点のスタイルを設定
buffer_param_3d.set_end_type(BufferEndType.ROUND)
# 2. 3Dバッファ分析を実行
# 結果はモデルデータセットとして生成される
result_dataset_name = "Subway_Buffer_30m"
result_dataset = GeoAnalysis.create_buffer3d(
line3d_dataset, datasource, result_dataset_name, buffer_param_3d
)
if result_dataset is not None:
print(f"3Dバッファが完了し、結果がモデルデータセット '{result_dataset_name}' として保存されました。")
# 結果をアクティブなシーンに追加して可視化 (オプション)
scene_control = workspace.get_active_scene_control()
if scene_control is not None:
scene = scene_control.get_scene()
layer = scene.get_layers().add_dataset(result_dataset)
# スタイルを設定して半透明にする
style = GeoStyle3D()
fill_symbol = FillSymbol3D()
fill_symbol.set_fore_color(Color(0, 0, 255)) # 青色
fill_symbol.set_alpha(0.5) # 50%透過
style.set_fill_symbol(fill_symbol)
layer.set_style3d(style)
scene.refresh()
print("結果をアクティブなシーンに追加しました。")
else:
print("3Dバッファ分析に失敗しました。")
except Exception as e:
print(f"エラーが発生しました: {e}")
if __name__ == '__main__':
create_3d_buffer_sample()
コメント
コメントを投稿