【集中講座】ShrinkTrimmedSrfでデータサイズを減らす

Rhinoでサーフェスやポリサーフェスを作っていると、見た目以上にデータが重くなったり、Grasshopperに読み込むのに時間がかかったりすることはないでしょうか。

その問題はサーフェスをシュリンクすることで解消するかもしれません。

<例題>

下記のような制御点の多いサーフェスを考えます(データサイズ=2,421KB)。

線を8本用意し、Splitで分割し、Joinで再結合します。
9枚の面が結合したポリサーフェスになりますが、見た目はほとんど変わりません。
しかし、データサイズは、9,538KBに増えています。

再度Explodeで分解し、1つの面を選択してPointsOnで制御点を表示してみます。
すると、面がない所にも制御点があることがわかります。
実は、トリムや分割をしても元の面の制御点の情報は残っているのです。

分解後、1つの面を選択
PointsOnで1つの面のみの制御点を表示

この余分な制御点は、ShrinkTrimmedSrfというコマンドで最小限の数になるように縮小することができます。
以下は、すべての面に対しShrinkTrimmedSrfを実行し、再度Joinした結果です。
見た目は変わりませんがデータサイズは約4分の1になりました(データサイズ=2,679KB)。

非トリムサーフェスとトリムサーフェス

Rhinoのサーフェスオブジェクトは、4辺から構成されるのが基本構造です。
トリムされておらず、縦糸横糸が編まれたような形で4辺から構成されるサーフェスを「非トリムサーフェス」と呼びます(例外として辺の長さが0に縮退した見かけ上、2辺や3辺に見える非トリムサーフェスもあります)。

それ以外の形状を作るときは、非トリムサーフェスを任意の形状に切り取って表現します。
これを「トリムサーフェス」と呼びます。

トリムサーフェスはそのままだと元の非トリムサーフェスの形状情報を保持し、Untrimコマンドで元のサーフェスに戻すことができます。
ShrinkTrimmedSrfを実行すると最小限の情報に縮小されデータは軽くなります。ただし、Untrimで元のサーフェスに戻すことができなくなる点は注意です。

下図はそれぞれ、非トリムサーフェス、トリムサーフェス(未シュリンク)、トリムサーフェス(シュリンク済)を制御点表示オンで比較したものです。

サーフェスの縦糸・横糸に相当するアイソカーブに沿ってトリムしたトリムサーフェスは、シュリンクすると非トリムサーフェスとなります。

下図は、ExtractIsocurveでサーフェスのアイソカーブを抽出し(赤色の線)、その曲線でトリムを行った後に、ShrinkTrimmedSrfを実行した例です。

まとめ

地形やファサード、プロダクトの外装など、大きな面や複雑な面の一部を切り取って、それを元に新たなオブジェクトを作成していく場合は、何もしないと切り取る前のサーフェス情報を保持したままデータが複製され、データ量が積み重なったままモデリングが進んでしまいます。シュリンクを行うことで、データ量が何十分の1に削減できるような場合もあります。

また、非トリムサーフェスや非トリムエッジにしか適用できないコマンドがあったり、テクスチャパターンを適用する際にもトリムされていないサーフェスの方が扱いやすいため、元に戻す可能性がないものは小まめにシュリンクすることをおすすめします。

開発元 Rhino8 Help : ShrinktrimmedSrf