SeExpr QuickRef

SeExpr QuickRef

Walt Disney Animation Studios提供(以下参照)


Shader/XGen/Paint3dエクスプレッション

Variables(変数)

使用する特定の変数は、エクスプレッション言語が使用されているコンテキストに依存します。 一般的な慣例としては、色々なコンテキストで以下の変数を使用します。 これらは単なる例です。 通常、エクスプレッションを使用するソフトウェアの開発者は、オートコンプリートのヘルプを使って利用可能な変数を登録するため、 エクスプレッションエディタで$をタイプすると、利用可能な変数のリストがポップアップで表示されます。

Image Variables(画像変数)
  • $u, $v -テクスチャ座標(スカラー)
  • $Cs, ソース画像のカラー(ベクトル)
  • $As, ソース画像のアルファ(スカラー)
Surface ShadingまたはTexturing Activities
  • $Cs, ソース画像のカラー(ベクトル)
  • $u, $v -テクスチャ座標(スカラー)
  • $P - サーフェスポイント(ベクトル)。注: $PはPrefジオメトリからサンプリングされます(使用可能な場合)
  • $N - サーフェス法線
  • $objectId - サーフェス毎の固有オブジェクトID,通常では小さな整数
  • $frame - 現行フレーム番号
Local Variables(ローカル変数)

ローカル変数は、エクスプレッションの初めに定義することができます:

$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 ) 
[0..1]から[lo..hi]までのダイナミックレンジを圧縮します。
float expand ( float x, float lo, float hi )
[lo..hi]から[0..1]までのダイナミックレンジを拡張します。
float contrast ( float x, float c )
コントラストを調整します。0から0.5までのcでは、コントラストが減少します。 0.5より大きいcではコントラストが増加します。
float invert ( float x ) - 値を逆にします。つまり1-xとして定義されます。

float remap ( float x, float source, float range, float falloff, int interp )
一般的なリマップ関数。 xがソースの+/-範囲内の場合、結果は1です。 falloff距離を超えたその範囲外では結果は0になります。 フォールオフの形状は、interpで制御されます。 数値または名前の付いた定数を使用することができます:
    int linear = 0
    int smooth = 1
    int gaussian = 2

color saturate ( color x, float amt )
amtによりカラーの彩度をスケールします。 カラーはrec709輝度値を基準にスケールされ、マイナスの結果は0にクランプされます。
color hsi ( color x, float h, float s, float i, float map=1 )
hsi関数は色相をh(度)でシフトし、彩度と明度をsとiでそれぞれスケールします。 シフトの制御にはマップを指定することができます。 マップが1の場合はフルシフトが発生し、マップが0の場合はシフトが発生しません。 シフトは、0から1までの間の値ではスケールが小さくなります。
color midhsi ( color x, float h, float s, float i, float map, float falloff=1, int interp=0 )
midhsi関数はhsi関数によく似ていますが、制御マップの中心が中間ポイント(0.5の値)を基準に両方向でシフトをスケールさせることができます。 中間ポイントではシフトは発生しません。 1.0の場合、フルシフトが発生し、0.0の場合は逆のフルシフトが発生します。 追加のfalloffおよびinterpのコントロールが用意されており、リマップ関数を使ってマップを調整します。 falloffおよびinterpのデフォルト値は、リマップなしになります。

color rgbtohsl ( color rgb )
color hsltorgb ( color hsl )
RGBからHSLへのカラー空間変換。
HSLはHue(色相), Saturation(彩度), Lightness(明るさ)です(すべて[0..1]の範囲)。
また、これらの関数を拡張すると、合理的な方法で[0..1]範囲外にあるrgbとhslの値をサポートします。 rgbまたはhsl値が何であっても(マイナスのs値以外)、変換は問題なく定義され、逆の変換も可能です。

float bias ( float x, float b)
ガンマのバリエーションで、コントロールパラメータが0から1まで変化します。 値が0.5より大きい場合は、カーブを引き上げ、0.5より小さい場合は、カーブを引き下げます。 pow(x,log(b)/log(0.5))として定義されています。
float gamma ( float x, float g) - pow(x, 1/g)

float fit ( float x, float a1, float b1, float a2, float b2 )
[a1..x..b1]から[a2..x..b2]のリニアリマップ。
float mix ( float a, float b, float alpha )
アルファによるaとbのブレンド。 a*(1-alpha) + b*alphaとして定義されています。

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 )
step関数は、x < aの場合0で、x > b(またはboxstepではx > a)の場合1です。 aとb間で、値は0から1の間で連続して変化します。 gausstep関数は、指数曲線に基づいた標準ガウス"ベル"曲線を使用します。 smoothstep関数は、3次曲線を使用します。 直観的に、gausstepは1に近いシャープな移り変わりを持ち、0に近いソフトな移り変わりを持ちますが、 smoothstepは、1と0の両方に近い中間のソフトさを持っています。

