Release history

v0.18.1 - 2024-03-09


  • Intel Open Image Denoiser libraries: HDR/LDR, supporting RGB/Albedo/Normal inputs.

  • 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).


  • Reviewed and improved camera kernels.


  • Require min SM 5.0 instead of 6.0.

  • Minor lighting issues with masked transparency materials.

v0.17.1 - 2023-10-06


  • Noise-balanced work distribution: absolute and relative noise modes.

v0.17.0 - 2023-08-18


  • Noise-balanced work distribution.

v0.16.1 - 2023-06-04

NOTE: Binaries recompiled with OptiX 7.7, NVIDIA driver r530 or above is required.


  • 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

v0.16.0 - 2023-05-17


  • set texture data from pytorch tensors

  • texture filter modes enabled, default is trilinear, optionally can be changed to nearest

  • set geometry data directly from numpy array or pytorch tensor (no host copy is mada)

  • 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()

v0.15.1 - 2023-03-16


  • OpenCV-like intrinsic matrix in camera setup

  • configurable denoiser start frame


  • ovrlaping refractive volumes handling

v0.15.0 - 2022-12-30

NOTE: NVIDIA driver r520 or above is required.


  • AI upsampler and HDR denoiser

  • Catmull-Rom curve primitive


  • binaries updated to OptiX 7.6

  • raytracing and callbacks workflow explained in the docs

v0.14.4 - 2022-10-27


  • packages updated to VS 2022, DllExport changed to the one by 3F

  • code updated to support pythonnet 3.0, thus compatible with all pythons up to 3.10

v0.14.3 - 2022-08-13

NOTE: NVIDIA driver r515 or above is required.


  • updated to use OptiX 7.5 (performance improvements are in, new features in the next release),

  • PTX replaced with IR format, generated with CUDA 11.7

  • several multi-gpu improvements and fixes

v0.14.2 - 2021-10-10


  • fix crashes on pipeline compilation config changes

v0.14.1 - 2021-07-23


  • updated to use OptiX 7.3 (performance improvements are in, new features in the next release), PTX generated with CUDA 11.4

v0.14.0 - 2021-07-03


  • delete_geometry() method


  • all set_xxx methods available for geometries, cameras, lights, materials now can update also properties of existing objects; properties possible to update are listed in docs

  • improved triangulation of faces of uploaded mesh: all polygons without holes are handled


  • one shader per ptx to fix problems with 471.11 driver

v0.13.3 - 2021-03-08


  • option to save abedo and normal buffers also when they are not required by the denoiser

  • edge id and edge vertex id for graphs encoded in hit_info in the same was as face id and vertex id for meshes

  • improved speed of selecting unique edges in the mesh

  • specialized support for the coverage estimation in mobile communications

  • improved docs

v0.13.2 - 2020-12-21


  • camera projection modes with ray origins and ray directions/targets defined with textures

v0.13.1 - 2020-12-21

This is PyPI-only release that fixes bug in binaries packaging.

v0.13.0 - 2020-12-21


  • improved memory model: some buffers are not allocated until needed, host memory is used if no space on device

  • support for 8 bit per channel textures (previously all textures converted to 32 bit fp)

  • custom projection camera with ray target positions provided in a texture

  • minimum ray tracing size can be even 1 pixel now

v0.12.0 - 2020-11-17


  • make_material method for easy configuration of material shaders

  • metalness and metalness texture support

  • enable changes of material in geometry update methods (why it was not possible before…?)

v0.11.1 - 2020-10-21

Code updated to OptiX 7.2. This is a minor step, preparing for the new features of the low level library.


  • bug when new geometry families were added dynamically, e.g. b-splines to the scene with meshes only

  • bug in deserialization of bezier and bspline geometries

v0.11.0 - 2020-09-27


  • direct access to internal geometry buffers (memory shared with ndarrays on the python side)

  • graph / mesh wireframe geometry, available also for all surface plots

  • m_shadow_catcher, material useful for preparation of packshot style images


  • clear the shader compilation cache on installing (incompatible code was surviving updates)

  • several fixes in b-splines geometry

v0.10.1 - 2020-08-30


  • enabled orthogonal projection camera


  • crash on empty geometries that appeared with the driver 452

