Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

ボーンってなんなんですか...?

はじめに

こんばんは。
VTuberが大好きなので、このアドベントカレンダーで書くことができて嬉しいです。

今回はVTuberを動かすために必須のデータであるボーンについて調べてきました。お役に立てれば幸いです。

ボーンが必要とされる理由

たとえば3Dモデルにアニメーションを付けたいと思ったとします。
3Dモデルはメッシュの集合体なわけですが、動かすときにメッシュの座標を1つ1つ指定していてはさすがに大変です。

2019-12-10_20h48_28.png

その問題を解決するため、ボーンというメッシュを簡単に動かすための仕組みがあります。
ボーンは名前の通り、3Dモデルの骨組みと言えるデータとなっています。

仮想の骨をモデルに設定し、「その骨が動いたときにどの部分のメッシュがどの程度の影響を受けるか」という情報を作成します。
これは正しく骨と影響のマッピングができていれば、モデルを動かすという問題は骨をどのように動かすかという問題に置き換えることができるということです。
メッシュを1つ1つ動かすよりはだいぶ現実的な話になってきたのではないでしょうか。

ボーンの作り方

今回はBlenderを使って、下の単純な人型モデルにボーンを仕込んでみたいと思います。

2019-12-10_21h51_21.png

ボーンを入れる

Blenderではアーマチュアという仕組みを使って、ボーンを設定します。

2019-12-10_21h53_36.png

アーマチュアを選択すると、シーンに以下のような物体が出てきます。

2019-12-10_22h16_46.png

実はこれがボーンで、これを複数個組み合わせて動かしたいモデルの骨組みとしていきます。
ちなみに三角錐の先端の球を「ヘッド」、根本の球を「テール」と呼びます。

今回は以下のような組み方をしてみました。

2019-12-10_21h58_34.png

ボーンを整える

次は作ったボーンに名前を付けていきたいと思います。
名前はとても大事な情報で、名前によってUnityに持っていったとき、部位の左右や「ここが腰だ」といった位置関係が判断されたりします。

今回は以下のような名前の付け方をしてみました。

2019-12-10_22h00_10.png

部位 名前
Head
Neck
右肩 Shoulder
右ひじ上 Upper_Arm
右ひじ下 Lower_Arm
右手 Hand
おなか Spine
おしり Hips
右太もも Upper_Leg
右ふくらはぎ Lower_Leg
右足 Foot

次に、今は手と足を右側しか作っていないので、左側を作っていきたいと思います。

まずは手足を選択した状態で、「オートネーム(左右)」という処理を施します。
これは選択されたボーンが、モデルの原点から左右どちらにあるのかを調べて、名前の末尾に「.R」「.L」を追加してくれる便利機能です。

2019-12-10_22h01_04.png

その結果、ボーン名が以下のように変化しました。

部位 名前
Head
Neck
右肩 Shoulder .R
右ひじ上 Upper_Arm .R
右ひじ下 Lower_Arm .R
右手 Hand .R
おなか Spine
おしり Hips
右太もも Upper_Leg .R
右ふくらはぎ Lower_Leg .R
右足 Foot .R

更に選択している右パーツに「対称化」という処理を施します。これによって右パーツを反転させて左パーツを作ることができます。

2019-12-10_22h03_12.png

ボーン構造は左パーツが作成されたことで以下のように変化しました。

2019-12-11_02h38_46.png

部位 名前
Head
Neck
右肩 Shoulder.R
右ひじ上 Upper_Arm.R
右ひじ下 Lower_Arm.R
右手 Hand.R
左肩 Shoulder.L
左ひじ上 Upper_Arm.L
左ひじ下 Lower_Arm.L
左手 Hand.L
おなか Spine
おしり Hips
右太もも Upper_Leg.R
右ふくらはぎ Lower_Leg.R
右足 Foot.R
左太もも Upper_Leg.L
左ふくらはぎ Lower_Leg.L
左足 Foot.L

ボーンはこれにて完成です。

メッシュとボーンをマッピングする

作ったボーンと3Dモデルを合体させる作業を最後に行いたいと思います。
ここの工程で「この骨を動かしたら、モデルのこの部分が動く」というのを確定させることになります。

