6/11/2021

VRChat:Avater3.0でアバターをアップロードしていく

VRChat熱が少し戻ったので、今の主流と思われる AVATARS3.0 の型で自分のアバターをアップロードしてみたいと思います。

VRChatに初めてオリジナルアバターをアップロードする時の流れは、だいたい下みたいな感じです。

  1. VRChatアカウントの作成
  2. SteamアカウントとVRChatアカウントのリンク
  3. VRChatSDK3のダウンロード
  4. アバターに使うキャラクターの用意
  5. Unityアカウントの作成
  6. Unity2018.4.20f1のダウンロード
  7. UnityにVRChatSDK3をインポート
  8. Unityにアバターのデータを投げ入れる
  9. アバターをVRChat用に良い感じにする
  10. アバターをVRChatにアップロードする
  11. VRChatでアップロードしたアバターを使い好き勝手やる


今回は「9」の工程について書いていきます。
それ以外の工程については、こちらの記事でスクショ付きの分かりやすい解説がありましたので、参考にしてみてください。

この記事で使用するアバターは、BOOTHにて購入したアバター「オリジナル3Dモデル「ミーシェ」ver1.03」です。
アバターは購入せずとも無料で配布されているものでもいいです。アバターのボーン構造がUnityHumanoidAvatarなら(規約に触れない範囲で)何でもいいですし、人間らしい動きを求めなければボーンも入って無くて良いです。(多分)

また、アバターをアップロードするには、ユーザーランクを「NewUser」以上にする必要があります。
ユーザーランクはゲームを長時間プレイしたりフレンドを作ることで上昇するので沢山VRChatを遊んでおきましょう。

というわけで、アバターを良い感じにしていきます。
UnityにはまだSDK3とアバターのデータを放り込んだだけです。
アバターのデータはBOOTHからダウンロードしたzipの中にある「Mishe_model ver1.03 > Mishe.unitypackage」をインポートしました。
画像では、インポート後、UnityのProject内にある「Assets > Mishe > Mishe.scene」をUnity上でダブルクリックして開いています。



VRChat用に販売されているものなので問題ないとは思いますが、一応ボーンがHumanoidかを確認します。
「Assets > Mishe > FBX > Mishe_light」でRigタブを確認。
Animation Typeが「Humanoid」になっているので型は良さそうです。
さらに「Configure...」をクリックして個々のボーンがしっかりあるか確認します。


画面が少し変わり、右側に緑の人形。
全身緑で大丈夫そうなので、右下の「Done」を押して閉じます。
赤い部分があると移動時のアニメーションなど正しく動かないので、モデル側を調整するか、ボーンを手動で指定しないといけません。



続いてModelタブ。
Wikiによると法線の設定でNormalsを「None」に変更しろとありましたが、ノーマルマップがこのモデルは付属していたので「Import」のままにしておきます。



続いてキャラの外観です。
特に以前の記事のようにキャラが半透明になったり、不気味な影になっている事も無いので、今回は特にマテリアルやシェーダーを編集する必要はなさそうです。
※今回購入したモデルは良い感じのシェーダーである「arktoon Shaders」が付属しています。



見た目は問題無いので、VRChatで使うための細かな設定をしていきます。

このモデルは最初からプレハブがありましたが、作っていない場合は作成します。
先程からボーン等を見ていたモデルデータを Project から Hierarchy にドラッグ&ドロップ。
さらに、Hierarchy にドラッグ&ドロップしたモデルを Project にドラッグ&ドロップでプレハブにします。
Hierarchy に放り込んだモデル名の左に青い◆が出ていれば成功です。
Projectにも [モデル名].prefab みたいなファイルが増えたはずなので、選択して Inspector にある「Open Prefab」を押して編集作業に入ります。



プレハブの編集画面になったら、Inspector の「Add Component」で「scripts > VRC.SDK3.Avatars.Components > VRC_Avater Descriptor」を選択します。
すると、「VRC Avater Descriptor」と「Pipeline Manager」が自動的に追加されます。
※Misheのモデルは初めからついていましたが、片方の参照が外れていたのかエラーになっていたので、消してつけなおしています。
※ボーンの「Armature」「Head」も参照の外れたスクリプトがあったので外しました。
※追加されているコンポーネントの消し方は、各項目の右上くらいにある「歯車に▼」のアイコンを右クリックして「Remove Component」を選択します。



