見出し画像

Cinema 4D R23: シーンノードでスプラインをつくってみる

今日はスプラインをシーンノードで作成してみたいと思います.

スプラインをゼロから作成するためには,ポイント順とポイント位置が必要になります.これらの要素はスプラインオブジェクトを構造マネージャで見てみると,ポイント番号に対して座標のベクトルがセットになっていることが確認できます.これをシーンノードで作成します.

画像1

とりあえず簡単なスプラインで良いので,どうやって作ればいいのかを考えながら以下のようなジグザグスプラインを作ってみました.下の画像はシーンノードで作成したスプラインです.

画像2

ポイント位置の配列を作成する

スプラインに必要なデータは分かったので,座標位置となるベクトルを作成します.配列の「ビルド」ノードを使ってベクトルの配列を作成します.〈データタイプ〉を「ベクトル」にして各ポイントの座標位置とします.座標はジグザグになるように設定しています.この配列の数は〈付加〉で増やせます.

画像3

つづいてビルドノードの〈配列出力〉から〈ジオメトリプロパティ代入〉の〈くり返し〉へ接続し,〈ジオメトリOp〉ノードを通してシーンに渡します.この時点ではポイントデータがないので,何も生成されません.

ポイントを作成してトポロジーへ渡す

〈ライントポロジー代入〉と〈文字列からインデックス配列〉ノードを作成します.後者のノードは設定した文字列から配列を作成できるノードで,パラメータに「0-3]と設定すれば{0,1,2,3}という4つインデックスを持つ配列を出力できます.それを〈ライントポロジー代入〉の〈ポイント〉へ接続し,トポロジーを接続してあげます.〈ライントポロジー代入〉はスプラインのトポロジーを作成するので,これでポイント順に座標がセットされスプラインが作成できます.

画像4

ただ,この状態では〈ビルド〉の座標値を増やしたらポイントが足りなくなってしまいます.ベクトルの配列を増やしたらポイントインデックスも増やすのはちょっと面倒なので,少し楽にしたいですね.〈ビルド〉の〈長さ〉から配列数が取り出せるので,この数を「-1」した数を〈結合〉ノードでインデックス配列を作成すればビルドの配列を追加したときに自動的にポイントも増えます.

画像5

スプラインを作るまでのサンプルファイル

仕組みはなんとなくわかったので何かを作る

上の手順よりスプラインをつくためにはポイントの配列と,ポイント位置の配列が必要であることが分かりました.少し応用して分布で作成した位置と座標の配列を作成してスプラインにしてみました.

画像6

ポイント配列は分布の複製数と同じになるので,プロパゲートポートを作成して値ノードから渡しています.プロパゲートポートから直接渡したかったのですが,何故かワイヤを接続後に数値を変更できないという現象が起きたので,あれこれ試して値ノードを二つ作るという無駄な状況になっています...

左上の〈ビルド(入力のみ〉ノードから〈値を書き込み〉へのデータの流れで{0,1,2,3...}という入力したポイントインデックスの配列を作成します.

座標位置は分布のマトリクスから移動のパラメータを取り出して〈ジオメトリプロパティ代入〉の〈くり返し〉へ渡します.

これでスプラインは出来ましたが,それをスイープしてさらに分布という処理を追加しています.〈レガシーオブジェクトインポート〉ノードはオブジェクトマネージャにあるオブジェクト(ここでは円形スプライン)をシーンノードへインポートするために使用しています.これはスイープの断面となります.

もうちょっと面白い形状にしたかったんですが,時間切れ...

画像7

画像8

今日はシーンノードでスプラインを作成する方法でした.

この記事が気に入ったらサポートをしてみませんか?