You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
134 lines
5.1 KiB
134 lines
5.1 KiB
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; |
|
} |
|
} |
|
}
|
|
|