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

6个月零基础到入职

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

copy 节点 类似于c4d的图形变换

copystamp

 

[展开全文]

这节课里边只是添加一个antinoise,还是用vop来做吧,更加简单一些,当然这些操作是对vop中的noise有一个原理性的理解

在wrangle里面写的vex代码其实就是vop里这样的操作

 

这样的操作其实可以用属性传递来做,点云也是可以设置,但是无论是属性传递还是普通点云的设置,在边缘永远是平整的,所以先用一个noise给原来的几何体进行一个扰乱,然后再进行属性的传递或者点云设置属性,然后再把原来的位置给置换回来,这样属性传递的边缘便是一个扭曲的边缘,这个和做破碎的时候,进行边缘扭曲的思路是一样的,不过这里省略了一个返回的步骤,直接拿几何体产生的noise来作为点云查找的位置

[展开全文]

attribute blur属性模糊,如果应用在P属性上,就是使表面更加光滑,本案例应用在N属性上,使法线的方向更加平均,bluring itretions参数,值越大,模糊程度越大

[展开全文]

大体思路是这样的,首先进行三个条件的判断,第一个条件是判断粒子的速度,是否大于某个阈值,第二个条件是粒子的速度方向,速度是否符合某个方向,第三个条件是采样,粒子是否是在之前设置的splash体积内,全部满足这三个条件的粒子,便另外添加一些速度,让这些粒子产生水花

 

 

filename指定是对哪一个体积进行采样,primtivenum,在体积里,density,temperature这些数据是储存在面层级上面的,相应的有编号,假设density数据是编号0,那么默认就是对density数据进行采样,samplepos指定在哪个位置进行采样;volumevalue输出的是在对指定的体积,在指定的某个地方,对指定的体积的某个数据进行采样得到的一个浮点数,如果说当前的体积的这个地方的density数值是1,那么输出的浮点数便是1

[展开全文]

在wrangle中,if的语句形式是这样的
if(condition){
    statement
}
VOP中的if也是这样的,只是外在表现形式更加复杂一点,首先是条件判断,这些所有的条件判断连接在block begin if节点的condition输入端上,然后进行声明,即对某一个或多个变量进行操作,number of outputs参数栏决定有多少个变量在大括号里面进行操作,output name参数栏输入要进行操作的变量名称,同时block end节点的output name参数栏也需要有相对应的名称,变量的值要连接在block begin if节点相对应的输入端

[展开全文]

if(i@splash > -1 && @Frame % 1 == 0){
    i@splash += 1;
}
if(i@splash == 10){
    i@splash == -1;
}

这里表示产生了水花的流体粒子,在经过十帧会重新变成普通的流体粒子。   其实i@splash+1这个操作也可以在vop里做,很简单,去掉那个子if就行,但是因为流体解算会有子帧的计算,i@splash在第一帧会加1,在第一点五帧也会加1,这并不是我们需要的,我们只需要每帧加1就行,所以拿到一个新wangle里做,% 符号代表取余数,帧数除以1,如果帧数是整数,余数都为0,如果有子帧,帧数不是整数,余数就不是0,加上这个判定条件,i@splash的值才是每帧加1

 

if(i@splash > -1){
    v@v *= 0.97;
} else{
    float v_len = length(v@v);
    vector v_dir = normalize(v@v);
    v@v = v_dir * clamp(v_len, 0, chf("max_v_clamp"));
    if(v_len > chf("v_threshold")){
        float drag = fit01(rand(i@id), chf("min_drag"), chf("max_drag"));
        v@v *= drag;
    }
}

头一个if很简单,产生水花的流体粒子每帧的速度乘等一个0.97,其实就是给它添加一个拖拽力;第二个if首先把流体粒子速度给拆分,分别拆分成速度大小和速度方向,然后再合并流体粒子的速度大小和方向,方向保持不变,流体粒子的速度大小前置一下,当流体粒子的速度大小超出某个值的时候,便强制使超出这个值的流体粒子的速度大小等于这个值,作用是防止有四处飞溅的流体粒子;子if里边是说当流体粒子的速度大小超出某个值的时候,便对这些超出这个值的流体粒子施加一个拖拽力

 

 

这是自定义的水花粒子系统,关于这个我是这么理解的,这是非常高级的应用,除非是那种导演要求的特写镜头,不然其实用不到,如果只是单纯的要加水花的话,直接打开flipsolve节点,particlemotion选项卡的droplets子选项卡就行

[展开全文]