Noise Functions

float rand ( [float min, float max], [float seed] )
minからmaxまで(指定がない場合は0から1)の乱数。
シードを与えると、この関数は内部シードに追加して使用されますが、 別々に複数のジェネレータを作成するのに使用することができます。
float hash ( float seed1, [float seed2, ...] )
randと同様ですが、内部シードはありません。 シードはいくつでも指定することができます。 その結果は、すべてのシードに基づいたランダム関数です。
float cellnoise ( vector v ) float cellnoise1 ( float x )
float cellnoise2 ( float x, float y )
float cellnoise3 ( float x, float y, float z )
color ccellnoise ( vector v ) - color cellnoise
cellnoiseは整数のロケーションに基づいて一定のカラーキューブのフィールドを生成します。 これは、prman 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 ) - 周期ノイズ
noiseは、整数のロケーションでサンプルどうしをスムーズにブレンドするランダム関数です。 これは、Ken Perlin氏のオリジナルノイズ関数です。

float perlin ( vector v )
color cperlin ( vector v) - カラーノイズ
float sperlin ( vector v) - 符号付きノイズ w/ -1から1までの範囲。
vector vperlin (vector v ) - 符号付きベクトルノイズ
Ken Perlin氏の2002 Javaリファレンスコードに基づいた"Improved Perlin Noise"。

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 )
fbm (Fractal Brownian Motion:非整数ブラウン運動)は、マルチ周波数ノイズ関数です。 ベース周波数は、"noise"関数と同じです。 周波数の合計数は、octavesによって制御します。 lacunarity(空隙性)は、周波数間の間隔で、2の値は、各オクターブが前の周波数の2倍であるという意味です。 gainは、1つ前の周波数に対して各周波数をどのくらい増減させるかを制御します。

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 )
turbulenceはfbmのバリアントで、各ノイズタームの絶対値が取得されます。 これにより、大きく波打つアピアランスになります。


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)
voronoiは細胞状のノイズパターンです。これはcellnoiseのジッターバリアントです。 cvoronoiは、各セルのランダムカラーを返し、pvoronoiは、セルの中心のポイントロケーションを返します。 このタイプのパラメータは、ノイズ関数の色々なバリアントを記述します。 jitterパラメータは、パターンの不規則性を制御します(jitter=0は、普通のセルノイズ)。 fbm*パラメータにより、ノイズフィールドを歪ませることができます。 fbmScaleが0(デフォルト)の場合、歪みはありません。 残りのパラメータは、fbm関数と同じです。
1から5までのVoronoiタイプ:
         

Selection Functions(選択関数)

int cycle ( int index, int loRange, int hiRange )
指定したインデックスに基づいたloRangeからhiRange間の値でのサイクルです。 これは、オフセットした"mod"関数です。 その結果は、(loRange + value % (hiRange-loRange+1))で計算されます。

int pick ( float index, int loRange, int hiRange, [float weights, ...] )
指定したインデックスに基づいて、loRangeからhiRange間でランダムに値を選びます。 この値は、指定したウェイトに応じて配分されます。 ウェイトを指定しなかった場合は1.0とみなされます。
float choose ( float index, float choice1, float choice2, [...] )
インデックスに基づいて指定された選択の中から1つを選択します([0..1]の範囲であると想定)。

float wchoose ( float index, float choice1, float weight1, float choice2, float weight2, [...] )
インデックスに基づいて指定された選択の中から1つを選択します([0..1]の範囲であると想定)。
この値は、指定したウェイトに応じて配分されます。

サンプル:
  • 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およびprojmap関数のファイル名により、オプションのフォーマット引数を指定することができます。 これは、以下のサンプルに示すようにファイル名内に挿入されます:
  • 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 ]
]
ベクトルコンストラクタ
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;"のような演算子アサインメントも実行することができます。 その他、+=, -=, /=, %=, *=, ^=があります。

Comments(コメント)

行末の'#'に続く文字は無視され、コメントとして使用したり、エクスプレッションの"コメントアウト"として使用することができます。 複数行のエクスプレッションでは、各行に独自のコメントを付けることができます。

Custom Plugins(カスタムプラグイン)

カスタム関数をC++で書いて、1つまたは複数のダイナミックプラグインとしてロードすることができます。 詳細は、カスタムエクスプレッションプラグインの記述を参照してください。

関連項目