Day 3-1 : Copy Parameter & Paste Relative Reference , Day 3-2: 四則演算と エクスプレッション , Day 3-3 : VEX (1) の内容を統合して、簡単な作例を作ってみましょう。
今回作成するのは このような下草のモデルです。(この作例の原案は @TF_siri によるものです。多謝!)
この作例は
葉っぱ 1 枚を作る
複製して草にする
という 2 つのステップから成り立っています。さっそく作っていきましょう。
ざっくり、このような手順になります。
① 葉っぱの元になるエッジを並べる
② エッジの間に面を張る
③ 葉っぱの形に成形する
④ 曲げる
葉っぱを生成するためのエッジを並べます。
まずは Line ノードを 2 つ作成します。
片方は Direction を 1, 0, 0 にして Length 0.1, Points 2 に、もう片方は Direction は0, 1, 0 のままで Length を 1, Points を 10 にします。
Copy to Points ノードを作成し、長い方のラインを右側に 短い方のラインを左側に接続します。
これで葉っぱのベースとなるエッジを作ることが出来ました。
しかし 1 点問題があります。
コピーに使った短いエッジが原点をから X+ 方向に伸びているために 原点からずれてしまっています。
短いラインの Origin X に -ch("dist")/2 と入力すると、長さの半分だけ X- 方向にずれるので、エッジの中心が原点になって うまくいきます。
ch("dist")は Length のことです。 Copy parameter と Paste Relative Reference を使っても構いません。
これでフェースを張る準備が出来ました。
skinノードを接続すると エッジ間にフェースを張ることができます。
葉っぱ一枚を生成する流れの ① ② ができました。
次は、葉っぱらしい尖った形状に修正していきます。
Copy to Points する際に pscale を調整しておけば 各エッジの長さが調整されるので葉っぱの形になりそうです。
試しに Copy to Points ノードと 長い Line ノードの間に Attribute Wrangle ノードを挟みます。
試しに このようにVEXを書いてみてください。
pscale を 頂点番号と同じになるという内容です。 このような結果になります。
ビューポートの横にあるこのボタンを押すことでビューポート中にポイント番号を表示させることができます。
ジオメトリスプレッドシートと合わせて 現状確認に使いましょう。
葉っぱらしい形状に調整するためには 頂点番号ごとにサイズを微調整できた方が良さそうです。
こんな時は chramp を使うと便利です。 chramp はランプパラメータを生成するための書き方です。
ランプパラメータを使うと、カーブを使って入力値を調整することができます。
実際に試してみましょう。先ほどのVEXをこんな風に書き換えて パラメータ作成ボタンを押してください。
新しい関数が登場しました。 fit 関数です。
fit関数は ある範囲を持ったアトリビュートを別のアトリビュートにリマップすることができる関数です。
例えば あるアトリビュートが 0 ~ 1 の間の値を持っているとき 0 ~ 3 や 0.5 ~ 1.0 など 好きな範囲にリマップさせます。
fit 関数では 5 つのパラメータを設定する必要があります。
一番左が 調整するアトリビュート名です。 今回はポイント番号に応じて pscale アトリビュート を調整したいので @ptnum を指定します。
左から 2 番目と 3 番目が 流し込む値の最小値と最大値です。
ポイント番号は 0 からカウントするので最小値は 0 になります。
@numpt はポイントの数を表現するものですが 0 からカウントしているので最大値は @numpt-1 になります。
今回は 0 ~ 1 の範囲にリマップしたいので 4 番目と 5 番目のパラメータは 0 と 1 になります。
作成した Width パラメータを調整して 葉っぱの形に成形していきましょう。
ここまでできれば STEP ③ 完了です。
今回作った Width パラメータは 一言でいうと 横軸がポイント番号、縦軸が出力( この場合は pscale )のグラフです。
しかし、 fit 関数を噛ませたことで 横軸は「何番目のポイント」ではなく「全体の n% くらいの場所にあるポイント」と読み替えられています。
これは大きな違いです。
このように設定することで
ポイントがいくつあるかを把握しておく必要がなくなるからです。
当然、あとから ポイント数を変えることもできるようになっています。
個数ではなく割合に置き換えて把握する手法は
よく出てくるので覚えておきたいです。
最後に 葉っぱを曲げていきます。 bend ノードを使うと簡単にオブジェクトを曲げることができます。
Bend の Enable にチェックが入っていることを確認してください。
Bend を 70, Up Vector Control を Z Axis に修正します。
下の方にある Capture の項目も修正します。 Capture Direction を 0, 1, 0に修正します。
現状で既にうまく曲がっているはずですが、 葉っぱの長さに関係している 長い方の Line の長さが変わると上手くいかなくなります。
長い方の Line の Length を Capture Length に Paste Relative Reference しておきましょう。
これで STEP ④ 完了です。葉っぱ 1 枚が完成しました。
Color ノードで草っぽい色を付けておいてもよいかもしれませんね。
作成した葉っぱを王冠の形に複製していきましょう。
複製用の頂点を作成したいので Circle ノードと Scatter ノードを作成して接続していきます。
Circle ノードでは Primitive Type を Polygon に、 Orientation を ZX Plane に修正します。
Orientation の ZX はこの円をどの平面上に作成するか、という設定です。 ZX に設定した場合、 Y軸 に向けた平面になります。
XYZのうち設定に登場しない方の軸の方に向く (今回はXZは登場してYは登場しないのでY軸向き) と覚えておくとよいでしょう。
また、少々大きすぎるので Uniform Scale も 0.04 程度に修正します。
Scatter ノードで 円上に頂点をばらまきます。
Force Total Count を 13 に修正しましょう。
さらに Point Jitter ノードを接続します。 Point Jitter ノードはポイントの位置をランダムに移動させるものです。
デフォルトだと 三次元的に位置が移動してしまうのですが Axis Scales を 1, 0, 1 にすることで Y軸方向には移動しなくなります。
Scale を大きくすれば移動することになります。 0.04 程度にしておきましょう。
このポイントを使って Copy to Points で複製してみましょう。上手くいきません。
コピーに使っている頂点に法線が設定されていないため、方向が分からなくなっているからです。
Point Jitter と Copy to Point の間に Attribute Wrangle を追加してこのようなVEXを書くと上手くいきます。
コピー用の ポイントにランダムな pscale アトリビュートを追加したり、葉っぱに Transform ノードで角度をつけたりすると
よりそれらしい見た目にすることもできます。
最後の画像にちょっとだけ出てきた Fit01 関数について解説します。
Fit01 関数は Fit 関数に似ているのですが、入力に使う範囲が 0 ~ 1 の時 ( Fit関数の 2 番目と 3番目 の入力が 0 と 1 の時 ) 使える リマップ関数です。
rand 関数で作った乱数は 0 ~ 1 の範囲で生み出されているため、ちょうど使えそうなので使ってみました。