CopytoPointsではジオメトリを他のジオメトリのポイント上に複製が可能です。
ポイント上にコピーやインスタンスを作成するとき、Houdiniは各コピー/インスタンス毎にそのポイントから特定のアトリビュートを取得し、配置に使用することが可能となります。
例えば以下のようなアトリビュートを配置に使用することができます。
ポイント単位で配置するコピーの大きさを変えたい場合、scaleを使用することができます。
- 入力カーブを用意する
- Attribute Wrangleを接続
Wrangleの中に以下のように記載
float rampPos = @ptnum*1.0/(npoints(0)-1);
@ptnumはポイント番号のため元は整数です。そのため、*1.0を行ず計算し、アトリビュートに代入すると下記のような結果となります。
最初の入力がintになるため、結果もintになります。出力は常に1つ目の値と同じ型になるためです。最終的に入力するrampPosをfloatにしていますが、除算の時点でintになっているため、結果は正しくありません。
そこで、@ptnumに1.0(浮動小数)をかけて、@ptnumの値を浮動小数にすると下記のように正しい値を取得することができます。
似た計算式でも全く異なる結果となります。
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に使用することで、ランプで作成した結果をそのままコピーするジオメトリの大きさに反映させることができます。