どうも、53代プロ研だったりCG研だったりするオダマキです。最近はUnityで、ロボットシミュレーションだとかLive2Dだとかゲーム制作ではないことをよくしてます。
最初に言っておきますが、この記事はクソ長いです。ごめんなさい……。
バーチャルな体の必要性
MIS.Wは2020年の早稲田祭にてcluster展示を行いました。この情勢下ですし、バーチャル空間用の自分のアバターの需要が高まっているのではないでしょうか。
clusterとかに自分のモデルを持ち込むだけだったら、RealityとかVRoidとかで比較的簡単にできますよ~。
読んでいただきありがとうございました!明日はHarrisonKawagoe君の記事です!
ちょっと待ったァーー!
「それじゃ満足できなァい!」
「このアプリの表現力では自分のフェチを実装できなァい!」
「Reality感、VRoid感がいけ好かなァい!」
「自分の身体は自分で作りたァい!」
「文字が小さすぎて読めなァい!」
という稀有な方は……
Blenderで身体を作ろう!
というわけでBlenderでcluster用のVRMを作るまでの流れ、制作で得られた知見を共有したいと思います。
※ある程度Blenderの基礎知識がある前提で書きます……ご了承ください
このおかげで例えば「クラフトピア」ではVRM持ってる人は簡単に自分の姿でゲームをプレイできたりするんですね。
作業の流れ
Blenderでの作業
- モデリング
- UV展開、テクスチャリング
- リギング、ウェイトペイント
Unityでの作業
- マテリアル設定
- VRM出力!
(揺れ物、表情をつける場合は出力したものを再度Unityに取り込んで作業します)
今回制作にかかった時間は 健康的な生活と多少の授業を犠牲にして 突貫工事で2週間でした!
(オンライン授業で大助かりしている)
準備
clusterのカスタムアバターの制限の確認
今回cluster用アバターを作るのですが、clusterに持ち込めるアバターには制限があります。
着地点をしっかり確認しておきましょう。
今回キツかったのはポリゴンの数とマテリアルの数でしたね……
下絵
今回は元々作っていたLive2Dモデルを加工して下絵にしました。
先ほど工期2週間といいましたが、このように下絵を描く手間を大きく省いています
目は1つです……単眼が好きなので
気をつけたところは、正面と側面で各部位の高さを一致させることです。 どうせ下絵を3次元的に正しく描くことは不可能なので時間をかけずに次に行きます。
時間に余裕があるなら、斜めの角度のイメージを描いたり、立体的な構造の考えを深めるとよさそう。
BlenderのVRMアドオン
Blenderにアドオンを入れます。アドオンはボーン構造のみ利用します。
このアドオンでBlenderからもVRM書き出しはできるらしいですが、作業のしやすさのためUnityからVRM出力を行いました。
まずVRM_IMPORTER_for_Blenderから Download Addon ボタンを押してダウンロードします。
Blenderの プリファレンス > アドオン > インストール で、ダウンロードしたzipファイルを指定してください。
テスト中のタグを選択した後、出てくるVRM Importerのチェックボックスを有効化すれば完了です。
成功すると 追加 > アーマチュア の中に VRMhumanoid が入っています。
今回は最初にボーンを置き、そのサイズに合わせて下絵を置きました。
(そのため身長が180cmになってしまい、後で修正することになりました……)(ちゃんと目盛りを確認しましょう)(モデリングの時は邪魔なので非表示にします)
モデリング
面を張ります。
顔のモデリングは去年のれいめんさんのカウントダウンカレンダーがとても参考になります。(私も参考にしました)
下絵に騙されるな
下絵を見てるときは平行投影、つまり無限遠から見ているため、実際の見た目と大きく違います。
↑平行投影 ↓透視投影
下絵は信じるな。
髪の毛
髪の毛はNurbsカーブを使いました。 断面のカーブをつくり、流れのカーブのベベルに設定します。(詳しくは調べて……)
そのままの状態だと分割数が高く、普通に作ってるとclusterのポリゴン制限に引っかかります。断面カーブ、毛束カーブともに分割数を2~3にしましょう。
横顔よりも斜め顔
側面の下絵では顔が見えるように、ついつい髪の毛を後ろに描いてしまいます。
しかしその通りに作ってしまうと、3Dではちょっと不自然に見えたり斜めの角度で物足りなくなります。
↓雑な例ですが、こう作ってしまうと 物足りない……
↓横顔は隠れちゃうけど やっぱこれだね
VR空間に限らず、3Dキャラクターは真横よりも斜めから見られることが多いはずなので、横の見た目よりも斜めの見た目を大事にしたほうがいいでしょう。
滑らかな成型には限界がある!
生き物の滑らかで複雑な曲線を、面を張って…つなげて…頂点を動かして……と作っていくのでは限界があります。そういう部分ではスカルプティングのツールを使うと便利です。
Blender 2.8 の使い方 (05) スカルプトモード ブラシの一覧 このページの、「ローポリでも使える」と書かれたブラシを参照してください。スライドリラックスはおすすめです。
この手は、概形を作った後に細分化してスカルプティングで仕上げました。
(指を曲げることを考えるともっとポリゴン割を工夫しなきゃいけないですが、今回は時間がなかったので形だけです……)
UV展開、テクスチャリング
お疲れ様です。第一段階が終わりました(絶望)(当時モデリングに11日かかりました)
UV展開の哲学はわからんのでこちらを見てください。 Blender の UV 展開 Tips - dskjal
筒状のオブジェクトを格子状に展開する
と、テクスチャ塗るときに便利です。
なのでどうやればいいかというと、アクティブ四角形面に追従を使います。 やり方はこのサイトがわかりやすかった。 Pakaの備忘録 - BlenderでUVを格子状に揃える方法
AOベイクを陰の参考にする
突然2Dイラストの話をします。 よくあるアニメ塗りのイラストには、奥まっている部分に影が落とされていることが多いと思います。
これはCG用語でアンビエントオクルージョン(AO)といいます(おそらく)。
光というものは日常的なシチュエーションでは必ず、光源からだけではなく全方向から当たります。奥まっている場所はそれが遮られて、届く光が少なくなり暗く見えるというのがAOの仕組みです。
3Dソフトならば奥まっている場所の計算ができるわけです!それを各テクスチャの点で計算して、奥まり具合の画像をつくることをAOベイクといいます。
これを直接使うわけではないのでサンプル数も少なめです
やり方はこのサイトを参考にしました。 「AOベイク」で3Dモデルのクオリティを上げよう!
今回はこのベイクしたAOを参考にテクスチャを描きました。
仮マテリアル
最終的にはVRMに同梱されているMToonというシェーダを使います。Unityでの見え方と違いますが、BlenderでもMToonのシェーダノードが用意されてるので見た目の簡単なチェックができます。 追加 > グループ > MToon_unversioned
リギング、ウェイトペイント
ボーンを組む作業のことを、Blenderの文脈ではリギングと呼ぶことが多いように感じますが、他の文脈(業界標準?)では ボーンを組むこと=リギング ではないらしいです。じゃあボーンを組むことをなんて言ったらいいんですかね?
ボーンを組みます。最初に生成していたボーンを再表示し、モデルに合わせて変形させます。自動のウェイトでペアレント設定をして……
ウェイトは自動ではうまくつかない
ウェイトペイントのTips - dskjal これを参考に頑張ってください……。私ももっとこのサイト早く知ってれば……。
1つだけVRM特有の問題があるとするなら、
ルートボーンにウェイトがつく
当たり前ですが人の接地位置を決めるルートボーンのウェイトが脚につきます。ルートボーンに追従してほしくない場合がほとんどだと思うのでウェイトを消しましょう。(作っているときは意外と盲点だった。)
逆に、接地面に対して固定のオブジェクトを作る場合はルートボーンだけにウェイトをつけるといいかもしれません。
Unityに移動
アーマチュアを右クリックして、「階層を選択」した状態でFBX出力します。出力時の設定に注意事項が二つあり、
選択したオブジェクトのみ出力するようにチェックしましょう。こうすることで下絵など要らないものを省いてくれます。
アバターの制約に従い Zが前方 となるようにしましょう。
アバターの正面がZ+を向いていること
VRMを扱うためにUnityにアセットを入れます。 このサイトを参考にUniVRMを入れましょう。
FBXファイルをprojectウィンドウにドラッグアンドドロップします。ImportSettingのRigでAnimationTypeをHumanoidにしてApplyしましょう。
なにかエラーが起こる場合、エラー文の箇所をConfigureから確認しましょう。このモデルの場合、目のボーンが顎のボーンにも割り当てられていてエラーが起きました。顎のボーンは必須ボーンではないので外します。
マテリアル
MToonシェーダーを使います。アニメ風(?)の表現に必要なものに制限されていて、慣れてなくてもいじりやすいです。
- 陰の境界線をどれだけシャープにするか、境界の位置
- リムライト(イラストでよく反射光と呼ばれているやつ。 輪郭に沿った光。奥からの色の反射)(伝われ)の色、強さ
- 輪郭線
などイラストを描くときに考えるような(個人の感想)ことがそのままパラメーターになってます。
出力
モデルを選択した状態で、メニューの VRM > UniVRM{バージョン} > ExportHumanoid を選択するとVRMの権利、人権関係のセッティングができます。ここがまさしくVRMの特色ですね。
アバターを着ることができる人を制限するだとか暴力表現、性的表現……ん?Allow……?
完成!!!
完成だー! 右は以前作ったLive2Dモデル。
初めてアバターモデル作ったにしてはよくできたのではないかと自CG自賛しております。
世の中にはイラストと見まがうような3Dモデルを作る方もいらっしゃるので、そういう路線目指して頑張りたいですね。
おまけ 単眼のホロウマスク錯視
実はこれが書きたいがためにブログを書くことにしました。
オダマキちゃん!かわいい!あっああぁああ!
ぐあああああああああああ!!!3Dモデルなんて現実じゃない!!!!
あ…イラストもLive2Dモデルもよく考えたら… オ ダ マ キ ち ゃ ん は 現実 じ ゃ な い?
この!ちきしょー!やめてやる!!3Dモデリングなんかやめ…て…え!?見…てる?Unityのオダマキちゃんが僕を見てる?
(この三つの画像間では目の位置は変化してません)
となるのはホロウマスク錯視というものです。黒目を白目空間の奥に配置することで、目線がこちらについてきているように見せることができます。
双眼でつくるときは、眼窩の奥に虹彩(瞳)の板を置けば簡単にできます。
しかし単眼の場合は一つの目に対して見られる角度が大きいため、そのままでは作れません!
(シマウマの視野かな?)
ではどうしたかというと、白目の球をつくり、CullModeをFrontにします。CullModeとは、モデルの裏を描画するか、両面描画するかなどを選択できるものです。
Back
裏面を表示しない。服などをぺら一枚でつくっていると、袖やスカートなどで裏側が表示されなくなってしまいます。
Front
Backの逆。表面を表示しない。
Off
両面表示する。
Frontを選択すると、裏だけ描画されるので図のようになります。
オダマキちゃんでは、CullModeをFrontにした球を
と入れ子構造にしています。
もともとのメッシュを表裏反転してCullMode Backのまま作っても同じ結果が得られそうですが、実際やってみたところ描画アルゴリズムの関係なのか処理順の関係なのかで安定しませんでした。CG詳しくないのでわからないですが……。まぁ明らかに想定された使い方ではなさそうですし、おとなしくCullModeで対応しましょう。
あとがき
対象読者もよくわからないような、ほんとに長い記事を書いてしまい誠に申し訳なく思っています。ここまで生き残ってるのは何人中何人なんでしょう。Fall Guysかな?さあ決勝ステージです。
私自身の3Dモデリング経験は宇宙戦艦ヤマトをつくったり、推しの二頭身モデルをつくろうとして挫折したりなどです。きちんとボーンを入れてアニメーションまで入れたのは今回が初めてでした。
ブログでは立て板に水が流れるように作業を紹介しましたが、実際はトライ&エラーで修正を重ねていました。特にUnityに入れると粗が目立ってBlenderに戻る、UnityとBlenderを行き来することが多かったです。
お前たちは失敗作だ……
最後まで読んでいただきありがとうございました。明日は54代HarrisonKawagoeくんによる記事です!