v0.10.0 - 2020-08-17


  • fisheye camera, custom projection camera

  • thin lens and fisheye camera variants supporting chromatic aberration (transverse and longitudinal)

  • zero-copy access to device buffers wrapped in ndarrays: 8/32bps image, hit and object info, albedo, normals

  • configurable denoiser inputs: rgb-only, rgb+albedo, rgb+albedo+normals


  • more accurate light dispersion

v0.9.0 - 2020-07-20

NVIDIA driver >= 450 is required to run this release.


  • enabled normal buffer in AI denoiser

  • new geometries for curves: BSplineQuad and BSplineCubic approximating data points, SegmentChain for a piecewise-linear plot


  • update to OptiX 7.1 SDK and CUDA 11 (note: CUDA toolkit is not required in your system to run PlotOptiX)

v0.8.2 - 2020-07-12


  • method to update parallelogram light using center/target 3D points and scalar lengths of u/v sides (missing in v0.8.0)


  • lower memory usage on both host and gpu

  • tested with pythonnet 2.5.1 and Mono 6.x - linux installation made easier

v0.8.1 - 2020-06-14


  • camera mode for baking 360 degree panoramic views

  • support 16 bit per channel and hdr (32 bit fp per channel) output to image files and ndarray

  • support reading hdr images


  • correct light emission in volumes

  • fix restoring scene global variables from json

  • more verbose messaging on initialization problems

  • fix camera switching when ray generation program changes

v0.8.0 - 2020-06-04


  • diffuse/reflective/plastic material transparency handled with alpha channel of textures

  • load multiple meshes from .obj with materials specified in a dictionary, and an option to select parent mesh (then transormations of parent are applied to children meshes as well)

  • setup parallelogram light using center/target 3D points and scalar lengths of u/v sides

  • method to select objects for manual manipulation in gui (if e.g. cannot click object invisible in the view)


  • scatterng in volumes: support enabled in background modes AmbientAndVolume, TextureFixed, and TextureEnvironment; subsurface color added to material parameters

  • keep_on_host argument of load_displacement() and load_normal_tilt() removed (value always set to false now; it was a bug in linux);

v0.7.2 - 2020-05-13


  • raw mesh geometry (defined explicitly with vertices, faces, normals, and uv mapping)

  • selection of devices


  • color range scaling for arrays of const coloe (utility function)

v0.7.1 - 2020-04-11


  • set/release gimbal lock in camera rotations

  • geometry scaling by vector and w.r.t. provided point

  • sub-launch loop breaking on UI events (e.g. camera rotation)


  • nan’s in mesh normal calculatons

  • improved bvh memory allocations can handle more primitives in data sets

  • texture values prescale when gamma is 1.0

v0.7.0 - 2020-03-27

PlotOptiX has moved to OptiX 7 framework in this version. This is a major change, basically a rewrite of entire ray-tracting engine, followed by several breaking changes in the Python API. Denoiser binaries included in GPU driver and improved compilation of shaders code are among advantages of the new framework. The long lasting issues with using PlotOptiX on some hardware configurations, related to the shader compilation should be resolved now.

OptiX 7 shifts significant parts of functionality to the application side. Multi-GPU support and most of the ray-tracting host state is now maintained by PlotOptiX code. Be warned that this code is fresh! If you spot problems, go ahead and submit issue to the tracker on GitHub.


  • no need to install denoiser binaries separately, no OptiX binaries shipped with PlotOptiX package (these libraries are now included in the GPU driver)

  • setup_denoiser() removed, denoising is now configured with add_postproc() method

  • uniform configuration of textures used by materials, geometries, background, etc., see load_texture() and set_texture_2d() methods

  • material textures are now referenced by texture name instead of full texture description included in the material definition

  • some of material properties names changed, see updated pre-defined materials

  • NormalTilt removed from GeomAttributeProgram, surface normals are modulated with material textures

  • tonal correction parameter tonemap_igamma (inverse value of gamma) changed to tonemap_gamma (gamma value)

  • JSON structure changed and not backward-compatible for several scene components, which means scenes saved with earlier releases wont load with v0.7.0


  • surface roughness textures

  • load_texture() method to facilitate reading textures from file

v0.5.2 - 2019-10-15


  • dependency on vcruntime140_1.dll in Windows binaries, introduced in v0.5.1 with the VS tools upgrade

v0.5.1 - 2019-09-27


  • ray tracing timeout parameter, use set_param(rt_timeout=n_ms) and get_param(“rt_timeout”)


  • timeout instead of freeze if stucked in the internal OptiX launch() function

  • default lighting was not initialized properly after refactoring made in v0.5.0

