使わないでCopyする方法を紹介します。今回のサンプルファイルです。関数を使ったバリエーションの変化などはHoudiniをある程度触られた方なら経験された方も多いと思います。Stampを使うとシーンが複雑になった時に、処理が極端に遅くなる現象を経験したことはないでしょうか。Stampしてみました。Stampにディスプレイフラグを立ててから、処理が完了するまでに7秒かかっていることがわかります。ちなみにこちらでは、1000*1000の計1,000,000個のポイントの例も試したのですが、処理が完了するまで5分近くかかってしまいました。Stampを他の手法に置き換えるだけで改善することがあります。Pointノードが利用できます。これは必要な情報をstampのvariableではなく、アトリビュートとしてGird側のポイントに格納する方法です。Copyで使うことの出来るアトリビュートの一覧は、SideFX公式サイトのヘルプに記載されています。SOPを用いてpscale,orient,Cdのアトリビュートを作成しています。Pointを用いて作成すると、このように処理が一瞬で終わることが確認できるかと思います。ループでひとつひとつのポイントに対して加工をしてからコピーをするという手法もあります。関数を使うよりも低速になってしまうことがあります。そこで、以前に紹介した、コンパイルブロックを利用します。Eachをコンパイルブロックで囲んでしまえば、処理はかなり高速になります。Eachは並列処理ができるからです。裏を返せば、並列化されないような処理であればコンパイルブロックの効果はありません。15までと異なり、Copy系のノードは機能に応じて複数のノードに分かれてわかりづらくなってしまいましたが、その代わりとして、それぞれのCopyがコンパイル対応になりました。過去の記事でも記述しましたが、コンパイルブロックを使う場合は、ジオメトリのバリエーション作成に使えるノードはコンパイル対応のSOPしか使えなくなってしまうので注意が必要です。Stampノードはコンパイルブロックには対応しておりません。Stampはひとつで色々なことができる便利なノードですが、処理が遅くなりがちで、多数のオブジェクトのコピーの際には不向きです。Each+コンパイルブロックなどのアプローチを用いることでコピーにかかる処置時間を大幅に短縮することが可能です。Inc.の商標または登録商標です。他のすべてのブランド名、製品名、および商標はそれぞれの所有者に帰属します。当サイトは株式会社インディゾーンが運営しています。