Grasshopperでアルゴリズムを作成していく際、あるコンポーネントを繋いだ瞬間に突然計算処理が遅くなることがあります。
そういった時にどのコンポーネントが遅くなっている原因なのかを、Profiler機能で処理にかかる時間を計測することができます。
また重たい処理をできる限り回避して作業を進める、Lock Solver機能も、下記アルゴリズム例を通してご紹介したいと思います。
指輪に槌目の模様テクスチャを加えるアルゴリズムを例に確認してみます。
左から順に適用するサーフェス図、サーフェス上に平面を配置した図、平面にテクスチャの元となる球を複数配置してブール演算で削除した図となります。
アルゴリズムの概要としては、
①[Poplate Geometry]を使い、サーフェス上に複数点を発生させる。
②サーフェスのUV値を取得し、[Evaluate Surface]でサーフェス上の平面と法線ベクトルを取得。
③法線方向に平面を移動後、[Orient]を使い形状をカットする球を配置。
④[Solid Difference]でブール演算の差を行い、元の形状から槌目状のテクスチャを作成する
というものになります。
但し、ブール演算やモーフィング、体積・面積などを求める計算を行う時などは、極端に処理が重くなることがあります。
それでは、このアルゴリズムのどこがボトルネックになっているのかを、確認してみます。
メニューの Display > Canvas Widgets > Profiler を実行します。
コンポーネントの下部に、それぞれのコンポーネントが計算に要した時間が現れます。20msや18.7sといった表記になり、ms(ミリセカンド-千分秒)やs(セカンド-秒)、m(ミニッツ-分)という意味になります。例では44ms(0.044秒)の[Populate Geometry]に比べて、[Solid Difference]は18.7秒と極端に時間がかかっているのが分かります。
数字が書かれた箇所をダブルクリックすることで、計算に要した時間とghファイル内でのそのコンポーネントが占めている計算時間の割合を切り替えることができます。この例では、他のコンポーネントにかかる時間が少ないため、[Solid Difference]コンポーネントがおおよそ100%を占めています。
計算に時間がかからないものを表示したくない時は、File > Preferences を押した際に現れる[Grasshopper Settings]ダイアログ内の Widgets からProfilerのThreshold(しきい値)を設定してください。しきい値以下のコンポーネントは表示されなくなります。
次に処理自体に計算がかかるときは、下記の対処法を試していただけたらと思います。
Lock Solver機能
キャンバスの上で、右クリック > Lock Solver を実行します。
Lock Solverが実行されるとキャンバス左に南京錠のアイコンが現れ、計算が止まった状態になります。この状態ではスライダなどを変更しても、計算が都度反映されることがなくなります。ただし計算が止まっているため、変更内容を確認することができません。設定を変更し終えた後は、同様の手順でLock Solver状態を解除してください。
以下は、コンポーネントを修正・追加することで対応した例です。
コンポーネントをDisable状態にした例
コンポーネント名が書かれた黒いラベルの上で右クリック>Enabled を押すことで、Enable(有効)とDisable(無効)を切り替えることができます。Disable状態のコンポーネントは計算を行いません。
Disableは非常に簡単な方法ですが、無効にするコンポーネントが10か所あると、すべて手動でEnable化する必要があります。そういった時は、下記のアルゴリズムで対応する方法を試していただけたらと思います。
[Orient]の出力を、直接[Solid Difference]に繋ぎブール演算を行うのではなく、[Stream Gate]を間に繋いだ例
[Stream Gate]はSに入力したデータを、Gate(G)で指定した端子から出力します。またFalseは0に、Trueは1に相当します。[Boolean Toggle]でTrue・Falseを切り替えると、スイッチのように出力先を変更し、指定した時のみ計算させることができます。
アルゴリズムで作成しておくとクラスター化した際も、スイッチをクラスターの外から変更できるため、クラスター内を参照しなくても計算の処理のオン・オフを切り替えることができます。
同じアルゴリズムでも、どの処理に時間がかかるか?や、どう時間をかけずに値を変更するかが分かると、
より効率的に作業を進めることができます。
Profiler機能やLock Solver機能などを是非、ご使用いただけたらと思います。