画像はWrangleに記述したonoizeの値をプリミティブの@displaceに入れて、六角形の天面プリミティブそれぞれを座標ごとに上下させることで常に上を向かせたまま伸縮しています。
最初はPointsのアトリビュートをやっていましたがそれだとポイント単位で動いてしまいますからね。
そしてこの六角形のオブジェクトは大学のオンライン授業でルイジ・オノラさんの講義を見ながら真似して作ったものです。オリジナリティとは。
しかしこれを作ろうとした際、始めはプリミティブのWrangle内で元の@P.yに@displaceの値を加算をさせることで実現しようとしていたんですが、うまくいきませんでした。Primitiveは@Pのデータを持たないのかとも思いましたがそんなこともなく、ただただ原因不明です。
また、その推測でPrimitiveからノイズを作成することはできない(座標データを持たないならば当然)と考え、プリミティブからプリミティブを構成する最小番号のポイントを特定し、その座標からノイズを作成・・・とも考えましたが、そもそもPrimitiveのWrangleからポイントのデータを持ってこようとするのはとてつもなく難易度が高いようでした。
なのでWrangleではアトリビュートの設定のみをして、その後のPrimitiveノード内にて設定した@displaceを利用することで実現しています。
タイトルの意図もそれです。私はVEX言語は言語そのものの難解さは特にないと思っています。しかし例えばPrimitiveのWrangleにてPointsのグループを設定しようとか考えると難易度が爆増します。アトリビュート自体も非常に分かりにくくなりますし。
さらに複雑なのはポイントから特定のプリミティブを選択しようとすることですね。pointprims()というvex関数からは複数のプリミティブが配列として帰ってくるので到底理解が追い付かずにSUM41のOver My Headが脳内で流れてしまっていました。
今回であれば法線のyが1.0であるとかでif文を構築すれば不可能ではないですが。
他にも線形頂点番号という全く知らない単語が出てきたり。Houdiniでは少なくとも3つのポイントがないと角度を含んだ「頂点(Vertex)」にならないのは分かりますがそういうことなんですかね?
とはいえPrimitiveのWrangleからポイントのアトリビュートを参照するということは間違いなく必要とされる技術だと思います。難しいといわずにやってみましょうか・・・。
ところで最初の画像、1枚レンダリングするのにKarmaで3分かかりました。240フレームとして設定してあるのですべてレンダリングするのにかかる時間は・・・
180*240/3600 = 12h
寝ます。