cz.cuni.jagrlib.testing
Class DefaultRenderer

java.lang.Object
  extended by cz.cuni.jagrlib.DefaultProperty
      extended by cz.cuni.jagrlib.Piece
          extended by cz.cuni.jagrlib.DefaultImageFunction
              extended by cz.cuni.jagrlib.testing.DefaultRenderer
All Implemented Interfaces:
Breakable, ImageFunction, Property, TimeDependent, Template
Direct Known Subclasses:
DirectLightMapVisualizer, FinalGathering, PathTracing, RayCastingNew

public abstract class DefaultRenderer
extends DefaultImageFunction

Default renderer of CSG scenes.

See Also:
DefaultRenderer.java

Nested Class Summary
protected static class DefaultRenderer.Reflections
          Supported reflections.
protected static class DefaultRenderer.Sampling
          Sampling in direct illumination computation.
 
Field Summary
protected  int actOrder
          Actual sample order.
protected  int actTotal
          Actual cardinality of sample set.
protected  RayGenerator camera
          Accelerator: camera object.
protected  int dataMask
          Mask used in MicroFacet.assertAttributes(int).
protected static long HASH_LIGHT
          Hash-multiplier for number of light sources.
protected static long HASH_TEXTURE
          Hash-multiplier for textures.
protected  Intersectable inter
          Accelerator: object used for intersections.
protected  boolean isInit
          Was the renderer initialized?
protected  int numShadowRays
          Number of shadow rays.
protected  boolean occlusion
          Is it aplied occlusion?
protected  DefaultRenderer.Reflections reflections
          Actual used reflections.
protected  RandomJames rnd
          Random number generator.
protected  DefaultRenderer.Sampling sampling
          Actual way of computation of direct illumination.
protected  RTScene scene
          Accelerator: actual Ray-tracing scene (everything but intersections).
protected  boolean useTextures
          True if indirect illumination should be used.
protected  double xA
          Projection-plane linear transform - horizontal additive term.
protected  double xK
          Projection-plane linear transform - horizontal multiplicator.
protected  double yA
          Projection-plane linear transform - vertical additive term.
protected  double yK
          Projection-plane linear transform - vertical multiplicator.
 
Fields inherited from class cz.cuni.jagrlib.DefaultImageFunction
background, time, xMax, xMin, yMax, yMin
 
Fields inherited from class cz.cuni.jagrlib.Piece
channels, info, pl, plugs, reg, TEMPLATE_TYPE, userBreak
 
Fields inherited from interface cz.cuni.jagrlib.iface.ImageFunction
BACKGROUND_COLOR
 
Fields inherited from interface cz.cuni.jagrlib.iface.Property
LOGGING, STATISTICS, TEXT_DESCRIPTION
 
Fields inherited from interface cz.cuni.jagrlib.Template
ALL_PLUGS, C_1D, C_2D, C_3D, C_ALPHA, C_BINARY, C_BREP, C_CAMERA, C_CIRCLE, C_CLIP, C_COMPRESSION, C_CURVE, C_DATA, C_DRAW, C_EDITOR, C_ELLIPSE, C_FILL, C_FILTER, C_FLOAT, C_FUNCTION, C_IMAGE, C_INTEGER, C_IO, C_LIGHT, C_LINE, C_METRIC, C_POLYGON, C_PROJECTION, C_RADIOSITY, C_RASTER, C_RENDER, C_SAMPLE, C_SCENE, C_SET, C_SOLID, C_TEXT, C_TRANSFORM, C_VECTOR, C_VIEWER, C_WORKER, CAT_EMPTY, EMPTY, IFACE, JAGRLIB, JAGRLIB2, MANIPULATOR_COMBO, MANIPULATOR_CUSTOM, MANIPULATOR_DEFAULT, MANIPULATOR_MULTILINE, PL_ALPHAMASK, PL_BITMASK, PL_CAUSTIC, PL_CODEC, PL_COLORMAP, PL_COMPARE, PL_DATA, PL_DIRECT, PL_EDITOR, PL_FILTER, PL_FUNCTION, PL_IMAGE, PL_IMPORT, PL_INPUT, PL_INTERSECTION, PL_LIGHTSOURCE, PL_ORDER, PL_OUTPUT, PL_PALETTE, PL_PHOTON, PL_PROPERTY, PL_QUANTIZER, PL_RASTER, PL_RENDER, PL_SHADOW, PL_STREAM, PL_TRANSFORM, PL_TRIGGER, PL_VOLUME, PL_WINDOW, TYPE_BOOLEAN, TYPE_DOUBLE, TYPE_FLOAT, TYPE_INTEGER, TYPE_LONG, TYPE_OBJECT, TYPE_STRING
 
