diff --git a/CHANGELOG.md b/CHANGELOG.md index caffb9aaee..957159dadb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,19 @@ Version History --------------- +### Changes in v1.4.2: + +- Several cleanups and bug fixes + - Fixed memory leak where the Embree BVH was never released when an + OSPModel was released + - Fixed a crash when API logging was enabled in certain situations + - Fixed a crash in MPI mode when creating lights without a renderer + - Fixed an issue with camera lens samples not initilized when spp <= 0 + - Fixed an issue in ospExampleViewer when specifying multiple data files +- The C99 tutorial is now indicated as the default; the C++ wrappers do not + change the semantics of the API (memory management) so the C99 version + should be considered first when learning the API + ### Changes in v1.4.1: - Several cleanups and bug fixes diff --git a/README.md b/README.md index 41f12779b7..41956c4868 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ OSPRay ====== -This is release v1.4.1 of OSPRay. For changes and new features see the +This is release v1.4.2 of OSPRay. For changes and new features see the [changelog](CHANGELOG.md). Also visit http://www.ospray.org for more information. @@ -166,8 +166,8 @@ way to configure OSPRay and to create the Visual Studio solution files: e.g. "Visual Studio 15 2017 Win64". - If the configuration fails because some dependencies could not be - found then follow the instructions given in the error message, e.g. - set the variable `embree_DIR` to the folder where Embree was + found then follow the instructions given in the error message, + e.g. set the variable `embree_DIR` to the folder where Embree was installed. - Optionally change the default build options, and then click @@ -186,7 +186,7 @@ console. In the Visual Studio command prompt type: cmake -G "Visual Studio 12 2013 Win64" [-D VARIABLE=value] .. cmake --build . --config Release -Use `-D` to set variables for CMake, e.g. the path to Embree with +Use `-D` to set variables for CMake, e.g. the path to Embree with "`-D embree_DIR=\path\to\embree`". You can also build only some projects with the `--target` switch. @@ -203,11 +203,11 @@ The following [API documentation](http://www.sdvis.org/ospray/download/OSPRay_readme.pdf "OSPRay Documentation") of OSPRay can also be found as a [pdf document](http://www.sdvis.org/ospray/download/OSPRay_readme.pdf "OSPRay Documentation") -(3.3MB). +(3.6MB). For a deeper explanation of the concepts, design, features and performance of OSPRay also have a look at the IEEE Vis 2016 paper -"[OSPRay – A CPU Ray Tracing Framework for Scientific +"[OSPRay -- A CPU Ray Tracing Framework for Scientific Visualization](http://www.sdvis.org/ospray/download/talks/IEEEVis2016_OSPRay_paper.pdf)" (49MB, or get the [smaller version](http://www.sdvis.org/ospray/download/talks/IEEEVis2016_OSPRay_paper_small.pdf) @@ -251,70 +251,70 @@ is important to note that the arguments passed to `ospInit()` are processed in order they are listed. The following parameters (which are prefixed by convention with "`--osp:`") are understood: -
Parameter | -Description | +Parameter | +Description |
---|---|---|---|
--osp:debug |
-enables various extra checks and debug output, and disables multi-threading | +--osp:debug |
+enables various extra checks and debug output, and disables multi-threading |
--osp:numthreads <n> |
-use n threads instead of per default using all detected hardware threads |
+--osp:numthreads <n> |
+use n threads instead of per default using all detected hardware threads |
--osp:loglevel <n> |
-set logging level, default 0 ; increasing n means increasingly verbose log messages |
+--osp:loglevel <n> |
+set logging level, default 0 ; increasing n means increasingly verbose log messages |
--osp:verbose |
-shortcut for --osp:loglevel 1 |
+--osp:verbose |
+shortcut for --osp:loglevel 1 |
--osp:vv |
-shortcut for --osp:loglevel 2 |
+--osp:vv |
+shortcut for --osp:loglevel 2 |
--osp:module:<name> |
-load a module during initialization; equivalent to calling ospLoadModule(name) |
+--osp:module:<name> |
+load a module during initialization; equivalent to calling ospLoadModule(name) |
--osp:mpi |
-enables MPI mode for parallel rendering with the mpi_offload device, to be used in conjunction with mpirun ; this will automatically load the "mpi" module if it is not yet loaded or linked |
+--osp:mpi |
+enables MPI mode for parallel rendering with the mpi_offload device, to be used in conjunction with mpirun ; this will automatically load the “mpi” module if it is not yet loaded or linked |
--osp:mpi-offload |
-same as --osp:mpi |
+--osp:mpi-offload |
+same as --osp:mpi |
--osp:mpi-distributed |
-same as --osp:mpi , but will create an mpi_distributed device instead; Note that this will likely require application changes to work properly |
+--osp:mpi-distributed |
+same as --osp:mpi , but will create an mpi_distributed device instead; Note that this will likely require application changes to work properly |
--osp:logoutput <dst> |
-convenience for setting where status messages go; valid values for dst are cerr and cout |
+--osp:logoutput <dst> |
+convenience for setting where status messages go; valid values for dst are cerr and cout |
--osp:erroroutput <dst> |
-convenience for setting where error messages go; valid values for dst are cerr and cout |
+--osp:erroroutput <dst> |
+convenience for setting where error messages go; valid values for dst are cerr and cout |
--osp:device:<name> |
-use name as the type of device for OSPRay to create; e.g. --osp:device:default gives you the default local device; Note if the device to be used is defined in a module, remember to pass --osp:module:<name> first |
+--osp:device:<name> |
+use name as the type of device for OSPRay to create; e.g. --osp:device:default gives you the default local device; Note if the device to be used is defined in a module, remember to pass --osp:module:<name> first |
--osp:setaffinity <n> |
-if 1 , bind software threads to hardware threads; 0 disables binding; default is 1 on KNL and 0 otherwise |
+--osp:setaffinity <n> |
+if 1 , bind software threads to hardware threads; 0 disables binding; default is 1 on KNL and 0 otherwise |
Type | -Name | -Description | +Type | +Name | +Description |
---|---|---|---|---|---|
int | -numThreads | -number of threads which OSPRay should use | +int | +numThreads | +number of threads which OSPRay should use |
int | -logLevel | -logging level | +int | +logLevel | +logging level |
string | -logOutput | -convenience for setting where status messages go; valid values are cerr and cout |
+string | +logOutput | +convenience for setting where status messages go; valid values are cerr and cout |
string | -errorOutput | -convenience for setting where error messages go; valid values are cerr and cout |
+string | +errorOutput | +convenience for setting where error messages go; valid values are cerr and cout |
int | -debug | -set debug mode; equivalent to logLevel=2 and numThreads=1 | +int | +debug | +set debug mode; equivalent to logLevel=2 and numThreads=1 |
int | -setAffinity | -bind software threads to hardware threads if set to 1; 0 disables binding omitting the parameter will let OSPRay choose | +int | +setAffinity | +bind software threads to hardware threads if set to 1; 0 disables binding omitting the parameter will let OSPRay choose |
Type | +Name | +Default | +Description | +
---|---|---|---|
vec2f | +voxelRange | ++ | minimum and maximum of the scalar values | +
bool | +gradientShadingEnabled | +false | +volume is rendered with surface shading wrt. to normalized gradient | +
bool | +preIntegration | +false | +use pre-integration for transfer function lookups | +
bool | +singleShade | +true | +shade only at the point of maximum intensity | +
bool | +adaptiveSampling | +true | +adapt ray step size based on opacity | +
float | +adaptiveScalar | +15 | +modifier for adaptive step size | +
float | +adaptiveMaxSamplingRate | +2 | +maximum sampling rate for adaptive sampling | +
float | +samplingRate | +0.125 | +sampling rate of the volume (this is the minimum step size for adaptive sampling) | +
vec3f | +specular | +gray 0.3 | +specular color for shading | +
vec3f | +volumeClippingBoxLower | +disabled | +lower coordinate (in object-space) to clip the volume values | +
vec3f | +volumeClippingBoxUpper | +disabled | +upper coordinate (in object-space) to clip the volume values | +
Type | +Name | +Default | +Description | +
---|---|---|---|
vec3i | +dimensions | ++ | number of voxels in each dimension (x, y, z) | +
string | +voxelType | ++ | data type of each voxel, currently supported are: | +
+ | + | + | “uchar” (8 bit unsigned integer) | +
+ | + | + | “short” (16 bit signed integer) | +
+ | + | + | “ushort” (16 bit unsigned integer) | +
+ | + | + | “float” (32 bit single precision floating point) | +
+ | + | + | “double” (64 bit double precision floating point) | +
vec3f | +gridOrigin | +(0, 0, 0) | +origin of the grid in world-space | +
vec3f | +gridSpacing | +(1, 1, 1) | +size of the grid cells in world-space | +
Type | -Name | -Default | -Description | +Type | +Name | +Default | +Description |
---|---|---|---|---|---|---|---|
vec3f | -gridOrigin | -(0, 0, 0) | -origin of the grid in world-space | +vec3f | +gridOrigin | +(0, 0, 0) | +origin of the grid in world-space |
vec3f | -gridSpacing | -(1, 1, 1) | -size of the grid cells in world-space | +vec3f | +gridSpacing | +(1, 1, 1) | +size of the grid cells in world-space |
string | -amrMethod | -current | -sampling method; valid values are "finest", "current", or "octant" | +string | +amrMethod | +current | +sampling method; valid values are “finest”, “current”, or “octant” |
OSPData | -brickInfo | -- | array of info defining each brick | +OSPData | +brickInfo | ++ | array of info defining each brick |
OSPData | -brickData | -- | array of handles to per-brick voxel data | +OSPData | +brickData | ++ | array of handles to per-brick voxel data |
Type | -Name | -Default | -Description | +Type | +Name | +Default | +Description |
---|---|---|---|---|---|---|---|
float | -radius | -0.01 | -radius of all spheres (if offset_radius is not used) |
+float | +radius | +0.01 | +radius of all spheres (if offset_radius is not used) |
OSPData | -spheres | -NULL | -memory holding the spatial data of all spheres | +OSPData | +spheres | +NULL | +memory holding the spatial data of all spheres |
int | -bytes_per_sphere | -16 | -size (in bytes) of each sphere within the spheres array |
+int | +bytes_per_sphere | +16 | +size (in bytes) of each sphere within the spheres array |
int | -offset_center | -0 | -offset (in bytes) of each sphere's "vec3f center" position (in object-space) within the spheres array |
+int | +offset_center | +0 | +offset (in bytes) of each sphere’s “vec3f center” position (in object-space) within the spheres array |
int | -offset_radius | --1 | -offset (in bytes) of each sphere's "float radius" within the spheres array (-1 means disabled and use radius ) |
+int | +offset_radius | +-1 | +offset (in bytes) of each sphere’s “float radius” within the spheres array (-1 means disabled and use radius ) |
vec4f[] / vec3f(a)[] | -color | -NULL | -data array of colors (RGBA/RGB), color is constant for each sphere | +vec4f[] / vec3f(a)[] | +color | +NULL | +data array of colors (RGBA/RGB), color is constant for each sphere |
vec2f[] | -texcoord | -NULL | -data array of texture coordinates, coordinate is constant for each sphere | +vec2f[] | +texcoord | +NULL | +data array of texture coordinates, coordinate is constant for each sphere |
Type | -Name | -Default | -Description | +Type | +Name | +Default | +Description |
---|---|---|---|---|---|---|---|
float | -radius | -0.01 | -radius of all cylinders (if offset_radius is not used) |
+float | +radius | +0.01 | +radius of all cylinders (if offset_radius is not used) |
OSPData | -cylinders | -NULL | -memory holding the spatial data of all cylinders | +OSPData | +cylinders | +NULL | +memory holding the spatial data of all cylinders |
int | -bytes_per_cylinder | -24 | -size (in bytes) of each cylinder within the cylinders array |
+int | +bytes_per_cylinder | +24 | +size (in bytes) of each cylinder within the cylinders array |
int | -offset_v0 | -0 | -offset (in bytes) of each cylinder's "vec3f v0" position (the start vertex, in object-space) within the cylinders array |
+int | +offset_v0 | +0 | +offset (in bytes) of each cylinder’s “vec3f v0” position (the start vertex, in object-space) within the cylinders array |
int | -offset_v1 | -12 | -offset (in bytes) of each cylinder's "vec3f v1" position (the end vertex, in object-space) within the cylinders array |
+int | +offset_v1 | +12 | +offset (in bytes) of each cylinder’s “vec3f v1” position (the end vertex, in object-space) within the cylinders array |
int | -offset_radius | --1 | -offset (in bytes) of each cylinder's "float radius" within the cylinders array (-1 means disabled and use radius instead) |
+int | +offset_radius | +-1 | +offset (in bytes) of each cylinder’s “float radius” within the cylinders array (-1 means disabled and use radius instead) |
vec4f[] / vec3f(a)[] | -color | -NULL | -data array of colors (RGBA/RGB), color is constant for each cylinder | +vec4f[] / vec3f(a)[] | +color | +NULL | +data array of colors (RGBA/RGB), color is constant for each cylinder |
OSPData | -texcoord | -NULL | -data array of texture coordinates, in pairs (each a vec2f at vertex v0 and v1) | +OSPData | +texcoord | +NULL | +data array of texture coordinates, in pairs (each a vec2f at vertex v0 and v1) |
Type | +Name | +Default | +Description | +
---|---|---|---|
OSPModel | +model | ++ | the model to render | +
OSPCamera | +camera | ++ | the camera to be used for rendering | +
OSPLight[] | +lights | ++ | data array with handles of the lights | +
float | +epsilon | +10-6 | +ray epsilon to avoid self-intersections, relative to scene diameter | +
int | +spp | +1 | +samples per pixel | +
int | +maxDepth | +20 | +maximum ray recursion depth | +
float | +minContribution | +0.001 | +sample contributions below this value will be neglected to speed-up rendering | +
float | +varianceThreshold | +0 | +threshold for adaptive accumulation | +
Type | -Name | -Default | -Description | +Type | +Name | +Default | +Description |
---|---|---|---|---|---|---|---|
bool | -shadowsEnabled | -false | -whether to compute (hard) shadows | +bool | +shadowsEnabled | +false | +whether to compute (hard) shadows |
int | -aoSamples | -0 | -number of rays per sample to compute ambient occlusion | +int | +aoSamples | +0 | +number of rays per sample to compute ambient occlusion |
float | -aoDistance | -1020 | -maximum distance to consider for ambient occlusion | +float | +aoDistance | +1020 | +maximum distance to consider for ambient occlusion |
bool | -aoTransparencyEnabled | -false | -whether object transparency is respected when computing ambient occlusion (slower) | +bool | +aoTransparencyEnabled | +false | +whether object transparency is respected when computing ambient occlusion (slower) |
bool | -oneSidedLighting | -true | -if true back-facing surfaces (wrt. light source) receive no illumination | +bool | +oneSidedLighting | +true | +if true back-facing surfaces (wrt. light source) receive no illumination |
float / vec3f / vec4f | -bgColor | -black, transparent | -background color and alpha (RGBA) | +float / vec3f / vec4f | +bgColor | +black, transparent | +background color and alpha (RGBA) |
OSPTexture2D | -maxDepthTexture | -NULL | -screen-sized float texture with maximum far distance per pixel | +OSPTexture2D | +maxDepthTexture | +NULL | +screen-sized float texture with maximum far distance per pixel |
Type | -Name | -Default | -Description | +Type | +Name | +Default | +Description |
---|---|---|---|---|---|---|---|
int | -rouletteDepth | -5 | -ray recursion depth at which to start Russian roulette termination | +int | +rouletteDepth | +5 | +ray recursion depth at which to start Russian roulette termination |
float | -maxContribution | -∞ | -samples are clamped to this value before they are accumulated into the framebuffer | +float | +maxContribution | +∞ | +samples are clamped to this value before they are accumulated into the framebuffer |
OSPTexture2D | -backplate | -NULL | -texture image used as background, replacing visible lights in infinity (e.g. the HDRI light) | +OSPTexture2D | +backplate | +NULL | +texture image used as background, replacing visible lights in infinity (e.g. the HDRI light) |
Type | -Name | -Description | +Type | +Name | +Description |
---|---|---|---|---|---|
vec3f(a) | -position | -the center of the spot light, in world-space | +vec3f(a) | +position | +the center of the spot light, in world-space |
vec3f(a) | -direction | -main emission direction of the spot | +vec3f(a) | +direction | +main emission direction of the spot |
float | -openingAngle | -full opening angle (in degree) of the spot; outside of this cone is no illumination | +float | +openingAngle | +full opening angle (in degree) of the spot; outside of this cone is no illumination |
float | -penumbraAngle | -size (angle in degree) of the "penumbra", the region between the rim (of the illumination cone) and full intensity of the spot; should be smaller than half of openingAngle |
+float | +penumbraAngle | +size (angle in degree) of the “penumbra”, the region between the rim (of the illumination cone) and full intensity of the spot; should be smaller than half of openingAngle |
float | -radius | -the size of the spot light, the radius of a disk with normal direction |
+float | +radius | +the size of the spot light, the radius of a disk with normal direction |
Type | +Name | +Description | +
---|---|---|
vec3f(a) | +up | +up direction of the light in world-space | +
vec3f(a) | +dir | +direction to which the center of the texture will be mapped to (analog to panoramic camera) | +
OSPTexture2D | +map | +environment map in latitude / longitude format | +
Type | -Name | -Default | -Description | +Type | +Name | +Default | +Description |
---|---|---|---|---|---|---|---|
vec3f[] | -ior | -Aluminium | -data array of spectral samples of complex refractive index, each entry in the form (wavelength, eta, k), ordered by wavelength (which is in nm) | +vec3f[] | +ior | +Aluminium | +data array of spectral samples of complex refractive index, each entry in the form (wavelength, eta, k), ordered by wavelength (which is in nm) |
vec3f | -eta | -- | RGB complex refractive index, real part | +vec3f | +eta | ++ | RGB complex refractive index, real part |
vec3f | -k | -- | RGB complex refractive index, imaginary part | +vec3f | +k | ++ | RGB complex refractive index, imaginary part |
float | -roughness | -0.1 | -roughness in [0–1], 0 is perfect mirror | +float | +roughness | +0.1 | +roughness in [0–1], 0 is perfect mirror |
Type | +Name | +Description | +
---|---|---|
float | +fovy | +the field of view (angle in degree) of the frame’s height | +
float | +aspect | +ratio of width by height of the frame | +
float | +apertureRadius | +size of the aperture, controls the depth of field | +
float | +focusDistance | +distance at where the image is sharpest when depth of field is enabled | +
bool | +architectural | +vertical edges are projected to be parallel | +
int | +stereoMode | +0: no stereo (default), 1: left eye, 2: right eye, 3: side-by-side | +
float | +interpupillaryDistance | +distance between left and right eye when stereo is enabled | +