1-4期
195人加入学习
(33人评价)
Houdini 影视特效实验班

6个月零基础到入职

价格 ¥ 6198.00
教学计划
承诺服务

emission发射 选项卡
emission source参数,导入白水粒子的发射源;

limit emission参数,勾选之后会降低已存在的白水密集区域的生成的白水粒子的数量;

emission amount参数,翻倍发射已有的白水粒子的发射量;

velocity offset参数,沿着流体粒子速度矢量的位置创建白水粒子;

velocity mutiplier参数,白水粒子继承原来流体粒子的速度的倍增值; 

maximum initial speed参数,新产生的白水粒子的速度不允许超过这个值;

lifespan参数,白水粒子的平均寿命;

advanced高级 卷展览
seed参数,白水粒子的发射和死亡的所有随机方面的种子值;

aging rate老化率,当勾选add state attribute选项的时候,可控制白水粒子在bubble,spray,foam三个状态下的存活时间,数值越大,老化的速度越快,死亡的概率也越大

velocity noise,对新出生的白水粒子的速度做一个扰乱
 

 

limit选项卡

collision SOP参数,导入需要与白水粒子碰撞的体积,在这里导入的碰撞体积,白水粒子解算的时候会考虑白水粒子撞上物体后,白水粒子在碰撞物体上的附着效果;

SDF name参数,写入与白水粒子碰撞的体积的场名称;要注意的是,碰撞体积必须是一个SDF,不过不用担心,在SOP里面导入进Dop里进行碰撞的体积都是SDF;

closed boundaries,可单独调控白水粒子解算框的边界是否与白水粒子发生碰撞;

limit size,limit center,白水粒子解算框的大小和位置;

visualize limit,白水粒子解算框的显示;

 

force选项卡  
gravity buoyancy参数,白水粒子受到的重力和浮力的大小和方向;
base advection strength,白水粒子的对流力的强度
base velocity multiplier,白水粒子的对流力依然是根据流体粒子的速度场来进行计算的,这个就是白水粒子在应用对流前流体粒子的速度场的倍增值

 

foam选项卡
clumping参数栏,通过给相邻的白水粒子增加一个约束,来控制白水粒子的密度,我只看过官方的演示视频,各个参数之间到底是什么样的一个关系还弄不清楚

 

erosion参数栏,启用此功能可以在较稠密的区域保留白水粒子,在较稀疏的区域腐蚀白水粒子;   Depth Range 液体表面此距离内的颗粒将受到腐蚀;    Erosion Strength密度较小的白水粒子区域的侵蚀强度。 此参数的值越高,白水粒子消失越快;   Preservation Strength控制防止白水粒子被侵蚀的密度范围

 

repellant,白水粒子之间的排斥力,工作原理是在白水粒子之间生成一些repellant粒子,这些repellant粒子对白水粒子产生一个排斥力,使白水粒子形成一个个的多孔泡沫结构;

reseeding frame,这个参数帮助文档上并没有解释

feature size range,repellant粒子的size范围;注意,当在Whitewaterobject里面对repellant进行可视化的时候,改变这个值,repellant粒子会变少是因为repellant粒子的半径变大,而repellant粒子不会游戏穿插,所以可视化的时候repellant粒子数量会变少

strength range,repellant粒子的排斥力强度范围

noise range,repellant粒子的扰乱强度,0代表repellant粒子表面完全是圆的,1代表repellant表面完全是噪波;

pulse frequency range,repellant粒子噪波形状演化的周期速率。值越大,一个噪波的演化周期越长,0代表没有周期变化,噪波会一直是一种无规律的演化;

life range,repellant粒子的寿命,启用后,repellant粒子会老化并且死亡

density threshold,启用后,repellant粒子限制生成在已包含白水粒子的区域。如果白水粒子的密度高于指定的阈值,这个区域才会生成repellant粒子;

advanced高级选项里面是根据repellant粒子的半径,速度,加速度和液体深度来控制repellant粒子的作用

 

adhesion粘附栏,使白水粒子粘附在液体表面
 

[展开全文]

