// Copyright (c) 2021 NVIDIA Corporation
//
// SPDX-License-Identifier: CC-BY-4.0

include::{generated}/meta/{refprefix}VK_NV_ray_tracing_motion_blur.txt[]

=== Other Extension Metadata

*Last Modified Date*::
    2021-06-16
*Interactions and External Dependencies*::
  - This extension requires
    {spirv}/NV/SPV_NV_ray_tracing_motion_blur.html[`SPV_NV_ray_tracing_motion_blur`]
  - This extension provides API support for
    https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GLSL_NV_ray_tracing_motion_blur.txt[`GL_NV_ray_tracing_motion_blur`]
*Contributors*::
  - Eric Werness, NVIDIA
  - Ashwin Lele, NVIDIA

=== Description

Ray tracing support in the API provides an efficient mechanism to intersect
rays against static geometry, but rendering algorithms often want to support
motion, which is more efficiently supported with motion-specific algorithms.
This extension adds a set of mechanisms to support fast tracing of moving
geometry:

  * A ray pipeline trace call which takes a time parameter
  * Flags to enable motion support in an acceleration structure
  * Support for time-varying vertex positions in a geometry
  * Motion instances to move existing instances over time

The motion represented here is parameterized across a normalized timestep
between 0.0 and 1.0.
A motion trace using OpTraceRayMotionNV provides a time within that
normalized range to be used when intersecting that ray with geometry.
The geometry can be provided with motion by a combination of adding a second
vertex position for time of 1.0 using
sname:VkAccelerationStructureGeometryMotionTrianglesDataNV and providing
multiple transforms in the instance using
sname:VkAccelerationStructureMotionInstanceNV.

include::{generated}/interfaces/VK_NV_ray_tracing_motion_blur.txt[]

=== Issues

(1) What size is VkAccelerationStructureMotionInstanceNV?
--
 * Added a note on the structure size and made the stride explicit in the
   language.
--

(2) Allow arrayOfPointers for motion TLAS?
--
 * Yes, with a packed encoding to minimize the amount of data sent for
   metadata.
--

=== Version History

  * Revision 1, 2020-06-16 (Eric Werness, Ashwin Lele)
    - Initial external release
