基本的なエクスプレッションの例

このセクションでは、一般的に使用される XGen エクスプレッションの簡単な例を示します。これらはエクスプレッションの作成方法の理解を深めることを目的としています。より複雑なエクスプレッションの構築ブロックとして、これらのエクスプレッションを使用することもできます。ディスクリプションでこれらの例を使用するには、コントロールするアトリビュートの横にある、この アイコンをクリックしてから、XGen エクスプレッション エディタ(XGen Expression Editor)にエクスプレッションを追加します。

エクスプレッションを使用した経験がない場合は、「XGen エクスプレッションの基本」を参照してください。

マップ エクスプレッション

マップ エクスプレッションは、Ptex マップ ファイルへのパスを設定します。XGen で ペイント ツール(Paint Tool)を使用すると、マップ エクスプレッションが自動的に作成されます。Maya 以外で作成された Ptex マップを使用する場合は、マップ エクスプレッションを使用してディスクリプションに適用する必要があります。

長さの Ptex マップのペイントで、このマップ エクスプレッションを作成する

$a =map('${DESC}/paintmaps/length/'); #3dpaint, 200
$a

エクスプレッションの説明

  • $a: エクスプレッションによって修正された既定のローカル変数。
  • map(): Ptex マップの場所へのファイル パスを記述する関数。ファイル パスには次の項目が含まれています。
    • ${DESC}: ディスクリプションのプロジェクトの場所に基づいた相対ファイル パス(「XGen 内の Ptex マップ ファイルの場所」を参照)。
    • paintmaps/length: Ptex ファイルへのファイル パスの続き。
  • #3dpaint, 200: マップのテクセル解像度を定義するパラメータ。この値を変更すると、マップを再保存する必要があります。
  • $a: Ptex マップを適用するためにエクスプレッションを呼び出します。
ヒント: XGen エクスプレッション エディタ(XGen Expression Editor)サンプル > グローバル > UI(Samples > Global > UI)を選択して、定義済みの map_3dpaint エクスプレッションをロードすることができます。「エクスプレッションを使用してプリミティブをコントロールする」を参照してください。

より複雑なマップ エクスプレッションについては、「マップ エクスプレッションの例」を参照してください。「Ptex マップとエクスプレッションを使用する」も参照してください。

ランダム化エクスプレッション

このランダム化エクスプレッションでは、最小および最大の入力値に基づいてランダム出力値を生成します。これを使用して、長さ(Length)および幅(Width)などのアトリビュート値を変更できます。多数のアトリビュートを変更するために、グローバル エクスプレッションとして使用できます(「グローバル エクスプレッションを作成する」を参照)。

$min= 0.4000; #0.10,1.00
$max=3.000; #1.0,5.0
rand($min,$max)

エクスプレッションの説明

  • $min および $max: ランダム化関数用の最小および最大の入力値に対して宣言されたローカル変数。変数に対してスライダ コントロールが作成されます。最大値($max)は、1.0〜5.0 のスライダ コントロール範囲で 3.000 に初期設定されます。最小値($min)は、0.10〜1.00 のスライダ コントロール範囲で 0.400 に初期設定されます。スライダ コントロールを使用して入力値を変更します。
  • rand ($min, $max): ランダム化関数は、$min および $max ローカル変数で設定された範囲内のランダム値を生成するために、ローカル変数を使用して評価します。

ノイズ エクスプレッション

ノイズ エクスプレッションは、入力変数としてベクトル値または float 値を持つノイズ関数を含みます。アトリビュート値にバリエーションを生成するために、ノイズ エクスプレッションを使用します。たとえば、ノイズ エクスプレッションは、束(Clumping)モディファイアまたはヘアの長さのエフェクトに、微妙なバリエーションを追加することができます。

この単純なエクスプレッションでは、ノイズは 1 つの Perlin ノイズ関数を使用して計算されます。他の数学関数( contrast() または smoothstep()など)を追加して、エクスプレッションに複雑さを加えて、レイヤ化されたノイズ エフェクトを生成することができます。ノイズの複数のレイヤにより、単一のノイズ関数の反復的な性質を解除することができます。より複雑なノイズ エクスプレッションについては、「ノイズ エクスプレッションの例」を参照してください。

