NVIDIA OptiX 7.7 (March 2023) Released

Started by JeGX, March 30, 2023, 09:34:50 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

JeGX

OptiX is an application framework for achieving optimal ray tracing performance on the GPU. It provides a simple, recursive, and flexible pipeline for accelerating ray tracing algorithms. Bring the power of NVIDIA GPUs to your ray tracing applications with programmable intersection, ray generation, and shading.

OptiX is free to use within any application, including commercial and educational applications.


OptiX 7.7 changes:
QuoteThe OptiX 7.7 adds support for Displacement Micromaps (DMMs) that provide hardware accelerated displacement for triangle mesh geometry. DMMs are supported on GPUs with RTCores and accelerated in hardware on the new Ada Lovelace generation of GPUs. Cubic curves can now be specified with a Bezier basis, and we introduce support for quadratic B-Spline ribbons (curves with a flat cross-section). The denoiser now supports temporal denoising in conjunction with 2x upscaling.

--

New feature: Displacement MicroMaps (DMMs)

- DMMs provide hardware-accelerated displacement for triangle mesh geometry, turning triangles into a displaced micro-mesh. DMMs are supported on all GPUs with RTCores and accelerated in hardware on the new Ada Lovelace generation of GPUs. DMMs describe the scalar displacement values in a barycentric grid and are stored compactly with low precision and optional compression.

- DMMs are stored in a new resource, the DMM array, which needs to be built similar to acceleration
structures. DMMs in a DMM array can have different subdivision levels and formats.

- Each OptixBuildInputTriangleArray can now specify an OptixBuildInputDisplacementMicromap. The build input references a DMM array and individual triangles in the OptixBuildInputTriangleArray index into the DMM array to pick the required DMM. Per vertex displacement directions and the DMM allow turning a triangle into displaced micro-mesh triangle primitive.

- Details can be found in the OptiX programming guides, section "Displaced micro-meshes"

- New host functions for creating arrays of displacement micromaps
  - optixDisplacementMicromapArrayComputeMemoryUsage
  - optixDisplacementMicromapArrayBuild

- New device functions
  - optixGetMicroTriangleVertexData
  - optixGetMicroTriangleBarycentricsData
  - optixIsDisplacedMicromeshTriangleHit
  - optixIsDisplacedMicromeshTriangleFrontFaceHit
  - optixIsDisplacedMicromeshTriangleBackFaceHit
  - optixBaseBarycentricsToMicroBarycentrics - found in optix_micromap.h

- New OptixPrimitiveType
  - OPTIX_PRIMITIVE_TYPE_DISPLACED_MICROMESH_TRIANGLE


Now that OptiX can accept both PTX and OptiX-IR as input, API names were simplified
- optixModuleCreateFromPTX -> optixModuleCreate

- optixModuleCreateFromPTXWithTasks -> optixModuleCreateWithTasks

- OPTIX_ERROR_INVALID_PTX -> OPTIX_ERROR_INVALID_INPUT


optixProgramGroupGetStackSize now takes an optional argument for the OptixPipeline
- When the pipeline parameter is non-null, OptiX will calculate the stack size based on the linked result. If OptiX programs call functions in other modules, this will produce a more accurate stack size.


New function optixAccelEmitProperty
- Emits a single property after an acceleration structure was built
- You may still emit properties as part of optixAccelBuild


rayFlags to optixTrace is now 16 bits instead of 8 bits


Curves
- New curve types
  - OPTIX_PRIMITIVE_TYPE_FLAT_QUADRATIC_BSPLINE (ribbons)
  - OPTIX_PRIMITIVE_TYPE_ROUND_CUBIC_BEZIER

- Added new device functions to access curve parameters and other curve properties at the current
intersection point. It is recommended that these be used instead of interpolating directly from the
attributes. Recommended usage is shown in sample optixCurves.
  - optixGetCubicBezierVertexData
  - optixGetRibbonVertexData
  - optixGetRibbonNormal
  - optixGetRibbonParameters

- In order to ensure compatibility with future versions of OptiX, use optixGetCurveParameter instead of accessing the attribute directly


OptixInstance::sbtOffset is now summed across all instances in the traversal graph instead of taking only the bottom-most sbt offset. This allows for sbt paletting at any particular instance level in a scene graph with multiple levels of instances (instead of only the bottom most instance level referencing the GAS), or recursive sbt paletting at each instance level in a scene graph.

OPTIX_BUILD_FLAG_PREFER_FAST_TRACE is now mutually exclusive with OPTIX_BUILD_FLAG_PREFER_FAST_BUILD. Previously FAST_TRACE would override FAST_BUILD.

Denoiser
- Added new pixel formats for input guide layers
  - OPTIX_PIXEL_FORMAT_HALF1
  - OPTIX_PIXEL_FORMAT_FLOAT1

- Added new model
  - OPTIX_DENOISER_MODEL_KIND_TEMPORAL_UPSCALE2X

- Added new guide layer
  - flowTrustworthiness

- Added OptixDenoiserAOVType to the OptixDenoiserLayer


Removed OptixPipelineLinkOptions::debugLevel as it doesn't do anything and is unnecessary


New and updated SDK samples

 - Headers have been rearranged to avoid the need of optix_7_* headers. No code changes should be
expected to accommodate this change.

- New sample optixDisplacedMicroMesh
  - Demonstrates use of displaced micro meshes to display finer grained meshes with less use of
memory

- Updated optixCurves sample to include --ribbon option
  - Demonstrates use of new flat quadratic B-spline curve


When debugging device code in OptiX shaders, you will need to set the environment variable
OPTIX_FORCE_DEPRECATED_LAUNCHER to 1 prior to running the application

Links:
- OptiX downloads-
- OptiX homepage