勉強会のレポート(メモ)です。
参加したのはこちら「うらゆないと in ZIZAI」
会場はZIZAIさんです。
Unite Tokyo 2019の公募で落ちてしまった方が登壇するイベントとなっています。
- 会社紹介 ZIZAI
- #1 Unity での開発基盤を大公開 〜ごっこランドをささえる技術 総集編〜
- #2 iPhoneひとつで「デジタルヒューマン」を実現する!「Emotional LipSync」のヒミツ
- 懇親会
- 告知タイム
- タイムライン
会社紹介 ZIZAI
いろんな事業をしています
・配信アプリIRIAM
・VTuber事業
・スロパチステーション
その中で最も力を入れているのがIRIAM
最近はジザイトというカジュアル会社説明会をやっています
#1 Unity での開発基盤を大公開 〜ごっこランドをささえる技術 総集編〜
※詳しくはスライドをご覧ください
ざっくりプロジェクトの作り方をお話します。
プロジェクト開発からリリースまで、基盤開発に関わる上で気にする点、
ビルドなどのハマリポイントなどについて。
これから話すことは正解ではなく一例です。
Unityの基盤開発まわりでアウトプットする人が増えてほしいという想いもあります。
ごっこランドのお話
ごっこランドとは
未就学児から小学校低学年までターゲットとした職業体験アプリ
実在企業がパビリオンとして出展しています
パビリオン
カジュアルゲームみたいな感じで、月に1,2本パビリオンをリリースしています。
常に新規タイトルがでているが、運用タイトルでもあり常にメンテナンスし続けている。
当然一番最初のコードから新しいコードまで含まれているアプリになります
各パビリオンごとにプロジェクトが独立していて
最終的にマージしていきます。
Unityのバージョンは常に最新に追従しています。
一気にバージョンアップするよりも、追いかけていた方がよい。
プロジェクトの初期設定
使っているソフトウェア
Riderはいいぞ。これがないと開発できない。後はフォトショとかイラレとか。
基本3Dはやっていません。アニメーションはUnity標準のものをつかっています。
ライブラリやアーキテクチャ
UniRx/UniTask/Zenject。UniFlowも使っています。
アーキテクチャはClean Architecture。
開発リポジトリ
GitHub上でテンプレートとなるプロジェクトを作っておきます。
解像度対応
モバイルでやっているので、実機の画面解像度をどうするかを決める。
これは最初にやっておかないとしんどくなる。
絶対に表示してほしい領域を決めるといい。
ディレクトリ構成
アセットごとにフォルダ分けするといいでしょう。
AnimationsやImagesとか、Soundsなどでわけていきます。
Assembly Definitionは細かく分けすぎないようにしています。分けすぎるとしんどくなる。
これもリポジトリ作成時にやっておくといいでしょう
ポイント
とにかく、開発環境やスタイルを整えること
アセットstoreのアセットは使わない。メンテナンスコストがかかる。
作らなくていいものは作らない。
プロジェクト開発
ポイントとなるのは、仕様を決めたらほぼ変えないこと。
開発とこどもテストを高速でイテレーションし、こどもが理解してくれる形にする。
ポイント
できるかぎりはやく、高頻度にビルドを回せるようにする
すると認識のずれを解消できる
Player ビルド
重要なIL2CPPのお話
詳しいブログを書いています。
IL2CPP
.NETのILをC++に変換してくれる
Dictonaryを使うとC++のファイルが肥大化する
外部からソースコードを突っ込むとリジェクトされるので注意
Asset Bundle
詳しくは去年のアドカレで
各パビリオンごとにABでビルドしています。
Strip Engine Code
IOSはダウンロードサイズの表記をしなければならない。
今までは事前に計算していたが、今はAddressableがいい感じ。
リリース・申請
審査
AppStoreだけでなく今はgoogle playにもあります
AppStoreはreview guidlineがあるのでよく読みましょう
https://developer.apple.com/jp/app-store/review/guidelines/
子供向けはちょっと制約が厳しくなる
最近はstoreに反映されるまで時間がかかることがあるので注意
まとめ
基本はUnityと仲良くなりましょう
最新の公式ドキュメントを読みましょう
Unityだけにとどまらず、配信、サーバーインフラなどの知見をもっているとよい
そんな方を求めています・・・!
おまけ ごっこランドを支える技術とか
UniFlowはRoppongi.unity #5のLT7で紹介されました。
Clean Architectureについては.NET Conf Tokyo 2019の1つ目のセッションで紹介されました。
#2 iPhoneひとつで「デジタルヒューマン」を実現する!「Emotional LipSync」のヒミツ
Wrap3の紹介がメインです
経緯
2013年
フォトグラメトリでスキャンをいろいろやっていました
Mixamoでボーンを入れて動かしていました
↓
figmaは簡単だったが、フィギュアにボーンを入れるのは大変
2014年
人体スキャンができるようになった、実体キャプチャして躍らせていました
↓
しかし顔が笑顔のまま、顔が変わらず怖い
口が開かないので喋らせることができない
2014 project airina
踊れるかわいい女の子の3Dモデルを作りたかった(UnityChanとかない時代)
TurboSquidでairinaという3Dモデルを購入しました
↓
これも顔を変えられない、効率的に動かす手法もなかった
Blend Shapeもない
※Blend Shapeとは
ボーンによる変形ではなく、メッシュのパターンを作りブレンドすること
制約があり、同じメッシュ同じトポロジーである必要がある
※トポロジーとは
メッシュの流れや構成
どこがどう区切られているかということ
2015~2017 暗黒自体
とくにやらなくなった
unity chanでいい気がしてきた
2018 IRIAM
IRIAMの開発に携わっていました
↓
2Dでいいじゃん
3Dで多くのVライバーを出すには難しかった
たくさん挫折したが問題の原因は3つ
・メッシュを分離できない
・口の中をつくれない
・Blend Shapeを効率的に作れない
いろいろ探してWrap3というモデリングツールを見つけました
Wrap3の紹介
Wrap3とは
・メッシュ変形に特化したモデリングツール
・ラップで何かをつつむイメージ
・ノードベースで作れる
・バッチ処理もできる
仮設 実写3Dモデルをリポトロジーできるか?
※リポトロジーとは
悪いトポロジーを変えること、きれいにすること
↓
あっさりできました
ここでデモシーン
仮設 アニ文字を実写でできないか?
アニ文字には51種類のBlend Shapeは必要
40体分スキャンしました(左右反転合わせると51種類になる)
大変だが、がんばってやりました
↓
しかし失敗、顔を動かすと破綻してしまう
原因は重複した変形してしまった
適当な変形ではだめだった
仮設 51 Sample FaceにベースメッシュをWrap
Apple 51 Sample Face
appleが用意してくれたサンプル
Warp3でベースメッシュ自体を51サンプルにしてしまおう
↓
できました
ベースメッシュを変形させればよい
課題 口を開けると歯と舌がない
aticeノードで歯茎をまるごと配置できないか
Laticeノード
参考モデルの変更前 変更後があれば変形に応じて変形できる
ただし形状が近接しているのが条件
↓
成功しました
51の歯茎パターンを自動生成できました
まつげや目玉にも応用可能
これで当初の問題を全て解決しました
・メッシュの分離
・Blend Shapeの自動化
・口の中の問題
課題 しわがほしい
・目をつぶった時、しわがあるのがおかしい
・口を膨らませた時ほうれい線があるのがおかしい
仮設 しわあり/しわなしでテクスチャブレンドすればいいのでは?
ShaderGraphを使用しました
BlendShapeの値に応じてテクスチャもブレンド
↓
成功しました
よりリアルに表現できるようになりました
課題 トポロジーは変更したくない
3Dモデルを外注した場合、そのトポロジーを無視するには勇気がいる。
トポロジーはモデラーが決め、BlendShapeは自動生成しよう。
仮設 Laticeノードでできるんじゃ
ベースメッシュをもとによせて変形させる
↓
成功
どんなモデルもblend shapeが自動生成できるように
これでなにができるのか
Emotion Lipsync
3Dキャプチャと音声合成をとり入れました
通常のリップシンクと顔キャプチャでより自然な感じにできるようになりました
ここでデモシーン
今後の課題
・よりリアルにしたい
おおお、すごい....!!👀 #うらゆないと https://t.co/zzpWYcdXQd
— 青木とと(ˊᗜˋ*) (@lycoris102) 2020年1月24日
ただIOSの限界がきている
・眼球
ガラスっぽい特殊なシェーダーが必要
・口の中
影の部分をもうちょっとなんとかした
・より安価に
まとめ
Blend Shapeはwrap3で自動化できました
しわ合成はShader Graphでやりました
IOSではURP
懇親会
告知タイム
第4回 VRM勉強会
まだ募集開始していませんが2月26日にやります。
場所はここZIZAIです。
Tokyo.blender #1
デザイナー向けのBlender勉強会を開催します。
実はLT参加者があまり集まっていません。
UnityでもUE4でもいいのでLTできる方はぜひ参加してみてください。
タイムライン
とってもかわいいビールが出来ました🍻
— 𝕂𝕦𝕣𝕒𝕣𝕒 (@kurara_job) 2020年1月24日
宮崎県産美味しいクラフトビール!本日の #うらゆないと では限定30本だけ出します👏
デザインは@chi_kako さんがやってくれました〜〜いつもありがとうございます💕 pic.twitter.com/9eloo6VkCV
くくく……これが裏のUnite…… #うらゆないと pic.twitter.com/YxMPFT3gnl
— 青木とと(ˊᗜˋ*) (@lycoris102) 2020年1月24日
#うらゆないと#IRIAM で著名な #ZIZAI さんの紹介 pic.twitter.com/qviw6EyCpv
— 中野人史(Hitoshi_Nakano) 12/28VRカタリアウ登壇 (@TokyoVR_ToAhn) 2020年1月24日
最新のスタンプだw #うらゆないと pic.twitter.com/FwfmexO7vh
— itachin (@itachin) 2020年1月24日
(ここだけの話このゲームを担当しました) #うらゆないと pic.twitter.com/XSEdWb0kMg
— 青木とと(ˊᗜˋ*) (@lycoris102) 2020年1月24日
#うらゆないと https://t.co/nuXosSau5Z
— vail(kako)🎶 (@momo79814613) 2020年1月24日
Rider今度ワークショップもあるという噂 #うらゆないと | Unity開発のためのJetBrains Riderワークショップ Tokyo 2020 https://t.co/rtUWZbYRuI
— 青木とと(ˊᗜˋ*) (@lycoris102) 2020年1月24日
この前こんな記事をかきました〜 #うらゆないと | [Unity] ノードベースでUnityAPIを制御するライブラリUniFlowを触ってみる https://t.co/aMplz3cHOd #Qiita pic.twitter.com/fcgTekpmHD
— 青木とと(ˊᗜˋ*) (@lycoris102) 2020年1月24日
こんな感じのGizmo出してどのサイズでも収まるようにUI置いていただいてますね #うらゆないと pic.twitter.com/EbPZiYEjIf
— 青木とと(ˊᗜˋ*) (@lycoris102) 2020年1月24日
娘さんに自分の作った物を楽しんでもらえるの、いい体験すぎる! #うらゆないと
— くろとり@dev (@kurotoridev) 2020年1月24日
初期のIRIAMこんなんだったんだ…
— くろとり@dev (@kurotoridev) 2020年1月24日
面接行ったら伊藤さんがいて内心ビビったのは今となってはいい思い出ですw#うらゆないと
#うらゆないと#IRIAM のスライド
— 中野人史(Hitoshi_Nakano) 12/28VRカタリアウ登壇 (@TokyoVR_ToAhn) 2020年1月24日
伊藤さんは名付け親
名前の未来の未来の逆読みから#VRM モデルは可能 現在 3dは pic.twitter.com/NGi9bM9H76
#うらゆないと
— 中野人史(Hitoshi_Nakano) 12/28VRカタリアウ登壇 (@TokyoVR_ToAhn) 2020年1月24日
すごいなここまで来たか pic.twitter.com/MyaHcx5myb
社長不在でも👌
— itachin (@itachin) 2020年1月24日
#うらゆないと pic.twitter.com/clBMXeXhXZ
飲み食いしなかったけど写真だけ#うらゆないと pic.twitter.com/XktuvhKuri
— えむにわ (@m2wasabi) 2020年1月24日
そうなんですよねー
— もんりぃ先生 (@monry) 2020年1月24日
なので、一つの色を公開してみた感じです😁
事例公開もっと増えてほしい!#うらゆないと https://t.co/Gt1t3swflz
#うらゆないと に行ってきたが、伊藤さんの3DスキャンCGテクノロジーの話を聞けたのは収穫だった。Wrap3使ってるのは知ってたが、そこからどう発展してああなったかを聞けたのは非常にためになった。皺の話とか考えもしなかった。
— ROBA (@vjroba) 2020年1月24日
間違っている箇所、消してほしいツイートがありましたらコメントにお願いします。