particle fluid surface节点surfaceing选项卡,method参数栏,用哪一种方式给流体粒子生成mesh,average postion生成一个表面平滑的mesh,spherical会生成一种表面有圆球体的mesh,不知道这种mesh做什么用的,一般用不上;  particle separation参数,决定mesh的精度,一般和DOP里flipobject节点的particleseparation参数保持一致;  Vorxel scale参数,决定场的体素的大小,拿这个值和particleseparation参数里的值相乘,得到的就是体素的大小;  influence scale参数,决定流体粒子之间相互影响的最大距离,拿这个值和particle separation参数栏里的值相乘,得到的就是流体粒子之间的最大影响距离;  droplet scale参数,决定流体粒子的pscale,流体粒子本身的pscale属性的值和这个值相乘,得到的就是流体粒子的最终pscale的值;  limit refinement iteration,这是一种生成mesh的优化模式,官方文档都不推荐使用;  union compressed fluid surface 参数,因为之前的fluid compress节点对流体粒子进行了优化,删除掉一些中间层的流体粒子,勾选这个参数,会使被删除的那些流体粒子的部分,进行一个自动的插补,这些被压缩的流体粒子形成一个完整的mesh;  erosion scale,因为之前fluid compress节点中有流体粒子被删除,后来进行自动插补,这样的插补可能会导致流体粒子和场之间有缝隙,这个值就是用来消除这些缝隙; 总结一下,这几个参数,除了particle separation参数,这个用来决定mesh精度的参数栏需要修改,其他一律保持默认

 


output 子栏,convert to参数栏,把被压缩过的流体粒子转换成什么,一般来说我们就是需要转换成粒子看一下动态,转换成polygon作为输出;  isovalue,增加这个值会扩大mesh的表面;  adaptivity自动化mesh的精度,比如说一颗石子落入水面,那么激起水花的地方,生成的mesh面数更多,其他没有水花的地方mesh面数更少,不要去动,如果该参数数值过大,生成的mesh根本没法看;  transfer attribute,流体粒子转换成mesh的时候,哪些属性被保留并且转移到mesh上面;  attribute radius参数栏,对于Transfer attributes参数栏中列出的属性的值进行平滑采样时的采样半径,值越大,属性值越平滑,这有点类似于attribute blur这个节点的作用;  attribute sample参数栏,对Transfer attributes参数栏中列出的属性传递到mesh时要采样的点数;剩下的visualize参数不做过多解释了,总结一下,这里只需要对convert to参数栏做一个选择就行,其他一律保持默认

[展开全文]

mask的作用是这样的,比如水流湍急的地方,一般来说细节也很丰富,那么我们需要保留住这些细节,并不需要对这些细节丰富的地方进行平滑。  mask选项里面就是根据哪些属性来对mesh的进行mask,当勾选final smooth选项的mask选项,默认的velocity range的数值范围是0.5到1,表示在速度小于零点五的地方mesh完全受到final smooth的影响,速度大于1 的地方,mesh完全不受final smooth的影响

[展开全文]

