前回(Prat1)はContent Cacheの基本的な機能と使用方法についてサンプルと共にご説明しました。今回は、前回伝えきれなかった機能について、お伝えしていきます。
※この記事は2025年2月時点・Rhino8 SR17サービスリリース候補を元に作成しています。コンポーネントの機能は時期により変更される可能性がございますので、予めご了承ください。
キャッシュとキャッシュ名
Push/Bakeを行うと、その内容はRhinoファイルにキャッシュされます。
キャッシュされた内容は、Content Cacheコンポーネントをクリックすると点線のブラケットで表示されます。
※Rhinoファイルにキャッシュされるため、キャッシュを利用するにはRhinoファイルが必要です。
Content Cacheコンポーネントを拡大表示し、N(Name)端子を追加すると、「キャッシュ名」を入力できるようになります。このキャッシュ名を使用すると、キャッシュ名を切り替える事によって、異なるパターンのキャッシュを記録できるようになります。キャッシュ名を入力してPush/Bakeすると、ビューポート上にもキャッシュ名が表示されます。

Sample4:キャッシュ名の使用例①-Grasshopperパラメータ変更
このサンプルでは、3種類のキャッシュ名(0,1,2)を数値スライダーで切り替えながら、異なる3種類の半径をキャッシュに登録しています。登録後は、キャッシュ名を切り替えて保存した結果を確認できます。同じキャッシュ名での値の変更は、コピーではなく上書き更新になります。
①キャッシュ名-0の状態で、円の半径=32でPushします。
②キャッシュ名を1に、円の半径=68に変更し、Pushします。キャッシュ名が異なるので、コピーとなります。
③キャッシュ名を2に、円の半径=100にして再度Pushします。同様にコピーとなります。
④Content Cacheコンポーネントを選択し、キャッシュ名を切り替えると、3種類のキャッシュが保存されていることが確認できます。
⑤キャッシュ名を0に、円の半径を18に変更してPushすると、既存のキャッシュ名0の時に設定した半径(=32)は上書きされ、18に更新します。
Sample5: キャッシュ名の使用例②-Rhino上でオブジェクトを編集
このサンプルでは、Pushで作成したポイントをRhino上で移動し、Content CacheのR出力を使用してGHにPullしています。この場合もキャッシュ名を使用して複数のパターンを登録する事ができます。
Pushする前に[Model Object]コンポーネントにて、キャッシュ名ごとにレイヤ名を指定後、コンテンツ(ポイント)と合わせてPushする事で、ポイントを移動する際にどのキャッシュのポイントなのかをレイヤの表示非表示で切り分ける事が可能です。(同様のレイヤ分けは、後述の“ブランチ名オプション”を使用しても可能です)
①キャッシュ名を0にしてポイントをPushします。
※この時、[Model Object]のLayer入力に「Point」+キャッシュ名を入力し、Push時に新規レイヤが作成されるようにしておきます。
②Rhino上でPushしたポイントを移動します。レイヤパネルで、一旦「Point0」レイヤを非表示にしておきます。
③キャッシュ名を1に変更してポイントをPushします。新規「Point1」レイヤにポイントが作成されます。先ほどとは異なる位置にポイントを移動します。
④Content Cacheを選択し、キャッシュ名を切り替えると異なるポイントの位置が記録されていることが確認できます。
Sample6 キャッシュ名の使用例③-Pullとの併用
キャッシュ名を使用してPushしたRhinoオブジェクトは、別のGHファイルにあるContent Cacheでも、同じキャッシュ名を使用してPullできます。
※ただし、PushしたRhinoオブジェクトが存在する3dmファイルを開いておく必要があります。

アクションの自動化
Content Cacheコンポーネントの操作は、Action入力を使用して自動化できます。つまり、PushやBakeのボタンを押して変更を更新するのではなく、パラメータを変更した時点でリアルタイムにPushやBakeが変更されるということです。Action入力は、コンポーネントを拡大し、「+」をクリックして展開・表示します。こちらを表示すると、今まで押していたボタンは押せなくなり、タブが表示されます。

◆Action入力にサポートされている値:
– Null → 何もしない
– False → モデル(Rhino)からコンテンツをPullする
– True → 現在のデフォルトアクション(アイコン右クリックでデフォルトアクションを設定、初期値はPush)
– Purge → モデルからコンテンツをパージする
– Pull → モデルからコンテンツをプルする
– Push → コンテンツをモデルにプッシュする
– Bake → コンテンツをモデルにベイクする
よりフレンドリーなピッカーを使用するには、’Value List’を接続する。
Action入力を使用するには、以下のようないくつかの方法があります。
1. ブール値
TrueとFalseのブール値を入力に送ることで、Button Actionメニュー(コンポーネント右クリック)を通して設定されたデフォルトのアクションを開始することができます:
・True -デフォルトのアクションが実行されます。(Push,Pull,Bake,Purge)
・False -デフォルトのアクションは実行されませんが、結果(Result出力)が表示されている場合は、コンポーネントは引き続きPullされます。

2. Actionタイプ
また、Actionタイプを入力して各オブジェクトがそれに応じて処理されるようにすることができます。Actionタイプは、以下の3つの方法で入力可能です。
Action | ①文字列入力 (頭文字=大文字) | ②インデックス値 (テキストに変換) | ③Value List |
---|---|---|---|
Pull | “Pull” | 0 | Pull |
Push | “Push” | 1 | Push |
Bake | “Bake” | 2 | Bake |
Purge | “Purge” | -1 | Purge |
①文字列入力
Panelに文字を入力して、直接アクションタイプを指定できます。
※頭文字は大文字にする必要があります。