@N = set(1 , 0 ,0); 

 

attributewrangle里:

point(0, "P" , 104);

point节点,需要3个参数,第一个是wrangle的输入接口编号,第二个是点的哪个属性,第三个是点的编号

得到点的属性(例子里是位置属性)

 

 

计算两点之间的距离:

vector pos_a = point(0, "P" , 104);
vector pos_b = point(0, "P" , 105);
f@my_dist = distance(pos_a,pos_b);

 

定义变量名称 映射:

addvariablename(0 , "my_dist", "MY_DIST" );

映射完后可以进入copy stramps里value里$来使用

 

 

bound节点里:

up padding:rand(stamp("../copy2" , "id" , 1) *123 ) * sin($F*10)  *2

[展开全文]

这里使用For loop 进行排查后  模型仍有穿插的问题会在2-09中解决

[展开全文]

获取到物体轴心的位置 减去物体的位置 得到的结果就是0

位置矢量 减去 轴心矢量 是应该等于0

[展开全文]

exhelp bbox查看使用说明

 

Size里X轴:

bbox("../copy_boxes/" , D_XSIZE)

Size里Z轴:

bbox("../copy_boxes/" , D_ZSIZE)

 

 

Ray节点:

把左边接入的点投射到右边的输入口

ray direction from:改成vector,y轴设置成-1,使得grid上所有的点投射到了boxes上

 

 

vector min;
vector max;
//vector min,max;  it's ok!

getbbox(0 , min, max);
float ramp = fit(@P.x , min.x, max.x, 0, 1);
@Cd = set(ramp , 0, 0); 

使用颜色来观察

 