Constructor Summary
DefaultRenderer()
           
 
Method Summary
protected  boolean assertScene()
          Asserts the scene accelerator and does first-time algorithm setup.
protected  void directIllumination(MicroFacet mf, double[] out, double[] color)
          Compute accure direct illumination.
 long getSample(double x, double y, int order, int total, double[] color)
          Computes one image sample.
 double getTime()
          Returns the actual time value for the object (used in animations).
 double[] getTimeInterval(double[] pre)
          Retrieve the valid bounds for time variable.
protected  boolean init()
          Prepare scene for rendering.
protected  void sampleBSDF(MicroFacet mf, LightSource light, double u, double v, double[] out, double[] Ld)
          Sample BSDF with multiple importance sampling.
protected  void sampleLightSource(MicroFacet mf, LightSource light, double u, double v, double[] out, double[] Ld)
          Sample light source with multiple importance sampling.
 void setBounds(double Xmin, double Xmax, double Ymin, double Ymax)
          Sets bounds (scaling factors) for the image function (e.g. projection-plane mapping).
 void setTime(double time)
          Sets the actual time value for the object (used in animations).
protected  long shade(int level, double importance, double[] p0, double[] p1, double[] color)
          Recursive shading function - computes color contribution of the given ray (shot from the origin p0 into direction vector p1).
protected  void specular(int level, MicroFacet mf, double[] out, double[] L)
          Handle specular reflection which is specific so it's not handled sample BSDF like the other types of reflection (diffuse and glossy).
 
Methods inherited from class cz.cuni.jagrlib.DefaultImageFunction
getBounds, getSample
 
Methods inherited from class cz.cuni.jagrlib.Piece
className, connect, findPlug, findPlug, getInfo, getInterface, getInterface, getPlug, getReg, init, isCompatible, isCompatible, isConnected, logError, logWarning, myInterface, newInputPlug, newOptOutputPlug, newOutputPlug, newPlug, noTemplates, propBegin, propBounds, propDefault, propEnd, propEnum, propManipulator, propManipulator, setProgressListener, setRegStrings, setTemplate, setTemplateDynamic, stop
 
Methods inherited from class cz.cuni.jagrlib.DefaultProperty
booleanProperty, booleanProperty, colorDoubleProperty, colorProperty, commit, doubleProperty, doubleProperty, doubleProperty, enumProperty, floatProperty, floatProperty, floatProperty, get, intProperty, intProperty, intProperty, longProperty, longProperty, longProperty, set, set, stringProperty
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface cz.cuni.jagrlib.iface.Property
commit, get, set
 

Field Detail

xA

protected double xA
Projection-plane linear transform - horizontal additive term.


xK

protected double xK
Projection-plane linear transform - horizontal multiplicator.


yA

protected double yA
Projection-plane linear transform - vertical additive term.


yK

protected double yK
Projection-plane linear transform - vertical multiplicator.


HASH_LIGHT

protected static final long HASH_LIGHT
Hash-multiplier for number of light sources.

See Also:
Constant Field Values

HASH_TEXTURE

protected static final long HASH_TEXTURE
Hash-multiplier for textures.

See Also:
Constant Field Values

sampling

protected DefaultRenderer.Sampling sampling
Actual way of computation of direct illumination.


reflections

protected DefaultRenderer.Reflections reflections
Actual used reflections.


scene

protected RTScene scene
Accelerator: actual Ray-tracing scene (everything but intersections).


inter

protected Intersectable inter
Accelerator: object used for intersections.


camera

protected RayGenerator camera
Accelerator: camera object.


numShadowRays

protected int numShadowRays
Number of shadow rays.


actOrder

protected int actOrder
Actual sample order.


actTotal

protected int actTotal
Actual cardinality of sample set.


occlusion

protected boolean occlusion
Is it aplied occlusion?


useTextures

protected boolean useTextures
True if indirect illumination should be used.


isInit

protected boolean isInit
Was the renderer initialized?


dataMask

protected int dataMask
Mask used in MicroFacet.assertAttributes(int).


rnd

protected final RandomJames rnd
Random number generator.

Constructor Detail

DefaultRenderer

public DefaultRenderer()
Method Detail

assertScene

protected boolean assertScene()
Asserts the scene accelerator and does first-time algorithm setup.

Returns:
true if failed.

init

protected boolean init()
Prepare scene for rendering.


getTimeInterval

public double[] getTimeInterval(double[] pre)
Retrieve the valid bounds for time variable.

Specified by:
getTimeInterval in interface TimeDependent
Overrides:
getTimeInterval in class DefaultImageFunction
Parameters:
pre - Pre-allocated double[2] array to hold the result (can be null).
Returns:
result[0] .. minimum time value, result[1] .. maximum time value.
See Also:
getTime(), setTime(double)

