Releases: rnd-team-dev/plotoptix
OptiX 9.1, CUDA 13.2
- Moved to OptiX 9.1, recompliled with CUDA 13.2 (note: minimal requirements are now driver r590 and compute capability 7.5).
- Improved/simplified callbacks logic:
rt_completedis now executed only after the last accumulation frame instead of every accumulation frame. Also, the video encoder adds frame to the output clip on the "accumulation done" signal instead of "launch finished". This allows for using all the work balancing modes in animation workflows, while it is still possible to configuremin_accumulation_step == max_accumulation_framesto get the same behavior as before. - Added function to get current noise level (value updated after each accumulation frame).
OptiX 9
-
Bokeh swirl and asymmetrical vignette in cameras with depth of field simulation, allowing for rendering vintage lens effects.
-
Roving capsules intersection mode added to curve geoms: BSplineQuadRocaps, BSplineCubicRocaps, CatmullRomRocaps, BezierRocaps,
significantly improving performance on a longer strand segments, see 2_beziers.py sample code. Minor improvemts on other curve
geom due to simplified vertex access code. -
HEVC codec support.
-
View orientation changes in GUI, per user request. F5-F8 will flip/rotate the view.
-
Moved to OptiX 9.0.
-
Moved to NVENC SDK 13.0. Note, preset names are changed accordingly to P1 - P7. Note: FFmpeg >= 8.0 shared libs are recommended.
-
Updated
GpuArchitectureenum: added Ada Lovelace and Blackwell architectures. -
Removed LDR denoiser based on OptiX driver (discontinued). Denoiser enum now points to DenoiserHDR. OIDN denoiser still supports LDR mode.
Dynamic sampling
- Reworked heuristics for the noise-balanced ray sampling.
NoiseBalancedwork distribution mode is now alias toAbsNoiseBalancedsince it turns more often practical in terms of visual result
and stable compute time.
IOIDN 2.3.1
- Intel denoiser libs updated to 2.3.1. Accumulation frames, before the final one, are denoised using the fast model, the final frame is denoised using the high quality / slower model.
- Several minor fixes and improvements.
OptiX 8.1 and ffmpeg 7
- Moved to OptiX 8.1.
- Encoder code upgraded to use FFmpeg 7.0; FFmpeg libs excluded from the Windows release (too large to keep them within the package).
OIDN denoiser, volume plots
- Included Intel Open Image Denoiser: HDR/LDR, supporting RGB/Albedo/Normal inputs.
- Switched to optional counting of transmission path segments (previously they were counted always and included in
the segment range limits). - Const-size geometry primitives (same radii, or u/v/w vectors for all data points) with much lower memory
consumption, beneficial e.g. for volume plots. - Volume coloring material for semi-transparent volume visualization (experimental).
Noise based work distribution modes
Work distribution has moved to a camera property. It is now possible to setup cameras with different modes and switch easyli.
Work distribution is now based on relative or absolute noise values.
See this example.
Noise-balanced sampling
Noise-balanced sampling is quite a nice feature. It took some more time to encode it, so the release is out not waiting for more features.
Sample code is in this notebook.
OptiX 7.7
NVIDIA driver r530 or above required
Code was moved to the new OptiX SDK and progresively new features should be covered. Also GPU-GPU transfers are evolving, now including CuPy arrays. In this release we have:
- CuPy support for texture and geometry data updates
- new curve geometries: Ribbon, Beziers
- no dedicated PyTorch/CuPy/... methods, all types handled with single corresponding method (it is a breaking change, that require minor code updates)
and more news is coming, check Patreon ;)
Updates of data on GPU.
This release introduces fast and simplified ways to copy data straight to device:
-
set texture data from pytorch tensors
-
texture filter modes enabled, default is trilinear, optionally nearest
-
set geometry data directly from numpy array or pytorch tensor (no host copy is made on the way)
-
synchronization method to update host copy with data from gpu:
NpOptiX.sync_raw_data() -
convenience method to get a copy of geometry data (more simple than PinnedBuffer, though returns a copy): NpOptiX.get_data()