if(ramp >0.1 && ramp<1-0.1){ 
    removepoint(0, @ptnum);

&&表示和,||表示或

通过ramp的区域,来设置阈值

[展开全文]

voronoifracture节点在houddini17.5中没有cluster选项,cluster选项被划分成了rbdcluster节点,在这个节点里可以找到大部分内容

!!!2020.1.20更新:!!!

rbdcluster节点完全可以删除,没有任何影响,甚至有了这个节点导致接下去的课程无法实现

 

 

 

 

attribute transfer 节点

把第二输入接口转递到第一输入接口

 

explodedview节点,设置基于什么炸开,此案例中设置成基于point才能正确显示

[展开全文]

assemble 封装 SOP  一个智能的数字资产

 

copy to points

右边接口:使用循环中的每个点作为模板点

左边接口:使用“封装的石头”作为拷贝的对象

 

detail表达式

detail(“导航到哪个节点”,“查看哪个参数”,整数index)

本例中:

detail("../iter", "iteration", 0)

 

npoints VEX function:

返回输入进来的点的编号,是个int

npoints(0) :第一个输入接口进来的点的编号

 

group是个string函数,@id表达式中,需要··两个反引号,houdini才知道这里面的表达式需要计算

 

 

floor函数:浮点数取整

本例中blast节点group:@id= `floor(rand(detail("../iter/", "iteration", 0)) * npoints(0))`

 

 

attribrandomize节点:属性随机化,这里插入到进入循环之前,min value改成-1,使得随机程度更大

 

修复每块进入循环的石头的偏移:transform节点,点开+pivot transform;

centroid(哪个输入接口,这个矢量的第几个构成元素)

三个构成元素分别是0,1,2

所以本例中centroid(0, 0)centroid(0, 1)centroid(0, 2) ,可以获取到石头的center数值,然后transform移动*-1数值的移动,就可以使所有石头的轴心在世界原点

 

打包的物体无法使用细分节点,移动assemble节点后破坏了整体的结构,修复方法:for each end节点勾选piece attribute,输入name,name是voronoifracture节点为我们创建的一个面属性

 

matchsaize节点:输入接口1的几何体,和输入接口2的几何体的boundingbox做匹配

[展开全文]

npoints 获取两物个交叉点数

[展开全文]
escc · 2020-01-30 · 01-09-For Loop 0

打湿贴图的特点在于物体被打湿的地方颜色更深,高光更强,这两个特征分别对应两个参数,diffuse和roughness,这两个参数又@color和@rough两个属性的值来控制;   如果在几何体中设置了相关的属性变量,那么这些属性变量会覆盖掉材质中的相关属性变量,比如该案例中设置的颜色,粗糙度,另外包括A通道,阴影等

[展开全文]

地形工具的工作原理是对一个2D的volume进行操作,然后让这个2D的volume和几何体进行置换

 

height field节点是创建了一个2D的volume,并且带两个初始场,height场和mask场,两个场的初始值默认都是0  

 

heightfield_noise的参数和mountain节点的参数差不多,该节点最主要的作用是可以对heightfield形成一个大体的山脉形态。noise layer参数对哪个场进行一个扰乱,同时也是给这个场赋值
 

heightfield distort by noiseheightfieldnoise,节点形成的大体地形都还是横平竖直的的线,这个节点对这些直线做出一个扰乱和扭曲,不要使用默认的参数,调大amplitude和element size,这样底线的线条更加自然好看一些,这个节点拿turbulence拿对比的话,像是turbulence的roughness
 

heightfield layer节点是一个合并节点,把1号输入端和0号输入端输入的数据进行一个合并计算,比如替换,相加,相减,相乘等。layer参数栏表示要进行计算的场,默认是全部,不过一般来说就是height场

 

heightfield erode节点是一个解算节点,会解算出地形的风化程度,这样的地形更贴近真实自然,解算的帧数越多,最后一帧的结果也就越好,一般就把最后一帧缓存出去

[展开全文]

任务20:02-05清理节点网络 课程中,在31分40面 添加remesh细分节点,如果不起作用,就看02-07快到最后添加remesh节点,我分享的笔记。笔记有记载remesh不起作用的原因以及解决办法。

[展开全文]

noise layer参数栏是给指定的场赋值,mask layer参数栏是读取某个场的值,并且与noise layer参数栏指定赋值的场相乘,起到一个遮罩的作用

 

height field layer clean节点,清除layer参数栏指定的场的数值

 

height field mask by feature节点工作原理是通过读取height场的某些特征来对mask场进行赋值

 

height field layer节点,当使用第三个接口进行mask的时候,那么第一个第二个接口连接的信息只在mask有值的区域进行合成,而在mask值为零的地方,保持第一个输入端口不变

mask strength参数,对读取到的mask场的值进行一个倍增

[展开全文]

一.

CEX, CEY, CEZ :The centroid of the input

centroid(surface_node, type):

The centroid is the center of the bounding box of the points, not the average position of the points.

在获取当前对象中心点时,centroid和$CEXYZ是相等的

二.

CTRL+SHIFT+CLICK  撤销参数中的表达式,并获取表达式当前值赋予参数

[展开全文]

heightfield isolatelayer节点,layer to isolate参数孤立某一个场出来; overwrite height,overwrite mask这两个如果被勾选,那么这个被孤立出来的场会替换掉原来的height场,mask场

[展开全文]

这一步操作的目的是要把低地处和建筑物的mask给消除掉

两种方法,都是先通过第三个接口接入一个mask场,这是限定一个范围,所有的合成全部在这个范围内做,这个范围之外的地方保持第一个输入端的数据。   第一种是在限定的范围内自身和自身相减,相减后mask场的值为0;第二种是在限定的范围内,拿第二个输入端去替换掉第一个输入端的数值,恰好第三个输入端mask指定的范围是建筑的形态,而且第二个输入端的在指定的范围内全是空白,这样正好得到一个建筑物的空白地方,  其实第二种方法并不好,要求比较苛刻,不如就直接全部第一种方法来做,只是第二种方法用作参考

[展开全文]

shift+C 把选中的节点清理打包到一个节点里

 

blast节点中group表达式:

@rock =`prim("/..In_Iter/", 0, "rock", 0)`

prim表达式是搜索目标节点里的某个属性,这里是rock属性,编号0的属性(无所谓哪个编号,编号0就行,无论哪个编号,0上就是我们需要的属性),这个属性是个整数属性,所以最后index是0

思路:

将每个石头进入循环,用blast节点单独删除进入循环的石头,余下其他的石头,foreach循环中将每个进入循环的石头不停放大,直到交叉分析intersection analysis节点中point数量>0,就停止放大,这样石头都被放大了一些,与邻居石头之间只有轻微交叉

 

remesh:多边形结构进行重新调整,降低targetedge length参数,来增加石头的细分

 

[展开全文]

lage属性的值是点从树根到树尖的增量

 

这几行表达式是这样的,第一行是使用一个fit函数,根据i@id属性,求出一个i@objectID属性,i@object属性的值在0到50之间(其实只能取到0到49,因为强制取整数并不是四舍五入,而只是单纯的去掉小数部分取整数部分);

第二行是本人自己写的,因为老胡是直接跳过了这一步骤,虽然不会有问题,不过对新手来说不是很好理解,第二行就是创建一个字符串类型s@instancefile属性,给s@instancefile属性赋值,这个就是s@instancefile属性的初始值;

第三行是对s@instancefile属性再进行赋值,会覆盖掉第二行的初始值, sprintf函数是格式化字符串中的某个字符,并将结果返回整个字符串,第一空填要格式化的字符串的值,%s符号替换掉某个字符即是对某个字符做格式化;第二空填要对选定的那个字符做格式化的方式。

 

法线的方向设置成X轴是因为实例化的物体Z轴和点的法线对齐,所以法线设置成(0,0,1)也行

 

height field scatter节点第三个输入端是实例化物

density参数控制撒点的数量;

variability参数栏,控制点的pscale属性,这个不同于平时设置pscale属性,在这里pscale值越大,那么生成的点与点之间的间距越大,点的数量也就越少,这样是防止第三个输入端进来的实例物体有穿插;

keep inconming terrain,不用勾选,勾选会保留地形,大部分时候要的其实就是点而已;
match normals with terrain,勾选之后,点的法线方向会跟随地形的起伏指向,不勾选的话,点的法线方向全部向上


randomize up,randomize yaw两个参数是当match normals with terrain去选的时候,这两个参数可以调节实力物体的随机指向性和随机水平旋转
这两个参数调节之后最终决定的是orient属性的值,当点上同时具备N属性和orient属性的时候,物体进行实例化进行方向对齐的时候会优先考虑orient属性
 

[展开全文]

group+transform节点使得河岸边缘更平整

subdivide+smooth节点更加柔和一下台阶

之后使用wrangle节点来设置水槽:

vector min,max;
getbbox(0, min, max);

float ramp= fit(@P.x,min.x, max.x, 0, 1);
//f@test = ramp;

ramp = chramp("trough", ramp);
@P.y -= (1-ramp) * chf("multiplier");

 

通过trough控制器就可以手动控制水槽形状,multiplier控制器控制水槽深度。

 

添加UV,单平面可以使用uvflatten节点非常快速地添加UV

 

remesh:面数越多,噪波越容易出细节

所以这里在加噪波前是用来remesh节点

 

噪波使用unifiednoise,是因为自带了fractal属性

这里推送了一些VOP的控制选项到上级,方便用户设置。

设置好噪波之后不要忘记用facet节点来重新计算正确的法线。

 

最后用extrudevolume来挤出一个容器,为下章做准备。

[展开全文]

布尔运算相减是这样的,A减B,那么AB相交的部分会消失,被减的B也会消失,反之一样

shatter piexes of A,保留A输入端,B输入端作为辅助切割物,反之一样。布尔破碎需要的是一个完整的模型,如果模型有不连贯的地方,那么碎完之后会出现一些冗余的,突出的面,不过貌似houdini17.5.529的版本修复了这个问题

 

attribute节点都是针对每一个点进行的操作
inside sphere,在一个单位球体内均匀的产生长度小于1,方向随机的向量,除非使用cone angle参数来指定生成的向量方向

 

 

[展开全文]

getbbox(0, string,string)

把第一个输入接口的bbox数据写入后两个string中去

 

removepoint(0, @ptmun)

根据输入接口0,删除@ptnum编号的点

[展开全文]