最近、GANで3Dオブジェクトを生成する論文を読んでいました。下のスライドは雑なまとめなのですが、前者が所謂3D-GANと呼ばれている論文で初めて3Dオブジェクトの生成にGANを適用した論文です。後者はその3D-GANを応用した研究のようです。
どんなものか知るには著者らが公開している動画が非常にわかりやすいです。静止画と同じようにGANを3Dモデルにも適用できそうだということがわかります。
ということでgithubにあがっている実装などを参考に実際にやろうとしているところなのですが、これらの手法では主に3Dオブジェクトを「ボクセル」として扱っています。
このボクセルというのは「体積 (volume)」と「ピクセル (pixel)」を組み合わせたかばん語らしいのですが、要は画像と同じ要領で3Dモデルを3次元配列に格納して表したものです。イメージとしてはマインクラフトみたいな感じです。
CGでは頂点情報や法線、テクスチャなどを保存する.obj
, .3ds
などが有名(らしい)ですが、それらに比べると非常に簡単で取り扱いやすくなっています。
その一方でボクセルデータを保存する形式には.binvox
があるのですが、メジャーではないためかツールが少なめです(まぁただの3次元配列だしね…)。ざっくり探したところ以下のものは便利そうだなと思いました。
.binvox
を3次元配列に変換: dimatura/binvox-rw-py(python).obj
や.mtl
を読み込んで変換し、ボクセルとして可視化: Online Voxelizer(web)
ただ、単に.binvox
ファイルをアップロードしてすぐに中身を見れるツールはなさそうだったので今回はそれを作ってみました(というエントリです)。ここから試せます。
ボクセルは形式そのものがシンプルなのでmatplotlib
を使って3dplotするのでも良いのですが、結構重いんですよね。three.js
を使えばWeb上でマウスでグリグリできるインターフェースを簡単に作れるので楽しいですし、いつかフロントエンドで使えるかも…。
先程紹介したOnline Voxelizerに比べると動作がかなり遅いしメモリも結構消費してしまうのでそこが今後の課題です。うーん…おしまい。