注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

豆芽兵的生存探索

因,记录。留下历史,看到未来...

 
 
 

日志

 
 

realflow融化方法技术总结(3/3)  

2013-12-01 17:26:02|  分类: RealFlow探索 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索
(这是RF官方展示,我所能找到最好的融化参考了)

realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索

(本文结构图)

一、不同手法制作简要对比:

realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索

 不同手法制作对比:

通过上一篇,对"融化模型"的探索,我们知道了融化的基本思路。

realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索

1.保持初始状态

2.找出合适转换条件

3.处理分离部分

现在看一下不同的案例,找出它们各自,初始状态,转换条件,和如何处理分离部分的。

1.使用有范围的重力做为条件,这也是RF2013帮助自带的案例

初始状态:dumb粒子

转换条件:有范围的重力

分离部分:受重力影响+地面碰撞

realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索

2.使用基本的Y轴做为条件做融化

初始状态:liquid粒子+freeze

转换条件:Y轴向

分离部分:受重力影响+地面碰撞

realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索

3. 比较常见的冻结+法线方式的融化

初始状态:liquid粒子+freeze

转换条件:normal+或者典型的neighbor unfreeze方法

分离部分:受重力影响+地面碰撞

  realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索

这是冻结+相邻粒子的融化

realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索

(当然上面这只是截图,这些都是在youtube或vimeo上找的视频参考,只要你以melt为关键字搜索,很容易找到。)

下图是一些实际案例:通常需要很多元素配合,才会显得好看。并且一定要牢记,做好动态仅仅是一个特效的开始,后面还有材质,灯光渲染合成这些环节。

做特效时不要局限于某一部分,像画画一样要有整体的观念。不然会陷入某一部分,对效率效果都没有好处。

二、保持初始状态

根据观察和实际制作经验。处理融化效果前,先要决定好保持初始物体状态的方法。最常用的方法应该就是使用填充粒子的方法了。当然不要忘记对模型变形的方法。

到底选择什么方法,是根据具体特效需求来定的。

主要有两个标准:1.可以保持初始形态 2.可以根据一定条件变形,又不会影响别的部分

如果你在别的软件制作融化,只要把握住上面两个标准就可以了。、

下面说的主要是填充粒子的方法,都是在realflow中操作。

    2.1 Liquid粒子

简介:

使用liquid粒子填充模型,保持初始状态。

这种粒子有所有流体属性。并且与融化出来的粒子也是同一种类型,在实际制作时会方便很多。

操作:

1.使用直接fill_object emitter填充

2.注意如果不使用freeze方法,那就需要不能让它与重力结点关联。这样才能保持初始状态

3.也不能与融化的那一套粒子互相关联。只要让融化粒子不穿插就可以,如果互相关联,会导致变形。

4.如果使用freeze操作,需要在simulationPre加上这样的脚本冻结全部粒子。

realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索

如果符合条件的粒子,需要同时进行unfreeze,不然粒子是不会受力影响的。

realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索
(freeze粒子脚本)

优点:

1.可以保持非冻结部分的交互

2.有大量属性可以应用。(有最重要的法线Normal属性)

缺点:

通常需要配合freeze冻结函数才能使用

或者原始粒子不与解冻后的粒子交互。第一篇,金属人头就是这么做的。(就是填充的粒子发射器不要与融化的发射器做关联)

注意:

在解算开始时,需要把粒子速度降到最低。

可以使用解算方法

也可以直接使用脚本归零粒子速度

2.2 Dumb粒子

这种类型的粒子完全没有流体的属性。但使用它做为初始状态会有明显的速度优势。

操作:只要把Fill_Object类型切换成 Dumb就可以。它也可以冻结。

优点:

计算速度非常快

使用力进行影响,会产生一定交互性。增加融化真实性。

缺点:

1.没有Normal属性。所以不能与法线的方法进行配合

2.使用力做为分离条件,难以控制(因为这种粒子受力会直接坍陷到一起)

注意:

使用这种粒子填充,一定要注意力的范围,不然原始模型会变型。

应用案例:

1.Realflow2013帮助文档自带融化案例,就是填充的Dumb粒子

2.3 Elastics粒子

