123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655 |
- using System;
- using System.Collections.Generic;
- using UnityEngine.Experimental.Rendering;
-
- namespace UnityEngine.Rendering.Universal
- {
- /// <summary>
- /// Class that holds settings related to camera.
- /// </summary>
- public class UniversalCameraData : ContextItem
- {
- // Internal camera data as we are not yet sure how to expose View in stereo context.
- // We might change this API soon.
- Matrix4x4 m_ViewMatrix;
- Matrix4x4 m_ProjectionMatrix;
- Matrix4x4 m_JitterMatrix;
-
- internal void SetViewAndProjectionMatrix(Matrix4x4 viewMatrix, Matrix4x4 projectionMatrix)
- {
- m_ViewMatrix = viewMatrix;
- m_ProjectionMatrix = projectionMatrix;
- m_JitterMatrix = Matrix4x4.identity;
- }
-
- internal void SetViewProjectionAndJitterMatrix(Matrix4x4 viewMatrix, Matrix4x4 projectionMatrix, Matrix4x4 jitterMatrix)
- {
- m_ViewMatrix = viewMatrix;
- m_ProjectionMatrix = projectionMatrix;
- m_JitterMatrix = jitterMatrix;
- }
-
- #if ENABLE_VR && ENABLE_XR_MODULE
- private bool m_CachedRenderIntoTextureXR;
- private bool m_InitBuiltinXRConstants;
- #endif
- // Helper function to populate builtin stereo matricies as well as URP stereo matricies
- internal void PushBuiltinShaderConstantsXR(RasterCommandBuffer cmd, bool renderIntoTexture)
- {
- #if ENABLE_VR && ENABLE_XR_MODULE
- // Multipass always needs update to prevent wrong view projection matrix set by other passes
- bool needsUpdate = !m_InitBuiltinXRConstants || m_CachedRenderIntoTextureXR != renderIntoTexture || !xr.singlePassEnabled;
- if (needsUpdate && xr.enabled )
- {
- var projection0 = GetProjectionMatrix();
- var view0 = GetViewMatrix();
- cmd.SetViewProjectionMatrices(view0, projection0);
- if (xr.singlePassEnabled)
- {
- var projection1 = GetProjectionMatrix(1);
- var view1 = GetViewMatrix(1);
- XRBuiltinShaderConstants.UpdateBuiltinShaderConstants(view0, projection0, renderIntoTexture, 0);
- XRBuiltinShaderConstants.UpdateBuiltinShaderConstants(view1, projection1, renderIntoTexture, 1);
- XRBuiltinShaderConstants.SetBuiltinShaderConstants(cmd);
- }
- else
- {
- // Update multipass worldSpace camera pos
- Vector3 worldSpaceCameraPos = Matrix4x4.Inverse(GetViewMatrix(0)).GetColumn(3);
- cmd.SetGlobalVector(ShaderPropertyId.worldSpaceCameraPos, worldSpaceCameraPos);
- }
- m_CachedRenderIntoTextureXR = renderIntoTexture;
- m_InitBuiltinXRConstants = true;
- }
- #endif
- }
-
- /// <summary>
- /// Returns the camera view matrix.
- /// </summary>
- /// <param name="viewIndex"> View index in case of stereo rendering. By default <c>viewIndex</c> is set to 0. </param>
- /// <returns> The camera view matrix. </returns>
- public Matrix4x4 GetViewMatrix(int viewIndex = 0)
- {
- #if ENABLE_VR && ENABLE_XR_MODULE
- if (xr.enabled)
- return xr.GetViewMatrix(viewIndex);
- #endif
- return m_ViewMatrix;
- }
-
- /// <summary>
- /// Returns the camera projection matrix. Might be jittered for temporal features.
- /// </summary>
- /// <param name="viewIndex"> View index in case of stereo rendering. By default <c>viewIndex</c> is set to 0. </param>
- /// <returns> The camera projection matrix. </returns>
- public Matrix4x4 GetProjectionMatrix(int viewIndex = 0)
- {
- #if ENABLE_VR && ENABLE_XR_MODULE
- if (xr.enabled)
- return m_JitterMatrix * xr.GetProjMatrix(viewIndex);
- #endif
- return m_JitterMatrix * m_ProjectionMatrix;
- }
-
- internal Matrix4x4 GetProjectionMatrixNoJitter(int viewIndex = 0)
- {
- #if ENABLE_VR && ENABLE_XR_MODULE
- if (xr.enabled)
- return xr.GetProjMatrix(viewIndex);
- #endif
- return m_ProjectionMatrix;
- }
-
- /// <summary>
- /// Returns the camera GPU projection matrix. This contains platform specific changes to handle y-flip and reverse z. Includes camera jitter if required by active features.
- /// Similar to <c>GL.GetGPUProjectionMatrix</c> but queries URP internal state to know if the pipeline is rendering to render texture.
- /// For more info on platform differences regarding camera projection check: https://docs.unity3d.com/Manual/SL-PlatformDifferences.html
- /// </summary>
- /// <param name="viewIndex"> View index in case of stereo rendering. By default <c>viewIndex</c> is set to 0. </param>
- /// <seealso cref="GL.GetGPUProjectionMatrix(Matrix4x4, bool)"/>
- /// <returns></returns>
- public Matrix4x4 GetGPUProjectionMatrix(int viewIndex = 0)
- {
- // Disable obsolete warning for internal usage
- #pragma warning disable CS0618
- // GetGPUProjectionMatrix takes a projection matrix and returns a GfxAPI adjusted version, does not set or get any state.
- return m_JitterMatrix * GL.GetGPUProjectionMatrix(GetProjectionMatrixNoJitter(viewIndex), IsCameraProjectionMatrixFlipped());
- #pragma warning restore CS0618
- }
-
- /// <summary>
- /// Returns the camera GPU projection matrix. This contains platform specific changes to handle y-flip and reverse z. Does not include any camera jitter.
- /// Similar to <c>GL.GetGPUProjectionMatrix</c> but queries URP internal state to know if the pipeline is rendering to render texture.
- /// For more info on platform differences regarding camera projection check: https://docs.unity3d.com/Manual/SL-PlatformDifferences.html
- /// </summary>
- /// <param name="viewIndex"> View index in case of stereo rendering. By default <c>viewIndex</c> is set to 0. </param>
- /// <seealso cref="GL.GetGPUProjectionMatrix(Matrix4x4, bool)"/>
- /// <returns></returns>
- public Matrix4x4 GetGPUProjectionMatrixNoJitter(int viewIndex = 0)
- {
- // Disable obsolete warning for internal usage
- #pragma warning disable CS0618
- // GetGPUProjectionMatrix takes a projection matrix and returns a GfxAPI adjusted version, does not set or get any state.
- return GL.GetGPUProjectionMatrix(GetProjectionMatrixNoJitter(viewIndex), IsCameraProjectionMatrixFlipped());
- #pragma warning restore CS0618
- }
-
- internal Matrix4x4 GetGPUProjectionMatrix(bool renderIntoTexture, int viewIndex = 0)
- {
- return m_JitterMatrix * GL.GetGPUProjectionMatrix(GetProjectionMatrix(viewIndex), renderIntoTexture);
- }
-
- /// <summary>
- /// The camera component.
- /// </summary>
- public Camera camera;
-
- /// <summary>
- /// Returns the scaled width of the Camera
- /// By obtaining the pixelWidth of the camera and taking into account the render scale
- /// The min dimension is 1.
- /// </summary>
- public int scaledWidth => Mathf.Max(1, (int)(camera.pixelWidth * renderScale));
-
- /// <summary>
- /// Returns the scaled height of the Camera
- /// By obtaining the pixelHeight of the camera and taking into account the render scale
- /// The min dimension is 1.
- /// </summary>
- public int scaledHeight => Mathf.Max(1, (int)(camera.pixelHeight * renderScale));
-
-
- // NOTE: This is internal instead of private to allow ref return in the old CameraData compatibility property.
- // We can make this private when it is removed.
- //
- // A (non-owning) reference of full writable camera history for internal and injected render passes.
- // Only passes/code executing inside the pipeline should have access.
- // Use the "historyManager" property below to access.
- internal UniversalCameraHistory m_HistoryManager;
-
- /// <summary>
- /// The camera history texture manager. Used to access camera history from a ScriptableRenderPass.
- /// </summary>
- /// <seealso cref="ScriptableRenderPass"/>
- public UniversalCameraHistory historyManager { get => m_HistoryManager; set => m_HistoryManager = value; }
-
- /// <summary>
- /// The camera render type used for camera stacking.
- /// <see cref="CameraRenderType"/>
- /// </summary>
- public CameraRenderType renderType;
-
- /// <summary>
- /// Controls the final target texture for a camera. If null camera will resolve rendering to screen.
- /// </summary>
- public RenderTexture targetTexture;
-
- /// <summary>
- /// Render texture settings used to create intermediate camera textures for rendering.
- /// </summary>
- public RenderTextureDescriptor cameraTargetDescriptor;
- internal Rect pixelRect;
- internal bool useScreenCoordOverride;
- internal Vector4 screenSizeOverride;
- internal Vector4 screenCoordScaleBias;
- internal int pixelWidth;
- internal int pixelHeight;
- internal float aspectRatio;
-
- /// <summary>
- /// Render scale to apply when creating camera textures. Scaled extents are rounded down to integers.
- /// </summary>
- public float renderScale;
- internal ImageScalingMode imageScalingMode;
- internal ImageUpscalingFilter upscalingFilter;
- internal bool fsrOverrideSharpness;
- internal float fsrSharpness;
- internal HDRColorBufferPrecision hdrColorBufferPrecision;
-
- /// <summary>
- /// True if this camera should clear depth buffer. This setting only applies to cameras of type <c>CameraRenderType.Overlay</c>
- /// <seealso cref="CameraRenderType"/>
- /// </summary>
- public bool clearDepth;
-
- /// <summary>
- /// The camera type.
- /// <seealso cref="UnityEngine.CameraType"/>
- /// </summary>
- public CameraType cameraType;
-
- /// <summary>
- /// True if this camera is drawing to a viewport that maps to the entire screen.
- /// </summary>
- public bool isDefaultViewport;
-
- /// <summary>
- /// True if this camera should render to high dynamic range color targets.
- /// </summary>
- public bool isHdrEnabled;
-
- /// <summary>
- /// True if this camera allow color conversion and encoding for high dynamic range displays.
- /// </summary>
- public bool allowHDROutput;
-
- /// <summary>
- /// True if this camera can write the alpha channel. Post-processing uses this. Requires the color target to have an alpha channel.
- /// </summary>
- public bool isAlphaOutputEnabled;
-
- /// <summary>
- /// True if this camera requires to write _CameraDepthTexture.
- /// </summary>
- public bool requiresDepthTexture;
-
- /// <summary>
- /// True if this camera requires to copy camera color texture to _CameraOpaqueTexture.
- /// </summary>
- public bool requiresOpaqueTexture;
-
- /// <summary>
- /// Returns true if post processing passes require depth texture.
- /// </summary>
- public bool postProcessingRequiresDepthTexture;
-
- /// <summary>
- /// Returns true if XR rendering is enabled.
- /// </summary>
- public bool xrRendering;
-
- // True if GPU occlusion culling should be used when rendering this camera.
- internal bool useGPUOcclusionCulling;
-
- internal bool requireSrgbConversion
- {
- get
- {
- #if ENABLE_VR && ENABLE_XR_MODULE
- // For some XR platforms we need to encode in SRGB but can't use a _SRGB format texture, only required for 8bit per channel 32 bit formats.
- if (xr.enabled)
- return !xr.renderTargetDesc.sRGB && (xr.renderTargetDesc.graphicsFormat == GraphicsFormat.R8G8B8A8_UNorm || xr.renderTargetDesc.graphicsFormat == GraphicsFormat.B8G8R8A8_UNorm) && (QualitySettings.activeColorSpace == ColorSpace.Linear);
- #endif
-
- return targetTexture == null && Display.main.requiresSrgbBlitToBackbuffer;
- }
- }
-
- /// <summary>
- /// True if the camera rendering is for regular in-game.
- /// </summary>
- public bool isGameCamera => cameraType == CameraType.Game;
-
- /// <summary>
- /// True if the camera rendering is for the scene window in the editor.
- /// </summary>
- public bool isSceneViewCamera => cameraType == CameraType.SceneView;
-
- /// <summary>
- /// True if the camera rendering is for the preview window in the editor.
- /// </summary>
- public bool isPreviewCamera => cameraType == CameraType.Preview;
-
- internal bool isRenderPassSupportedCamera => (cameraType == CameraType.Game || cameraType == CameraType.Reflection);
-
- internal bool resolveToScreen => targetTexture == null && resolveFinalTarget && (cameraType == CameraType.Game || camera.cameraType == CameraType.VR);
-
- /// <summary>
- /// True if the Camera should output to an HDR display.
- /// </summary>
- public bool isHDROutputActive
- {
- get
- {
- bool hdrDisplayOutputActive = UniversalRenderPipeline.HDROutputForMainDisplayIsActive();
- #if ENABLE_VR && ENABLE_XR_MODULE
- // If we are rendering to xr then we need to look at the XR Display rather than the main non-xr display.
- if (xr.enabled)
- hdrDisplayOutputActive = xr.isHDRDisplayOutputActive;
- #endif
- return hdrDisplayOutputActive && allowHDROutput && resolveToScreen;
- }
- }
-
- /// <summary>
- /// True if the last camera in the stack outputs to an HDR screen
- /// </summary>
- internal bool stackLastCameraOutputToHDR;
-
- /// <summary>
- /// HDR Display information about the current display this camera is rendering to.
- /// </summary>
- public HDROutputUtils.HDRDisplayInformation hdrDisplayInformation
- {
- get
- {
- HDROutputUtils.HDRDisplayInformation displayInformation;
- #if ENABLE_VR && ENABLE_XR_MODULE
- // If we are rendering to xr then we need to look at the XR Display rather than the main non-xr display.
- if (xr.enabled)
- {
- displayInformation = xr.hdrDisplayOutputInformation;
- }
- else
- #endif
- {
- HDROutputSettings displaySettings = HDROutputSettings.main;
- displayInformation = new HDROutputUtils.HDRDisplayInformation(displaySettings.maxFullFrameToneMapLuminance,
- displaySettings.maxToneMapLuminance,
- displaySettings.minToneMapLuminance,
- displaySettings.paperWhiteNits);
- }
-
- return displayInformation;
- }
- }
-
- /// <summary>
- /// HDR Display Color Gamut
- /// </summary>
- public ColorGamut hdrDisplayColorGamut
- {
- get
- {
- #if ENABLE_VR && ENABLE_XR_MODULE
- // If we are rendering to xr then we need to look at the XR Display rather than the main non-xr display.
- if (xr.enabled)
- {
- return xr.hdrDisplayOutputColorGamut;
- }
- else
- #endif
- {
- HDROutputSettings displaySettings = HDROutputSettings.main;
- return displaySettings.displayColorGamut;
- }
- }
- }
-
- /// <summary>
- /// True if the Camera should render overlay UI.
- /// </summary>
- public bool rendersOverlayUI => SupportedRenderingFeatures.active.rendersUIOverlay && resolveToScreen;
-
- /// <summary>
- /// True is the handle has its content flipped on the y axis.
- /// This happens only with certain rendering APIs.
- /// On those platforms, any handle will have its content flipped unless rendering to a backbuffer, however,
- /// the scene view will always be flipped.
- /// When transitioning from a flipped space to a non-flipped space - or vice-versa - the content must be flipped
- /// in the shader:
- /// shouldPerformYFlip = IsHandleYFlipped(source) != IsHandleYFlipped(target)
- /// </summary>
- /// <param name="handle">Handle to check the flipped status on.</param>
- /// <returns>True is the content is flipped in y.</returns>
- public bool IsHandleYFlipped(RTHandle handle)
- {
- if (!SystemInfo.graphicsUVStartsAtTop)
- return true;
-
- if (cameraType == CameraType.SceneView || cameraType == CameraType.Preview)
- return true;
-
- var handleID = new RenderTargetIdentifier(handle.nameID, 0, CubemapFace.Unknown, 0);
- bool isBackbuffer = handleID == BuiltinRenderTextureType.CameraTarget || handleID == BuiltinRenderTextureType.Depth;
- #if ENABLE_VR && ENABLE_XR_MODULE
- if (xr.enabled)
- isBackbuffer |= handleID == new RenderTargetIdentifier(xr.renderTarget, 0, CubemapFace.Unknown, 0);
- #endif
- return !isBackbuffer;
- }
-
- /// <summary>
- /// True if the camera device projection matrix is flipped. This happens when the pipeline is rendering
- /// to a render texture in non OpenGL platforms. If you are doing a custom Blit pass to copy camera textures
- /// (_CameraColorTexture, _CameraDepthAttachment) you need to check this flag to know if you should flip the
- /// matrix when rendering with for cmd.Draw* and reading from camera textures.
- /// </summary>
- /// <returns> True if the camera device projection matrix is flipped. </returns>
- public bool IsCameraProjectionMatrixFlipped()
- {
- if (!SystemInfo.graphicsUVStartsAtTop)
- return false;
-
- // Users only have access to CameraData on URP rendering scope. The current renderer should never be null.
- var renderer = ScriptableRenderer.current;
- Debug.Assert(renderer != null, "IsCameraProjectionMatrixFlipped is being called outside camera rendering scope.");
-
- // Disable obsolete warning for internal usage
- #pragma warning disable CS0618
- if (renderer != null)
- return IsHandleYFlipped(renderer.cameraColorTargetHandle) || targetTexture != null;
- #pragma warning restore CS0618
-
- return true;
- }
-
- /// <summary>
- /// True if the render target's projection matrix is flipped. This happens when the pipeline is rendering
- /// to a render texture in non OpenGL platforms. If you are doing a custom Blit pass to copy camera textures
- /// (_CameraColorTexture, _CameraDepthAttachment) you need to check this flag to know if you should flip the
- /// matrix when rendering with for cmd.Draw* and reading from camera textures.
- /// </summary>
- /// <param name="color">Color render target to check whether the matrix is flipped.</param>
- /// <param name="depth">Depth render target which is used if color is null. By default <c>depth</c> is set to null.</param>
- /// <returns> True if the render target's projection matrix is flipped. </returns>
- public bool IsRenderTargetProjectionMatrixFlipped(RTHandle color, RTHandle depth = null)
- {
- if (!SystemInfo.graphicsUVStartsAtTop)
- return true;
-
- return targetTexture != null || IsHandleYFlipped(color ?? depth);
- }
-
- internal bool IsTemporalAAEnabled()
- {
- UniversalAdditionalCameraData additionalCameraData;
- camera.TryGetComponent(out additionalCameraData);
-
- return (antialiasing == AntialiasingMode.TemporalAntiAliasing) // Enabled
- && postProcessEnabled // Postprocessing Enabled
- && (taaHistory != null) // Initialized
- && (cameraTargetDescriptor.msaaSamples == 1) // No MSAA
- && !(additionalCameraData?.renderType == CameraRenderType.Overlay || additionalCameraData?.cameraStack.Count > 0) // No Camera stack
- && !camera.allowDynamicResolution // No Dynamic Resolution
- && renderer.SupportsMotionVectors(); // Motion Vectors implemented
- }
-
- /// <summary>
- /// Returns true if the pipeline is configured to render with the STP upscaler
- ///
- /// When STP runs, it relies on much of the existing TAA infrastructure provided by URP's native TAA. Due to this, URP forces the anti-aliasing mode to
- /// TAA when STP is enabled to ensure that most TAA logic remains active. A side effect of this behavior is that STP inherits all of the same configuration
- /// restrictions as TAA and effectively cannot run if IsTemporalAAEnabled() returns false. The post processing pass logic that executes STP handles this
- /// situation and STP should behave identically to TAA in cases where TAA support requirements aren't met at runtime.
- /// </summary>
- /// <returns>True if STP is enabled</returns>
- internal bool IsSTPEnabled()
- {
- return (imageScalingMode == ImageScalingMode.Upscaling) && (upscalingFilter == ImageUpscalingFilter.STP);
- }
-
- /// <summary>
- /// The sorting criteria used when drawing opaque objects by the internal URP render passes.
- /// When a GPU supports hidden surface removal, URP will rely on that information to avoid sorting opaque objects front to back and
- /// benefit for more optimal static batching.
- /// </summary>
- /// <seealso cref="SortingCriteria"/>
- public SortingCriteria defaultOpaqueSortFlags;
-
- /// <summary>
- /// XRPass holds the render target information and a list of XRView.
- /// XRView contains the parameters required to render (projection and view matrices, viewport, etc)
- /// </summary>
- public XRPass xr { get; internal set; }
-
- internal XRPassUniversal xrUniversal => xr as XRPassUniversal;
-
- /// <summary>
- /// Maximum shadow distance visible to the camera. When set to zero shadows will be disable for that camera.
- /// </summary>
- public float maxShadowDistance;
-
- /// <summary>
- /// True if post-processing is enabled for this camera.
- /// </summary>
- public bool postProcessEnabled;
-
- /// <summary>
- /// True if post-processing is enabled for any camera in this camera's stack.
- /// </summary>
- internal bool stackAnyPostProcessingEnabled;
-
- /// <summary>
- /// Provides set actions to the renderer to be triggered at the end of the render loop for camera capture.
- /// </summary>
- public IEnumerator<Action<RenderTargetIdentifier, CommandBuffer>> captureActions;
-
- /// <summary>
- /// The camera volume layer mask.
- /// </summary>
- public LayerMask volumeLayerMask;
-
- /// <summary>
- /// The camera volume trigger.
- /// </summary>
- public Transform volumeTrigger;
-
- /// <summary>
- /// If set to true, the integrated post-processing stack will replace any NaNs generated by render passes prior to post-processing with black/zero.
- /// Enabling this option will cause a noticeable performance impact. It should be used while in development mode to identify NaN issues.
- /// </summary>
- public bool isStopNaNEnabled;
-
- /// <summary>
- /// If set to true a final post-processing pass will be applied to apply dithering.
- /// This can be combined with post-processing antialiasing.
- /// <seealso cref="antialiasing"/>
- /// </summary>
- public bool isDitheringEnabled;
-
- /// <summary>
- /// Controls the anti-aliasing mode used by the integrated post-processing stack.
- /// When any other value other than <c>AntialiasingMode.None</c> is chosen, a final post-processing pass will be applied to apply anti-aliasing.
- /// This pass can be combined with dithering.
- /// <see cref="AntialiasingMode"/>
- /// <seealso cref="isDitheringEnabled"/>
- /// </summary>
- public AntialiasingMode antialiasing;
-
- /// <summary>
- /// Controls the anti-alising quality of the anti-aliasing mode.
- /// <see cref="antialiasingQuality"/>
- /// <seealso cref="AntialiasingMode"/>
- /// </summary>
- public AntialiasingQuality antialiasingQuality;
-
- /// <summary>
- /// Returns the current renderer used by this camera.
- /// <see cref="ScriptableRenderer"/>
- /// </summary>
- public ScriptableRenderer renderer;
-
- /// <summary>
- /// True if this camera is resolving rendering to the final camera render target.
- /// When rendering a stack of cameras only the last camera in the stack will resolve to camera target.
- /// </summary>
- public bool resolveFinalTarget;
-
- /// <summary>
- /// Camera position in world space.
- /// </summary>
- public Vector3 worldSpaceCameraPos;
-
- /// <summary>
- /// Final background color in the active color space.
- /// </summary>
- public Color backgroundColor;
-
- /// <summary>
- /// Persistent TAA data, primarily for the accumulation texture.
- /// </summary>
- internal TaaHistory taaHistory;
-
- /// <summary>
- /// The STP history data. It contains both persistent state and textures.
- /// </summary>
- internal StpHistory stpHistory;
-
- // TAA settings.
- internal TemporalAA.Settings taaSettings;
-
- // Post-process history reset has been triggered for this camera.
- internal bool resetHistory
- {
- get => taaSettings.resetHistoryFrames != 0;
- }
-
- /// <summary>
- /// Camera at the top of the overlay camera stack
- /// </summary>
- public Camera baseCamera;
-
- ///<inheritdoc/>
- public override void Reset()
- {
- m_ViewMatrix = default;
- m_ProjectionMatrix = default;
- m_JitterMatrix = default;
- #if ENABLE_VR && ENABLE_XR_MODULE
- m_CachedRenderIntoTextureXR = false;
- m_InitBuiltinXRConstants = false;
- #endif
- camera = null;
- renderType = CameraRenderType.Base;
- targetTexture = null;
- cameraTargetDescriptor = default;
- pixelRect = default;
- useScreenCoordOverride = false;
- screenSizeOverride = default;
- screenCoordScaleBias = default;
- pixelWidth = 0;
- pixelHeight = 0;
- aspectRatio = 0.0f;
- renderScale = 1.0f;
- imageScalingMode = ImageScalingMode.None;
- upscalingFilter = ImageUpscalingFilter.Point;
- fsrOverrideSharpness = false;
- fsrSharpness = 0.0f;
- hdrColorBufferPrecision = HDRColorBufferPrecision._32Bits;
- clearDepth = false;
- cameraType = CameraType.Game;
- isDefaultViewport = false;
- isHdrEnabled = false;
- allowHDROutput = false;
- isAlphaOutputEnabled = false;
- requiresDepthTexture = false;
- requiresOpaqueTexture = false;
- postProcessingRequiresDepthTexture = false;
- xrRendering = false;
- useGPUOcclusionCulling = false;
- defaultOpaqueSortFlags = SortingCriteria.None;
- xr = default;
- maxShadowDistance = 0.0f;
- postProcessEnabled = false;
- captureActions = default;
- volumeLayerMask = 0;
- volumeTrigger = default;
- isStopNaNEnabled = false;
- isDitheringEnabled = false;
- antialiasing = AntialiasingMode.None;
- antialiasingQuality = AntialiasingQuality.Low;
- renderer = null;
- resolveFinalTarget = false;
- worldSpaceCameraPos = default;
- backgroundColor = Color.black;
- taaHistory = null;
- stpHistory = null;
- taaSettings = default;
- baseCamera = null;
- stackAnyPostProcessingEnabled = false;
- stackLastCameraOutputToHDR = false;
- }
- }
- }
|