「VRC Avater Descriptor」から設定してきます。
それぞれの項目の細かな解説はWikiにて。

View はVRChatプレイ中にキャラのどの部分にカメラを置くか(視点にするか)の設定です。
だいたい眼と眼の間、肌にくっついてるくらいが良いので、今回は「x:0 y:1.09 z:0.1」としました。

LipSyncは、口の動きをトラッキングする訳でもないので個人的には不要でしたが、「Auto Detect!」と勝手にやってくれるボタンがあったので押しています。

Eye Look は自動的に相手に視線を向ける設定です。
折角なので Enable を押して有効にしました。
Eyes で左右の目のボーンの指定と、正面、上下左右で目をどっちにどれだけ回転させるか指定します。
(値は自由に指定できるので、うまく使えば、常に目をそらし続けるキャラも作れそう。)
Eyelids はまばたきの項目で、このキャラには元から両目と時のブレンドシェイプがあったので Blink に両目を閉じているブレンドシェイプを指定しました。


Playable Layers ではキャラクターのアニメーションを設定できます。
が、特にアニメーションの用意はなく、購入したセットの中にも表情差分とハンドサインがあるだけなので、凝った設定は現状できません。
ここについてはまた別の機会に色々といじれたらと思います。
Lower Body や Expressions の項目も今回はスルー。

だいたい設定できてきたので、そろそろVRChatへのアップロードの作業に進みます。
アプロードの流れは、記事冒頭でも紹介したこちらの記事にスクショ付きの分かりやすい解説があるので、参考にしてください。
こちらでは特に書くこと無く、記事に従いアップロード。



無事にワールド上で動かすことが出来ています。
少し歩き方が変でしたが、設定から身長を調整したらなんとか良さそうだったので、一先ずは良いかなという感じ。
(画像はヘッドセットを外すと始める座禅)



また近いうちにアニメーション関連や尻尾など揺らすのを試してみたいですね。

5/01/2021

タイタンフォール2:ヘルメットの場所と報酬

タイタンフォール2では、キャンペーンのフィールド上にヘルメットが隠されています。

すべて集めることでトロフィー/実績の解除ができたり、ゲーム内で使用できるコールサインバナーを獲得出来るので、時間を見つけてコンプリートしたいところです。

遠くからでも分かるように青く光っていて、よく目を凝らせば見つかるのですが、わかっていないと見逃しそうな場所にあるヘルメットもあります。

ヘルメットの隠された位置を紹介している動画があるので、集められなくて困っている方は参考にしてみましょう。



報酬のコールサインバナーは全部で3つ、「10個」「25個」「全部」のヘルメットを入手するとアンロックされていきます。
バナーには"ジャック・クーパー"が表示され、25個では炎のようなエフェクトが入り、全て獲得すれば虹色のようなエフェクトが入りIDの帯もゴールドと高級感がアップ。
歴戦の猛者の雰囲気が出るいいバナーですので、まだ持っていない方はキャンペーンを隅々まで走り込んでオンラインで装備してみても良いかもしれません。



VRChat:Unityに読み込ませたモデルの色が...?

VRChatでオリジナルのアバターを使うとなると、Unityでアレコレ設定をする必要があります。

Unityも大人しくしていれば良いのですが、だいたい余計なことして思った通りにしてくれません。
今回は諸々の作業の序盤も序盤、モデルを読み込んだ時点で既に色がおかしかった現象についての話です。

Blenderなりでアバターを作成した後、FBX形式で書き出したモデルをUnityへ入れました。
デフォルトの表示でUnityの下部分にある Project の中にFBXファイルをドラッグ&ドロップ。


何も問題なければFBX形式のファイルを入れただけで「Materials」のファイルが作成され、色付きのマテリアルが並び、Sceneに配置するだけで良いのですが...。
今回はアバターが真っ白だったり透明だったり、奇妙な姿になってしまいました。