弹性粒子,类似于柔体。使用这种方法保持物体初始状态。可以做果冻这种类似物质效果

优点:

1.不需要冻结,也能保持原始状态

可以产生一定交互

可以达到一定弹性效果,做一些特殊案例很有用

缺点:

1.计算速度太慢

2.没dumb粒子一样,具体的属性较少

3.容易产生爆开的粒子

注意:

应用案例:

(粒子像柔体一样,有弹性变形)

realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索

2.4 freeze(冻结)法

freeze 是realflow基本粒子的一个函数。它的作用是,保持粒子当前的位置(position)和速度(velocity).

与unfreeze配对使用。

下图是我制作一个简单的冻结粒子应用。

realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索

我们做融化时,其实就是冻结效果反向效果。一开始需要把全部粒子冻结。然后根据一定条件一点点解冻,这样就可以观察到粒子一点点分离,感觉就是融化效果。

操作:python脚本方法

缺点:

1.对于效果来说,有一个最大问题是,冻结部分粒子不能与解冻粒子交互。

2.这是一个函数。需要写脚本来应用。

因此解算速度会受脚本语言限制,如python只能单核计算。可以使用Graph结点来代替,或者是使用C++

优点:

1.容易控制,并与多种融化条件配合。

2.适用于所有类型粒子。特别是配合liquid使用。

注意:

1. 冻结时把所以粒子速度设置归零。(冻结的粒子是保持冻结时的速度和位置,如果不归零,在解冻后会影响融化动态)

因为冻结是一种特殊保持初始状态的方法,与下面几张都不一样。

应用案例:

1.经典的融化melt脚本

(另一篇博客有详细介绍)

2.肥皂泡破裂案例

3.其它各种应用

Bouns:

1.有一个经典的freeze融化脚本

它的原理是在模拟前冻结粒子(这是为了保持模型初始动态).这脚本首先,在表面找出一个粒子点。然后找出这个粒子相邻粒子,进行排序,一个个unfreeze。unfreeze的粒子会受到重力下落,能产生经典的融化效果,很像金属熔融的感觉。

2.使用破裂的肥皂泡bubble方法,做融化

原理是开始时指定一个粒子,然后搜索周围粒子数,以球形为半径。

因为只计算一个粒子的相邻粒子数,速度会大大提高,

但这个方法,可以指定多个粒子,这样做那种粒子交互的反应就非常的方便。比如做腐蚀

1.经典的freeze融化脚本:http://qqww2334.blog.163.com/blog/static/12036582201272062422560/

2.破裂的肥皂泡:http://qqww2334.blog.163.com/blog/static/120365822011102503910699/

三、 定义分离条件

分离条件的定义,应该是融化效果最核心的一个部分了。

条件有那么多种,最终选择什么,全是根据你的制作需要来定的。有些条件会产生这种效果,有些效果又是另一种。有时还需要组合不同的条件。

全看你的需要来定。

比如:

达到一定速度的粒子,会被看做融化的粒子。这个条件就是速度speed

或法线值大于一定值的,会看做成融化的粒子.这个条件就是粒子法线Normal

或是距离小于一定值的粒子看成融化粒子。这个条件就是distance值

类似这些条件有非常多。

定义分离,意思就是以什么的规则让粒子一点点融化开来。

总的来说有这样几种条件

1.典型属性(如position)

2.相邻粒子数(如neighbor,temperature)

3.流体边界粒子(如normal,distanceField)

4.力的方法(如范围重力场)

3.3.1典型属性

典型属性,包括位移,旋转,缩放这些基本属性。你可以很方便的调用,定义一些分离条件

根据position位置

最简单的,我可以根据Y轴高度 。这样很容易就看到从上往下或从下往上,一点点融化的效果。

realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索

(上图是一个手机广告的融化breakdown截图)

这个是根据粒子的位置做为条件的。你可以直接在Filter Daemon中选择不同轴向的position.

操作:

1.通常直接使用Filter选择position就可以了

2.可以使用Null替代物,获取高度方便控制,本质是一样

3.3.2 相邻粒子数

相邻粒子数,得名于neighbor函数。可以根据给定点不断搜集相应半径范围内的粒子。非常类似一个不断缩放扩大的球体。

