Light Shaft Projector v2.3.0

1. 概要

本アセットはVRChatのワールド作成で利用することを想定した、 モデル・シェーダー・U#スクリプト を提供するものです。

サンプルワールド(v1.0.5): https://vrchat.com/home/world/wrld_845135e5-3e62-4f81-a9cb-4786cc5e3dfd

サンプルワールド(v2.3.0): https://vrchat.com/home/world/wrld_1843fa75-5d87-447d-a08c-87d630e7bec7

Unity2022対応。 VizVid, iwaSync3, KineL式(りら式)VideoPlayer, YamaPlayer, AVPro Video Player(TopazChat Player等)のスクリーンとして用いることができます。

投影対称物のマテリアルによっては正常に描画されない場合もございます。ご注意ください。

2. 動作確認環境

PCでのみ動作確認しています。

3. 導入方法

3.1. 依存アセットのインポート

VideoPlayer(iwaSync3, Kinel式, VizVid)のスクリーンとして使用する場合は、先にVideoPlayerのアセットをインポートしてください。

3.2. LightShaftProjectorパッケージのインポート

LightShaftProjector.unitypackageをインポートしてください。

使用しないVideoPlayer向けのフォルダは、インポート時にチェックを外すことをおすすめします。

  • iwaSync3のスクリーンとして用いない場合は Assets/LightShaftProjector/for_iwaSync
  • Kinel式のスクリーンとして用いない場合は Assets/LightShaftProjector/for_Kinel
  • VizVidのスクリーンとして用いない場合は Assets/LightShaftProjector/for_VizVid
  • YamaPlayerのスクリーンとして用いない場合は Assets/LightShaftProjector/for_YamaPlayer

チェックを外し忘れてもコンパイルエラーにはなりません。ただし各フォルダのPrefabは 対応するVideoPlayerのPrefabを元にしているため、そのVideoPlayerが導入されていないと 該当のPrefabは使用できない状態になります。

3.3. Prefabの設置

3.3.1. VideoPlayerへの対応が不要な場合

Assets/LightShaftProjector/LightShaftProjector.prefab をHierarchyに設置してください。

3.3.2. iwaSync3のスクリーンとして用いる場合

Assets/LightShaftProjector/for_iwaSync/LightShaftProjector_iwaSyncScreen.prefab をHierarchyに設置してください。

LightShaftProjector_iwaSyncScreen > Projector > ProjectionGimmick > textureUpdate にアタッチされているU#スクリプト(ProjectorVideoScreen_iwaSync)のCoreにiwaSync3のCoreを設定してください。

3.3.3. Kinel式のスクリーンとして用いる場合

Assets/LightShaftProjector/for_Kinel/LightShaftProjector_KinelScreen.prefab をHierarchyに設置してください。

LightShaftProjector_iwaSyncScreen > Projector > ProjectionGimmick > textureUpdate にアタッチされているU#スクリプト(ProjectorVideoScreen_Kinel)のVideo PlayerにKinelVideoPlayerのKineLVP Systemを設定してください。

3.3.4. AVPro Video Playerのスクリーンとして用いる場合(TopazChat Player等)

  1. Assets/LightShaftProjector/for_AVProVideoPlayer/LightShaftProjector_AVProVideoScreen.prefab をHierarchyに設置してください。

  2. LightShaftProjector_AVProVIdeoScreen > Projector > ProjectionGimmik内にある、 Projection > ProjectionおよびLightShaft > LightShaftTextureにアタッチされているVRC AVPro Video ScreenのVideoPlayerに、VRC AVPro Video Playerがアタッチされているオブジェクト(VideoPlayer)を設定してください。

  3. LightShaftProjector_AVProVIdeoScreen > Projector > ProjectionGimmik内にある、Projection > ProjectionおよびLightShaft > LightShaftのマテリアルのIs AVPro Videoにチェックを入れてください。
    AVPro Videoモードの場合、テクスチャはガンマ補正されます。設定するテクスチャの設定のsRGBのチェックを外してください。

3.3.5. VizVidのPlayerとして用いる場合

