こんにちは、建築ソフト解説員のUMAです。
今回は、『Grasshopper』で『階段をモデリングする方法』について解説していきます。
今回解説する操作
今回は、図面を参考に階段をポリラインからモデリングする方法を解説します。
Grasshopperを使うので、階段の経路幅や段数をパラメトリックに制御できるようにしたいと思います。
作業の前に
今回使用するデータは以下のボタンからダウンロードできます。
エクササイズファイル
ツールの全体像
ツールは以下のようになっています。
これまで紹介してきたより少し複雑に見えますが、これからステップごとに紹介していきます。
階段の経路を描く
まずは、作成した図面にRhino上で直線を書いていきます。
この時、直線の向きによって、階段のできる向きが変わってくるので、注意してください。
(階段の下端から書くようにしてください。)
次に、Rhino上で描いた直線をGrasshopperにインプットしていきましょう。
Curveコンポーネントで、直線をGrasshopperにインプットします。
ここで、一応CurveをReparametarizeをしましょう。
(Reparametarizeをすることで、直線の範囲(ドメイン)が0~1で指定できるようになります。)
階段の外形を取得する
このステップでは、階段の外形を取得します。
ここで使用するのは、以下の6つのコンポーネントです。
- Length
- Horizontal Frame
- Division
- Negative
- Contruct Domain
- Rectangle
Lengthでは、指定したCurveの長さを取得します。
Horizontal Frameでは、指定したCurveの中心を0.5で指定し取得します。
指定したCurveの中心を0.5で取得できるのは、Reparametarizeによって全体の長さを1として取得できるからです。(詳しくはこちら)
Divisionでは、経路幅をAにつなぎ、Bを右クリックしSet Data Itemに2を入力することで、直線を中心に両側に経路を作ることができます。
Negativeでは、入力された数値に-1を掛けることで、値の正負をはんてんすることができます。
Construct Domainでは、AとBにそれぞれ正負の値を取り込むことで範囲の値が「-a to a」となり、基点を中心に左右均等に長方形を作成できます。
Rectangleでは、Pを基点に長方形を描画しますが、X,Yの値を範囲(Domain)で指定することができるので、「-a to a」として、基点を中心に長方形を描画することができます。この使い方はよく出てくるのでぜひ覚えておくといいと思います。
踏面を作る
このステップでは、踏面を作成します。
ここで使用するのは、以下の15個のコンポーネントです。
- Panel
- Number Slider
- Division
- Subtraction
- Series
- Multiplication
- Unit Z
- Number Slider
- Unit Z
- Negative
- Boundary Surface
- Divide Domain2
- IsoTrim
- Extrude
- Move
Panelでは、スラブのレベル差や数列の初項を数値で指定しています。数値で指定する際は、NumberSliderでも構いませんが、階段などといったある程度規定の寸法があるものに関してはPanelで処理する方がスタディの際の処理速度が速いのでオススメです。
Number Sliderでは、階段の段数と板厚を指定しています。ここでは、板厚などをスタディすることを想定して、NumberSliderを使用しています。このようにPanelとNumberSliderを使い分けられるようになると非常に楽にGrasshopperを利用できるようになります。
Divisionでは、レベル差を段数で割っています。このようにすることで、階段の蹴上の高さを取得しています。
Subtractionでは、Bの端子に「-1」を設定しています。というのも、階段をモデリングするとき、最上部の踏面は次階の床となるので、いらないためです。
Seriesでは、数列の初項に1、項数を段数に設定することで、「1,2,3,4,5,6,7,8…」という数列を作成しています。
Multiplicationでは、先ほど作成した数列とDivisionで得た蹴上高さを掛けることで、踏面を移動するためのベクトルの大きさを取得しました。
Unit Zでは、Multiplicationで得たベクトルの大きさを実際にベクトルとしています。つまり、(0,0,Multiplicationの値)といったベクトルデータが出力されます。
Negativeは、単に数値やベクトルの正負を反転させるだけのコンポーネントです。今回は、Zベクトルの反転のために活用したので、あまりメリットは見られませんが、例えばXYZの方向に大きさのあるベクトルの場合などは簡単に向きを反転できるので楽に数値を扱えます。
Boundary Surfaceは、境界線を元にサーフェスを作成するコンポーネントで、階段の外形線からサーフェスを作成するために使用しています。このコンポーネントは、境界線が同一平面上にあればどんな形でも作成できるので非常に便利なコンポーネントです。
Divide Domain2は、I端子に入力されたサーフェスをUとVに入力された値で分割する範囲(Domain)を作成するものです。基本的には、IsoTrimと並行利用します。
IsoTrimは、BoundarySurfaceで作成した面をDivideDomain2をもとに、分割しています。このようなGrasshopper独特のUV分割をすることで、階段の向きがXYZ軸のいずれにも平行でなくでも、きれいに分割できるので、マスターできると非常に便利です。
Extrudeで、分割した面をそれぞれ押し出すことで踏面のベースを作っています。
Moveでは、作成した踏面のベースをもとに、Multiplicationで取得した個々の踏面の高さ方向を参照し移動しています。
蹴込板を作る
このステップでは、蹴込板を作成します。
ここで使用するのは、以下の13個のコンポーネントです。
- End Points
- Explode
- Curve Middle
- Distance
- Sort List
- List Item
- Extrude
- Move
- Panel
- Number Slider
- Evaluate Surface
- Ampulitude
- Extrude
End Pointsでは、階段の始点を取得することで踏面の下端を取得しています。
Explodeは、階段の外形線のうち始点側を得るために、長方形を分割しています。
Curve Middleでは、Explodeで分割した長方形の辺の中点を取得しています。中点を得ることで、この後の線の並べ替えのベースを作成しています。
Distanceは、点同士の距離を取得するので、始点から踏面下端の距離を取得します。このようにすることでSort Listでいつでも狙い通りの辺(始点側の踏面下端)を取得で決まる下準備ができます。
Sort Listでは、外形線の辺の順番を始点からの距離をベースに並び替えています。
List Itemでは、階段の始点に1番近い辺を取得しました。というのも、ListItemはデフォルトでリストの1番最初を取得するので、indexには何も指定していません。
Extrude(1個目)は、階段の外形線のうち始点側を押し出して、蹴込板のベースとなる面を作成しました。
Moveでは、先ほど作成した面を踏面分だけ下に移動しています。このように移動することで、面同士が辺で接するのではなく面で接するようになるので、パースを作った時に光が隙間から漏れ出てくることがなくなります。
Panelでは、この後使用するEvaluate Srfで面の中心を取得するために、(0.5,0.5)を入力しています。
Evaluate Surfaceでは、蹴込板を取り込みUV座標で面の中心における法線ベクトルを指定しています。このようにすることで階段の向きが軸に平行でなくても、正しい方向に押し出しされるようなベクトルを取り出しました。
Number Sliderでは、蹴込板の厚みを指定しています。
Ampulitudeは、入力されたベクトルを指定した値の大きさを持つベクトルに変換するものです。
Extrude(2個目)では、Amplitudeで指定したベクトルを参考に蹴込板を押し出しました。
蹴込板を配置する
このステップでは、蹴込板を配置します。
ここで使用するのは、以下の9つのコンポーネントです。
- Deconstruct Brep
- Area
- Distance
- Sort List
- List Item
- Area
- List Item
- Vector 2pt
- Linear Array
Deconstruct Brepでは、一度作成した踏面を分解しています。
Areaでは、踏面の各面の中心点を取得しています。
Distanceでは、先ほどAreaで取得した中心点と階段の始点の距離を計測することで、始点に近い側の踏面の下端を取得しようとしています。
Sort Listでは、踏面の各面を階段の始点に近い順に並び替えました。
List Itemでは、それぞれの踏面の中で階段の始点に1番近い面を取得しています。
Areaでは、その取得した面の中心点を取得して、蹴込板の間隔を得ようとしています。またアウトプット側ではFlattenをすることで全ての点を一つの組に入れています。
List Itemでは、先ほど取得した面の中心点のうち2点を取り出しています。アウトプット側は拡大することで端子の数を増やせるので今回は+1からも点を取り出しています。
Vector 2ptは、2点間をベクトルとして変換するもので、これによって配列のためのベクトルを作っています。
Linear Arrayでは、蹴込板を先ほど作成したベクトルで並べています。ここで間違えないで欲しいのは蹴込板の数は踏面より一つ多い(踏面最上段は、次の階のフロアなので)ということです。
まとめ
今回解説した階段を作るGrasshopperファイルなどを保存して再度活用することで、同じようなモデリングをする際に繰り返し使えるようになります。ぜひ、今回のファイルを今後も活用してみてください。