マテリアルを確認してみると、どれも白くテクスチャが球状になった見た目になっていません。
テクスチャ自体はあるので、マテリアル1つ1つに割り当てれば良いのですが...マテリアルが10個20個となるようなアバターの時は流石に面倒です。
そこで、FBXを入れるだけで個々のマテリアルに正しいテスクチャが貼られるようにツールを使います。

Autodesk から FBX 2013.3 Converter というものが出ているのでダウンロード。
使用しているパソコンにもよりますが、今回は「FBX 2013.3 Converter for Windows 64-bit」を使用しました。


ダウンロード後、インストールして起動したら早速FBXファイルを「Source files」にドラッグ&ドロップ。
右下の「FBX 2013」の項目にある「Embed media」にチェックを入れ、更に右下にある 「Convert」を押します。
うまくいくと、Converted と表示され、モデルが保存されているフォルダに「FBX 2013」というフォルダが作成され、中に新しいFBXファイルが作成されます。
この新しいFBXファイルをUnityに入れると、マテリアルにテクスチャが張られた状態になり、アバターにしっかりと色がついた状態になります。

が、部分的に半透明であったり、暗く影がかかって見た目があまりよろしくありません。


次にUnity側でマテリアルの設定を変えて見た目を良くしていきます。
Unityに生成されているテクスチャ付きのマテリアルの設定を見ると、画面右上「Rendering Mode」の部分が「Transparent」になっていたので「Opaque」に変更します。
これで半透明な部分は無くなりました。


Transparentはガラスやプラスチック等、透明度を必要とするものを再現する際に使用するといいそうですが、今回は使用しません。
代償として腕の番号から透明度が失われて黒くなりましたがここはあとで誤魔化します。

次に、アバターが暗く不気味なのを何とかしたいので、マテリアルに使用するシェーダーを変更します。
マテリアルを全て選択し、右上の「Shader」の項目を押すと、シェーダーを選ぶことが出来ます。
「とりあえず影を無くしたい」という人は「Unlit > Texture」に変更するとテクスチャの色をそのまま表示してくれます。


シェーダーはインターネット上で配布されているものも、UnityのProjectに入れれば使用する事ができます。
VRChatのWikiでは下の画像のような感じになるシェーダーが紹介されていました。


今回は場所の暗さに関係なく常にテクスチャの色が出るよう「Unlit > Texture」で進めます。

腕の部分が黒いので何とかしたいですが、番号の周りが透明なテクスチャを用意する事ができなかったので、肌色に塗って消す事にしました。
ただ、このマテリアルは他の表情モーフなり目のハイライトで使用するパーツも入っているので、目のハイライトを担当している左上が白、後は肌色のテクスチャを用意しています。
(モーフは使わないということで)
該当のマテリアルのシェーダーを「Unlit > Texture」にしてマテリアルのテクスチャを差し替えると、だいぶいい感じになりました。完成で良さそうです。


ここまで来ればアバターをVRChatにアップロードするためにスクリプトを付けたりアニメーションをつけたりと先の作業に進めます。
ここでは書きませんが、またそういった記事を用意できればと思います。

※この記事はUnity5で行われた作業を記載していますが、新しいUnityでも大体似たような手順で再現できると思います。

VRChat:ダイナミックボーンの設定項目の効果メモ


ダイナミックボーン(Dynamic Bone)はキャラクターの服やアクセサリー、動物のしっぽ、その辺にぶら下がってる物体など、関節が繋がってるものを物理っぽい動きでゆらゆら勝手に揺らしてくれる便利な有料アセットです。

設定方法については VRChatのWiki にも書かれていますが、難しくてよくわからんなと思い自分なりの言葉でメモしながら使っていました。
メモ帳に保存していても無くしそうなので「せっかくなら記事として残しておくか」というのが今回の記事になります。
結局、よくわからない部分もあるので、そこは原文引用。


ここから先はそのメモ。
ダイナミックボーンは揺れ物の先っちょに1つ取り付けて使っています。

