質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Q&A

1回答

1468閲覧

3Dモデルの外見(メッシュ)を徐々に変化させたい

Bruno_5239

総合スコア23

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

0グッド

0クリップ

投稿2021/06/10 10:28

編集2022/01/12 10:55

ある人型の3Dモデルを、別の人型の3Dモデルに差し替えたいと考えています。
しかし、見た目をパッと変えるのではなく、昔の3DCG映画のような徐々に形が変わる補間の仕方をさせたいのですが、どのような方法があるでしょうか?
調べても全く関連する記事を見つけられないです。
どなたかお力添え頂けるとありがたいです

一番近いイメージがこれでした笑
Youtube

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

任意のモデル同士をなめらかにモーフィングさせるというのは、かなり厳しいんじゃないでしょうかね...
モーフィングの一例としては、「【UnityShader】レイマーチング入門【5】 #36 - 知識0からのUnityShader勉強」のような方法があり得ると思います。とはいえ、記事では形状を立方体と球体に相互に変形できていますが、あれは物体の作る距離場を単純な数式で表現できるため十分高速に実現可能なのでしょう。

Unity上で用いられるモデルはポリゴンでできたメッシュなのが普通だと思いますが、そのような物体について距離場を定義するとなると、メッシュを構成する面一枚一枚について距離を求めることになりそうです。数枚~数十枚程度の面でできたシンプルな形状ならいいでしょうが、人型であればそれなりのポリゴン数があるでしょうから計算コストが大きくなってしまうと思います。

彫像のような動かないモデルであれば、距離場を事前計算してTexture3Dだとかの形で持っておくことも可能かもしれません(たとえば「SDF テクスチャを uRaymarching で描画してみる - 凹みTips」の記事中に登場する天使像はそういった状態になっているようです)。ですが、三次元のテクスチャはちょっと精密にしようとするとたちまち莫大なメモリを消費しますし、そのサイズに比例して距離場生成の計算コストも増大しますので、あまり高解像度にはできないかと思います。

他の候補としてはブレンドシェイプとかでしょうか。キャラクターの表情を変化させるのにブレンドシェイブを使っている例をご存じかもしれませんが、その延長として全身を変形させてしまう...というのもなくはないかもしれません。
ですがブレンドシェイプは変形元と変形先の頂点数が同じで、トポロジー的にも矛盾がないという条件でないと使えないでしょう。また、人型のモデルとなるとスキンメッシュアニメーションを行う場合があるでしょうが、ブレンドシェイプではボーンウェイトまでは操作できないようですので、あまり元の形から離れた変形をさせるとアニメーションへの追従具合が不自然になりそうな気もします。
ブレンドシェイプだとどうなるか気になりまして、Standard Assetsに収録されているEthanがSpace Robot Kyleに変身する...というのを試してみました。あの二人は体格が似ていましたので、これぐらいの比較的ささやかな変形量ならアニメーションにもさほど影響しないように思います。

図

ですがこれはアセットに収録されているモデルそのものではなく、ブレンドシェイプによる変形を行うためにだいぶ仕込みを行っています。詳細を申し上げるには回答欄だと厳しいですが、概要は...

  • Ethanの方をベースとする。元のメッシュは頂点数が少なくてKyleの形に変形させるには不十分に感じたので、メッシュを細分割して頂点数を増やす。
  • EthanとKyleのモデルを重ね、姿勢も同じにする。KyleはEthanより若干身長が高かったり、体の各部位のプロポーションもだいぶEthanに近いとはいえ幾分ずれがあったので、Ethanに合わせて整形する。
  • Ethanの頂点をKyleの体表に沿った位置に移動させたメッシュを作り、その頂点位置と元の頂点位置との差分を求めブレンドシェイプとする。
  • EthanとKyleではUVマップもまるで違っている。仕方ないので、頂点位置をKyleの体表に合わせる際に併せてKyleの体表のUV座標を求め、それを手がかりにKyleのテクスチャをEthanのUVマップに合わせて再配置する。

といった感じです。正直なところけっこう粗悪な出来で(Kyleに変身した状態の図をご覧いただくと明確でしょうが、オリジナルのKyleよりもかなりデコボコで、テクスチャも汚くなっています)、きれいに仕上げるにはもっとモデリングのスキルが要求されそうです。

やってみた感想としては、ブレンドシェイプは変形前も変形後も最初からご自身で変形を前提としてモデリングしたのでしたら有効でしょうが、どこかの誰かが作った由来の異なる2つのモデルの間で変形させるのは、かなり手間を要するでしょうからちょっとお勧めしにくいですね...

投稿2021/06/14 14:38

Bongo

総合スコア10807

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Bruno_5239

2021/06/15 00:21

なるほど、、 やはり現状では中々難しい実装なのでしょうか。。。 教えていただいたレイマーチングやブレンドシェイプについてもっと調べてみて、専用モデルの作成も検討してみます ご検証いただきありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問