このシリーズ久々ですね。
初心者向けの記事として書いてるシリーズですが、今回はテクスチャシェアリングについていきます。
Syphon、SpoutやNDIとかいうものですね。
横文字!?わからん!!!!ってなるのは早いです。わたしも始めた頃ちんぷんかんぷんだったし今もちんぷんかんぷんです。
まず導入の話をします。
そもそもなんでアニクラのResolumeの人はVirtualDJ使うの?
VirtualDJはもともと「DJ用」のソフトなので、BPM解析、キュー(目印の管理)、波形の目視、あとは各種時間制御の機能が使えます。
あとDJ2GO2TouchなんかのDJコントローラーのアサインが最初からあって非常に楽!なのです。
つまりタイミング合わせ、ポン出しに関してVirtualDJは非常に強いわけです。
Resolumeでも波形は見えるけど細かくみたりできない・・・のとBPMまではさすがに解析してくれない…
あと以前も申し上げたとおり圧縮された規格(.mp4)なんかをResolumeで再生すると重めなのでResolume単体での運用が合わない場合もあるのです。
なのでMVやアニメ素材なんかを再生するにはVirtualDJが便利です。
ですが、VirtualDJだけで高度な表現をするには結構回り道しなくてはならない点もあります。
まず、複雑な挙動を指定するにはVDJScriptと呼ばれるコード打たなきゃならない・・・(高度なことするにはコード覚えなきゃ…w)ので結構めんどくさいです。
エフェクトも限定されてる・・・
カメラも一応使えるけどこれもちょっと設定はめんどくさく、複数カメラの制御となると結構煩雑になります。
一方Resolumeですが
MIDIコントローラーに動作をきっちりアサインすればレゾの画面見なくてもある程度制御できます
たくさんのレイヤーを一元的に管理できる、とか
高度なエフェクトが組めてパラメータも自由自在。エフェクトのかけ具合やタイミングも細かく制御できるので、映像を見やすいままエフェクトをかける手法もとれます。
だけど.mp4再生は重いし波形は見づらい・・・BPM Syncの仕様もあってMVなどの再生には向かない面もあります
つまるところ
VirtualDJ→
○動画再生が得意!DJコントローラーへのアサインが楽!再生位置合わせが得意!BPM解析してくれるし波形も見える!
×エフェクトが少ない、カメラとか制御できない、複数素材重ねるのは限界がある
Resolume→
○エフェクトが多い!汎用素材の管理がサムネイルでやりやすい!MIDIコンに柔軟なマッピングができる、複数素材重ねやすい
×特定の形式以外は非常に重い、波形が細かくは見えない
つまりこのソフトたちのいいところどりをすれば最強のVJソフトができてしまうわけです(ソフトのお金はかかります)(PCのスペックも必要)
なのでどっちも使いたい!って人はソフト同士を連携させられる手段を用いて連携してます。
どうやって?
Spoutっていう規格があるんでそれを使います。
導入の仕方は下記です。
Spoutについて
つまるところ、Spoutってなんやねん
私も詳しくは説明できないんですが、ざっくり言うと「描画処理を共有する技術」です。イメージとしては「ソフトAで絵を書いてるのでそれ使っていいよ~」みたいな感じです。
イメージとしては厳密には違いますが「ソフトAとBの間にHDMIなどの映像ケーブルをつなぐ」みたいな感じで最初はいいかと思います。
まずSpoutの成り立ちについて…
SpoutはMac専用のこの手の規格であるところのSyphonをなんとかWindowsでもやろう、という設計思想な気がします。
Spout自体はソフトだと勘違いされやすいですがシステムとか規格みたいなものだと思ってください。導入すれば特にソフトを立ち上げなくても動きます。
超大事な点をひとつだけ。
まず、ゲーミングPCにおける画面の描画ですが、一部はCPU(PCの頭脳、intel Core i7とか書かれてるやつ)で、一部はGPU(ゲームとか専用の画像/動画処理ハードウェア。グラボとか呼ばれてる。NVIDIAなんたら。GTX1050TiとかRTXなんとか、書かれてるやつ)で書かれてます。
こう1枚に見える画面は、ゲーミングノート等の場合、2つの描画システムによる組み合わせでできてます。
上画面でいうとVRChat内はGPUで、その外のGoogle ChromeはCPUで描画処理されており、赤枠+緑枠の画面を表示してる感じです。
この表示の仕組みがあとで効いてきます。
先ほど言ったとおりですが、Syphon&Spoutは「描画処理を共有する技術」です。
なので、ソフトAからソフトBに動画をリアルタイムで渡す状況下で、吐き出すソフトAが統合グラフィック(CPUによる描画)、受け取るソフトBが単体グラフィック(GPUによる描画)の場合、像を渡すことができません。
なので、起動時に各ソフトを統合グラフィックで出すか?単体グラフィックで出すか?
を気にしなければなりません。
ここを統一すれば受け渡しが可能になる・・・はずです。
例えばVirtualDJが統合型グラフィックス、Resolumeが高パフォーマンスNVIDIAプロセッサになっている場合Spoutでの像の送受信ができません。
(VirtualDJとResolumeの連携についてはまた書きます。)
余談ですが、RekordboxLyric/VideoはこのSpoutを内部で回しているらしく、常に送受信を行っています。しかも切れません。なので重い
なので、RekordboxVideo/Lyricを使うときもResolume等使わない運用にせよSpoutの設定、および各ソフトが統合グラフィックで動いているか?単体グラフィックで動いているか?を気にしましょう。
ちなみに、前も説明したようにこういうSpoutを内部で回しているという不思議仕様のため、公式対応はしていませんがRekordboxLyricのSpoutをResolumeで拾って使う運用ができてしまうわけです。
現時点でSpoutに対応してる代表的なソフトが
・Virtual DJ
・Resolume
・GrandVJ
・Rekordbox(Lyricの各デッキ、送信のみ)
・Processing
・Touch Designer
・Unity
あたりです。(Spout対応してるソフトはほとんどSyphonにも対応してます)
↓UnityとかでなにかやるときもSpoutを通す感じになるかと。
NDIについて
NDIはこのブログを読んでる方だとVLC→ResolumeとかVLC⇔OBS⇔Resolumeで使っている方が多いかもです。
NDIはNetwork Device Interfaceの略です。
Networkとある通り、LANケーブル等をつないでファイアウォール等の許可設定をうまくやれば別PC間での像の送受信が可能です。
本来の目的が「2つ以上のPC間で像のリアルタイム送受信を行おう!」という感じで、例えば、1PCで動かしているときは実は「自分のPCから自分のPCに対してネットワーク経由で像を送ってる」状態です。
詳しくは以下の記事を。
NDIに対応してるソフトは以下の通りです。
・Resolume
・GrandVJ
・VDMX
・TouchDesigner(有料のみ)
・OBS Studio
で、ここからが本題ですがソフトごとにSpout、NDIは対応/非対応があり、これらを対応した形式に変換しなくてはならない場面があります。
その変換方法について。
Spout⇔NDI
Spout⇔NDIの変換は実にシンプルで、「Spout to NDI」、「NDI to Spout」というSpoutのサイトに載っているソフトを使います。
これらのソフトを起動するだけで、相互に変換可能です。
(右クリックでどの像を変換するかも選べます)
Spoutは前述のように動画の描画形式やPCの設定などによりうまく使えないこともあるのですが、Spout to NDIで変換するとどうにか使えることもあります。(負荷はやや重めになりますが代替策として持ってはおくと助かる場面が多い)
Webカム/仮想カメラ⇔NDI
WebカムからNDIの変換にはNDI Toolsに付属しているNDI Screen Captureを使います。
起動するとタスクバーに入るので右クリックで設定できます。
Webカムを取り込んでNDIにしたい場合はWebcam Video Sourceから目的のカメラを選択してください。
これで仮想WebカムからNDIに変換できます。
逆にNDIを仮想カメラに出力したい場合はNDI Webcam Inputを使います。
こちらもタスクバーに入るので、右クリックで設定できます。
NDIのソースを選んでカメラ入力に変換できます。
カメラ入力にできるのでZOOMやDiscordはもちろん、RekordboxVideoにも像が飛ばせるわけです。
画面キャプチャ→NDI
NDI Toolsに付属しているNDI Screen Captureを使います。
基本的に起動するだけですべてのモニターを切り取ってくれます。
特定のソフトだけ切り取りたいときはOBS Studioを使います。
仮想カメラ出力、またはNDIプラグインを入れて吐き出せばOKです。Resolumeなどで拾えます。(ちなみにわたしの環境だと右下の仮想カメラ出力より下記ののプラグインの方が安定します)
OBSからResolume等に像が飛ばせるので、Kaunaなどのオーディオスペクトラムソフトを切り取ったり、3teneやLuppetから像を飛ばしてバ美肉したりも方法的には同じです。
まとめ
図解をするとこんな感じです。
OBSは各ソフトのキャプチャーもできるので、結論から言うとすべてのソフトはほとんどのソフトと連携可能です。(SeratoVideoだけはカメラ使えないので代替手段が思いつきませんが・・・)
対応ソフトとしてはVJソフトはだいたいSpoutには対応していますが、OBSはVJソフトじゃないのでプラグイン入れないと対応してません。(一応Spout2対応のプラグインはありますが現状不安定です)
実は仮想カメラはWebカメラ扱いなので、Spout/NDI以上に広くいろんなソフトで使うことができます。
今だとZOOMやDiscordなんかが流行ってきてますが、そちらで利用するには仮想Webカメラで出力することになります。
ということでSpout/NDIのざっくりとした説明と変換法でした。