删除坐标threshold以下的面 if (@P.y

[展开全文]

attributewrangle节点

 

if(@P.y < chf("threshold")){
    removeprim(0, @primnum, 1); 
}

 

 

dissolve 删除选择/未选择的点

[展开全文]

白水粒子在生成之后是通过读取流体粒子的某些信息而产生运动,这样白水粒子的运动和流体粒子的运动才相互吻合,主要是流体粒子的Detail属性和surface,vel两个场,所以在这里把这些信息单独提取出来,这样的话在解算白水的时候能得到更加快速的反馈

[展开全文]

group

base group

输入3000-8000:2 ^4000-6000

3000-8000的点 一个间隔一个选中,其中4000-6000的点不要

!3000-6000

反选3000-6000以外的所有面

 

[展开全文]

whitewatersource节点的工作原理是这样的,根据流体粒子的一些信息,包括v,vorticity,name属性和所有的detail属性和surface,vel场来生成一个emit场,emit场的值对应在该点出现白水的概率。

 

emission选项卡,limit by depth参数决定白水粒子出现在mesh表面的范围,负值为mesh内部,正值为mesh外部;  Maximum Half-Width参数将尝试激活有计算新值的VDB,用来确保精确读取limit by depth参数设置的深度,一方面也是用来限制激活的体素数,防止资源浪费,保持默认就行;  speed range参数栏,根据流体粒子的速度来产生白水粒子,低于0.5速度的流体粒子不产生白水粒子,高于4速度的流体粒子完全产生白水粒子,中间是一个过度

 

curvature曲率,共享同一条边的点的高低起伏的程度。curvature选项卡,emit from curvature,启用曲面发射白水粒子;  max velocity angle流体粒子的速度与mesh曲面法线之间的角度必须要小于此值,这样才能保证白水粒子只在波浪的前缘产生,保持默认就行; curvature range同speedrange

 

acceleration加速度,流体粒子速度的时间变化率,即流体粒子速度变化比较大的地方

 

vorticity,涡旋,流体粒子的涡旋强度

 

volume选项卡,勾选output volume,会输出流体粒子的surface,vel场,这是不需要输出的;  voxel size决定emit场的resolution,emit场越精细,白水粒子产生的概率越大;  其他选项保持默认就行,因为emit场就是和流体粒子相吻合的,不需要重新去调整emit场的size和位置,更不需要加mask;  surface filtering,如果勾选了output volume,输出了surface场,那么这些选项是对surface场进行一个过滤,既然不输出surface场,这些也不需要调整

 


visualization选项卡只是一个预览,预览根据前面curvature,acceleration,vorticity三个条件生成的白水粒子的预览,最终输出的时候不需要勾选source particle,不然这些预览的白水粒子也会输出,这样增加了缓存

[展开全文]

vector bbox = relbbox(0,@P);
v@Cd = set(bbox.x,bbox.y,bbox.z);

//quick syntax
@group_red = @Cd.x > 0.5;

if(@Cd.y > 0.5){
    @group_green = 1;
}

[展开全文]

我觉得这个没什么太大用,白水解算用到的内存远没有流体解算用到的内存大

[展开全文]

rand(@ptnum) > 0.5

 

@ptnum全局变量 把所有的点循环,rand赋予一个随机值

 

 

rand(@ptnum +-x/ 数字) > 0.5  随机种子 

 

length(@P) < 5

length求矢量长度   @P是矢量

 

 

groupexpression   组表达式

groupcombine    组的结合

(subtraction 减法

intersect  交叉)

 

grouppromote 组的转化

(点组转化成面组)

grouptransfer组的转移  映射

 

VEXpression:   &&和    ||或

[展开全文]

volumesource参数,读取流体粒子的surface和vel场,这样的话,生成的白水粒子才有流体粒子的动态,不然白水粒子是静止不动的

 

import volume导入volumesource参数读取的流体粒子的surface和vel场,这样才能在whitewaterobject节点里面对流体粒子的surface场进行一个可视化,这样有助于在视口中观察白水粒子星对流体的surface生成的位置

 

whitewater scale参数,相当于流体粒子的particle separation参数,就是白水粒子的精度,降低该值可提高白水粒子的数量

 

Voxel size参数,这个参数是foam density场的体素大小,当勾选foam选项卡下边density threshold选项时,foam density场可用于限制泡沫的排放,侵蚀,排斥。该参数至少应该是Whitewater scale参数的两倍

 

foam location参数,白水相对于液体表面的位置,所有关于深度范围的参数都与此参数有关,无需更改其他参数,只单独调该参数,便可以升高或者降低白水粒子,0的话便是紧贴着液体表面,所以保持默认就行

 

depth range参数,该参数控制白水粒子上下的一个间距,在这个间距内计算力和老化率。force选项卡下面的buoyancy by depth,advection by depth,mutiplier by depth和foam选项卡下面的repulsion by depth四张ramp贴图的深度计算是该参数的两倍

 

add state attribute参数,houdini17之后,白水粒子不再是分开来计算,而是把所有的白水粒子放在一个组里面,勾选这个选项后,所有的白水粒子会添加三个属性,bubble,spray,foam,数值是0到1之间,分别代表白水粒子在这三种状态之间的强度。勾上之后结合emission选项卡里面的aging rate老化率可控制白水粒子在各个状态下的存活时间

[展开全文]

size里表达式:

stamp("../copy1", "mycy" , 1 )+1

标记到copy1路径里,mycy属性,1是个默认值,如果找不到这个变量的话,返回这个默认值

 

 

color里R表达式:因为color里是0-1的所以用了fit

fit(stamp("../copy1", "mycy" , 1 ), 0 ,stamp("../copy1", "myncy" , 1 )-1 , 0 ,1)

 

cy是点编号,ncy是点编号总量,这两个LOCAL属性可以直接调用

 

 

USAGE
          fit(<num>, <oldmin>, <oldmax>, <newmin>, <newmax>)

fit:适配函数

 

textport里可用exhelp expression来快速查找帮助使用说明

[展开全文]

rand(point("../In_Singls_Point/", 0, "id", 0) *   )

rand(detail("../iter_boxse/", "iteration", 0))

[展开全文]