VIOSO offers a library for integration in image generators and rendering/media engines. Its main features are:
Warping: apply geometric correction and distortion compensation.
Blending & masking: apply soft-edge gradients and black-out masks.
Automatic view calculation: set the direction & field of view of each virtual camera based on the calibrated mesh.
Perspective correction for static/dynamic eyepoint: supports dynamic views and warping per frame, for VR, tracking, motions platforms, etc.
The API takes as input a .vwf export file and a texture buffer to sample from. If no texture buffer is given, it uses a copy of the current back buffer. The output is rendered to the currently set back buffer.
The API is available open-source here on bitbucket:
The VIOSOWarpBlend binaries for Windows are include in “bin” folder, so you do not need to compile the API by yourself on Windows platforms.
There are various examples for (nearly) all rendering APIs: DX9, DX11, DX12, OpenGL, Vulkan..
When using the VIOSOWarpBlend.dll, the behaviour of the calibration processing is configured by configuration file VIOSOWarpBlend.ini
. This file must be placed in the same folder as the DLL.
Every parameter is first read from the section with the channelname, provided at initialization, then if not found from default. A section is defined by putting a name into square brackets at the beginning of a line: [channel1]
The configuration parameters are outlined here with values for a typical off-the-shelf installation. Default values are used if the configuration parameter is missing or invalid.
This matrix is needed, if you use 3D maps, suitable for variable eye point. It describes the transformation from your 3D world to the VIOSO 3D world. It needs to be THE SAME for ALL IG channels. So define this in [default]
section.
The VIOSO coordinate system is set by the model you use. In case you use a simple model generated by VIOSO Core or Integrate, the world is denoted like this:
Flat Screen
World origin is horizontally centered on lower edge
Axes: +X right, +Y up, +Z back
Unit: Millimeters
Cylindric Screen
World origin is mid-point of base (lower) circle
Axes: +X right, +Y up, +Z back
Unit: Millimeters
Panadome
World origin is mid-point of sphere
Axes: +X right, +Y up, +Z back
Unit: Millimeters
Dome
World origin is mid-point of sphere
Axes: +X to -90°=270°=WEST, +Y to 0°=NORTH, -Z up to zenith
Unit: Millimeters
The base matrix is a homogenous transformation shaped like this:
R21
R22
R23
0
R31
R32
R33
0
tx
ty
tz
1
R
is a 3×3 rotation/scaling matrix to convert axes directions and unit scale.
t
is a translation vector. It points from (VIOSO)model origin to IG origin in model coordinates. This vector is added to each IG coordinate.
The eye-vector is added after rotation around the pivot. This needs to be same on all IG channels, serving same eye. So define this in either [default] section for non-stereoscopic displays or put it to the [channel] making sure all right-eye channels are same respectively all left-eye channels. It is needed, if the rotation center is not the eye itself. I.e. a cockpit is mounted on top of a frame, and the center of the frame is rotated or IPD. So the actual eye must be rotated with the actions of the platform relative to the rotation center.