但我们不能把思维局限于此,相邻粒子数,本义应该是一种类似于传递的功能,一个接个扩散出去。

neighbor属性

相邻粒子数neighbor函数。

这是PB粒子其中一个属性。就是获取以粒子为球心范围内的粒子,返回一个粒子列表。

这个条件,通常与freeze配合使用。达到一点点获取粒子作用。

下图是一个简单的测试,在球上随即取一个粒子点,然后不断获取周围粒子并直接杀死,产生破裂效果。

如果保留杀死的粒子,那就是一种融化。

realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索

操作:

1.根据id找出一个粒子

2.使用neighbor函数搜索这个粒子半径内粒子

3.这个半径值设置为全局属性,甚至是从某一个null上来获取,可以方便key帧

4.注意,只有同一个发射器或者发射器之间有关联,才能获取相邻粒子数


Bouns:使用这个属性还会有助于你制作一个合理的温度场。因为这也可以看做是一种定义流体边界的方法。

温度就是从外部像内部传递的。

3.3.3流体边界粒子

如何定义流体外部粒子,这很重要。因为融化就是一个典型的由表及里的过程,如果你定义好流体边界粒子,就可以非常容易做出融化。

真实做流体计算时有标记(Maker)粒子和水平集方法。像naiad中有boundary结点可以直接获取到边界层。

因此如果你要做融化,最关键的就是找好边界粒子。下面主要是realflow中的方法。

粒子法线Normal()

法线概念。就是粒子指向流体外部朝向。

越是流体内部的粒子法线值越小。最外部的比较大。如果能找到合适的法线值,典型的融化效果是很好看的。

它的缺点,就是不好缺点法线值。不同resolution值不一样,不同帧不一样。它应该是一个动态的值。

这需要费一点功夫去测试。

判断粒子的法线值,如果大于一定值就让它转移。这是比较方便也比较真实的一种条件。因为真实的融化就是那种一层层脱落感觉。

但如何在realflow中获取适当的法线值是一件不那么方便的事。

下图是使用默认cross模型,填充粒子。模拟到17帧,并且差不多条件融化到相近效果的 Normal值对比。

我没有找到什么规律,下在只是一些经验值。唯一可以确定的是,只要resolution一样,粒子最大normal值是一样的。所以你确认好一个resolution就不要随意更改了。

Resolution:1 <==> Normal:1.3 (这是测试值)

Resolution:5 <==> Normal:0.75(稍微高一点的测试)

Resolution:10 <==> Normal:0.6(大部分效果有这个精度就差不多行了)

Resolution:100 <==> Normal:0.28(比较高的精度了,对融化来讲粒子数这么多足够了。再多也没有视觉意义)

realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索

Bouns:

为了找出合适的Normal值。我写了一个小脚本,帮助自己就是找出粒子最大法线值,然后乘以0.678。差不多就是所需要的值。

上面脚本功能很简单,就是可以找出合适的Normal值。在测试融化前,只要运行一次就可以了,目的就是为了找出一个值。

当然你也可以利用脚本,自动给filter赋予值。

脚本思路:

1.遍历粒子,获取粒子的normal,然后取模,得到normal法线长度

2.把这个长度加到一个列表中,然后计算出最大的长度。

 

也就是处理最表面粒子的法线值。

最后我把这个最大值,乘以0.678差不多就是我需要的融化normal值了。

下面脚本,我加了一个null.position条件。这是为了速度考虑,因为只要搜集最表面的粒子就可以了。并不是搜集的粒子越多越好。

maxSample是为了限制列表的长度。同样也是为了计算速度考虑。

注意:最后得到值也只是一个参考数值,具体是多少还是需要自己测试。

realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索

温度方法

这其实应该是最先考虑到的方法,仔细观察一下生活就应该知道。融化这种效果,其实本质就是温度的变化。但物理归物理,如何把这种思路与CG软件结合起来。

说起来也很简单,就是

定义两种温度:

流体温度(可高,可低)

环境温度(可以为环境,也可以是某一个有范围的物体)

温度在这里的本质,就是某一个通道值的变化,并且是一个标量。

温度如何变化。

可以参考牛顿冷却定律。虽然这是针对理想流体的,但这绝对满足你的要求。

真实的流体温度变化比较复杂。