3.3.5.1. VizVid用セットアップ済みPrefabを用いる場合

下記のいずれかをHierarchyに設置してください。VizVidとの連携設定は済んでいます。

  • Assets/LightShaftProjector/for_VizVid/VVMW (Separated Controls) with LightShaftProjector.prefab
  • Assets/LightShaftProjector/for_VizVid/VVMW (On-Screen Controls) with LightShaftProjector.prefab
3.3.5.2. 手動でVizVid用にセットアップする場合
  1. GameObject > VizVid > Video Player (Separated Controls)を追加。

  2. Assets/LightShaftProjector//LightShaftProjector.prefabをVVMW (Separated Controls)の子として配置。

  3. VVMW (Separated Controls)/Default Screenは非表示に変更。

  4. VVMW (Separated Controls)のInspectorのCoreコンポーネントにて

    1. Video Screen Target 2としてProjectionを追加
    2. Video Screen Target 3としてLightShaftTextureを追加。
    3. Video Screen Target 2およびVideo Screen Target 3のModeをShared Materialに変更。

3.3.6. YamaPlayerのスクリーンとして用いる場合

3.3.6.1. YamaPlayer用セットアップ済みPrefabを用いる場合

Assets/LightShaftProjector/for_YamaPlayer/YamaPlayer with LightShaftProjector.prefabをHierarchyに設置してください。YamaPlayerとの連携設定は済んでいます。

3.3.6.2. 手動でYamaPlayer用にセットアップする場合
  1. YamaPlayerをHierarchyに設置。
  2. Assets/LightShaftProjector/LightShaftProjector.prefabを配置。
  3. YamaPlayerのInspectorのScreensに、下記のマテリアルを追加。Texture Propertyはいずれも_MainTex。
    • Assets/LightShaftProjector/MaterialsSet1/ProjectionWithDepth.mat
    • Assets/LightShaftProjector/MaterialsSet1/LightShaftTexture_Step1.mat

ScreensにはGameObjectやRendererではなくマテリアルを指定してください。 Rendererとして登録した場合はMaterialPropertyBlockが使用されますが、投影像はProjectorコンポーネント、 光の筋はCustomRenderTextureがマテリアルを直接参照するため、投影に反映されません。

なおYamaPlayerはAVProの上下反転とガンマ補正を内部で処理してから映像を渡すため、 マテリアルのIs AVPro Videoはオフのままにしてください。

3.4. _CameraDepthTextureの使用有無に対する設定

3.4.1. _CameraDepthTextureを使用する場合

  1. LightShaftマテリアルのUseCameraDepthにチェックを入れて下さい。
  2. リファレンスカメラ(Main Camera)のDepthTextureModeを設定する必要があります。
    VRC Scene DescriptorのReferece CameraにMain Cameraが設定されていることを確認してください。
  3. Inspectorからはそのまま設定できないため、Assets/LightShaftProjector/Scripts/DepthTextureMode.csをMain Cameraにアタッチし、ModeをDepthに変更してください。
  4. Realtimeかつシャドウタイプが影無し以外なDirectional Lightが存在することを確認。
  • ※_CameraDepthTextureはRealtimeかつ影ありのDirectionalLightが存在しないと生成されません。
  • ※影を受けるマテリアルでないと_CameraDepthTextureに描き込まれないため正常に動作しません。
  • ※DirectionalLightのCulling Maskで対象としていないオブジェクトでも_CameraDepthTextureには反映されます。

3.4.2. _CameraDepthTextureを使用しない場合

LightShaftマテリアルを次のように設定する必要があります。

Property Value
UseCameraDepth False
Cull Off
ZTest LessEqual

前後関係を判断できず、一部の描写に制限がかかってしまいますが、 そこまで違和感なく表現できるかと思います。

4. その他の設定について

4.1. 投影する画像・映像の変更方法

