hibitの技術系メモ

数学とか3Dとか翻訳とか

Blender触ったことないけど販売モデルに尻揺れを追加したいという人へ

Blenderのバージョンは2.80です

これまでのあらすじ

Blender触ったことないけど販売モデルを巨乳に改変したいという人へ - hibitの技術系メモ

プロローグ

 よお、久しぶりだな。あれからもう1年半近くも経ったのか。お前さんの3Dモデルも見違えるようになったじゃねえか。

 ……とは言っても、今ではBOOTH - 創作物の総合マーケットで数百を超えるアバターが販売されている。お前さんのそのイカしたモデルは、フルスクラッチか? 改変か? まあ、どっちでも変わらんか。そんなことを論じる意味もなくなっちまったな。時代も変わったもんだ。俺みたいなロートルに、今更何の用があってきたんだ?

 ……なるほど、胸の次は尻ってワケか。お前さんの考えてることはわかるさ、同類だからな。まあ、些かマニアックだし、対応しているモデルは少ないだろうな。だが自分でそれを設定するということは、Blenderの闇のより深くへ進むってことだ。その覚悟はあるか? ……と言いたいところだが、その様子じゃ聞く必要はなさそうだな。

メッシュの改造

 まずはおさらいだ。プロポーショナル編集で体型を変更する。オブジェクトが服や肌に分かれている場合にはCtrl + Jで結合しておいた方が良いだろうな。オブジェクトが結合されても割り当てられたマテリアルは変わらないから心配無用だ。

f:id:hibit_at:20200415161558p:plain

 Xミラーにチェックを入れるのを忘れるなよ。

f:id:hibit_at:20200415161540p:plain

 あとは適当に頂点を動かして……

f:id:hibit_at:20200415162315p:plain

 こんなところか。

ボーンとは

 揺れ、関節……そういったもの基本的に全部ボーンによって制御されている。さて、ボーンとは何か? それを説明するために表示をまずワイヤーフレーム表示にする。

f:id:hibit_at:20200416101314p:plain

 ここをクリックしてもいいが、キーボードでもできる。Blender2.8系だとZ4だな。

f:id:hibit_at:20200415162641p:plain

 さて、ボーンとはこの体の内外にあるクサビ型のことだ。これ全体でアーマチュアといい、個々のクサビ型をボーンという。このアーマチュアが変形する時、それぞれのボーンに対応するポリゴンもくっついて一緒に回転する。その対応関係のことをウェイトというが、まあこれは後で説明する。

 要は3Dモデルの動きってのは、回転で出来ているのさ。人間の骨を模した構造を持つボーン達と、それらに対応したポリゴンが回転することによって、3Dモデルも人間らしく動くって訳だ。

 そしてこのモデルに……というかほとんどの販売モデルに尻用のボーンはない。hipsってのはあるが、それは体の起点に近い概念で、いわゆる尻肉にあたる部分ではない。販売モデルのほとんどは髪や胸に追加でボーンとウェイトを設定して揺らせるようにしてくれているが、尻までそれをやっているモデルってのはまあ……少ないだろうな。だからこそ、お前さんは今それを設定する必要があるということだ。ここまではいいな?

ボーンを追加

 今からボーンを追加していくぞ。アーマチュアを選択して編集モードだ。tabキーでも切り替えられる。

f:id:hibit_at:20200416100950p:plain

 アーマチュアはポリゴンと同じように、Eキーで押し出しをすることにより新しいボーンを生やせる。ここでもXミラーは忘れるなよ。

f:id:hibit_at:20200416101629p:plain

 そしてテクニックだが、Shiftキーを押しながらEキーを押すと左右対称にボーンが生えてくる。最終的には左右まったく同じものを作らなければいけないからこれは必須だな。

 さて、新しく突き出たこの双子のボーン、これが将来の尻ボーンになる訳だが、こいつらの先端はどこに置けばいい?

 極論すると、どこに置いてもいい。回転の起点になるのはボーンの根本だからな。もちろん、そこから子を生やす場合はその先端の位置も重要になってくるが、今回は無関係だ。まあ、納まりがいい場所に置いとくがいいさ。

f:id:hibit_at:20200416101802p:plain

 ボーンの名前はここで変えておく。hipsはもうすでにあるから……英語だとbuttocks_Lbuttocks_Rあたりが適切か? ここでの名前は重要だ。名称を統一して_L_Rを忘れるなよ。理由は後で説明する。

 そういえば、お前ならそろそろ疑問に思っている頃だろうな。

 尻のポリゴンはこんな高い位置を中心に回転するのか? と。

f:id:hibit_at:20200416102022p:plain

 そう、hipsの先端は腰まで伸びている。そこからspine(脊椎)ボーンが生えてくるんだから当然だな。hipsから生やした以上、そこがボーンの起点になるのは避けられない。しかし人間の尻ってのは、脊柱の根本を中心に回転する訳じゃない。ならばどうするか? 方法は2つある。1つはボーンを二段構成にすること。もう1つは、ボーンの連結関係を切り離すことだ。どっちで働きは同じだが、後者を説明するぞ。

f:id:hibit_at:20200416102149p:plain

 ここで「接続」のチェックマークを外す。

f:id:hibit_at:20200416102332p:plain

 今しがた生やしたbuttocksボーンの根本を選択し移動させる。hipsの先端が引っ張られることもなく、自由に動かせるはずだ。ちょうどいいところに動かしてやれ。

