Camera Info
Availability LightWave® 6.0
Component Layout
Header lwrender.h
The camera info global returns functions for getting camera-specific information about
any of the cameras in a scene. Use the item info global to get
the camera list and for generic item information. The information returned by these
functions is read-only, but you can set camera parameters using commands.
Beginning with LightWave® 9, certain portions of a camera's render settings can be
re-directed to use settings from a "global" camera. This global camera contains settings
for resolution, motion blur, and mask values that can be shared by one or more cameras in
the scene. For those settings marked as being controlled by the global camera, the camera
info functions will retrieve the global values. Note: in LW9.0 (version 4
of the camera info global), the global value was only returned if the setting was marked as
being global, and the camera was the current render camera.
From LightWave® 9 there is a new plugin class to implement arbitrary camera types. Cameras
are no longer limited to pinhole perspective. To allow plugins to evaluate the camera projection
there is a camera evaluator global. Camera evaluators can be used independently from each other.
Each evaluator keeps its own render mode, time, and pass state. When evaluating the camera, the
camera state is changed to match the state of the evaluator. Beware that if there are multiple
evaluators with different states, there is some time cost in switching between them.
Global Call
LWCameraInfo *caminfo;
caminfo = global( LWCAMERAINFO_GLOBAL, GFUSE_TRANSIENT );
The global function returns a pointer to an LWCameraInfo.
typedef struct st_LWCameraInfo {
double (*zoomFactor) (LWItemID, LWTime);
double (*focalLength) (LWItemID, LWTime);
double (*focalDistance) (LWItemID, LWTime);
double (*fStop) (LWItemID, LWTime);
double (*blurLength) (LWItemID, LWTime);
void (*fovAngles) (LWItemID, LWTime, double *hfov, double *vfov);
unsigned int (*flags) (LWItemID);
void (*resolution) (LWItemID, int *w, int *h);
double (*pixelAspect) (LWItemID, LWTime);
double (*separation) (LWItemID, LWTime);
void (*regionLimits) (LWItemID, int *x0, int *y0, int *x1,int *y1);
void (*maskLimits) (LWItemID, int *x0, int *y0, int *x1,int *y1);
void (*maskColor) (LWItemID, LWDVector color);
unsigned int (*motionBlur) (LWItemID);
unsigned int (*fieldRendering) (LWItemID);
int (*irisPos) (LWItemID, LWTime, int pass, float *irisx, float *irisy);
int (*usingGlobalResolution)(LWItemID);
int (*usingGlobalBlur) (LWItemID);
int (*usingGlobalMask) (LWItemID);
unsigned int (*motionBlurPasses) (LWItemID, LWTime);
double (*shutterEfficiency) (LWItemID, LWTime);
unsigned int (*noiseSampler) (LWItemID);
void (*filmSize) (LWItemID, double *width, double *height);
unsigned int (*frameTiming) (LWItemID, LWFrame, LWFrameTimingInfo *timingInfo);
unsigned int (*antiAliasing) (LWItemID, LWTime);
double (*overSampling) (LWItemID, LWTime);
void (*diaphragm) (LWItemID, LWTime, int *sides, double *rotation);
} LWCameraInfo;
- zoom = zoomFactor( camera, time )
- Returns the zoom factor.
- flen = focalLength( camera, time )
- Returns the focal length in millimeters.
- fdist = focalDistance( camera, time )
- Returns the distance from the camera at which objects are in focus.
- fstop = fStop( camera, time )
- Returns the f-stop number.
- blurlen = blurLength( camera, time )
- Returns the blur length as a fraction of the frame time.
- Note: This setting is controlled by a "Use Global" flag (see usingGlobalBlur).
If the camera's "Use Global" flag is enabled for this setting, then the value returned by this function comes instead from the
scene's Global Camera.
- fovAngles( camera, time, hfov, vfov )
- Gets the hfov and vfov (horizontal and vertical field of view) angles,
expressed in radians.
- f = flags( camera );
- Returns flags describing the camera, combined using bitwise-or.
LWCAMF_STEREO
- This indicates that the camera has stereo rendering enabled.
LWCAMF_LIMITED_REGION
- This indicates that the camera has limited region rendering set.
LWCAMF_MASK
- This indicates that masked rendering is enabled for the camera.
LWCAMF_DOF
- This indicates that the camera has enabled depth of field.
LWCAMF_PARTICLE_BLUR
- This indicates that the camera has enabled particle blurring, which is the simulated trajectory of one-point polygons over time
LWCAMF_LR_NOBORDERS
- This indicates that limited region is being used without borders when limited region is enabled
LWCAMF_FIELD
- When field rendering is enabled, this indicates which field (0 or 1) is being processed
LWCAMF_USECAMTYPE
- Indicates that the camera uses a camera type plugin, instead of the built-in classic type (rev.4+)
LWCAMF_SUPPORTS_DOF
- Set when the camera supports Depth of Field rendering. Check
LWCAMF_DOF to determine if DOF is enabled or not (rev.5+)
LWCAMF_EYE
- When stereo rendering is enabled, this indicates which eye (0 or 1) is being processed (rev.5+)
- Note: The
LWCAMF_PARTICLE_BLUR and LWCAMF_FIELD flags are controlled by a "Use Global" flag
(see usingGlobalResolution and usingGlobalBlur). If
the camera's "Use Global" flag is enabled for these settings, then the values for these flags come instead from the scene's Global Camera.
- resolution( camera, width, height )
- Gets the image size in pixels for the images rendered by the camera.
- Note: This setting is controlled by a "Use Global" flag (see
usingGlobalResolution). If the camera's "Use Global" flag is enabled
for this setting, then the value returned by this function comes instead from the scene's Global Camera.
- aspect = pixelAspect( camera, time )
- Returns the pixel aspect ratio of images rendered by the camera, expressed as
width/height. Values greater than 1.0 mean short wide pixels and values less than 1.0 mean
tall thin pixels.
- Note: This setting is controlled by a "Use Global" flag (see
usingGlobalResolution). If the camera's "Use Global" flag is enabled
for this setting, then the value returned by this function comes instead from the scene's Global Camera.
- sep = separation( camera, time )
- Returns the interocular distance (eye separation) for stereoscopic rendering, in meters.
- regionLimits( camera, x0, y0, x1, y1 )
- Gets the limited region rectangle for the camera.
- maskLimits( camera, x0, y0, x1, y1 )
- Gets the mask rectangle for the camera.
- Note: This setting is controlled by a "Use Global" flag (see
usingGlobalMask). If the camera's "Use Global" flag is enabled
for this setting, then the value returned by this function comes instead from the scene's Global Camera.
- maskColor( camera, color )
- Gets the color that will be rendered in areas of the image outside the mask rectangle.
- blur = motionBlur( camera ) (rev.3+)
- This retrieves motion blur setting for a camera item. See the LWCAMMB_
defines for possible return values. This value is only valid when a
multi-pass anti-aliasing approach is used.
LWCAMMB_OFF
LWCAMMB_NORMAL
LWCAMMB_DITHERED
- Note: This setting is controlled by a "Use Global" flag (see
usingGlobalBlur). If the camera's "Use Global" flag is enabled
for this setting, then the value returned by this function comes instead from the scene's Global Camera.
- ff = fieldRendering( camera ) (rev.3+)
- Returns the field-rendering state for the specified camera. See the
LWCAMFIELDR_ defines for possible return values.
LWCAMFIELDR_OFF
LWCAMFIELDR_EVENFIRST
LWCAMFIELDR_ODDFIRST
- Note: This setting is controlled by a "Use Global" flag (see
usingGlobalResolution). If the camera's "Use Global" flag is enabled
for this setting, then the value returned by this function comes instead from the scene's Global Camera.
- havepos = irisPos( camera, time, pass, irisx, irisy ) (rev. 4+)
- Get the iris position for the camera at a given time and pass number. The iris position is typically
used for depth of field. It represents a sample point on the camera's aperture. The position is
normalized, ranging from -1 to 1 over the height of the aperture. The pass number ranges from 0 to
sceneinfo->maxSamplesPerPixel-1. Returns 1 if there is a sample point, or 0 otherwise.
- using = usingGlobalResolution( camera ) (rev. 4+)
- Reports the state of the Camera's "Use Global" redirection flag for resolution settings.
A value of 1 means the switch is enabled, and the global resolution settings are used
by this camera. A value of 0 means it is off, and the camera's local resolution settings
are active.
- using = usingGlobalBlur( camera ) (rev. 4+)
- Reports the state of the Camera's "Use Global" redirection flag for motion blur settings.
A value of 1 means the switch is enabled, and the global motion blur settings are used
by this camera. A value of 0 means it is off, and the camera's local motion blur settings
are active.
- using = usingGlobalMask( camera ) (rev. 4+)
- Reports the state of the Camera's "Use Global" redirection flag for mask boundary settings.
A value of 1 means the switch is enabled, and the global mask boundary settings are used
by this camera. A value of 0 means it is off, and the camera's local mask boundary settings
are active. Note: mask boundaries are only regarded if "Use Mask" has been enabled.
- passes = motionBlurPasses( camera, time ) (rev.5+)
- This retrieves the motion blur passes setting for a camera item.
- Note: This setting is controlled by a "Use Global" flag (see
usingGlobalBlur). If the camera's "Use Global" flag is enabled
for this setting, then the value returned by this function comes instead from the scene's Global Camera.
- efficiency = shutterEfficiency( camera, time ) (rev.5+)
- Gets the shutter efficiency for a camera item. The efficiency is returned as a fraction,
usually between 0.5 and 1.0.
- Note: This setting is controlled by a "Use Global" flag (see
usingGlobalBlur). If the camera's "Use Global" flag is enabled
for this setting, then the value returned by this function comes instead from the scene's Global Camera.
- sampler = noiseSampler( camera ) (rev.5+)
- Returns the noise sampler setting for the camera.
- filmSize( camera, width, height ) (rev.5+)
- Gets the width and height of the film frame in metres.
- Note: This setting is controlled by a "Use Global" flag (see usingGlobalResolution).
If the camera's "Use Global" flag is enabled for this setting, then the value returned by
this function comes instead from the scene's Global Camera.
- havetiming = frameTiming( camera, frame, frametiming ) (rev.5+)
- Fills in the frame timing structure pointed to by the frametiming arguments, for the given camera and frame. The frame
timing structure defines the times and durations of the various passes and fields in the frame.
typedef struct st_LWComponentTimingInfo {
unsigned int count;
double offset;
double duration;
double stride;
} LWComponentTimingInfo;
typedef struct st_LWFrameTimingInfo {
LWComponentTimingInfo frame;
LWComponentTimingInfo fields;
LWComponentTimingInfo steps;
LWComponentTimingInfo scanlines;
LWComponentTimingInfo pixels;
} LWFrameTimingInfo;
A frame is divided into fields, each of which is divided into steps (for motion blur), with each step divided into
scanlines, and finally scanlines are split into pixels. The frame timing structure defines the time ranges at which the
instances of these component are evaluated.
- count
- The number of instances of this component within the parent component instance. For example, the number of steps
in a field, or the number of pixels in a scanline. For the frame component this will be 1.
- offset
- The offset of the starting time of the first instance of the component, relative to the starting time of the
parent component instance. The value in in seconds. For example, the starting time of the first field in a
frame, or the first pixel in a scanline. For the frame, the offset is the actual time of the start of the frame.
- duration
- The duration of each component instance in seconds. The duration is the length of time over which the instance is
sampled. This can be zero, meaning that the component will only be sampled at the starting time. The duration may
also exceed the stride (see below).
- stride
- The step size in seconds from the start of one instance to the start of the next instance. For example, the jump
between the start time of the first field and the start of the second field in a frame (if there is more than one
field in the frame).
For example, the starting time of the second field in a frame with multiple fields is given by:
frame.offset + fields.offset + fields.stride
The last time value at which the 16th scanline of the 3rd step of the last field of the frame may be evaluation:
frame.offset + // Frame start
fields.offset + (fields.count - 1) * fields.stride + // Last field start
steps.offset + 2 * steps.stride + // 3rd step start
scanlines.offset + 15 * scanlines.stride + scanlines.duration // 16th scanline end
Note that this function uses a frame number as an argument, not time. Returns 1 if the structure was successfully
filled in, or 0 otherwise.
- aa = antiAliasing( camera, time ) (rev.5+)
- Return the antialiasing level for the camera.
- os = overSampling( camera, time ) (rev.5+)
- Returns the oversampling value for the camera.
- diaphragm( camera, time, sides, rotation ) (rev.5+)
- Gets the number of sides and rotation of the diaphragm for the camera. If the number
of sides is zero, the diaphragm is circular. The rotation is in radians.
Global Call
LWCameraEvaluationFuncs *camevalfuncs;
camevalfuncs = global( LWCAMERAEVALUATIONFUNCS_GLOBAL, GFUSE_TRANSIENT );
The global function returns a pointer to an LWCameraEvaluationFuncs. Note that
version 1 of this global is no longer supported.
typedef struct st_LWCameraEvaluationFuncs {
LWCameraEvaluatorID (*create) (LWItemID camera);
void (*destroy) (LWCameraEvaluatorID);
LWError (*init) (LWCameraEvaluatorID, int mode);
void (*cleanUp) (LWCameraEvaluatorID);
LWError (*newTime) (LWCameraEvaluatorID, LWFrame frame, LWTime time);
int (*preview) (LWCameraEvaluatorID, double lpx, double lpy, LWDMatrix4 projection);
LWError (*newFrame) (LWCameraEvaluatorID);
int (*evaluate) (LWCameraEvaluatorID, double fpx, double fpy, double lpx, double lpy,
double fractime, LWCameraRay* camray);
} LWCameraEvaluationFuncs;
- cameval = create( camera )
- Create a new camera evaluator for the given camera.
- destroy( cameval )
- Destroy a camera evaluator. All created camera evaluators must be destroyed.
- error = init( cameval, mode )
- Set the mode for the camera evaluator. The mode is either LWINIT_PREVIEW or
LWINIT_RENDER.
- cleanup( cameval )
- Indicate the end of a rendering session.
- error = newTime( cameval, frame, time )
- Set the frame and time for a camera evaluator.
- havepreview = preview( cameval, lpx, lpy, projection )
- Obtain the preview projection matrix.
- error = newFrame( cameval )
- Start evaluating a frame. This must be called at the start of the frame evaluation before using evaluate()
- dotrace = evaluate( cameval, fpx, fpy, lpx, lpy, fractime, ray )
- Evaluate the camera, filling in the ray structure.
Example
This code fragment collects information about the first camera.
#include <lwserver.h>
#include <lwrender.h>
LWItemInfo *iteminfo;
LWCameraInfo *caminfo;
LWItemID id;
LWTime t = 3.0; /* seconds */
double zoom, flen, fdist, fstop, blen, hfov, vfov;
iteminfo = global( LWITEMINFO_GLOBAL, GFUSE_TRANSIENT );
caminfo = global( LWCAMERAINFO_GLOBAL, GFUSE_TRANSIENT );
if ( iteminfo && caminfo ) {
id = iteminfo->first( LWI_CAMERA, NULL );
zoom = caminfo->zoomFactor( id, t );
flen = caminfo->focalLength( id, t );
fdist = caminfo->focalDistance( id, t );
fstop = caminfo->fStop( id, t );
blen = caminfo->blurLength( id, t );
fovAngles( id, t, &hfov, &vfov );
}
|