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

6个月零基础到入职

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

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老化率可控制白水粒子在各个状态下的存活时间

[展开全文]

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

[展开全文]

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,不然这些预览的白水粒子也会输出,这样增加了缓存

[展开全文]

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

[展开全文]

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

[展开全文]


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参数栏做一个选择就行,其他一律保持默认

[展开全文]

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子选项卡就行

[展开全文]

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

[展开全文]

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

 

 

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

[展开全文]

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

[展开全文]

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

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

 

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

[展开全文]

gas vortex confinement的工作原理是这样的,添加一个vortexdir场来影响由velocity field参数栏指定的场,一般就是vel场,不需要进行更改。  confinement field参数栏,通过制定一个标量场,来改变vortecdir场的强度

[展开全文]

xyzdist函数,得到0号输入端原点到1号输入端几何体上最近的点的距离,在这里,最近的距离是0,最远的距离由自己设定,再把这个距离fit成1到0,density值乘以这个1到0的数值,density的变化便是离几何体最近的地方最厚,离几何体最远的地方最薄

 

applydata节点是给DOP中object的节点添加额外的数据,这个节点其实不做任何处理,只是一种标准化的流程,在object节点下直接连上SOPscalefield节点也是一样的。

 

因为本案例中的turb control场是在SOP中做成的,要导入DOP中需要使用SOPscalefield节点才能进行导入,use SOP dimension,勾选这个,才能完整导入在SOP中设置的场的大小和数据;default operation参数,set initial表示只导入场的初始状态,set always,如果这个导入的场有动画,那么就需要选择这个。  Date name参数栏,给导入的场命名,当要引用这个场的时候,便是通过这个名字来进行引用

[展开全文]

首先surface是一个SDF,gas SDF to fog是把SDF转换成fog,这个节点有点类似于VDB form polygon节点,把polygon转换成VDB的时候是选择转换成distance VDB还是转换成fog VDB。SDF field参数栏默认指定就是surface,不需要更改(好像没有别的什么场是SDF的),destination field参数栏,意思是把SDF转换成的fog给到哪一个场

 

turbulence的工作原理是这样的,首先检测指定的某一个场,如果检测到这个场的数值大于某个阈值,便对binding选项卡下velocity field参数栏的指定的场进行扰乱,检测的场通过binding选项卡下的density field参数栏指定,扰乱产生的阈值通过turbulence setting选项卡下的influence threshold参数栏决定,通常来说这个值保持默认就好

[展开全文]

DOP import节点,objectmask导入DOP中指定的object物体 ,geometry path参数是导入指定的object物体的子数据,具体需要导入哪一个子数据,在DOP中的geometry spreadsheet面板里面查看选择,本案例中以导入显示数据为例,Geometry/visualization,格式写法就是这样,注意开头字母需要要大写

[展开全文]

xyzdist函数,得到原点到几何体上最近的点的距离,第一空填要查找的对象,第二空填从什么地方开始查找。

 

之所以要把额外的发射源发射的速度设置向上,是因为这样可以使主要发射源发射出来的流体粒子保持在一个一定高度的水位,这样也可以使河床中未被流体粒子覆盖的地方填满

[展开全文]

flip solve节点,particle motion选项卡,apply external force添加标准力,勾上之后,在后面添加的gravity这些力标准力才能起作用;    under resolved particle,某些单个粒子可能因为Particle Radius Scale和Grid Scale的比值而没有参加解算,这个选项就是专门针对这些未参与解算的粒子的一些操作;no detection不对这些未参与解算的粒子做任何处理;detect only只是单纯的对这些未参与解算的粒子加上一个属性;Treat as Ballistic,这个是结合上一个参数force override,通过force override添加的一个外部力影响这些未参与解算的粒子;Use Extrapolated Velocity使用外推流体速度,具体到底是什么速度我并不清楚,不过这样对这些未参与解算的粒子是最好的;kil,直接杀死这些未参与解算的粒子。         collision detection选项,控制流体粒子与其他对象之间碰撞的处理,none,不执行流体粒子与物体的碰撞;Particle,执行流体粒子与碰撞物体的碰撞;Move Outside Collision,当流体粒子穿过了碰撞物才被认定产生了碰撞,这样的碰撞检测很快,但也非常不精确;Kill Unmoveable Particles杀死那些穿过了碰撞物的流体粒子,所以这五样参数都保持默认就好,不需要进行任何调整

 

behavior子选项卡,collide with volume limits,流体框边界被封闭的时候,流体粒子会与流体框产生碰撞;kill outside volume limits,流体框边界打开的时候,流体粒子超出流体框边界会被杀死;use friction and bounce,使用摩擦力和弹力,这样object物体设置的碰撞参数才会起作用;add ID attribute,给流体粒子添加ID属性;age particle,使流体粒子老化;reap particle,杀死年龄大于生命的流体粒子;delete attribute,删除模拟输出中通常不需要的内部属性。    当我们使用popsource作为流体粒子的发射源的时候,其实这整个behavior子选项卡的参数都不需要进行任何调整和改动

 

