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

