黒鳥3D研究所

3DCGでケモノを作る上で使えそうな技術をまとめていくブログ。主にソフトやプラグインの使い方をまとめます。その他雑記なども

BeatSaberにVRChatのアバターを持って行ったメモ

VRChatの自作アバターをBeatSaberに持って行ったので入れ方をメモ程度に残します。

前提

Unityの基本操作ができること(VRChatにアバターをアップロードできるくらいの知識があれば大丈夫です) BeatSaberにModを導入できるようにしていること。 Modの導入に関してはこちらの記事で解説されています。 またアバターの確認のためにCameraPlusというカメラの位置を自由に配置できるModがあるのでそちらも導入しておきましょう。
このModの導入方法も下記の記事で解説されています。

note.mu

CustomAvaterPlugin の導入

まず、Beat Saber Mod GroupというDiscordのグループから必要となるプラグインをダウンロード。
「finished-plugins」チャンネルにikeiwaという方がCustomAvaterを配布しているのでDLしましょう。

ダウンロードしたら、「CustomAvater」→「Extract_Content_In_BeatSaber_Folder」の中身を、「BeatSaber」のインストール場所にコピーします。(Steamなら Steamダウンロードフォルダ\steamapps\common\Beat Saber)

ここでBeat Saberを起動しアバターが表示されているかどうか確認してみてください。

アバターの作成

プロジェクトを開く

ここから実際にVRChat用のアバターをBeatSaberに持ち込んでみます。 そのためにはUnityを使う必要があります。Unityのバージョンは「Unity 2017.3.1f1」です。それ以外のバージョンではうまく動作しない可能性があるので必ず「Unity 2017.3.1f1」をインストールしてください。
Unityを起動したら右上の「Open」を選択し、先ほどDLした「CustomAvater」内の「TemplateUnityProject」を開きます。
開いたら、ProjectウィンドウのAssets→TemplateFullBody→TemplateFullシーンを開きます。 f:id:kurotori4423:20180603162513p:plain
すると現在このような画面になっていると思われます。

アバターの読み込み

アバターに使用したい3DモデルをUnityにインポートします。インポート方法はVRChatと基本同じなのでここでは簡潔に説明します。

  1. 3Dモデルファイルをインポート
  2. 3DモデルのAnimation TypeをHumanoidに変更
  3. Cnfigure... でボーンの修正
  4. マテリアルの設定

マテリアルはBeatSaberのシェーダーを使用したほうがいいかもしれないです。マテリアルのシェーダメニューからBeatSaber以下のものを設定しましょう。 マテリアルはある程度陰影の出る「Lit Glow」、VRChatで言うところのUnlitシェーダーになる「Unlit Glow」あたりが使いやすいです。

f:id:kurotori4423:20180603163630p:plain

BeatSaber向けの設定をする。

モデルのインポートが終わったら、そのモデルをHierarchyからTemplateFullにドラッグアンドドロップして、TemplateFull以下にモデルを追加します。
f:id:kurotori4423:20180603164151p:plain
図では「VRC_Kamikaze_dasaT」が自分の導入したいモデルの名前になっていればOKです。 次に使用したいモデルの大きさをテンプレートアバターと同じくらいの大きさにします。 特に手の位置が同じくらいになるとよいと思います。 f:id:kurotori4423:20180603165202p:plain
なぜこうするのかというと、プレイヤーの大きさがアバターによって調整されないので、あるプレイヤーの大きさに合わせる必要があるからだと思います。
大きさが異なる状態で設定をすすめたところ、水平時の腕の位置がおかしくなるなどして調整が困難でした。

次に必要なコンポーネントを追加します。
1からすべて設定するのは大変なのでテンプレートからコピーしてきます。
まず、full body templateから「IK Manager」をコピーします。 f:id:kurotori4423:20180603164515p:plain
コンポーネントの右上の歯車アイコンをクリックし「Copy Component」をクリック

次に導入したいモデルを選択した状態で、適当なコンポーネントの歯車アイコンをクリックして「Paste Component As New」を選択すればコンポーネントが追加されます。
f:id:kurotori4423:20180603164740p:plain
同じ方法で「VRIK」もコピーしてきます。 コピーできたら「VRIK」のReferencesを導入したいモデルのものに設定し直します。 f:id:kurotori4423:20180603165623p:plain

