SabaProps

Screen FX 配置と調整

Volume

GameObject > SabaProps > Screen FX > <プリセット名>で生成されるのは、Collider を外したUnity標準のCubeです。Camera がCubeの内側にある間だけ、画面全体へ効果を描画します。

  • 適用範囲はTransformの位置、回転、Scaleで決まります
  • Edge Fade (m)は境界から内側へ向かって効果が立ち上がる距離です。0にすると境界で即時に切り替わります
  • Weightは全ブロックの強さへ掛かる係数です。AnimatorやUdonから操作する場合はこの値を使用します
  • MeshはUnity標準のCubeから変更できません。Shaderが+Z面の法線とUVを使って画面を覆います

VRでは両眼の中点でVolumeの内外を判定します。鏡のCameraには描画しません。写真撮影用Cameraには描画します。

複数のVolume

Volumeが重なる場所では、それぞれの効果が順に適用されます。GrabPass版はVolumeごとに画面全体をコピーするため、常時重なる組み合わせは1つのMaterialへまとめてください。Materialのpropertyはすべてのブロックを同時に持つため、たとえば雨と暗がりを1つのMaterialで表現できます。

負荷

GrabPass版のVolumeは、Cameraが外側にあっても視錐台へ入っている間は画面のコピーを実行します。常に視界へ入る大きなVolumeを多数置く構成は避け、必要な場所だけに置くか、Udon DriverでRendererを無効化してください。Lite版は範囲外では描画面積が0になり、コピーも行いません。

距離に応じた霧

Use Scene Depthを有効にすると、Fog Density (Depth)が物体までの距離に応じた霧として作用します。Underwater、Mud、Dark、Fog、Sandstormのプリセットはこの値を設定済みですが、既定では無効です。

VRChatでは、影を落とすリアルタイムのDirectional LightがWorldにある場合などに限りCamera depthが生成されます。depthが生成されないWorldで有効にすると霧の濃さが不定になるため、無効のままFog Veil(距離によらない一様な霧)を使用してください。

効果ブロック

すべてのブロックは既定値で無効です。主となるpropertyを0より大きくすると作用します。

ブロック主なproperty内容
揺れWobble、Wobble Speed、Wobble Scale画面全体の低周波の歪み、ゆっくりした回転と拡縮
陽炎Heat Haze、Heat Haze Scale、Heat Haze Speed上昇する細かい揺らぎ
二重像Double Vision左右にずれた像の重ね合わせ
ぼけBlur、Blur Edge Only8 tapのぼけ。Blur Edge Onlyを上げると周辺だけに限定
放射ぶれRadial Blur正面へ向かうぶれ。周辺ほど強い
色収差Chromatic Aberration放射方向の色ずれ
水滴Lens Drops、Lens Drop Scale、Lens Drop Slide視界に付く水滴の屈折とハイライト。Slideを0付近にすると結露
霜Frost、Frost Color縁から中央へ広がる白い結晶と屈折
付着物Splat、Splat Color、Splat Scale、Splat Drip視界に付着して垂れる不透明な汚れ
色調Exposure (EV)、Saturation、Contrast、Tint露出、彩度、コントラスト、乗算色。Tintのalphaが強さ
霧Fog Color、Fog Veil、Fog Density (Depth)、Fog Noise一様な霧、距離に応じた霧、流れるむら
まぶしさGlare、Glare Color、Glare Direction、Glare Focus加算の白飛び。方向を指定すると、その方向を見たときに強まる
周辺減光Vignette、Vignette Color、Vignette Radius、Vignette Softness縁の色。黒以外も指定可能
心拍Pulse、Pulse Rate (Hz)周辺減光の半径と画面の拡縮を2拍1休のリズムで動かす
粒子Particles、Particle Color、Particle Size、Particle Density、Particle Velocity、Particle Stretch、Particle Sway3層の粒子。雨筋、雪、砂、火の粉、水中の浮遊物に使用
集中線Speed Lines、Speed Line Color、Speed Line Inner Radius、Speed Line Rate周辺から外へ流れる放射状の線
コースティクスCaustics、Caustics Scale水中の光の網目模様
ノイズGrain画素単位の明滅
まぶたEyelid Closure、Automatic Blink、Blink Rate (Hz)上下から閉じる黒い縁。固定値と周期動作