ウェイトペイント

 これで第一段階は完了だ。しかし今のままだとボーンが動いてもポリゴンは1mmも動かない。ボーンとポリゴンを対応させる必要がある。3Dモデルってのは、ボーン毎にどの頂点が連動するかってのが決まっているのさ。この連動をウェイトといい、人体が自然に動くためにはすべてのボーンにウェイトが適切に設定されていなければならない。指先に至るまで、ボーンごとに全部だぜ? 気の遠くなるような話だろ……3Dモデルってのは手間の塊なのさ。

 ウェイトは頂点グループによって管理される。専門用語が多いが、流れをなんとなく把握できれば細かい部分は覚えなくていい。ボーンと同じ名前の頂点グループに含まれる頂点にウェイトが乗っている、ということになる。だから新しく作成したボーンにウェイトを乗せるには新しく頂点グループを作成する必要がある。名前が1文字でも違ったらウェイトが設定されないから要注意だ。

 まずは頂点グループ作成を作る必要がある。オブジェクトモードに戻って、ソリッド表示(Z6)、アーマチュアは非表示(H)しておいた方がやりやすい。

f:id:hibit_at:20200416102831p:plain

 ここの「+」ボタンでグループを新規作成した後、名前を変えてさっき作ったボーンと同じにする。重ねて言うが、1文字も間違えるなよ

f:id:hibit_at:20200416102952p:plain

 これでやっとウェイトを塗る準備ができたな。

 体のオブジェクトを選択して、Ctrl + tabキーを押してみろ。

f:id:hibit_at:20200416103050p:plain

 そこで「ウェイトペイント」を選択だ(7キーでもいい)。そう、ウェイトは「塗る」モンなのさ。CADみたいな操作を要求されるBlenderの中で、ここだけはアナログな筆操作を要求される。

f:id:hibit_at:20200416103139p:plain

 ここでも切り替えられるが、カーソルを持っていくのがめんどくさいならキー操作に慣れることをオススメするぜ。

f:id:hibit_at:20200416103236p:plain

 ウェイトペイントモードにしたら、こんな風に真っ青な表示になっているはずだ。青ってことはウェイトが乗っていないってことだ。いまからこのキャンバスに魂込めてウェイトを塗っていく。おっと、Xミラーもここでは忘れるなよ。

f:id:hibit_at:20200416103425p:plain

 ブラシはここで選択する。右上の「ツール」から「ブラシ」を開いてそこで切り替える。色々あるが、塗る時は「F Draw」、消す時は「F Subtract」の2種類だけでいい。

f:id:hibit_at:20200416104954p:plain

 こんな塩梅か? 赤く塗られた点がウェイトがついた部分だ。もう片方は塗る必要はない。xxxx_Lという頂点グループにウェイトが塗られた時点で、xxxx_Rにも左右対称に塗られているからな。便利だろ? 名称に気をつけろって言ったのはそういうことさ。

 気をつける点として、ウェイトってのは、それ単体では赤でも緑でも水色でも重みは変わらない。色さえついていれば問答無用にボーンと連動するんだ。だから塗ってないと思った点(じつはうっすら水色)が実はモロに動いて飛び出る……なんてのがウェイトあるあるだな。まあ、こういう末端の揺れボーンだったらそこまで影響はないが、確認は必須だ。

f:id:hibit_at:20200416105656p:plain

 確認はポーズモードでできる。右上の「ポーズ」を選択してから当該ボーンを選択、Rキーでボーンを回転させて挙動を確かめればいい。

f:id:hibit_at:20200416105946p:plain

 大丈夫そうだな。

Unityへの適用

 長い作業もそろそろ大詰めだ。今までの作業で、ボーン→ポリゴンの流れはできたが、いまのままだとボーンが動かない。spineheadといったhumanoidに必須なボーンはトラッキングデータを反映してくれるが、それ以外のボーンはただ固定して動くだけだ。buttocksボーンに揺れ物を適用させることによって、ようやくトラッキングの動きが揺れに反映されて、自然な揺れ物となる。

f:id:hibit_at:20200416191145g:plain

 こんな風にな。やれやれ、やっと一段落だ。揺れ物としては有名なものはDynamicBone(有料)、VRMSpringBone(無料)があるが、まあそこら辺の導入やパラメータ設定は他の記事を参照してくれ。

 この一連の作業が理解できていれば、ほかにもいろいろな揺れ物を自力で実装できるはずだ。お前さんの3D人生が充実することを祈ってるぜ。

エピローグ

――いらっしゃいませ。

 ああ、いつもお世話になっております。相変わらず色々な部分が豊満で良いモデルですね。

 え、あの人に会ったんですか。ははあ、なるほど。でもお客さん、もうあんまりあの人には関わらない方がいいですよ。

 いやね、あの人も相変わらずで、それでもBANはされずにギリギリの線を狙っていたみたいなんですけど、この間twitchにBANされちゃったみたいで。

 お客さんは配信とかするかわからないですけど、命あっての物種、アカウントあっての配信ですからね。お客さんも気を付けてくださいね。と言っても、あの人と同様、どうせ突っ走っちゃうんでしょうけど。

We don’t permit streamers to be fully or partially nude, including exposing genitals or buttocks. We do not permit the visible outline of genitals, even when covered. Broadcasting nude or partially nude minors is always prohibited, regardless of context.

https://blog.twitch.tv/en/2020/04/07/update-to-our-nudity-and-attire-policy/

筆者和訳: 配信者が完全なまたは部分的な裸になることは許可されていません(性器や臀部を露出させることも含めます)。また、性器がカバーされている場合でも、その輪郭がはっきり見えることは許可されていません。未成年者の完全なまたは部分的な裸を放送することは、いかなる場合でも常に禁止されています。