Houdini回ね。
今回はAttribute Wrangle(SOP)を使ってPointを作ります。
最終的にはPointを並べてこんな感じのを、と。
sin()とcos()が出てくるのであしからず。
では早速。
まず、AttributeWrangle(SOP)のRun Overの項目を”Detail(only once)”に変更しておきます。
Pointを作成するコマンドはaddpoint()を使います。
addpoint(geoself(), {0, 1, 0});
上のコードで点が1コ作られます。
点を作るのはこれだけ。
肝になるのは配置の仕方ですね。
Pointを円周状に並べるために、位置座標をサインとコサイン使って求めます。
図にするとこんな感じ。
式にするとこんな感じ。
ここではxz平面の円にしてみました。
float r=ch("r"); for(float i=0; i<360; i++){ float x = r*sin(i); float z = r*cos(i); addpoint(geoself(), set(x, 0, z)); }
1°の間隔でpointを配置してます。
一行目、「float r=ch(“r”);」、これはノードにあるパラメータを参照してます。
Attribute Wrangle(SOP)はあらかじめパラメータを追加しておくと、ch(“パラメータ名”)でその値を参照できます。
ここでは半径の意味のrというパラメータをあらかじめ作って、それを参照してます。
パラメータを外に出しておくと、キーフレーム打ってアニメーション付けたり出来ます。
同様にして、回転角度、配置間隔のパラメータも外に出します。
螺旋状にもしたいので、半径と回転角度を連動もさせます。
そのままだと半径の変化が急すぎるので、冪乗で緩和させます。
そのパラメータも外に出します。
この感じでコードにちょっと手を加えたのが、初めに載せたやつです。
コードだけ抜き出すと、
float theta = radians(ch("theta")); float interval = ch("interval"); float r = ch("r"); float pow = ch("pow"); for(float i=0; i<theta; i=i+interval){ float x = sin(i)*r*pow(i+1,pow); float z = cos(i)*r*pow(i+1,pow); addpoint(geoself(), set(x, 0, z)); }
色付けたら、初めに載せたやつになります。
おわり
以上、今回はここまで。
サンプルファイルはこれ。
では、また次回!
コメント