modoでプロシージャルな鎖(リンクチェーン)を作る方法について書いてみます。鎖はアクセサリーや駐車場スタンドなど身近でよく使われているので、CGで作る機会の多い定番の題材です。
modoには鎖を表現する方法がいくつかあります。どのような作り方があるのかいくつか作り方を紹介してみたいと思います。基本的にはReplicatorを使用して、鎖の輪をカーブに沿って配置します。
輪のペアをカーブに沿って配置する方法
輪2つを1アイテムにした物を、Replicatorを使用してカーブに配置する方法です。どの3Dソフトでも実現できる一番標準的な鎖の作り方です。
スケマティックはこんな感じです。
カーブをCurve Particle Generatorに繋いで、Replicatorで輪を複製する単純な作り方です。
この方法のメリットは作るのが簡単なことです。
デメリットは輪が2つで1アイテムなので、カーブが輪の長さよりも鋭角に曲がった場合に、輪の繋がりが破綻しやすいです。
Foundryフォーラムではdanperkさんが、輪をプロシージャルにしてアセンブリにまとめたファイルを公開しています。自分用に鎖アセンブリの作成を作る場合に参考になると思います。
1つの輪をカーブに沿って配置する方法 (Particle Step Modifier篇)
1つの輪をReplicatorを使用してカーブに配置する方法です。Particle Step Modifierを使用して輪を1つおきに90度回転します。
スケマティックはこんな感じです。
輪を回転する処理はParticle Step Modifierの「回転 Z」を使用します。
カーブの長さに応じて自動的に「回転 Z」を設定したいので、Curve Particle Generatorの頂点数をArray Countを使用して数えて、輪が90度回転するように掛けた値を「回転 Z」に入力します。
この方法のメリットは輪が1つなので、カーブが鋭角に曲がっても破綻しにくいことです。
デメリットはParticle Step Modifierの計算誤差が蓄積する影響なのか、カーブの始点から終点にかけて微妙に輪がねじれてしまいます。
1つの輪をカーブに沿って配置する方法 (Array篇)
1つの輪をReplicatorを使用してカーブに配置する方法です。Array Operatorを使用して輪をを1つおきに90度回転します。
スケマティックはこんな感じです。
輪を回転する処理にArrayノードを使用します。Curves to ArrayはCurve Particle Generatorのように距離を使用してカーブを細分割できないので、Path Constraintでカーブの長さを輪の長さで割って「ステップ」を自動的に計算するようにします。
Array Operatorは配列を編集して出力するためのノードです。「インデックス」を剰余ノードで2で割り、1つおきに配列を選択し90を掛けて、Matrix From Eulerの「入力Z」に接続します。Matrix Composeに「ワールド回転」と「エレメント(出力)」を接続してマトリクスを構築し「エレメント(入力)」に戻します。これで配列を1つおきに90回転したことになります。
Array Operatorの「出力」をParticle Generatorの「ユーザー配列」に接続して、Replicatorで使用できる頂点情報にします。最後のParticle Modifierはチェーン全体のひねり用で、なくても問題ありませんが、あると少し調整の幅が広がりそうです。
この方法のメリットは輪が1つなので、カーブが鋭角に曲がっても破綻しにくく、Particle Step Modifierを使用したときのようにねじれも発生しません。
デメリットはArrayを使う必要があるので構築するのが大変です。
このArrayの使い方は、Foundryフォーラムではkhellstrさんが公開していたファイルを参考にしています。
Arrayを使うとカーブを編集したときに、頂点数が変化して終端の輪の角度が縦横激しく変化してるのに気がつきます(画像右側)。
こういう場合は、Curves to Arrayの「ステップ」を偶数か奇数に固定すると安定ます。
鎖の間隔を計算する部分で、長さを剰余ノードで2で割り、条件式ノードで1より大きい場合は0を、1より小さい場合は1を出力することで、「ステップ」を奇数に固定しています。
2種類の輪をカーブに沿って配置する方法
縦横角度の違う2種類の輪を、Replicatorを使用してカーブに配置する方法です。パーティクルアイテムマップを使用して、角度の違う輪を1つおきに配置しています。
スケマティックはこんな感じです。
カーブをCurve Particle Generatorで細分割した後、Merge Meshesでカーブを結合します。Select by PatternとSet Weightで1頂点おきにウェイトを設定します。
設定したウェイトをRemap Weightでパーティクルアイテムマップに変換します。
パーティクルアイテムマップによって、Replicatorで複製されるアイテムが1つおきに切り替わります。
この方法のメリットは輪が1つずつのアイテムなので、カーブが鋭角に曲がっても破綻しにくいです。2つのアイテムを使っているので、デザインの異なる輪を配置したい場合に便利です。
デメリットはMerge Meshesを使用してるので、頂点数が多くなるとパフォーマンスが下がる可能性があります。
たまにはよくある題材と言うことで、鎖の作り方をいくつかご紹介しました。用途に応じて試してみてください。
カーブに輪を配置する関係で、輪が1つの場合でもカーブが鋭角に曲がった場合、どうしても輪がずれる場合があります。輪が完全にずれないようにしたい場合は、鋭角な部分にだけベベルを適用するような処理を追加するとうまく行くかもしれません。
参考
カーブを再編集できなくてもOKという人向けには、昔ながらのカーブ複製ツールがあります。
昔からあるCurve Particle Generatorのみを使用する方法。
Dynamic Curveで鎖を物理計算。