Open PGL 0.7.0
-
New (Experimental) Features:
- Radiance Caching (RC):
- If RC is enabled, the guiding structure (i.e.,
Field
) learns an approximation of multiple radiance quantities (in linear RGB), such as outgoing and incoming radiance, irradiance, fluence, and in-scattered radiance. These quantities can be queried using theSurfaceSamplingDistribution
andVolumeSamplingDistribution
classes.
RC support can be enabled using theOPENPGL_EF_RADIANCE_CACHES
CMake option. Note: Since the RC quantities are Monte-Carlo estimates, zero-value samples (ZeroValueSampleData
) that are generated during rendering/training have to be passed/stored in theSampleStorage
as well.
- If RC is enabled, the guiding structure (i.e.,
- Guided/Adjoint-driven Russian Roulette (GRR):
- The information stored in radiance caches can be used to optimize stochastic path termination decisions (a.k.a. Russian roulette) to avoid a significant increase in variance (i.e., noise) caused by early terminations, which can occur when using standard throughput-based RR strategies.
We, therefore, added to example implementation for guided (openpgl::cpp::util::GuidedRussianRoulette(...)
) and standard (openpgl::cpp::util::StandardThroughputBasedRussianRoulette(...)
) RR, which can be found in theopenpgl/cpp/RussianRoulette.h
header.
- The information stored in radiance caches can be used to optimize stochastic path termination decisions (a.k.a. Russian roulette) to avoid a significant increase in variance (i.e., noise) caused by early terminations, which can occur when using standard throughput-based RR strategies.
- Image-space guiding buffer (ISGB):
- The ISGB can be used to store and approximate per-pixel guiding information (e.g., a pixel estimate used in guided Russian roulette).
The ISGB class (openpgl::cpp::util::ImageSpaceGuidingBuffer
) is defined in theopenpgl/cpp/ImageSpaceGuidingBuffer.h
header file.
The support can be enabled using theOPENPGL_EF_IMAGE_SPACE_GUIDING_BUFFER
CMake option.
- The ISGB can be used to store and approximate per-pixel guiding information (e.g., a pixel estimate used in guided Russian roulette).
- Radiance Caching (RC):
-
API changes:
pgl_direction
: A new wrapper type for directional data. When using C++pgl_direction
can directly be assigned by and topgl_vec3f
.pgl_spectrum
: A new wrapper type for spetral (i.e., linear RGB) data. When using C++pgl_spectrum
can directly be assigned by and topgl_vec3f
.SampleData
:- New enum
EDirectLight
flag that identifies if the radiance stored in this sample comes directly from an emitter (e.g., emissive surface, volume, or light source). direction
: Changes the typepgl_vec3f
topgl_direction
.
- New enum
ZeroValueSampleData
: This new structure is a simplified and more compact representation of theSampleData
struct representing a zero-value sample. It contains the following members:position
: The position of the sample (typepgl_point3f
).direction
: The incoming direction of the sample (typepgl_direction
).volume
: If the sample is a volume sample (typebool
).
SampleStorage
: To add, query, and get the number ofZeroValueSampleData
, the following functions were added.AddZeroValueSample
andAddZeroValueSamples
: These functions add one or multipleZeroValueSampleData
.GetSizeZeroValueSurface
andGetSizeZeroValueVolume
: These functions return the number of collected/stored surface or volumeZe1roValueSampleData
.GetZeroValueSampleSurface
andGetZeroValueSampleVolume
: Return a givenZeroValueSampleData
from either the surface or volume storage.
-
API changes (
OPENPGL_EF_RADIANCE_CACHES=ON
):
When the RC feature is enabled, additional functions and members are available for the following structures:-
SurfaceSamplingDistribution
:IncomingRadiance
: The incoming radiance estimate arriving at the current cache position from a specific direction.OutgoingRadiance
: The outgoing radiance at the current cache position to a specific direction.Irradiance
: The irradiance at the current cache position and for a given surface normal.
-
VolumeSamplingDistribution
:IncomingRadiance
: The incoming radiance estimate arriving at the current cache position from a specific direction.OutgoingRadiance
: The outgoing radiance at the current cache position to a specific direction.InscatteredRadiance
: The in-scattered radiance at the current cache position to a specific direction and for a given HG mean cosine.Fluence
: The volume fluence at the current cache position.
-
SampleData
:radianceIn
: The incoming radiance arriving at the sample position fromdirection
(typepgl_spectrum
).radianceInMISWeight
: The MIS weight of theradianceIn
if the source of it is a light source, if not it is1.0
(typefloat
).directionOut
: The outgoing direction of the sample (typepgl_direction
).radianceOut
: The outgoing radiance estimate of the sample (typepgl_direction
).
ZeroValueSampleData
:
-directionOut
: The outgoing direction of the sample (typepgl_direction
). -
-
API changes (
OPENPGL_EF_IMAGE_SPACE_GUIDING_BUFFER=ON
):
When the ISGB feature is enabled, additional functions and members are available for the following structures:-
ImageSpaceGuidingBuffer
: This is the main structure for storing image-space, per-pixel guiding information approximated from pixel samples.
-AddSample
: Add a pixel sample of typeImageSpaceGuidingBuffer::Sample
to the buffer.Update
: Updates the image-space guiding information/approximations from the previously collected samples (e.g., denoises the pixel contribution estimates using OIDN). For efficiency reasons, it makes sense not to update the buffer after every rendering progression but in an exponential fashion (e.g., at progression2^0
,2^1
,...,2^N
).IsReady
: If the ISGB is ready (i.e., at least oneUpdate
step was performed).GetPixelContributionEstimate
: Returns the pixel contibution estimate for a given pixel, which can be used, for example, for guided RR.Reset
: Resets the ISGB.
-
ImageSpaceGuidingBuffer::Sample
: This structure is used to store information about a per-pixel sample that is passed to the ISGB.contribution
: The contribution estimate of the pixel value of a given sample (typepgl_vec3f
).albedo
: The albedo of the surface or the volume at the first scattering event (typepgl_vec3f
).normal
: The normal at the first surface scattering event or the ray dairection towards the camers if the first event is a volume event (typepgl_vec3f
).flags
: Bit encoded information about the sample (e.g., if the first scattering event is a volume eventSample::EVolumeEvent
).
-
-
Optimizations:
- Compression for spectral and directional:
To reduce the size of theSampleData
andZeroValueSampleData
data types it is possible to enable 32-Bit compression, which is mainly adviced when enabling the RC feature viaOPENPGL_EF_RADIANCE_CACHES=ON
.OPENPGL_DIRECTION_COMPRESSION
: Enables 32-Bit compression forpgl_direction
.OPENPGL_RADIANCE_COMPRESSION
: Enables 32-Bit compression forpgl_spectrum
.
- Compression for spectral and directional:
-
Bugfixes:
- Numerical accuracy problem during sampling when using parametric mixtures.
-
Platform support:
- Added support for Windows on ARM (by Anthony Roberts PR17). Note: Requires using LLVM and
clang-cl.exe
as C and C++ compiler.
- Added support for Windows on ARM (by Anthony Roberts PR17). Note: Requires using LLVM and