Continue(s)

Twitter:@dn0t_ GitHub:@ogrew

【Houdini】relbboxってなんやねん、という話。

つまりは

ジオメトリの境界ボックスを基準に、指定したポイントの相対位置を返します。

ということらしい。基本的には

vector  relbbox(<geometry>geometry, vector position)

この構文。

geometryは何番目のインプット?のgeometryかって指定だから最初のうちは0とかせいぜい1しか使わない。そのgeometry内でのpositionの相対位置(つまり0~1)を返す。 ちなみにgeometryの指定は飛ばすことができるみたいで

vector  relbbox(vector position)

って書くこともできる。(ただしこの形式は今後消される可能性あり。)

ちなみにExpression記法?として

$BBX = relbbox(@P).x
$BBY = relbbox(@P).y
$BBZ = relbbox(@P).z

と同義らしい。

ex1) Y座標の相対的な大きさに比例してX座標をずらす。(→加算)

@P.x = @P.x + relbbox(0, @P).y * ch("strength");

f:id:taiga006:20191106222418p:plain

ex2) Y方向の相対的な大きさに比例してXZが広げる/細める。(→乗算)

@P.x = @P.x * pow(ch("strength"), relbbox(0, @P).y);
@P.z = @P.z * pow(ch("strength"), relbbox(0, @P).y);

f:id:taiga006:20191106222932p:plain ※strengthの値を1以下にすれば先端はとがる。

ex3) Y座標の相対的な大きさに比例してXY平面を曲げる。

float bby = relbbox(@P).y;
@P.x = @P.x * cos(radians(bby * ch("strength"))) - @P.y * sin(radians(bby * ch("strength")));
@P.y = @P.x * sin(radians(bby * ch("strength"))) + @P.y * cos(radians(bby * ch("strength")));

f:id:taiga006:20191106224300p:plain

ただ結局
relative + box ?
rel +b? + box ?
わからないままである。