binvox 檔案格式是一種體積像素(volumn pixel, voxel)格式,簡稱體素。體素能以較省空間的形式來表示一個 3D 模型,常應用在 minecraft、樂高積木上。
從一個相同物體,但用不同格式呈現的模型來看,用 obj 格式的檔案較 binvox 格式大。推測的原因可能與檔案格式有關,obj 格式使用 ascii 碼敘述每一行資料,但 binvox 將大部分資料以 binary 儲存,有壓縮成一行的效果。
但如果體素不以 binary 格式儲存,則可能不一定會比較小,因為體素格式會描述一個立方體範圍內的所有體素為 0 或 1,意思就是如果一個 256x256x256 的體素內只有一個點為 1,也還是會使用相同大小的大小。但若是改用點雲等格式則是只描述物體相對於原點上的特徵,如果只有一個點就只需要一行就可以描述完畢。
#binvox 1
// 1 代表對應的版本,#binvox 代表該檔案格式是 binvox
dim 256 256 256
// 分別代表體素網格的高度、寬度和長度,三個維度應該是相等的
translate -0.241359 -0.319687 -0.241206
scale 7.30682
// 上面兩行主要是用來正規化從網格到體素的變換,分別是平移和縮放。
data
// 檔案最後一項代表體素的資料,全部以二進制格式儲存。
translate
和 scale
的目的是要對其他格式的檔案(例如 mesh)進行正規化。使體素模型可以擬合到一個 1x1x1 的立方體上,並且其原點位於 (0, 0, 0),這是透過平移和縮放來達成的。步驟依序如下: