11:48Houdiniでプロシージャルな壁をつくる下記のような壁をつくってみましょう。Boxを作成し、Sizeを調整します。これが1つのブロックになります。このときCentor(ボックスの中心の位置座標)が、原点にくるようにSizeX、SizeYを2で割った値にBoxの中心が配置されるようにします。Stamp(CopytoXという名前にします)で横にコピーする場合、BoxのScaleX(X側に並べるから)パラメーターを参照して、Xに移動してコピーするようにします。stamp(copytoYという名前にします)します。このときに、複製した分、上にずれてコピーしてほしいとします。ch("../box1/sizey")*$CYこの$CYは現在生成されているコピーの番号を表すローカル変数です。BoxのScaleYで最初の高さを取得し、1段増えるごとにその取得された番号を乗算して、上にずらしていきます。次にコピー番号が奇数の場合、横に半分ずれるようにして、ジグザグにブロックが重なっているようにします。($CY%2)*ch("../box1/sizex")/2$CYが番号なので、それを2で割ったあまりを取得します。%は割り算の余りを取得することができます。これにより、偶数の余りは常に0、奇数の余りは常に1となります。これにBoxのScaleXを半分にしたものをかければ、偶数の場合は、X移動0、奇数の場合は、X移動0.5となり、奇数の場合だけ半分ずれて上に複製されていきます。次に、ずれた部分を埋める半分のブロックを作ります。Box1をAltキーを押しながらドラッグして複製し、SizeはBox1と同じ大きさになるようにします。Referenceすれば、まとめてExpressionを追加することができます。その後、SizeXだけ半分になるように割り算(/2)を追加します。Stampにつなげます。Copyを参照します。次にTransYにBoxのScaleYずつ移動するようにします。このようにえY方向に移動しながら複製されます。コピーで目指す形はこんな形です。うーん、じゃあ、どのようにX軸への移動を作り出せばいいのか?CopytoYまでで壁の全体のBboxは取得できています。そのBboxの中心から180度ずつ回転して上にコピーしていけば、必要なところにボックスがはまります。いうことで、複製するボックスのコピーのPivotX(ローカルピボットポイントX)に、下記のエクスプレッションを入力します。centroid("../copytoY",D_X)centroidは頂点を囲むBboxの中心を取得するエクスプレッション関数です。1つの引数でSurfaceノードを指定し、2つ目の引数でX、Y、Zを指定します。次にRotateYに180と入力します。結果を確認すると狙ったとおりの結果を取得できました。これを最初につくったメインの壁とMergeすると・・・ジグザグしながら、けれども1枚の壁が完成しました。これは、1つのBoxのSizeX,SizeYを参照しているので、Box1のサイズを変えるとブロック間がずれずに、1つのブロックのサイズを変更できますし・・・X方向、Y方向へのコピー数も自由に変更できます。ここまでで壁のモデルは完成しました。サポートまでお問い合わせ下さい。