SeExprSimple node
This documentation is for version 2.0 of SeExprSimple (fr.inria.openfx.SeExprSimple).
Description
Use the SeExpr expression language (by Walt Disney Animation Studios) to process images.
What is SeExpr?
SeExpr is a very simple mathematical expression language used in graphics software (RenderMan, Maya, Mudbox, Yeti).
See the SeExpr Home Page and SeExpr Language Documentation for more information.
SeExpr is licensed under the Apache License, Version 2.0, and is Copyright Disney Enterprises, Inc.
SeExpr vs. SeExprSimple
The SeExpr plugin comes in two versions:
SeExpr has a single vector expression for the color channels, and a scalar expression for the alpha channel. The source color is accessed through the
Cs
vector, and alpha through theAs
scalar, as specified in the original SeExpr language.SeExprSimple has one scalar expression per channel, and the source channels may also be accessed through scalars (
r
,g
,b
,a
).
SeExpr extensions
A few pre-defined variables and functions were added to the language for filtering and blending several input images.
The following pre-defined variables can be used in the script:
x
: X coordinate (in pixel units) of the pixel to render.y
: Y coordinate (in pixel units) of the pixel to render.u
: X coordinate (normalized in the [0,1] range) of the output pixel to render.v
: Y coordinate (normalized in the [0,1] range) of the output pixel to render.sx
,sy
: Scale at which the image is being rendered. Depending on the zoom level of the viewer, the image might be rendered at a lower scale than usual. This parameter is useful when producing spatial effects that need to be invariant to the pixel scale, especially when using X and Y coordinates. (0.5,0.5) means that the image is being rendered at half of its original size.par
: The pixel aspect ratio.cx
,cy
: Shortcuts for(x + 0.5)/par/sx
and(y + 0.5)/sy
, i.e. the canonical coordinates of the current pixel.frame
: Current frame being renderedSeExprSimple only:
r
,g
,b
,a
: RGBA channels (scalar) of the image from input 1.SeExprSimple only:
rN
,gN
,bN
,aN
: RGBA channels (scalar) of the image from input N, e.g.r2
anda2
are red and alpha channels from input 2.Cs
,As
: Color (RGB vector) and alpha (scalar) of the image from input 1.CsN
,AsN
: Color (RGB vector) and alpha (scalar) of the image from input N, e.g.Cs2
andAs2
for input 2.output_width
,output_height
: Dimensions of the output image being rendered.input_width
,input_height
: Dimensions of image from input 1, in pixels.input_widthN
,input_heightN
: Dimensions of image from input N, e.g.input_width2
andinput_height2
for input 2.
The following additional functions are available:
color cpixel(int i, int f, float x, float y, int interp = 0)
: interpolates the color from input i at the pixel position (x,y) in the image, at frame f.float apixel(int i, int f, float x, float y, int interp = 0)
: interpolates the alpha from input i at the pixel position (x,y) in the image, at frame f.
The pixel position of the center of the bottom-left pixel is (0., 0.).
The first input has index i=1.
interp
controls the interpolation filter, and can take one of the following values:
0: impulse - (nearest neighbor / box) Use original values
1: bilinear - (tent / triangle) Bilinear interpolation between original values
2: cubic - (cubic spline) Some smoothing
3: Keys - (Catmull-Rom / Hermite spline) Some smoothing, plus minor sharpening (*)
4: Simon - Some smoothing, plus medium sharpening (*)
5: Rifman - Some smoothing, plus significant sharpening (*)
6: Mitchell - Some smoothing, plus blurring to hide pixelation (*)(+)
7: Parzen - (cubic B-spline) Greatest smoothing of all filters (+)
8: notch - Flat smoothing (which tends to hide moire’ patterns) (+)
Some filters may produce values outside of the initial range (*) or modify the values even at integer positions (+).
Sample scripts
Add green channel to red, keep green, and apply a 50% gain on blue
SeExprSimple:
r+g
g
0.5*b
SeExpr:
[Cs[0]+Cs[1], Cs[1], 0.5*Cs[2]]
“Multiply” merge operator on inputs 1 and 2
SeExprSimple:
r*r2
g*g2
b*b2
a+a2-a*a2
SeExpr:
Cs * Cs2
As + As2 - As * As2
“Over” merge operator on inputs 1 and 2
SeExprSimple:
r+r2*(1-a)
g+g2*(1-a)
b+b2*(1-a)
a+a2-a*a2
SeExpr:
Cs + Cs2 * (1 - As)
As + As2 - As * As2
Generating a time-varying colored Perlin noise with size x1
cnoise([cx/x1,cy/x1,frame])
Average pixels over the previous, current and next frame
SeExpr:
prev = cpixel(1,frame - 1,x,y);
cur = Cs;
next = cpixel(1,frame + 1,x,y);
(prev + cur + next) / 3;
“Wave” - displace columns of pixels vertically according to a sine wave function
SeExpr:
cpixel(1,frame,x,y+x2*sy*sin(2*3.1416*(x/sx - x3)/x1),2)
Set the No. of scalar params to 3.
x1 is the horizontal wavelength in pixels.
x2 is the vertical amplitude in pixels.
x3 is the horizontal shift in pixels.
Custom parameters
To use custom variables that are pre-defined in the plug-in (scalars, positions and colors) you must reference them using their script-name in the expression. For example, the parameter x1 can be referenced using x1 in the script:
Cs + x1
Multi-instruction expressions
If an expression spans multiple instructions (usually written one per line), each instruction must end with a semicolon (‘;’). The last instruction of the expression is considered as the final value of the pixel (a RGB vector or an Alpha scalar, depending on the script), and must not be terminated by a semicolon. More documentation is available on the SeExpr website.
Accessing pixel values from other frames
The input frame range used to render a given output frame is computed automatically if the following conditions hold:
The
frame
parameter to cpixel/apixel must not depend on the color or alpha of a pixel, nor on the result of another call to cpixel/apixelA call to cpixel/apixel must not depend on the color or alpha of a pixel, as in the following:
if (As > 0.1) { src = cpixel(1,frame,x,y); } else { src = [0,0,0]; }
If one of these conditions does not hold, all frames from the specified input frame range are asked for.
Inputs
Input |
Description |
Optional |
---|---|---|
1 |
Yes |
|
2 |
Yes |
|
3 |
Yes |
|
4 |
Yes |
Controls
Parameter / script name |
Type |
Default |
Function |
---|---|---|---|
Region of Definition / |
Choice |
Union |
Region of definition (extent) of the output.
Union (union): The output region is the union of the regions of definition of all connected inputs.
Intersection (intersection): The output region is the intersection the regions of definition of all connected inputs.
Size (size): The output region is the size of the rectangle overlay.
Format (format): The output region is the specified format.
Project (project): The output region is the size of the project.
Input1 (input1): The output region is the region of definition of input 1
Input2 (input2): The output region is the region of definition of input 2
Input3 (input3): The output region is the region of definition of input 3
Input4 (input4): The output region is the region of definition of input 4
Input5 (input5): The output region is the region of definition of input 5
Input6 (input6): The output region is the region of definition of input 6
Input7 (input7): The output region is the region of definition of input 7
Input8 (input8): The output region is the region of definition of input 8
Input9 (input9): The output region is the region of definition of input 9
Input10 (input10): The output region is the region of definition of input 10
|
Output components / |
Choice |
RGBA |
Specify what components to output. In RGB only, the alpha script will not be executed. Similarly, in alpha only, the RGB script will not be executed.
RGBA
RGB
Alpha
|
Format / |
Choice |
PC_Video 640x480 |
The output format
PC_Video 640x480 (PC_Video)
NTSC 720x486 0.91 (NTSC)
PAL 720x576 1.09 (PAL)
NTSC_16:9 720x486 1.21 (NTSC_16:9)
PAL_16:9 720x576 1.46 (PAL_16:9)
HD_720 1280x1720 (HD_720)
HD 1920x1080 (HD)
UHD_4K 3840x2160 (UHD_4K)
1K_Super35(full-ap) 1024x778 (1K_Super35(full-ap))
1K_Cinemascope 914x778 2 (1K_Cinemascope)
2K_Super35(full-ap) 2048x1556 (2K_Super35(full-ap))
2K_Cinemascope 1828x1556 2 (2K_Cinemascope)
2K_DCP 2048x1080 (2K_DCP)
4K_Super35(full-ap) 4096x3112 (4K_Super35(full-ap))
4K_Cinemascope 3656x3112 2 (4K_Cinemascope)
4K_DCP 4096x2160 (4K_DCP)
square_256 256x256 (square_256)
square_512 512x512 (square_512)
square_1K 1024x1024 (square_1K)
square_2K 2048x2048 (square_2K)
|
Bottom Left / |
Double |
x: 0 y: 0 |
Coordinates of the bottom left corner of the size rectangle. |
Size / |
Double |
w: 1 w: 1 |
Width and height of the size rectangle. |
Interactive Update / |
Boolean |
Off |
If checked, update the parameter values during interaction with the image viewer, else update the values when pen is released. |
No. of Scalar Params / |
Integer |
0 |
Use this to control how many scalar parameters should be exposed to the SeExpr expression. |
x1 / |
Double |
0 |
A custom 1-dimensional variable that can be referenced in the expression by its script-name, x1 |
x2 / |
Double |
0 |
A custom 1-dimensional variable that can be referenced in the expression by its script-name, x2 |
x3 / |
Double |
0 |
A custom 1-dimensional variable that can be referenced in the expression by its script-name, x3 |
x4 / |
Double |
0 |
A custom 1-dimensional variable that can be referenced in the expression by its script-name, x4 |
x5 / |
Double |
0 |
A custom 1-dimensional variable that can be referenced in the expression by its script-name, x5 |
x6 / |
Double |
0 |
A custom 1-dimensional variable that can be referenced in the expression by its script-name, x6 |
x7 / |
Double |
0 |
A custom 1-dimensional variable that can be referenced in the expression by its script-name, x7 |
x8 / |
Double |
0 |
A custom 1-dimensional variable that can be referenced in the expression by its script-name, x8 |
x9 / |
Double |
0 |
A custom 1-dimensional variable that can be referenced in the expression by its script-name, x9 |
x10 / |
Double |
0 |
A custom 1-dimensional variable that can be referenced in the expression by its script-name, x10 |
No. of 2D Params / |
Integer |
0 |
Use this to control how many 2D (position) parameters should be exposed to the SeExpr expression. |
pos1 / |
Double |
x: 0 y: 0 |
A custom 2-dimensional variable that can be referenced in the expression by its script-name, pos1 |
pos2 / |
Double |
x: 0 y: 0 |
A custom 2-dimensional variable that can be referenced in the expression by its script-name, pos2 |
pos3 / |
Double |
x: 0 y: 0 |
A custom 2-dimensional variable that can be referenced in the expression by its script-name, pos3 |
pos4 / |
Double |
x: 0 y: 0 |
A custom 2-dimensional variable that can be referenced in the expression by its script-name, pos4 |
pos5 / |
Double |
x: 0 y: 0 |
A custom 2-dimensional variable that can be referenced in the expression by its script-name, pos5 |
pos6 / |
Double |
x: 0 y: 0 |
A custom 2-dimensional variable that can be referenced in the expression by its script-name, pos6 |
pos7 / |
Double |
x: 0 y: 0 |
A custom 2-dimensional variable that can be referenced in the expression by its script-name, pos7 |
pos8 / |
Double |
x: 0 y: 0 |
A custom 2-dimensional variable that can be referenced in the expression by its script-name, pos8 |
pos9 / |
Double |
x: 0 y: 0 |
A custom 2-dimensional variable that can be referenced in the expression by its script-name, pos9 |
pos10 / |
Double |
x: 0 y: 0 |
A custom 2-dimensional variable that can be referenced in the expression by its script-name, pos10 |
No. of Color Params / |
Integer |
0 |
Use this to control how many color parameters should be exposed to the SeExpr expression. |
color1 / |
Color |
r: 0 g: 0 b: 0 |
A custom RGB variable that can be referenced in the expression by its script-name, color1 |
color2 / |
Color |
r: 0 g: 0 b: 0 |
A custom RGB variable that can be referenced in the expression by its script-name, color2 |
color3 / |
Color |
r: 0 g: 0 b: 0 |
A custom RGB variable that can be referenced in the expression by its script-name, color3 |
color4 / |
Color |
r: 0 g: 0 b: 0 |
A custom RGB variable that can be referenced in the expression by its script-name, color4 |
color5 / |
Color |
r: 0 g: 0 b: 0 |
A custom RGB variable that can be referenced in the expression by its script-name, color5 |
color6 / |
Color |
r: 0 g: 0 b: 0 |
A custom RGB variable that can be referenced in the expression by its script-name, color6 |
color7 / |
Color |
r: 0 g: 0 b: 0 |
A custom RGB variable that can be referenced in the expression by its script-name, color7 |
color8 / |
Color |
r: 0 g: 0 b: 0 |
A custom RGB variable that can be referenced in the expression by its script-name, color8 |
color9 / |
Color |
r: 0 g: 0 b: 0 |
A custom RGB variable that can be referenced in the expression by its script-name, color9 |
color10 / |
Color |
r: 0 g: 0 b: 0 |
A custom RGB variable that can be referenced in the expression by its script-name, color10 |
Input Frame Range / |
Integer |
min: 0 max: 0 |
Default input frame range to fetch images from (may be relative or absolute, depending on the “frameRangeAbsolute” parameter). Only used if the frame range cannot be statically computed from the expression. This parameter can be animated. |
Absolute Frame Range / |
Boolean |
Off |
If checked, the frame range is given as absolute frame numbers, else it is relative to the current frame. |
R= / |
String |
Expression to compute the output red channel. If empty, the channel is left unchanged. |
|
G= / |
String |
Expression to compute the output green channel. If empty, the channel is left unchanged. |
|
B= / |
String |
Expression to compute the output blue channel. If empty, the channel is left unchanged. |
|
A= / |
String |
Expression to compute the output alpha channel. If empty, the channel is left unchanged. |
|
Help… / |
Button |
Display help about using SeExpr. |
|
Invert Mask / |
Boolean |
Off |
When checked, the effect is fully applied where the mask is 0. |
Mix / |
Double |
1 |
Mix factor between the original and the transformed image. |