ShaderLVExampleを通して改造VRCLVを知る
VRC Light Volumesの実装についてのほぼ続き。
shaderをVRCLVに対応させるには、VRCLVが指定しているライティングに必要な変数や関数を使うことでできる。shader視点ではVRCLVに必要な変数が設定されてさえいればなんでも良い。
つまり、VRCLV(具体的にはVRCLVのLightVolumeManager)の代わりにVRCLVで使われている変数を設定するUdonを書けば改造VRCLVができる。その実装例がphi16氏のShaderLVExample。
https://github.com/phi16/VRC_storage/tree/master/ShaderLVExample
ShaderLVExampleの実装について
詳しくは自分でunitypackageをimportして動かしてみると分かるがメモ。内容物は以下の構成↓
LVUpdate
Volume
VRCLVに渡すライト情報が記録される3DのCustom Render Texture
ShaderLVUpdate
VRCLVのライティングに必要な変数の設定とCustom Render Textureの更新命令を記述している
VRCLVでいうLightVolumeManagerに近い
VolumeUpdateマテリアル/シェーダ
CustomRenderTextureの更新用のシェーダ
虹色を返すsampleVolume()をincludeして使っている
Test
Exampleシーン
Testマテリアル/シェーダ
VRCLVからわたってきた情報でライティングされる、見た目確認用のマテリアル。シーン上のすべてのオブジェクトに適用されている。
自分の環境ではVRCLVのアプデでLightVolumes.cgincの場所が変わったのか、以下のようにしないと動かなかった
code:Test.shader
#include "UnityCG.cginc"
// #include "Assets/VRC Light Volumes/Shaders/LightVolumes.cginc"
#include "Packages/red.sim.lightvolumes/Shaders/LightVolumes.cginc" // 追加
面白いのは、本家VRCLVではベイクしたらそれっきりであった静的テクスチャを、3DCRTにして毎フレーム更新している点。これにより、動的なVRCLVによるライティングが可能になっている。動き回るパーティクルと組み合わせたりしたら綺麗そう。
See also: https://note.com/huwa1234/n/n704d5c5752a1?sub_rt=share_pb#f3877255-fd86-43ea-87bd-d2e9a6abbaf0