本日は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形式では正式な頂点カラーという定義はないものの頂点を定義するテンソルの一部として定義されています。
これはシンプルなフォーマットならではの工夫でとても驚きました。
本日は以上です。