$hi =50.0; #0.00,100.00
$lo =-10.00; #-100.00,0.00
noise($lo, $hi)

エクスプレッションの説明

  • $hi =50; #0.00, 100.0 および $lo =-10.00; #-100.00,0.00: ノイズ関数が評価のために使用する入力値に対して宣言されたローカル変数。高い値($hi)は、0〜100 のスライダ コントロール範囲で 50 に初期設定されています。低い値($lo)は、-100〜0 のスライダ コントロール範囲で -10 に初期設定されています。ノイズ関数の出力を変更するには、スライダ コントロールを使用します。
  • noise () 関数は、$hi および $lo ローカル変数に基づいて 2 次元のノイズ パターンを出力します。エクスプレッションに別のローカル変数を追加して、関数の 3 番目の入力値として含めて、3 次元のノイズを作成することができます。

条件エクスプレッション

条件を満たしているかに応じて、アトリビュート値を設定する、またはモディファイアを適用する場合に、このタイプのエクスプレッションを使用します。たとえば、束(Clumping)モディファイアとともに使用すると、ヘアの長さに基づいて各ヘアに適用される束の量を設定できます。

最終的なプリミティブの長さに基づいて、マグニチュード(Magnitude)などのアトリビュート値またはモディファイア値を適用する場合に、このエクスプレッションを使用できます。

$a =$cLength;
$max =7.00; #0.00,10.0
clamp($a,0,$max)

エクスプレッションの説明

  • $a =$cLength;: 最終的に計算されたプリミティブの長さを示すグローバル変数。たとえば、ヘアの長さのランダム値を生成している場合(上記の「ランダム化エクスプレッション」の例を参照)、これらの値はこのエクスプレッションの $a によって表されます。
  • $max: 最大の入力値に対して宣言されたのローカル変数。このエクスプレッションでは、最大ヘアの長さを設定します。この値に対して、スライダ コントロールが作成されます。
  • clamp($a,0,$max): clamp() 関数が長さアトリビュートで使用されると、各プリミティブの最終的に計算された長さ($a)の積を取得し、長さを 0 から設定された $max 値までの範囲内に設定します。また、このエクスプレッションは短いヘアよりも長いヘアに影響を与えるために、モディファイアで使用できます。これは、短いヘアにはより低い $cLength 値があるためです。

エクスプレッションを使用して、関数の入力値範囲を拡大する

範囲が制限された関数の入力値に精度を追加するために、エクスプレッションを使用します。たとえば、smoothstep() は、0~1 の入力値範囲を使用します。このエクスプレッションの例では、2 つのローカル変数および fit() 関数を使用して、この関数の範囲を拡大しています。このエクスプレッションを簡単に修正して、他の関数の出力範囲を拡大することができます。

$Scalemin=0.3;
$Scalemax=4.0;
smoothstep(x,$Scalemin,$Scalemax)->fit(0,1,-100,100)

エクスプレッションの説明

  • $Scalemin および $Scalemax: smoothstep () 関数によって使用される値の範囲を設定する、宣言されたローカル変数。
  • smoothstep(x,$Scalemin,$Scalemax): smoothstep() は、制限された入力範囲のある関数の例として使用されます。入力値範囲 0~1 に基づいて、二次形式の値を出力します。この例では、x は宣言されたローカル変数またはグローバル変数など、使用する入力値を示します。このエクスプレッションを使用する前に、x を適切な変数に置き換える必要があります。$Scalemin および $Scalemax は、関数の出力範囲を設定します。
  • ->: 矢印の右側の関数を左側の関数に適用する演算子。この場合、fit()smoothstep() の出力に適用されます。
  • fit(0,1, -100, 100): 0〜1 の入力値範囲をそれぞれ -100〜100 に拡大する関数。

関連トピック