Created on | Updated on

CopytoPointsノードでコピー/インスタンスの大きさをランプで管理する

mceclip0.png

mceclip1.png

CopytoPointsではジオメトリを他のジオメトリのポイント上に複製が可能です。
ポイント上にコピーやインスタンスを作成するとき、Houdiniは各コピー/インスタンス毎にそのポイントから特定のアトリビュートを取得し、配置に使用することが可能となります。

例えば以下のようなアトリビュートを配置に使用することができます。

mceclip3.png

ポイント単位で配置するコピーの大きさを変えたい場合、scaleを使用することができます。

  • 入力カーブを用意する

mceclip2.png

  • Attribute Wrangleを接続

Wrangleの中に以下のように記載

float rampPos = @ptnum*1.0/(npoints(0)-1);

@ptnumはポイント番号のため元は整数です。そのため、*1.0を行ず計算し、アトリビュートに代入すると下記のような結果となります。

mceclip4.png

mceclip5.png

最初の入力がintになるため、結果もintになります。出力は常に1つ目の値と同じ型になるためです。最終的に入力するrampPosをfloatにしていますが、除算の時点でintになっているため、結果は正しくありません。

そこで、@ptnumに1.0(浮動小数)をかけて、@ptnumの値を浮動小数にすると下記のように正しい値を取得することができます。

mceclip6.png

mceclip8.png

似た計算式でも全く異なる結果となります。

npointsは入力ポイント数を取得できるで、入力ポイント数から1を引くと最後のポイント番号となります。(ポイント番号は0から始まる)

各ポイント番号を最後のポイント番号除算し、0から1までに割り当てます。
ここで作成した値を次にランプパラメーターに割り当てます。

 

float rampPos = @ptnum*1.0/(npoints(0)-1);
float scale = chramp("profile", rampPos) ;

 

chrampでランプを評価しその値を返します。引数はfloat chramp(string channel, float ramppos)となります。profileという名前のランプパラメーターを作成し、その"rampPos"は、ランプ上で評価する場所です。1つ上でカープポイントを0-1にマッピングしているので、各カーブポイントでランプの値が返されます。

 

最後にscaleというベクトル型のアトリビュートを作成し、そのY値に上記で作成したscaleを元に値をセットしました。

float rampPos = @ptnum*1.0/(npoints(0)-1);
float scale = chramp("profile", rampPos) ;

v@scale = set(1, scale, 1 );

この出力をCopytoPointsに使用することで、ランプで作成した結果をそのままコピーするジオメトリの大きさに反映させることができます。

mceclip9.png

 

問題が解決しない場合は、Born Digital サポートまでお問い合わせ下さい。

※ 問い合わせ対応はBorn Digitalより製品をご購入頂きましたお客様のみのサービスとなります。ご了承下さい。
サポート問い合わせ