Houdini入門


基礎操作

按住空格,在編輯模式下旋轉,縮放和平移

revolve :車削操作,相當於旋轉凸台
convert : 轉化節點,將一種類型的幾何體轉化為另一種幾何體,如primitive-》polygon
bend/twist/ : 彎曲/扭曲/錐化等節點
add :創建點
scatter :在模型表面撒點 (grid/box/primitive+scatter) curve也可以創建點 可以根據某個屬性生成,與timeshift/attributecopy結合

point :對每個點執行一遍vex操作
primitive :對每個面執行操作
點屬性可以包含法線/顏色/頂點/縮放/uv/速度等等
$PT 模型點序號 rand($PT) 生成隨機數

camera視角調節,點中視圖右側的鎖,可以修改攝像機視角,在取消選擇鎖

copy and stamp :傳入點控制復制物體的位置,方向,縮放等
stamp 在兩個分支之間,其中一個分支要使用另一個分支的數據,可以使用stamp函數傳遞
stamp("../copy1", "sides", 5)
bbox函數 查找最值
mountain 節點:技巧:mountain疊加:第一做大的形體變形塑造,第二個做細節上的修改
switch節點 傳入多個節點,根據case的值選擇生效的節點
divide節點 將模型細分
subdivide 細分節點
facet 計算法線,使模型點分離
measure :測量節點,可測量面積體積等等

timeshift :獲取某一時間/幀的屬性
attributecopy:復制某一節點屬性給另一節點,與timeshift結合使用,可以獲得模型變化情況下的常量

trail :拖尾
resample :曲線重采樣,加點

remesh :高模轉低模
isooffset :將模型轉化為實體,可以配合scatter在模型內部撒點
rest position : 存儲模型位置信息

carve :剪切節點 線從起點終點消失
polywire :曲線變成多邊形
clip :裁切節點

C :創建選盤
X : 吸附功能

Vex

常見屬性:
@Cd :點的顏色(vector3)
@P :點的位置(vector3)
@N :點的法線(vector3)
@ptnum :點的序號 int
@numpt :點的總數 int 注意類型轉化,int/int得到int,容易出現的==0的情況

ch函數,既可以引用其他節點的數值 : ch("../pos/px");
也可以在當前vex節點下創建一個通道。
如ch("scale");將在當前節點下創建一個scale滑條。
chv 同ch,不過是創建一個vector3的通道

三角函數:
使用弧度制。
在Vex中使用和創建屬性非常簡單
直接@Value即可,如果不存在該屬性則houdini會自動創建該屬性並賦值

length(@P) 測量一個點到原點的距離
distance(p1,p2) 測量兩點的距離 float d = distance(@P, {1,0,3} );
fit() 映射函數 如 @Cd = fit(sin(d),-1,1,0,1);
clamp() 鉗制@P.y = clamp(d,0,3); P.y取值在0-3

chramp() 自定義映射曲線 d = chramp('my_stepped_ramp', d);
trunc() 取整函數
在片元primitive中調用@P,獲得的是當前片元的中心點
在houdini中創建VOP可以查看點,面Vetex的各種可用內置屬性

minpos(0,@P) :獲取輸入2網格中與輸入1當前遍歷點相交的最近位置,(注意不是模型上的點),前面一個參數代表與那個輸入的網格相交,這里是二
nearpoint(1,@P) :獲取輸入2中與輸入1最接近的點並返回它的@ptnum
nearpoints int pt = nearpoint(1,@P);
point函數:獲取輸入的某個ptnum的屬性值 @Cd = point(1,'Cd',pt);實際上可以用opinput1_Cd代替。其他同理

噪聲
noise,curlnoise,pnoise(vector4 xyzt, int px, int py, int pz, int pt);
點積 dot(@P,@N)
叉積 cross()

normalize()歸一化函數
relpointbbox()將最左下角歸為0,最右上角歸為1
vex支持三目運算符
數組
float myfloatarray[] = {1,2,3,4,5};
vector myvectorarray[] = {{1,2,3},{4,5,6},{7,8,9}};

簡易寫法並賦值給屬性:
f[]@a = {1,2,3,4,5};
v[]@vecs = {{1,2,3},{4,5,6},{7,8,9}};
v@a = {10,12,100};
i[]@a = pts;//int類型數組

houdini的foreach循環
foreach( element; array) {
// do things to element
}

for(int i=0; i<len(pts); i++) {

}

#創建幾何體
addpoint(index,@P) 返回一個ptnum,index表示在第幾個幾何體中創建

int pt = addpoint(0,{0,3,0});
addprim(0,'polyline', @ptnum, pt);

#刪除幾何體
removepoint(0,@ptnum);
removeprim(0,@primnum,1)//保留點
removeprim(0,@primnum,0)//刪除點

@pscale 統一縮放屬性
@scale 非統一縮放{x,y,z}

注意數組的初始化方式:@scale = {1, d, @Cd.g}; // nope
@scale = set(1, d, @Cd.g); // better

copy節點的方向應用:@N確定模型的y軸朝向,@up確定模型的z軸朝向
v@up = set(sin(t),0,cos(t));
@P.y += sin(t*2)*0.5;

四元數旋轉:
quaternion(angle,axis(v))
如:
float angle = ch('angle');
axis = chv('axis');
axis = normalize(axis);

@orient = quaternion(angle, axis);
orient屬性會在copy節點使用作為旋轉量

setprimintrinsic函數給內部屬性寫入值
matrix3 m = ident();//ident返回該類型的單位矩陣
setprimintrinsic(0, 'transform', 0, m);

//旋轉縮放矩陣
@orient = quaternion({0,1,0}*@Time);
v@scale = {1,0.5,1.5};

matrix3 m = ident();
scale(m, @scale);
m *= qconvert(@orient);

setprimintrinsic(0,'transform',@ptnum,m);

4*4旋轉縮放位移矩陣
matrix pft = primintrinsic(0,'packedfulltransform',@ptnum);
4@a = pft;

轉化為3*3矩陣時,將會丟棄位移矢量:
matrix3 rotandscale = matrix3(pft);
3@b = rotandscale;

#獲取幾何體上的信息
primuv 獲取幾何體對應uv上的信息

vector uv = chv('uv');
@P = primuv(1,'P',0,uv);
@N = primuv(1,'N',0,uv);

點雲
pcopen 獲取近點雲
pcfilter 對點雲取均值

可以是位置,可以是顏色,可以是法線,任意屬性!
int mypc = pcopen (1 , 'P' , @ P , ch ('d' ), chi ('amnt' ));
@ P = pcfilter ( mypc , 'P' );
@ N = pcfilter ( mypc , 'N' );
@ N =normalize(@ N ) * 2 ; //以使其更易於查看!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM