3Dモデルをいろいろ作ってみたい

3Dモデルをいろいろ作ろうとがんばっています。苦労した点、役に立ちそうな情報を発信していきます。

3DモデルのViewerにIM-NETのモデル生成機能を組み込む

前回のブログで「次の目標はこのViewerにIM-NETのモデル生成機能を組み込むことになります。」と書いてから早や3か月、やっとコーディングが終わりました。副業(?)のJavaScriptの仕事がちょっと忙しくなってしまい、Vue.jsとかおじさんの知らないフレームワークの勉強などしているうちに1か月ぐらいたっていたんです。副業が落ち着いたあとは1日1,2時間作業していたのですが、そのうち4分の3ぐらいは前の日にやったことを思い出すのに費やす感じで...

何はともあれ現状を報告すると、Viewerに3DモデルデータのLoad(下図の青枠ボタン)とSave(下図の赤枠ボタン)の機能を追加しいろんなフォーマットの3Dモデルの変換ができるようになりました。下図のAはMagicaVoxelのvox形式を読み込んでレゴブロック形式(水平と垂直な面だけで表現されている)もの、BはAをIN-NETのAuto Encooderで256次元ベクトルにエンコードしてから再度復元したもの、CはさらにMarching Cubeアルゴリズムで標準的なOBJ形式に変換したものです。

3Dモデルのフォーマット変換例

このBのところのLoad/SaveがこのViewerの特徴でして、64x64x64の3D形状をファイルサイズ1Kバイト(下図参照)のIM-NETエンコード結果として保存、読み込んで元の形状を復元することができます。

エンコード情報(256次元の浮動小数点数)の読み取り

さらにViewerに数式入力用のフィールド(下図の赤枠部分)を追加して形状を表現する256次元のベクトルに好みの演算を行ったうえで3Dの形状に変換できるようにしました。

エンコード結果を用いた形状のモーフィング(1)

自由な数式の入力ができるので、2つの形状間のモーフィングだけでなく以下のように3つの形状を足して3で割るといったことも可能です。デザインとして面白い形状になるかどうかは別の問題ですが...

エンコード結果を用いた形状のモーフィング(2)

新しい形状を作るのに必要なViewerとしての機能は最低限整ったと思うので、次は学習用3Dデータを増やしていくことを考えています。