using System; using System.Collections.Generic; using Unity.Collections; using UnityEngine.Scripting.APIUpdating; namespace UnityEngine.Rendering.Universal { [MovedFrom("UnityEngine.Rendering.LWRP")] public enum MixedLightingSetup { None, ShadowMask, Subtractive, }; [MovedFrom("UnityEngine.Rendering.LWRP")] public struct RenderingData { public CullingResults cullResults; public CameraData cameraData; public LightData lightData; public ShadowData shadowData; public PostProcessingData postProcessingData; public bool supportsDynamicBatching; public PerObjectData perObjectData; public bool killAlphaInFinalBlit; } [MovedFrom("UnityEngine.Rendering.LWRP")] public struct LightData { public int mainLightIndex; public int additionalLightsCount; public int maxPerObjectAdditionalLightsCount; public NativeArray visibleLights; public bool shadeAdditionalLightsPerVertex; public bool supportsMixedLighting; } [MovedFrom("UnityEngine.Rendering.LWRP")] public struct CameraData { public Camera camera; public RenderTextureDescriptor cameraTargetDescriptor; public float renderScale; public bool isSceneViewCamera; public bool isDefaultViewport; public bool isHdrEnabled; public bool requiresDepthTexture; public bool requiresOpaqueTexture; public SortingCriteria defaultOpaqueSortFlags; public bool isStereoEnabled; public float maxShadowDistance; public bool postProcessEnabled; #if POST_PROCESSING_STACK_2_0_0_OR_NEWER [Obsolete("The use of the Post-processing Stack V2 is deprecated in the Universal Render Pipeline. Use the builtin post-processing effects instead.")] public UnityEngine.Rendering.PostProcessing.PostProcessLayer postProcessLayer; #endif public IEnumerator> captureActions; public LayerMask volumeLayerMask; public Transform volumeTrigger; public bool isStopNaNEnabled; public bool isDitheringEnabled; public AntialiasingMode antialiasing; public AntialiasingQuality antialiasingQuality; } [MovedFrom("UnityEngine.Rendering.LWRP")] public struct ShadowData { public bool supportsMainLightShadows; public bool requiresScreenSpaceShadowResolve; public int mainLightShadowmapWidth; public int mainLightShadowmapHeight; public int mainLightShadowCascadesCount; public Vector3 mainLightShadowCascadesSplit; public bool supportsAdditionalLightShadows; public int additionalLightsShadowmapWidth; public int additionalLightsShadowmapHeight; public bool supportsSoftShadows; public int shadowmapDepthBufferBits; public List bias; } public struct PostProcessingData { public ColorGradingMode gradingMode; public int lutSize; } public static class ShaderKeywordStrings { public static readonly string MainLightShadows = "_MAIN_LIGHT_SHADOWS"; public static readonly string MainLightShadowCascades = "_MAIN_LIGHT_SHADOWS_CASCADE"; public static readonly string AdditionalLightsVertex = "_ADDITIONAL_LIGHTS_VERTEX"; public static readonly string AdditionalLightsPixel = "_ADDITIONAL_LIGHTS"; public static readonly string AdditionalLightShadows = "_ADDITIONAL_LIGHT_SHADOWS"; public static readonly string SoftShadows = "_SHADOWS_SOFT"; public static readonly string MixedLightingSubtractive = "_MIXED_LIGHTING_SUBTRACTIVE"; public static readonly string DepthNoMsaa = "_DEPTH_NO_MSAA"; public static readonly string DepthMsaa2 = "_DEPTH_MSAA_2"; public static readonly string DepthMsaa4 = "_DEPTH_MSAA_4"; public static readonly string LinearToSRGBConversion = "_LINEAR_TO_SRGB_CONVERSION"; public static readonly string KillAlpha = "_KILL_ALPHA"; public static readonly string SmaaLow = "_SMAA_PRESET_LOW"; public static readonly string SmaaMedium = "_SMAA_PRESET_MEDIUM"; public static readonly string SmaaHigh = "_SMAA_PRESET_HIGH"; public static readonly string PaniniGeneric = "_GENERIC"; public static readonly string PaniniUnitDistance = "_UNIT_DISTANCE"; public static readonly string BloomLQ = "_BLOOM_LQ"; public static readonly string BloomHQ = "_BLOOM_HQ"; public static readonly string BloomLQDirt = "_BLOOM_LQ_DIRT"; public static readonly string BloomHQDirt = "_BLOOM_HQ_DIRT"; public static readonly string UseRGBM = "_USE_RGBM"; public static readonly string Distortion = "_DISTORTION"; public static readonly string ChromaticAberration = "_CHROMATIC_ABERRATION"; public static readonly string HDRGrading = "_HDR_GRADING"; public static readonly string TonemapACES = "_TONEMAP_ACES"; public static readonly string TonemapNeutral = "_TONEMAP_NEUTRAL"; public static readonly string FilmGrain = "_FILM_GRAIN"; public static readonly string Fxaa = "_FXAA"; public static readonly string Dithering = "_DITHERING"; public static readonly string HighQualitySampling = "_HIGH_QUALITY_SAMPLING"; } public sealed partial class UniversalRenderPipeline { static List m_ShadowBiasData = new List(); public static bool IsStereoEnabled(Camera camera) { if (camera == null) throw new ArgumentNullException("camera"); bool isGameCamera = camera.cameraType == CameraType.Game || camera.cameraType == CameraType.VR; return XRGraphics.enabled && isGameCamera && (camera.stereoTargetEye == StereoTargetEyeMask.Both); } void SortCameras(Camera[] cameras) { Array.Sort(cameras, (lhs, rhs) => (int)(lhs.depth - rhs.depth)); } static RenderTextureDescriptor CreateRenderTextureDescriptor(Camera camera, float renderScale, bool isStereoEnabled, bool isHdrEnabled, int msaaSamples, bool needsAlpha) { RenderTextureDescriptor desc; RenderTextureFormat renderTextureFormatDefault = RenderTextureFormat.Default; if (isStereoEnabled) { desc = XRGraphics.eyeTextureDesc; renderTextureFormatDefault = desc.colorFormat; } else { desc = new RenderTextureDescriptor(camera.pixelWidth, camera.pixelHeight); desc.width = (int)((float)desc.width * renderScale); desc.height = (int)((float)desc.height * renderScale); } bool use32BitHDR = !needsAlpha && RenderingUtils.SupportsRenderTextureFormat(RenderTextureFormat.RGB111110Float); RenderTextureFormat hdrFormat = (use32BitHDR) ? RenderTextureFormat.RGB111110Float : RenderTextureFormat.DefaultHDR; if (camera.targetTexture != null) { desc.colorFormat = camera.targetTexture.descriptor.colorFormat; desc.depthBufferBits = camera.targetTexture.descriptor.depthBufferBits; desc.msaaSamples = camera.targetTexture.descriptor.msaaSamples; desc.sRGB = camera.targetTexture.descriptor.sRGB; } else { desc.colorFormat = isHdrEnabled ? hdrFormat : renderTextureFormatDefault; desc.depthBufferBits = 32; desc.msaaSamples = msaaSamples; desc.sRGB = (QualitySettings.activeColorSpace == ColorSpace.Linear); } desc.enableRandomWrite = false; desc.bindMS = false; desc.useDynamicScale = camera.allowDynamicResolution; return desc; } } }