知道简单的关于温度两点。

温度总是由高到低

温度冷却是呈指数方式衰减

只要知道这两点就可以,不需要研究什么复杂的数学方程。

realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索

HotACold插件是是比较好的温度方法:

它的原理很简单,就是根据一定规则定义一个温度通道,可以根据环境温度,物体温度做一些变化。

还有就是流体的粘度也会根据温度做出相应变化。

realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索

(图片来自vimeo)这想这张图是对温度通道最好的诠释了

Bouns:

下面是对HotAcold插件的参数中文解释。与之类似的还有一个叫Iomelt的插件。它的原理就是先根据这个插件方法定义一个温度,然后把到达一定温度的粒子转移走。

HotACold插件,最重要的一点就是根据neighbor判断流体边界粒子赋予相应值。就是遍历流体,如果某一个粒子的相邻粒子数,小于给定值,就把它看作流体边界的粒子。

参数名称

 

取值范围

中文

Up

朝向

 

定义向量的"方向"。也被用到沸腾(boiling)力的强制流体朝向

Liquid Temperature (LT)

流体温度

>0 (In Kelvin,开尔文) :

初始温度,粒子年龄为0时的温度

Ambient Temperature (AT)

环境温度

>0 (In Kelvin) :

环境温度

Ambient Effect (AE)

环境效果

>=0 :

该值设置,环境温度(AT)对流体边缘粒子影响效果

Ambient Neighbour Limit

环境相邻极限

>=0 :

当粒子相邻粒子数少于这个值,就被看成是流体边缘的粒子。将会受到环境温度影响

Neutral Temperature (FT)

中立值()

>=0 (In Kelvin) :

指定温度,哪部分流体是中立的。低于这个温度,粘度会大幅度增加

Boiling Temperature (BT)

沸腾温度

>=0 (In Kelvin) :

指定流体沸腾。基于这个问题应用一个向上的力。温度越高力越大

Object Effect (OE)

物体影响

>=0 :

该值设置,粒子碰撞到物体上受物体温度的影响。注意:object名称前缀有"_",该值将不会起作用

Mix Factor (MF)

混合系数

MF >=0 :

该值指定,相邻粒子之间温度影响有多高。
T_new = T + MF * T_ave + AE * (AT – T) + OE * (OT – T)
; T : 粒子当前温度
; T_ave : 相邻粒子平均温度,基于距离(distance)
; OT : 碰撞物体温度,如果粒子有碰撞。否则 OT = T
; AT :如果粒子在流体边缘,环境温度。否则 AT = T.

Viscosity Factor (VF)

粘度系数

VF >=0 :

代替或合并,与发射器的标准粘度值。因为发射器的viscosity可以设置为0.这个粘度是计算每粒子级别的,根据温度计算,指数法则函数:
Viscosity = VF * DV^VSF * exp( - TF * ( T – FT ))
; DV 相邻粒子不同速度
; PLF 是粘度指数法则因子
; TF 是粘度温度因子
; T 是当前温度
; FT 冻结温度

Viscosity Temperature Factor(TF)

粘度温度系数

 

指数温度因子,见上面

Viscosity Speed factor (VSF)

粘度速度系数

 

Delta速度指数因子,见上面

Boiling Factor(Strength) (BF)

沸腾强度系数

>=0 :