getTime

public double getTime()
Returns the actual time value for the object (used in animations).

Specified by:
getTime in interface TimeDependent
Overrides:
getTime in class DefaultImageFunction
Returns:
Actual time (in seconds).
See Also:
setTime(double)

setTime

public void setTime(double time)
Sets the actual time value for the object (used in animations).

Specified by:
setTime in interface TimeDependent
Overrides:
setTime in class DefaultImageFunction
Parameters:
time - New scene time (in seconds).
See Also:
getTime(), getTimeInterval(double[])

setBounds

public void setBounds(double Xmin,
                      double Xmax,
                      double Ymin,
                      double Ymax)
Sets bounds (scaling factors) for the image function (e.g. projection-plane mapping).

Specified by:
setBounds in interface ImageFunction
Overrides:
setBounds in class DefaultImageFunction
Parameters:
Xmin - Minimum X coordinate.
Xmax - Maximum X coordinate.
Ymin - Minimum Y coordinate.
Ymax - Maximum Y coordinate.
See Also:
DefaultImageFunction.getBounds(double[])

getSample

public long getSample(double x,
                      double y,
                      int order,
                      int total,
                      double[] color)
Computes one image sample. Passes parameters for hidden sampling.

Specified by:
getSample in interface ImageFunction
Overrides:
getSample in class DefaultImageFunction
Parameters:
x - X coordinate of the sample.
y - Y coordinate of the sample.
order - Order of this sample inside the actual pixel.
total - Total number of samples in the actual pixel.
color - Pre-allocated array to hold result color vector (double[1] for monochrome images, double[3] for RGB images, larger arrays can be used for more complex spectral sampling).
Returns:
Hash-value (sample signature) used for adaptive subsampling.
See Also:
DefaultImageFunction.getSample(double,double,double[]), DefaultImageFunction.getBounds(double[])

shade

protected long shade(int level,
                     double importance,
                     double[] p0,
                     double[] p1,
                     double[] color)
Recursive shading function - computes color contribution of the given ray (shot from the origin p0 into direction vector p1). Recursion is stopped by a hybrid method: importance and level are checked.

Parameters:
level - Actual recursion depth.
importance - Importance of the actual ray.
p0 - Ray origin.
p1 - Direction vector of the ray.
color - Pre-allocated array to hold result color vector (double[1] for monochrome images, double[3] for RGB images, larger arrays can be used for more complex spectral sampling).
Returns:
Hash-value (ray sub-signature) used for adaptive subsampling.
See Also:
#minImportance, #maxLevel, scene, inter

directIllumination

protected void directIllumination(MicroFacet mf,
                                  double[] out,
                                  double[] color)
Compute accure direct illumination.

Parameters:
mf - The MicroFacet (point on surface of some solid).
out - Outcoming direction.
color - Pre-allocated double[C] array to hold result - light intensity coming from the source to the given point (C can be either 1 /for monochrome computing/, 3 /for RGB color system/ or greater /for more complex spectral color sampling/).

sampleLightSource

protected void sampleLightSource(MicroFacet mf,
                                 LightSource light,
                                 double u,
                                 double v,
                                 double[] out,
                                 double[] Ld)
Sample light source with multiple importance sampling.

Parameters:
mf - The MicroFacet (point on surface of some solid).
light - Sampled light source.
u - Uniform random number (for light sampling).
v - Uniform random number (for light sampling).
out - Outcoming direction of light.
Ld - Pre-allocated double[C] array to hold result - light intensity coming from the source to the given point (C can be either 1 /for monochrome computing/, 3 /for RGB color system/ or greater /for more complex spectral color sampling/).

sampleBSDF

protected void sampleBSDF(MicroFacet mf,
                          LightSource light,
                          double u,
                          double v,
                          double[] out,
                          double[] Ld)
Sample BSDF with multiple importance sampling.

Parameters:
mf - The MicroFacet (point on surface of some solid).
light - Sampled light source.
u1 - Uniform random number (for light sampling).
v1 - Uniform random number (for light sampling).
u2 - Uniform random number (for BRDF sampling).
v2 - Uniform random number (for BRDF sampling).
out - Outcoming direction.
Ld - Pre-allocated double[C] array to hold result - light intensity coming from the source to the given point (C can be either 1 /for monochrome computing/, 3 /for RGB color system/ or greater /for more complex spectral color sampling/).

specular

protected void specular(int level,
                        MicroFacet mf,
                        double[] out,
                        double[] L)
Handle specular reflection which is specific so it's not handled sample BSDF like the other types of reflection (diffuse and glossy).