Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
オーディオリアクティブなVR空間で生演奏のライブがしたくてライブシステムを作った話
Search
pibo
August 31, 2020
Programming
0
350
オーディオリアクティブなVR空間で生演奏のライブがしたくてライブシステムを作った話
xR Developers Community Conferenceで発表した内容です。
https://vrtokyo.connpass.com/event/185043/
pibo
August 31, 2020
Tweet
Share
Other Decks in Programming
See All in Programming
あなたの知らない「動画広告」の世界 - iOSDC Japan 2025
ukitaka
0
440
ネイティブ製ガントチャートUIを作って学ぶUICollectionViewLayoutの威力
jrsaruo
0
140
uniqueパッケージの内部実装を支えるweak pointerの話
magavel
0
940
Six and a half ridiculous things to do with Quarkus
hollycummins
0
140
monorepo の Go テストをはやくした〜い!~最小の依存解決への道のり~ / faster-testing-of-monorepos
convto
2
440
私達はmodernize packageに夢を見るか feat. go/analysis, go/ast / Go Conference 2025
kaorumuta
2
500
Cloudflare AgentsとAI SDKでAIエージェントを作ってみた
briete
0
130
Advance Your Career with Open Source
ivargrimstad
0
410
Go Conference 2025: Goで体感するMultipath TCP ― Go 1.24 時代の MPTCP Listener を理解する
takehaya
7
1.6k
CSC509 Lecture 05
javiergs
PRO
0
300
いま中途半端なSwift 6対応をするより、Default ActorやApproachable Concurrencyを有効にしてからでいいんじゃない?
yimajo
2
370
Domain-centric? Why Hexagonal, Onion, and Clean Architecture Are Answers to the Wrong Question
olivergierke
2
680
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
114
20k
How to train your dragon (web standard)
notwaldorf
96
6.3k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
Optimizing for Happiness
mojombo
379
70k
Documentation Writing (for coders)
carmenintech
75
5k
jQuery: Nuts, Bolts and Bling
dougneiner
64
7.9k
Testing 201, or: Great Expectations
jmmastey
45
7.7k
Git: the NoSQL Database
bkeepers
PRO
431
66k
Building Better People: How to give real-time feedback that sticks.
wjessup
368
20k
The Power of CSS Pseudo Elements
geoffreycrofte
79
6k
Into the Great Unknown - MozCon
thekraken
40
2.1k
Transcript
オーディオリアクティブなVR空間で 生演奏のライブがしたくて ライブシステムを作った話 ぴぼ(memex) @memex_pibo
自己紹介 • ぴぼ(@memex_pibo) • 大学院で裸眼MR(空中映像)を研究 • 在学中にVR空間での音楽活動に興味を持ち 2人組音楽ユニット「memex」でVR音楽活動開始 • 本業:Androidエンジニア
手乗り裸眼MR「FairLift」 memex
memex ワンマンライブ 「#解釈不一致」 memexがVR空間で行ったライブ • 生歌生ギター • リアルタイムモーション収録 • オーディオリアクティブな演出
• 体験可能人数無制限 YouTubeに360°立体視のアーカイブがあります
None
今日のテーマ 目的:オーディオリアクティブな演出で生演奏のVRライブがしたい! 課題:音と演出のタイミングが合わない! 解決策:アバターも演出も音も全部動画として配信すれば合う!
#解釈不一致 システム構成 Max For Live モーション 演奏 音から生成した 演出信号 音声
データ モーションと 演出の映像化 配信映像再生 コンポーネント カメラによる テクスチャ化 Shaderで モーションと 演出の復元
今日のテーマ 目的:オーディオリアクティブな演出で生演奏のVRライブがしたい! 課題:音と演出のタイミングが合わない! 解決策:アバターも演出も音も全部動画として配信すれば合う!
オーディオリアクティブな視覚演出が好き オーディオリアクティブ = 音に反応すること 例) 声の音量に合わせて円が大きくなる バスドラムに合わせて床が隆起する Soundscape of Portrait
- Ayumu Nagamatsu ハイスイノナサ"地下鉄の動態" MV
VRでオーディオリアクティブの世界に入りたい オーディオリアクティブな空間の中でライブしたい…… VRChatならできそう!バーチャルアーティストすっぞ!
VRでオーディオリアクティブの世界に入りたい オーディオリアクティブな空間の中でライブしたい…… VRChatならできそう!バーチャルアーティストすっぞ!
今日のテーマ 目的:オーディオリアクティブな演出で生演奏のVRライブがしたい! 課題:音と演出のタイミングが合わない! 解決策:アバターも演出も音も全部動画として配信すれば合う!
できない理由:同期の経路がバラバラ • VRChat アバターの モーション ライブの音声 空間演出イベント 演者 お客さん
演者 同期の経路がバラバラ • VRChat お客さん アバターの モーション ライブの音声 空間演出イベント ここは気にならない
ここが合わない
今日のテーマ 目的:オーディオリアクティブな演出で生演奏のVRライブがしたい! 課題:音と演出のタイミングが合わない! 解決策:アバターも演出も音も全部動画として配信すれば合う!
今日のテーマ 目的:オーディオリアクティブな演出で生演奏のVRライブがしたい! 課題:音と演出のタイミングが合わない! 解決策:アバターも演出も音も全部動画として配信すれば合う! 1. 素直なアプローチ 2. 演出イベントの映像化 3. アバターのモーションの映像化
今日のテーマ 目的:オーディオリアクティブな演出で生演奏のVRライブがしたい! 課題:音と演出のタイミングが合わない! 解決策:アバターも演出も音も全部動画として配信すれば合う! 1. 素直なアプローチ 2. 演出イベントの映像化 3. アバターのモーションの映像化
素直なアプローチ 音と演出のタイミングを合わせるために最低限必要そうなもの 1. モーション・音声・イベントにタイムコードを持たせたフォーマット 2. 1をやりとりするサーバー 3. 1のタイミングを一致させて再生できるクライアント
素直なアプローチ 音と演出のタイミングを合わせるために最低限必要そうなもの 1. モーション・音声・イベントにタイムコードを持たせたフォーマット 2. 1をやりとりするサーバー 3. 1のタイミングを一致させて再生できるクライアント たいへんなのでなるべく既存のものに乗っかりたい!
今日のテーマ 目的:オーディオリアクティブな演出で生演奏のVRライブがしたい! 課題:音と演出のタイミングが合わない! 解決策:アバターも演出も音も全部動画として配信すれば合う! 1. 素直なアプローチ 2. 演出イベントの映像化 3. アバターのモーションの映像化
• VRChatクラブシーンでの先行例 演出イベントを映像として配信する アバターの モーション ライブの音声 空間演出イベント (色で表現) 演者 お客さん
映像ストリーミングサービス経由 Shaderで映像を 演出にデコード (VRChat) HLS再生 オブジェクト VRChat経由
演出イベントの映像化 先行例:TouchDesignerなどで音圧レベルを白黒グラデーションにマッピング https://www.slideshare.net/noriben/vj-168074352 #解釈不一致ではMAX for LiveとUnity 映像をシーン内のカメラでRender Textureにし、シェーダーで読み込む バスドラム スネア
バスドラム(床) スネア (円周)
曲中の任意のタイミングで演出イベントを生成する 音楽制作ソフトのシーケンサーにMIDIノート(音符)を配置 UnityでMIDIを拾って映像化 伴奏音声 演出イベント (MIDIノート)
問題点:アバターと音がズレる
今日のテーマ 目的:オーディオリアクティブな演出で生演奏のVRライブがしたい! 課題:音と演出のタイミングが合わない! 解決策:アバターも演出も音も全部動画として配信すれば合う! 1. 素直なアプローチ 2. 演出イベントの映像化 3. アバターのモーションの映像化
任意のシェーダー変数が 映像として配信・再生可能 (精度は低い……)
アバターのモーションも 映像として配信しよう
#解釈不一致 の配信形式 アバターの モーション ライブの音声 空間演出イベント お客さん 映像ストリーミングサービス経由 演者 メッシュ・
シェーダー等 アセット類 VRChat経由
モーションの映像化 • VAT(Vertex Animation Texture) ◦ アニメーションの各フレームにおける各頂点の位置をテクスチャに書き込むことで テクスチャにアニメーション情報を記録する手法 #解釈不一致 では映像1フレームに1フレーム分のアニメーションを記録
エンコードによる劣化 映像として配信する際のH.264エンコードで頂点の位置情報が劣化する 外れ値をフィルタリングすることで原型を保つ エンコード フィルタリング
実際に配信した映像
演出イベント アバター1 モーションデータ アバター2 モーションデータ ツイート (空間に表示)
None
#解釈不一致 システム構成 Max For Live モーション 演奏 音から生成した 演出信号 音声
データ モーションと 演出の映像化 配信映像再生 コンポーネント カメラによる テクスチャ化 Shaderで モーションと 演出の復元
まとめ
良かったこと • VRChatに依存しなくなった ◦ 360°アーカイブはUnity上でUnityCaptureで録った映像 • 人数制限がなくなった ◦ VRChatの1インスタンス(1空間)には人数制限があるが、 この手法なら複数インスタンスに同時に現れることができる
▪ 「仲いい人だけでインスタンスを立ててライブを見るのが面白かった」 • 「VR空間上の一連のできごとが1つのファイルとして記録されている」 ことが面白い ◦ Unityのビデオプレイヤーで再生ファイルを差し替えるだけでリハーサルの様子が見られる ◦ ビルドしたクライアントと録画映像があるのでVRChatが対応しなくなっても 今後もずっと体験できる(はず)
大変だったこと • エンコードによる情報量の劣化への対処に凄く時間がかかった • AWSで1時間の映像を400人程度に配信した結果5万円かかった
より詳細な内容がQiitaにあります https://qiita.com/memex_pibo/items/3fbfcd627e5e7c7f2061
オーディオリアクティブなVR空間で 生演奏のライブがしたくて ライブシステムを作った話 ぴぼ(memex) @memex_pibo