reseeding子选项卡的作用是,在粒子数下降太低而无法正确表示流体曲面的体素中创建新粒子,并删除体素中过于拥挤的粒子,默认就是开启,也不需要进行调整,保持默认就好,当然使用这个会极大的占用内存,而且开启这个选项之后,流体会永远倾向于一种塌缩的状态,流体的水位高度很难维持在发射源的水位高度

做慢镜头不能开启reseeding,因为reseeding会产生新的粒子,如果做慢动作,新产生的粒子在上一帧是没有参考位置的,这样的慢动作坐下来会出问题

 

separation选项卡会尝试去保证每个流体粒子的间距,但是flipsolve本身就在做这种事情,让流体粒子保持一个间距,有一个流动的状态,只有当粒子出现了极为拥挤的状况下才开启这个选项

 

droplet选项卡的作用是这样的,当水撞击在某个物体上面的时候,溅起了水花,这些水花在半空中会受到空气阻力的作用,会被打散,形成更小的水花,这个选项就是模拟这中效果
Detect Droplets    开启液滴检测
Min Particle Density当粒子密度小于这个值的时候,那么这些粒子视为小液滴,会受到空气阻力的影响,被打散
Max Particle Density当粒子密度大于这个值的时候,这些粒子视为主体流体粒子,不会受到空气阻力的影响
最小粒子密度到最大粒子密度之间的粒子进行插值

Behavior对液滴粒子的处理
  Blend With Fluid当液滴粒子重新加入主体流体粒子的时候,按照Velocity Blend参数中指定的数值,使液滴粒子的速度和主体流体粒子的速度进行混合
  Kill On Detection杀死所有完全液滴的粒子,即密度小于Min Particle Density参数指定数值密度的粒子
  Kill At Fluid杀死所有和主体流体粒子结合的完全液滴粒子,即密度小于Min Particle Density参数指定数值密度的粒子与主体流体粒子融合后会被杀死,不会有液滴粒子的速度和主体流体粒子的速度进行混合
Velocity Blend控制液滴粒子速度和流体粒子速度之间的混合

 

vorticty涡流选项卡,用来模拟现实世界中水的涡流力,一般来说都要开启。并且在后续的渲染中可以利用这个vorticty属性值进行更多细节的渲染

以上都是particlemotion选项卡里面的子选项卡,每一个开启都会极大的占用内存

 

 

volume motion选项卡

smooth surface选项,可以更精确的追踪SDF,给舒缓的流体添加更平缓的表面状态,但是对一些具有比较大的紊乱的模拟,比如瀑布,河流等,效果并不显著,在本案例中关闭,开启后会极大的占用内存

 

solve选项卡,use preconditioner选项,当内存条槽有四条时不需要开启,use openCL,当显卡现存够时开启,能启用显卡加速

[展开全文]

flipsolver节点在底层上是先计算体积,再把数据传递给粒子,所有关于流体的数据全部储存在粒子上面

 

粒子源发射流体粒子时,首先要确保流体粒子的寿命,不能像普通粒子一样消散,然后是要给流体粒子源进行一个差值,使用forward,粒子发射之前就进行差值,差值的模式选择使用粒子源的粒子点,这样保证粒子之间不会有断流

 

flipobject节点的initial选项,相当于流体粒子的发射器,input type参数的作用是定义被导入的SOP几何体如何发射流体粒子。surface SOP,被导入的几何体的表面发射流体粒子(这个选项一般用不上);      particle field,被导入的几何体的每个点上发射流体粒子,本案例正是如此,这种方式的优点在于可以组合具有不同初始条件(速度,质量,密度等)的多种流体,但是当对具有不同初始条件的多种流体进行组合的时候,改变流体的精度模拟的效果会有相对大的改变。如果initialize fluid attribute(该选项只有在particle field模式下才有意义)处于禁用状态时,流体粒子不会在导入的SOP几何体上创建或更改任何属性;        file,可直接从bgeo缓存文件初始化流体模拟,做一个河流模拟的时候进行河流的初始化很有用;     fetch Dop,从指定Dop对象内部生成粒子,这个还不知道有什么样的应用;   narrow band,这是houdini16之后的窄带技术,一两句话说不清楚,具体作用就是减少内存的消耗。     不过 要注意的是,其实所有的流体粒子最好都是通过source节点来发射,不要使用flipobject节点的initial选项来生成。   

[展开全文]

水是粒子和流体的混合计算,关于这一点是之前有过了解,当时我在想,如果说老胡这套河流的教程还是和网上很多别的教程一样使用fluid source这个节点来进行河流的制作我就不打算再看了,老胡的教程真好,从最底层的原理开始讲解,无论houdini哪一次改版,改成什么样,最底层的原理掌握了,就什么都不怕了

[展开全文]