「第1回 VRM勉強会」メモ

# 概要

[第1回 VRM勉強会 - connpass](https://connpass.com/event/116985/) のメモです。
メモが取り切れていない箇所があり申し訳ありません。

資料をTwitterで見つけた方の資料リンクは掲載しておりますが、もし漏れがあった場合はコメントにてお知らせ下さい。また、登壇者様のツイッターアカウントを掲載しておりますが、こちらも間違いがありましたらお知らせ頂けると幸いです。

# Luppetで分かったVRMアプリ開発Tips

- [ねぎぽよ❣️／ニアちゃん👉(@CST_negi)さん | Twitter](https://twitter.com/CST_negi)
- [Luppetを先行公開します！｜negipoyoc｜pixivFANBOX](https://www.pixiv.net/fanbox/creator/1959270/post/279825?utm_campaign=post_page&utm_medium=share&utm_source=twitter)
- PCとLeepMotionで完結するVTuberアプリ
- VRMの特徴はいろんなモデルがあるので、キャラ選択画面が欲しくなる
- モデルの体格が違うので、カメラ位置等の調整方法に工夫が必要
- 発行するアクセサリーが付いてたりする
- モデルの選択, 調整画面とキャラを動かすシーンを分ける
- モデル生成シーンとメインシーンを分けると良い(快適にモデル選択が可能)
- モデルは一度に生成すると重い、キャラ選択はメタ情報だけあれば十分
- カメラをキャラの頭のGameObjectに合わせる
- 自動調整は限界があるので、手動調整画面を用意しておくと良い
- PostProcessとか背景色も変更出来るようにすると良い (原色アバターがクロマキーで消える)
- Luppetは明るさの強さと背景色を調整可能にしている

# VRMを使ったAR/MR撮影アプリを試作開発してみた話

![image](https://i.gyazo.com/096da38becdc42c08c7352515115e3e1.png)
![image](https://i.gyazo.com/e6d1a57e80181ef8304e2c31f4d44c51.png)

- [sotan(@sotanmochi)さん | Twitter](https://twitter.com/sotanmochi)
- [VRMを使ったAR/MR撮影ツールを試作開発してみた話 / Prototype of Mobile Mixed Capture - Speaker Deck](https://speakerdeck.com/sotanmochi/prototype-of-mobile-mixed-capture)
- HumanPoseで同期、ただ位置同期が一致しない
- Animator.humanScaleの違いによって移動する距離に差が出る
- 上半身をモーションキャプチャ、下半身はアニメーションで動かす
- 上半身用モデルと下半身用モデルのHumanposeから必要なmusclesを取得する
- HumanPoseのmusclesをfloat(32bit)からhalf(16bit)に変換してデータ削減
- モデルの顔と神が消えることがある (updateWhenOffscreenで暫定対策)

# アバター生放送支援アプリ「アバれぽ」の紹介

![image](https://i.gyazo.com/1c3f22bbafcf473d814ac5dd6a583583.png)

- [とりすーぷ(@toRisouP)さん | Twitter](https://twitter.com/toRisouP)
- REST APIとUDP Socketを開発者向けに提供
- テキスト解析で表情を自動設定
- 体験版と有料版用意する予定 (生放送やるだけなら無料で良さそう)

# おめめのうごき

- [みゅみゅ@バーチャルキャスト(@miyumiyuna5)さん | Twitter](https://twitter.com/miyumiyuna5)
- VRMは目の動きが制御出来る
- [視線制御 - dwango on GitHub](https://dwango.github.io/vrm/univrm/components/univrm_lookat/)
- コンポーネントのパラメータで可動範囲を設定可能
- 横23, 縦15ぐらいがいい感じ
- ちょっとぐらい大げさなぐらいが面白い (モデルごとに変わる)

# 誰でもできる！VRMモデルセットアップ小技集

- [えむにわ(@m2wasabi)さん | Twitter](https://twitter.com/m2wasabi)
- アバターパペットツール [m2wasabi/LiveAvatar: Digital puppet application without HMD](https://github.com/m2wasabi/LiveAvatar)
- VRM読み込みUI [m2wasabi/VRMLoaderUI: VRM Loader UI](https://github.com/m2wasabi/VRMLoaderUI)
- MToon [VRM 標準シェーダ MToon の使い方 by さんたーP さん - niconare](https://niconare.nicovideo.jp/watch/kn3485)
- MatCapは加算、リムライト以外にもテカテカな表現も出来る
- MToonには4つのRenderingType, VRM/Unlit よりも使いやすい (半透明処理も簡単に出来る)
- VRMSpringBone(揺れもの)の設定はアリシアちゃんのVRMモデル
- [VRMSpringBone - dwango on GitHub](https://dwango.github.io/vrm/univrm/components/univrm_secondary/)
- VRMSpringBoneはSecondaryの下に何個置いて、それぞれに弾性や重力、コライダー等を設定可能
- 左右対称のVRMSpringBoneColiderGroupはコピペして、要素xの±を入れ替えれば良い
- Boneのコライダーは基本的にリグのTransformの配置に沿って生えてる (回転方向は0固定なので見ない)
- 長さ0のRootBonesコライダーは親から延長された直線状に生え、重力に引かれる
- 公式「標準以外のマテリアルはインポート側にあれば使用可能」だが、実際はスクリプトの改造が必要

# VRM対応スマホアプリ開発Tips集

- [なっつー(@yashinut)さん | Twitter](https://twitter.com/yashinut)
- [VRM対応スマホアプリ 開発Tips集 by なっつー さん - niconare](https://niconare.nicovideo.jp/watch/kn4008)
- [Gotanda.unity #10 VRM対応スマホアプリのすすめ](https://www.slideshare.net/yashinut/gotandaunity-10-vrm)
- [Zip / gzip Multiplatform Native Plugin. - Asset Store](https://assetstore.unity.com/packages/tools/input-management/zip-gzip-multiplatform-native-plugin-39411) で zip ファイルを ios/Android で展開可能
- デフォルトアバターの読み込みはPrefabで配置したほうが良い (ランタイムロードは重い)
- VRMアバターを含めると重くなるので、Prefabだけ残すと良い
- MToonシェーダが原因でシーンが落ちるAndroid端末がある
- Android開発の場合はデバッグ用端末を大量に用意したほうが良い (iosは安定してる)
- Application.OpenURL("URL") でOculusGoブラウザを開くことが可能

# VRM姉妹のGLTF(GLB)はやればできる子! セルフビルド狐おじさんが教える動く背景データの作り方と対策

- [Ichitaro (いちたろう)(@ichitarok)さん | Twitter](https://twitter.com/ichitarok)
- [VRM姉妹のGLTF(GLB)はやればできる子! セルフビルド狐おじさんが教える動く背景データの作り方と対策 第1回 #VRM勉強会 by Ichitaro さん - niconare](https://niconare.nicovideo.jp/watch/kn4013)
- VRMはglTF2.0をベースにしたフォーマット
- バーチャルキャストではglTFを背景として利用可能
- VRMと一緒に入ってくる, UnityでもBlenderでも製作可能
- Unlit/Texture と UniGLTF/UniUnlit のシェーダをよく使う
- アニメーションを加えることで動きのある背景が作れる
- UnityのAnimation機能で製作可能 
- Previewを解除してからglTFを生成しないと壊れる
- Animationのフレームレートは少なすぎるとだめ

# VRMSpringBoneをJobSystem&ECSで最適化してみた話

- [mao(@TEST_H_)さん | Twitter](https://twitter.com/TEST_H_)
- [VRMSpringBoneをJobSystem&ECSで最適化してみた話 by mao さん - niconare](https://niconare.nicovideo.jp/watch/kn4015)
- [mao-test-h/VRMSpringBone-Optimize: VRMSpringBoneの最適化検証](https://github.com/mao-test-h/VRMSpringBone-Optimize)
- MainThreadではJobSystemのJobを発行しているだけ(モデル毎に処理)
- コリジョン算出, 親の回転値の取得, 物理演算/反映をJobSystemで処理
- MainThreadの処理は5ms以内に収まった
- 全モデル分を一括で処理, 08ms 〜 1msぐらいになった
- Jobの発行負荷を抑えた
- 動的なモデルの増減でスパイクが起こる (20ms)
- [【Unity】Entity Component System入門(その1)【2018.2】 - Qiita](https://qiita.com/pCYSl5EDgo/items/caac60ee41058cde085a)
- ECS & JobSystem で最適化すると Job ベースに比べるとマシ

# (個人で)VRM対応のアダルトアプリを作っている話

- [Nakaji Kohki / リリカちゃん💜💉(@nkjzm)さん | Twitter](https://twitter.com/nkjzm)
- モーションキャスト, VRM対応のモーション再生アプリ
- バリデーションでアダルト禁止ライセンスのアバターを弾く
- Hubサービス (VRoid Hub等) からのみの利用とする
- 配布やライセンスには注意が必要、アダルトで悪用されるリスクがある
- アダルトアプリは有償でもそこそこ買ってもらえる (モーションキャストは300円)

# まとめ

興味のあった部分のみのメモになっており、少し偏りがあって申し訳ないです。
僕以外にも [VRM勉強会に行ってきました（簡易レポ） - 世界の果てで終末を待つだけの雑記](http://platoronical.hatenablog.com/entry/2019/02/20/001835) でレポートを書いていらっしゃる方もいますので、そちらも一緒に見て頂けたらと思います。

(勢いで Qiita にアップロードしましたが、もし適切で無いようであればブログの方に移転します)