- Fix artifacts when sampling AMR volume
- Fix used element size in copyDeviceBufferToHost
- Fix corner case when sampling AMR blocks at exactly the upper bound
- Minimum CMake version is now v3.10
- Minimum ISPC version is now v1.30.0
- Superbuild updates to latest versions of dependencies
- Removed ISPC runtime dependency and level zero loader requirement
- Add DEPENDENTLOADFLAG linker parameter for Windows binaries, restricting DLL loading behavior
- Superbuild updates to latest versions of dependencies
- This Open VKL release adds support for Intel® Arc™ GPUs, Intel® Data Center
GPU Flex Series and Intel® Data Center GPU Max Series through SYCL.
- The SYCL support of Open VKL is in beta phase. Current functionality, quality, and GPU performance may not reflect that of the final product.
- Open VKL CPU support in this release remains at Gold level, incorporating the same quality and performance as previous releases.
- API changes:
- Handle types are now passed by pointer in the following APIs:
vklComputeSample*()vklComputeGradient*()vklGet*IteratorSize*()vklInit*Iterator*()vklIterate*()
vklLoadModule()has been removed; compile-time linkage to an Open VKL device implementation (cpuorgpu) is now required- Added
vklInit()API, which must be called to initialize the library VKL_FILTER_[TRILINEAR,TRICUBIC]are renamed toVKL_FILTER_[LINEAR,CUBIC]VKLAMRMethodenum is nowuint32_tstructuredSphericalvolumes: thegridSpacingdefault now results in the volume occupying a full sphere
- Handle types are now passed by pointer in the following APIs:
- Added new examples demonstrating GPU usage:
vklExamplesGPUandvklTutorialGPU - Superbuild updates to latest versions of dependencies
- Move to and require latest versions of RenderKit dependencies: Embree v4.0.0 and rkcommon v1.11.0
- ARM support: expose ISPC neon-i32x8 target via OPENVKL_ISA_NEON2X CMake option
- Superbuild updates to latest versions of dependencies
- Superbuild updates to latest versions of dependencies
- Note that the update to zlib v1.2.13 remedies CVE-2022-37434
- Added AVX512 8-wide CPU device mode, enabled via the
OPENVKL_ISA_AVX512SKX_8_WIDECMake option - VDB volumes: added support for packed / contiguous data layouts for
temporally constant volumes, which can provide improved performance
(
nodesPackedDense,nodesPackedTileparameters) - VDB utility library: added
repackNodesflag to toggle usage of packed data layouts - Particle volumes: general memory efficiency and performance improvements
- Superbuild updates to latest versions of dependencies
- Minimum ISPC version is now v1.18.0
- Added
vklSetParam()API function which can set parameters of any supported type - Structured regular volumes:
- Added support for cell-centered data via the
cellCenteredparameter; vertex-centered remains the default - Added support for more general transformations via the
indexToObjectparameter - Added
indexOriginparameter which applies an index-space vec3i translation
- Added support for cell-centered data via the
- VDB volumes:
- Added
indexClippingBoundsparameter, which can restrict the active voxel bounding box - The
indexToObjectparameter can now be provided as aVKL_AFFINE3F - Corrected bounding box computations in
InnerNodeobserver
- Added
- Particle volumes:
- Now ignoring particles with zero radius
- VDB utility library: added
commitflag (default true) to volume creation methods, allowing apps to set additional parameters before first commit - Examples:
- Added new set of minimal examples, which step through creation of basic volume and isosurface renderers
- Exposing
intervalResolutionHintparameter invklExamplesapplication
- Superbuild updates to latest versions of dependencies
- vklExamples improvements: asynchronous rendering, multiple viewports, docking, and more
- Fixed bug in
openvkl_utility_vdbwhich could lead to crashes when creating VDB volumes with temporally constant tiles - Superbuild updates to latest versions of dependencies
- Minimum rkcommon version is now 1.8.0
- Fixed issue in
structuredRegularandvdbinterval iterators that could lead to erroneous initial intervals for certain ray inputs - Fixed handling of
intervalResolutionHintinterval iterator context parameter foramr,particle, andunstructuredvolumes with small numbers of cells / primitives
- The version 1.0 release marks long term API stability (until v2.0)
- Open VKL can now be built for ARM CPUs that support Neon
- Iterator API updates:
- Introducing interval and hit iterator contexts, which hold iterator-specific configuration (eliminates value selector objects)
- Interval and hit iteration is now supported on any volume attribute
- Interval iterators now include a
timeparameter - Interval iterators now support the
intervalResolutionHintparameter, replacingmaxIteratorDepthandelementaryCellIteration
- Supporting configurable background values; default is now
VKL_BACKGROUND_UNDEFINED(NaN) for all volume types vklGetValueRange()now supports all volume attributes- Added ISPC-side API bindings for
vklGetNumAttributes()andvklGetValueRange() - Structured regular volumes:
- Added support for tricubic filtering
- More accurate gradient computations respecting filter mode
- Hit iteration robustness improvements
- VDB volumes:
- Interval and hit iteration robustness improvements
- Corrected interval iterator
nominalDeltaTcomputation for non-normalized ray directions and non-uniform object-space grid spacings - Fixed bug which could cause incorrect value range computations for temporally varying volumes
- vklExamples additions demonstrating:
- Multi-attribute interval / hit iteration
- Configurable background values
- Temporally varying volumes
- Superbuild updates to latest versions of dependencies
- Now requiring minimum versions:
- Embree 3.13.1
- rkcommon 1.7.0
- ISPC 1.16.0
- Driver (now device) API changes:
- Renamed
VKLDrivertoVKLDeviceand updated associated device setup APIs - Use of multiple concurrent devices is now supported; therefore
vklNewVolume()andvklNewData()now require a device handle - Renamed the
ispc_devicemodule andispcdevice tocpu_deviceandcpu, respectively - The
OPENVKL_CPU_DEVICE_DEFAULT_WIDTHenvironment variable can now be used to change thecpudevice's default SIMD width at run time
- Renamed
- Added new
VKLTemporalFormatenum used for temporally varying volume parameterization - VDB volumes:
- Support for temporally structured and temporally unstructured (TUV) attribute data, which can be used for motion blurred rendering
- Supporting tricubic filtering via
VKL_FILTER_TRICUBICfilter type - Added support for half precision float-point (FP16) attribute data via
VKL_HALFdata type - Added a new
InnerNodeobserver and associated utility functions which allows applications to introspect inner nodes of the internal tree structure, including bounding boxes and value ranges - Renamed
VKL_FORMAT_CONSTANT_ZYXtoVKL_FORMAT_DENSE_ZYX
- Structured regular and spherical volumes:
- Added support for half precision float-point (FP16) attribute data via
VKL_HALFdata type
- Added support for half precision float-point (FP16) attribute data via
- Unstructured volumes:
- Added support for elementary cell iteration via the
elementaryCellIterationparameter - Robustness improvements for hit iteration
- Added support for elementary cell iteration via the
- AMR volumes:
- Improved interval iterator implementation, resolving issues with
returned interval
nominalDeltaTvalues - Interval iterators now support
maxIteratorDepthparameter
- Improved interval iterator implementation, resolving issues with
returned interval
- Interval and hit iteration performance improvements when multiple values ranges / values are selected
- Added new temporal compression utilities which applications can use for processing temporally unstructured attribute data
- vklExamples additions demonstrating:
- Motion blurred rendering on temporally structured and temporally
unstructured
vdbvolumes - Tricubic filtering on
vdbvolumes - Half-precision floating-point (FP16) support for
structuredRegular,structuredSpherical, andvdbvolumes - Elementary cell interval iteration on
unstructuredvolumes - Use of the
InnerNodeobserver onvdbvolumes
- Motion blurred rendering on temporally structured and temporally
unstructured
- Superbuild updates to:
- Embree 3.13.0
- rkcommon 1.6.1
- Minimum rkcommon version is now 1.6.1
- Fixed bug in VDB volume interval iterator implementation which could lead to missed intervals or incorrect value ranges in returned intervals
- Added support for temporally varying volumes with associated API changes for sampling, gradients, and hit iteration. This feature can be used to enable motion blurred rendering
- Structured regular volumes:
- Support for temporally structured and temporally unstructured (TUV) input data
- Improved
nominalDeltaTfor interval iteration - Interval iterator robustness improvements for axis-aligned rays
- Sampling performance improvements
- VDB volumes:
- Multi-attribute support (including three-component float grids)
- Interval iterator robustness improvements for axis-aligned rays
- Performance improvements for scalar sampling
- Now restricting volumes to exactly four levels
- Allowing leaf nodes on the lowest level only
- Unstructured volumes:
- Improved
nominalDeltaTfor interval iteration
- Improved
vdb_utilupdates:- Support for loading multi-attribute .vdb files (
floatandVec3sgrids) - Fix order of rotation matrix coefficients loaded from .vdb files
- Support for loading multi-attribute .vdb files (
- vklExamples additions demonstrating:
- Motion blurred rendering on temporally structured and temporally
unstructured volumes (
structuredRegularonly) - Support for
vdbmulti-attribute volumes - Hit iterator time support
- Motion blurred rendering on temporally structured and temporally
unstructured volumes (
- Superbuild updates to:
- Embree 3.12.2
- rkcommon 1.6.0
- ISPC 1.15.0
- OpenVDB 8.0.0
- Minimum rkcommon version is now 1.6.0
- Introduced API support for multi-attribute volumes, including APIs for
sampling multiple attributes simultaneously
- Initially only
structuredRegularandstructuredSphericalvolume types support multi-attribute data
- Initially only
- Iterator APIs now work on sampler objects rather than volumes, supporting finer-grained configurability
- Observers can now be created for both volume and sampler objects
LeafNodeAccessobservers must now be created on sampler objects
- Log and error callbacks now support a user pointer
vdbvolume interval iterators:- Added support for elementary cell iteration when
maxIteratorDepthis set toVKL_VDB_NUM_LEVELS-1 - Up to 2x faster iteration
- Added support for elementary cell iteration when
unstructuredandparticlevolume interval iterators:- Improved interior empty space skipping behavior
- Added support for configurable iterator depth via the
maxIteratorDepthparameter
- Added support for filter modes in
structuredRegularandstructuredSphericalvolumes amrvolumes now supportmethodparameter on sampler objects- Added new
interval_iterator_debugrenderer invklExamplesto visualize interval iteration behavior - Hit iterator accuracy improvements for
unstructuredvolumes - Fixed bugs in
amrandvdbvolume bounding box computations - Fixed bug in
unstructuredvolume gradient computations near empty regions - Minimum ISPC version is now v1.14.1
- Added new
particlevolume type supporting Gaussian radial basis functions - Introduced
VKLSamplerobjects allowing configuration of sampling and gradient behavior - Added stream-wide sampling and gradient APIs
- Introduced a new way to allocate iterators, giving the user more freedom in choosing allocation schemes and reducing iterator size
- Added support for strided data arrays
- Added gradient implementations for
amrandvdbvolumes - Hit iterator accuracy improvements for
amr,structuredSpherical,unstructured, andvdbvolumes - Up to 4x performance improvement for
structuredRegularandstructuredSphericalsampling for volumes in the 1-2GB range - Up to 2x performance improvement for
structuredRegularinterval iteration - Improved commit speed for
unstructuredvolumes - Improved value range computation in
vdbvolumes - Improved isosurface shading in
vklExamples - Improved parameter validation across all volume types
- Aligned
VKLHit[4,8,16]andVKLInterval[4,8,16]structs - Added hit epsilon to
VKLHit[4,8,16] - Updated parameter names for
vdbvolumes - Renamed
VKLVdbLeafFormattoVKLFormat - Fixed incorrect use of system-installed CMake in superbuild while building dependencies
- Fixed various memory leaks
- Fixed crashes which could occur in
VdbVolume::cleanup()andvklShutdown() - Moved from ospcommon to rkcommon v1.4.1
- Added support for VDB sparse structured volumes (
"vdb"volume type) - Added
vdb_utillibrary to simplify instantiation of VDB volumes, and support loading of .vdb files using OpenVDB - Added
VKLObserverand associated APIs, which may used by volume types to pass information back to the application- A
LeafNodeAccessobserver is provided for VDB volumes to support on-demand loading of leaf nodes
- A
- Structured regular volumes:
- Up to 6x performance improvement for scalar iterator initialization
- Up to 2x performance improvement for scalar iterator iteration
- General improvements to the CMake Superbuild for building Open VKL and all associated dependencies
- Allowing instantiation of ISPC driver for any supported SIMD width (in addition to the default automatically selected width)
- Volume type names are now camelCase (legacy snake_case type names are
deprecated), impacting
structuredRegularandstructuredSphericalvolumes - Enabling
flushDenormalsdriver mode by default - Aligning public
vkl_vvec3f[4,8,16]andvkl_vrange1f[4,8,16]types - Added
VKL_LOG_NONElog level - Fixed bug in
vklExampleswhich could lead to improper rendering on macOS Catalina - Fixed bug in unstructured volume interval iterator which could lead to errors with some combinations of lane masks
- Now providing binary releases for Linux, macOS, and Windows
- Added support for structured volumes on spherical grids
(
"structured_spherical"volume type) - Structured regular volumes:
- Up to 8x performance improvement for scalar (single-wide) sampling
- Fixed hit iterator bug which could lead to isosurfacing artifacts
- Renamed
voxelDataparameter todata
- Unstructured volumes:
- Up to 4x performance improvement for scalar (single-wide) sampling
- Improved interval iterator implementation for more efficient space skipping and tighter value bounds on returned intervals
- Now using Embree for BVH builds for faster build times / volume commits
- Renamed
vertex.valueandcell.valueparameters tovertex.dataandcell.data, respectively
- AMR volumes:
- renamed
block.cellWidthparameter tocellWidth, and clarified API documentation
- renamed
- Added
vklGetValueRange()API for querying volume value ranges - Added new driver parameters, APIs, and environment variables allowing user control of log levels, log / error output redirection, number of threads, and other options
vklIterateHit[4,8,16]()andvklIterateInterval[4,8,16]()calls now only populate hit / interval data for active lanes- Changed
VKLDataTypeenum values for better forward compatibility - ISPC-side hit and interval iterator objects must now be declared
varying - More flexible ISA build configuration through
OPENVKL_MAX_ISAandOPENVKL_ISA_*CMake build options - Minimum ospcommon version is now 1.1.0
- Initial public alpha release, with support for structured, unstructured, and AMR volumes.