
車載システム開発部でシミュレーション関連の業務を行っている岡田です。
3DCGの知識を活かして、自動車シミュレーション向けの3D景観を作成しています。

上の画像は当社で作成しているみなとみらいの自動車シミュレーション環境です。
自動車シミュレーションでは、都市などの広大な景観を作成する都合上、大量の3Dモデルのファイルデータや要素を管理する必要があります。
本コラムでは、上記の業務を行ううえで培った3Dモデルに関する基礎知識をエンジニア目線で説明していきます。これをきっかけに、3Dモデルに興味を持ってもらえたら嬉しいです。
なお、3Dモデルの操作はBlender3.6.8で行っています。
そもそも3Dモデルって何?
3Dモデルとは奥行きを持った立体データです。
一般的には“形状”と“材質”という要素を持っており、視点や光源といった要素によって光の反射や陰影を表現します。

3Dモデルの形状は、頂点、辺、面の3つの要素で決定されます。

頂点は座標であり、3次元の座標値を持ちます。
辺は頂点がどの頂点と接続されているかという情報を持ちます。


さらに辺と頂点によって面が構成されます。面は四角形や、三角形が一般的です。
面の最小単位は三角形です。


四角形以上の多角形も、面として作成可能ですが、3Dツールによっては三角形や四角形以上の面の使用を推奨していないものもあります。
推奨していない多角形を使用すると、3Dモデルの形状が崩れることもあるので注意が必要です。
面が構成されると、その面に対して垂直に交わる法線が決まります。
この法線は、3Dモデルの表面の光の反射の計算に利用されるものですが、注意点として、法線は一つの面に対して、表と裏で2通り存在します。
3Dモデルでは、法線を面の向きとして描画に使用しますが、表と裏のどちらを向きとして設定しているかで、想定している方向に面が描画されないという現象が発生します。


上の図では、赤い矢印と青い矢印で法線の方向を表しています。赤い矢印の方向を面の向きとしているため、青い矢印が通る裏側から面を見ると、右の図のように三角形の面が透明になってしまい、表示されていないことが分かります。
下の2つの図は球体の面の向きを全て外側にした場合と、内側にした場合の比較図です。
右の図では視点側を向いている面が透けており、反対側の面が見えるという描画が発生しています。


3Dモデルの描画がおかしいと感じたら、この設定を確認すると解決することがあります。
3Dモデル-材質について
3Dモデルでは、物体の表面の質感を構成する要素をマテリアルと呼びます。
マテリアルを調整することで物体の色や金属感、粗さ、細かい凹凸を再現できます。
一般的には、マテリアルは面の単位で設定されます。
下の図は、赤色と白色の2つのマテリアルを球体の半分ずつに設定したものです。
1つの球体に赤と白の2つのマテリアルが面単位で設定されていることが分かります。

マテリアルの持つ金属感や粗さといった質感に関わる要素は、数値的に設定することも可能ですが、画像ファイルを使用して設定することも可能です。
このような質感を設定する画像ファイルのことをテクスチャと呼びます。
例えば、マテリアルを利用して3Dモデルで金属の球を表現するとします。
左下の図はマテリアルのRoughness(粗さ)という値を0.5にした場合です。
球体の表面全体が鈍い光沢感になっていることが分かります。
対して右下の図はRoughnessをテクスチャで設定した場合です。場所によって光沢感が異なっており、テクスチャを使用した方が、細かい質感を再現できていることが分かります。


ここで、立体的な3Dモデルと平面的な画像であるテクスチャをどのように紐づけているか疑問に思った人もいるのではないでしょうか。
3Dモデルとテクスチャの紐づけは、UVマッピングという作業を通して行われます。UVマッピング時に生成されるUVマップに合わせたテクスチャを作成することで、3Dモデルにテクスチャを貼りつけることが可能です。
下の図はUVマッピング時の3Dモデルツールの画面です。

