Ver 7.00.06, API Version 5.02.00
Date - Jan 21, 2024
Features & Bugfixes
Plugin Categories API update:
Ability to return plugin classes belonging to more than one categoryLightLuminaire API update:
Added get scale because some lights may have different scale parameters.Removed all scanned materials (VRScans / BRDFScanned) licenses.
Added a new example showing how to rotate the geometry objects in a scene.
Improved the behavior and performance of operator "in" for plugins, classes,
categories and category in Python. Now "in" works for both keys and values.Added functions to read Scatter preset files.
Fixed a race condition in VRayRenderer::waitForRenderEnd() when called immediately
after committed changes when the renderer is in RENDERING_AWAITING_CHANGES state.
Previously the call could return immediately without waiting for the next state
transitions to occur.
Ver 7.00.03, API Version 5.00.00
Date - Oct 31, 2024
Highlights
- Python 3.12 binding.
- Node.js 20 binding.
- Arm64 Linux support.
- New sun and sky model.
- New API for reading preview data of LightLuminaire plugins (see below).
- New API for reading Gaussian Splat preview data (see below).
- Reworked the Plugin Categories API (see below).
- New improved UI Guides API.
- Native Support for Apple Silicon GPU hardware in Apple’s M1, M2, and M3 chips through the Metal API.
Features
- New API for reading preview data of LightLuminaire plugins:
- Bounding Box,
- Full array of the vertices of light convex hull,
- Full array of the vertex indices of the convex hull in consecutive triplets,
- New API for reading GeomGaussians (Gaussian Splat) data:
- Exposed positions and average colors corresponding to the Gaussian primitives and the preview bounding box of the Gaussian model.
- Reworked the Plugin Categories API:
[C++]- Added VRayRenderer::getPluginsOfCategories() methods.
- Added Plugin::getCategories() method.
[.Net] - Added VRayRenderer.GetPluginsOfCategories() methods.
- Added Plugin.GetCategories() method.
- XxxPluginCategory class types replaced by IXxxPluginCategory interfaces.
They are just marker (empty) interfaces so far.
Removed conversion operators from Plugin to plugin category types because Category interfaces are directly inherited now.
[Python] - Replaced renderer.classCategories dictionary with renderer.categories custom
dictionary-like object that supports access by both keys and attributes.
Added categories.getInstances() method accepting a sequence or sequences
of category objects (types) and returning plugins belonging to that categories.
Added support for the len() function. - Added category.getInstances() returning all plugins belonging to this category.
Added category.belongs() that could be used to check if a plugin or a class belongs to this category.
Category objects (which are dictionary-like maps of classes) now also support indexing (like lists and tuples) and the len() function in addition to access by keys and attributes.
Changed class.getCategories() to return a set of categories instead of a dictionary.
Added a similar plugin.getCategories() method.
Renamed category object names from modified Snake_case to PascalCase. - Changed renderer.clearAllPropertyValuesUpToTime() to accept a list of categories.
[Node.js] - Replaced renderer.classCategories simple object with renderer.categories custom one that supports for-of iteration and has a .length property.
Added categories.getInstances() method accepting an array or arrays of category objects (types) and returning plugins belonging to that categories.
Added .length property function. - Added category.getInstances() returning all plugins belonging to this category.
Added category.belongs() that could be used to check if a plugin or a class belongs to this category.
Category objects now also support indexing like arrays, have a .length property and support for-of iteration over classes.
Changed class.getCategories() to return an array of categories instead of an object with properties.
Added a similar plugin.getCategories() method.
Category objects can be compared with == and != .
Renamed category object names from modified Snake_case to PascalCase. - Changed renderer.clearAllPropertyValuesUpToTime() to accept an array of categories.
- [Python, Node.js] Removed VFBLayer.getValue() and setValue() methods and made property accessors throw on error.
- [Node.js] Removed VFBLayer.equals() method; VFBLayers can now compared with == and != .
- [Python, Node.js] Added class.getInstance() helper method.
- Added Light Path Expressions examples.
- Removed old Vector*Transform operators that were deprecated long ago.
- Removed deprecated signatures of copyPlugins.
- InteractiveStatistics:
- Added currentProgress member.
- Changed and updated computeDevicesMemUsage member
(removed the enum and replaced it with name strings).
- Added ISO value to AutoExposureResult for a V-Ray Physical Camera. The value calculated corresponds to the value used when auto exposure was enabled.
- [C++] Some plugin property getters and setters were changed to accept and return
PluginList (std::vector<Plugin>) instead of ValueList (std::vector<Value>).
General Plugin::setValue(propertyName, ValueList) and Plugin::getValueList() will still work and interoperate with the specialized getters and setters, though. - Updated ScannedMaterialParams and ScannedMaterialPreset.
- Removed deprecated Vector * Transform operators.
- Removed deprecated signatures of copyPlugins.
- Removed Low Priority option from the GPU Devices API.
Bugfixes
- [Python, Node.js] Fixed the name of WIRECOLOR render channel.
- Fixed an incorrect behaviour of applySettingsVFB() when there is a SettingsVFB plugin
with no vfb2_layers. - [Python] Fixed OCIOConfigurationData.
- [.Net] Fixed ScenePreview.GetInstancerParticles() method.
Ver 6.20.07, API Version 4.04.00
Date - Apr 11, 2024
Highlights
Partial USD Support (see below).
GeomScatter plugin and GeomUtils.readScatterData() function.
New VFB Layer Manger API.
Added Python 3.11 binding.
Added Node.js 18, Electron v23 and Electron v27 binding.
Updated copyPlugins between renderers API (see below).
Features
USD support in "read-only" mode via the VRayScene plugin,
Experimental, partial support, subject to change:
USD files can be loaded with VRayRenderer.load/loadScene(filename).Updated Util.copyPlugins():
Added new signatures with more informative pre- and post-create callbacks;
Added new signatures which allow copying plugins of a specified type;
Deprecated the function with the old signatures;
Bug fixing.
[Python] Added a new TransformList type (implemented as a dynamic array of
Transforms). Used it in GeomUtils.readScatterData()[Node.js] Added a new non-resizable TransformList type backed-up by
FloatList/Float32Array (accessible via the 'floatList' property).
Used it in GeomUtils.readScatterData()[Python] Added a new PluginList type (a dynamic array of Plugin instances).
Now getInstnces() returns a PluginList instead of python list.[Python] Added missing equality comparison to Plugin classes and categories.
(e.g. plugin.getClass() == renderer.classes.Node would work correctly now)[Node.js] Added a new array-like resizable PluginList type, a descendent of
Array. Now getInstnces() returns a PluginList instead of an array of plugins
but this should be transparent to the user in most cases.Read OpenColorIO data via OCIOConfigurationData type.
[C++, .Net] Added a VRayProfilerWrite callback/event for profiler output.
[.Net, Node.js] Added missing UIGuides string to propertyMeta.
Added methods/properties to VRayRenderer for enabling the Visual Debugger.
New auto-exposure and auto white balance algorithms implemented in the
SettingsCamera plugin.VFB zoom camera control with keyboard and mouse now works with CameraPhysical as well.
Added examples for vrscene export and pack assets, vrdata and vrfiles.
Exposed flags in RendererOptions for showing the VFB Pause, Update IPR,
CopyToHostFrameBuffer, AddLightMixREToScene and AddDenoiserREToScene buttons.
Added the ability to set user callbacks/event handlers for them.Removed padding between BitmapInfoHeader and actual bitmap pixel data in in-memory
BMPs created by compress/convertToBmp() function. Now the result is the same as
directly writing to a file. Also in-memory BMPs are now bottom-top with positive
height instead of top-bottom with negative height.Added GeomScatter, GeomEnmesh, Create-proxy-with-instancer-data and V-Ray Profiler
examples.[C++] Added PluginMeta.isValid() method.
Added an example to list GPU support of the V-Ray Plugin types and their parameters.
[C++] Added PluginTypeId. Now in addition to a name string, plugin types can be
referenced by an integer TypeId as well.[C++, .Net] Updated the ScenePreview class:
Added GeomInstancer data type,
Added getInstancerParticles() and a Particle struct,
Added getWorldBoundingBox() for all Object types,
Added getDecalSize() and getClipperSize().
[.Net] VRayRenderer.GetPlugin<T> now works with any parent type of the
actual plugin type or interface implemented by the plugin.[.Net] IPluginRef<T> interface now implements IPluginRef thus making it
implicitly convertible to IPluginRef.[.Net] Added two Box.Expand() methods to make the Box struct consistent with C++.
Added VRayRenderer.isFrameSkipped() helper function to check if the user
has clicked on the Stop button in VFB while rendering animation.
Bugfixes
Fixed a bug in consecutive calls for incremental vrscene file export where
if any of the calls had a non-empty list of explicit plugins, the list wasn't cleared
for the next export.[C++] Updated VRayServerInit to use VRAY_APPSDK_BIN and VRAY_SDK environment
variables to locate VRaySDKLibrary and V-Ray binary files.
Ver 6.10.07, API Version 4.02.00
Date - Apr 26, 2023
Highlights
- Added new functionality to copy plugins from one renderer to another
(or to the same one). See below.
Features
- Added Util.copyPlugins() smart and versatile helper function with support
for optional include and/or exclude lists and pre- and post-create callbacks.
Added examples. - VFB Debug shading (limited functionality)(WIP):
Global debug shading modes and Isolate selected mode for Node plugins and Lights. - Updated V-Ray Profiler:
Added custom metadata support and the ability to generate html files. - Added localization (vfbLanguage) support.
- Added VRayImage.load(filename) and VRayImage.loadSize(filename) static methods
to create a VRayImage from file or get the image dimensions contained in a file. - Added VRayImage.resize() method that suppercedes the old VRayImage.downscale().
fitIn(), fitOut() and cutIn() methods adapted to perform both down- and up-scale. - Added VRayImage.mulColor() method.
- [Node.js] VRayRenderer, VRayServer or ScannedMaterialInfo will now throw if
accessed after being closed instead of doing nothing. - [C++, .Net] Added asynchronous VRayRenderer.abort() method.
- [C++] Added macros indicating V-Ray and API versions.
- [Python] Changed the buffer/memoryview of typed lists (IntList, FloatList,
ColorList and VectorList) to be a simple byte array because it is much more
useful in exporters (file readers/writers, etc.).
memoryview.cast() can be used if other types are needed. - [Node.js] Added VRayRenderer.keepAlive() function to prevent the renderer from
premature garbage collection in some rare cases. - Added options for exporting .vrdata and .vrfiles
- [C++, .Net] Added Box.expand() methods.
- Allowed acquiring compute devices lists without a renderer instance.
- Added the "Test Resolution" function of VFB.
- Additional Color and AColor methos implemented.
- [C++, .Net] Added PropertyMeta.getElementType().
- Made plugin list properties in .Net more strictly typed.
- [TypeScript] Fixed auto-generated plugin property types.
- [C++, .Net] Added VRayRenderer.abort() method.
V-Ray Proxies support
- Added numFrames / hasVelocityChannel / hairVelocities / particleVelocities to
ProxyReadData. - VRayRenderer.createProxyFile() extended with support for instancer types and
Node as input.
Experimental (subject to changes)
- Added VRayImage.calculateWhiteBalanceMultiplier() method to allow alternative
white balance corrections as image post-processing.
Bugfixes
- [Node.js] Fixed a serious bug which resulted in a crash if async stuff
(events, callbacks) were used in a worker thread! - [Python] Fixed a bug in the slice getter of typed list (IntList, FloatList,
ColorList and VectorList) with step!=1 where instead of copying the items
from the source to the resultant list, items were copied back to the source
thus destroying it.
(Note that slice setters and bulk delete are not implemented yet.)
Ver 6.00.21, API Version 4.00.00
Date - 2 Nov, 2022
Highlights
- New easier to use Animation API
- Added Electron v16 binding
- Added Python 3.10 binding
- Added V-Ray Profiler
Features
- All language bindings now have Plugin property setter and getter methods with time parameter to easily set animation frames. The old API works as well
- If VRAY_APPSDK_BIN environment variable is set, use it to locate VRaySDKLibrary and V-Ray binary files (Then fallback to %VRAY_SDK%\bin and finally fallback to OS paths.)
- Added stripAlpha and flipImage parameters to VRayRenderer.getImage()
- Plugin property default values are now returned as native types instead of strings in meta info in the corresponding languages
- Added the ability to log messages into VFB
- Added getAliases() to PropertyMeta and PropertyRuntimeMeta that return property alias names
- Added Matrix(Vector) constructor to easily construct diagonal matrices
- [Node.js] Plugin classes can now be compared with operators == and === (previously only plugin instances could be compared that way)
- [C++] Implemented equality and inequality operators of Value, Color and AColor
- [Python, Node.js] Implemented single scripts to load binding modules
- [Node.js] Added for-of loop iterator to VRayRenderer.classes
- [Python] Changed Plugin string representation. Now it consists of "name", "type" and "value" properties and the string can be eval-ed
- Added VRayImage.toIntList() method and examples that convert BitmapBuffer to RawBitmapBuffer in vrscene files that use it
- Added toSRGB() and fromSRGB() helper functions to Color and AColor
- [GPU Device selection] Low priority can now be set for each device
- Added new functions to select devices to be used for denoising
- Added static version of getIESPrescribedIntensity to Util namespace
- Changed the default value of progressiveImageUpdatedHasBuffer and bucketReadyHasBuffer default value from true to false. Now ProgressiveImageUpdated and BucketReady events/callback won't contain images by default. You can use VRayRenderer.getImage() inside the callbacks (now this is recomended) or set the corresponding flag to restore old behavior
- Added VRayRenderer.setVRayProfiler(VRayProfilerSettings) function
Ver 5.20.20, API Version 3.10.00
Date - 3 Feb, 2022
Highlights
- Native Arm M1 and Mac OS BigSur support
- Added the Material Library
- New UV Texture Sampler
- Added Node.js v14, v16 and Electron v11 bindings. All are now context aware
- Added Python 3.9 binding
Features
- If VRAY_SDK environment variable is set, %VRAY_SDK%\bin is used to locate VRaySDKLibrary and V-Ray binary files by default
- Added BinUserAttributesWriter
- [Node.js] Added for-of loop iterator to VRayRenderer.plugins
- [Node.js, Electron] Binding modules are now context aware
- Added VRayRenderer.waitForVFBClosed() function
- Updated ScannedMaterialParams and ScannedMaterialPresets; removed their setDefaults() and reset() methods
- Added a confirmation dialogue for the VFB 'Clear image' action as well as functions to enable/disable it and get its state
- Added clearPropertyValuesUpToTime(double time, PluginCategories categories)
- [C++] Added Plugin value getters to the optional V-Ray SDK interoperability layer
- Added vfb.setProgressTextAndValue()
- [C++, .Net] Added setGUIMessageProcessing() to allow disabling internal VFB message pumping
- Added VRayRenderer::clearPropertyValuesUpToTime(double time, PluginCategories categories)
- Added VRayRenderer::getChangeIndex()
- Added useVfbLog flag to RendererOptions
- Added RenderElement::getMetadata()
- UV Texture Sampler: [C++ and C#] Added a new UVTextureSampler class. It can be used for sampling VRay texture plugins at different u-v points. Also the sampling does not require a rendering license as it does not start the whole rendering process. The sampler class is lightweight and fast to set up but note that it might not always return satisfying results when used with more complex texture plugins.
- Improved V-Ray Proxies support:
- Export hair and particle voxels from Plugin and MeshFileData input,
- Read and export the edge_visibility data and the voxel info channel to a mesh file,
- Faster execution speed of readFullData().
Version 5.10.01, API Version 3.00.00
Date - 5 Mar, 2021
Highlights
* New V-Ray VFB (codenamed VFB2).
* Share VRayRenderer instances among programming languages.
* [C++] Added move semantics to the Value type and the Plugin property setters.
C++11 is now required to use AppSDK in C++.
* Added Python 3.8 binding.
* Added .Net Core builds.
Features
* [VFB2] Added functions to get/set VFB2 settings as JSON.
* [VFB2] Added an update notification event/callback to VRayRenderer.
* [VFB2] Added LightMix Transfer To Scene event/callback to VRayRenderer.
* [VFB2] Added a flag to disable the VFB2 Transfer To Scene button to RendererOptions.
* [VFB2] Window handle functions:
- Added getNativeHandle(), getQWidget(), setNativeParentWindow(),
setQWidgetParent() and getMinimumSize();
- Marked getWindowHandle() and setParentWindow() as deprecated/obsolete.
* Added the ability to share the same VRayRenderer instance among different
programming languages:
- Added VRayRenderer.getInstanceHandle() method
(InstanceHandle read-only property in C#);
- Added VRayRenderer(instanceHandle) constructor.
* Added new checkDRHost(hostString) function that checks whether a VRayServer instance
is listening on a given host/port and returns info about it if it is.
* Filter the available CUDA and Optix devices in their corresponding get and set
functions;
* Exposed CUDA Compute Capability info.
* Added vfb.loadBackgroundImage() to load VFB CC background image.
* [Python] Completely removed old list wrapper type.
* denoiseNow() now accepts an optional "ready" callback function.
* [C++, .Net] Added two new methods get/setRenderSizes which get/set all ImageSize,
CropRegion and RenderRegion parameters and the state of the VFB region button state.
* Added VFB::clearImage() and VFB::resetState() methods.
* [C++] Added overloads with move semantics to loadAsText/appendAsText functions.
* [.Net] Added ToString() to Plugin and PluginRef.
* [.Net] Added GetHashCode() and Equals() methods, and operator== to PluginRef and PluginLink.
* Disallowed invalid characters in plugin names; Added allowInvalidCharactersInPluginNames
flag to RendererOptions to force old behavior and allow them.
* [.Net] Throw exception if creating a new plugin fails. In most cases it would happen
because of the new bad plugin name checks.
* [Node.js, Python] Changed vfb.saveImage to use the default ImageWriterOptions
if the user hasn't passed any options at all as it is in C++ and .Net
* Changed ImageWriterOptions in all languages to always set IWI_MULTI_CHANNEL
(i.e. produce a single multi-channel file if the file format supports it)
if the user hasn't passed any options at all as it is in C++ and .Net
* [Node.js, Python, Windows] Fixed setSDKLibraryPath() in Node.js and Python didn't work
with relative paths. Now it works with both absolute and relative paths.
Also full VRaySDKLibrary path is now returned by getSDKLibraryErrorString()
if the file has been found and loaded.
* Removed gpuPluginPath member from RendererOptions.
* [C++, .Net] Added callbacks for color corrections and compositing layer changes in VFB.
* [C++] Added the missing setValue(double) and getDouble methods to Plugin class.
* Added returning default values of TYPE_TEXTURE* plugin property types.
* Added Object Select render element.
* Added cameraName setters/getters to easily switch cameras which has the scene_name
property.
* [.Net] Replaced VRayImage.ToBitmapImage() with VRayImage.ToBitmapStream() in order
to avoid GDI+ dependency.
* Changed the current frame and time logic when rendering a sequence. Now the current
frame and time are changed before the wait for sequence continue is started.
VRayRenderer::getCurrentTime() and VRayRenderer::getCurrentFrame() now return
the time or frame number of the next frame that will be rendered in the sequence.
Also aborting the renderer while it is waiting to continue the sequence will
leave the next frame number as current time of the renderer.
Improved V-Ray Proxies support
* readFullData() and readPreviewData() added reading of the following data channels:
MeshObjectInfo, HairObjectInfo, ParticleObjectInfo, Hair geometry, Particle geometry,
GeometryVoxelsBBoxes, HairVoxelsBBoxes, ParticleVoxelsBBoxes
* New interfaces with ProxyReadParams input (which don't require creating a VRayRenderer)
for readFullData(), readPreviewData(), readPreviewGeometry(), readPreviewHair() and
readPreviewParticles()
* New interfaces with MeshFileData input (which don't require creating a VRayRenderer)
for createMeshFile() and createCombinedMeshFile()
* New interfaces with AnimatedTransform input for createMeshFile() and createCombinedMeshFile()
(transformations at corresponding keyframes which are written to the created file)
* readFullData() and readPreviewData() now contain start indices data,
indicating where the data belonging to the individual geometry / hair / particle voxel starts.
* readFullData() and readPreviewData() now return ObjectInfo containing the range of voxels
included in the corresponding geometry / hair / particle object.
Bugfixes
* [C++] Made callback setters and callback execution thread-safe.
* Fixed reading heterogeneous lists at different times when they were set from code.
* Fixed "progressiveImageUpdated" events not fired for lightcache updates in bucket
mode with render region set.
* When possible, preserve the type of plugin property numerical values
(bool/int/float/double) when they are set and read back from code.
* [.Net] Fixed a bug in Matrix.Transpose()
* [.Net] Fixed wrong output sizes of output downscaled images returned from some methods.