今回は、グラスホッパーで鍾乳洞のような途切れる直方体の作成方法について解説します。
動画で見る
全体の様子
上4枚の画像は、グラスホッパーの様子です。
上4枚の画像は、ライノセラス上に書き出した様子です。
上の画像は、最終的にレンダリングした様子です。
それでは、順番に解説していきます。
今回使用したグラスホッパーとライノセラスのデータダウンロードはこちら
ダウンロードできるデータのご利用に関しては、利用規約をご覧ください。
全体コンポーネント
全体コンポーネント:①Rectangle ②Surface ③Division ④Divide Domain² ⑤Isotrim ⑥Unit Z ⑦Move ⑧Area ⑨Line ⑩List Length ⑪Construct Domain ⑫Random ⑬Integer ⑭Shatter ⑮Equality ⑯Dispatch ⑰Curve ⑱Clean Tree ⑲List Item ⑳Length ㉑Negative ㉒Extend Curve ㉓Merge ㉔Perp Frames ㉕Deconstruct Plane ㉖Vector 2Pt ㉗Loft ㉘Cap Holes ㉙Boolean Toggle
縦方向の線を作成する
最初に、縦方向の線を作成していきます。
RectangleのXとY端子に、辺の長さの数値を入力します。
今回は、X端子に8000、Y端子に4000の数値を入力しています。
すると、上の画像のように、四角形の線データが作成されました。
その後、RectangleのR端子を、Surfaceにつなげます。
すると、上の画像のように、四角形の線データからサーフェスが作成されました。
次に、サーフェスを分割する数値を作成していきます。
2つのDivisionのB端子に、割り算の分母の数値を入力します。
今回は、どちらにも200の数値を入力しています。
その後、辺の長さの8000の数値を、1つ目のDivisionのA端子につなげます。
すると、8000÷200=40の数値が出力されます。
さらに、辺の長さの4000の数値を、2つ目のDivisionのA端子につなげます。
すると、4000÷200=20の数値が出力されます。
辺の数値を同じ200で割った理由は、辺の長さの比を維持するためです。
これにより、サーフェスを分割した際に、正方形で分割できるようになります。
その後、1つ目のDivisionを、Divide Domain²のU端子につなげます。
さらに、2つ目のDivisionを、Divide Domain²のV端子につなげます。
さらに、Surfaceを、Divide Domain²のI端子につなげます。
その後、Divide Domain²を、IsotrimのD端子につなげます。
さらに、Surfaceを、IsotrimのS端子につなげます。
すると、上の画像のように、サーフェスが40×20に分割されました。
その後、真上に移動させる距離の数値を、Unit Zにつなげます。
今回は、3000の数値を入力しています。
すると、上の画像のように、各サーフェスが真上方向に移動しました。
その後、2つのAreaを用意します。
IsotrimとMoveのG端子を、それぞれAreaにつなげます。
すると、上の画像のように、各サーフェスの中心点を取得できました。
すると、上の画像のように、上と下の中心点をつなぐ線が作成されました。
この際に、LineのL端子を右クリックし、Graftに設定してください。
これで、縦方向の線を作成することができました。
ランダムな位置で線を分割する
次に、ランダムな位置で線を分割していきます。
どちらかのAreaのC端子を、List Lengthにつなげます。
すると、線の個数の数値を取得できます。
今回の場合、800の数値が取得されています。
その後、0の数値を、Construct DomainのA端子につなげます。
さらに、10の数値を、Construct DomainのB端子につなげます。
すると、0 To 10という数値範囲が作成されました。
その後、Construct Domainを、RandomのR端子につなげます。
さらに、List Lengthを、RandomのN端子につなげます。
さらに、任意のランダムさを変えるシード値を、RandomのS端子につなげます。
今回は、100の数値を入力しています。
この際に、Randomの右側のR端子を右クリックし、Graftに設定してください。
すると、0~10の範囲で、ランダムな数値が800個作成されます。
すると、小数の数値が、整数に変換されました。
その後、Integerを、DivisionのA端子につなげます。
さらに、10の数値を、DivisionのB端子につなげます。
すると、ランダムな数値が、0~1.0の数値に変換されます。
その後、Divisionを、Shatterのt端子につなげます。
すると、線の長さを0~1とした場合の位置で、線が分割されます。
例を挙げると、数値が0.5の場合は、線の真ん中の位置で分割されます。
数値が0の場合、線は分割されません。
Shatterから出力されるデータを見てみると、1つの階層の中に1つの線の場合と、2つの線がある場合があることが分かります。
1つの線の場合、線は分割されていません。
2つの線の場合、線が分割されています。
1つの線の場合と2つの線の場合で、場合分けしていきます。
Shatterを、List Lengthにつなげます。
すると、各階層の線のデータの個数が出力されます。
その後、List Lengthを、EqualityのB端子につなげます。
さらに、1の数値を、EqualityのA端子につなげます。
すると、Equalityの=端子から、1の場合はTrue、2の場合はFalseのデータが出力されます。
その後、Equalityの=端子を、DispatchのP端子につなげます。
さらに、Shatterを、DispatchのL端子につなげます。
その後、DispatchのAとB端子を、それぞれCurveにつなげます。
すると、A端子の方のCurveからは、分割された線データを取得できます。
B端子の方のCurveからは、分割されていない線データを取得できます。
DispatchのB端子の方のCurveを、Clean TreeのT端子につなげます。
さらに、Trueの情報を、Clean TreeのE端子につなげます。
今回は、Boolean ToggleでTrueの情報を作成しています。
すると、空っぽの階層を削除することができました。
その後、Clean Treeを、2つのList ItemのL端子につなげます。
さらに、0の数値を、1つ目のList Itemのi端子につなげます。
さらに、1の数値を、2つ目のList Itemのi端子につなげます。
すると、上2枚の画像のように、0の数値の方は分割された下側の線、1の数値の方は分割された上側の線を取得できます。
その後、2つのList Itemを、それぞれLengthにつなげます。
すると、各線の長さの数値を取得できます。
その後、2つのLengthを、それぞれDivisionのA端子につなげます。
さらに、2の数値を、2つのDivisionのB端子につなげます。
すると、取得した線の長さの数値を、2で割った数値を取得できます。
その後、2つのDivisionを、それぞれNegativeにつなげます。
すると、数値がマイナスになります。
その後、2つのList Itemを、それぞれExtend CurveのC端子につなげます。
さらに、1つ目のExtend CurveのL0端子に、0の数値をつなげます。
さらに、2つ目のExtend CurveのL1端子に、0の数値をつなげます。
さらに、1つ目のExtend CurveのL1端子に、1つ目のNegativeをつなげます。
さらに、2つ目のExtend CurveのL0端子に、Negativeをつなげます。
すると、上の画像のように、線の長さが短くなり、中心部分に空洞ができました。
その後、DispatchのA端子の方のCurveと2つのExtend Curveを、Mergeにつなげます。
すると、上の画像のように、分割されていない線と分割された線データを結合できました。
この際に、MergeのR端子を右クリックし、Flattenに設定してください。
これで、ランダムな位置で線を分割することができました。
線から直方体を作成する
次に、線から直方体を作成していきます。
Mergeを、Perp FramesのC端子につなげます。
さらに、1の数値を、Perp FramesのN端子につなげます。
すると、各線の両端に、作業平面が作成されます。
その後、最初の方に使用した200の数値を、DivisionのA端子につなげます。
さらに、3の数値を、DivisionのB端子につなげます。
すると、200÷3の数値が出力されます。
この数値は、直方体の縦と横の長さの数値になります。
その後、Perp FramesのF端子を、RectangleのP端子につなげます。
さらに、Divisionを、RectangleのXとY端子に入力します。
すると、上の画像のように、線の両端に正方形の線データが作成されました。
その後、Perp FramesのF端子を、Deconstruct Planeにつなげます。
すると、作業平面の原点の点データを取得できます。
さらに、RectangleのR端子を、Areaにつなげます。
すると、正方形の中心点の点データを取得できます。
その後、AreaのC端子を、Vector 2PtのA端子につなげます。
さらに、Deconstruct PlaneのO端子を、Vector 2PtのB端子につなげます。
すると、正方形の中心点から、作業平面の原点までのベクトルデータを取得できます。
その後、Vector 2PtのV端子を、MoveのT端子につなげます。
さらに、RectangleのR端子を、MoveのG端子につなげます。
すると、上の画像のように、正方形の線データが、作業平面の原点を中心にする位置に移動しました。
すると、上の画像のように、四角形の線データをつないで直方体が作成されました。
その後、LoftをCap Holesにつなぎ、穴を塞ぎます。
これで完成です。
今回は以上になります。
Comment