Skip to content

Releases: NVIDIAGameWorks/RTXGI-DDGI

v1.3.7

08 May 17:48
Compare
Choose a tag to compare

SDK

  • Bug Fixes
    • Fixes issue in ReductionCS.hlsl that caused a divide by zero when all probes in a volume are disabled. A reduction thread should not contribute to the variability calculation if threadFootprintWeightSum is zero.
    • Fixes issue in ProbeBlendingCS.hlsl that prevented probeBrightnessThreshold from working as intended. Fixes GitHub Issue #70.

Test Harness

  • Improvements
    • Enhances shader compilation options and allows for the options to be specified in *.ini files.
    • Enhancements to frame queueing/buffering. The CPU can now run ahead one frame, allowing CPU and GPU work to overlap.
    • Adds a toggle to enable/disable progressive rendering in the path tracer.
    • Increased the granularity of CPU timestamps and reworks the detailed performance UI.
  • Bug Fixes
    • Fixes minor issues with Vulkan timestamps.

v1.3.6

13 Jan 14:58
Compare
Choose a tag to compare

SDK

  • Improvements
    • Adds 16B to the end of the DDGIVolumeDescGPUPacked struct to align to 128B and reserve space for future use
    • Updates DDGIVolumeDescGPUPacked struct comments and layout to properly reflect its size (in bytes)
    • Adds fix for GitHub Issue #69
    • Updates copyrights and bumps revision numbers

Test Harness

  • Updates copyrights and bumps revision numbers

v1.3.5

08 Dec 19:32
Compare
Choose a tag to compare

SDK

  • Improvements
    • Adds the new Probe Variability feature to the DDGIVolume
      • This is an optional feature that tracks the coefficient of variation of a DDGIVolume
      • This can be used to estimate of how converged the probes of the volume are. When the coefficient settles around a small value, it is likely the probes contain representative irradiance values and ray tracing and probe updates can be disabled until an event occurs that invalidates the light field
      • See Probe Variability in the documentation for more details
    • Adds changes to DDGIVolume D3D12 resource transitions based on feedback from GitHub Issue #68 (thanks!)
      • UpdateDDGIVolumes() can now be safely used on direct and compute command lists
      • Irradiance, Distance, and Probe Data resources are now expected to be in the D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE state by default
      • These resources can be transitioned to the required states for each workload using the new DDGIVolume::TransitionResources(...) function where appropriate (also see EDDGIExecutionStage)

Test Harness

  • Improvements
    • Adds support for the SDK's new Probe Variability feature, including buffer visualization, UI toggles, and checks to disable/enable probe traces based on volume variability
    • Adds support for Shader Execution Reordering in DDGI probe ray tracing and the reference Path Tracer (D3D12 only)
      • Requires an RTX 4000 series (Ada) GPU
    • Adds NVAPI as a new dependency (Test Harness only)
    • Improves acceleration structure organization
      • Reorganizes how BLAS are created from GLTF2 Mesh and MeshPrimitives
        • MeshPrimitives are now geometries of the same BLAS (instead of individual BLAS)
        • This prevents bad traversal characteristics when MeshPrimitives create substantially overlapping BLAS and increases trace performance up to 2x
      • Adds the GeometryData and MeshOffsets indirection buffers for looking up MeshPrimitive information
        • Updates RGS and Hit Shaders to look up MeshPrimitive information using DXR 1.1 GeometryIndex() and the new indirection buffers
    • Updates Closest Hit shaders to conform with the GLTF 2.0 specification for how albedo values sampled from texture should be combined with baseColorFactor. Fixes GitHub Issue #67.
    • Updates scene cache serialization/deserialization
      • Stores new information and now stores a scene cache file for .glb scenes too
  • Bug Fixes
    • Updates DXC binaries to v1.7.2207 (on Windows) to fix a shader compilation issue
    • Fixes issues with DDGIVolume name strings not being handled properly
    • Fixes D3D12 resource state problems caught by the debug layer
    • Fixes a handful of other minor issues

v1.3.0

19 Oct 18:06
Compare
Choose a tag to compare

