« XPressoで電球のフィラメント(うそ!) | トップページ | XPressoで簡易窓枠(改造) »

XPressoで簡易窓枠

更に気分転換中…
C.O.F.F.E.E.ばかりではなく、XPressoも少し。と言っていきながらXPressoのC.O.F.F.E.E.ノードを使うと今までと何も変わらないのでC.O.F.F.E.E.ノード以外で作ってみよう。とは、言ってみたもののXPressoをあまり知らないのだ。C.O.F.F.E.E.ノード以外で作るのって正直面倒なんだよね。
とりあえず、簡易窓枠を作ってみよう。形は簡易なので「田んぼの”田”の字」のスプラインをユーザデータとXPressoで制御?管理?押し出しNURBSの押し出し量も操作する。
たいしたネタではないですが…

ではまず、スプラインで、「田んぼの”田”の字」を作ります。

The_simple_casement_01

かなりいい加減に作ってしまいました。
わかり易くする為、スプラインは開いた状態にしてあります。
XY平面状で作業します。
外側が「S1」は時計回りにしてあります。残りは反時計回りです。「時計回り」をきちんとしないと、テクスチャを張るとき、面の表裏が反対になるんじゃなかったかな?確認してません。ごめんなさい…
「一体化」するので名前は適当でいいです。
これを「ファンクション」メニューの「一体化」で1個のスプラインにします。
そうすると、セグメントがオブジェクトブラウザの順番どおりになります。
では、「一体化」します。名前は「窓枠スプライン」にしスプラインを閉じます。

The_simple_casement_02

ポイントの順番は、このように並びました。
後は、押し出しNURBSでこのスプラインを押し出します。更にヌルオブジェクトの子オブジェクトにします。

The_simple_casement_03

では、窓枠の大きさを入力する為のユーザデータをヌルオブジェクトに追加します。ここではヌルオブジェクト名を「窓」にしました。では、「窓」を選択して、属性マネージャの「ユーザデータ」メニューの「ユーザデータを追加...」で追加します。

The_simple_casement_04

まず追加するのは、「窓の幅」と「窓の高さ」の2個の実数(浮動小数)です。

The_simple_casement_05

名前を付け、データタイプ/インターフェイスを浮動小数、最大のチェックを外します。

The_simple_casement_06

2個追加すると、このような状態になります。
仮に「幅」に100、「高さ」に150を入力しておきます。

それでは、ここで「窓」にXPressoタグを付けます。
取り付けると「XPresso編集」ウィンドウが現れます。

The_simple_casement_07

これから行うことは、スプラインのポイントの座標を調整します。
スプラインの形は、Y軸を対象にシンメトリーなので必要な値の±Xの値を取得します。
±(窓枠の幅/2)が左右のポイントのX座標値になります。

ではここに、「窓」ヌルオブジェクトと「窓枠スプライン」スプラインオブジェクトをドロップします。
「窓」の出力端子にユーザデータの「窓幅」「窓高さ」を追加します。
「窓枠スプライン」の出力端子は「オブジェクト」を追加します。

The_simple_casement_08

更に、
新規ノード/XPresso/計算/「反対の数」
新規ノード/XPresso/計算/「計算」
を追加。
「計算」ノードの「演算タイプ」を「除算」。入力[2]に2を入力。

The_simple_casement_09

追加した「計算」ノードの出力端子と「反対の数」ノードの入力端子をつないで、2つを「XGroup」に変換します。
この「XGroup」の入力端子に実数を1個追加。出力に実数を2個追加します。

The_simple_casement_10

「XGroup」の入力端子と「計算」ノードの入力[1](上の端子)をつなぎ、「計算」ノードの出力端子を「XGroup」の上の出力端子に繋ぎます。
「反対の数」の出力端子を「XGroup」の下の出力端子に繋ぎます。
「XGroup」の名前を「±1/2」に変更しました。

The_simple_casement_11

これで「XGroup」に入力された実数は±1/2の2個の数値を出力します。
このままだと、表示スペースが取られるので、「XGroup」の表示/「標準」に変えます。

The_simple_casement_12

XGroupの中の表示は消えました。適当な大きさに調整してください。

この状態では、端子が何なのかわからないのでポート/「名前を表示」を実行します。
名前は「実数」になっているのでわかりやすい名前にします。

The_simple_casement_16

では、ポイントの座標はXYZなので、実数をベクトルに代入するノードを追加します。
新規ノード/XPresso/変換/「実数 -> ベクトル」