v0.5.0 - 2019-09-20


  • scene saving/loading in JSON file format or python’s dictionary (note, format is not finally freezed and may change on migration to OptiX 7)

  • callbacks re-configurable after initialization

  • load selected/all/merged objects from Wavefront .obj files

  • thin-walled material


  • load_mesh_obj() method renamed to load_merged_mesh_obj(); the new load_mesh_obj() loads meshes selected by the name or loads all meshes from the file with no merging

  • light shading mode configured with set_param() and get_param() methods

v0.4.8 - 2019-09-07


  • Oren-Nayar diffuse reflectance model (in addition to the default Lambertian), adjustable surface roughness

  • adjustable surface rougness also for metalic and dielectric (glass) materials, improved predefined materials


  • metalic and mirror materials use primitive colors to colorize the reflection (primitive color overrides surface albedo) so color data can be effectively used also with these materials

v0.4.7 - 2019-08-28


  • select and rotate/move/scale objects and lights in GUI with mouse (same as for the camera)

  • status bar in GUI, shows selected item, 2D/3D coordinates of the surface under the pointer, and FPS

  • method to set fixed size of the ray-tracing output in GUI (or go back to auto-fit to window size)

v0.4.6 - 2019-08-19


  • methods to rotate camera about given point, eye about target, target about eye, in local and global coordinates


  • calculate normal tilt on the fly in the surface displacement mode, speed not affected, much lower gpu memory footprint


  • normal tilt mode in textured parallelepipeds bug resulting with transparent walls in some configs

v0.4.5 - 2019-08-11


  • particles geometry with 3D orientation (so textures can be applied), textured glass color

  • shading normal tilt (particles, parallelograms, parellelepipeds, tetrahedrons) and surface displacement (particles) using texture data

  • overlay a texture in 2D postprocessing

v0.4.2 - 2019-07-23


  • method to get light source parameters in a dictionary

  • examples installer - so examples compatible with the recent PyPI release can be downloaded locally without cloning the repository


  • OptiX-CUDA interop: readback buffer pointer is now obtained for a single GPU in multi-GPU systems, this solves issue on multi-GPU systems

v0.4.1 - 2019-07-14


  • 2D color preprocessing utility

  • reading normalized images


  • read_image method name in linux library loader

v0.4.0 - 2019-07-06


  • AI denoiser

  • light dispersion in refractions

  • method to update material properties after construction

  • enable textured materials

  • utilities for reading image files to numpy array, support for huge tiff images (>>GB)


  • update of parallelogram light properties

  • selection of SM architecture

v0.3.1 - 2019-06-26


  • textured background (fixed texture or environment map, from numpy array or image file)

  • json converters for vector types (more compact scene description)


  • removed dependency on CUDA release, CUDA required for video encoding features only

v0.3.0 - 2019-06-09


  • linux support

  • parametric surface


  • update to NVIDIA Video Codec SDK 9.0 and FFmpeg 4.1

  • no need for CUDA_PATH environment variable

v0.2.2 - 2019-05-26


  • color calculation convenience method: scaling, exposure and inverted gamma correction

  • h.264 encoder profile and preset selection


  • major speed improvement in general, plus faser convergence in out of focus regions

  • refactoring for linux support


  • missing parallelogram support

v0.2.1 - 2019-05-19


  • OpenSimplex noise generator

  • basic interface to the video encoder (save video output to mp4 files)

  • save current image to file

v0.2.0 - 2019-05-12


  • RTX-accelerated mesh geometry for surface plots, reading 3D meshes from Wavefront .obj fromat

  • several configurable 2D postprocessing stages


  • bug on geometry update when data size was changed with u/v/w vectors not provided

v0.1.4 - 2019-04-25


  • methods to rotate geometry/primitive about provided 3D point

  • autogenerated documentation, improved and completed docstring in the code


  • use tuples instead of x, y, z arguments in rotation/move methods

v0.1.3 - 2019-04-19

Two weeks and some steps from the initial release. Starting changelog.


  • RTX-accelerated tetrahedrons geometry

  • generate aligned or randomly rotated data markers if some vectors are missing

  • methods to read back camera eye/target, light position, color and r/u/v

  • get_param() to read back the rt parameters

  • this changelog, markdown description content type tag for PyPI

  • use [Semantic Versioning](