The Indigo Shader Language (ISL) allows users of Indigo to write programs (known as shaders) that can control many aspects of Indigo, such as all material parameters. (colour, roughness, displacement etc..)
ISL is based on Winter, a high performance functional programming language.
See https://github.com/glaretechnologies/winter for Winter documentation.
Prints the value of x to standard output, then returns it.
If there are multiple calls to print in a shader, the function calls are not guaranteed to execute in any particular order.
To view the standard output from Indigo, you will need to run the console version of Indigo - indigo_console. (indigo_console.exe on Windows etc..)
Returns pi.
Returns the remainder of x / y.
Returns sin(x).
Returns sin^-1(x).
Returns cos(x).
Returns cos^-1(x).
Returns tan(x).
Returns tan^-1(x).
Returns tan^-1(y/x), mapped into the range [-pi, pi]
Returns the absolute value of x.
Returns e^x.
Returns x^y.
Returns x^1/2.
Returns the natural logarithm of x, ln(x).
Returns the largest integer y, such that x >= y.
Returns the smallest integer y, such that x <= y.
Returns x – floor(x).
Returns floor(x) converted to an integer.
Returns ceil(x) converted to an integer.
Converts x to type real.
If x < y, returns x, otherwise returns y.
In the case of vec2 or vec3 arguments, the comparison is done component-wise.
If x > y, returns x, otherwise returns y.
In the case of vec2 or vec3 arguments, the comparision is done component-wise.
Returns x * (1 – t) + y * t
Returns max(minval, min(maxval, x)).
In the case of vec2 or vec3 arguments, the clamping is done component-wise.
Undefined if minval > maxval.
Returns 1 if x >= step_x, 0 otherwise.
Returns 0 if x <= a, 1 if x >= b, and interpolates smoothly between 0 and 1 as x ranges from a to b.
Like smoothstep but smoother.
0 if x < a or x > b, 1 otherwise.
0 when x < a, smoothly interpolates up to 1 when x is between a and b, 1 between b and c, smoothly interpolates down to 0 when x is between c and d. 0 when x > d.
Returns the 2 x 2 matrix
e11 e12
e21 e22
e11 e12 e13
e21 e22 e23
e31 e32 e33
Returns the 2 x 2 matrix AB.
Returns the 3 x 3 matrix AB.
Returns the 2-vector (2 x 1 matrix) Ab.
Returns the 3-vector (3 x 1 matrix) Ab.
Returns the transpose of A.
Returns the inverse of A. Undefined if A is not invertible.
Returns the shading normal for the current surface point in world space.
Returns the current surface point in object space coordinates.
Returns the minimum of the cosines of the zenith angles of the incident and exitant vectors of a ray scattering off a surface.
Returns the maximum of the cosines of the zenith angles of the incident and exitant vectors of a ray scattering off a surface.
Returns the intrinsic coordinates for the intersected triangle.
Returns a unique integer identifier for the currently hit object.
Return the mean curvature at the current point.
Curvature shader controlling the material colour. Red = negative mean curvature, green/blue = positive mean curvature.
The basic noise function is Perlin noise, which is a pseudo-random noise function.
This is an example of Perlin noise used as a displacement value:
Returns single-valued (scalar) Perlin noise evaluated at x. Values returned lie in the range from -1 to 1.
Returns single-valued Perlin noise evaluated at x.
Returns single-valued Perlin noise evaluated at x.
Returns 3-valued noise (each component is a decorrelated noise value) evaluated at 2d-coordinates.
Returns 3-valued noise (each component is a decorrelated noise value) evaluated at 3d-coordinates.
An example of 3-valued noise.
Returns 4-valued noise (each component is a decorrelated noise value) evaluated at 2d-coordinates.
Returns 4-valued noise (each component is a decorrelated noise value) evaluated at 3d-coordinates.
This type of noise is made by adding together a number of different frequences of Perlin noise together.
FBM, 1 Octave of noise.
FBM, 2 Octaves of noise.
FBM, 3 Octaves of noise.
FBM, 10 Octaves of noise.
Returns oc octaves of 1-D Fractional Brownian Motion noise evaluated at x.
Returns oc octaves of 2-D Fractional Brownian Motion noise evaluated at x.
Returns oc octaves of 3-D Fractional Brownian Motion noise evaluated at x.
Takes the floor of the coordinates passed in, and then returns a quasi-random value between 0 and 1 for those integer coordinates.
Grid noise.
Returns the coordinates of the nearest Voronoi site.
The irregularity argument controls the 'randomness' of the site positions. It should lie in the range [0, 1].
Irregularity of zero corresponds to a regular grid of site positions.
Irregularity of one corresponds to the maximum 'randomness' of cell positions within the grid, so that the grid is not visible.
A shader based on Voronoi noise. The white value of the shader is based on the distance in UV space from the shaded point to the nearest Voronoi site. Irregularity = 0.2.
A shader based on Voronoi noise. The white value of the shader is based on the distance in UV space from the shaded point to the nearest Voronoi site. Irregularity = 0.8.
Similar to above, but takes a 3d vector and returns the nearest Voronoi site in 3d.
This fbm function is a more general fbm that takes more parameters.
basis_type selects from a number of basis noise functions:
0: Perlin basis
1: Ridged basis
2: Voronoi basis
x is a 3-vector at which the noise is evaluated.
H controls the fractal dimension: a larger value causes faster attenuation of higher frequencies.
A good default value is 1.
Lacunarity determines the gap in frequencies between different 'octaves' of noise.
A larger lacunarity means each subsequence octave will have higher frequency.
A good default value is 2.
Octaves determines the number of octaves of noise that are added together. If the value has a fractional component, the last octave is attenuated by the fractional part then added.
Perlin basis, 1 octave
Ridged basis, 1 octave
Voronoi basis, 1 octave
Perlin basis, 1 octave
Perlin basis, 2 octaves
Perlin basis, 3 octaves
Perlin basis, 10 octaves
Ridged basis, 1 octave
Ridged basis, 10 octaves
Voronoi basis, 1 octave
Voronoi basis, 10 octaves
Ridged basis, H=1
Ridged basis, H=1.5
Ridged basis, H=2
Ridged basis, lacunarity = 3
Ridged basis, lacunarity = 4
Ridged basis, lacunarity = 6
You can download the example Indigo scene used in the images above here.
Gets the i-th texture coordinates at the shading point, where i = texcoord_set_index.
Samples the i-th texture defined in the current material, where i = texture_index is a 0-based index, at the normalised coordinates (s, t). Returns a (R, G, B) triplet, where each component will be in the range [0, 1].
Returns the 2-vector (x, y).
Returns the 2-vector (x, x).
Returns the 3-vector (x, y, z).
Returns the 3-vector (x, x, x).
Returns the dot product of a and b.
Returns the cross product of a and b.
Returns the length of a, ||a||.
Returns a / ||a||