Solverの項目も黄色蛍光ペンで塗ったところを自身のモデルのものに差し替えましょう
f:id:kurotori4423:20180603165747p:plain

次にRightHandとLeftHandを自身のモデルの位置に合わせます。
f:id:kurotori4423:20180603170026p:plain
f:id:kurotori4423:20180603170054p:plain

最後に不要なfull body templateを削除します。
ここまで完了したらAvaterとしてファイルを書き出します。
ツールバーから「Window」→「Avater Exporte」を選択。 f:id:kurotori4423:20180603170318p:plain
作者名とモデル名を入力し「Export モデル名」をクリックして.avaterファイルを出力します。

アバターのチェック

作ったアバターのチェックを行います。「Steamダウンロードフォルダ\steamapps\common\Beat Saber\CustomAvaters」に作ったアバターファイルを入れます。
BeatSaberを起動して「PageUp」「PageDown」キーを押すとアバターを切り替えられます。
めでたくアバターの導入が完了ですが、おそらくセイバーの位置や手の角度がおかしくなっていると思われます。

IKターゲットの位置調整

Unityに戻り、LeftHandTarget、RightHandTargetの位置を調整します。この位置と角度はモデルによってまちまちなので、とにかくひたすらBeatSaberとUnityを往復してHandTargetの位置をずらしたり回転させたりしてちょうどよい場所を探しましょう。 f:id:kurotori4423:20180603171208p:plain

ちょうどよい場所に調整出来たら完成です!

【XCode 9.2】C++でテンプレートクラス書いたら Undefined symbols for architecture arm64: した

XCodeでテンプレートクラスを作ったらハマったのでメモ

/*test.h*/
template <class T>
class Test
{
    public:
        T max(T a, T b);
};
/*test.cpp*/
template <classT>
T Test<T>::max(T a, T b)
{
    if(a < b) return b;
    return a;
}

このように実装ファイル側で実装部を書くと Undefined symbols for architecture が出てしまう。 実装が別ファイルだとmain関数などからファイルが見えないためにテンプレートの展開・実体化ができないのが問題らしい。 この場合の解決法としては、実装ファイル側でテンプレートを明示的にシンボル化すれば良い。

/*test.cpp*/
template Hoge 
Hoge Test<Hoge>::max(Hoge a, Hoge b);

他の方法としてはヘッダー側に実装を書いてしまう方法。

参考サイト

marycore.jp

【Unity】VRChatでファーシェーダーを試す エラー修正編

最近シェーダーを勉強し始めました。シェーダーを使うならモフモフを表現できるファーシェーダーをやりたいと思い早速調査開始。 VRChatで使えそうなシェーダーを探して見つけたのがこれ。

[Unity] ファーシェーダを移植してみた - Qiita

ただ、そのままだとVRChatのアバターを作るUnity 5.6.3p1ではエラーで動作しなかったので、修正した個所を備忘録的にまとめる。 GitHubからファイルを落として来て、Unity 5.6.3p1で開いたところからスタート

プロジェクトを開くと最初にプロジェクトのバージョンのアップグレードを要求されるので「Upgrade」を押す。

f:id:kurotori4423:20180126202300p:plain

ProjectビューからSceneを開いて再生しても最初は真っ黒。これを修正する。

f:id:kurotori4423:20180126202444p:plain

Shedarsフォルダの項目のFurShaderを見ると二つエラーがある。

f:id:kurotori4423:20180126202618p:plain

FurHelper.cgincの8行目を以下のように修正。

修正前

float4 vertex    : SV_POSITION;

修正後

float4 vertex    : POSITION;

FurHelper.cgincの32行目のforceDirectionの初期化の文法がおかしいのが問題なので以下のように修正。

修正前

float3 forceDirection = float3(0.0);

修正後

float3 forceDirection = float3(0.0,0.0,0.0);

次にFurShader.shaderの15行目以降のPass{}を以下のように修正

修正前

Pass {
    ZWrite On
    Blend Off
            
    CGPROGRAM
                
    #include "FurHelper.cginc"
                
    ENDCG
                
    SetTexture [_MainTex] {
    combine texture + primary
    }
}