一見面倒そうですが、今回はBlenderの機能でポチッと終わらせたいと思います。

3Dモデルとアーマチェアを両方選択した状態で「Ctrl+P」を押すと以下のようなウィンドウが出てくるので、その中から「自動のウェイトで」を選択します。

2019-12-10_22h04_01.png

こうすると、自動でいい感じにボーンとモデルの対応付けを終わらせてくれます。

2019-12-10_22h04_46.png

動かしてみるとボーンとメッシュがそれっぽく連動しているのがわかります。

この機能は便利なのですが、機械的にウェイトを設定しているため、たまに意図しない設定になってしまうことはあります。
そういう場合は、以下の対応を行う必要が出てきます。

1. 補助ボーンを増やす
2. 自分でウェイトペイントを行う

ウェイトペイントする

今回は「自分でウェイトペイントを行う」も試してみたいと思います。

先ほど自動設定でウェイトを設定しましたが、データ的にはこのようになっています。

2019-12-10_22h08_07.png

これはSpineを動かすと色の付いた部分のメッシュが動くことを示しています。
色にも意味があり、赤に近い部分ほど強くボーンの影響を受けるようになっています。
この色はBlenderでブラシを使って好きなように塗ることができます。

塗った部分が動くというのを検証するため、試しに右足のボーンに対して変な塗り方を試してみます。

2019-12-10_22h09_30.png

2019-12-10_22h10_01.png

結果、右足を動かすと左胸も動くというデータを作ることができました。

Unityでの扱い方

fbx

上のデータをBlenderからUnityに持ってきましょう。
Fbxをエクスポートして、Unityにドラッグアンドドロップすれば大丈夫です。
割愛しますが、データを正しく持ってきたい場合にはグリッドの単位や座標系の設定には注意が必要です。

Humanoid

fbxをUnityにインポートできたら、インスペクターでリグ情報を見てみましょう。
デフォルトでは恐らく下のような「Generic」に設定されているので、「Humanoid」に変更します。

2019-12-16_00h38_18.png

Humanoidは後述するアバターという仕組みに人型モデルのボーンを割り当てることで、また異なるボーン設定で作られたモデルのアニメーションを使い回せるようになる...というものです。

アバターはこのようなものになっています。
先程作ったボーンのGameObjectをインスペクタ上で、それぞれ対応する部位にの対応する部位にアタッチすることで作られます。

2019-12-16_21h10_48.png

2019-12-16_00h43_38.png

2019-12-16_21h11_32.png

ここで注目なのは破線の部位は必ずしも設定する必要はないというところです。
実は胸や肩、指といったボーンがなくてもHumanoidのデータとして成立するのですね。

また、シーンビューではボーンがどのように当たっているかを3Dで見ることもできます。

2019-12-16_00h46_13.png

アニメーションデータを流用してみる

それでは最後にUnityちゃんのアニメーションデータを作成した人型モデルに流用してみます。
正しくボーンとHumanoidの設定が行われていれば同じ動きを取ることができるはずです。

2019-12-16_00h50_52.png

雑なモデルですが、横に並べたUnityちゃんと比較してそれっぽい手足の曲がり方をしていると思います。

まとめ

今回は以下の2点に注目して記事を書いてみました。

・モデリングソフトでどのようにボーン情報が作られるのか
・作ったボーン情報がUnityでどのように扱われるのか

Blenderでデータを作るのはすごく面倒ですが、VTuberを動かすイメージが付きやすくなったのでやってよかったと思います。

参考文献

今回記事を作成するにあたり、以下の文献、Webサイト様の情報を参考にさせていただきました。
誠にありがとうございました。

UWAN CHANNEL!
https://www.youtube.com/channel/UCxp8AZy1RtU9klpBomXoBeg

【Unity】Humanoid / Genericアニメーションについての基礎知識
http://light11.hatenadiary.com/entry/2019/01/29/234442

Blender 3Dキャラクター メイキング・テクニック
https://www.amazon.co.jp/dp/B019GCBKUG/

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away