XGen の多くのアトリビュートはエクスプレッションです。エクスプレッションとは、関数呼び出しと算術演算の組み合わせに基づいてアトリビュートの求め方を指定するための、非常に柔軟な方法です。最も単純なエクスプレッションは、定数の浮動小数点値です。やや複雑なものは、浮動小数点値を求める数学式です。
演算子
エクスプレッションが認識できる算術演算子は次のとおりです。
+, -, *, /, % (fmod) および ^ (累乗)、[x,y,z] ベクトル生成、V[n] ベクトル成分アクセス x ? y : z 条件演算子 (x なら y、でなければ z)、 x && y AND 比較、x || y OR 比較、x == y 等価テスト、 x != y 不等テスト、x > y 比較、x < y 比較、x >= y 比較、x <= y 比較、!x 論理否定
計算順序を明確にするために括弧が何段階か使用されることがあります。
注:
エクスプレッションの最後に、終了を示すシャープ記号(たとえば「#」)を追加することができます。したがって、シャープ記号の後にコメントを記述したりエクスプレッションの代替バージョンを追加することができます。
変数
エクスプレッションで使用できる基底パッチの情報を記述する変数セットがあります。ベクトルまたは個別コンポーネントが参照される可能性があるため、ベクトル フォームが使用されることがあります。たとえば、 $N はサーフェスの法線ベクトルを表し、 $N[0] は法線ベクトルの x コンポーネントを表します。
浮動小数(Floats)
- $u, $v - 基底サーフェスの U と V のパラメータです。
- $cLength - 現在のプリミティブの最終的な計算された長さです。
- $cWidth - 現在のプリミティブの最終的な計算された幅です。
- $cDepth - 変位のない現在のプリミティブの最終的な計算された深度です。
- $frame - 評価中の現在のフレームです。この値は慎重に使用する必要があります。いくつかのアトリビュートがフレーム全体を変更する場合(たとえば長さと密度)には推奨しません。このような場合、モーション ブラーの計算が不可能になります。
- $id - 現在のプリミティブの ID です(fx モジュールに便利)。
ベクトル
- $P - プリミティブが評価されているサーフェス ポイントです。
- $Pg - 変位のないサーフェス ポイントです。
- $Pref - プリミティブが評価されている参照サーフェス ポイントです。
- $Prefg - 変位のない参照サーフェス ポイントです。
- $Pw - プリミティブが評価されているサーフェス ポイントです。ワールド空間です。
- $Pgw - 変位のないサーフェス ポイントです。ワールド空間です。
- $Prefw - プリミティブが評価されている参照サーフェス ポイントです。ワールド空間です。
- $Prefgw - 変位のない参照サーフェス ポイントです。ワールド空間です。
- $N - プリミティブが評価されているサーフェス法線です。
- $Ng - 変位のないサーフェス法線です。
- $Nref - プリミティブが評価されている参照サーフェス法線です。
- $Nrefg - 変位のない参照サーフェス法線です。
- $dPdu - プリミティブが評価されているサーフェス dPdu です。
- $dPdug - 変位のないサーフェス dPdu です。
- $dPduref - プリミティブが評価されている参照サーフェス dPdu です。
- $dPdurefg - 変位のない参照サーフェス dPdu します。
- $dPdv - プリミティブが評価されているサーフェス dPdv です。
- $dPdvg - 変位のないサーフェス dPdv です。
- $dPdvref - プリミティブが評価されている参照サーフェス dPdv です。
- $dPdvrefg - 参照サーフェス dPdv です。
注:
変位された変数の値(P や N)は、ディスプレイスメント、オフセット、バンプ エクスプレッションの値に依存するため、このような変数をそのようなエクスプレッションの中で使用することはできません。ポイント ベースのノイズの使用が望ましい、または基底サーフェスから値を用いる必要のある他のエクスプレッションの使用が望ましい場合は、Prefg
や Nrefg など g の付いたものを使ってください。
関数
エクスプレッションに使用できる一連の関数呼び出しがあります。すべての引数が副次式になることができます。エクスプレッションがベクトルの引数を要求する場合、入力値は大文字で指定されます。スカラーがベクトルを必要とする関数に渡される場合、3 チャンネルすべてに等しい値のあるベクトルが使用されます(たとえば、length(2)
== length([2,2,2]))。
ベクトルがスカラー演算に渡されると、コンポーネントのように演算が実行されます(例: cos(X) = [cos(X[0]),cos(X[1]),cos(X[2])])。これは算術演算も同様です(例: X*Y = [X[0]*Y[0],X[1]*Y[1],X[2]*Y[2]])。比較と条件式は[0]コンポーネントのみ使用します。等価テスト(==,!=)の 3 コンポーネントすべてを比較します。関数からのスカラー結果はすべて[0]コンポーネントになります。
以下の定義で角括弧はパラメータが任意であることを示します。
- abs(x)
-
- acos(x)
-
x の逆余弦です。範囲は 0 ~ π ラジアンです。
- acosd(x)
-
x の逆余弦です。範囲は 0 ~ 180 度です。
- acosh(x)
-
- alignU([X]) alignV([X]) alignN([X])
-
指定されたベクトルでプリミティブを位置合わせします。これらの 3 つのエクスプレッションは offU、offV、offN に配置する必要があります。パラメータが渡されない場合、既定値[0,1,0]が使用され、結果は「成長」します。パラメータが渡される場合は、3
つすべてのエクスプレッションに同じパラメータを渡します。このパラメータはエクスプレッションであってもかまわず、正規化する必要はありません。
- angle(X, Y)
-
- asin(x)
-
x の逆正弦です。範囲は -π/2 ~ π/2 ラジアンです。
- asind(x)
-
x の逆正弦です。範囲は -90 ~ 90 度です。
- asinh(x)
-
- atan(x)
-
x の逆正接です。範囲は -π/2 ~ π/2 ラジアンです。
- atand(x)
-
x の逆正接です。範囲は -90 ~ 90 度です。
- atan2(x, y)
-
x/y の逆正接です。範囲は -π/2 ~ π/2 ラジアンです。
- atanh(x)
-
- bias(x, b)
-
- boxstep(x, val)
-
エクスプレッションの評価が val より小さい場合は 0、そうでない場合は 1 を生成します。boxstep から boxstep を引くと box 関数になり、最初の boxstep の val より低い場合は 0、両 val の間の場合は
1、そして 2 番目の boxstep の val より大きい場合は 0 になります。必ず、後で発生する boxstep を前の boxstep から引くようにしてください。そうしなければ逆 box 関数になります。
- cbrt(x)
-
- ceil(x)
-
x 以上の最小の整数です(切り上げ)。「floor」、「round」、「trunc」を参照してください。
- clamp(x, min, max)
-
- component(x, y, z)
-
ベクトルまたはカラーの個々のコンポーネントの値をエクスプレッションで設定できるようにします。
- contrast(x, c)
-
x に対するコントラストの関数です。c < 0.5 ならコントラストが下がり、c > 0.5 ならコントラストが上がります。
- cos(x)
-
- cosd(x)
-
- cosh(x)
-
- cross(V, W)
-
- deg(r)
-
ラジアンを度に変換します。「rad」も参照してください。
- dot(V, W)
-
- dist(x1, y1, z1, x2, y2, z2)
-
- exp(x)
-
- fit(x, a1, b1, a2, b2)
-
[a1..x..b1]の[a2..result..b2]への線形伝達です。
- floor(x)
-
x 以下の最大の整数です(切り捨て)。「ceil」、「round」、「trunc」も参照してください。
- fmod(x, y)
-
x を y で割ったときの余り(実数)。x%y と同じです。
- gamma(x, g)
-
x のガンマ補正。pow( x, 1/g)と同じです。
- gaussstep(x, a, b)
-
0 から 1 のガウス遷移を生成します。結果は、x が a と等しいときに 0、x が b と等しいときに 1 になります。この範囲に入らない場合、結果は連続的になり、a を越えるとすべてが 0、b を越えるとすべてが 1 になります。a が
b より小さい場合、関数は漸増し、そうでない場合は漸減します。
- hypot(x, y)
-
- length(V)
-
- linearstep(x, a, b)
-
0 から 1 の線形遷移を生成します。結果は、x が a と等しいときに 0、x が b と等しいときに 1 になります。この範囲に入らない場合、結果は連続的になり、a を越えるとすべてが 0、b を越えるとすべてが 1 になります。a が b
より小さい場合、関数は漸増し、そうでない場合は漸減します。
- log(x)
-
- log10(x)
-
- map("mapname" [, s, t] [, channel])
-
現在(u,v)または指定(s,t)で mapname を評価します。mapname は ptex ファイルへのパスに過ぎない場合もあります。使用される既定の $g.ptx を正規表現で変更する計画であれば、ファイル パターンを指定する必要のみあります。任意のチャンネルを指定して、イメージのどのチャンネルを読み取るかを表示することができます。変数 ${DESC} をディスクリプション名に使用することができます。組み込みマクロ $PAL をマップの参照に使用することもできます。たとえば、map( “baseCoat_${PAL,myPick}” )です。ここで myPick というパレット エクスプレッションが評価され、フォーマットとして結果に %04d が挿入されます。
- max(x, y)
-
2 つの値のうち大きい方を返します。「min」も参照してください。
- min(x, y)
-
2 つの値のうち小さい方を返します。「max」も参照してください。
- noise([x] [, y] [, z])
-
Perlin ノイズ関数を計算します。パラメータが指定されない場合、現在の(u、v)で計算されます。1 次元、2 次元、3 次元のノイズに、パラメータを 1 つ、2 つ、または 3 つ使用することができます。戻り値は常に、-1 ~ 1 の範囲の浮動小数点値です。
- norm(V)
-
- ortho(X, Y)
-
直交ベクトルです(norm(cross(X,Y))と同等)。
- pow(x, y)
-
- rad(d)
-
度をラジアンに変換します。「deg」も参照してください。
- rand([min, max] [, seed])
-
乱数を生成します。パラメータが指定されない場合、生成される数は 0 と 1 の間になります。必要に応じて、2 つのパラメータを渡すことで、乱数の範囲を決めることができます。どちらの場合でも、シード値を与えることで、返される数をランダムかつ予期可能(y が渡されたら常に x)にすることもできます。
- remap(x, ソース, 範囲, 減衰, 補間)
-
x がソースから一定の距離内であれば結果が 1 になるように、x を 0 と 1 の間に再割り当てします。その領域の外に出たら、その減衰距離に対して結果が 0 に減衰します。補間スキームを名前または整数で指定できます。整数の意味は、リニア=0、スムーズ=1、ガウス=2、boxstep=3
です。boxstep 補間の使用時は、0.0 が減衰値に使用されます。
- round(x)
-
x を、小数部分が 0.5 未満で場合は 0 に近い方に丸め、そうでない場合は 0 から遠い方に丸めて求められる整数値です。「floor」、「ceil」、「trunc」も参照してください。
- shadow(x)
-
レンダリングのシャドウ パス中でのみ、渡されたエクスプレッションを評価します。レンダリングのカラー パスとシャドウ パスの間での長さ、幅、密度などの変更に便利です。シャドウ パスではない場合、この関数の結果は 1.0 になり、乗数として使用する必要があります。
- sin(x)
-
- sind(x)
-
- sinh(x)
-
- smoothstep(x, a, b)
-
ゼロから 1 までの滑らかな(二次)遷移になります。結果は、x が a と等しいときに 0、x が b と等しいときに 1 になります。この範囲に入らない場合、結果は連続的になり、a を越えるとすべてが 0、b を越えるとすべてが 1 になります。a
が b より小さい場合、関数は漸増し、そうでない場合は漸減します。
- sqrt(x)
-
- tan(x)
-
- tanh(x)
-
- trunc(x)
-
x の小数部分を単純に切り捨てます(ゼロに近い方に丸める)。「ceil」、「floor」、「round」も参照してください。
- other()
-
パレットのエクスプレッションは、関数として呼び出されます。myPick という名前のパレット エクスプレッションがあった場合、それを他のエクスプレッションから myPick()の構文で呼び出すこともあります。長さと幅の間に関連付けを与える場合など、アトリビュートの接続に便利です。パレット全体に幅の値を設定する場合など、アトリビュートを別々のディスクリプションで機能させるときにも便利です。パレット エクスプレッションに付ける名前は、事前定義した
XGen 関数と重なってはいけません。重なるとパレット エクスプレッションを利用できなくなります。
次の定数が有効です。
- PI
-
円の円周の直径に対する比です(3.14159265358979323846)。
- E
-
自然対数の底です(2.7182818284590452354)。
注:
エクスプレッションが無効である場合、エラー メッセージが表示され、0.001 として評価されます。