Unity 6.3
0 онлайн 67 гостей 3 в системе
Вход

FSR2CommandExecutionData

структура в UnityEngine.AMD

Выполнено в:UnityEngine.AMDModule

Описание

Представляет состояние FSR2Context. Если вы вызываете Device.ExecuteFSR2, Unity передаёт значения из этой структуры в среду выполнения. После этого значения в структуре можно менять без побочных эффектов.

FSR2CommandExecutionData ожидает, что frameTimeDelta будет в миллисекундах, в то время как Unity Time.deltaTime будет в секундах, а cameraFovAngleVertical в радианах, в то время как Unity предоставляет поле зрения в градусах.

FSR2 ожидает, что векторы движения будут находиться в экранном пространстве и их значения будут описывать движение от текущего кадра к предыдущему кадру. Векторы движения Unity описывают движение от предыдущего кадра к текущему кадру и находятся в нормализованных координатах устройства (NDC), в диапазоне [-1, +1]. Для соответствия требованиям FSR2, предоставьте значения MVScaleX и MVScaleY, которые масштабируют значения вектора движения с целевым размером отображения вектора движения.

См. раздел Предоставление векторов движения в документации FSR2 для более подробной информации.

Дополнительные ресурсы: AMDUnityPlugin, GraphicsDevice, FSR2Context, FSR2TextureTable, FSR2CommandInitializationData

using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.HighDefinition;
using UnityEngine.Experimental.Rendering;
using UnityEngine.AMD;

// Example HDRP custom pass public class CustomFSRPass : CustomPass { protected override void Setup(ScriptableRenderContext renderContext, CommandBuffer cmd) { // setup code }

protected override void Execute(CustomPassContext ctx) { bool initializeFsr2Context = fsr2Context == null || HasInputResolutionChanged(ctx) || HasOutputResolutionChanged(ctx); if (initializeFsr2Context) { // initialize fsr2Context }

Vector2Int mvSize = ctx.cameraMotionVectorsBuffer.GetScaledSize(); m_InputTextureSize = ctx.cameraColorBuffer.GetScaledSize();

fsr2Context.executeData.enableSharpening = m_EnableSharpening ? 1 : 0; fsr2Context.executeData.sharpness = m_Sharpness; fsr2Context.executeData.renderSizeWidth = (uint)m_InputTextureSize.x; fsr2Context.executeData.renderSizeHeight = (uint)m_InputTextureSize.y; fsr2Context.executeData.jitterOffsetX = -ctx.hdCamera.taaJitter.x; fsr2Context.executeData.jitterOffsetY = -ctx.hdCamera.taaJitter.y; fsr2Context.executeData.preExposure = 1.0f; fsr2Context.executeData.frameTimeDelta = Time.deltaTime * 1000.0f; // FSR2 expects time in milliseconds fsr2Context.executeData.cameraNear = ctx.hdCamera.camera.nearClipPlane; fsr2Context.executeData.cameraFar = ctx.hdCamera.camera.farClipPlane; fsr2Context.executeData.cameraFovAngleVertical = ctx.hdCamera.camera.fieldOfView * (Mathf.PI * 2.0f/360.0f); // FSR2 expects in radians

// Unity computes motion vectors in NDC, FSR2 expects them in screen space and from current frame to previous frame. // Here we scale by the render target size to meet the FSR2 requirements, // and also invert them to satisfy the frame of reference requirement. fsr2Context.executeData.MVScaleX = -((float)mvSize.x); fsr2Context.executeData.MVScaleY = -((float)mvSize.y);

#if UNITY_EDITOR // The same camera is used to render both Scene and Play mode views within the editor. // In case both of these views are visible at the same time, we'll need to reset to avoid // rendering artifacts. fsr2Context.executeData.reset = 1; #else fsr2Context.executeData.reset = (initializeFsr2Context || parameters.hdCamera.isFirstFrame) ? 1 : 0; #endif

FSR2TextureTable fsr2TextureTable = new FSR2TextureTable() { // initialize texture table };

amdDevice.ExecuteFSR2(ctx.cmd, fsr2Context, fsr2TextureTable); }

protected override void Cleanup() { // cleanup code }

private GraphicsDevice amdDevice = null; private FSR2Context fsr2Context = null; private CommandBuffer cmd = null; private RTHandle fsr2OutputColorBuffer;

[SerializeField] public float m_Sharpness = 0.92f; [SerializeField] public bool m_EnableSharpening = true; [SerializeField] public FSR2Quality m_Quality = FSR2Quality.Quality;

Vector2Int m_InputTextureSize = new Vector2Int(0,0); }

Свойства

Свойство Описание
cameraFarРасстояние до дальней плоскости камеры.
cameraFovAngleVerticalУгол поля зрения камеры в вертикальном направлении (выраженный в радианах).
cameraNearРасстояние до близкой плоскости камеры.
enableSharpeningВключить дополнительный проход заточки.
frameTimeDeltaВремя, прошедшее с момента последнего кадра (в миллисекундах).
jitterOffsetXСмещение субпиксельной трещины, применяемое к камере (ось X).
jitterOffsetYСмещение субпиксельного трещинного колебания, применяемое к камере (ось Y).
MVScaleXКоэффициент масштаба, применяемый к векторам движения (ось X).
MVScaleYКоэффициент масштаба, применяемый к векторам движения (ось Y).
preExposureЗначение предварительной экспозиции (должно быть > 0,0f).
renderSizeHeightРазрешение высоты, которое использовалось для отображения вводных ресурсов.
renderSizeWidthРазрешение ширины, которое было использовано для отображения вводных ресурсов.
resetЛогическое значение, которое при установке на true указывает, что камера двигалась непоследовательно.
sharpnessЗначение резкости в диапазоне от 0 до 1, где 0 означает отсутствие дополнительной резкости, а 1 — максимальную дополнительную резкость.