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.