SoGzipDataCompressor and SoJpegDataCompressor now allow the user to specify a compression level through their respective setCompressionLevel methods.
The level of compression can also be set for the LDM converter using the new -l command line option.
The new environment variable IVVR_FIRST_RESERVED_TEXTURE_UNIT allows you to specify which texture units will be used by predefined VolumeViz Shaders. If redefined this will affect all the SoVolumeShader derived nodes :
You can retrieve this value using the SoVolumeShader::getNumReservedTextures() method.
- SoVolumeRenderingQuality
- SoVolumeIsoSurface
- SoVolumeClippingGroup
You can now disable color interpolation in the standard VolumeViz fragment shaders using the new field SoVolumerenderingQuality::colorInterpolation.
If set to FALSE, interpolation is not done on data values used to access the colormap. (Interpolation is still done when computing the gradient for lighting.) This may be used to render segmented data sets where interpolation is not appropriate. The default is TRUE.
No new features were added. See the fixed bugs section.
- Amira Mesh LDM reader now supports binary little endian format
- Better SEG-Y 2D LDM reader support
A set of three demos are now provided to demonstrate interoperability between VolumeViz/LDM and Nvidia CUDA GPU computing modules.
- cudaComputeSlice demo shows on-demand slice attribute computing using LDM getDataAccess method, with direct mapping of the CUDA result inside an Open Inventor Texture Object by using the EXPERIMENTAL class SoCudaRenderer.
- cudaComputeVolume demo shows volume attribute computing by using a simple implementation of a CUDA LDM reader. It supports multiple CPU or CUDA devices. Note: it is limited to input volumes that fit entirely in the GPU memory.
- cudaComputeBatch demo demonstrates LDM to LDM computing using the SoLDMWriter to create a new volume on disk containing the result of an attribute computation using the GPU through CUDA.
See $OIVHOME/src/VolumeViz/contrib/cudaCompute
This demo provides a basic SEG-Y 2D viewer example using Open Inventor and VolumeViz LDM, including:
- Multiple SEGY-2D Slices
- 3D Horizon display
- 3D wiggle trace and variable area display
See $OIVHOME/src/VolumeViz/contrib/SegY-2D
The SoVolumeRender node now supports projected volume rendering, for example rendering a volume defined on a grid of latitude / longitude coordinates. Projection is enabled by adding an SoProjection node before the SoVolumeRender node (see SoProjection for more information about supported coordinate systems, ellipsoids and map projections). The projection quality versus speed ratio can be controlled using the new projectedTileSubdivision field that defines how often each tile's geometry will be subdivided when projected. Volume projection works with both regular and rectilinear (non-uniform voxel spacing) grids.
Notes: Projection is incompatible with VolumeRenderingQuality node. and requires LDM culling options to be disabled.See $OIVHOME/src/VolumeViz/examples/volumeProjection
SoLDMDataAccess now provides two methods (synchronous and asynchronous) specifically optimized for accessing the data in a single "trace" in a seismic data volume. A "trace" is a single row of voxel values along the volume X axis. In other words, a special case of the getDataLine methods where the line is assumed to be aligned with the volume X axis. A trace is specified by its YZ coordinate in voxel units.
Note: The same optimization has been added to the getDataLine API for the case where the line is parallel to the volume X axis.
- SoLDMDataAccess::getDataTrace
- SoLDMDataAccess::requestDataTrace
A new LDM Programming Guide for data management is now available to explain and demonstrate how to efficiently
- Load LDM data using synchronous and asynchronous calls
- Create a new LDM data file on disk
- Create a temporary LDM volume in memory
PDF document available in $OIVHOME/src/VolumeViz/Compute/PG-DataManagementVolVizLDM.pdf
Example in $OIVHOME/src/VolumeViz/Compute
SoConverter now provides a new algorithm for computing values in lower resolution (subsampled) tiles during LDM conversion and a new option (-s n) to specify which method to use. If n = 0, the default method (decimation) is used. If n > 0, a weighted average algorithm is used which combines a voxel (weighted by n) with its six nearest neighbors.
The performance of SoLDMWriter::writeSubVolume has been significantly improved in some cases. Two new parameters (with default values) have been added to this method.
If the doLowerResolution parameter is true (the default), writeSubVolume now builds the lower resolution tiles immediately. This can be significantly faster than building them in the finish() method, because the full resolution data is already in memory. To take full advantage of this feature the subvolume should include blocks of eight tiles that can be combined to form lower resolution tiles. If doLowerResolution is false, the lower resolution tiles are not generated during this call, but can still be generated later if the finish() method is called with &B doMultiResolution @b set to true.
If the doOverlappingTiles parameter is true (the default) then all tiles that intersect the subvolume to any extent will be written. This allows you to write arbitrary subvolumes. For example, you can compute using non-overlapping subvolumes regardless of what the tile overlap setting is for that volume. However if tiles overlap (overlap > 0) it may require more read/write operations (and therefore be slower) than expected. If you want to write subvolumes that correspond exactly to tile boundaries (and handle the overlap yourself), you can now set doOverlappingTiles to false. In this case tiles that intersect the subvolume by only the tile overlap (or less) are not considered intersecting.
SoLDMTopoOctree is a utility class that provides information about the LDM topology for a given dataset, based on the dataset dimensions. For example you can query the ID of the tile that contains a specified voxel/cell in the data set and you can query the extent of a specified tile in voxel/cell coordinates.
Additional methods are now deprecated and replaced by Open Inventor fields. Fields have the advantage that they are saved in Open Inventor format files.
- In SoVolumeData
NEW FIELD OLD METHOD data (set/get)VolumeData
- In SoVolumeRender
NEW FIELD OLD METHOD fixedNumSlicesInRoi new features projectedTileSubdivision new features
No new feature was added. See the fixed bugs section.
For each existing SoLDMDataAccess::getData() method, an asynchronous version has been added with the new methods requestData() and getRequestedData(). This new feature optimizes the use of LDM for computation because computing and loading can be done in parallel.
See $OIVHOME/src/VolumeViz/examples/getLDMData/asyncGetDataBox.cxx.
The new class SoLDMWriter allows an application to load or compute portions of a volume in any order and any convenient internal format, then write the volume in LDM format. The application can pass tiles or arbitrary regions of full resolution data to the writer in any order. When the writer is closed it can optionally invoke the converter and generate the lower resolution levels.
See $OIVHOME/src/VolumeViz/LDMWriter.
The previous design (up to VolumeViz 6.1) for support of multiple data sets had some limitations for performance and evolution. Although compatibility has been kept, we strongly recommend that you use the new SoMultiDataSeparator node to combine multiple data sets.
Rectilinear grid support allows non-uniform voxel spacing on each axis of the volume. The AmiraMesh reader (.am file), the in-memory reader, and the LDM reader now support rectilinear coordinates. New tags in the LDM file header allow you to to specify rectilinear coordinates (i.e., <RectilinearMapping> and </RectilinearMapping>).
The new options -c <Compression Type> and -l <Compression Level> can be used with the SoLDMConverter to specify the compression type and the compression level. Compressed data uses less disk space and can be loaded faster (fewer bytes to move). Currently gzip and jpeg compression is available. The effectiveness of compression depends on the nature of the data. By subclassing SoDataCompressor, you can add support for additional compression types.
The new argument <Border Size> to the -b option enables you to specify a border size > 1. In order to avoid discontinuity artifacts with lighted volume rendering or with bump mapped slices, a border size of 3 should be specified.
Volume rendering supports a variety of new different techniques in order to improve performance:
- Early Z: Stop computing pixels that are hidden by fully opaque pixels. This can be very efficient when a lot of slices are used and when complex shaders are applied (lighted volume rendering...). See SoVolumeRender::useEarlyZ for details.
- Slice geometry on GPU: Slice vertices for volume rendering are generated by the GPU instead of the CPU, improving performance for large numbers of slices and for tile subdivision. See SoVolumeRender::gpuVertexGen for details.
- Tile subdivision: Fully transparent sub-tiles are not rendered, increasing the speed of the rendering (when the volume has significant transparent regions). See SoVolumeRender::subdivideTile for details.
- New low resolution mode allows reducing the screen resolution of the volume while the camera is moving. See SoVolumeRender::lowResMode for details.
The following new rendering effects has been added:
- Edge coloring: Enables you to color edges based on the gradient direction. See SoVolumeRenderingQuality::edgeColoring for details.
- 2D edge detection: A 2D edge detection algorithm is used to highlight edges of the rendered volume image. See SoVolumeRenderingQuality::edgeDetect2D for details.
- Boundary opacity: Increases the opacity of boundaries based on the magnitude of the gradient. See SoVolumeRenderingQuality::boundaryOpacity for details.
- Gradient quality: Provides different methods for computing the gradient (normal) used when the rendering is lighted. See SoVolumeRenderingQuality::gradientQuality for details.
- Jittering effect: Decreases slice edge artifacts when few slices are displayed. See SoVolumeRenderingQuality::jittering for details.
- Lighting model: It is now possible to choose between the Open Inventor 6 lighting mode or the full OpenGL lighting model. The new OpenGL lighting model allows a better integration of the lighted volume with the rest of the scene. See SoVolumeRenderingQuality::lightingModel.
- Cubic interpolation to get a smooth rendering. See SoVolumeRenderingQuality::cubicInterpolation.
- Faux shading: Modifies color values adjacent to opacity changes in the color map. See SoTransferFunction.
All the previous techniques can be combined together.
Additionally, the previous limitation on the number of slices used for volume rendering has been raised. Increasing the number of slices increases significantly the global image quality of the volume rendering.
Tile loading from disk to main memory and from main memory has been significantly improved. The consequence is that high resolution rendering is obtained more quickly. Streaming SIMD Extensions instructions (SSE) are used in these optimizations.
A new interpolation type (MULTISAMPLE_12) is available for 2D slices and volume skin which provides much higher quality images than linear interpolation. See SoVolumeShape::Interpolation for details.
There are now two ways to specify volume clipping:
- Arbitrary volume clipping: Clip voxels of volume rendering by an arbitrary geometry forming a 3D closed volume. See SoVolumeClippingGroup for details.
- Surface volume clipping: Clip voxels of volume rendering against a surface defined by a uniform grid of height values. For example, a seismic horizon surface. See SoUniformGridClipping for details.
Volume clipping applies to all volume rendering nodes.
Prior to Open Inventor 7.0, it was not possible to have SoVolumeRenderingQuality and SoVolumeIsosurface apply to the same SoVolumeRender node. This restriction has been lifted.
The LDM core has been re-factored to support multiple extensions such as ReservoirViz. Consequently some headers file which are common to multiple extensions (and which existed in previous releases) have been moved to the directory $OIVHOME/include/LDM. For instance SoROI.h has been moved from $OIVHOME/include/VolumeViz/nodes/SoROI.h to $OIVHOME/include/LDM/nodes/SoROI.h. Another consequence is that the class SoVolumeData now inherits from the new SoDataSet class which is a generic class for all LDM data sets. Upward compatibility has been kept, so no code changes are required.
Numerous methods are now deprecated and replaced by Open Inventor fields. Fields have the advantage that they are saved in Open Inventor format files.
- In SoTransferFunction
NEW FIELD OLD METHOD minValue and maxValue reMap - In SoVolumeShader
NEW FIELD OLD METHOD forVolumeOnly setForVolumeOnly - In SoLDMResourceParameters
NEW FIELD(S) OLD METHOD(S) maxMainMemory (set/get)MaxMainMemory maxTilesInMainMem (set/get)MaxTilesInMainMem loadPolicy (set/get)LoadPolicy loadNotificationRate (set/get)LoadNotificationRate maxTexMemory (set/get)MaxTexMemory maxTilesInTexMem (set/get)MaxTilesInTexMem tex3LoadRate (set/get)Tex3LoadRate max2DTextures (set/get)Max2DTextures tex2LoadRate (set/get)Tex2LoadRate minResolutionThreshold (set/get)MinResolutionThreshold maxResolutionThreshold (set/get)MaxResolutionThreshold tileDimension (set/get)TileSize fixedParams fixParams and isParamsFixed overlapping (set/get)Overlapping tileHalfLife (set/get)TileHalfLife fixedResolution disableFixedResolutionMode and isFixedResolutionMode resolution enableFixedResolutionMode and getFixedResolution
The volRend demonstration program has been updated to expose the new features described above. New color maps have been added, particularly those useful for seismic data.
The support of VolumePro boards from TeraRecon has been dropped.
No new features were added.
First release of VolumeViz .NET.