cz.cuni.jagrlib.piece
Class PhongModel

java.lang.Object
  extended by cz.cuni.jagrlib.DefaultProperty
      extended by cz.cuni.jagrlib.Piece
          extended by cz.cuni.jagrlib.testing.LambertianModel
              extended by cz.cuni.jagrlib.piece.PhongModel
All Implemented Interfaces:
Breakable, BSSRDF, Property, Template

public class PhongModel
extends LambertianModel

Phong shading model (with constant or Schlick K() term).

Since:
0.12
See Also:
PhongModel.java

Field Summary
protected static java.lang.String CATEGORY
          Object category.
 double cosTotal
          Limit cos-value for total reflection.
 int h
          Specular reflection exponent.
 double ka
          Ambient-light coefficient.
 double kd
          Diffuse reflection coefficient.
 double ks
          Specular reflection coefficient.
 double kt
          Transmission (refraction) coefficient.
 double n
          Relative index of refraction.
 double[] origColor
          Original color of the solid surface.
static RegPiece reg
          Static registration instance for this class.
 double sch
          Schlick blending coefficient (0.0 .. non-Schlick, 1.0 ..
protected static java.lang.String TEMPLATE_NAME
          Object template identifier.
 
Fields inherited from class cz.cuni.jagrlib.testing.LambertianModel
color, REFLECTIONS
 
Fields inherited from class cz.cuni.jagrlib.Piece
channels, info, pl, plugs, TEMPLATE_TYPE, userBreak
 
Fields inherited from interface cz.cuni.jagrlib.iface.BSSRDF
COMP_ALL, COMP_DIFFUSE, COMP_GLOSSY, COMP_SPEC_REFLECTION, COMP_SPEC_REFRACTION, COMP_SPECULAR, MATERIAL_COLOR, MATERIAL_H, MATERIAL_KA, MATERIAL_KD, MATERIAL_KS, MATERIAL_KT, MATERIAL_N
 
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
PhongModel()
          Default constructor.
 
Method Summary
protected  double[] color(double[] in, double[] out, double[] normal, int mask, double[] result)
          Common computation for color BRDF sample (BRDF is treated as band-color).
 double[] colorBSSRDF(boolean worldCoords, double[] in, double[] out, double[] normal, double[] tangent, int mask, double[] result)
          Returns the requested BSSRDF sample (BSSRDF is treated as band-color).
 double[] colorBSSRDF(boolean worldCoords, MicroFacet mf, double[] in, double[] out, int mask, double[] result)
          Returns the requested BRDF sample (BRDF is treated as band-color).
 java.lang.Object get(java.lang.String key)
          Gets the given property.
 double[] getOrigColor(double[] color)
          Retrieves the original color (defining surface color).
 double[] lightSum(MicroFacet mf, int order, int total, LightSource[] lights, double[] out, double[] result)
          Accumulates light contributions from set of light sources through the given MicroFacet (point on surface of some solid) to the viewing direction.
protected  double mono(double[] in, double[] out, double[] normal, int mask)
          Common computation for monochrome BRDF sample (BRDF is treated as monochrome).
 double monoBSSRDF(boolean worldCoords, double[] in, double[] out, double[] normal, double[] tangent, int mask)
          Returns the requested BSSRDF sample (BSSRDF is treated as monochrome).
 double monoBSSRDF(boolean worldCoords, MicroFacet mf, double[] in, double[] out, int mask)
          Returns the requested BRDF sample (BRDF is treated as monochrome).
 double pdf(boolean worldCoords, MicroFacet mf, double[] in, double[] out)
          Return the probability density function.
 double scatter(MicroFacet mf, double[] in, double u, double v, int mask, double[] out, double[] brdf)
          Scatter ray according to the light model.
 void set(java.lang.String key, java.lang.Object value)
          Sets the given property.
 void setColor(double[] color)
          Sets the actual color (for the given BRDF data).
static int setTemplate(Template t, int ord)
          General-purpose registration routine.
 int type()
          Returns the type of BRDF.
 
Methods inherited from class cz.cuni.jagrlib.testing.LambertianModel
localToWorld, worldToLocal
 
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, setTemplateDynamic, stop
 
Methods inherited from class cz.cuni.jagrlib.DefaultProperty
booleanProperty, booleanProperty, colorDoubleProperty, colorProperty, commit, doubleProperty, doubleProperty, doubleProperty, enumProperty, floatProperty, floatProperty, floatProperty, intProperty, intProperty, intProperty, longProperty, longProperty, longProperty, 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
 

Field Detail

origColor

public double[] origColor
Original color of the solid surface.


ka

public double ka
Ambient-light coefficient.


kd

public double kd
Diffuse reflection coefficient.


ks

public double ks
Specular reflection coefficient.


h

public int h
Specular reflection exponent.


kt

public double kt
Transmission (refraction) coefficient.


n

public double n
Relative index of refraction.


cosTotal

public double cosTotal
Limit cos-value for total reflection.


sch

public double sch
Schlick blending coefficient (0.0 .. non-Schlick, 1.0 .. Schlick).


TEMPLATE_NAME

protected static final java.lang.String TEMPLATE_NAME
Object template identifier.

See Also:
Constant Field Values

CATEGORY

protected static final java.lang.String CATEGORY
Object category.

See Also:
Constant Field Values

reg

public static final RegPiece reg
Static registration instance for this class. Automatically initialized in class-loading time.

Constructor Detail

PhongModel

public PhongModel()
Default constructor.

Method Detail

mono

protected double mono(double[] in,
                      double[] out,
                      double[] normal,
                      int mask)
Common computation for monochrome BRDF sample (BRDF is treated as monochrome).

Parameters:
in - Input ray direction (double[3] or double[4]).
out - Output (viewing) ray direction (double[3] or double[4]).
d - BRDF parameters.
mask - Which light components are to be computed?
Returns:
BRDF coefficient f(in->out).

color

protected double[] color(double[] in,
                         double[] out,
                         double[] normal,
                         int mask,
                         double[] result)
Common computation for color BRDF sample (BRDF is treated as band-color).

Parameters:
in - Input ray direction (double[3] or double[4]).
out - Output (viewing) ray direction (double[3] or double[4]).
normal - Normal vector of a surface.
d - BRDF parameters.
mask - Which light components are to be computed?
result - Pre-allocated double[C] array to hold BRDF coefficients f(in->out) (C can be either 1 /for monochrome computing/, 3 /for RGB color system/ or greater /for more complex spectral color sampling/). Can be null.
Returns:
Output BRDF spectral coefficients.

monoBSSRDF

public double monoBSSRDF(boolean worldCoords,
                         double[] in,
                         double[] out,
                         double[] normal,
                         double[] tangent,
                         int mask)
Returns the requested BSSRDF sample (BSSRDF is treated as monochrome).

Specified by:
monoBSSRDF in interface BSSRDF
Overrides:
monoBSSRDF in class LambertianModel
Parameters:
worldCoords - Should be set to true if vectors in and out are in world coordinates and to false if vectors in and out are in local coordinates.
in - Input ray direction (double[3] or double[4]).
out - Output (viewing) ray direction (double[3] or double[4]).
normal - Normal vector of a surface.
tangent - Tangent vector of a surface.
mask - Which light components are to be computed?
Returns:
BSSRDF coefficient f(in->out).
See Also:
#monoBSSRDF(MicroFacet,double[],double[],int), #colorBSSRDF(double[],double[],double[],int,double[])

monoBSSRDF

public double monoBSSRDF(boolean worldCoords,
                         MicroFacet mf,
                         double[] in,
                         double[] out,
                         int mask)
Returns the requested BRDF sample (BRDF is treated as monochrome). Computations are done relatively to the given MicroFacet (point on surface of some solid).

Specified by:
monoBSSRDF in interface BSSRDF
Overrides:
monoBSSRDF in class LambertianModel
Parameters:
mf - The MicroFacet (point on surface of some solid).
in - Input ray direction (double[3] or double[4]).
out - Output (viewing) ray direction (double[3] or double[4]).
mask - Which light components are to be computed?
worldCoords - Should be set to true if vectors in and out are in world coordinates and to false if vectors in and out are in local coordinates.
Returns:
BRDF coefficient f(in->mf->out).
See Also:
#monoBRDF(double[],double[],double[],Property,int), #colorBRDF(MicroFacet,double[],double[],int,double[]), MicroFacet#material

colorBSSRDF

public double[] colorBSSRDF(boolean worldCoords,
                            double[] in,
                            double[] out,
                            double[] normal,
                            double[] tangent,
                            int mask,
                            double[] result)
Returns the requested BSSRDF sample (BSSRDF is treated as band-color).

Specified by:
colorBSSRDF in interface BSSRDF
Overrides:
colorBSSRDF in class LambertianModel
Parameters:
worldCoords - Should be set to true if vectors in and out are in world coordinates and to false if vectors in and out are in local coordinates.
in - Input ray direction (double[3] or double[4]).
out - Output (viewing) ray direction (double[3] or double[4]).
normal - Normal vector of a surface.
tangent - Tangent vector of a surface.
mask - Which light components are to be computed?
result - Pre-allocated double[C] array to hold BRDF coefficients f(in->out) (C can be either 1 /for monochrome computing/, 3 /for RGB color system/ or greater /for more complex spectral color sampling/). Can be null.
Returns:
Output BSSRDF spectral coefficients.
See Also:
#monoBSSRDF(double[],double[],double[],int), #colorBSSRDF(MicroFacet,double[],double[],int,double[])

colorBSSRDF

public double[] colorBSSRDF(boolean worldCoords,
                            MicroFacet mf,
                            double[] in,
                            double[] out,
                            int mask,
                            double[] result)
Returns the requested BRDF sample (BRDF is treated as band-color). Computations are done relatively to the given MicroFacet (point on surface of some solid).

Specified by:
colorBSSRDF in interface BSSRDF
Overrides:
colorBSSRDF in class LambertianModel
Parameters:
mf - The MicroFacet (point on surface of some solid).
in - Input ray direction (double[3] or double[4]).
out - Output (viewing) ray direction (double[3] or double[4]).
mask - Which light components are to be computed?
result - Pre-allocated double[C] array to hold BRDF coefficients f(in->mf->out) (C can be either 1 /for monochrome computing/, 3 /for RGB color system/ or greater /for more complex spectral color sampling/). Can be null.
worldCoords - Should be set to true if vectors in and out are in world coordinates and to false if vectors in and out are in local coordinates.
Returns:
Output BRDF spectral coefficients.
See Also:
#monoBRDF(MicroFacet,double[],double[],int), #colorBRDF(double[],double[],double[],Property,int,double[]), MicroFacet#material

lightSum

public double[] lightSum(MicroFacet mf,
                         int order,
                         int total,
                         LightSource[] lights,
                         double[] out,
                         double[] result)
Accumulates light contributions from set of light sources through the given MicroFacet (point on surface of some solid) to the viewing direction.

Parameters:
mf - The MicroFacet (point on surface of some solid).
order - Order of this sample inside the actual pixel.
total - Total number of samples in the actual pixel.
lights - Set of light sources that can light the point.
out - Output (viewing) ray direction (double[3] or double[4]).
result - Pre-allocated double[C] array to hold BRDF coefficients f(in->mf->out) (C can be either 1 /for monochrome computing/, 3 /for RGB color system/ or greater /for more complex spectral color sampling/). Can be null, otherwise the initial value will be preseved.
Returns:
Output color coefficients.
See Also:
#colorBRDF(MicroFacet,double[],double[],int,double[]), MicroFacet#material

getOrigColor

public double[] getOrigColor(double[] color)
Retrieves the original color (defining surface color).

Specified by:
getOrigColor in interface BSSRDF
Overrides:
getOrigColor in class LambertianModel
Parameters:
color - Pre-allocated double[C] array to hold the color (C can be either 1 /for monochrome computing/, 3 /for RGB color system/ or greater /for more complex spectral color sampling/). Can be null.
data - Data object with BRDF state information (optional).
Returns:
Array containing copy of original color (can be altered).

setColor

public void setColor(double[] color)
Sets the actual color (for the given BRDF data). This color will be used in subsequent BRDF calculations. The color array won't be altered.

Specified by:
setColor in interface BSSRDF
Overrides:
setColor in class LambertianModel
Parameters:
color - Color definition - double[C] array (C can be either 1 /for monochrome computing/, 3 /for RGB color system/ or greater /for more complex spectral color sampling/).
data - Data object with BRDF state information.

scatter

public double scatter(MicroFacet mf,
                      double[] in,
                      double u,
                      double v,
                      int mask,
                      double[] out,
                      double[] brdf)
Scatter ray according to the light model.

Specified by:
scatter in interface BSSRDF
Overrides:
scatter in class LambertianModel
Parameters:
mf - The MicroFacet (point on surface of some solid).
in - Input direction (should look from the hit point)..
u - Random uniform number.
v - Random uniform number.
mask - Which light components are to be computed?
out - Output direction in world coordinates.
brdf - Color definition - double[C] array (C can be either 1 /for monochrome computing/, 3 /for RGB color system/ or greater /for more complex spectral color sampling/).
Returns:
Probability density function.

pdf

public double pdf(boolean worldCoords,
                  MicroFacet mf,
                  double[] in,
                  double[] out)
Return the probability density function.

Specified by:
pdf in interface BSSRDF
Overrides:
pdf in class LambertianModel
Parameters:
in - Input direction.
out - Output direction.
worldCoords - Should be set to true if vectors in and out are in world coordinates and to false if vectors in and out are in local coordinates.
mf - The MicroFacet (point on surface of some solid).

type

public int type()
Returns the type of BRDF.

Specified by:
type in interface BSSRDF
Overrides:
type in class LambertianModel

set

public void set(java.lang.String key,
                java.lang.Object value)
Sets the given property.

Specified by:
set in interface Property
Overrides:
set in class LambertianModel
Parameters:
key - Key string.
value - The new value.
See Also:
Property.commit()

get

public java.lang.Object get(java.lang.String key)
Gets the given property.

Specified by:
get in interface Property
Overrides:
get in class LambertianModel
Parameters:
key - Key string.
Returns:
The actual value or null.

setTemplate

public static int setTemplate(Template t,
                              int ord)
General-purpose registration routine. Sets all plugs, strings, etc. to the given Template.