ProjectionとLightShaftのマテリアルのTextureを指定してください。 (iwaSync3およびKinelとの連携については、U#からTextureの設定が行われます。)

4.2. プロジェクターを複数設置する場合

プロジェクターからのDepthをRenderTextureを使用して取得しているため、マテリアルを分けた上でことなるRenderTextureを設定する必要があります。

4.3. FOV(Field Of View)を変更する場合

ProjectionGimmickのProjector SettingsでFOVを変更し、設定を反映を押してください。 Projector・DepthCamera・関連するマテリアルへ一括で反映されます。

光の筋のメッシュもFOVに合わせる必要があります。同じインスペクタの光の筋のメッシュを生成から、 現在の設定に合った形状のメッシュを生成して割り当てられます。

設定とメッシュが食い違っている場合は、インスペクタに警告が表示されます。

4.4. Tilt補正

プロジェクターの投影面を回転させることにより、斜めから投影しても正しい形で投影することが可能です。

  1. LightShaftProjectorのPrefabのルートを投影面に正対するように回転させる。
  2. ProjectionGimmickを投影したい角度に調整
  3. ProjectionGimmickのProjector Settingsで設定を反映を押す。

Tilt補正の値はProjectionGimmickの回転から求められるため、マテリアルへの手入力は不要です。

投影面の傾きがProjectionGimmickの回転と一致しない場合は、Use Transform Rotation As Tiltを オフにするとScreen Tiltを直接指定できます。壁自体が斜めである場合や、微調整を行いたい場合に ご利用ください。

5. トラブルシューティング

5.1. _CameraDepthTextureを生成出来ているかチェックしたい。

_CameraDepthTextureの内容を描画するシェーダーを作成しました。

Assets/LightShaftProjector/Debug/CameraDepthTextureTest/CameraDepthTextureTestPlane.prefabをHierarchyに配置してください。

プレーンを置く前

プレーンを置いた後

正常に_CameraDepthTextureが生成されていると、このように深度が表示されます。

6. 利用規約

本データはVN3ライセンスにて公開しております。 規約は下記のリンクをご確認ください。

【日本語】
https://drive.google.com/file/d/1fZ-5i4ItK_Tpkdhhth_YFttbmicsT8yC/view?usp=sharing

【English】
https://drive.google.com/file/d/1AaNaz9FnGFHD2i7_KNv_PmkcEFN4dnSU/view?usp=sharing

7. 更新履歴

2026/9/16 v2.3.0

  • VRCSDK 3.10.5 に対応。
  • VizVid v1.8.0 に対応。
  • Vistanz’s Foundation Package for VRChat Worlds v0.0.67 に対応。
  • Kinel式 v3.4.3 に対応。
  • Lazy Switch v0.9.5 に対応。
  • YamaPlayerのスクリーンとして使用できるようにした。セットアップ済みPrefabを for_YamaPlayerに追加。
  • VizVid対応のPrefabをVVMW v1.8.0の構成に合わせて作り直し。既存のシーンに配置済みの場合も、 Prefabの参照は維持されるためそのまま使用できます。
  • 投影パラメータをまとめて設定するProjector Settingsを追加。FOVやアスペクト比、Tilt補正を Projector・DepthCamera・各マテリアルへ一括で反映できるようにしました。設定が食い違っている場合は インスペクタに警告を表示します。Tilt補正はProjectionGimmickの回転から自動で求めるほか、 直接指定することもできます。
  • 光の筋のメッシュをFOVに合わせて生成する機能を追加。従来は用意済みのFOV15°と30°のモデルから 選ぶ必要がありましたが、任意のFOVに対応できるようになりました。
  • 光の筋が視界に入っていない間、深度取得用カメラを停止して負荷を軽減。
  • 導入していないVideoPlayer向けのフォルダをインポートしても、コンパイルエラーにならないようにしました。
  • NO_SIGNAL画像からバージョン表記を削除。バージョンは Assets/LightShaftProjector/version.txt またはフォルダ内のREADMEでご確認ください。
  • VRで、_CameraDepthTextureを用いた遮蔽が正しく働かない不具合を修正。あわせてシェーダーをSingle Pass Instancedに対応させました。
  • VizVidのスクリーンで、AVProの映像が上下反転する不具合を修正。
  • iwaSync3のスクリーンで、iwaSync3 v3.7.2以降にAVProの映像の横幅が縮む不具合を修正。
  • Kinel式のスクリーンで、AVPro(Stream)モードのときにライトシャフト側の映像が上下反転したままになる不具合を修正。
  • iwaSync3のスクリーンで、マテリアルの更新を毎フレームから映像が切り替わったときのみに変更し、処理負荷を軽減。

2025/11/27 v2.2.0

  • VRCSDK 3.10.0 に対応。
  • VizVid v1.4.12 に対応。
  • Vistanz’s Foundation Package for VRChat Worlds v0.0.47 に対応。
  • iwaSync v3.7.2 での動作を確認。

2024/6/21 v2.1.1

  • LightShaftProjector_AVProVideoScreen.prefabのUse Shared Materialのチェックが外れていたので修正。
  • Directional Lightの影条件とAVPro Video Playerで使用する際の設定部のマニュアルを更新。
  • Unity 2022.3.22f1に更新。
  • VRCSDK 3.6.1での動作を確認。
  • VizVid v1.0.41での動作を確認。
  • iwaSync v3.6.3での動作を確認。

2024/3/13 v2.1.0

  • Unity 2022.3.6f1に更新
  • VizVid v1.0.28のサポートを追加。
  • Kinel式をv2.5.5対応に更新。
  • iwaSync v3.6.0での動作を確認。

2023/7/4 v2.0.0

  • リファクタリング
  • 影の描画品質を向上
  • 処理負荷を軽減
  • カメラと鏡に映るようにレイヤーを変更
  • プロジェクターのモデルを更新
  • テクスチャの設定を更新
  • フォルダ構成を整理
  • AVPro Video Screenとしての動作を確認

※互換性の無い更新が多く含まれます。
プロジェクトのバックアップを取った上で、既存のLight Shaft Projectorのフォルダを削除してからインポートしてください。

2023/6/21 v1.2.0

  • UdonSharp v1.1.8での動作を確認。
  • iwaSync v3.5.5での動作を確認。
  • Kinel Video Player v2.4.3_U_1.xに対応。

2023/3/11 v.1.1.1

  • _CameraDepthTextureが生成されているか確認するシェーダーを追加。

2022/11/27 v1.1.0

  • Kinel式 VideoPlayerのスクリーンとして使用するためのスクリプトを追加。

2022/11/24 v1.0.9

  • idle画像を変更。
  • iwaSync用のUdonスクリプトをVCCのU#1.0に移行。
    VCCに移行していないプロジェクトではiwaSyncの画面として動作しなくなります。
    VCCに移行する際はiwaSyncも更新が必要となりますのでご注意ください。

2022/8/13 v1.0.8

  • Projectorの光が当たらない場所にProjectionされる場合があった不具合を修正。

2022/8/12 v1.0.7

  • iwaSync3 U#1.0版に対応したpackageを追加。

2022/6/4 v1.0.6

  • アスペクト比が異なるテクスチャを入力しても正しく表示するように変更。

2022/3/25 v1.0.5

  • LightShaftの描画品質向上
  • マテリアルのCull設定等をプロパティに追加。
  • iwaSync3との連携コンポーネントを1つに集約

2022/1/16 v1.0.4

  • iwaSyncでLiveを再生した際に上下反転していた不具合を修正。

2021/11/7 v1.0.3

  • シェーダーをまとめてシンプルに(CameraDepthTextureで分けていたシェーダーはマテリアル設定で切り替えるように変更しました。)
  • 最低限必要なデータに絞ってファイル構成をシンプルに

2021/9/6 v1.0.2

  • 投影角度補正機能を追加。
  • マテリアルのフォルダを整理。

2021/9/3 v1.0.1

  • LightShaftの距離減衰の計算を修正。
  • Boothで販売開始。

2021/9/3 v1.0.0

  • 販売前テスト

8. その他

製作者 : takec

Twitter : @takec_vrc

販売サイト : https://takec.booth.pm/