#BRAINBREAK_VRC で VJ した時の仕組み等諸々
2022/12/17(土) に邪神先生主催のブレイクコアパーティー #BRAINBREAK_VRC (VRChat) で VJ しました。皆様ご来場いただきありがとうございました。
12/17土曜は #VRCatClub さん3周年というお日ですが、21時から私のほうで破壊をいたします👍
— 牙βネ申 12/17 BRAIN/BREAK 18 CALL OF THE OUTSIDE (@othermoon_vrc) December 6, 2022
CatClubさんの視界ジャックとブレイクコアで耳と目と脳を破壊する #BRAINBREAK_VRC で「極み」を目撃せよ!
高クオリティなブレイクコアや、とにかく強くて異常なものを感じたい人はぜひお越し下さい…! pic.twitter.com/s6Q1qRupiN
当日の様子はハッシュタグ #BRAINBREAK_VRC や #VRCatClub を追いかけていただくと異様な雰囲気が少しでもわかるかなと思います。
この記事は、どんな VJ にしようと思ったかとか、どういう仕組みを用意したかを殴り書きにしたものになります。
CatClub SchrBo
当日の会場は skkn (@skknyuki) さんが作られた CatClub SchrBo というワールドで、巨大な立方体の中にDJブースがあり、その立方体6面全部がスクリーンになっている場所でした。また、ワールドギミックやいわゆる視界ジャックが豊富に備えてあり、それらが発動すると一気に異様な空間が出来上がります。
さらに、映像の明るさが照明を兼ねているので、映像を落とすと何も見えなくなる・暗めの映像だとアバターがシルエットっぽくなる点もとても面白い仕様です。
演出
今回 VJ を担当させていただいた DJ の よっとさん (@yox_vrc) と Supire (@NH_supaia) さんは、静かな雰囲気から始まって不穏な空気のなかアーメンが聞こえてくるというのが個人的な印象だったため、それをそのままワールドに落とし込めたら良いなという何のひねりもない発想だけで準備を進めました。
だんだんとおかしくなっていく感じを出すため、以下のようにいくつかモードを用意して、それらを切り替えられる形にしました。
- DJ ブースの後ろだけに、普通にありそうなスクリーンサイズで映像を映す。
- 写している映像がだんだんランダムに移動しだす。
- スクリーンサイズはそのままで、複製されたスクリーンが大量に立方体全面を覆い尽くす。
- 覆い尽くしているスクリーンそれぞれもだんだんランダムに移動しだす。
- スクリーンサイズを立方体に合わせ、全体を覆う。
FROM 9:00PM JST #BRAINBREAK_VRC KILLS YOU https://t.co/8CDxAL0Qdr pic.twitter.com/eeOONqWDpG
— Yadex205 (@yadex205_vj) December 17, 2022
はじめは 1 からスタートしてドロップ前までに基本 2 ときどき 3 の状態に持っていき、ドロップでは 3, 4, 5 を切り替えるようにしました。
マッピングと実装
マッピング自体は現実のクラブのLEDマッピングと全く同じ手法で、ワールドに送った映像の部分部分が6面に割り当てられます(VRChat とかだと UVマッピングって呼ばれる方も多いです)。
今回は前述のだんだんとスクリーンがおかしくなっていく様子を作るため、Processing 4 でメインのマッピングを実装しました。なお Processing が死んだ時に備えて Resolume Arena の方でもマッピングは用意していました。
— Yadex205 (@yadex205_vj) December 16, 2022
実際のコードとは異なりますが、VDMX5 から Syphon 経由で受け取った映像を力技で切り貼りしているだけなので、概ね下記のようなコードの繰り返しです。
import codeanticode.syphon.*; PGraphics syphonCanvas; SyphonClient syphonClient; // @see https://github.com/processing/processing4/issues/544 { GLProfile.initSingleton(); } void setup() { size(1920, 1080, P3D); syphonClient = new SyphonClient(this, "VDMX5", "Main Output"); } void draw() { if (syphonClient.newFrame()) { syphonCanvas = syphonClient.getGraphics(syphonCanvas); } if (syphonCanvas != null) { clean(); /** * ここで VDMX5 から Syphon 経由で受け取った映像を切り貼り(マッピング)する。 * Resolume Arena の Advanced Output をコードで書いているイメージ。 */ beginShape(); texture(syphonCanvas); vertex(540, 0, 420, 0); vertex(1080, 0, 1500, 0); vertex(1080, 540, 1500, 1080); vertex(540, 540, 420, 1080); endShape(); } }
また、前述の 5 段階のモードを切り替えるために、まずミキサーのつまみの状態を MIDI で 0 〜 127 の数値で受け取り、「0 〜 25 なら 1 のモード、25 〜 51 なら 2 のモード」のように制御しました。つまみを回せば回すほど狂った演出になるので、VJ している時との相性がよい操作が作れました。
ソフトウェア構成
Processing で雑な書き方をしたのでメモリは 1.5 GB ほど喰われましたが、VDMX や Resolume と比較して CPU 使用率は全然高くなかったのでスペック的な不安はなかったです。
反省点
- もっとマッピングのバリエーションはあった方がよかった(狂い方が同じなので飽きてしまう)。
- いままでやってきた映像の選定やミックスに加えて、今回初めて慣れないマッピングの操作をしたので、両方の作業が疎かになってしまった。
- 眩しくないように狂うのが難しい。
- CatClub SchrBo さんのワールドギミックとの組み合わせを考えてなかった(ちゃんとワールドで実際に出ている様子を見ながら VJ できるようになりたい)。
おわりに
ブレイクコアと相性抜群のワールドでやってみたかった事ができたので個人的に満足できました。ご来場いただけた方にもっと満足していただけるようこれからも精進します。
あとマッピングですが多分 TouchDesigner 使う方が楽で早いです。