The_simple_casement_15

次に、新規ノード/XPresso/一般/「ポイント」を追加します。
「ポイント」ノードの入力端子の「ポイントの位置」を追加します。

The_simple_casement_13

「ポイント」ノードの属性マネージャのマトリックスモードが「グローバル」になっているので「ローカル」に変更します。これは重要です。後から変更するのは厄介です。

The_simple_casement_45

この「ポイント」ノードを使ってスプラインのポイントの座標を調整します。
では、「実数 -> ベクトル」「ポイント」2個のノードを「XGroup」に変換します。
「XGroup」の入力端子に「リンク」「整数」「実数」「実数」「実数」5個の端子を付けます。
端子の名前を順に「オブジェクト」「ポイント番号」「X」「Y」「Z」に変更します。
それぞれを同じ名前の端子に繋げます。
「実数 -> ベクトル」の出力と「ポイント」の「ポイントの位置」を繋げます。

The_simple_casement_17

この「XGroup」も先ほどと同じように表示を切り替えます。表示/「標準」。
端子の名前も表示します。ポート/「名前を表示」。
名前も「ポイントの調整」に変え大きさを調整しました。

The_simple_casement_18

では先ほどのスプラインのポイント順は覚えているだろうか?

The_simple_casement_14_1

0~3までを調整します。
ポイントは4個。
全てのZ値は0.0です。
では、先ほど作成したXGroupの「ポイントの調整」をコピー&貼り付けで4個に増やします。
更に「±1/2」も2個に増やします。

では、「窓」の出力端子「窓幅」「窓高さ」を2個の「±1/2」のそれぞれの「入力」に繋げます。

The_simple_casement_19

先ほど4個に複製したそれぞれの「ポイントの調整」の「ポイント番号」に0~3まで入力します。

The_simple_casement_20
これは4個目の「ポイントの調整」です。

それでは、
ポイント番号0、1のXが「窓幅」の「+」です。
ポイント番号2、3のXが「窓幅」の「-」です。

The_simple_casement_21
「ポイントの調整」の「ポイント番号」の値は上から0、1、2、3です。

同じように「窓高さ」の方も繋いでいきます。
ポイント番号0、3のYが「窓高さ」の「+」です。
ポイント番号1、2のYが「窓高さ」の「-」です。

The_simple_casement_22
少々わかりずらくなりました。

最後に、「窓枠スプライン」の「オブジェクト」をそれぞれの「ポイントの調整」の「オブジェクト」に繋ぎます。

The_simple_casement_23

だんだんゴチャゴチャになってきました。
では、実際にスプラインを見てみましょう。

The_simple_casement_24

スプラインの最初の大きさで見た目の結果は変わってきますが、外側のセグメントが長方形になりました。この大きさを見ると外側のセグメントの最初の大きさは今の大きさの3倍ぐらいだから「窓枠」のユーザデータを3倍の300、450に変えてみます。

The_simple_casement_25

問題なく外側のセグメントが大きくなりました。
後、必要な数値は、

The_simple_casement_26

4種類の数値、と窓枠の厚み。
ポイントの調整は残り12個。

The_simple_casement_14_2

穴の外側の幅(ポイント番号4、11の幅)は「窓幅」-(A×2)
穴の外側の高さ(ポイント番号4、13の高さ)は「窓高さ」-(B×2)

Aを「縦枠幅」、Bを「横枠幅」にしました。
「窓」オブジェクトのユーザデータを2個追加します。30、40の数値を入力しました。

The_simple_casement_27

先ほどと同じように、「±1/2」を2個増やして、「窓」オブジェクトの出力端子にユーザデータ「縦枠幅」「横枠幅」を追加。

The_simple_casement_28

「計算」ノードを2個追加します。
先ほどと同じく新規ノード/XPresso/計算/「計算」です。
一つを乗算。もう一つを減算にします。
乗算の出力を減算の入力[2]に繋ぎます。

The_simple_casement_29

乗算の入力[2]に2を入力。

The_simple_casement_30

この2個のノードをXGroupに変換します。XGroupの入力端子に「実数」を2個追加。出力端子に実数を1個追加します。名前を「内側の幅」にしました。
次のように繋いでください。

The_simple_casement_31

同じく「内側の幅」の表示/「標準」にし、ポート/「名前を表示」にします。
端子の名前は全て「実数」になっているので、適当に名前を付けます。
入力端子を「全体の幅」「両端の除外幅」、出力端子を「内側の幅」にしてみました。

The_simple_casement_32