SDK

  • Dynamic Library
    • Adds support for building and using the SDK as a dynamic library (*.dll, *.so)
    • Removes the use of std in SDK headers
  • DDGIVolume Probe Counts
    • Changes all GPU-side texture resources to Texture2DArrays (D3D12 and Vulkan)
    • Increases the theoretical maximum number of probes per volume to ~33.5 million (128x2048x128)
    • Increases the practical maximum probes per volume increases to 2,097,152 probes (with the default texel format settings)
      • This is a 2x increase over the previous maximum of 1024x32x32 (1,048,576 probes) and is limited by API restrictions: a single D3D12/Vulkan resource cannot be larger than 4GB
      • More importantly, this change enables a more flexible and (at times) less wasteful memory layout since monolithic 2D texture atlases are no longer used for DDGIVolume probe resources
  • Bindless Resources
    • Adds support for Shader Model 6.6 Dynamic Resources (aka Descriptor Heap bindless) in D3D12
    • Reworks how bindless resource indices are specified for both Resource Array and Descriptor Heap style bindless implementations (D3D12 and Vulkan)
  • Probe Border Updates, Probe Blending, and GPU Utilization
    • Moves probe border update work into the probe blending passes
      • This removes the need for separate border update compute passes, simplifying SDK use while also providing a small performance benefit
    • Adjusts probe blending thread group sizes to increase GPU utilization and enable probe ray counts in factors of 64 to be stored in shared memory (no more unusual ray counts like 144, 288, etc).
  • Vulkan Push Constants
    • Updates the Vulkan push constants implementation to be more flexible and customizable so you can tailor them to your application's setup
  • Other Improvements and Fixes
    • Represents probe counts with 10 bits (instead of 8) in DDGIVolumeDescGPUPacked
    • Adds GetRayDispatchDimensions() to make probe ray tracing dispatches easier to setup
    • Adds GetGPUMemoryUsedInBytes() to make DDGIVolume memory tracking easier
    • Adds ValidatePackedData() to ensure correct functionality of the PackDDGIVolumeDescGPU() and UnpackDDGIVolumeDescGPU() functions, executes in Debug configurations as part of UploadDDGIVolumeConstants().
    • Moves shader define validation code to separate files to make the main SDK shader code more friendly and readable
    • Adds fix for EulerAnglesToRotationMatrixYXZ() not producing correct DDGIVolume rotations across all coordinate systems
    • Adds ConvertEulerAngles() convenience function to convert euler angles to alternate coordinate systems

Test Harness

  • Improvements
    • Adds support for RTXGI SDK v1.3.0 features
    • Reorganizes the (D3D12) global root signature / (Vulkan) pipeline layout to bindlessly index texture array resources
    • Eliminates the visualization-specific descriptor heap - all descriptors are now part of the global descriptor heap
    • Uses the D3D12 Agility SDK v1.606.3 to access Shader Model 6.6+ features
    • Reworks shader compilation code to use latest DXC interfaces, explicitly links DXC
    • Adds support for storing DDGIVolume texture array data to disk (for debug / regression)
    • Sets the COORDINATE_SYSTEM define through CMake, based on the SDK's RTXGI_COORDINATE_SYSTEM define. The Test Harness and RTXGI SDK can no longer have mismatching coordinate systems.
    • Scene graph node transforms are now converted to the selected coordinate system
    • Test Harness converts all config file positions, directions, and rotations to the selected coordinate system
      • All scene config files updated to specify right hand, y-up positions, directions, and rotations.
    • Scene Cache
      • Coordinate system of the scene geometry is now stored in the cache file
      • Cache files with mismatching coordinate system are rejected and the cache file is rebuilt
      • Cache files are built for binary (.glb) GLTF files too now
  • Bug Fixes
    • Adds several fixes for issues with Vulkan timestamps
    • Adds fix to properly compute bounding boxes, taking mesh instance transforms into account for the chosen coordinate system
    • Adds fix so probe visualization spheres are not inside out in left handed coordinate systems

v1.2.13

12 Sep 21:19
Compare
Choose a tag to compare

SDK

Bug Fixes

  • Fixes a bit packing issue in DDGIVolumeDescGPU.h
    • This bug causes the irradiance texture format to be improperly packed and unpacked. This problem may also affect feature bits, depending on which ones are set.

Test Harness

Bug Fixes

  • Fixes Vulkan validation layer errors related to the ray query extension not being enabled

v1.2.12a

30 Jun 17:27
Compare
Choose a tag to compare

SDK

  • No changes

Test Harness

Features and Improvements

  • Uses stb (stb_image_write) for image saving and screenshot functionality (included with the tinygltf dependency)
  • Removes zlib-ng and libpng dependencies
  • Updates Windows DXC (packman) dependencies to version 1.6.2112 which includes dxil.dll
  • Now using std::filesystem on Windows and Linux
  • CMake
    • Adds option to select in CMake whether to use the DXC & DXIL binaries from Packman or an installed Win10 SDK (Windows only)
    • Properly sets the default startup project for RTXGI.sln (it really works now!)
    • Adds arguments to automatically set the available config ini files for the SmartCmdArgs extension
    • Removes DirectXTK ScreenGrab[.h|.cpp] files