Root (ルート) 
揺れ物の根本を設定します。 設定したところからスクリプトの付いたボーンまでがゆらゆら。
Update Rate (更新レート)
物理シミュレーションのフレームレート。フレーム/秒で測定。 (原文)
UpdateMode
ノーマル:通常のアップデート。
AnimatePhysics:フィジックスエンジンと同期するためにフィジカルループ中に更新されます。
UnscaledTime:Time.timeScaleから独立して更新されます。(原文)
Damping (摩擦)
摩擦(空気抵抗的な)を調整します。
数が大きいほどフワッと軽そうになり、少なほどブルブルと重みのある動きになります。
Damping Distrib(摩擦)
曲線や直線を設定し、だんだんと揺れが変化するようになる設定が可能。
Elasticity (弾力性)
ボーンが元の形に戻ろうとする力を調整します。
値を大きくしていくと元に戻る力が強くなり、揺れにくくなります。
値を小さくしていけば元に戻る力が弱くなり、戻るまでに時間がかかります。
0になると戻りません。
Elasticity Distrib(弾力性)
曲線や直線を設定し、だんだんと揺れが変化するように... 
Stiffness (剛性)
ボーンの曲がりやすさを調整します。
値を大きくするとあまり揺れなくなり、値を小さくすると大きく揺れます。
Stiffness Distrib(剛性)
曲線や直線を設定し、だんだんと...
Inert (不活性)
キャラクターが移動した際の揺れ具合を調整します。
0に近いほど揺れ、1に近いほどキャラクターが移動しても変形しません。
Inert Distrib(不活性)
曲線や直線を...
Radius (半径)
各ボーンに見えない球体を設定し、「ボーン同士」が接触するのを防ぐことが出来ます。
End Length (終わりの長さ)
0よりも大きい値を入力した場合、そのボーンから入力された値分離れてボーン?が生成されます。
末端に使用して挙動を変える? Offsetとの併用は出来ません。
End Offset (終わりの座標オフセット)
XYZに0よりも大きい値を入力した場合、そのボーンから入力された値分離れてボーン?が生成されます。
末端に使用して挙動を変える? Lengthが優先されます。
Gravity (重力)
ボーンに対して重力のような力を加えます。
-か+かで重力の向きを変更できます。
Force (フォース)
ボーンに対して常に一定の力を加え続けます。
XYZは全てグローバル座標です。
Colliders (コライダー)
物理的に衝突するボーン(についたコライダー)を設定します。
Sizeでいくつのボーン(略)と衝突するようにするかを設定し、Elementにそれぞれ当たるボーン(略)を割り振ります。
Exclusions (除外)
ボーンが揺れて曲がらないように出来ます。
Sizeで数を指定し、Elementにボーンを割り振ります。
割り振ったボーンから先方向は一切動きません。 
Freeze Axis (軸固定)
XYZで指定した軸方向への揺れが無くなります。
Distant Disable, Reference Object, Distance To Object
(遠隔ディスエーブル、参照オブジェクト、オブジェクトまでの距離) キャラクターがカメラやプレーヤーから遠い場合、物理シミュレーションを自動的に無効にします。
参照オブジェクトがない場合、デフォルトのメインカメラが使用されます。(原文)


4/29/2021

Discordの画面共有で相手に音が聞こえないときの対処法


Discordの画面共有(GoLive)を使用後、相手側にこちらの画面の音声が聞こえない現象が起きました。
前日までは問題なく、その日のアップデート以降から突然聞こえなくなったのでマイクの設定やWindowsのサウンド設定など色々原因を調べていたのですが、どうやらDiscordの音声設定が原因だったようです。
スイッチを2つ「オフ」にするだけで直りました。


Discordの設定から「アプリの設定」>「音声・ビデオ」と進むと、その中に画面共有の設定があり、下の2つのような項目があります。

  • 当方の最新技術を使用して画面を撮影します
  • 実験的方法でアプリケーションから音声をキャプチャ

今回、この2つのスイッチを「オフ」にすることで、相手にこちらの画面で流れる音声を伝える事が出来ました。

特に設定した覚えはなく気付けば「オン」になっていましたので、画面共有で相手に音声が伝わらない方は試してみると解決するかもしれません。

4/28/2021

このブログについて

普段、Twitterでぽつぽつと日々の出来事であったり、自分以外の誰かにも役立つかもしれない情報をつぶやいてる時に、ものによっては記事として残しても良さそうだなと思ったりもしていました。
そんな感じの内容を、気が向いた時に更新していきます。