primuv()の定義を確認してみましょう。
primuv(geometry, string attribute_name, int prim_num, vector uvw)
マニュアルで上記でできることを確認すると以下のように記載されています。
指定したパラメトリック位置(uvw)でアトリビュートの値を補間します。
つまり、primuv()にジオメトリ、プリミティブ番号、およびParametric UV座標を与えると、そのポイントのジオメトリについて知りたいことを教えてくれます。ポイント間のアトリビュート(ポイントの色や位置など)も補間され取得できます。
ここで重要なのはprimuvを使用するには、Parametric UVが必要ということです。
では、Parameteric UVはどのように取得できるのか?VEXのxyzdist()関数は、これを可能にします。ということでまずはこちらをご確認下さい。
xyzdist()でもご紹介いたしましたが、重要な事なのでもう一度。パラメトリック座標はUV座標に似ていますが、変更することはできず、常にハードコードされた値を持ちます。パラメトリックUVは通常のUVと同じではありません。
xyzdistの説明で下記までは作成しています。
ここまでで
必要な情報はゲットできてきます。
例えば、primuv()を上記のAttribute Wrangleに追加してそのまま使用してみます。
@P = primuv(1,"P",@pr,@uv);
アトリビュートを''P"としているので、入力1(pighead)のプリミティブ番号とParametric UVを渡して、そこから正確な位置情報を取得しています。
primuv()追加前
primuv()追加後
元のポイントの位置に一番近いpighead上の値を取得することができました。
もちろん位置だけではなく、必要な情報を補間して返してくれます。
例えばこのような形でpigheadにプリミティブ単位のカラーを追加します。
そしてAttribute Wrangleで@Cdの行を追加します。
Pointだと見えにくいので、copy to Pointを使用して、ポイントにSphereを配置しました。
@Cdが取得した場所のカラーも拾ってきていることがわかります。
これを使用すると下記のサイトで紹介されていることなことができるようになりますね。
https://80.lv/articles/how-to-develop-effective-software-tools/