AliasとDynamoのチュートリアルが一通り終わったので、まずはUVを使ったパターンの再現にチャレンジしてみました。
ざっと作った手順を紹介します。
・連続してつながっているサーフェスをAliasで事前に作ります。
・UVを使うためには基本的に一枚のサーフェスにする必要があるため、この三枚のサーフェスを一枚にまとめる(近似面を作成する)作業から進めます。
Step.2-1 近似面の作成
・サーフェスの上端、下端のエッジからDuplicate CurveとAttachを使って二本のカーブを抽出し、それらを選択した状態でDynamoウィンドのSendボタンをクリックします。
・すると上図のような感じでDynamoに取り込まれます。
・作った数列を曲線のパラメータとして使い、カーブ上の点を求めます。このやり方でカーブを9分割に等分する点を求めることができます。
・準備の段階で作成したサーフェス三枚をインポートし、直線を投影して面上にきっちりのせます。
※今回は、投影方向をX方向にしていますがお好みで。
・投影した曲線を結合して8本のポリカーブにしたかったのですが、今回は結合できなかったのでいったんAliasにbakeして、手作業でつなぎました。
※うまくつながった人は上図のまま進めてください。
・10本の曲線が端から順番に並んでいない時は、10本の曲線の端点の座標(今回はY座標)を求め、ソートで順番に並ぶ機能を割り当てると綺麗に並びます。
・サーフェスを張る時は、曲線のCVが等間隔に並んでいないとうまく張れないので、リビルドカーブを使いたいところですが見当たらなかったので、今回は0から1まで10分割した数列を曲線上の点のパラメータとして求め、Nurvs Curveを引きました。
・最後はLoftで面化すれば近似面の完成です。
・Getisolineノードを使いますが、分割する数に1を加えた数で0~1を等分する数列を作成し、parameterにさします。isoDirectionは、UとVのどちらかが0でもう片方が1です。作る環境に合わせて、どちらかを指定します。
・アイソカーブのうち、上端と下端は必要がないので取り除きます。
・取り除いたカーブでサーフェスを分割したいのですが、GrasshopperでいうところのSulf Splitコンポーネントが見当たらないので、ここはPythonでノードを代用します。
・使うノードは前回と同じくgetisolineですが、isoDirectionが異なります。
・すべてのサーフェスが分割できるよう、getisolineのノードのLacingをCross Productに変更するのを忘れずに。
・ここで重要なのは、縦分割線と横分割線の、中身のリスト構造です。これがうまくかみ合わないと、望む答えが出ませんので、ChopノードとUse Levelを使って帳じり合わせします。
※リスト構造の考え方がプログラミング的な難しさの代表格ですが、ほぼ必須の部分でもあるので、苦手な人はまず紙に書き出して、どのような処理がなされているか、よく理解してみてください。
・pythonでは、カーブの組み合わせを二本ずつ作るのが目的です。
<上側>
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Enable Python support and load DesignScript library | |
import clr | |
clr.AddReference('ProtoGeometry') | |
from Autodesk.DesignScript.Geometry import * | |
# The inputs to this node will be stored as a list in the IN variables. | |
curve = IN[0] | |
sublist = [] | |
n=len(curve)-1 | |
j=0 | |
for i in range(n): | |
sublist.append(curve[j]) | |
sublist.append(curve[j+1]) | |
j=j+1 | |
# Place your code below this line | |
# Assign your output to the OUT variable. | |
OUT = sublist |
<下側>
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Enable Python support and load DesignScript library | |
import clr | |
clr.AddReference('ProtoGeometry') | |
from Autodesk.DesignScript.Geometry import * | |
# The inputs to this node will be stored as a list in the IN variables. | |
curve = IN[0] | |
sublist = [] | |
n=len(curve) | |
m=len(curve[0])-1 | |
for i in range(n): | |
templist=[] | |
for j in range(m): | |
templist.append(curve[i][j]) | |
templist.append(curve[i][j+1]) | |
j=j+1 | |
sublist.append(templist) | |
# Place your code below this line | |
# Assign your output to the OUT variable. | |
OUT = sublist |
※Pythonについても、Grasshopperでは必要性があまりないのですが、Dynamoでは必須に近いアイテムです。基礎を覚える段階ではスルーしても構いませんが、中級にさしかかった当たりから少しずつ覚えていくことをおすすめします。
Step.7 徐変量の計算
・次に、サーフェスを徐々に狭くする割合と、面直に押し出す高さを徐々に高くする割合の2種類の数値を計算します。
・Step.6で求めたサーフェスのうち、どれか1行分を取出した後、リストの長さ(すなわち面の数)を計算し、その数までの、1ずつ増える数列を作成します。
・RemapRangeノードで上限と下限の間にリマップした数列を2種類、作成します。UV用と高さ用です。
・UV用のほうは、0から0.5の範囲に抑えておきます。
・Step.6で求めた個別のサーフェス、手順⑦で求めたUV範囲、Step.3で設定した縦分割数をもっていきます。
・個別サーフェスはtransposeを使い、横列方向から縦列方向に転換します。
・UV範囲はwatchで中を見るとフラットな構造なので、Chopコマンドで個別の階層に分けます。その後、それぞれが縦分割数の数になるようOffrepeatedItemで増やします。
※Use Levelsを1にする必要があります。
・getisolineを使って、個別の各サーフェスに対し、4本のアイソカーブを作成します。U方向とV方向で、0から1に向けてずらす方向と1から0に向けてずらす方向の、合計4本です。
・作成した4本のアイソカーブをtransposeノードで元の構造に転換し直し、平たんな階層にしてからCreateノードで一つのノードにまとめます。
・階層のつじつま合わせをしたあと、Pythonノードで処理していきます。
・Step.7で求めた高さのノード階層はフラットなので、Chopノードで個別階層にしたのち、Offrepeateditemで縦の数だけ増分させ、transposeで縦横転換しておきます。
・同時に、各サーフェスのエッジを抽出し、結合してポリカーブ化します。これを法線方向にある程度の距離で移動させます。
・さらに、各エッジの端点(ここではスタート点)を求め、縦横に転換したあとで最初の点が最後にも入るよう挿入します。
・さらに、各サーフェスの中心点を、手順⑩で求めた数値にしたがって法線方向にそって移動させます。
・この面上線で個別サーフェスをSplitノードで分割し、Getitematindexノードで0か1のどちらかを指定するとカットしたサーフェスが選択できます。
・Step.11で法線方向に移動させた中心点と、縦横に転換したエッジのスタート点を直線で結び、ByRuledLoftノードでピラミッド型のサーフェスが張られます。
Step.13 完成
・最後に色をつけたら完成です。
如何でしょうか。一通り使ってみたうえでのGrasshopperとの比較ですが、色々と不満がありまして正直なところ、使いづらいですね。
ノードの機能が微妙に足りないので、そこをPythonで補うわけですがパターンの数が多くなると処理に時間がかかり、頻繁に動作停止に陥るとか、バグがあります。
リストの構造も操作がしにくく、結局はPythonで組んだ方が早くて簡単なんですが、それだとビジュアルプログラミングの良さが無くなる方向なんですよね。
AliasとDynamoはそもそも別々のソフトウェアで、生い立ちが違うものを無理やりくっつけているような感じなのである意味、仕方のない部分もあるかもしれませんが、今後のアップデートで改良されていくとは思いますので、それに期待しましょう!
0 件のコメント:
コメントを投稿