RealFlow 翻译教程02简单的烟文档格式.docx
- 文档编号:21118013
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:9
- 大小:161.30KB
RealFlow 翻译教程02简单的烟文档格式.docx
《RealFlow 翻译教程02简单的烟文档格式.docx》由会员分享,可在线阅读,更多相关《RealFlow 翻译教程02简单的烟文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
这个文件可以直接载入RealFlow。
还可以复制相关脚本,到场景的脚本辅助器(scripteddaemon)中。
非常抱歉给你造成的不便,但有时一些很小的错误,无论你一个人检查多少遍都找不出来。
感谢你的理解。
旋转和漩涡在RealFlow平台是不太容易实现的,大部分要借助第三方工具或三维软件的插件。
当然这些工具运用高度复杂的算法和功能去实现绝对逼真的烟雾,但有时候差不多的效果就足够了,例如远处的烟雾或预渲染时。
这个免费教程是非常基础的,但也是非常快的方法做到烟雾上升效果。
您将了解如何使用基础方程,把它们放入一个脚本,创建卷曲/紊乱的粒子。
这个简短的讨论,实际就是像你在玩一样,你可以添加自己的拓展,获得更自然的结果,因为本身这种方法有限制。
尽管方法有所局限,却是简单有效的能达到好的效果的方法。
作为一个辅助效果,你将学习到关于流体一些有趣的东西。
在右边的第一个视频向你展示了流体模拟形成蘑菇云形的烟。
第二个视频是一个特写,你可以清楚的看到粒子如何固定在一个路径,并创建涡流的。
展示出你的作品
当然一个教程只能是一种解决问题的方法,我们希望你多调调参数,力和动画曲线,并展示出你的实现方法。
我们对你作的成果很感兴趣,你可以在网站上发静帧或给我们视频链接。
------------------------------------------------------------------上面是原网站简介----------------------------------------------------------------------------
漩涡
RealFlow能处理多种模拟任务:
流体,刚体和柔体,波浪,风格化流体。
用这些工具几乎能完成所有的任务,但仍有一种不行:
气态液体(gaseousfluids)
当然没有必要用复杂的计算写一个基于Python的烟雾解算器。
另外最常见的方法已经被申请成专利了。
(例如J.Stam’s“StableFluids”流体静力学)所以,如果你要编写一个商业烟雾解算器,你必须开发自己的方法,那是一件非常困难的事。
此外一切都要适应RealFlow本身,比方说,特色。
图1.RF_toolfactoryVortexFlow插件基于密度的烟雾模拟。
当你看一下模拟的烟雾时,我会发现两个重要的事。
1.烟雾上升是由于浮力
2.有大的涡流还有小的涡流(紊乱、卷边)
产生小的紊乱和卷边方法,称为(涡流限制VorticityConfinement)。
这个技术引入速度(velocity)在某些领域,创建小的速度随机。
涡流限制(vorticityConfinement)实际上增加了烟雾的真实感,使一切变得自然。
然而在许多情况下,是不需要这么多细节的。
例如缩放很大的烟流(烟羽),或远处的烟雾源。
问题是,要做大的涡流是非常困难的使用RealFlow标准流体解算器。
所提出的方法实在是很基础的,只达到近似级水准,但你在使用这方法时可能会找到一个新的方法来拓展脚本,去达到更好的效果。
真正工作使用时,一定要经过试验,脚本对错误是非常敏感的。
因此,本教程实际上是快速的方法提示,而不是全面详细的讨论。
但也许你会觉得很有意思,看看你可以用这个方法获得什么。
准备
主要的困难是,迫使流体粒子沿着圆圈发射器路径运动,像升起的烟雾。
实现这种行为的方法或公式是一定要引入Python脚本。
一个好主意是在互联网上搜索,你很快就会发现两种基本方法:
层流(laminar)和湍流(turbulentflow)
在层流流体下在某一个方向没有湍流,可以在水管或通道观察到这样的行为。
湍流是非常难以描述的,因为流体看起来没有一个确定方向。
在湍流中你能看到漩涡和不同方向的流动。
层流和湍流之间有这样一个关系:
超过一定标准时,层流可以变成湍流。
这个标准就是的雷诺数(Reynoldsnumbe)。
在漏斗,狭窄的管道或障碍物里面的流体可以看到,这两种状态之间的转换。
层流
这种方法将要使用的公式被称为“Stokes定律”。
这个术语,用来描述流体中球形体(粒子)的摩擦力。
这力的大小也取决于粒子半径和流体粘度。
跟其它任何摩擦力一样,Stoke力导致body/particel减速。
在我们例子中,力作用在周围流体。
Fs=6∏ηRv
Fs是Stokes力,∏是pi,η('
Eta'
)是流体动力学粘度。
R是粒子半径,v是速度。
这个方法优点,RealFlow可以提供所有必要参数给这个公式。
这个思路是创建一个层流的力场抵消流体的上升运动来减速粒子。
另一方面,粒子的浮力使流体上升。
这上升流体在层流力场影响下会减缓粒子。
这意味着,必须作用在粒子云外面。
为得到粘稠的效果必须要有很高的粘度值(viscosity)。
这也将减慢整个粒子流,当粒子流累积在流体前面。
因为动力学粘度值1是水20°
C时,它可以被忽略掉。
但你能模拟不同流体。
为什么最终是负的力,是为了抵消了上升粒子流:
Fs=-6∏ηRv
图2:
层流(laminarflow)说明
引入负号,因为这力能抵消粒子向上运动。
最终,我们得计算粒子半径R。
当你参考RealFlow手册时,会看在发射器"
Resolution"
参数下看到这个半径公式。
这正是我们需要的:
湍流(TURBULENTFLOW)
思考湍流时你会遇到一个困难。
当流体在障碍物周围,物体后面就会产生低压区。
在前面有高一点的压力。
这不同的压力就是流体的阻力,这力可以被表达成:
Cw是阻力系数,A是障碍物横截面。
因为我们可以把流体粒子看作一个个小球体,Cw值是0.45,A就是简单的圆面积:
∏R2(译者注:
原文应该写错了)
图3:
湍流图例
尽管这个公式能产生一种力,但仅是一方面,并不能产生湍流。
仅仅是流体经过时的力(fluidexperiences不知道合适怎么说)。
要找到层流变成湍流时间点,雷诺系数(Reynoldsnumber)(后面写为Re)是很重要的。
定义Re不是隐藏的,可从RealFlow标准参数来计算,但这仅仅是达到实际效果并不能正确描述湍流物理现像。
湍流和卷曲需要一个更加复杂的方法,基于从Navier-Stokes方程的向量场。
这各种物理性质的向量场,通常存储成网格(grid)。
这是“基于网格的流体”一词的由来。
(gridbasedfluids)
RealFlow湍流参数
RealFlow的标准粒子提供了湍流参数,但这不是自定义的值,是SPH(译者注:
SmoothedParticleHydrodynamics)流体内部参数。
用脚本可以写成矢量格式:
ω=Vector.new(ωx,ωy,ωz)
脚本
对于此脚本,要使用RealFlow辅助器,因为它是一种特殊功能,可以给粒子施加外部力给网格流体或物体,这是方法很稳定,可放心使用。
脚本辅助器可以这样添加:
Edit>
Add>
Daemons>
Scripted
辅助器结点面板提供了"
Edit"
功能。
请注意脚本窗口模式。
这意味着,你必须关闭此窗口再次访问底层的RealFlow面板。
这实在是烦人,但不能改变。
为了使一切更方便,你也可能添加一个小型的GUI(图形用户界面)。
关于这部分更多说明请参看,RF脚本那本书,GUI部分。
如果你要创建GUI,请创建成BatchScript.如果你要加在辅助器”defonSimulationBegin"
部分,RealFlow可能会崩溃。
#--------------------------------------------------
#Function:
applyForceToEmitter
#Thisfunctioniscalledbythesimulationengine
#whenexternalforcesshouldbeappliedtothe
#particlesintheemitter.
importmath
importrandom
defapplyForceToEmitter(emitter):
normalThreshold=0.85
emitterRes=emitter.getParameter("
)
pRad=1/((1000*emitterRes)**(1/3))
dynVisc=1.0#thisisnotRF’sViscosityvalue!
particle=emitter.getFirstParticle()
while(particle):
pVel=particle.getVelocity().module()
pNormal=particle.getNormal().module()
rndRange=random.uniform(-0.02,0.02)
if(pNormal>
=nornmalThreshold+rndRange):
stokesForce=-6*math.pi*pVel*pRad*dynVisc
if(scene.getAxisSetup()==AXIS_SETUP_YXZ):
vortexVec=Vector.new(0,stokesForce,0)
else:
vortexVec=Vector.new(0,0,stokesForce)
particle.setExternalForce(vortexVec)
particle=particle.getNextParticle()
这个脚本是非常简单的。
在第一部分,粒子半径取自发射器的“Resolution"
.然后脚本遍历所有粒子,读出单个速度矢量。
使用的X,Y和Z单独的值,而不是矢量的大小
这是计算“module()”语句。
这个方程是:
magnitude=sqrt(x2+y2+z2)
这个方程(module())结果是标量(仅仅是数字),不是由三个值组成的矢量。
这个操作的原因是矢量不能作为检查条件来判断是否满足条件。
但用浮点数字就不存在这个问题。
相同的过程(向量->
模->
标量)是适用于粒子的正常方向。
这个方法必须要找出外面流体,法线模长(normal’smagnitude)是这脚本最重要和最敏感的值(见参数的调节)。
所以脚本仅仅决定粒子在流体外面,力(=阻力)将接受场景设置。
为了变得更丰富一点,加一点随机值到法线的模(normal’smagnitude)。
参数调节
正如所提到的,主要思路是,减缓流体外部粒子。
内部粒子仍然保持初始速度,和拖缓粒子速度。
由于粘度(也称为内部摩擦力),整个流体最终会放慢,粒子的聚集在流体的头部。
图4:
相互影响的不同力,最终创建上升的烟雾
上面图片说明的方法:
Stoke力Fs减缓流体外部粒子。
浮力Fb作用在所有粒子上,产生了一个吸引力,使粒子向下。
在这个边界可以看到涡流
想得到这个效果,必须标志出流体粒子的外面,这是为了检查法线。
越接近流体粒子外部法线就越大。
问题是这个值,发射器resolution值越高,它就减小。
用“Resolution”值为1.0,"
normalThreshold“变量可以是1.5或更大。
用非常高的设置,是0.5或更小。
不幸的是不能为每个resolution设置一个固定的值,因为粒子数和法线长度关系不是线性的。
意思是你要测试和试不同的值
羽流的质量取决于法线阈值(normalthreshold)
图5.一个上升烟的模拟
这已经调整的“normalThreshold”0.85,circle发射器缩放是(0.5,0.5,0.5),Resolution值是4.0,Speed是2.0
另一个重要的值是发射器的“Viscosity”参数。
如果它太小,那么效果不能完全体现出来。
能达到最好的效果设置值在4.0与6.0之间。
如果有逃逸的粒子,可以加一个"
kVolume"
场,或放一个盒子在发射器附近。
另一个可能是增加“minsubsteps”(这值对逃逸粒子有很大影响)
最后注意
请记住,这个方法产生的烟雾效果方向,只是在发射器指向上,因为没有支持的力,没有浮力或其它效果。
这结果可被看做一个假的涡流,有些可以在层流里看到。
模拟速度非常快,几乎和直接执行一样,如果没有别的辅助器。
还要记住,不要加上“Gravity”,因为它会抵消流体向上趋势还会导致模拟不稳定。
一句话总结:
层流和湍流,我要理解好
“Fs”还有“R”,都有公式来对付
它们啊,加入RF,那就是脚本,
小烟诶,阈值调调就出来
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- RealFlow 翻译教程02简单的烟 翻译 教程 02 简单