②インデックス値
インデックス値を使用して、インデックス値をAction入力の代わりに使用できます。
※数値スライダーは、テキストに変換する必要があります。

③Value List
これらのオプションをスクロールする簡単な方法は、Action入力に[Value List] コンポーネントを接続することです。すると、選択内容が自動的に入力され、矢印で切り替えることができます(Valueリストの値を自分で編集する必要はありません)。

Sample7:Action入力によるPushの自動化
Action入力でTrueを入力すると、Push/Bakeのボタンを押さなくても常にRhino上にオブジェクトがPush/Bakeされた状態になります。Falseを入力すると、変更は反映されず現在Rhino上にあるオブジェクトがPullされた状態になります。再度Trueに切り替えると、変更した状態がRhino上にPushされ、変更が反映されます。
①Action入力をFalseからTrueに変更します。デフォルトアクション=Pushのため、コンテンツがRhino上にPushされます。パラメータを変更すると、Pushの結果はリアルタイムに変更されます。
②Action入力をFalseにします。パラメータを変更しても、デフォルトアクション(Push)は実行されませんが、結果はPullされます。そのため、Action入力を切り替える前のRhino上のオブジェクトの状態がContent Cacheをクリックすると表示されます。
③再度Action入力をTrueに切り替えると、変更したパラメータが反映されます。
Bake/Push時のレイヤについて
Content CacheがオブジェクトをRhinoにPushまたはBakeする必要があり、追加の属性情報がない場合は、オブジェクトタイプ (曲線、BREP、メッシュなど) を示すサブレイヤを持つGrasshopperレイヤーに格納されます。オブジェクトに既存のレイヤ、色、マテリアルなどの属性がある場合は、その属性が使用されます。
任意のレイヤにPush/Bakeしたい場合は、[Model Object]コンポーネントでレイヤ、レイヤカラーなどを指定できます。

※Blockを任意のレイヤにベイクするには、BlockのレイヤとBlock内のオブジェクトのレイヤを両方指定する必要があります。(Part1-Sample3:Purge 参照)
ブランチ名オプション(Branch Names)
ブランチ名オプションは、Content Cacheコンポーネントの右クリックで有効にできます(Name入力が表示されていないと有効にできません)。ブランチ名オプションは、コンポーネントがオブジェクトを Rhino にPushまたはBakeした際のレイヤとレイヤ名に影響します。多くの場合、ブランチ名はキャッシュ名によって整理されたオブジェクトの複数のオプションまたはバージョンを作成するために有効です。

ブランチ名を有効にすると、他の情報が提供されていない場合、キャッシュオブジェクトのオブジェクト名は「キャッシュ名::」に設定されます。
さらに、ブランチ名オプションは、キャッシュ名の親レイヤを自動作成し、キャッシュオブジェクトをそのレイヤのオブジェクトタイプ名(Curves/Surfaces/Brepsなど)のサブレイヤに配置します。これは、複数のオプションを作成し、結果を分離しておくための簡単な方法です。
以下の図は、[Value List]を使用して3種類のキャッシュ名を切り替えられるようにし、それぞれのキャッシュ名ごとに異なる半径を設定してPushした例です。

Sample8:ブランチ名オプションの使用
このサンプルでは、異なる形状の柱を[Stream Filter]を使用して入れ替え、ブランチ名オプションを使用してキャッシュ名ごとのレイヤに振り分け2パターンの形状を登録しています。
デフォルトではキャッシュ名レイヤの下にオブジェクトタイプ名(Curves/Surfaces/Brepsなど)のサブレイヤが作成されますが、必要に応じて[Model Object]コンポーネントでサブレイヤ名としてレイヤ名を任意に指定できます。同時にオブジェクト名も指定すれば、「キャッシュ名::指定したオブジェクト名」となり、同じオブジェクト名を指定した場合も、キャッシュ名ごとに異なる名前となり同一オブジェクト名を避ける事ができます。
①[Value List]にてCircle(0)を選択し、ブランチ名を有効にしたContent CacheでPushします。
②同じく[Value List]をSquare(1)に切替え、再度Pushします。
③レイヤを確認すると、キャッシュ名のCircle/Squareレイヤがそれぞれ作成され、サブレイヤとして[Model Object]で指定したレイヤ名「Columns」が作成されています。オブジェクト名も「Colums」に指定したため、それぞれのオブジェクト名は「Circle::Colums1」のように表記されています(各Columnに通し番号を付けるため、[List Length][Series][Concatenate]を使用しています)。
パフォーマンスの最適化
- PushとBakeは最もコストのかかるプロセスなので、PushまたはBakeする対象を慎重に選択してください。
- キャンバス上のContent Cacheコンポーネントの数を制限すると、特にPushまたはBake処理の場合にパフォーマンスが向上します。
- 要素をPullすると多少のオーバーヘッドが発生するため、必要ない場合は Result出力 を非表示にするとパフォーマンスが少し向上します。
- Action出力にて自動Content Cacheを有効にすると、変更ごとに更新が必要になるため、パフォーマンスに大きな影響を与える可能性があります。