粒子の向き

Particle VelocityのYは落下速度、Xは横方向の流れです。落下方向はWorldの下方向を画面へ投影して決めるため、頭を傾けても雨は地面へ向かって落ちます。Yを負にすると上昇します(火の粉、泡)。Particle Stretchは進行方向へ粒子を伸ばす量で、雨筋では10以上、雪では0を使用します。

まぶしさの方向

Glare DirectionはWorld空間で光源へ向かうベクトルです。Directional Lightの向きの逆を指定すると、太陽を見上げたときに白飛びが強まります。(0, 0, 0)では向きによらず一様に作用します。

照明への追従

粒子、霧、霜、付着物、水滴のハイライトは、VolumeのLight Probeと主Directional Lightの明るさに追従します。Lighting Responseを0にすると照明を無視して指定色のまま描画します。暗いWorldで粒子や霧が発光して見える場合は1へ近づけてください。

実行時の操作

scriptを使わない方法

  • Volumeへの出入りだけで足りる場合、追加の設定は不要です
  • 切り替えが必要な場合は、VolumeのGameObjectまたはRendererを有効・無効にします
  • 段階的な変化が必要な場合は、AnimatorでMaterialの_Weightを操作します

Udon Driver

Package ManagerのSamplesからUdon Driverをimportすると、ScreenFxDriverが追加されます。VRChat Worlds SDKが必要です。

操作パネル付き Scene とコピー用 Prefab も含まれます。画像、導入手順、他の UdonSharp から呼び出すコード例はUdon Demo の導入と再利用を参照してください。

field内容
Target操作するScreen FX VolumeのRenderer
Follow Local PlayerVolumeを利用者の頭へ追従させ、場所によらず適用する
Target Weight開始時のWeightの目標値
Fade SecondsWeightが0から1へ変化する秒数
Activate On TriggerDriverのTrigger Colliderへ利用者が入っている間だけ適用する
Speed Linked移動速度がSpeed MinimumからSpeed Maximumへ上がるにつれてWeightを上げる
Presets / Lite Presets切替用 Material の配列。空の場合は Target の Material を使用
Preset Names / Preset Index表示名と選択するプリセットのインデックス
Use LiteLite 側の Material 配列を使用
Auto Off SecondsON から自動停止までの秒数。0 は無制限、デモは 20 秒

公開イベントは_FadeIn、_FadeOut、_Toggle、_StopImmediately、_NextPreset、_PreviousPreset、_ResetPreset、_ToggleLiteです。SabaProps TabletのCustomEvent項目や他のUdonから呼び出せます。Weightが0の間はRendererを無効化するため、GrabPass版でも待機中の画面コピーは発生しません。

UdonSharp からは SelectPreset(int)、SetWeight(float)、SetFloat(string, float)、GetFloat(string)、GetPresetName() も使用できます。Driver ごとに実行時 Material を生成し、元の Material アセットと他の Driver を変更しません。

Speedプリセットを移動速度へ連動させる場合は、Follow Local PlayerとSpeed Linkedを有効にし、Target Weightを1にします。

状態は利用者ごとで、同期しません。

制約

  • 画面に固定された模様は、VRでは無限遠に見えます。粒子だけは層ごとに1.5 m、2.6 m、4.4 mの視差を持ちます
  • 粒子と水滴は画面上の模様であり、World内の屋根や壁で遮られません。屋内ではVolumeを分けてください
  • GrabPass版は描画順がOverlayのため、同じOverlayで描画する他のShaderとの前後は保証されません
  • Blurを大きくすると、8 tapを画素ごとに回転させるためのざらつきが見えます
  • 露出の時間的な順応(暗所へ入った直後だけ暗い等)は、前frameの状態を持たないため表現できません。WeightをAnimatorまたはUdonで時間変化させてください