Apple Shake是非常强大的后期合成软件,在很多著名电影中都有应用,例如《金刚》等。Shake的表达式跟C语言很像,先贴个操作符、函数表格以供参考。
Arithmetic Operators |
|
* |
Multiply |
/ |
Divide |
+ |
Plus |
- |
Subtract |
Relational Operators |
|
< |
Less than |
> |
Greater than |
<= |
Less than or equal to |
>= |
Greater than or equal to |
== |
Equal to |
!= |
Not equal to |
Logical Operators |
|
&& |
And |
|| |
Or |
! |
Not |
Conditional Expression |
|
expr1?expr2:expr3 |
If expr1 is true (non-zero), then to expr2, else do expr3 |
Global Variables |
|
time |
Current frame number |
Image Variables |
These are variables carried by each node. |
parameterName |
Value of parameterName from inside that node. |
nodeName.parameterName |
Value of parameterName in nodeName from outside of that node. |
parameterName@@time |
Allows you to access a value at a different frame. For example: Blur1.xPixel@@(time-3) looks at the value from 3 frames earlier. |
bytes |
The number of bytes in that image. This takes the input bit-depth when called from inside of the node, and the output bit-depth when called from outside of the node. |
width |
Width of the image. Takes the input width when called from inside of the node, and the output width when called from outside of the node. |
height |
Height of the image. Takes the input height when called from inside of the node, and the output height when called from outside of the node. |
_curImageName |
Returns the name of the actual file being used for the current frame. Useful when plugged into a Text node: {FileIn1._curImageName} |
dod[0], dod[1], dod[2], dod[3] |
The variable for the Domain of Definition xMin, yMin, xMax, yMax, respectively. |
In-Node Variables |
These are channel variables used in nodes such as ColorX , LayerX , Reorder , etc. Check the documentation for specific support of any variable. |
nr, ng, nb, na, nz |
New red, green, blue, alpha, Z channel |
r, g, b, a, z |
Original red, green, blue, alpha, Z channels |
l |
Luminance channel for Reorder |
n |
Null channel. Strips out the alpha in Reorder when used like this: rgbn |
r2, g2, b2, a2, z2 |
Second image's channel for LayerX |
Math Functions |
|
abs(x) |
Integer absolute value. abs(-4) = 4. Be careful, as this will return an integer, not a float. Use fabs for float. |
biasedGain(value, gain, bias) |
This gives a ContrastLum -like curve that gives rolloff between two values. |
cbrt(x) |
Cubic root. cbrt(8) = 2 |
ceil(x) |
Truncates to next integer. ceil(5.3) = 6 |
clamp(x, lo, hi) |
Clamps x to between lo and hi |
exp(x) |
Natural exponent. exp(0) = 1 |
fabs(x) |
Float absolute value. fabs(-4.1) = 4.1 |
floor(x) |
Truncates to next lowest integer. floor(5.8) = 5 |
fmod(x,y) |
Float modulus. Returns the remainder in float. |
log(x) |
Natural log. log(1) = 0 |
log10(x) |
Returns base 10 log. log10(10) = 1 |
M_PI |
A variable set to pi at 20 decimal places |
max(a,b) |
Returns maximum between a and b |
max3(a,b,c) |
Returns maximum between a, b, and c. |
min(a,b) |
Returns minumum between a and b. |
min3(a,b,c) |
Returns minumum between a, b, and c. |
a%b |
Modulus. 27%20 = 7 |
pow(x,y) |
Returns x to the y power. pow(2,4) = 16 |
round(x) |
Rounds number off. Values below x.5 are rounded to x, values equal to or above x.5 are rounded to x+1. round(4.3) = 4 |
sqrt(x) |
Square root. sqrt(9) = 3 |
Noise Functions |
These are ideal for WarpX and ColorX. |
noise(seed) |
1 dimensional cubic spline interpolation of noise |
noise2d(seed,seed) |
2d noise |
noise3d(seed,seed,seed) |
3d noise |
noise4d(seed,seed,seed,seed) |
4d noise |
lnoise(seed) |
1d linear interpolation of noise |
lnoise2d(seed,seed) |
2d noise |
lnoise3d(seed,seed,seed) |
3d noise |
lnoise4d(seed,seed,seed,seed) |
4d noise |
fnoise(x,xScale) |
1d fractal noise based on noise() |
fnoise2d(x,y,xScale,yScale) |
|
fnoise3d(x, y, z, xScale, yScale, zScale) |
|
turbulence(x, xScale) |
A cheaper, rougher version of fnoise(). |
turbulence2d(x, y, xScale, yScale ) |
Continuous 2d noise |
turbulence3d(x, y, z, xScale, yScale, zScale) |
Continuous 3d noise |
rnd(seed) |
Hash-based pseudo-random numbers. Non-hash based RNG (like rand() or drand48()) should not be used in Shake because they can't be reproduced from one machine to another, and even on the same machine, repeated evaluations of the same node at the same time would produce different results. |
rnd1d(seed, seed) |
1d random value |
rnd2d(seed,seed,seed) |
2d random value |
rnd3d(seed,seed,seed,seed) |
3d random value |
rnd4d(seed,seed,seed,seed,seed) |
4d random value |
Trig Functions (in radians) |
|
M_PI |
A variable set to pi at 20 decimal places. |
acos(A) |
Arc cosine in radians |
asin(A) |
Arc sine |
atan(A) |
Arc tangent |
atan2(y,x) |
Returns the radian verifying sin(a) = y and cos(a) = x. |
cos(A) |
Cosine |
sin(A) |
Sin |
Trig Functions (in degrees) |
|
|
Hmmm, yummy trigonometry! Welcome back. For those of you who may have forgotten, here is a helpful chart for some commonly used equations. |
acosd(A) |
arc cosine in degrees |
asind(A) |
arc sine in degrees |
atand(A) |
arc tangent in degrees |
atan2d(y,x) |
returns the angle verifying sin(a) = y and cos(a) = x. |
cosd(A) |
cosine in degrees |
distance(x1,y1,x2,y2) |
calculates the distance between two points, (x1,y1) and (x2, y2) |
sind(A) |
sin in degrees |
tand(A) |
tangent in degrees |
String Functions |
|
stringf( "xyz", ...) |
Since you basically can write books on this, here is an example. Otherwise, it is recommended to purchase a book on C. There are also several examples under the Scripts documentation. This example takes the scriptName parameter and uses the system function echo to print it: extern "C" int system(const char*); |
printf( "xyz", ...) |
|
strlen("mystring") |
Returns the length of the string |
strsub( |
Extracts a string from another string. |
Curve Functions |
The curve functions with implicit time ( Linear , CSpline , etc.) all assume that time is the first argument, so the following statements are identical: LinearV(time,0,1@1,20@20) You can, however, adjust the time value explictly with the V version of each curve type. For more infomation on spline types, jump to About Splines . These are the cycle type codes: 0 = KeepValue |
biasedGain(x,gain,bias) |
Gives a smoothly ramped interpolation between 0 and 1, similar to Shake's contrast curve. gain increase the contrast, and bias offsets the center. |
Linear(cycle, |
Linear interpolation from value at key1 to value at key2, etc. |
LinearV(time_value, cycle, value@key1, |
Linear interpolation from value at key1 to value at key2, etc. |
CSpline(cycle, |
Cardinal-spline interpolation, a.k.a. Catmull-Rom splines |
CSplineV(time_value, cycle, value@key1, |
Cardinal-spline interpolation, a.k.a. Catmull-Rom splines |
JSpline(cycle, |
Jeffress-spline interpolation |
JSplineV(time_value, cycle, value@key1, |
Jeffress-spline interpolation |
NSpline(cycle, |
Natural-spline interpolation |
NSplineV(time_value, cycle, value@key1, value@key2,...) |
Natural-spline interpolation |
Hermite(cycle, |
Hermite-spline interpolation |
HermiteV(time_value, cycle, |
Hermite-spline |