「ボクセルポリゴンな日々」 - UnityでMakersとVRをつなぐ挑戦 -

Unityプログラムで3DCGアセットデータをVRや3Dプリンターで利用可能にする最新技術や関連最新情報を紹介します。

11月のユニティちゃん立体出力テスト(2) ~全身出力編~

2014年11月12日 18時18分01秒 | VREアルゴリズム開発


ようやくユニティちゃんの全身像が仕上がりました。

とりあえず今は仮目を描いてますが、このあとサイドのサフ吹きで消えると思います。


ということで、前回のユニティちゃんの残りパーツが合体しました。

合体直後はこのように白無垢の姿でした。



しかし今回4分割したパーツの影響で各パーツ間の隙間が目立ってしまったため、
パテで埋めることを決意しました。

寄ってユニティちゃんの白い肌はパテで汚されていくことになります。
(どうせこの後サフェーサーを吹くのですけどね。)(^^;)



今回の出力では細かい所が概ね出ていて満足でしたが、
前髪に関しては細すぎたせいか、もじゃもじゃ状態で出力されていました。

しかたがないので大枠の髪の毛形状を維持しつつ、足りないパーツを欠損部分から補いながら全体をパテで盛り直すことにしました。

その結果、下の写真のようになりました。



昨晩は一旦ここで作業を止め、以前出力していたユニティちゃんも出ると並べてみました。

・・・申し遅れましたが、ブログを更新しなかった間、ずーっとこのユニティちゃんモデルの出力プログラムの作成と、

それを利用したユニティちゃんモデルの試作を進めておりました。(汗)



向かって左から第1世代・第2世代、そして一番右が今回作成した第3世代です。

第1世代は昨年11月にIndieGoGoでファンディングした際に開発した「両面レリーフアルゴリスム」を使用したものです。
実はこのアルゴリズムをUnity上に移植することから開発がスタートしました。



上の写真は昨年開発した「両面レリーフアルゴリズム]で作成したあにまさ式ミクさんのレリーフ調フィギュアです。
(勿論あにまささんの許可を得て作成した一品物です。)

当初は片面レリーフの機能を利用してフィギュア調の彫刻を施すプログラムの開発を目論んでおりましたが、
ファンディングは失敗し、プログラム開発は凍結・・・、と思いましたが、昨年末いきなり話が進みました。



そして「このアルゴリズムを発展させてフィギュアを取り出せるようにする」プロジェクトがスタートしました。

しかも開発環境はUnityになりました。これで開発したプログラムはUnity実行環境を通じてWeb上を始めとする
様々なプラットフォーム上で利用できるようになります。

何よりも重要な目標は、このフィギュア化サービスがゲームに組み込めるようにするという点でした。

かくして1世代目のアルゴリスムによるユニティちゃんが作られたのですが、
両面レリーフかアルゴリズムの問題点である「腕と髪の毛がくっつく」等のモデルの癒着家が露呈しました。

これではフィギュアとしての完成度はだだ下がりです。


そこで2番めに開発したのが「パーツ毎に両面レリーフ化する」アルゴリズムです。

しかしこれでも完全に問題が解決したわけではありません。

上の写真のように直立する姿を立体化するのは問題がないのですが、

腕を上げた際それが体の一部分に重なる構図の場合、前後癒着が発生してしまいます。(汗)

また、正面方向(Z軸)からしか立体化処理を行わないため、Z方向の厚み情報に正確さがありません。

これは各モデルを横から見れば分かります。



このように、手前の2つはやや幅があるのに対し、奥の第3世代(最新作)はスリムです。


そして第3世代は肩口の服のつなぎ目や服のポケットまで細かいところの開口部が再現されています。

何故ここまで細かいモデル情報を再現できるようになったか?

それは両面レリーフ処理を2方向から行なうことでボクセルを生成するというアルゴリズムに大変更したために達成出来ました。

しかも今回のユニティちゃんを出力するため、

2048×2048×2048=8G(80億)ボクセルという途方も無い数のボクセルを相手に計算ができるようになっています。

こうした規模のプログラムをUnity上で動くように、様々な工夫を施した処理を実装しています。



そうした開発を経て、ユニティちゃんにようやく新次元の立体出力方法を確立させることが出来ました。

次はこのポーズのユニティちゃんを出力する予定です。(^^)



11月のユニティちゃん立体出力テスト(1)

2014年11月08日 19時13分46秒 | VREアルゴリズム開発


復活したと思ったら、また更新間隔が空いてしまいました。(汗)

というのも、現在ゲーム開発環境Unityのマスコットキャラクター「ユニティちゃん」の立体出力に挑戦しているからです。

現状では上の図のように体の一部が出力されています。

なんか不思議な状況になっていますが、これは体を分割して3Dプリンターで出力しているからです。

その分割方法は以下のようになっています。

(1)下半身(両足+スカート?の一部)
(2)上半身左
(3)上半身右
(4)頭部

何故4つに分割したのかというと、3Dプリンターが処理できるデータ量の関係で4分割せざるを得なかったからです。

データ量とは、すなわち形状データを表現するポリゴン数のことです。

ユニティちゃん自体のポリゴン数はゲームで使用するキャラクターのため1万ポリゴン程度と思われます。

しかし3Dプリンターで高品質に出力するため、ユニティちゃんのポリゴンモデルを

2048×2048×2048 というボクセルメッシュ空間の内部に展開しています。

このボクセルメッシュ空間、ボクセル(=体積素、「画素」であるピクセルの立体版です)を総計8ギカ個、

ぶっちゃけ80億個も投入して作られているのです。なのでバカみたいにデータが肥大します。

そのボクセル空間に展開したユニティちゃんを再度ポリゴンに変換してできたモデルは、以下のデータ量になります。

(1)下半身  = 180万ポリゴン
(2)上半身左 = 253万ポリゴン
(3)上半身右 = 331万ポリゴン
(4)頭部   = 206万ポリゴン

この4つのパートのポリゴン数を合計すると、なんと964万ポリゴンという途方も無い数字になってしまいます。

現在使用させて頂いている3Dプリンターは、どうやら400万ポリゴン以上の3Dデータを処理できないようなので、

今回はユニティちゃんを4分割して立体出力にかけることにしました。

それでは出力されたモデルを写真で見てみましょう。



このように、残り2個のパーツの完成を待っている状態です。



後方から見た写真です。



横から見た写真です。



後方の髪の毛の房をアップにして撮影しました。

このように、非常に肌目の細かいなめらかな表面になって出力されています。

ところが、3Dプリントする前の元3Dデータの表面は下の画像のようになっています。



このように、地図の等高線のような段差が随所に見られます。

これはボクセルをポリゴンに変換した結果出来た段差なのです。

しかし、3Dプリンターで出力する際、この段差は0.1mmになります。

すなわち出力後段差は材料の積層精度よりも小さくなるため、綺麗に消えてつながってしまうのです。(^^)


次の更新では、新たに作成したパーツを加えてユニティちゃんの全身像を披露できると思います。

お楽しみに。(^^)