Documentation/SL Functions
From PixieWiki
[edit] Sl function Index
NB: UNDER CONSTRUCTION, expect to see more detailed documentation here over time
[edit] SL Function Reference
[edit] Math Functions
[edit] abs
float abs(float f)
return the absolute value of the argument (negative numbers become positive)
[edit] acos
float acos(float f)
Returns the arc cosine of the argument (in radians)
[edit] asin
float asin(float)
Returns the arc sine of the argument (in radians)
[edit] atan
float atan(float f) float atan(float y,float x)
Returns the arc tangent of the argument (in radians). The second form of the function returns an answer covering -180 to 180 degrees using the signs of y and x to cover the full range.
[edit] ceil
float ceil(float f)
Returns the next highest integer for a float f.
[edit] clamp
color clamp(color c, float cmin, float cmax) float clamp(float f, float fmin, float fmax) normal clamp(normal n, normal nmin, normal nmax) point clamp(point p, normal pmin, normal pmax) vector clamp(vecotr v, vector vmin, vector vmax)
Clamps the first argument to the second two (inclusive)
[edit] comp
float comp(color c, float comp) float comp(matrix m, float row, float column) float comp(normal n, float c) float comp(point p, float c) float comp(vector v, float c)
Returns the numbered component from a color, point, normal or vector. The components are numbered x:0, y:1, z:2. The matrix form of the shadeop takes two arguments for the row and column, also numbered from 0.
[edit] cos
float cos(float f)
Returns the cosine of the argument (in radians)
[edit] degrees
float degrees(float f)
Converts the argument (in degrees) into radians
[edit] Deriv
float Deriv(float n,float den) color Deriv(color c,float den) normal Deriv(normal n,float den) vector Deriv(point p,float den) vector Deriv(vector v,float den)
Returns the derivative of the first argument with respect to the second. This is done using the chain rule, such that
Deriv(n,den) = Du(n)/Du(den) + Dv(n)/Dv(den);
[edit] determinant
float determinant(matrix m)
Returns the determinant of the matrix m. This is zero if the matrix is singular.
[edit] Du
float Du(float f) color Du(color c) normal Du(normal n) point Du(point p) vector Du(vector v)
Compute the derivative of the argument with respect to u
[edit] Dv
float Dv(float f) color Dv(color c) normal Dv(normal n) point Dv(point p) vector Dv(vector v)
Compute the derivative of the argument with respect to v
[edit] distance
float distance(point p1, float p2)
Returns the distance between the points p1 and p2
[edit] exp
float exp(float f)
Returns e to the power of x
[edit] floor
float floor(float f)
Returns the next lowest integer for the float f
[edit] inversqrt
float inversesqrt(float f)
Returns 1/sqrt(f)
[edit] length
float length(vector v)
Returns the length of the vector v
[edit] log
float log(float f) float log(float f,float b)
Returns log(f), the second form returns log base b of f.
[edit] max
float max(float f1,....) float max(vector v1,...)
Returns the maximum of the arguments given. The second form returns the maximum (component wise) of each component of the arguments, which can be a color, point, normal or vector.
[edit] min
float min(float f1,....) float min(vector v1,...)
Returns the minimum of the arguments given. The second form returns the minimum (component wise) of each component of the arguments, which can be a color, point, normal or vector.
[edit] mix
color mix(color a, color b, color alpha) color mix(color a, color b, float alpha) float mix(float a, float b, float alpha) normal mix(normal a, normal b, float alpha) normal mix(normal a, normal b, normal alpha) point mix(point a, point b, float f) point mix(point a, point b, point alpha) vector mix(vector a, vector b, float alpha) vector mix(vector a, vector b, vector alpha)
Mixes the first two arguments in the form:
(1-alpha)(a) + (alpha)(b)
This is done per component in the non-float versions of the function.
[edit] mod
mod(float a, float b)
Returns the remainder of a divided by b
[edit] normalize
color normalize(color c) normal normalize(normal n) point normalize(point p) vector normalize(vector v)
Returns the the normalized version argument. If the argument has zero length, a zero-length result will occur, otherwise the result is unit length.
[edit] pow
pow(float a, float b)
Returns a raised to the power b
[edit] ptlined
float ptlined(point p1, point p2, point q)
Returns the minimum perpendicular distance between the finite line passing through p1,p2 and the point q. If the shortest perpendicular distance between the point q and the infinite line between p1 and p2 is past the end of the finite line, then the distance between the nearest end of the line is returned.
[edit] radians
float radians(float f)
Returns the argument (in degrees) converted into radians
[edit] sign
sign(float f)
Returns 1 if the number is positive or zero, or -1 otherwise
[edit] sin
float sin(float f)
Returns the sine of the argument in radians
[edit] sqrt
float sqrt(float f)
Returns the square root of the argument
[edit] spline
float spline([string basis],float value,float f1,float f2,float f3,float f4....) float spline([string basis],float value,float fvals[]) color spline([string basis],float value,color c1,color c2,color c3,color c4....) color spline([string basis],float value,color fvals[]) point spline([string basis],float value,point p1,point p2,point p3,point p4....) point spline([string basis],float value,point pvals[]) normal spline([string basis],float value,normal n1,normal n2,normal n3,normal n4....) normal spline([string basis],float value,normal nvals[]) vector spline([string basis],float value,vector v1,vector v2,vector v3,vector v4....) vector spline([string basis],float value,vector vvals[])
Produces a spline interpolation of the provided values (either as an array or as inline arguments), based on the value value. The interpolation basis can be optionally specified, and defaults to catmull-rom. It can be one of "catmull-rom", "bezier", "bspline", "hermite". The number of required data points is
catmull-rom | any >= 4 |
bezier | 4n+3 |
hermite | 4n+2 |
bspline | any >= 4 |
[edit] round
float round(float f)
Rounds the argument to the nearest integer.
[edit] setcomp
setcomp(color c,float comp,float v) setcomp(matrix m,float row,float column,float v) setcomp(normal n,float comp,float v) setcomp(point p,float comp,float v) setcomp(vector v,float comp,float v)
Sets the specified component of the first argument to the value v. The matrix form takes two arguments, specifying row and column. Components are indexed from 0.
[edit] setxcomp
setxcomp(normal n, float v) setxcomp(point p,float v) setxcomp(vector v,float v)
Sets the x component of the first argument to the specified value.
[edit] setycomp
setycomp(normal n,float v) setycomp(point p,float v) setycomp(vector v,float v)
Sets the y component of the first argument to the specified value.
[edit] setzcomp
setzcomp(normal n, float v) setzcomp(point p, float v) setzcomp(vector v, float f)
Sets the z component of the first argument to the specified value.
[edit] tan
tan(float f)
Returns the tangent of the argument in radians.
[edit] xcomp
float xcomp(normal n) float xcomp(point p) float xcomp(vector v)
Returns the x component of the argument.
[edit] ycomp
float ycomp(normal n) float ycomp(point p) float ycomp(vector v)
Returns the y component of the argument.
[edit] zcomp
float zcomp(normal n) float zcomp(point p) float zcomp(vector v)
Returns the z component of the argument.
[edit] Lighting
[edit] ambient
color ambient()
Returns the ambient lighting contribution. Ambient lights are those which do not include a solar or illuminate shadeop.
[edit] diffuse
color diffuse(normal n) color diffuse(point p,normal n,float angle)
The first form returns the diffuse contribution given the surface normal n. It is equivalent to:
color diffuse(normal n) { extern point P; color C = 0; illuminance( P, n, PI/2 ) C += Cl * normalize(L).n; return C; }
The second form allows the position, and angle to be specified. It is equivalent to:
color diffuse( normal N, normal p, float angle ) { color C = 0; illuminance(p,n,angle) C += Cl * normalize(L).n; return C; }
[edit] phong
color phong(normal n,vector I,float size)
[edit] specular
color specular(normal n,vector I,float roughnes)
[edit] specularbrdf
color specularbrdf(vector L,normal n,vector I,float roughnes)
[edit] illuminate
illuminate(point position) { // statements } illuminate(point position,vector axis,float angle) { // statements }
The first form casts light from the specified position in all directions. The second form casts directional light from the specified position, along the specified axis with angular spread angle in radians.
Inside the loop L is the distance from Ps to the specified point position. Statements inside the loop set the lightingt contribution by setting Cl.
[edit] illuminance
illuminance([string category], point position ){ // statement } illuminance([string category], point position, vector axis, float angle ) { // statement }
Illuminance loops over lights (optionally specifying a lighting category to control which lights to include). The first form includes lights contributions from the entire sphere. The second form gathers lighting at the specified position in the cone specified by axis and angle. Inside the loop, statements have access to L - the light direction, and Cl the light color at the current shading point.
The optional category, if specified can include lights using "name" or exclude lights using "-name", where name is one of the named categories in a light's __category parameter. If category is not specified or is "" then all lights are considered.
[edit] solar
solar() { // statements } solar(vector axis,float angle) { // statements }
The solar loop emits light from a distant / infinite point. The first form emits light in all directions. The second form restricts light to a cone specified by axis and angle. Distant directional lightsources are typically specified with solar(dir,0). Inside the loop (as for illuminate), L is the direction of the surface element currently being shaded, and Cl is set to be the emitted light amount.
[edit] clearlighting
clearlighting()
Internally, Pixie caches lighting, so subsequent calls to diffuse() illuminance() and so on do not need to re-execute the lights. The positions,normals,distribution angles are used to determine when the saved lighting can be reused. The clearlighting() shadeop forces Pixie to recalculate lights. You should not need to call this.
[edit] photonmap
color photonmap(string mapname,point p,...) color photonmap(string mapname,point p,normal n,...)
where mapname is the name of the photon map (e.g. global.gpm),P is the lookup point and N is the lookup normal. The first form does not discriminate based on the normal - meaning it finds photons with all directions. The second form discriminates based on lookup normal, such that only photons travelling in the opposite direction to n will be found (those falling on the front side of the surface. The following optional parameters can also be passed:
uniform float estimator | The number of photons to use for lookup |
niform float maxRadius | The maximum lookup radius |
See Documentation/Global illumination
[edit] indirectdiffuse
color indirectdiffuse(point p,normal n,float samples,...)
See Documentation/Global Illumination
[edit] occlusion
float occlusion(point p,normal n,float samples,...)
Documentation/Global_illumination
[edit] Message Passing / Attributes & Options
[edit] attribute
float attribute(string attr,color res) float attribute(string attr,float res) float attribute(string attr,matrix res) float atrribute(string attr,normal res) float attribute(string attr,point res) float attribute(string attr,string res) float attribute(string attr,vector res)
[edit] displacement
float displacement(string attr,color res) float displacement(string attr,float res) float displacement(string attr,matrix res) float displacement(string attr,normal res) float displacement(string attr,point res) float displacement(string attr,string res) float displacement(string attr,vector res)
[edit] lightsource
float lightsource(string attr,color res) float lightsource(string attr,float res) float lightsource(string attr,matrix res) float lightsource(string attr,normal res) float lightsource(string attr,point res) float lightsource(string attr,string res) float lightsource(string attr,vector res)
[edit] incident
float incident(string attr,color res) float incident(string attr,float res) float incident(string attr,matrix res) float incident(string attr,normal res) float incident(string attr,point res) float incident(string attr,string res) float incident(string attr,vector res)
[edit] option
float option(string attr,color res) float option(string attr,float res) float option(string attr,matrix res) float option(string attr,normal res) float option(string attr,point res) float option(string attr,string res) float option(string attr,vector res)
[edit] opposite
float opposite(string attr,color res) float opposite(string attr,float res) float opposite(string attr,matrix res) float opposite(string attr,normal res) float opposite(string attr,point res) float opposite(string attr,string res) float opposite(string attr,vector res)
[edit] rendererinfo
float rendererinfo(string attr,color res) float rendererinfo(string attr,float res) float rendererinfo(string attr,matrix res) float rendererinfo(string attr,normal res) float rendererinfo(string attr,point res) float rendererinfo(string attr,string res) float rendererinfo(string attr,vector res)
[edit] surface
float surface(string attr,color res) float surface(string attr,float res) float surface(string attr,matrix res) float surface(string attr,normal res) float surface(string attr,point res) float surface(string attr,string res) float surface(string attr,vector res)
[edit] shadername
string shadername() string shadername(string shaderType)
[edit] Baking & 3D Textures
[edit] bake3d
bake3d(string filename,string channels,point P,normal N,...,<data>)
Bakes the specified data, which exists at point positions specified by P and normal N to the named pointcloud file. One channel should be given for each channel specified in the channel specifier string channels in the form "channelname",variable.
See Documentation/Baking 3D Textures.
[edit] texture3d
float texture3d(string filename, point p, normal n,...,<data>)
Reads the specified point cloud or brickmap, and returns the data associated with point P and normal N.
See Documentation/Baking 3D Textures.
[edit] Shading
[edit] area
float area(point P) float area(point P,string measure)
Returns the area of each micropolygon, using the point P as the point whose areas to measure. The second form of the area function takes an additional measure argument which can be one of "shading" or "dicing". If the measure is "shading" then the area shadeop works the same as the first version of the function. That is, the smooth derivatives version of the area is returned. If the measure is "dicing" then the non-smooth area is returned, which is exactly the area formed by the edge lengths of the grid for the point P.
[edit] checkers
float checkers()
Produces a checkerboard pattern in the shading grid, alternate vertices recieve 1 or 0. Used for debugging.
[edit] calculatenormal
point calculatenormal(point)
[edit] depth
float depth(point p)
Returns the depth of the point p - this matches the depth that would appear in a shadow map for the point p.
FIXME: we should convert to world space
[edit] faceforward
vector faceforward(vector N,vector I) vector faceforward(vector N,vector I,vector NRef)
Returns a vector such that I points the 'same' way as the normal N. The first form is equivalent to:
vector faceforward( vector N, vector I) { vector Nres; if (N.Ng > 0) { if (I.Ng > 0) Nres = -N; else Nres = N; } else { if (I.Ng > 0) Nres = N; else Nres = -N; } return Nres; }
And the second
vector faceforward( vector N, vector I, vector Nref) { vector Nres; if (N.Nref > 0) { if (I.Nref > 0) Nres = -N; else Nres = N; } else { if (I.Nref > 0) Nres = N; else Nres = -N; } return Nres; }
[edit] filterstep
float filterstep(float s,float....) float filterstep(float s1,float s2,float....)
Produces an antialiased step function. In the first form, the step function is filtered over the area of the current shading element. The second form is filtered inbetween s1 and s2. The optional arguments may also include
"width" | a filter area multiplier to allow over or under filtering |
"filter" | the filter type to use, which may be one of "gaussian","box","triangle","sinc","catmull-rom","blackman-harris","mitchell" |
[edit] smoothstep
float smoothstep(float min, float max, float value)
Produces a smooth s-curve when value is between min and max. If value is below min 0 is returned, and 1 is returned if value is above max.
[edit] step
float step(float min, float value)
Produces a sharp step at value=min. If value is below min 0 is returned, 1 is returned otherwise.
[edit] fresnel
fresnel(vector I,vector n,float eta,output float Kr,output float Kt) fresnel(vector I,vector n,float eta,output float Kr,output float Kt,vector R,vector T)
[edit] reflect
vector reflect(vector I,vector N)
Returns I reflected about the normal N. Equivalent to:
reflect(vector I,vector N) { return I-2*(N.I)*N; }
[edit] refract
vector refract(vector I,vector N,float eta)
Returns the refracted vector given the incident vector I, the normal N and the index of refraction eta. The value eta should be index of refraction (of the surface to be entered) in the volume containing the ray I.
vector refract( vector I, vector N; float eta ) { float IdotN = I.N; float k = 1 - eta*eta*(1 - IdotN*IdotN); return k < 0 ? 0 : eta*I - (eta*IdotN + sqrt(k))*N; }
[edit] Noise & Random
[edit] cellnoise
float|color|point|normal|vector cellnoise(float x) float|color|point|normal|vector cellnoise(float x, float y) float|color|point|normal|vector cellnoise(point p) float|color|point|normal|vector cellnoise(point p, float t)
Returns a pseudorandom result, which depends on the arguments - which can be 1,2,3 or 4 dimentional. The result is constant inbetween integer boundaries of each argument dimention. The result is uniformly distributed between 0 and 1, and can be used to construct vornoi noise or cell structure.
[edit] urandom
color|float|normal|point|vector urandom() color|float|normal|point|vector random()
Returns a uniformly distributed random number between 0 and 1.
[edit] noise
float|color|point|normal|vector noise(float x) float|color|point|normal|vector noise(float x, float y) float|color|point|normal|vector noise(point p) float|color|point|normal|vector noise(point p, float t)
Returns a pseudorandom function of it's arguments which can be 1,2,3 or 4 dimentional. The result is distributed between 0 and 1.
[edit] pnoise
float|color|point|normal|vector pnoise(float x,float period) float|color|point|normal|vector pnoise(float x, float y, float xperiod, float yperiod) float|color|point|normal|vector pnoise(point p, point period) float|color|point|normal|vector pnoise(point p, float t, point period, float tperiod)
Produces periodic pseudorandom noise in 1,2,3 or 4 dimentions, with the specified periods. The period must have integer values.
[edit] String functions
[edit] concat
string concat(string s1, string s2...)
Concatenates all the string arguments and returns them.
[edit] match
float match(string pat, string val)
[edit] format
string format(string format,....)
Much like printf, format returns a string which is the result of applying format to the arguments. See printf.
[edit] printf
printf(string format,...)
Printf prints the string, plus format specified by format to the console. Certain strings in format are treated specially, and may require additional arguments to passed to printf
- %f
- prints a float value, which must be specified
- %d
- prints an integer value, which must be specified
- %c
- prints a color value, which must be specified
- %n
- prints a normal value, which must be specified
- %v
- prints a vector value, which must be specified
- %s
- prints a string value, which must be specified
- %m
- prints a matrix value, which must be specified
- %%
- prints %
- \n
- prints a newline
- \t
- prints a tab character
[edit] Texturing
The texturing functions (texture, environment and shadow all take optional arguments, which are described below:
"filter" | Specifies the filter type to be used. Can be one of FIXME |
"blur" | Specifies the blurring of the texture call. Blurring of 1 means samples can cover the whole texture, 0 is perfectly sharp. |
"width" | specifies the filterwidth multiplier for s and t |
"swidth" | specifies the filterwidth multiplier in s |
"twidth" | specifies the filterwidth multiplier in t |
"fill" | the value to use for channels not present in the texture |
"samples" | how many samples to take for antialisaing and smooth blur purposes |
"bias" | the sample bias for shadows |
"maxdist" | the maximum distance to shoot rays if the texurename is "raytrace" |
"samplecone" | the angle in radians to shoot rays if the texturename is "raytrace" |
"label" | the ray label if the texturename is "raytrace" |
[edit] environment
color environment(string environmentname,vector R,...) float environment(string environmentname,vector R,...)
[edit] texture
color texture(string tex....) color texture(string tex,float s,float t,...) color texture(string tex,float s1,float t1,float s2,float t2,float s3,float t3,float s4,float t4,...)
float texture(string tex....) float texture(string tex,float s,float t,...) float texture(string tex,float s1,float t1,float s2,float t2,float s3,float t3,float s4,float t4,...)
[edit] textureinfo
float textureinfo(string texname,string property,color res) float textureinfo(string texname,string property,float res) float textureinfo(string texname,string property,matrix res) float textureinfo(string texname,string property,normal res) float textureinfo(string texname,string property,point res) float textureinfo(string texname,string property,string res) float textureinfo(string texname,string property,vector res)
[edit] shadow
color shadow(string shdname,point pos,...) float shadow(string shdname,point pos,...)
[edit] transformations
[edit] rotate
matrix rotate(matrix m,float angle,vector axis) point rotate(point p,float angle,point p1,point p2)
The second form rotates point p by angle in radians, about the axis that runs through points p1 and p2. The first form returns a matrix which results from concatenating the rotation specified by angle and axis onto the first matrix argument.
[edit] transform
point transform(string fromspace,string tospace,point p) point transform(string fromspace,matrix m,point p) point transform(string tospace,point p) point transform(matrix m,point p)
Transforms the point p to another named coordinate space. If fromspace is not specified, it is assumed to be "current".
[edit] translate
matrix translate(matrix m,point p)
Returns a matrix which results from concatenating the translation specified by p onto the first matrix argument.
[edit] vtransform
point vtransform(string fromspace,string tospace,point p) point vtransform(string fromspace,matrix m,point p) point vtransform(string tospace,point p) point vtransform(matrix m,point p)
Transforms the vector v to another named coordinate space. If fromspace is not specified, it is assumed to be "current".
[edit] scale
matrix scale(matrix m,point p)
Returns a matrix which results from concatenating the scaling specified by p onto the first matrix argument.
[edit] ntransform
point ntransform(string fromspace,string tospace,point p) point ntransform(string fromspace,matrix m,point p) point ntransform(string tospace,point p) point ntransform(matrix m,point p)
Transforms the normal v to another named coordinate space. If fromspace is not specified, it is assumed to be "current".
[edit] ctransform
color ctransform(string fromspace,string tospace,color c) color ctransform(string tospace,color c)
Transforms a color from one colorspace to another. If fromspace is not given, it is assumed to be "rgb". The space may be one of "rgb","hsl","hsv","xyz","yiq","xyy","cie".
[edit] raytracing
[edit] gather
gather([string category],point p,vector dir,float angle,float samples,...) { // statements } [ else { // statements } ]
Fires rays in a cone with apex at point p defined by the direction dir and the angular spread angle. The number of rays per shading point is controlled by samples.
uniform float bias | The self intersection bias. |
uniform float samplecone | Specifies the directional coherence of the rays (in radians) |
uniform float blur | Alternate way to specify the sample cone (1 is full hemisphere blur) |
uniform float maxdist | The maximum intersection distance |
uniform string distribution | The sample distribution ("cosine" or "uniform") |
uniform string label | The ray label |
float samplebase | Jitter the ray origin (1 by default) |
varying type shadertype:variablename | The query value (output) |
varying float ray:length | Length of the ray (output) |
varying vector ray:direction | The ray direction (output) |
See Documentation/Raytracing in SL#gather
[edit] trace
color trace(point p, vector dir,...) float trace(point p, vector dir,...)
See Documentation/Raytracing_in_SL#trace
[edit] transmission
color transmission(point p1,point p2,...)
Documentation/Raytracing_in_SL#transmission
[edit] visibility
float visibility(point p1,point p2)
Documentation/Raytracing_in_SL#visibility
[edit] raydepth
float raydepth()
Returns the depth of the current ray, which is 0 for camera rays, and increases by one at each level of shading when a ray is fired.
[edit] rayinfo
float rayinfo(string infotype, output float res) float rayinfo(string infotype, output string res)
See Documentation/Raytracing in SL#rayinfo
[edit] raylabel
string raylabel()Returns the current ray label, which may be none ("")