vinbox のファイル フォーマットについて


3D モデルの表現方法の一つとしてボクセル (2D で言うビットマップ) というものがあります。

いわゆるドット絵だったり、Minecraft がまさにそれですが、ボクセル形式の一つである vinbox 形式のファイル フォーマットについて今回はメモ程度に残しておきます。(本家にだいたい書いてあります。) このほかにも VoxCad などで用いられる vxc など複数のフォーマットを確認していますが、そちらはまた後日。

 

1. ヘッダ

ヘッダは ASCII で 5 行らしいです。(念のため改行コードの LF を示す n も書いてます。)

– 1 行目
#vinbox 1 (n)
vinbox のバージョン 1 を示します。

– 2 行目
   dim 4 4 4 (n)
xyz それぞれの解像度を示します。xyzは基本的に同一が望ましく、4 4 4 では 64 のボクセルを意味します。

– 3 行目
   transition xxx.xxx yyy.yyy zzz.zzz(n)
標準化する際に xyz 方向に動かした距離だと思います。(私の用途では使わないので無視しました。)

– 4 行目
   scale xxx.xxx yyy.yyy zzz.zzz(n)
xyz 方向の倍率だと思います。(これも使わないので私は無視しました。)

– 5 行目
   data(n)
以降がデータ本体であることを示します。

2. データ本体

本体はバイナリ形式で記録されています。なので、中身を見たい時はバイナリ エディタ (Windows であれば Stirling など) を利用する必要があります。

(参考)
バイナリ データとは…

http://izumi-math.jp/sanae/inf_box/dump/dump.htm

フォーマットの中身

2 バイトずつペアになっています。1 バイト目が 0 or 1 (ボクセルが存在するか否か)、2 バイト目がその値の連続数 (最大で 255 まで) です。

 

たとえば、以下のような場合…

00 2A 01 09 00 0C 01 01

0 が 2A (42) 個、1 が 9 個、0 が C (12) 個、1 が 1 個並んでいる事を意味します。これを省略せずに書くと以下の様になります。

0000000000000000000000000000000000000000001111111110000000000001

更に、書き換えると…

(2 次元)
0000 0000 0000 0000
0000 0000 0000 0000
0000 0000 0011 1111
1110 0000 0000 0001

 

(3 次元)
– 1 段目
0000
0000
0000
0000

– 2 段目
0000
0000
0000
0000

– 3 段目
0000
0000
0011
1111

– 4 段目
1110
0000
0000
0001

 

という事です。

 

vinbox 形式は圧縮していることになるので、ファイル サイズが非常に小さく済むのが利点ですね。

その他のフォーマットだと、ASCII フォーマットだったり、XML だったりするので解像度が上がるにつれてファイル サイズが無視できなくなると思います。多くのファイルを扱う用途には vinbox が向いているかな。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください