verbalize

文章書く練習…。

3Dオブジェクト(ボクセルデータ)を描画するツールを作った

最近、GANで3Dオブジェクトを生成する論文を読んでいました。下のスライドは雑なまとめなのですが、前者が所謂3D-GANと呼ばれている論文で初めて3Dオブジェクトの生成にGANを適用した論文です。後者はその3D-GANを応用した研究のようです。


どんなものか知るには著者らが公開している動画が非常にわかりやすいです。静止画と同じようにGANを3Dモデルにも適用できそうだということがわかります。


ということでgithubにあがっている実装などを参考に実際にやろうとしているところなのですが、これらの手法では主に3Dオブジェクトを「ボクセル」として扱っています。

このボクセルというのは「体積 (volume)」と「ピクセル (pixel)」を組み合わせたかばん語らしいのですが、要は画像と同じ要領で3Dモデルを3次元配列に格納して表したものです。イメージとしてはマインクラフトみたいな感じです。

https://www.gamersnexus.net/images/media/2012/features/voxels-vs-vertexes.png

CGでは頂点情報や法線、テクスチャなどを保存する.obj, .3dsなどが有名(らしい)ですが、それらに比べると非常に簡単で取り扱いやすくなっています。

その一方でボクセルデータを保存する形式には.binvoxがあるのですが、メジャーではないためかツールが少なめです(まぁただの3次元配列だしね…)。ざっくり探したところ以下のものは便利そうだなと思いました。

ただ、単に.binvoxファイルをアップロードしてすぐに中身を見れるツールはなさそうだったので今回はそれを作ってみました(というエントリです)。ここから試せます。

github.com

ボクセルは形式そのものがシンプルなのでmatplotlibを使って3dplotするのでも良いのですが、結構重いんですよね。three.jsを使えばWeb上でマウスでグリグリできるインターフェースを簡単に作れるので楽しいですし、いつかフロントエンドで使えるかも…。

先程紹介したOnline Voxelizerに比べると動作がかなり遅いしメモリも結構消費してしまうのでそこが今後の課題です。うーん…おしまい。