それでは、この「内側の幅」XGroupを2個に複製します。
先ほどの「窓」「±1/2」2個に繋ぎます。

The_simple_casement_33

これに、つなげるポイント番号は4,5,7,8,10,11,12,13,14,17,18,19の12個です。

The_simple_casement_14_3

先ほどの「ポイントの調整」XGroupを12個増やします。
それぞれのポイント番号を上から4,5,7,8,10,11,12,13,14,17,18,19と入力していきます。
分かりずらくなってきたので「ポイントの調整」XGroupの名前を「ポイントの調整 4」「ポイントの調整 5」…「ポイントの調整 19」「ポイントの調整 18」等と変えると少しは分かりやすくなるでしょう。さらにポイントの配置になるように並べてみました。

The_simple_casement_34_2

2個の「±1/2」XGroupの上がX値、下がY値ですね。
では、繋いでいきます。

The_simple_casement_34_2_2

-Xが4,5,12,13
+Xが11,10,19,18
+Yが4,7,8,11
-Yが13,14,17,19

The_simple_casement_35

Xのみ繋いで見ました。
同じようにYも繋ぎます。

The_simple_casement_36

何が何だか分からなくなってきたね。
ではこの状態で、「窓枠スプライン」を繋いでみよう。
先ほども繋いだので、ここからは詳しく説明はしません。

The_simple_casement_37

実際の「窓枠スプライン」は、このようになりました。

The_simple_casement_38

「窓」のユーザーデータを変更してスプラインが変化するのを確認してください。

残りの、6,9,15,16と、制御しきれていない5,7,8,10,12,14,17,18,19の処理です。

The_simple_casement_14_4

「窓」のユーザーデータ「実数」を2個追加します。
「縦桟幅」「横桟幅」にしました。10、5を入力しました。

The_simple_casement_39

桟の幅を使った制御は、単純に±1/2でいいので「±1/2」XGroupを2個複製します。
「窓」の追加したユーザデータを出力端子に付けます。
「ポイントの調整」を4個追加し、ポイント番号を入力します。

The_simple_casement_40

「窓」の「縦桟幅」と上の「±1/2」を繋ぎ、「横桟幅」を下に繋ぎます。

The_simple_casement_40_2

上の「±1/2」はXなので「-」を「ポイントの調整」7,6,15,14の「X」に、
「+」を「ポイントの調整」8,9,16,17の「X」に繋ぎます。
下の「±1/2」はYなので「-」を「ポイントの調整」12,15,16,19の「Y」に、
「+」を「ポイントの調整」5,6,9,10の「Y」に繋ぎます。
最後に「窓枠スプライン」を「ポイントの調整」6,9,15,16に繋ぎます。

The_simple_casement_41

これで、スプラインを確認します。「窓」のユーザデータを変更して、スプラインが変化するか確認します。

The_simple_casement_42

問題なく変化しました。

残すは、「押し出しNURBS(窓枠)」の押し出し量です。
「窓」にユーザデータ「実数」を追加します。名前は「厚み」にしました。

The_simple_casement_43

「厚み」に適当な数値を入力してください。

XPressoの「窓」の出力端子にユーザデータの「厚み」を追加し、「±1/2」を1個複製します。「窓枠」をXPresso編集にドロップします。「窓枠」の入力端子に、オブジェクトの属性/押し出し量/「押し出し量 . Z」を追加。「窓枠スプライン」の入力端子に、座標/位置/「位置 . Z」を追加します。

The_simple_casement_44_3

「窓」の出力端子「厚み」を「±1/2」の入力端子「入力」と「窓枠」入力端子の「押し出し量 . Z」に繋げます。
「±1/2」の出力端子「-」を「窓枠スプライン」入力端子の「位置 . Z」に繋げます。

The_simple_casement_46

これで、「窓」のユーザデータ「厚み」を変えても窓枠オブジェクトが軸の中心に来るように配置されます。

The_simple_casement_47

XPressoの全体は…

The_simple_casement_48

かなり見ずらいですね。
内容もどうなんだろう?間違っていないだろうか?読み返すの面倒だなぁ…
間違っていたら、こっそり教えてください。いつもですが誤字、脱字、タイプミス、変換ミス、スクリーンショット。たまに暴言。
こっそり直します。

今回のC4Dファイル「The_simple_casement.ZIP」です。

|

« XPressoで電球のフィラメント(うそ!) | トップページ | XPressoで簡易窓枠(改造) »

コメント

この記事へのコメントは終了しました。