blenderを使って「自分の埴輪」を作る:藤井寺市 オリジナル3D埴輪メーカーの事例

こんにちは、OP事業部で主にUnityエンジニアをしている原です。

この記事はTech KAYAC Advent Calendar 2023の12日目の記事です。

Unityを触る傍ら、blenderもいくらか勉強を進めていて、その結果昨年から今年にかけてblenderを使った「オリジナル3D埴輪メーカー」という案件に携わりました。

www.kayac.com

この案件では、利用者の顔を3Dスキャンし、そのデータをかわいい埴輪の3Dモデルと合体させて3Dプリントすることで、「自分の顔の造形をしている埴輪」という架空の遺物を生み出すことに成功しました。

本記事では、どのようにしてオリジナル埴輪を作り出したのか、その技術背景について解説いたします。

目次

そもそもオリジナル3D埴輪メーカーとは

オリジナル3D埴輪メーカーとは、大阪府藤井寺市の令和4年度観光プロモーションコンテンツとして開発されたシステムです。

iPhoneでスキャンした3Dデータと埴輪の雛形を合成したデータを3Dプリンターで印刷するというもので、 誰でも簡単に自分そっくりのオリジナル埴輪をつくれる体験を提供しました。

iPhoneアプリ「Heges」で顔をスキャンする

Hegesで私の顔をスキャンしてるところ

本案件の相談を受けるにあたって、まず最初に検討したのが「顔の3Dスキャンデータを作成する方法」でした。 3Dスキャンアプリ、有名どころだとScaniverseなどがありますが、3Dスキャンの精度が悪く、採用が難しいものが多かったです。 こういった3Dキャプチャは、業務用には精度のよいデバイスやシステムが多くありますが、プロジェクトのサイズには合わないサイズの金額になってしまいこれも難しい。 最終的に行き着いたのが「Heges」という3Dスキャンアプリです。

the iOS 3D Scanner app | using FaceID or LiDAR to make scans

HegesはiPhoneの顔スキャン用のセンサー情報をもとに3Dモデルを生成しており、他のスキャンアプリよりもかなり高い精度のデータが作れることがわかり、採用にいたりました。

また、アプリ開発者の方は、このアプリをプロジェクトの一部として使わせてもらうことを快諾してくれました。

スキャンデータどう扱うか問題

さて、これで解像度の高い顔のモデルデータを取得できることがわかりました。 次の問題は、「このモデルをどうやって埴輪モデルと合体させるか」 また、それ以前に「このスキャンモデルをどうやって使える状態にするか」という問題がでてきます。 プロ向けのものも含めて、世の中には3Dスキャンのできるシステムが数多ありますが、ほとんどの場合はスキャンしたモデルをそのまま使うことはできません。 なぜなら、3Dスキャンは「これを3Dスキャンしたい」と思った対象だけを選んでスキャンしてくれるわけではなく、必要のないものも含めて写ったものすべてをスキャンしてしまうからです。

顔の部分のメッシュだけほしいけど、不自然に離れた体のメッシュもついてきてしまう

なので、プロの3Dスキャン屋さんに発注するとモデルをクリンナップする作業がついてきて、1つ1つ人力なのでとても手間とお金がかかります。 今回は、そういったクリンナップする作業のできる人を運用スタッフとしてアサインしない(し、そもそもそこまで手間をかけるようなものにしたくない)でも運用できるシステムが要件でした。

色々考えたり検証したりした結果、このような解決方法に至りました。

スキャンモデルのクリンナップはあきらめて、シュリンクラップの吸着先としてだけ使う

そう、スキャンモデルをそのまま使おうとするとクリンナップが途方も無いことになってしまいますが、今回やりたいことは「顔部分を埴輪にくっつける」ということだけなので、顔部分の表面形状さえ手に入れば何でもいいのです。 Blenderには「シュリンクラップ」という便利な機能があります(まあ、Blenderに限らずたいていの3Dモデリングのソフトについてる機能ですが)。 これは、その名の通り「ラップを収縮」させるかたちでモデルを作る機能で、対象となるモデルに別のモデルを吸着させて、形状をコピーするような機能になります。

reflectorange.net

よく使われている例で見るのは、キャラクターの服装の形状を作るケースです。体と形状の違う服を素早く体に合わせたい時に便利な機能なのはご想像の通りです。 このシュリンクラップの機能は細かい設定もできる優れもので、今回特に重要な「形状を反映させたいところと反映させたくないところがある」という要件に対して実現できる機能があります。それは、「シュリンクラップの強さをウェイトの強さで設定できる」という機能です。 これによって、「埴輪もモデルの顔部分だけウェイトを強くし、そこ以外は0にする」ことで ・埴輪の顔部分だけ形状を反映する ・3Dモデルの方は、顔部分の形状以外は無視する ということを実現できました。

赤色の強いところほど変形の影響が強い

blenderを自動化!システム全体像

さあ、埴輪のモデルに顔を反映させる方法は確立できました。 課題はまだまだあります。メッシュをクリンナップしなくてもいい方法は見つかったものの、シュリンクラップの設定だって一般の方には無理です。 また、iPhoneでスキャンしたモデルをblenderにもっていくのはどうするの、適当にスキャンしたらバラバラのデータができてしまうけどどうするの・・ などなど枚挙にいとまがありません。 これらを解決した方法について、概要になりますが説明いたします。

システム全体像

システムの全体としてはこんな感じになりました。 工夫したポイントとしては、まず顔のスキャンのために専用のジグをデバイスエンジニアが作成し、どの利用者がスキャンしても角度をずらさずにスキャンできる状態にしました。

iPhoneをレールに乗せて動かすことで、スキャンデータ内の顔の位置が安定する

また、blenderはオペレーション操作をpythonで記述・実行することができるため、前述した3Dスキャンデータの取り込みからシュリンクラップまでは実行ファイルのダブルクリック一発でできるプログラムをUnityエンジニアが実装しました。

「ハニワ加工」をダブルクリックすると、blenderの自動処理が走る

最終的な3Dプリンタ手前のところでは、FlashPrintでオペレーションしてもらうことになりました。ここの自動化までは難しかったというのもあると思いますが このオペレーション自体は、紙をプリントする時に出てくるダイアログの操作とそこまで難易度は変わらない気もします

FlashPrintの画面

このような感じで、専門の技術者じゃなくとも埴輪出力ができるシステムが出来上がりました。

まとめ

ひと昔前だと、「人物をスキャンして、それを3Dプリンタでプリントしたものをプレゼントする」みたいな企画にはそれなりのマンパワーや特殊機材が必要になったものでしたが、現在は身近に手に入る機器やソフトがかなり高度化して、(要件にもよりますが)かなり身近なものの組み合わせで実現できるようになったことが個人的な驚きでした。 これを読んでいる方もぜひ、現代最新の技術でブレイクスルーできそうなことを探してみるとよいかと思います。

カヤックでは3Dプリンタでいろいろ作りたいエンジニアも募集しています!

hubspot.kayac.com