这个系数定义向上温度的力:
沸腾力不是应用到流体边缘粒子上,那已经由 Ambient Neighbour Limit定义过了
Force = BF * (1 - exp( - BTF * (T – BT )) * UP

Boiling Temperature Factor (BTF)

沸腾温度系数

>=0 :

指数温度因子,见上面。当前沸腾温度,用来增加沸腾不管压力pressure

Allow Freeze below Neutral Temperature

低于FT温度,允许冻结粒子(freeze)

 

Daemon Inactive后,粒子会全部unfreeze.可能冻结时,并不是真正的freeze.经测试,它冻结后还是会继续保持一点点运动,而不是突然停止。感觉是很大粘度的感觉。(感觉错误,其实是因为温度变化关系。粒子还是正常冻结,想多了)

Transfer to Emitter

转移到发射器

  

Target Emitter:

目标发射器

  

Condition

条件

  

Custom Temperature

自定义温度

  

距离场(distance field)方法

粒子与给定点的距离。也可以是给定mesh距离,

就是mesh-distance这样的通道概念。肯定是距离越小粒子越在表面。

你可以根据distance场来定义受力大小。

Distance Field:

realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索

3.3.4力的方法

分离本义就是把整体变成部分。我们在融化模型,与最初始那金属人头案例都是把符合条件的粒子转移到另一个发射器中的。但定义分离条件,不一定是百要把原始发射器中粒子转移到另一个发射器。

虽然大部分时候这么做。因为到另一个发射器中,只是为了方便调节融化后的粒子属性,与原始流体属性区别开,并且还方便后期作mesh啊,分离渲染通道什么的。

分离定义可以更广一点:就是力本身。

因为融化说到底还是一部分一部分的应用力,如果可以直接应用这样的力,不就实现融化的目的了吗。这种方法通常可以配合温度通道,distance通道来实现

力的方法

力这个条件应该是所有上面方法的一个总结 。

力的变化。

可以让需要的部分,粒子先受比较大的力,然后一点点扩散到周围。甚至直接使用一个力的范围框,只要在力的范围中,就定义为需要融化的粒子。

上面所以方法都是要把粒子分离出来,目的也为了使用不同部分受不同的力。

四、处理分离部分

处理分离粒子,就是融化出来的部分。通常只要加上一个重力就可以。你甚至可以把重力反过来。这样可以得到一个简单魔法效果。

realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索

分离后的粒子通常需要与原始部分有碰撞。

所以融化后粒子的状态设置,就是处理分离部分

五、 Python脚本方法

如果要突破软件的限制,使用脚本是一个不错的手段。脚本方法可以综合所有上面的方法。也可以任意搭配条件。

myFilter(自定义分离器)

realflow中,有一个非常方便的daemon filter,可以根据一定条件,把一套发射器中的粒子,分离到另一套发射器。

这个daemon,大部分时候很有用,但它只能同时支持一个条件。

所以你可以需要自己定义一个filter。或者是你把粒子再分离一次。这样粒子之前交互就多了一层。相当于二次分离。做水面泡沫,或者岩浆上面变黑的那一层时,我确认这样做过。

            

定义自己的过滤器。

方法很简单,全代码如下。里面的条件可以任意换

realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索

myForce(自定义力)

一个简单根据年龄,让粒子受到外力的脚本

 

写力的脚本,重力在于两点

1.如何定义力的大小

2.如何定义力的方向

 

这个脚本力的大小就是使用简单的指数衰减形式。方向更简单,就是原始速度方向的一个负方向。

这样就实现了一个阻力的效果。

realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索

realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索
realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索
 粒子会随着年龄受到外力越来越大。最后,是我把这个脚本关闭,粒子全部像水一样流走。

myTemperature(自定义温度)

realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索

这是一个简单的温度场。

1.根据null物体中心点与粒子距离对比

2.使用这个距离使用指数衰减得出力大小

3.温度每时每刻都趋向于一个给定值,物理意义是与环境温度相同。写这个脚本目的就是为了学习HotAcold。当然这里定义的条件没有它多。这个温度场,可以跟力结合起来,这样就得到了一个有变化的力。

HotAcold有一个缺点就是不能手动控制范围,你可以使用这个温度场来任意定义温度范围。

realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索
 效果图
pythont代码
realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索

总结:

最后,说一下,掌握这些技术细节,并不是一个好效果关键工作。

需要看大量参考,通过自己观察。与学习别人艺术化的东西。才能呈现好的效果。

下图是我为了观察融化效果。自己拿打火机烧蜡烛玩。

realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索

(看我烧烧烧

不会告诉你下面绿色液体是我最喜欢的芬达,蓝色液体是英雄墨水。

混合一刹那,再加上蜡烛滴下去,真像魔法师)

realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索
 (大自然永远是最美的,做特效真好玩realflow融化方法技术总结(3/3) - 豆芽兵 - 豆芽兵的生存探索)

本系列其它两篇:
1.序章:五分钟设置一个金属人头融化(1/3)

2.融化通用模型(2/3)

  评论这张
 
阅读(3247)| 评论(9)
推荐

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017