Bug Fixes

  • Fixes VK validation layer error related to the back buffer not being marked as a possible copy source
  • Fixes D3D12 and VK swapchain creation failures (causing a crash) when alt+tabbing or minimizing the application when in fullscreen mode

v1.2.12

31 May 20:55
Compare
Choose a tag to compare

SDK

Features and Improvements

  • Adds support to DDGI probes for 16-bit / channel irradiance

Test Harness

Features and Improvements

  • Improvements to the benchmark mode
  • Swaps to zlib-ng since it is more CMake/Git friendly
  • Other improvements for CMake
  • Adds SDK version number to the debug UI

Bug Fixes

  • Fixes compilation regressions on Linux

v1.2.11

27 Apr 17:17
Compare
Choose a tag to compare

SDK

Features and Improvements

  • Improved flexibility for specifying thresholds for probe ray backface hits
    • The backface hit threshold used in ProbeBlendingCS is now adjustable
    • Thresholds for random rays (blending) and fixed rays (relocation/classification) can now be specified separately
    • Note: this change modifies the DDGIVolumeDescGPU struct
  • Improved lighting responsiveness after a probe is scrolled (and cleared)
    • Drops hysteresis to zero for the first update cycle after a probe is scrolled and cleared
    • Note: hysteresis is now set to zero for all probe texels where the previous irradiance is zero in all color channels
  • Renames DDGIResetScrolledPlane() to DDGIClearScrolledPlane() to better reflect its purpose
  • Adds option to use shared memory during probe scroll clear testing
    • When enabled, scroll clear tests will only run for the first thread of a blending thread group
    • RTXGI_DDGI_BLEND_SCROLL_SHARED_MEMORY is now a required define for ProbeBlendingCS.hlsl
    • Can be a performance win on some hardware

Bug Fixes

  • Fixes issue where some probes were not being cleared properly during scrolling events (Issue #62)
    • Note: this change modifies the DDGIVolumeDescGPU struct

Test Harness

Features and Improvements

  • Improves support for loading GLTF files that contain geometry primitives without assigned materials (Issue #61)
  • Updates UI to reflect the separate random and fixed probe ray threshold options

v1.2.07

22 Mar 14:51
Compare
Choose a tag to compare

SDK

Features and Improvements

  • Shader improvements for probe data reads/writes
    • The probe data texture now uses the same layout as the irradiance and distance textures
    • This change makes probe data visualizations easier to understand
  • Adds a RWTexture2D variant of DDGILoadProbeState()
  • Uses the DDGILoadProbeState() convenience function where appropriate
  • Moved the data member of the DDGIVolumeDescGPU struct inside the GetPackedData() function so the struct size is the same on the CPU and GPU
  • Updated stale code comments (non-functional)
  • Bumped SDK revision number and version string

Bug Fixes

  • DDGIGetVolumeBlendWeight: fixed regression related to volume edge fade not respecting rotations

Test Harness

Features and Improvements

  • ProbeTraceRGS.hlsl: no longer performs lighting for fixed rays when probe relocation is enabled (performance optimization)
  • Adds a performance benchmark mode that collects CPU and GPU performance data and outputs the results to *.csv files
    • Press the F2 key to run a benchmark
  • Adds the ability to store intermediate textures (back buffer, GBuffer, RTAO, and DDGIVolume textures) to disk
    • Uses the zlib and libpng libraries for cross-platform compatibility
    • Press the F1 key to save the current image data to disk
  • VolumeTexturesCS.hlsl: minor updates to the layout order of visualized textures
  • Config file and documentation updates

v1.2.04

11 Jan 15:43
Compare
Choose a tag to compare

SDK

Features and Improvements

  • Bumped SDK revision number and version string
  • Updated copyright dates

Bug Fixes

  • Fixed regression related to distance values sampled from probe distance textures

Test Harness

Features and Improvements

  • Relative paths defined in configuration .ini files are now interpreted as relative to the .ini file, instead of the Visual Studio working directory
    • This should be easier to use than the previous behavior
  • CMake: the nvidia.jpg copy operations now use CMAKE_BINARY_DIR
  • Added version number and version string assert checks during DDGI initialization
  • Updated documentation with DDGIVolume Rules of Thumb
  • Updated copyright dates

Bug Fixes

  • Fixed regression related to distance values sampled from probe distance textures