135 lines
5.1 KiB
C#
135 lines
5.1 KiB
C#
|
using System;
|
||
|
|
||
|
namespace UnityEngine.Rendering.Universal
|
||
|
{
|
||
|
/// <summary>Light Layers.</summary>
|
||
|
[Flags]
|
||
|
public enum LightLayerEnum
|
||
|
{
|
||
|
/// <summary>The light will no affect any object.</summary>
|
||
|
Nothing = 0, // Custom name for "Nothing" option
|
||
|
/// <summary>Light Layer 0.</summary>
|
||
|
LightLayerDefault = 1 << 0,
|
||
|
/// <summary>Light Layer 1.</summary>
|
||
|
LightLayer1 = 1 << 1,
|
||
|
/// <summary>Light Layer 2.</summary>
|
||
|
LightLayer2 = 1 << 2,
|
||
|
/// <summary>Light Layer 3.</summary>
|
||
|
LightLayer3 = 1 << 3,
|
||
|
/// <summary>Light Layer 4.</summary>
|
||
|
LightLayer4 = 1 << 4,
|
||
|
/// <summary>Light Layer 5.</summary>
|
||
|
LightLayer5 = 1 << 5,
|
||
|
/// <summary>Light Layer 6.</summary>
|
||
|
LightLayer6 = 1 << 6,
|
||
|
/// <summary>Light Layer 7.</summary>
|
||
|
LightLayer7 = 1 << 7,
|
||
|
/// <summary>Everything.</summary>
|
||
|
Everything = 0xFF, // Custom name for "Everything" option
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Contains extension methods for Light class.
|
||
|
/// </summary>
|
||
|
public static class LightExtensions
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// Universal Render Pipeline exposes additional light data in a separate component.
|
||
|
/// This method returns the additional data component for the given light or create one if it doesn't exist yet.
|
||
|
/// </summary>
|
||
|
/// <param name="light"></param>
|
||
|
/// <returns>The <c>UniversalAdditionalLightData</c> for this light.</returns>
|
||
|
/// <see cref="UniversalAdditionalLightData"/>
|
||
|
public static UniversalAdditionalLightData GetUniversalAdditionalLightData(this Light light)
|
||
|
{
|
||
|
var gameObject = light.gameObject;
|
||
|
bool componentExists = gameObject.TryGetComponent<UniversalAdditionalLightData>(out var lightData);
|
||
|
if (!componentExists)
|
||
|
lightData = gameObject.AddComponent<UniversalAdditionalLightData>();
|
||
|
|
||
|
return lightData;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
[DisallowMultipleComponent]
|
||
|
[RequireComponent(typeof(Light))]
|
||
|
[URPHelpURL("universal-additional-light-data")]
|
||
|
public class UniversalAdditionalLightData : MonoBehaviour, IAdditionalData
|
||
|
{
|
||
|
// Version 0 means serialized data before the version field.
|
||
|
[SerializeField] int m_Version = 1;
|
||
|
internal int version
|
||
|
{
|
||
|
get => m_Version;
|
||
|
}
|
||
|
|
||
|
[Tooltip("Controls if light Shadow Bias parameters use pipeline settings.")]
|
||
|
[SerializeField] bool m_UsePipelineSettings = true;
|
||
|
|
||
|
public bool usePipelineSettings
|
||
|
{
|
||
|
get { return m_UsePipelineSettings; }
|
||
|
set { m_UsePipelineSettings = value; }
|
||
|
}
|
||
|
|
||
|
public static readonly int AdditionalLightsShadowResolutionTierCustom = -1;
|
||
|
public static readonly int AdditionalLightsShadowResolutionTierLow = 0;
|
||
|
public static readonly int AdditionalLightsShadowResolutionTierMedium = 1;
|
||
|
public static readonly int AdditionalLightsShadowResolutionTierHigh = 2;
|
||
|
public static readonly int AdditionalLightsShadowDefaultResolutionTier = AdditionalLightsShadowResolutionTierHigh;
|
||
|
public static readonly int AdditionalLightsShadowDefaultCustomResolution = 128;
|
||
|
public static readonly int AdditionalLightsShadowMinimumResolution = 128;
|
||
|
|
||
|
[Tooltip("Controls if light shadow resolution uses pipeline settings.")]
|
||
|
[SerializeField] int m_AdditionalLightsShadowResolutionTier = AdditionalLightsShadowDefaultResolutionTier;
|
||
|
|
||
|
public int additionalLightsShadowResolutionTier
|
||
|
{
|
||
|
get { return m_AdditionalLightsShadowResolutionTier; }
|
||
|
}
|
||
|
|
||
|
// The layer(s) this light belongs too.
|
||
|
[SerializeField] LightLayerEnum m_LightLayerMask = LightLayerEnum.LightLayerDefault;
|
||
|
|
||
|
public LightLayerEnum lightLayerMask
|
||
|
{
|
||
|
get { return m_LightLayerMask; }
|
||
|
set { m_LightLayerMask = value; }
|
||
|
}
|
||
|
|
||
|
[SerializeField] bool m_CustomShadowLayers = false;
|
||
|
|
||
|
// if enabled, shadowLayerMask use the same settings as lightLayerMask.
|
||
|
public bool customShadowLayers
|
||
|
{
|
||
|
get { return m_CustomShadowLayers; }
|
||
|
set { m_CustomShadowLayers = value; }
|
||
|
}
|
||
|
|
||
|
// The layer(s) used for shadow casting.
|
||
|
[SerializeField] LightLayerEnum m_ShadowLayerMask = LightLayerEnum.LightLayerDefault;
|
||
|
|
||
|
public LightLayerEnum shadowLayerMask
|
||
|
{
|
||
|
get { return m_ShadowLayerMask; }
|
||
|
set { m_ShadowLayerMask = value; }
|
||
|
}
|
||
|
|
||
|
[Tooltip("Controls the size of the cookie mask currently assigned to the light.")]
|
||
|
[SerializeField] Vector2 m_LightCookieSize = Vector2.one;
|
||
|
public Vector2 lightCookieSize
|
||
|
{
|
||
|
get => m_LightCookieSize;
|
||
|
set => m_LightCookieSize = value;
|
||
|
}
|
||
|
|
||
|
[Tooltip("Controls the offset of the cookie mask currently assigned to the light.")]
|
||
|
[SerializeField] Vector2 m_LightCookieOffset = Vector2.zero;
|
||
|
public Vector2 lightCookieOffset
|
||
|
{
|
||
|
get => m_LightCookieOffset;
|
||
|
set => m_LightCookieOffset = value;
|
||
|
}
|
||
|
}
|
||
|
}
|