Releases: NVIDIAGameWorks/RTXGI-DDGI
Releases · NVIDIAGameWorks/RTXGI-DDGI
v1.3.7
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 ifthreadFootprintWeightSum
is zero. - Fixes issue in
ProbeBlendingCS.hlsl
that preventedprobeBrightnessThreshold
from working as intended. Fixes GitHub Issue #70.
- Fixes issue in
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.
- Enhances shader compilation options and allows for the options to be specified in
- Bug Fixes
- Fixes minor issues with Vulkan timestamps.
v1.3.6
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
- Adds 16B to the end of the
Test Harness
- Updates copyrights and bumps revision numbers
v1.3.5
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
- This is an optional feature that tracks the coefficient of variation of a
- 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 seeEDDGIExecutionStage
)
- Adds the new Probe Variability feature to the
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
- Reorganizes how BLAS are created from GLTF2 Mesh and MeshPrimitives
- 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
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
- Adds support for building and using the SDK as a dynamic library (
- 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
- Changes all GPU-side texture resources to
- 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).
- Moves probe border update work into the probe blending passes
- 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 makeDDGIVolume
memory tracking easier - Adds
ValidatePackedData()
to ensure correct functionality of thePackDDGIVolumeDescGPU()
andUnpackDDGIVolumeDescGPU()
functions, executes in Debug configurations as part ofUploadDDGIVolumeConstants()
. - 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 correctDDGIVolume
rotations across all coordinate systems - Adds
ConvertEulerAngles()
convenience function to convert euler angles to alternate coordinate systems
- Represents probe counts with 10 bits (instead of 8) in
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'sRTXGI_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
- Adds support for RTXGI SDK
- 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
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
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
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
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
- The backface hit threshold used in
- 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()
toDDGIClearScrolledPlane()
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 forProbeBlendingCS.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
- Note: this change modifies the
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
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 theDDGIVolumeDescGPU
struct inside theGetPackedData()
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
- Press the
- 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
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 useCMAKE_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