修正後

Pass {
    ZWrite On
    Blend Off
            
    CGPROGRAM
    #pragma vertex vert
    #pragma fragment frag   
    #define FUR_OFFSET 0.000000
    #include "FurHelper.cginc"
                
    ENDCG
                
    SetTexture [_MainTex] {
    combine texture + primary
    }
}

これで正しく表示される。 f:id:kurotori4423:20180126204512p:plain

インフォメーション

配布モデル

MMDモデル

モデル付属のReadmeを必ずお読みください。

オリジナルキャラ:黒鉄

pass: slit
bowlroll.net

東京放課後サモナーズ:テムジン

passなし bowlroll.net

VRChat用モデル

カンフーなタイガー

bowlroll.net

アカウント

VRChat : kurotori4423 twitter: @kurotori4423

【VRChat】Driver4VRを使用してKinect v2でフルボディトラッキングする

Oculus Rift使いだと、Viveトラッカーを使用してVRChatでフルボディトラッキングをすることができない。しかし、Driver4VRという様々なセンサデバイスをSteamVRで使用することができるブリッジソフトウェアを使用してKinect v2でフルボディトラッキングを実現することができる。Oculus Rift だけでなく、 HTC Vive にも対応している。

※注意事項 Driver4VRは非公式なツールです。従ってこのソフトウェアの使用は自己責任であり、本記事を参考にしてソフトウェアを使用した際に発生したいかなる障害、不具合に対して一切責任を持たないことに注意してください。

筆者の環境 (2017/12/25)

PC

使用デバイス

 必要なもの

現在 Xbox One Kinect Sensor(以下Kinectと呼称する)は購入してもPCに接続するアダプターは同梱しておらず、別売りとなっている。 新規にKinectを購入する場合はアダプターの購入を忘れないようにしよう。 また、KinectUSB3.0ポートに接続しないと動作しない。自分のPCのUSB3.0ポートに空きがあるかどうか確認しよう。また、見た目上3.0ポートが複数あっても内部でホストコントローラが一緒である場合があり、そこにVRデバイスが接続されていると使用できないことがあるので注意しよう。

Kinect のドライバインストール

KinectをPCに接続する前にドライバをインストールする。
まずMicrosoftの公式ページからドライバをダウンロードする。
Download Kinect for Windows SDK 2.0 from Official Microsoft Download Center

ダウンロードが完了したら、指示に従ってドライバをインストールする。OKを押していけば簡単に完了する。
ドライバのインストールが完了したらKinectをPCに接続する。

Driver4VR

Driver4VRはシェアウェアで、つまり有料ソフトウェアであり、現時点(2017/12/25)で€19.97する。一応試用版が存在し、動作確認をする程度なら試用版で十分だろう。しかし、試用版は時間制限式で起動後しばらくしたらすぐに時間切れになってしまう(詳しい時間は載っていなかったが、体感10分程度で終了する)。VRChatで本格的に使うなら有料版を買う必要がある。

アカウント登録

まずはDriver4VR公式ページでアカウント登録をする。

Driver4VR - enhance your VR configuraiton | Body Tracking, Head Tracking, Leap Motion

公式サイトの「DOWNLOAD」に飛んで、初回なら「Register」をクリックする。 次にMembership Levelsの選択画面が出てくる。上の「Driver4VR Friend」が試用版、下の「Driver4VR Gold」が有料版なので、必要な方を選択しよう。また、FriendからGoldへの移行は簡単にできるので、初めは動作確認のためにFriendを選択しておくとよい。

f:id:kurotori4423:20171225205436p:plain

次にアカウント情報を入力する。質問にはすべて答える必要がある。

  • Username : ユーザー名
  • Password : パスワード
  • Confirm Password : パスワードをもう一度入力
  • E-mail Address : メールアドレス
  • Confirm E-mail Address : メールアドレスをもう一度入力
  • Your VR config : あなたのVR設定、とりあえず「Oculus Rift」とか入力する。
  • Why need Driver4VR? : なぜDriver4VRが必要ですか? とりあえず「For VRChat」とか入力する。
  • Where did you hear about me? : 我々のことをどこで知りましたか? とりあえず「VRChat」とか入力する。

