UnityでやってるVJの構成について
ちょうど長時間移動があって書く気力が湧いたのとジェネ系VJアドカレがあったので、自分がUnityでVJする時の構成を簡単に紹介しようと思いました。
今回はこちらのイベントのときの構成になります。
draw(); #3 のダイジェスト映像を公開しました。
— draw(); (@function_draw) 2023年8月13日
ご来場&ご視聴ありがとうございました!https://t.co/oUffjW51iu#function_draw pic.twitter.com/XqrAKJGiM8
Midi入出力
Midi入力はKeijiro Takahashi が公開しているRtMidi for Unityを使っています。
これを元にMidiInputとMidiOutputコンポーネントを作り、それぞれ
MidiInputはIMidiInputを持つコンポーネントに入力されたMidiの値を渡していて、
またMidiOutputは、UnityからVRChatにloopMidiを通してMidiを渡したい時と、LaunchPad miniのPadの色を変えるために使ってます(どちらもDrawのときは使ってない)
VFX Graphに関してはPropertyBinderでCCの値、EventBinderでNoteのOnOffをTriggerとして渡せるようにして使っています。
レンダリング
最新ではURP14を使いました。VFX Graph、ShaderGraphが使えるのと、今のところHDRPを使うほどの絵を作ってないことが主な理由です。いい感じにHDRPを使ってやるの考えたいですね。
PostEffect群はURPはRendererFeatureを使わないといけないので、それぞれのRenderPassを書いて実装しています。(URP12と14で書き方が変わって大変だった)
この前のDrawでは
EdegeDetection
FeedBack
SlitScanぽいもの
を作りました。前のだと他にも作ったりしていますが移行の関係と、Feedbackするときのバグの解決に時間を取られて(Bufferの色味が変わってしまって結局、白黒にして誤魔化してます)この3つだけです。
また配信のため、KlakSpoutを使ってOBSに送ってます。CustomRenderPassFeatureでUI描画前の絵をKlakSpoutで送るRenderTextureにコピーしています。
素材
主に素材はVFX Graphを基本に、 ShaderGraphで見た目を、動きの制御周りはGraphicsBufferを経由してComputeShaderとスクリプトでやったりしています。Unityだとこの3つが簡単に連携できるのでとても重宝しています。
ちなみにDrawのときの素材作るときに参照したネタはこのあたりです。
【HP更新】Moment in Composition
— SeiichiSega (@SeiichiSega) 2020年10月22日
世界で活躍されているサウンドアーティストKyokaさんと、「デザインあ」にてお馴染みの波戸場 承龍・耀次さんとのコラボレーション作品。 #MotionDesign #Houdini https://t.co/ahFUteHTZa pic.twitter.com/aNkY4zwhuh
ついでに今回のプロジェクトを公開します。整理あまりしてないので見づらいですが…
おわりに
この構成自体は3年前のGC5.0用に作ったLaunchPadからをVRChatにMidiを送るソフトから始まって、一昨年のSanrio Virtual Fes 2021、去年Channel、今年のdrawで少しずつ改良していったものです。おかげではじめから素材づくりに集中できていい感じでした。
他に、もうちょっといろいろやりたいなと思いつつネタもあるけどなかなか掘り下げられてないなという感じです。