DOT NOTES

Twitter:@dot_not_ GitHub:@ogrew

Houdini勉強メモ(UHTK編)

非常に初学者にも親切でわかりやすい解説でした。メモを晒しておく。


UHTK 04 Part I - VEXで置き換える

www.youtube.com

📝MEMO

  • Wrangleノードはいくつか種類があるが基本的にはAttribute Wrangleをベースにパラメータが適宜変更されているだけ。
  • 存在しないattributeを書くと勝手に追加される。(= attribute createノードと一緒。)
  • @weight = 2.0;(float)v@weight=2.0;(vector)みたいな感じで型を指定できる。
    -@Pv@Pを省略している。
  • VEXはC,C++ベース。
  • pointを追加してリサージュ図形をつくる。
for (float i = 0; i < 2 * 3.141592 * arg; i += 0.02) {
    pos = set(cos(i * f1), sin(i * f2), cos(i * f3)) ;
    addpoint(0, pos);
}
  • pointをつなげるPolyWireノードをつなぐ。

🐔GIF

f:id:taiga006:20191021220308g:plain

UHTK 04 Part II - VEXで置き換える

www.youtube.com

📝MEMO

  • rand関数を使って rand(@primnum) と書くと各プリミティブのIDをシード値にしてランダムな値を作れる。
  • original perlin noiseはvexでonoise(pos, turbulence, rough, atten)関数。
  • chfのようにchrampもある。
  • onoiseはfreq(原点を中心にScale)->offset計算。その逆ではない。

今回書いたVEX

vector d_noise = v@P * chf("d_freq") - chv("d_offset");
vector d_pos = v@P + onoise(d_noise, 2, 0.5, 1.0);

vector pos = d_pos * chf("freq") - chv("offset");
float noise = onoise(pos, 5, 0.5, 1.0);

noise = fit(noise, -0.5, 0.5, 0.0, 1.0);

noise = chramp("remap_height", noise);

float height = chf("height");

vector disp = v@N * noise * height;
v@P =  v@P + disp;

🐔GIF

f:id:taiga006:20191021221500g:plain

UHTK 05 - ソルバーって何?

www.youtube.com

📝MEMO

  • @Frame = 現在のフレーム番号
  • Solver = 前フレームでの処理結果を使いたい=時間経過の結果を蓄積したいときに使える。
  • scatterノードでpointをまばらに。
  • groupノードでグループ化できるが、所詮そのgroupパラメータもattributeのひとつなのでattribute wrangleで書くことができる。
i@group_food = 1;
  • solverの処理結果はsolverの中にいると機能しない。(バグ?)=>Secene ViewのPinを使用するとよい。
  • Cleanノードで、どこともつながっていない(不必要な)pointを掃除してくれる。

🐔GIF

f:id:taiga006:20191021221952g:plain

UHTK 06 Part I - タイトルグラフィックを作る

www.youtube.com

📝MEMO

  • 拡散するようなpointの動きを作るために各pointごとに加速度から位置を決める。
  • 加速度の決定にはカールノイズ curlnoise(@P)を利用する。
float dt = 1./24.;
v@v = v@v + v@a * dt;
v@P = v@P + v@v * dt;
  • 初期値を決める時点でIDを割りふっておく。(なぜ、ptnumを使わないの?→trailでcache文だけpointを複製したとき元ネタとなったptnumでグループ分けできる→lineを作るor色をつけるのに都合がいい。)
  • 徐々に先の太さを変えたい。→あるptがあるlineを構成するptsのうち何番目なのか→resampleノードが使える。→curve U attribute
  • chramp("name", attrs) -> attrsをRampで調整できるようになる。

🐔GIF

f:id:taiga006:20191022002601g:plain