入力が完了したら「SUBMIT AND CONFIRM」をクリック。
成功すれば「Membership Confirmation」と出るので「DOWNLOAD」ページに飛ぶ。
そしたら「download」をクリックする。
「driver4vr-setup.exe」のダウンロードがスタートするので適当な場所に保存する。

Driver4VRのインストール

SteamVRが起動している場合は終了しておく。
「driver4vr-setup.exe」を起動する。PCによっては「WindowsによってPCが保護されました」という警告がなされるが、「詳細情報」をクリックし「実行」を選択すれば実行することができる。

f:id:kurotori4423:20171225211301p:plain f:id:kurotori4423:20171225211352p:plain

実行したら手順に従って、インストールする。基本的には「Next」をクリックしていけば完了する。

Driver4VRのセットアップ

SteamVRを起動する。起動と同時にDriver4VRも起動する。
Loginウィンドウが出るので、登録したアカウントでログインする。

f:id:kurotori4423:20171225212323p:plain

ログインしたら、まず「Tracking」の「Body/Trackers」をONにして、「Start Driver4VR」をクリックする。

f:id:kurotori4423:20171225213003p:plain

Statusが「Driver4VR detected and running!」になっているのと、SteamVRのウィンドウでkinectアイコンが3つ増えているのを確認する。

f:id:kurotori4423:20171225213320p:plainf:id:kurotori4423:20171225213326p:plain

確認出来たら、「Cariblate」ボタンをクリックする。

f:id:kurotori4423:20171225222853p:plain

以下のような画面が出るのでVRHMDを被ってKinectの前に立ち、自分のボーンが表示されるか確認する。SteamVRのデスクトップ閲覧機能を使えば、画面をHMDを外さずに画面を確認できる。画面を確認しながら、自分が動き回りたいルームスケールの範囲がKinectに収まっているか確認する。収まらない場合は、Kinectの位置を調整する。

f:id:kurotori4423:20171225215200p:plain

Kinectの設置位置が決まったら、「Calibrate」ボタンを押す。ボタンを押すとキャリブレーションの流れが表示される。

  • 5つのサンプルを取ります
  • 最初の3回は立ってください。
  • 残りの2回はしゃがんでください。
  • サンプリング中はKinectの方を向いてください。
  • VRヘッドセットは被ってください
  • そしてKinectでヘッドトラッキングします

f:id:kurotori4423:20171225220541p:plain

「Got it!」をクリックするとキャリブレーションが開始される。 まずは画面に全身が収まるところに立ち、kinectの方を向いて静止する。しばらくすると拍手の音が聞こえるのでそれが成功の合図である。失敗した場合は「ブー」という(地味に腹が立つ)ブーイングが聞こえる。失敗した場合、Kinectに近づきすぎてヘッドセットが画面に映っていなかったり、姿勢が悪いといったことが原因なので、姿勢を正し、Kinectに全身が映るように移動する。成功したら少し違う場所に立ってkinectの方を見て静止する。これを3回繰り返す。3回立ちポーズを取れたら、次にしゃがんだポーズをとる。kinectには以下のように映るようにしゃがむと成功しやすい。成功したら別の場所に動いてしゃがんで静止する。しゃがみポーズは全部で2回サンプリングする。

f:id:kurotori4423:20171225220450p:plain

すべて完了したら、Calibration complete!となってキャリブレーションは完了する。ウィンドウは閉じてよい。

f:id:kurotori4423:20171225220753p:plain

VRChatでの設定

VRChatにログインしたらアバターがTポーズをとる。足元を見ると腰と両足に白い球が浮いているので、自分も同じポーズをとってアバターの位置に合わせ、両手のグリップボタンを同時に押す。

f:id:kurotori4423:20171225221714j:plain

これでVRChatでの設定は完了。

f:id:kurotori4423:20171225221727j:plain

おまけ:kinectでフルトラした感想

足踏み、しゃがみは問題なくすることができる。ただ、足を投げ出して座ったり、寝っ転がったりはあまりうまく認識してくれない。足組も難しい。またVive トラッカーがどうかは知らないが、足や腰の捻りには追従してくれない。しかしそれ以外は非常にイイ感じで動いていて楽しいのでOculus Riftでもフルボディトラッキングしたい!と考えている人は導入を検討する価値がある。HTC Viveを持っている人は、素直にVive トラッカーを買った方がいいだろう。

