SeExpr QuickRef
SeExpr QuickRef
Walt Disney Animation Studios提供(以下参照)
Shader/XGen/Paint3dエクスプレッション
- Variables(変数)
- Color, Masking, Remapping Funcitons(カラー,マスク,リマップの関数)
- Noise Functions(ノイズ関数)
- Texture Lookup Functions(テクスチャルックアップ関数)
- Selection Functions(選択関数)
- General Math Functions and Constants(一般数学関数および定数)
- Trigonometry Functions(三角関数)
- Vector Functions(ベクトル関数)
- Vector Support(ベクトルサポート)
- Curve Functions(カーブ関数)
- Misc Functions(その他の関数)
- Operators(演算子)
- Assignment Operators(アサイン演算子)
- Comments(コメント)
- Custom Plugins(カスタムプラグイン)
Variables(変数)
使用する特定の変数は、エクスプレッション言語が使用されているコンテキストに依存します。 一般的な慣例としては、色々なコンテキストで以下の変数を使用します。 これらは単なる例です。 通常、エクスプレッションを使用するソフトウェアの開発者は、オートコンプリートのヘルプを使って利用可能な変数を登録するため、 エクスプレッションエディタで$をタイプすると、利用可能な変数のリストがポップアップで表示されます。
Image Variables(画像変数)- $u, $v -テクスチャ座標(スカラー)
- $Cs, ソース画像のカラー(ベクトル)
- $As, ソース画像のアルファ(スカラー)
- $Cs, ソース画像のカラー(ベクトル)
- $u, $v -テクスチャ座標(スカラー)
- $P - サーフェスポイント(ベクトル)。注: $PはPrefジオメトリからサンプリングされます(使用可能な場合)
- $N - サーフェス法線
- $objectId - サーフェス毎の固有オブジェクトID,通常では小さな整数
- $frame - 現行フレーム番号
ローカル変数は、エクスプレッションの初めに定義することができます:
$a = noise($P);
$b = noise($a * 1);
pow($a, 0.5) + $b
$P = $P * 10; # increase noise frequency
fbm(vnoise($P) + $P/4)
Color, Masking, Remapping Functions(カラー,マスク,リマップの関数)
float clamp ( float x, float lo, float hi ) - xを[lo, hi]の範囲に制限します。float compress ( float x, float lo, float hi )
float remap ( float x, float source, float range, float falloff, int interp )
int linear = 0
int smooth = 1
int gaussian = 2
color saturate ( color x, float amt )
color rgbtohsl ( color rgb )
color hsltorgb ( color hsl )
HSLはHue(色相), Saturation(彩度), Lightness(明るさ)です(すべて[0..1]の範囲)。
また、これらの関数を拡張すると、合理的な方法で[0..1]範囲外にあるrgbとhslの値をサポートします。 rgbまたはhsl値が何であっても(マイナスのs値以外)、変換は問題なく定義され、逆の変換も可能です。
float bias ( float x, float b)
float fit ( float x, float a1, float b1, float a2, float b2 )
float boxstep ( float x, float a )
float gaussstep ( float x, float a, float b )
float linearstep ( float x, float a, float b )
float smoothstep ( float x, float a, float b )
Noise Functions
float rand ( [float min, float max], [float seed] )シードを与えると、この関数は内部シードに追加して使用されますが、 別々に複数のジェネレータを作成するのに使用することができます。
float cellnoise2 ( float x, float y )
float cellnoise3 ( float x, float y, float z )
color ccellnoise ( vector v ) - color cellnoise
float noise ( vector v )
float noise ( float x, float y )
float noise ( float x, float y, float z )
float noise ( float x, float y, float z, float w )
color cnoise ( vector v) - カラーのノイズ
float snoise ( vector v) - 符号付きノイズ w/ -1から1までの範囲。
vector vnoise (vector v ) - 符号付きベクトルノイズ
color cnoise4 ( vector v, float t) - カラーノイズ
float snoise4 ( vector v, float t) - 符号付きノイズ w/ -1から1までの範囲。
vector vnoise4 (vector v, float t ) - 符号付きベクトルノイズ
float pnoise ( vector v, vector period ) - 周期ノイズ
float perlin ( vector v )
color cperlin ( vector v) - カラーノイズ
float sperlin ( vector v) - 符号付きノイズ w/ -1から1までの範囲。
vector vperlin (vector v ) - 符号付きベクトルノイズ
float fbm ( vector v, int octaves = 6, float lacunarity = 2, float gain = 0.5 )
color cfbm ( vector v, int octaves = 6, float lacunarity = 2, float gain = 0.5 )
vector vfbm ( vector v, int octaves = 6, float lacunarity = 2, float gain = 0.5 )
float fbm4 ( vector v, float time, int octaves = 6, float lacunarity = 2, float gain = 0.5 )
color cfbm4 ( vector v, float time, int octaves = 6, float lacunarity = 2, float gain = 0.5 )
vector vfbm4 ( vector v, float time, int octaves = 6, float lacunarity = 2, float gain = 0.5 )
float turbulence ( vector v, int octaves = 6, float lacunarity = 2, float gain = 0.5 )
color cturbulence ( vector v, int octaves = 6, float lacunarity = 2, float gain = 0.5 )
vector vturbulence ( vector v, int octaves = 6, float lacunarity = 2, float gain = 0.5 )
float voronoi ( vector v, int type = 1, float jitter = 0.5, float fbmScale = 0, int fbmOctaves = 4, float fbmLacunarity = 2, float fbmGain = 0.5)
color cvoronoi ( vector v, int type = 1, float jitter = 0.5, float fbmScale = 0, int fbmOctaves = 4, float fbmLacunarity = 2, float fbmGain = 0.5)
vector pvoronoi ( vector v, float jitter = 0.5, float fbmScale = 0, int fbmOctaves = 4, float fbmLacunarity = 2, float fbmGain = 0.5)
1から5までのVoronoiタイプ:
Selection Functions(選択関数)
int cycle ( int index, int loRange, int hiRange )int pick ( float index, int loRange, int hiRange, [float weights, ...] )
この値は、指定したウェイトに応じて配分されます。
サンプル:
- pick ( value, 1, 10 ) - 1から10までの間の整数値が返されます。
- pick ( value, 1, 10, 2, 2.5 ) - 1と2の値が、他の値(3-10)と比較するたびに、それぞれ2回および2.5回返されます。
- pick ( value, 10, 20, 1, 1, 0 ) - 10、11、および13から20が返されます(12はゼロウェイトのためスキップされます)。
- map( 'noise.%d.map.tx', 10 ) 'noise.10.map.tx'という名前のファイルを参照します
- map( 'fenceColor-%04d.tx', 12 ) 'fenceColor-0012.tx'という名前のファイルを参照します
- map( 'map-%d.tx', $objectId) オブジェクトIDに基づいてファイル名を構築します
- map( 'map-%d.tx', cycle($objectId, 10, 20)) オブジェクトIDに基づいて10から20までのマップにより循環させます
- map( 'map-%d.tx', pick($objectId, 10, 20)) オブジェクトIDに基づいて10から20までのマップをランダムに選びます
General Math Functions and Constants(一般数学関数および定数)
float PI= 3.14159...float E = 2.71828...
float abs ( float x) - xの絶対値
float max ( float a, float b ) - aとbで大きい方
float min ( float a, float b ) - aとbで小さい方
float fmod ( float x, float y) - x / yの剰余('%'演算子としても利用可能)
float cbrt ( float x ) - 立方根
float sqrt ( float x ) - 平方根
float ceil ( float x ) - この値よりも大きい整数
float floor ( float x ) - この値よりも小さい整数
float round ( float x ) - 四捨五入した整数
float trunc ( float x ) - 0に近い方の整数
float exp ( float x ) - Eのx乗
float log ( float x ) - 自然対数
float log10 ( float x ) - 10を底とする自然対数
float pow ( float x, float y ) - xのy乗('^'演算子としても利用可能)
Trigonometry Functions(三角関数)
float acos ( float x ) - アークコサインfloat asin ( float x ) - アークサイン
float atan ( float x ) - アークタンジェント
float atan2 ( float y, float x) - -PIからPIまでのy/xアークタンジェント
float cos ( float x ) - コサイン
float sin ( float x ) - サイン
float tan ( float x ) - タンジェント
float acosd ( float x ) - アークコサイン(度)
float asind ( float x ) - アークサイン(度)
float atand ( float x ) - アークタンジェント(度)
float atan2d ( float y, float x ) - -180から180までのy/xアークタンジェント
float cosd ( float x ) - コサイン(度)
float sind ( float x ) - サイン(度)
float tand ( float x ) - タンジェント(度)
float acosh ( float x ) - ハイパーボリックアークコサイン
float asinh ( float x ) - ハイパーボリックアークサイン
float atanh ( float x ) - ハイパーボリックアークタンジェント
float cosh ( float x ) - ハイパーボリックコサイン
float sinh ( float x ) - ハイパーボリックサイン
float tanh ( float x ) - ハイパーボリックタンジェント
float deg ( float x ) - ラジアンから度
float rad ( float x ) - 度からラジアン
float hypot ( float x, float y ) - 2dベクトル(x,y)の長さ
Vector Functions(ベクトル関数)
float angle( vector a, vector b ) - 2つのベクトル間の角度(ラジアン)vector cross ( vector a, vector b ) - ベクトル外積
float dist ( vector a, vector b ) - 2つのポイント間の距離
float dot ( vector a, vector b) - ベクトル内積
float length ( vector v ) - ベクトルの長さ
vector norm ( vector v ) - ユニット単位にスケールしたベクトル
vector ortho ( vector a, vector b ) - 2つのベクトルに直交したベクトル
vector up ( vector v, vector up ) - 指定した上方向をY軸が指すようにvを回転する
vector rotate ( vector v, vector axis, float angle ) - 指定した角度によりvを軸のまわりで回転する(ラジアン)
Vector Support(ベクトルサポート)
ベクトル(ポイント、カラー、または3dベクトル)は、スカラー(単一の浮動小数点値)と混合させることができます。 スカラーがベクトルコンテキストに使用されている場合、3つのコンポーネントに複製されます(例えば、0.5は [0.5, 0.5, 0.5]になります)。 ベクトルがスカラーコンテキストに使用されている場合、最初のコンポーネントのみが使用されます。この利点の1つは、スカラーと働くように定義されたすべての関数は自動的にベクトルまで広がるということです。 例えば、pick, choose, cycle, spline,などは、ベクトルとうまく働きます。
+や*などの演算オペレータおよびスカラー関数は、ベクターに対してコンポーネントのように適用されます。 例えば、ガンマ関数をマップに適用すると、3つのすべてのカラーチャンネルのガンマが調整されます。
Curve Functions(カーブ関数)
一連のコントロールポイントに対するパラメータ値の補間は、以下の関数で決まります。
color curve(float param,float pos0,color val0,int interp0,float pos1,color val1,int interp1,[...])
'param'でのコントロールポイントで指定したカラーランプを補間します。
コントロールポイントは、pos_i, val_i, interp_iの3つのパラメータで指定します。
補間コードは、0 - none, 1 - linear, 2 - smooth, 3 - spline, 4 - monotone(non-oscillating) splineです。
float curve(float param,float pos0,float val0,int interp0,float pos1,float val1,int interp1,[...])
'param'でのコントロールポイントで定義された1Dランプを補間します。
コントロールポイントは、pos_i, val_i, interp_iの3つのパラメータで指定します。
補間コードは、0 - none, 1 - linear, 2 - smooth, 3 - spline, 4 - monotone (non-oscillating) splineです。
float spline(float param,float y1,float y2,float y3,float y4,[...])
一連の値を指定したパラメータに補間します。
y1, ..., ynは,[0...1]に均等に配分されます。
Misc Functions(その他の関数)
void printf(string format,[param0,param1,...])
指定したフォーマットで文字列をstdoutにプリントします。
使用可能なフォーマットパラメータは、浮動小数点には%f(ベクトル引数の1番目のコンポーネントを取得)
またはベクトルには%vです。
例えば、printf("test %f %v",[1,2,3],[4,5,6])と書いた場合、"test 1 [4,5,6]"になります。
Operators(演算子) (優先順位の高い順で記載)
[ a, b, c ] [ n ] |
ベクトルコンストラクタ vector component access - nは0, 1, 2 (例 $P[0]) |
^ | 累乗法(pow関数と同じ) |
! | 論理NOT |
~ | 反転(つまり、~$Aは1-$Aと同じになります) |
* / % | 乗算、除算、剰余(fmod関数と同じ) |
+ - | 加算, 減算 |
< > <= >= | 比較(ベクトルの[0]コンポーネントのみを使用) |
== != | 等式, 不等式 |
&& | 論理AND |
|| | 論理OR |
? : | 条件式(if-then-elseのようなもので、例えば$u < .5 ? 0 :1) |
-> | 適用 - 矢印の右側の関数が左のエクスプレッションに適用されます。 サンプル: $Cs -> contrast(.7) -> clamp(0.2, 0.8) $u -> hsi(20, 1.2, 1, $Cs -> gamma(1.2)) |
Assignment Operators(アサイン演算子)
基本のアサインメントステートメント"$foo=$bar;"以外に、 "$foo=$foo+$bar;"と同等の"$foo+=$bar;"のような演算子アサインメントも実行することができます。 その他、+=, -=, /=, %=, *=, ^=があります。