⑳ 【Unity/SRP】バーチャルライブ ~ 内製エンジン開発からUnityへのスキル変換検証
https://www.youtube.com/watch?v=5hYet9bUZdo
ソースコード
https://github.com/HaruoOgawa/Uni-VirtualLive-01
説明
詳細
Unityベースのバーチャルライブです。内製エンジン開発のスキルをUnityにどれぐらい変換できるかの検証で作りました。既存のURPレンダリングパイプラインを使わずにSRPをフルスクラッチで書き、パイプラインを構築しています。また、外部パッケージを一切使わずに他の機能も全て自前実装しています(PMX, DMX, NDIなど)
同様のことを自作エンジンでも対応
動作確認方法
以下をダウンロードし実行
ドライブを非公開にしました。実機でご覧になられたい方はお声掛けください。
使用ツール
Unity 6(URP)
SRPでレンダーパイプラインをフルスクラッチで実装
Visual Studio 2022
NDIをCppでビルドしたdllを作るのに使用
Touch Designer
DMXによるライト演出作成やNDI映像の送信
使用言語
C#
C++
ShaderLab
機能一覧
SRPフルスクラッチによるレンダリングパイプライン構築
デファードレンダリング、フォアグラウンドレンダリングの描画パスがあり、その後にポストプロセスをRenderFeature風の設計で自由に差し込めるような実装
https://github.com/HaruoOgawa/Uni-VirtualLive-01/blob/master/Assets/SRP/Runtime/Render/CCustomRenderer.cs
https://github.com/HaruoOgawa/Uni-VirtualLive-01/tree/master/Assets/SRP/Runtime/Render
平面反射
カスタムポストプロセス(FXAA, Bloom)
https://github.com/HaruoOgawa/Uni-VirtualLive-01/blob/master/Assets/SRP/Runtime/PostProcess/CPostProcess.cs
シャドウマッピング
バイナリ解析機能を実装してMMDのPMX・VMDのインポーターに対応
PMXやVMDをプロジェクトビューにドラッグアンドドロップするだけでインポートが走ります
PMXImporter
https://github.com/HaruoOgawa/Uni-VirtualLive-01/blob/master/Assets/MMDLib/PMX/CPMXImporter.cs
VMDImporter
https://github.com/HaruoOgawa/Uni-VirtualLive-01/tree/master/Assets/MMDLib/VMD
https://scrapbox.io/files/6958b0922c32ff26b37a666f.mp4
エディタ拡張でVMDベースをアニメーションクリップを各PMXで再生できるようにするためのリターゲット機能
VMDImporterでインポートし生成されたUnity AnimationClip
https://github.com/HaruoOgawa/Uni-VirtualLive-01/blob/master/Assets/MMDLib/Editor/CVMDRetarget.cs
https://scrapbox.io/files/6958b1c008603489e47fed32.mp4
PMXのCCDIK
https://github.com/HaruoOgawa/Uni-VirtualLive-01/blob/master/Assets/MMDLib/Runtime/CIKSolver.cs
VATとGPUインスタンシングによる観客アニメーション
https://github.com/HaruoOgawa/Uni-VirtualLive-01/blob/master/Assets/LiveSystem/GPUAudience/GPUAudience.shader
アニメーションクリップからVATのテクスチャを生成するエディタ拡張
https://github.com/HaruoOgawa/Uni-VirtualLive-01/blob/master/Assets/LiveSystem/GPUAudience/VATGenWindow.cs
https://scrapbox.io/files/6958b3a9364e9140721aee9a.mp4
Goboライト
UDPでDMXのバイナリを受信し、それをパースしてUnity上の各ライトデバイスを操作する機能
https://github.com/HaruoOgawa/Uni-VirtualLive-01/blob/master/Assets/Network/UDPSocket.cs#L90
CppでNDI SDKを外部から扱うためのdllライブラリを実装し、それをUnityで読み込み、映像を受信
Cpp実装
https://github.com/HaruoOgawa/Uni-VirtualLive-01/tree/master/Haru86_NDILib/Src
Unity実装
https://github.com/HaruoOgawa/Uni-VirtualLive-01/blob/master/Assets/Network/NDI/CNDIReciever.cs