チュートリアル / 読んで触ってよくわかる!Mayaを使いこなす為のAtoZ
第54回:赤ちゃんをReCapして3Dプリントしてみよう!
- Maya
- ゲーム
- コラム
- チュートリアル
- 中級者
- 学生・初心者
- 教育
- 映画・TV
今年の正月のこと、おせちも食べたし時間もあるし、手元にはカメラもあるしうちの赤ちゃんは寝ているし、これは赤ちゃんを3D化するチャンスではないか(!?)ということで、ReCap Photoを使って3D化しました。
仕事柄3Dプリンタに関わることもあるので、せっかくだからReCap Photoで作った3Dデータを3Dプリントしてみよう!ということでいくつかデータを用意した次第です。
こんな感じで三つの3Dキャプチャを行いました。下の図はReCap Photoのスクリーンキャプチャです。床にベッドを置いて360度ぐるりと撮影したもの、片手にカメラを持ち、自分を含めて体の前方だけ撮影したもの、そして部屋とともに撮ってみたものの三種類です。
…私が子供の頃はデジタルカメラなんてなかったですし、ゲームボーイは白黒だったし、高校生の頃でもインターネットはダイアルアップで、ADSLって何?光ケーブルってSFの話?という時代だったのに、今どきのコドモは生まれてすぐに記念3Dデータがあるのだと、感慨ひとしおです。(孫が生まれる頃には、写真はホログラム映像かもしれませんよ。)
さて、キャプチャは驚くほど簡単に出来ました。あとはキャプチャした3DデータをMayaに持って行き、データを整えて、3Dプリントサービスに送ることでフルカラーの3Dプリントする、という目論見です。
実際には次の流れで出来上がっています。
写真を撮る → ReCap Photoで3D化 → Mayaで修正(穴埋め、厚み付など加工) → Mudbox(テクスチャ修正) → Photoshop(テクスチャ調整) → OBJとPSDを業者へ
という流れです。
それでは、各ステップをご紹介していきます。
みなさんもご家族を3D化する際に参考にしていただければと存じます:)
気をつけなければいけないのは、可能ならカメラの露出をマニュアルにして、撮るものが明るくても暗くても写真の明るさが一定になるようにしておくことです。こうしておけばあとから画像の明るさを細かく修正する必要が無いですし、3D化の品質も上がります。
今回3Dプリントすることを前提にデータを作ってみると、色々と気づくことがありました。最も重要だと思ったことは「プリントした時にそのままで成り立つポージングで撮影する」ということです。
例えば次のデータを見てください。
これをプリント可能なデータにしようとすると、意外と大変なものです。
まず自立しない形状ですから、土台を作らなければいけません。しかし土台の大きさやバランスにいまいち確信が持てません。置いたらコテリと倒れてしまうようだと、精神的ダメージが大きそうです。(3Dプリント代は決して安くはない!)
空中にあるものをプリントしようとすると土台をどう作れば良いか、という問題と同じく、上の写真の形状は思った以上に土台作りに手間がかかります。厚みをつけたりするのも案外手間です。
一方、立っている人、置いてある物なら、とりあえず自立はできているわけですから、特殊なことを考えなくてもそのままプリントしても自立します。大幅に作業負荷が軽減されます。
なんだかモキャプと同じで、あとで修正しようと考えると思った以上に大変で、はじめからそのまま使えるぐらいのデータを取ったほうが、結果的に作成スピードも早く品質も良くなるのです。
撮影するときには、プリントされた時の形状を考えながら撮影すること、これが重要なようです。というわけで今回は布団で寝ている3Dデータをプリントすることにしました。
状況に応じてやることは様々ですが、よくある修正についてMayaでのアプローチ方法をご紹介します。
(今回はMaya2015を使用しています。ポリゴン編集のメニューの位置が微妙に変わっているので注意して下さい。)
データ修正作業が終わったら、ばらしたメッシュをCombineで一つのメッシュに戻して(Mesh >Combine)、頂点をくっつけて元の状態に戻します(Edit Mesh > Merge Components)。
面倒なようですが、このようにすると結果的に作業がかなりはかどります。
エッジが閉じた形状でない場合はFill Holeが使えません。そういう時は次のツールなどを使って、ひとまずエッジを閉じます。
Append to Polygon Tool (Mesh Tools > Append to Polygon Tools)
Extrude(Edit Mesh > (EDGE)Extrude)
Bridge(Edit Mesh >(EDGE)Bridge)
それからFill Holeをして穴を埋めます。形状を整えるために、必要に応じてMulti-Cut Tool(旧Split Polygon Tool。Mesh Tools > Multi-Cut Tool)で好きなところにエッジを作ります。
例えば次の図では始めに開いた部分の左右のエッジを一本ずつ選択してBridgeを行い、フェースでつなげています。それからエッジを選択してFill Holeをすることで、あっという間に穴埋めをしていす。
次の図はもうちょっと複雑な例です。エッジを二カ所Extrudeします。Extrudeしたエッジの端をAppend to Polygon Toolで接続します。この時点でエッジが閉じるので、エッジを選択してFill Holeを行います。Fill Hole直後ではフェースの表示が変ですが、角にしたいエッジをMulti-Cut Toolで作ると表示が正常になります。
とかくキャプチャデータはコンポーネントが細かいので、なるべく大雑把なオペレーションで処理できる方法を取りながら作業を行わないと、思わぬところでミスをしてしまいます。
これを修正するのに都合が良いのがTransfer Attributes(Mesh > Transfer Attributes)とペイント(Mesh Tools > Paint Transfer Attributes Weights Tool)の組み合わせです。
Transfer Attributesはメッシュの形状をもう一方のメッシュに吸着することができます。更に吸着の強さをペイントすることができます。例えば次のようにターゲットになる平面を作ってTransfer Attributesすることで、キャプチャした形状を生かしつつ、平面にしたいところはしっかり平面にすることができます。
平面、床モデルの順で選択してTransfer Attributesを実行します。
Transfer Attributesのオプションはこんな感じです。
次に、床を選択してPaint Transfer Attributes Weights Toolを実行してペイントモードにします。
Paint AttributesのオプションでPaint operation=Replaceにします。
あとはValue=0だと元の形状、1だと平面に吸着した形状になりますので、好みでペイントしていきます。
おすすめの方法は、一旦Floodボタンを押して元の形状に戻した後、Value=1にして平面にしたいところをペイントする方法です。
同様のテクニックを使えば、球・壁・鉄柱などカチッとした形状のものをキャプチャした後に修正するのも簡単に行えます。
Maya2015からはShrinkWrapというデフォーマで同じようなことができます。そちらはより高速ですので試されることをお勧めします。
床をくり抜くには単にシリンダを作り、残したい部分を囲むように形状を整えて、ブーリアン演算をするだけです(Mesh > Booleans > Intersection)。
くり抜いた部分のエッジをタブルクリックすればエッジループが効きます。ぐるりと土台のエッジを選択してExtrude(Edit Mesh > (EDGE)Extrude)で下に押し出します。
後はFill Holeして底辺を埋めるだけです。
写真がありますから、単純にProjectionでペイントするだけで済みます。カメラの露出を固定した利点がここでグッと効いてきます。
これまでの3Dプリント経験上、ポリゴン数が多いほうが形状が滑らかになることはわかっていますので、出来る限りキャプチャしたデータ量そのままで業者に渡すことにしました。
プリントサイズですが、Mayaのグリッド1Unitはデフォルトで1cm扱いです。そのことに注意しつつ、寸法を整えます。
プリント方法によってどれ位ディテールが残るかなど異なりますし、お値段も変わってきます。大きさもかなり悩みます。大きすぎても置き場所に困るし値段が高くなるし、小さくて物足りないともったいないしと、かなり大きさには悩みましたが、今回は長い辺を13cmとしてプリントしました。
大抵OBJ形式でプリントを発注できます。MakerBotのReplicatorなんかはSTL形式で出せますが、STL形式はUV情報を持たないので、フルカラープリントする場合はOBJになると思います。テクスチャファイル形式はPSDやJPEGなど一般的なフォーマットでやりとりします。色はCMYKです。
というわけで、データを整えたらzipにして業者に送ります。
ダンボールのガムテープを剥がし、開けてみるとプチプチ梱包。梱包材に包まれてうっすら見える立体物。丁寧にプチプチをはがすと、ついにご対面です!
おお、なんだか奇妙な存在感!面白い!うーん、なんか色がゾンビっぽい。。。
布団のシワが妙にリアル。顔は雰囲気が分かる程度で、ちょっと小さかったか、という感じです。横13cmでプリントする場合、60cmの赤ちゃんをベッドごと(=1m強)プリントすると、さすがに顔のディテールは消えつつあるようです。赤ちゃんだけをプリントすれば、13cmが丁度良いぐらいです。
何はともあれ、無事にプリントまでこぎつけることが出来ました!やってみると分かるいろいろなことがありますので、次にまとめてみました。
おそらく人をプリントすると気持ち悪い、と言われるのはこのへんで問題が出ている気もします。いっそのこと様式化して、トゥーンなシェーディングでプリントしたほうが結構良かったりするかもしれません。
かといってデカールマップにしてプリントしたらどうなるかは、ちょっと怖くて試せないので(失敗した時のコストが…)、ぜひどなたかチャレンジしてみてください!ご報告をお待ちしております。
ところで、ゾンビっぽくなったのはプリントで青みがかっているからです。うちの嫁(印刷に詳しい)いわく、CMYKであっても、シアンが残っていると思ったより色が暗くくすむので、肌色のようなものをプリントするときには気持ちシアンを減らしたほうが良いそうです。コントラストも若干強めて、白と黒を強調しておくと良いようです。
あとよくわかったことといえば、形状を作るのはMayaでフィニッシュまで行えますが、色のコントロールには限界があります。色に関しては3Dプリンタの影響を強く受けますので、スキャニングからプリントまで一貫して行ってくれる業者に頼むというのも重要な選択肢だと感じました。自分でやるより割高でも、色の再現をきちんと行ってもらえるなら結果的にお安いです。記念品で、日取りや予算が決まっているなら業者に任せるのが確実です。ムムム…。
こうして出来上がった我が子の記念3Dプリント。時々眺めると、写真とは違う雰囲気が伝わってくるもので、キャプチャされる三次元データには写真とは違う物が含まれているのだなと改めて思います。材質が石膏ですので適度に重く、郵便物を抑えておくのに便利です。(何か使い方が想定外である気もしますが…)
データは永久に残りますので、何年か先に新しい3Dプリンタでプリントしてみても面白いでしょうし、成長の過程をプリントしてもいいですね。
まずは先立つデータがなければプリントできませんので、皆さん写真を取るときは、最低三つの角度から写真を撮る癖をつけておくと、あとでReCap Photoで立体にするときに困りませんよ!
仕事柄3Dプリンタに関わることもあるので、せっかくだからReCap Photoで作った3Dデータを3Dプリントしてみよう!ということでいくつかデータを用意した次第です。
こんな感じで三つの3Dキャプチャを行いました。下の図はReCap Photoのスクリーンキャプチャです。床にベッドを置いて360度ぐるりと撮影したもの、片手にカメラを持ち、自分を含めて体の前方だけ撮影したもの、そして部屋とともに撮ってみたものの三種類です。
…私が子供の頃はデジタルカメラなんてなかったですし、ゲームボーイは白黒だったし、高校生の頃でもインターネットはダイアルアップで、ADSLって何?光ケーブルってSFの話?という時代だったのに、今どきのコドモは生まれてすぐに記念3Dデータがあるのだと、感慨ひとしおです。(孫が生まれる頃には、写真はホログラム映像かもしれませんよ。)
さて、キャプチャは驚くほど簡単に出来ました。あとはキャプチャした3DデータをMayaに持って行き、データを整えて、3Dプリントサービスに送ることでフルカラーの3Dプリントする、という目論見です。
実際には次の流れで出来上がっています。
写真を撮る → ReCap Photoで3D化 → Mayaで修正(穴埋め、厚み付など加工) → Mudbox(テクスチャ修正) → Photoshop(テクスチャ調整) → OBJとPSDを業者へ
という流れです。
それでは、各ステップをご紹介していきます。
みなさんもご家族を3D化する際に参考にしていただければと存じます:)
立体物として成り立つポージングが楽
ReCap Photoは賢いソフトなので、適当に何ヶ所か視点を変えた写真があれば3D化はすんなり行えます。位置と枚数はこんな感じになっています。枚数とカバーしている範囲は潤沢な方です。気をつけなければいけないのは、可能ならカメラの露出をマニュアルにして、撮るものが明るくても暗くても写真の明るさが一定になるようにしておくことです。こうしておけばあとから画像の明るさを細かく修正する必要が無いですし、3D化の品質も上がります。
今回3Dプリントすることを前提にデータを作ってみると、色々と気づくことがありました。最も重要だと思ったことは「プリントした時にそのままで成り立つポージングで撮影する」ということです。
例えば次のデータを見てください。
これをプリント可能なデータにしようとすると、意外と大変なものです。
まず自立しない形状ですから、土台を作らなければいけません。しかし土台の大きさやバランスにいまいち確信が持てません。置いたらコテリと倒れてしまうようだと、精神的ダメージが大きそうです。(3Dプリント代は決して安くはない!)
空中にあるものをプリントしようとすると土台をどう作れば良いか、という問題と同じく、上の写真の形状は思った以上に土台作りに手間がかかります。厚みをつけたりするのも案外手間です。
一方、立っている人、置いてある物なら、とりあえず自立はできているわけですから、特殊なことを考えなくてもそのままプリントしても自立します。大幅に作業負荷が軽減されます。
なんだかモキャプと同じで、あとで修正しようと考えると思った以上に大変で、はじめからそのまま使えるぐらいのデータを取ったほうが、結果的に作成スピードも早く品質も良くなるのです。
撮影するときには、プリントされた時の形状を考えながら撮影すること、これが重要なようです。というわけで今回は布団で寝ている3Dデータをプリントすることにしました。
Mayaでのモデル加工
ReCap Photoで3Dデータ化したらMayaに持って行きます。形状はFBX、テクスチャはJPEGで持ってきます。状況に応じてやることは様々ですが、よくある修正についてMayaでのアプローチ方法をご紹介します。
(今回はMaya2015を使用しています。ポリゴン編集のメニューの位置が微妙に変わっているので注意して下さい。)
作業のスピードアップ
キャプチャした3Dデータは非常に高ポリゴンです。メッシュを加工するときにコンポーネントを選択するのですが、選択するだけでも処理が結構重たいものです。急がばまわれということで、まずは作業をする箇所のフェースを選択してExtractでメッシュを分割します(Mesh > Extract。オプション設定のSeparate extracted facesをオン)。データ修正作業が終わったら、ばらしたメッシュをCombineで一つのメッシュに戻して(Mesh >Combine)、頂点をくっつけて元の状態に戻します(Edit Mesh > Merge Components)。
面倒なようですが、このようにすると結果的に作業がかなりはかどります。
効率的に穴を埋める方法
穴が空いていると3Dプリントするときに問題が出ます。穴を閉じるのに一つ一つエッジを選択してAppend to Polygon Toolでポリゴンすると膨大に時間がかかってしまいます。次の図のように、まずはFill Hole(Mesh > Fill Hole)で閉じると簡単です。そのあと必要に応じて三角形化します(Mesh > Triangulate)。エッジが閉じた形状でない場合はFill Holeが使えません。そういう時は次のツールなどを使って、ひとまずエッジを閉じます。
Append to Polygon Tool (Mesh Tools > Append to Polygon Tools)
Extrude(Edit Mesh > (EDGE)Extrude)
Bridge(Edit Mesh >(EDGE)Bridge)
それからFill Holeをして穴を埋めます。形状を整えるために、必要に応じてMulti-Cut Tool(旧Split Polygon Tool。Mesh Tools > Multi-Cut Tool)で好きなところにエッジを作ります。
例えば次の図では始めに開いた部分の左右のエッジを一本ずつ選択してBridgeを行い、フェースでつなげています。それからエッジを選択してFill Holeをすることで、あっという間に穴埋めをしていす。
次の図はもうちょっと複雑な例です。エッジを二カ所Extrudeします。Extrudeしたエッジの端をAppend to Polygon Toolで接続します。この時点でエッジが閉じるので、エッジを選択してFill Holeを行います。Fill Hole直後ではフェースの表示が変ですが、角にしたいエッジをMulti-Cut Toolで作ると表示が正常になります。
とかくキャプチャデータはコンポーネントが細かいので、なるべく大雑把なオペレーションで処理できる方法を取りながら作業を行わないと、思わぬところでミスをしてしまいます。
デコボコしたデータを平面化
キャプチャした形状は、真っ直ぐな床であっても誤差でデコボコになってしまいます。これを修正するのに都合が良いのがTransfer Attributes(Mesh > Transfer Attributes)とペイント(Mesh Tools > Paint Transfer Attributes Weights Tool)の組み合わせです。
Transfer Attributesはメッシュの形状をもう一方のメッシュに吸着することができます。更に吸着の強さをペイントすることができます。例えば次のようにターゲットになる平面を作ってTransfer Attributesすることで、キャプチャした形状を生かしつつ、平面にしたいところはしっかり平面にすることができます。
平面、床モデルの順で選択してTransfer Attributesを実行します。
Transfer Attributesのオプションはこんな感じです。
次に、床を選択してPaint Transfer Attributes Weights Toolを実行してペイントモードにします。
Paint AttributesのオプションでPaint operation=Replaceにします。
あとはValue=0だと元の形状、1だと平面に吸着した形状になりますので、好みでペイントしていきます。
おすすめの方法は、一旦Floodボタンを押して元の形状に戻した後、Value=1にして平面にしたいところをペイントする方法です。
同様のテクニックを使えば、球・壁・鉄柱などカチッとした形状のものをキャプチャした後に修正するのも簡単に行えます。
Maya2015からはShrinkWrapというデフォーマで同じようなことができます。そちらはより高速ですので試されることをお勧めします。
土台作り
今回はせっかく床の3Dデータがあるので、これを活かしたいのですが、形がいびつで見た目がよくありません。というわけでブーリアン演算で床を丸くくり抜くことにします。Maya2014 Extensionからブーリアンのアルゴリズムが刷新されています。より高速に処理されるので、3Dキャプチャデータを加工するのに最適です。床をくり抜くには単にシリンダを作り、残したい部分を囲むように形状を整えて、ブーリアン演算をするだけです(Mesh > Booleans > Intersection)。
くり抜いた部分のエッジをタブルクリックすればエッジループが効きます。ぐるりと土台のエッジを選択してExtrude(Edit Mesh > (EDGE)Extrude)で下に押し出します。
後はFill Holeして底辺を埋めるだけです。
テクスチャ修正
顔のテクスチャが怪しいのでMudboxでペイントして修正します。写真がありますから、単純にProjectionでペイントするだけで済みます。カメラの露出を固定した利点がここでグッと効いてきます。
発注
いよいよ発注です。これまでの3Dプリント経験上、ポリゴン数が多いほうが形状が滑らかになることはわかっていますので、出来る限りキャプチャしたデータ量そのままで業者に渡すことにしました。
プリントサイズですが、Mayaのグリッド1Unitはデフォルトで1cm扱いです。そのことに注意しつつ、寸法を整えます。
プリント方法によってどれ位ディテールが残るかなど異なりますし、お値段も変わってきます。大きさもかなり悩みます。大きすぎても置き場所に困るし値段が高くなるし、小さくて物足りないともったいないしと、かなり大きさには悩みましたが、今回は長い辺を13cmとしてプリントしました。
大抵OBJ形式でプリントを発注できます。MakerBotのReplicatorなんかはSTL形式で出せますが、STL形式はUV情報を持たないので、フルカラープリントする場合はOBJになると思います。テクスチャファイル形式はPSDやJPEGなど一般的なフォーマットでやりとりします。色はCMYKです。
というわけで、データを整えたらzipにして業者に送ります。
3Dプリント赤ちゃんの完成です!
データを送って数日後、ついに3Dプリントが到着です!なんとドキドキするものでしょうか。ダンボールのガムテープを剥がし、開けてみるとプチプチ梱包。梱包材に包まれてうっすら見える立体物。丁寧にプチプチをはがすと、ついにご対面です!
おお、なんだか奇妙な存在感!面白い!うーん、なんか色がゾンビっぽい。。。
布団のシワが妙にリアル。顔は雰囲気が分かる程度で、ちょっと小さかったか、という感じです。横13cmでプリントする場合、60cmの赤ちゃんをベッドごと(=1m強)プリントすると、さすがに顔のディテールは消えつつあるようです。赤ちゃんだけをプリントすれば、13cmが丁度良いぐらいです。
何はともあれ、無事にプリントまでこぎつけることが出来ました!やってみると分かるいろいろなことがありますので、次にまとめてみました。
まとめ
ゲーム中の3Dデータを想像してみてください。写真を貼り付けたテクスチャにライティングがされると、二重にライティングが入っておかしく見えるように、どうやらライティングありの写真を3Dプリントすると、現実世界で見た時に妙な見え方になるっぽいです。プリントされているライティングと現実のライティングが合わないと、それも見た目におかしいですし。アンビエントオクルージョンも二重に入りますし、妙に暗くなります。おそらく人をプリントすると気持ち悪い、と言われるのはこのへんで問題が出ている気もします。いっそのこと様式化して、トゥーンなシェーディングでプリントしたほうが結構良かったりするかもしれません。
かといってデカールマップにしてプリントしたらどうなるかは、ちょっと怖くて試せないので(失敗した時のコストが…)、ぜひどなたかチャレンジしてみてください!ご報告をお待ちしております。
ところで、ゾンビっぽくなったのはプリントで青みがかっているからです。うちの嫁(印刷に詳しい)いわく、CMYKであっても、シアンが残っていると思ったより色が暗くくすむので、肌色のようなものをプリントするときには気持ちシアンを減らしたほうが良いそうです。コントラストも若干強めて、白と黒を強調しておくと良いようです。
あとよくわかったことといえば、形状を作るのはMayaでフィニッシュまで行えますが、色のコントロールには限界があります。色に関しては3Dプリンタの影響を強く受けますので、スキャニングからプリントまで一貫して行ってくれる業者に頼むというのも重要な選択肢だと感じました。自分でやるより割高でも、色の再現をきちんと行ってもらえるなら結果的にお安いです。記念品で、日取りや予算が決まっているなら業者に任せるのが確実です。ムムム…。
こうして出来上がった我が子の記念3Dプリント。時々眺めると、写真とは違う雰囲気が伝わってくるもので、キャプチャされる三次元データには写真とは違う物が含まれているのだなと改めて思います。材質が石膏ですので適度に重く、郵便物を抑えておくのに便利です。(何か使い方が想定外である気もしますが…)
データは永久に残りますので、何年か先に新しい3Dプリンタでプリントしてみても面白いでしょうし、成長の過程をプリントしてもいいですね。
まずは先立つデータがなければプリントできませんので、皆さん写真を取るときは、最低三つの角度から写真を撮る癖をつけておくと、あとでReCap Photoで立体にするときに困りませんよ!