参考サイト

youtu.be

NVIDIA FleX入りUnreal Engine 4 をビルドする

NVIDIA FleX入りUnreal Engine 4 

f:id:kurotori4423:20170721014538p:plain NVIDIA FleXUnreal Engine 4 で使用するには NVIDIA FleX が組み込まれた改造ビルドのUnreal Engine 4を使います。そのためには、Unreal Engine 4 を自分でビルドする必要があります。 本記事は Windows 10 での導入を解説します。

免責事項

NVIDIA FleX 入りの Unreal Engine 4を導入するのは自己責任でお願いします。発生した何らかのトラブルや損失・損害等につきましては一切責任を問わないものとします。

必要なもの

NVIDIA FleX 入りの Unreal Engine 4 のソースコードをとってくる

下記のサイトにアクセスします。404 Error になった場合は、UE4GitHub アカウントの関連付けが完了していません。
https://github.com/NvPhysX/UnrealEngine.git

ここには NVIDIA による UE4 の拡張版のリポジトリが登録されています。ダウンロードするには、右上の「Clone or download」をクリックし、「Open in Desktop」をクリックします。GitHub Desktopが導入済みであれば、外部プログラム呼び出しで、「GitHub Desktop」が起動します。

f:id:kurotori4423:20170721013311p:plain

リポジトリの保存場所を選び、クローン(ダウンロード)を開始します。ダウンロードサイズは5GB近いので待ちましょう。HDDの残り容量にも注意です。

クローンが完了したら、「Current branch」が「NVIDIA-README」になっていると思うので、「origin/FleX-4.16.0」を選択します。今回は最新版の4.16.0を入れますが、「origin/FleX-X.XX.X」はお好きなバージョンを選択しても大丈夫です。ブランチの切り替えもこれまた時間がかかるので待ちましょう。

f:id:kurotori4423:20170721013328p:plain

ブランチの切り替えが完了したら、クローン先のディレクトリにいろいろファイルができます。このようになっていたら大丈夫です。(「.git」は隠しフォルダなので見えてなくても大丈夫です。)

f:id:kurotori4423:20170721013437p:plain

UE4のビルド

まず「Setup.bat」を実行します。
そしたらコマンドプロンプト(黒い画面)が出てきていろいろダウンロードが開始されます(約4.5GB)。待ちましょう。途中一度だけユーザーに許可を求めるウィンドウが出てくるところがあるので忘れずOKします。

次に「GenerateProjectFiles.bat」を実行します。
コマンドプロンプトが出てきて、いくつかのファイルを生成します。これはすぐに終わります。

フォルダ内に新しく「UE4.sln」ができます。ダブルクリックして Visual Studio 2015 で開いてください。読み込みが完了するまで待ちましょう。画面下の青い帯でプログレスバーが出ています。準備完了 とでたらOKです。

次にソリューション構成を「Development Editor」に、ソリューションプラットフォームを「Win64」に、スタートアッププロジェクトを「UE4」にします。(一応デフォルト設定でそうなってます)

f:id:kurotori4423:20170721013502p:plain

そしたら、ソリューションエクスプローラから「UE4」を右クリックして「ビルド」を選択します。ビルドが開始されます。ビルドには環境にもよりますがそれなりに時間がかかります(自分の環境では40分ほど)。待ちましょう。

f:id:kurotori4423:20170721013530p:plain

ビルドが完了したら、「F5」を押せばデバッグモードで起動できます。
また、exeは「/Engine/Binaries/Win64」内にあるので、そこから「UE4Editor.exe」を起動できます。
自分はこのショートカットを作って、いつもはそこから起動しています。

UnrealLightmassをビルドする

Lightingをビルドする際「Swarmに接続できません」と出る場合があります。その場合は、UnrealLightmassをビルドすることで解決します。
ソリューションエクスプローラから「UnrealLightmass」を右クリックし「ビルド」を選択します。

お疲れさまでした。

参考サイト

UnrealEngine4にNVIDIA FleXを導入する方法メモ(error C4599/C4605 回避法+)
http://ch.nicovideo.jp/ishtar/blomaga/ar1169938