※既に存在しているテクスチャファイルに対してUVマップを合わせる場合もあります。
一般的な3Dモデルのファイル形式
ここまで、3Dモデル自体が持っている要素について説明してきました。
次に3Dモデルの一般的なファイル形式について紹介します。
名称 | 拡張子 | バイナリ | 説明 |
FBX | .fbx | 〇 | 形状やマテリアルだけでなく、アニメーションのデータも持つことができる。Autodesk社によって開発されたが、同社開発以外の様々な3Dツールに対応している。 |
GLTF | .gltf | △ | JSON形式によって記述されているため、3Dモデルの構造が分かりやすい。.glbという拡張子のものも存在し、こちらはバイナリデータである。 |
OBJ | .obj/.mtl | × | 頂点、辺、面の情報がテキストデータとして記述されているため、3Dモデルの構造が分かりやすい。マテリアルに関しては別ファイル.mtlとして管理されておりobjファイルの内部から参照されている。 |
USD | .usd | △ | 元々はCGアニメーション制作会社であるPixar社が大規模なシーン向けに作成したフォーマット。形状やマテリアル、アニメーションといった3Dモデルの要素をレイヤー別で管理しているため、複数人での編集が可能。 |
各ファイル形式と3Dツールには相性が存在することが多く、3Dモデルを3Dツールにインポートする際、マテリアルの設定が初期化されてしまうことや、3Dモデルが想定とは別の方向を向いてしまうといった現象が発生することもあります。この場合、各ツールに対応させるために3Dモデルを編集する必要があります。
3DツールによってはAPIなどで編集操作をスクリプト化することも可能です。
3Dモデルに対して、テクスチャが使用されている場合、テクスチャが3Dモデル上にデータとして埋め込まれているか、3Dモデルファイルに付随する形でテクスチャファイルが存在します。
別ファイルの場合、3Dモデルとテクスチャファイルが配置されているフォルダの構成が変わると、3Dモデルがテクスチャファイルを参照できないという現象が発生します。


上の図では、テクスチャファイルの配置場所を変えたため、3Dモデルがテクスチャファイルを参照できなくなっています。3Dモデルがテクスチャファイルを参照できない場合、ピンクや赤色などで描画されることが多いです。
3Dモデルの作成方法
ここまで3Dモデルについてお話ししてきましたが、そもそも3Dモデルってどうやって作成するの?と疑問を持たれた方も多いと思います。一般的な3Dモデルを作成する方法を紹介します。
ツールで作成する
比較的ポピュラーな方法は、ツールを利用して作成することです。制作者ごとのスキルによって、品質や作成期間に差は出ますが、細かい造形や質感、各3Dツール向けの細かい設定などを3Dモデルに反映することが可能です。

画像データから作成する
様々な角度から撮影した写真から3Dモデルを作成する技術(フォトグラメトリ)も存在します。
求める3Dモデルの品質によっては、数十枚程の写真が必要になる場合や、高価な撮影機材を使用する必要がありますが、そこまでの高精細さを求めないのならば、iPadなどで撮影した写真からでも3Dモデルを作成できます。
最近はAIの技術で、1枚の絵から3Dモデルを作成する技術も出ているようです。
下の図はiPadで撮影した数十枚の写真を3Dツールで3Dモデルにしたものです。
この時は、写真に写りこんでいる床部分も3Dモデルとして作成されてしまっているため、3Dツール上で削るという工程が必要でした。


床部分を削ったため、残念ながら背中の部分が消えてしまっています。

様々なデータから作成する
標高データや都市モデルデータから3Dモデルを作成することも可能です。
座標変換や面の作成などが必要であり、通常は何らかのコンバータやスクリプトを使用してデータを3Dモデルに変換することが多いです。
下の図は国土交通省がPLATEAUプロジェクトで提供する、都市モデルデータを3Dモデル化したものです。
提供されるデータ自体はCityGMLと呼ばれるXMLデータであるため、3Dモデルとして利用する場合は変換する必要があります。

まとめ
3Dモデルの活用領域はゲームや映画といったエンターテインメント以外にも、シミュレーションなど 様々な分野に広がっています。
そのため、これまで3Dモデルに触れることのなかったエンジニアにもその取り扱いが求められる機会が増えていると感じます。
3Dモデルは用途や目的によって最適な形式や品質が異なるため、エンジニアは目的に応じた適切なデータを選び、効率的に3Dモデルデータを作成できる技術を身に付ける重要性が高まっています。
今回の記事が3Dモデルについて理解するうえでの一助になると幸いです。
