Files
MoonlightVRC/Scripts/LightdataStorage.cs
DeMuenu 868e713336 Add shadowcaster support to lighting and shaders
Introduces shadowcaster support by adding shadow map index fields to light data, updating PlayerPositionsToShader and LightdataStorage to handle shadow map indices, and extending the shader and its includes to sample shadowcaster planes. Adds ShadowcasterUpdater script and editor preview for updating world-to-local matrices, and updates relevant arrays and property handling throughout the codebase. Also adds a sample plane mesh for shadowcasting.
2025-09-29 23:14:38 +02:00

53 lines
1.4 KiB
C#

using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;
public enum LightType { Sphere, Spot }
[UdonBehaviourSyncMode(BehaviourSyncMode.None)]
public class LightdataStorage : UdonSharpBehaviour
{
[Header("Type")]
[Tooltip("Select the logical light type for this source.")]
public LightType lightType = LightType.Sphere;
[Header("Light Settings")]
public float range = 5f;
[ColorUsage(true, true)] // (showAlpha: true, HDR: true)
public Color color = Color.white;
[Tooltip("Intensity multiplier applied to the color (kept separate so you can tweak brightness without changing hue).")]
public float intensity = 1f;
[Header("Spotlight Shape")]
[Tooltip("0 = omni (no cone)")]
public float spotAngleDeg = 0f;
[Header("Shadow Settings")]
[Tooltip("0 = no shadows, 1-4 = shadow map index")]
public float shadowMapIndex = 0f; // 0 = no shadows, 1-4 = shadow map index
// Convert to a Vector4 for your shader upload
public Vector4 GetFinalColor()
{
return new Vector4(color.r * intensity, color.g * intensity, color.b * intensity, color.a);
}
public float GetCosHalfAngle()
{
if (spotAngleDeg <= 0f) return 0f;
return Mathf.Cos(Mathf.Deg2Rad * (spotAngleDeg * 0.5f));
}
public int GetTypeId() => (int)lightType; // Omni=0, Spot=1, Directional=2
}