Releases: owl-project/NVISII
Release v1.1
Changes Include:
nvisii.import_scene now imports constant colors tied to materials. Before, these constant material properties were accidentally ignored.
nvisii.import_scene no longer throws an exception when a degenerate transform is encountered. Instead, a warning message is printed when the verbose option is passed as an argument.
entity.set_visibility now accepts more specific options, enabling users to prevent objects from casting shadows (eg prevent windows from blocking light into interiors), prevent objects from being scene from the camera, in glass, in reflections, or during volumetric scattering. For more details, go here: https://nvisii.com/entity.html#nvisii.entity.set_visibility
An entity.get_center function was added, which returns the center of an entities bounding box. This is different from entity.get_centroid, which returns the average of all of the vertices of the mesh connected to an entity.
A performance regression has been fixed since the previous version that introduced volumes, since we no longer trace two rays to handle volume intersections vs surface intersections. Instead, volumes and surfaces now share the same acceleration structure, where volumes have a custom intersection program using delta tracking.
Volume rendering is much more robust now. Volumes can overlap other volumes. See the new volume example for more details.
Improvements to load balancing in the presence of multiple GPUs. Users should avoid mixing GPUs of different architectures together, as overhead can degrade performance, and older GPUs can force newer GPUs onto unoptimized code paths.
Bug fix to max bounce depth that was causing performance issues.
Release v1.0
Changes include:
Rebranding project from "visii" to "nvisii". The purpose of this rename is to help distinguish this project from the "visii" e-commerce library. "nvisii" tentatively stands for "NVIDIA Scene Imaging Interface".
This new release now supports different OptiX versions (currently from 7.0 to 7.2). The version of optix is specified with the minor version, so for this release, 1.0.70 would mean nvisii 1.0 built against optix 7.0. OptiX 7.0 supports older nvidia driver versions, and is more useful for scenarios like server environments where updating driver version is non-trivial. Newer optix versions support will support more features (on the roadmap are optix 7.2 curves).
Added the ability to configure the denoiser to enable or disable normal and albedo guides. For OptiX 7.2 builds, users can switch between a new KP denoiser (the AOV denoiser), and the original GAN style denoiser (the newer KP denoiser does a better job handling random colors and more "artificial" scenes).
Improvements and bug fixes to normal maps. Now, normal maps no longer result in black artifacts when sections oriented away from the camera are visible.
Texture scale now correctly corresponds to the size of the pattern. Larger scales result in larger patterns and vice versa. To "tile" a texture, set the scale to a value below 1. Flipping the texture along X or Y is also possible by specifying a negative scale value.
Improvements to lights. Now, light emission does not go to infinity as surfaces come to less than 1 meter in proximity to the light.
Added a "Volume" component. Still very much in beta. Entities can either have a Mesh or a Volume component attached, but not both. This is because both components implicitly represent each other (water tight meshes define an inside and outside volume, whereas dense locations in a volume implicitly define a surface).
These volumes can be made from a file (currently, only nanovdb ".nvdb" files are supported), from a set of predefined primitives (Sphere, Torus, Box, or Octahedron), or from a list of data values. The look of a volume can be controlled using a mix of the properties on the Volume component as well as the same Material component used for meshes. Volumes have a "set_gradient_factor" function, which if set to "1" makes the volume appear "surface like", and if set to "0" makes the volume act more "volumetric - like".
For Volumes with a high gradient factor, Material component properties like metallic, roughness, etc will have more influence. Lower gradient factor volumes are more influenced by the scattering and absorption fields on the volume (volume.set_scattering and volume.set_absorption). The "volume.set_scale" function controls how large a voxel is interpreted to be in meters. Small voxels contain fewer particles, and are therefore more transparent and cheaper to render. Large voxels have lots of particles, and appear more "opaque" and "detailed", but take longer to render.
Volumes with materials that are controlled by textures will sample those textures where the "u" coordinate corresponds to volume data value, and the "v" corresponds to gradient magnitude. These textures essentially act like 2D transfer functions for the volume.
Release v0.1.0 alpha 13
Includes a small patch to fix the following error:
[ 2][ ERROR]: "buildInputs[0].instanceArray", "numInstances" is non-zero, but "instances" is null
Optix call (optixAccelBuild(optixContext, 0, &accelOptions, &instanceInput,1, (CUdeviceptr)tempBuffer.get(), tempBuffer.size(), (CUdeviceptr)dd.bvhMemory.get(), dd.bvhMemory.size(), &dd.traversable, nullptr,0u )) failed with code 7001 (line 268)
terminate called after throwing an instance of 'std::system_error'
what(): Resource deadlock avoided
Aborted (core dumped)
Release v0.1.0 alpha 12
Significant Changes:
New scene importer through visii.import_scene that supports a larger variety of formats.
Added support for dds and ktx textures. (dds compressed textures are currently decompressed CPU side)
Textures that are not HDR are now uploaded to the GPU as 8 bytes per channel, saving memory. HDR textures are still uploaded as 32 bits per channel.
Textures can now be scaled using texture.set_scale() (useful for tiled textures)
New ways to create cameras from CV intrinsic properties.
New ways to interact with visii through window events.
Added ability to control light falloff.
Added ability to disable sampling the dome light for some specific ML applications.
Release v0.1.0 alpha 11
Small patch to Optix denoiser creation. Was previously not setting pixel format (required for Optix 7.0 denoiser)
Release v0.1.0 alpha 10
Changes include:
Lighting has changed significantly.
- Several bugs have been fixed which caused light intensity to grow darker as the number of emissive meshes increased.
- A bug which effected direct light visibility has been fixed. Previously, objects behind light sources would occasionally cast shadows
- light intensity is now normalized by default, and surface area only influences light intensity if enabled GI light.use_surface_area
- lights have an “exposure” which multiplies intensity by 2^exposure. This parameter can be used in combination with intensity to more effectively control light source power
- dome lights are now explicitly sampled at each path vertex
Changes to mesh components
- mesh.create_from_obj has been replaced with create_from_file, which includes a much larger variety of file formats
Changes to material components
- alpha transparency is now enabled, and can be used for alpha cutouts, making transmission more clear, scivis applications, etc
Changes to camera components
- create_perspective_from_fov has been renamed to create_from_fov
- new simple create function which matches create_from_fov with some default parameters set
Changes to texture components
- lots of new creation functions that can add and multiply two textures together
- new create function to edit HSV of an existing texture
- texture.create_from_image is renamed to create_from_file to match mesh component naming
Changes to global ViSII package
- new register_pre_render_callback function for registering a python function that is called before the next frame
- initialize_headless and initialize_interactive now merged into single initialize function
- initialize can now be used to control the number of allocated components of each type
- new enable/disable_updates functions to pause / resume asynchronous component uploads to the GPU. Useful for improving performance of bulk component creation
- can now render texture_coordinates using render_data function
General changes
- largely improved rendering performance
- some changes to report more useful device side crash messages
- deinitialize called automatically at exit if not done so already
Release v0.1.0 alpha 9
Possibly breaking changes include:
- mesh.create_from_data now requires lists of floats instead of list of visii.vec3/vec2. The number of floats per position can now be 3 or 4 (including or excluding the w component). See the updated documentation for details.
- material subsurface color now affects the appearance of subsurface and defaults to white. As a result, some objects using the subsurface attribute of materials will see a potentially unexpected change in the apparent base color. The previous behavior was incorrect though, and the current behavior is what was originally intended.
Additional features include:
- Added back get_world_position function, new get_world_right, forward, and up functions.
- Added a mesh.create_wireframe_bounding_box function, which is useful for debugging / visualizing
- Added a mesh.create_line function, which is similar to create_xyz_polyline but with a simpler interface
- Can now use a solid color dome light using visii.set_dome_light_color(v.vec3(r,g,b))
- Can now alter the procedural sky using visii.set_dome_light_sky. See docs for details.
- Added "verbose" flag to visii.initialize_headless and interactive functions to disable prints to console
Release v0.1.0 alpha 8
Changes include:
Now importance sampling dome lights and considering them when doing next event estimation.
Added the ability to increase the number of light samples per path vertex using visii.set_light_sample_count()
New "ray_direction" option for render_data
Motion blur can now be either relative or absolute. Relative motion blur occurs when using transform.set_xyz_velocity(), and is relative to the current position. Moving an object with relative motion blur preserves te direction of motion relative to the new position. Absolute motion blur on the other hand defines a unique transform for the frame at t = 0 and t = 1. To use absolute motion blur, all transform functions now take an optional "previous" flag. For example, to create absolute linear motion blur, do transform.set_position(v.vec3(...), previous = False), transform.set_position(v.vec3(...) + v.vec3(motion), previous = True),
Motion vectors now consider background movement. See the updated reprojection sample for how to use that.
Backend performance improvements when updating transform components.
Release v0.1.0 alpha 7
Changes include:
visii.cleanup() is now visii.deinitialize() to avoid confusion for new users.
visii.clear_all() clear's all component types. This should be a cleaner alternative to calling clear_all for every component type.
visii.render_data now works for "base_color" and "diffuse_motion_vector" options.
visii.render and visii.render_data now accept an optional "seed" argument, which can be used to make images unique.
visii.sample_pixel_area and visii.sample_time_interval can be used to control antialiasing and time sampling.
new example on using diffuse motion vectors for temporal reprojection
transforms attached to cameras now effect motion blur
stb images allocated when creating textures are now freed, improving host-side memory usage over time.
Moved to optix 7.1
Release v0.1.0 alpha 6
Patch to fix some memory issues with ViSII when running in headless mode