今回の投稿は、シームの調整についての小ネタです。
本題に入る前に、簡単な豆知識を紹介します。
・左側の直線と曲線は、始点と終点が離れているタイプとなり、データ形式としては
Curveとなります。始点側の位置が0、終点側の位置が1で表現され、始点~終点間の位置を0から1の間の数値で指定することができます。この方法を正規化と呼びますが、この話に深入りすると長くなりますのでここでは割愛します。
・右側の二つの曲線はいずれも閉じた曲線となっています。左側との違いは始点と終点が同じ位置にあるということです。データ形式としては
Closed Curveとなります。Curveとの違いは始点と終点が同じ位置にあるかどうかであり、構造は同じですので曲線上の位置は同じく0から1の間の数値で指定が可能です。そして、この始点と終点が重なる位置のことを
シームと呼びます。
・ちなみにサーフェスにも同様の事が成り立ちます。サーフェスは四か所の端点のうち、必ずいずれか1個所にUV座標系の原点があり、1辺がU軸、もう1辺がV軸となっていて、サーフェス上のあらゆる点が0から1の間の数値で位置を求めることができます。
・右側の球体も同様に、1枚のサーフェスが閉じた状態となりますので、必ずどこか一か所に原点があり、U軸もしくはV軸の0と1が同じ位置に存在します。そのつなぎ目をシームと呼びます。
そこで本題に入ります。
・参考データとして、Rhinoでシームの位置をあえてずらした5本の円を作成し、Grasshopperに取り込みました。0の位置がバラバラです。
・この曲線をつかってLoftコンポーネントにつないでサーフェス化すると、ゆがんでしまいます。シームの位置が揃っていないことが原因です。このような形状を作る事はあまりないかもしれませんが、形がおかしくなる理由の一つとなりますので、うまくいかなくて悩んでいる人はシーム位置のズレを疑ってみるといいかもしれません。
・対策方法の一つは、Loftコンポーネントを使ってサーフェス化する場合は、Loft Optionコンポーネントを用意し、Adjの入力をTrueにします。自動的にシームの位置が調整されて、形が補正されます。
・二つ目の対策方法は、Seamコンポーネントを使う方法です。適当な押し出しサーフェスを用意し、冒頭で取り込んだ5本の曲線との交点を求め、片方の点をSeamコンポーネントにつないでシーム位置を調整したカーブを作ります。
・Loftコンポーネントにつないでサーフェス化すると、さきほどと同じ形状が作成されます。
去年からちょくちょく拝見しています。毎度貴重な記事をありがとうございます。
返信削除私はよくpufferfishのAlignCurveSeamsで整えて使っています。
(compornentのtabを見るとpufferfishがインストールされているようなので、ご存じでしたらすみません。)
コメントありがとうございます。Pufferfishにも同じような機能があるんですね。情報ありがとうございます。実は、Pufferfishにはコンポーネントの数が多すぎてごく一部の機能しか触ったことが無いのです・・・が、便利な機能がありそうなので、いつかは調べてみたいと思います。
返信削除