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 — максимальную дополнительную резкость. |