見出し画像

基本的な事【VRChatアバター製作】

■はじめに

最近VRChatのアバター製作を始めたって人をちらほら見るので、
この記事ではアバターを作る上で知っとくと良さそうなことを書いときます。

知ってることは共有しとこうということと自分用の忘備録として、頭に浮かんだ範囲で書き留めときます。(ちょくちょく追記したいです)
※ちなみにQuest対応は全く考慮してません。


■Blenderでの作業

Blenderに限定して申し訳ないです😿

○焦点距離

モデリング時のBlender上の表示として平行投影と透視投影があります。
平行投影は遠近感を無視した平面的な視点です。
もちろんVRChatでは遠近感がありますので、透視投影での見え方に近くなります。
(Blenderでの視野角は50程度がVRChatに近いかなと思います。)

左:透視投影 右:平行投影


○シェイプキー

・顔
顔のシェイプキーはたくさん作れば作るほどいいらしいです(ベテランユーザーから聞きました)。
自由度の高い表情がつくれるように目、口、眉、とパーツごとに左右別で作っていきます。

視線そらすシェイプキーすき

MMD準拠名のシェイプキーを作っておくと、一部の層からは喜ばれます。

また、表情用のパーツ(特殊目、チーク、涙等)は通常時は頭部の中に隠すと思いますが、頭を覗かれるとパーツが丸見えになっちゃいます。
ですので、私はパーツのスケールを100分の1にしています。

顔の中

・体
素体には体の一部を縮小するシェイプキーを作ります。
これはユーザーさんがアバターモデルに別の衣装を着せる際、素体の貫通防止策として使います。そもそも服を着てるモデルなら素体とかいらないので、見えない部分のメッシュは削除しちゃうんでしょうけどVRChat用だと可逆的な方法が好まれると思います。
縮小時のスケールは0にすると頂点同士が重なっちゃうので、0.01倍とかにしてます。

・髪
髪の毛については、簡易的に長さやボリュームなどを変更できるシェイプキーを作ってます。髪の長さについては、シェイプキーでの変更はあくまでメッシュだけの変化なので、変化が大きすぎるとボーンの位置との整合が取れなくなって破綻してしまいます。ここは許容範囲を考えて作らないといけないです。
髪飾りなど細かいアクセサリーもシェイプキーで非表示にできるようにしておくとオブジェクト数の節約になりますね。


○ウェイト

Unityではモデルの1頂点が影響を受けるボーンの数は4つなので、1頂点にそれ以上のボーンのウェイトが乗ってると意図しない挙動になることがあります。
Blenderのウェイトメニューから頂点ウェイトの合計数を制限できます。

ここから頂点ごとの影響ボーン数を制限できます


○UV展開

UVは左右対称なモデルでも基本全面開く方がいいと思います。
左右非対称な色や模様を入れるためですね。
私は髪の毛に関してはUV重ねたりしてましたが、左右非対称にメッシュでカラーを入れてる方を見たりするので、基本全部全面で開くのが理想だと思います。


○PSDファイル

ユーザーの方が色改変しやすいように、テクスチャは1枚絵とは別にレイヤー分けされたPSDファイルを作ってます。
ある程度のパーツごと、更に色ごとにレイヤーを分けておくと使いやすいかなと思います。

○オブジェクトの結合

VRChatユーザーさんの着せ替え文化に合わせて、オブジェクトは髪、顔、素体、上着、インナー…等各パーツごとに分けておく方が良いと思います。
ただ、VRChatのアバターパフォーマンスランクにはオブジェクト数の制限もあるので、収めたいランクに合わせてオブジェクト数も調整するとよいと思います。


■Unityでの作業

○FBXインポート時の設定保存

BlenderでFBX出力→Unityに入れる→ミスってた→Blenderで修正→….
のループ作業って絶対出てきますよね
その時UnityにFBXを取り込んだ際のインポート設定を保存しておくと、インポートのたびに設定しなおさなくてよくなるのでだいぶ楽になります。

また、ボーン構造の変化等でFBXの更新後にPrefabが壊れちゃうことがあります。これも不測のトラブルの元なので、私はヒエラルキーで設定作業中のアバターオブジェクトは削除して更新後のFBXで設定しなおしています。
その際、Physboneコンポーネントなどを設定しなおすのは大変なので、Tareminさんの「CopyComponentsByRegex」(https://github.com/Taremin/CopyComponentsByRegex)を使うとオブジェクト間でコンポーネントの種類ごとにコピペが可能なので、とても便利です。

○テクスチャの圧縮

Unityでテクスチャのクランチ圧縮をしておくと、テクスチャの容量を削減することができます。実際の見た目を確認しながら圧縮具合を調整するといいですね。


○FXレイヤーの設定

FXレイヤーは作者さん特有の設定項目があると思いますが、私が作成している内容について書いときます。

・リップシンクとフェイシャルの干渉対策(口)
ジェスチャー時のフェイシャルアニメーション時にリップシンクが作動すると口の開きが干渉してしまい、許容範囲よりも大きく口が開いてしまい破綻する場合があります。
対策として、FXレイヤー内でリップシンクが作動している時は口に関するシェイプキーを0にするようにすると自然な干渉対策ができます。

また、FXレイヤーで使用するアニメーションファイルにリップシンク用のシェイプキーが含まれている場合、リップシンクが動作しなくなってしまうので注意が必要です。

・まばたき制御
まばたきはVRC Avator Descriptorにも設定項目がありますが、私はそちらはオフにしてFXレイヤー内で制御しています。
左右ジャスチャー時の表情オン時、AFK時にはまばたきを停止するような作りにしています。

・ExpressionMenuでのパーツONOFF設定
ExpressionoMenuに設定できる項目は色々あります。
私はオブジェクト(服やパーツ)のオンオフ切替ができるように設定してますが、この設定はFXレイヤー内で設定します。
他にも髪や素体のシェイプキー数値をメニューから変更できるようにすると便利かもしれません。

○Skinned Mesh Rendererの設定

・バウンディングボックス
アバターの靴や帽子など特定のオブジェクトだけが見る位置によって消えたり見えたりする現象が起こることがあります。
これはSkinned Mesh Rendererコンポーネントのバウンディングボックスのサイズを調整することで改善することができます。

・Anchor Override
VRChatのワールドによっては、頭だけ暗くなるといった頭部と体の明るさが変わってしまうことがあります。
これはSkinned Mesh RendererコンポーネントのAnchor Overrideの参照先を統一することで改善することができます。

○BlueprintIDの消し忘れに注意

アバターの設定をする過程で、VRChatへテストでアップロードすることがあると思います。
しかし、完成した後にBlueprintIDを消さずにPrefab化してしまうと、アップロード時にテストでアップロードしたアバターに上書きされてしまうので、消し忘れていないか最終確認でチェックしましょう。


○商品画像素材の撮影

今では色々な方法があると思いますが、私はUnityRecorderを使用しています。
GameViewの表示を好きな解像度で透過画像を撮影でき、動画も撮影できるのでとても便利です。



この記事が気に入ったらサポートをしてみませんか?