Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
オーディオリアクティブなVR空間で生演奏のライブがしたくてライブシステムを作った話
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
pibo
August 31, 2020
Programming
420
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
オーディオリアクティブなVR空間で生演奏のライブがしたくてライブシステムを作った話
xR Developers Community Conferenceで発表した内容です。
https://vrtokyo.connpass.com/event/185043/
pibo
August 31, 2020
Other Decks in Programming
See All in Programming
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
400
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.6k
残高管理から台帳サービスへの進化
artoy
1
200
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.2k
Agents on Rails - Rails at Scale 2026
irinanazarova
0
570
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
170
Kotlinize Is Not Just Converting to Kotlin
chigichan24
1
110
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
440
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
dotNET_vulnclicker_intro.pdf
deka_morita
0
150
Event is what happens
moro
2
870
contenteditable と日本語入力に向き合う
colorful12
0
200
Featured
See All Featured
Tell your own story through comics
letsgokoyo
1
1.1k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.7k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
For a Future-Friendly Web
brad_frost
184
10k
How to build a perfect <img>
jonoalderson
1
6.1k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.3k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
1k
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
sira's awesome portfolio website redesign presentation
elsirapls
0
460
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