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形式に変換したものです。
このBのところのLoad/SaveがこのViewerの特徴でして、64x64x64の3D形状をファイルサイズ1Kバイト(下図参照)のIM-NETエンコード結果として保存、読み込んで元の形状を復元することができます。
さらにViewerに数式入力用のフィールド(下図の赤枠部分)を追加して形状を表現する256次元のベクトルに好みの演算を行ったうえで3Dの形状に変換できるようにしました。
自由な数式の入力ができるので、2つの形状間のモーフィングだけでなく以下のように3つの形状を足して3で割るといったことも可能です。デザインとして面白い形状になるかどうかは別の問題ですが...
新しい形状を作るのに必要なViewerとしての機能は最低限整ったと思うので、次は学習用3Dデータを増やしていくことを考えています。