夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

obj形式のファイルフォーマットを理解する⑤ 頂点カラー

本日は3DCGの基礎理解です。

前回はデータ手打ちでOBJモデルを作成できました。

 OBJのモデルはテキストファイルであるためフォーマットを理解していれば手打ちで入力することができます。

今回は頂点カラーに関してみていきます。

〇OBJ形式

 objはサーフェスモデルの中間拡張子として用いられるフォーマットです。

 ほかのフォーマットと異なりリグ構造などを含めることができず、汎用性が高いとは呼べませんが、シンプルであるうえに軽量であることが特徴であり、単にメッシュデータのみを扱いたい場合やもともとリグなどを含めることを想定していないスキャンデータ等に用いられる傾向があります。

〇OBJ形式での頂点カラー

OBJでは頂点カラーをサポートしていますが、正式なサポートが標準ではなく、ソフトウェアによって若干の違いがあるようです。

Blenderではエクスポート時にジオメトリの値からにチェックを入れている必要があります。

このこの状態でエクスポートされたobjファイルは以下のようになります。

# Blender 4.4.0
# www.blender.org
mtllib noname.mtl
o Cube
v 1.000000 1.000000 -1.000000 0.0000 0.0314 1.0000
v 1.000000 -1.000000 -1.000000 1.0000 0.7412 0.4392
v 1.000000 1.000000 1.000000 1.0000 0.0235 0.0000
v 1.000000 -1.000000 1.000000 1.0000 0.5490 0.8313
v -1.000000 1.000000 -1.000000 1.0000 0.0980 0.9451
v -1.000000 -1.000000 -1.000000 0.5490 1.0000 0.6039
v -1.000000 1.000000 1.000000 0.0118 1.0000 0.0000
v -1.000000 -1.000000 1.000000 0.5412 0.5530 1.0000
vn -0.0000 1.0000 -0.0000
vn -0.0000 -0.0000 1.0000
vn -1.0000 -0.0000 -0.0000
vn -0.0000 -1.0000 -0.0000
vn 1.0000 -0.0000 -0.0000
vn -0.0000 -0.0000 -1.0000
vt 0.625000 0.500000
vt 0.875000 0.500000
vt 0.875000 0.750000
vt 0.625000 0.750000
vt 0.375000 0.750000
vt 0.625000 1.000000
vt 0.375000 1.000000
vt 0.375000 0.000000
vt 0.625000 0.000000
vt 0.625000 0.250000
vt 0.375000 0.250000
vt 0.125000 0.500000
vt 0.375000 0.500000
vt 0.125000 0.750000
s 0
usemtl Material
f 1/1/1 5/2/1 7/3/1 3/4/1
f 4/5/2 3/4/2 7/6/2 8/7/2
f 8/8/3 7/9/3 5/10/3 6/11/3
f 6/12/4 2/13/4 4/5/4 8/14/4
f 2/13/5 1/1/5 3/4/5 4/5/5
f 6/11/6 5/10/6 1/1/6 2/13/6

 OBJモデルの場合は頂点、法線、UV座標がそれぞれ定義され、faceとして紐づけが行われます。

 ところが頂点カラーを表すデータ定義自体はありません。

 上記のデータで注目すべきが頂点を表すvです。

v 1.000000 1.000000 -1.000000 0.0000 0.0314 1.0000
v 1.000000 -1.000000 -1.000000 1.0000 0.7412 0.4392
v 1.000000 1.000000 1.000000 1.0000 0.0235 0.0000
v 1.000000 -1.000000 1.000000 1.0000 0.5490 0.8313
v -1.000000 1.000000 -1.000000 1.0000 0.0980 0.9451
v -1.000000 -1.000000 -1.000000 0.5490 1.0000 0.6039
v -1.000000 1.000000 1.000000 0.0118 1.0000 0.0000
v -1.000000 -1.000000 1.000000 0.5412 0.5530 1.0000

頂点は3次元ベクトルで座標が定義されますが、ここでは6次元であらわされています。

これは座標(XYZ)+頂点カラー(RGB)を意味しています。

〇まとめ

OBJ形式では正式な頂点カラーという定義はないものの頂点を定義するテンソルの一部として定義されています。

これはシンプルなフォーマットならではの工夫でとても驚きました。

本日は以上です。

〇参考

paulbourke.net