No More Retake

3DCG屋さん向けTips&Referenceサイト

メニュー

Houdiniレシピ:WrangleでPoint

Houdini回ね。

今回はAttribute Wrangle(SOP)を使ってPointを作ります。
最終的にはPointを並べてこんな感じのを、と。
sin()とcos()が出てくるのであしからず。

PointWrangle_gif01

では早速。
まず、AttributeWrangle(SOP)のRun Overの項目を”Detail(only once)”に変更しておきます。

PointWrangle_02

Pointを作成するコマンドはaddpoint()を使います。

addpoint(geoself(), {0, 1, 0});

上のコードで点が1コ作られます。
点を作るのはこれだけ。
肝になるのは配置の仕方ですね。

Pointを円周状に並べるために、位置座標をサインとコサイン使って求めます。
図にするとこんな感じ。

PointWrangle_03式にするとこんな感じ。
ここでは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というパラメータをあらかじめ作って、それを参照してます。

PointWrangle_04

パラメータを外に出しておくと、キーフレーム打ってアニメーション付けたり出来ます。

PointWrangle_gif02

同様にして、回転角度、配置間隔のパラメータも外に出します。
螺旋状にもしたいので、半径と回転角度を連動もさせます。
そのままだと半径の変化が急すぎるので、冪乗で緩和させます。
そのパラメータも外に出します。
この感じでコードにちょっと手を加えたのが、初めに載せたやつです。

PointWrangle_05

 

コードだけ抜き出すと、


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));
}

PointWrangle_gif03

色付けたら、初めに載せたやつになります。

おわり

以上、今回はここまで。
サンプルファイルはこれ

では、また次回!

 

関連記事

  1. 2016.06.16

    Houdini:Mandelbulb
  2. 2015.12.18

    Houdini:Marble Ball
  3. 2014.12.03

    Houdini:FluitDrop

コメントをお待ちしております

このサイトについて

3DCG Tipsサイト。Houdiniの記事が多めです。

RSS

follow us in feedly

アンケート

あなたのCG歴はどのくらいですか?

View Results

Loading ... Loading ...

言語切り替え

  • English (United States)
  • 日本語

Archives

  • 2017 (1)
  • 2016 (36)
  • 2015 (64)
  • 2014 (54)
  • 2013 (60)
  • 2012 (54)

スポンサードリンク