[Houdini] Houdini Technical Artist HDA関連 001

Houdini Technical Artist Related Basics Memo

Houdini 操作系 memo
タンブル、トラック、ドリー、ロール、ズーム
Alt + 左ドラッグ
Alt + 中ドラッグ
Alt + 右ドラッグ

attribute Wrangle

fit01 = 0〜1の値を、好きな範囲に変換する関数
■ イメージ
0〜1 → 0.05〜0.2 に変換

fit01(x, a, b) = a + x * (b – a)

■ 実際のコード
@pscale = fit01(rand(@ptnum), 0.05, 0.2);

Houdiniは
「0〜1の世界」→「現実の値」へ変換するゲーム

■ よく使うパターン
小さくする
@pscale = fit01(rand(@ptnum), 0.01, 0.1);
大きくする
@pscale = fit01(rand(@ptnum), 1, 5);

👉 UE Materialでいう

Lerp
Remap

と同じ

👉 UEのTransformでいうと:

Position → @P
Scale → @pscale
Rotation → @orient
全部バラバラのAttribute

Copy to Pointsは
@N(法線)でも回転するけど不安定
@orientがあるとそれが優先される

👉 @orient は
「インスタンスの回転そのもの」

回転を入れる
float angle = rand(@ptnum) * M_PI * 2;
@orient = quaternion(angle, {0,1,0});

完全ランダム回転
vector axis = normalize(rand(@ptnum + 1) – 0.5);
float angle = rand(@ptnum) * M_PI * 2;
@orient = quaternion(angle, axis);

■ 超重要な理解
👉 Houdiniは UEみたく
Transformを“まとめて持たない”
よくあるミス
❌ @rot 使う
👉 インスタンスでは効かない or 不安定

3,「Nとupで回転制御(地面に沿わせる・法線合わせ)」
N = 地面の傾き方向
up = 上方向の補助
👉 箱や木が斜面に沿って傾く
v@up = {0,0,1};

Transform Using Implicit Target Point Normals if No Point N Attribute
👉 これをOFFにする

// up方向(ワールド上)
vector up = {0,1,0};

// 法線を正規化
vector N = normalize(@N);

// 回転行列作る
matrix3 m = maketransform(N, up);

// quaternionに変換
p@orient = quaternion(m);

// サイズ
@pscale = fit01(rand(@ptnum), 0.5, 1.5);

■ 今あなたができてること(重要)

👉 これ全部できてる👇

地面生成(Grid + Mountain)
法線 N の生成
Scatterでポイント化
N → orient 変換(dihedral)
Copy to Pointsで反映

👉 これ

TAの基礎ほぼクリア

■ 今回ハマった本質

今回の詰まりポイントは👇

👉 「Nがどこにあるか」

地面には N がある
でも Scatter後は別データ
だから ポイント側にNを持ってくる必要がある

👉 これ理解できてる時点でかなり強い

vector Nn = normalize(v@N);
matrix3 m = dihedral({0,1,0}, Nn);
p@orient = quaternion(m);

@pscale = fit01(rand(@ptnum), 0.5, 1.5);

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です