最不该遗忘的功能RealFlow Expression.docx

上传人:b****1 文档编号:23308473 上传时间:2023-05-16 格式:DOCX 页数:15 大小:556.41KB
下载 相关 举报
最不该遗忘的功能RealFlow Expression.docx_第1页
第1页 / 共15页
最不该遗忘的功能RealFlow Expression.docx_第2页
第2页 / 共15页
最不该遗忘的功能RealFlow Expression.docx_第3页
第3页 / 共15页
最不该遗忘的功能RealFlow Expression.docx_第4页
第4页 / 共15页
最不该遗忘的功能RealFlow Expression.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

最不该遗忘的功能RealFlow Expression.docx

《最不该遗忘的功能RealFlow Expression.docx》由会员分享,可在线阅读,更多相关《最不该遗忘的功能RealFlow Expression.docx(15页珍藏版)》请在冰豆网上搜索。

最不该遗忘的功能RealFlow Expression.docx

最不该遗忘的功能RealFlowExpression

最不该遗忘的功能——RealFlowExpression

2012-06-2817:

32:

04|分类:

RealFlow探索|标签:

realflow翻译python免费教程豆芽兵|字号大中小订阅

说在前面:

这是之前翻译的Realfow帮助文档。

动画曲线那一节,前面对软件的介绍没有放上来,因为那只是简单的操作,大家看一下就会了。

Expression真的非常值得学习,甚至比前面的Python脚本还要值得推荐。

翻译的也是我平常的作风,加了上自己添加的东西,比如对基础知识的回顾。

(其实是我不会

)。

19.04Expressions(表达式)

表达式是最方便的,用来自动制作路径运动或做循环动画的方法。

你曾尝试过塑造一个,完美的正弦波形曲线吗?

如果你的答案是“Yes”,但还留存一些难点。

那么你肯定会喜欢上表达式。

有了它们,你不用考虑关键帧,因为你只需输入相应的函数或公式,就可以立即看到结果。

从理论上讲,表达式曲线可以一直持续下去,因为它会自动计算某一帧的属性值。

你也可以让表达式基于事件(event-base)。

意思就是,你能定义一个特定的条件,触发后能自动切换功能,例如刚体与非刚体切换。

条件可以是一个选定的帧或一个Null对像的位置,甚至用对像的名称。

图片:

表达式控制球体垂直方向运动。

ReaalFlow提供所有通用的函数,如Sine(正弦),Cosine(余弦),Squareroot(平方根),log(对数),tan(正切)等等。

此外它也可以用操作符进行比较运算和简单的计算,例如<,>,(括号)+,(加号)*,(乘号)等。

很容易结合不同的运算符,创建复杂的公式。

表达式是非常灵活多变的。

RealFlow提供了另一种新功能:

让表达式曲线与基于帧的曲线相结合。

尽管两种方法完全不同,但可以混合它们和创建一个融合的曲线。

两者结合后的动画,很多时候非常有用,例如:

当你想添加一些扰动(Noise)到动画上,或创建第二套运动,用更高(high-ranking)的运动。

如果你认为混合这些曲线很复杂,那你就错了!

只需简单的点一下“+”键。

结果完全是一个新的曲线,具有动画和表达式的属性——混合的曲线。

为了让你加深印象,下图显示出了原始的基于关键帧动画曲线——灰色那条。

表达式是一个非常快速和可靠的方法来模仿各种不同的自然行为。

在自然界中,我们很少看到完美的运动与永不消失的力,速度或运动。

因为有各种阻力,随着时间推移肯定会慢慢失去能量。

这种行为可以完美的用表达式模拟出来。

举个例子:

当你在三维软件中打灯光时,经常会用到衰减。

这可以防止光线太强烈,照射到远处的物体,那样看起来就不真实了。

因此,大多数光源下,你通常是能够在预定义的模式中选择限制光强度,常见衰减模式有:

倒数(inverse),反向平方(inverse-square),或反向三次幂法则(inversecubic)。

【译者注:

这几种衰减方法,很值得深入研究一下。

图:

几种有代表性的衰减函数。

另一种方法是用指数函数来做衰减。

模拟的力随着时间的推移而减小。

同样用其它值也可以达到,像摩擦力(friction)或温度(temperature)。

用这些简单的函数是没有问题的。

让确定的属性,在恒定的时间间隔衰减,或基于公式创建完整的运动。

另一个重要的应用领域是随机性(randomness)。

你往往需要一定量的随机性,使模拟变得更加可信。

例如在模拟风时。

首先,确定一个基本的风向,再加些轻微的变化。

看下面:

表达式还有别的的优点:

1.运行更快。

Expressions可以使用所有CPU和核

2.不需要脚本。

如果你不熟悉Python,表达式是更好的选择

3.创建更快。

你不需要debug或写很多行代码,因为表达式只由一行组成。

4.使用标准的数学函数。

基本代数符号,像括号,小三角,所有你需要的。

5.完美的运动。

由于表达式基于数学函数,它们是正确的物理表现生成绝对完美的结果。

6.如果你熟悉脚本或编程,表达式应该非常容易了解。

a.第一步你不需要为创建表达式特别做什么。

首先,你要找一个需要写表达式的参数。

在节点参数窗口选择一个需要设置的值右击,选择“Opencurve”.然后你会看到结点相关的值,但当前没有曲线,因为没有任何关键帧。

在曲线面板下你会看到“+”按钮,一个输入框,和一个插入(Insert)按钮.用“+”你可以很轻松的合并表达式与现有的曲线。

输入框包含表达式,你可以键入所有可用的函数和变量。

一个很重要的问题是时间(time)。

在RealFlow中,时间尺度是用帧或标准时间代码格式。

hh:

mm:

ss(hours:

minutes:

seconds)

默认时间栏在GUI(图形界面)和曲线编辑器中是用的是帧(frame)。

如果你想用时间(time),你要用它的变量形式。

变量——是一个待“填充”的占位符。

帧的变量是“f”,时间是“t”.在表达式中,“f”或“t”代替当前frame/time在时间栏上。

这是自动产生的,所有不需要你去考虑它。

你也能创建表达式基于frame和time.(译者注:

在表达式中把f或t,当成一个内置功能函数)如:

sin(t*10)*f/20

图:

表达式sin(t*10)*f/20的结果

使用基于帧(frame)的曲线有一个很大的特点:

看起来距齿状很重,因为在RealFlow内部,帧(frame)只有整数值。

使用基于时间(time)的,曲线就会变得很平滑。

幸运的是,去除距齿不是很麻烦,只要在表达式上乘上time就可以了。

图:

红——基于frame创建的锯齿状曲线;黄——基于time创建的平滑曲线

表达式不仅限于frame或time。

你也可以使用数字,甚至其它结点的动画属性或参数,例如:

sin(5)

cos(Cube01.rotation_X)

另一个例子:

如你想创建重复上下运动的物体,比如发射器。

你首先要考虑的是有没有与这个任务需求类似的函数。

通过比较各种数学函数,你会看到,正弦或余弦函数是最优的,因为他们已经表明这种波浪状的行为。

正弦曲线更好点,因为它从0.0开始。

像正弦,双曲余弦,平方根等只需要一个参数就能起作用的函数。

称为一元函数。

(译者注:

一元函数是指函数方程式中只包含一个未知量)

接下来你需要的是发射器的垂直位置的曲线。

请注意,这可以是Y或Z轴,根据自己的喜好。

在这里,我们假设Y代表垂直轴。

转到发射器节点的params(参数)面板:

NodeParams>Node>Position>Y

右键单击该值,并选择“Opencurve”。

现在的曲线编辑器中没有曲线或图形,然后在表达式框输入

sin(t)

回车确认,出现一个条曲线。

表达式sin(T)的工作方式:

每一帧的RealFlow计算适当的正弦值,并将其应用于发射器的Y位置。

然而,结果可能不是你预期的。

你可能需要更多的“波峰波谷”?

可以看到的是,只是在当前时间的函数依赖的基本正弦。

简单的操作,你能够创造出密度较高或更广泛的曲线,更高的山峰,正或负的偏移。

--------------------知识回顾----------------------------

下面进入一段基础知识的学习,放松一下,没有兴趣的读者可以跳过。

简谐运动Simpleharmonicmotion(SHM)﹝原名直译简单和谐运动﹞是最基本也最简单的机械振动。

实际上简谐振动就是正弦振动。

如下图:

之前写的sin(t)就是一个简谐运动。

现在我在下面写出它的正弦型函数解析式:

y=Asin(ωx+φ)+h 

这个解析式非常重要。

在写表达式时,依据就是这个方程。

下面给出各个参数的意义

各常数值对函数图像的影响:

φ(初相位):

决定波形与X轴位置关系或横向移动距离(左加右减)

ω:

决定周期(最小正周期T=2π/|ω|)

A:

决定峰值(即纵向拉伸压缩的倍数)

h:

表示波形在Y轴的位置关系或纵向移动距离(上加下减)

为了形像一点,给出一张图..

-------------------------回顾结束-------------------------

这里有几个例子,修改的正弦曲线和结果:

?

sin(t*5),压缩波形在X轴,也就是增大频率(f)

?

sin(t/5),拉伸波形在X轴,也就是减小频率(f)

?

sin(t+5),波形整体往右偏移,也就是相位改变(φ,水平方向)

?

sin(t-5),波形整体往左偏移,也就是相位改变(φ,水平方向)

?

sin(t)+5,波形整体往上偏移,(h,垂直)

?

sin(t)-5,波形整体往下偏移,(h,垂直)

?

sin(t)*5,拉伸波形在Y轴,也就是振幅变大(A)

?

sin(t)/5,压扁波形在Y轴,也就是振幅变小(A)

译者注:

经过上面的例子,你肯定会发现,哇,这些不都是上面知识回顾中讲到的吗。

这些是中学就学过的,但那时根本不知道有什么用。

现在知道了,原来跟我做电影特效有这么大的关系。

它也可以综合起来使用。

任何由单个函数组成的表达式都要遵循数学规则:

(sin(t)+cos(t))/(cos(t)–sin(t))

也就是除数不能是0或根为负数的值。

除和乘优先级比加减高,如果不想这样,就要加括号。

需要两个参数的函数被称作为二元函数,如:

value1+value2或value1

【译者注:

二元函数(binaryfunction)是一种带有两个参数的函数。

这是编程中的定义。

数学上二元函数是这样定义的:

设平面点集D包含于R^2,若按照某对应法则f,D中每一点P(x,y)都有唯一的实数z与之对应,则称f为在D上的二元函数.

造成歧义的原因是数学与计算机中函数用的同一个词:

Function

数学中函数含义(function):

表示每个输入值对应唯一输出值的一种对应关系。

计算机中函数定义:

函数过程中的这些语句用于完成某些有意义的工作——通常是处理文本,控制输入或计算数值。

通过在程序代码中引入函数名称和所需的参数,可在该程序中执行(或称调用)该函数。

简单说就是某种带参数的可输入输出的功能块。

现在你已经输入过表达式了!

关闭或最小化曲线编辑器,从时间轴控制,看到发射器做完美的循环运动。

当然,它也可以创造传统的运动曲线,但很困难。

不要害怕表达式:

只要实验一下,你就会发现它们很灵活,功能强大易于使用。

图:

sin(t)*cos(t*2)在垂直方向的运动路径

b.反函数和负值(InverseFunctionsandNegativeValues)

另一个重要的功能是用倒函数和负值。

你只要简单的应用它们就可以了。

1/x

“X”是变量,或是你想用的功能

反函数往往用来做衰减。

任何有效的功能块或项都可倒,有可能在函数的定义有些差距,因为除数是0.例如,正弦或余弦的逆函数。

正弦90度和270度是0,除数是0,没有意义。

图:

是1/cos(t),图中垂直的尖峰表示某些值未定义

值在90度和270度时快速收敛变得无穷大,变得非常高。

这通常会导致完全不正常的动作或设置。

在使用反函数之前最好先输出看一下。

可以直接在编辑器图形窗口或外部的函数绘图仪。

你会看到值在表达式在导致的问题。

负值是另一个典型的转换函数和表达式。

负值,可以改变一个函数的方向。

看下列项。

5*exp(t)

这是一个不错的函数(其实就是指数函数)。

函数值集中在5到0.它实际上是一个理想的辅助器的表达式,慢慢失去强度或力。

但有一个问题:

这个函数绘出来的图显示了所有值在下面图中。

意味着你有“负”的时间值。

用一个简单的转换,你可以改变方向,使时间值再次变成正值:

5*exp(-t)

这是一个表达式,你可以到达需要的目的。

你可以改变初始因子(此处为5)。

一个因子像-t*x会使曲线变得陡(ifx>1)或平滑(if0

图:

左边显示的函数是5*exp(t),右边曲线代表5*exp(-t).

c.RandomValues(随机值)随机数在模型自然效果时有重要的作用。

没什么是完全的可预见的,真实的效果还有一些轻微的变化。

为此,我们可以用RealFlow内置的随机数发生器。

这个工具实际上和曲线编辑器上其它曲线一样。

你可以创建随机值,基于F和T。

例如:

rnd(f)orrnd(t)

正如你从图看到的,值变得越来越大。

这是随机数的运作模式。

在这种情况下rnd(f)-RealFlow表达式创建随机值在0和f之间,所以随着f增长,结果值就变得越来越大。

如果你简单的输入数字N,范围就在0到N之间,如这个:

表达式像前面的例子一样

Rnd(3.0)

值在0和3之间。

添加随机值给数字创建抖动或振荡效果,例如风或发射器速度值。

这里用Y轴风辅助器表达式:

Wind01.position_Y=42.5+rnd(5)

风场辅助器随机振荡在42.5和47.5度之间。

这是一个45度的平均水平。

因此,我们可以很容易地定义,包括风主方向的细微变化。

一个非常有趣的场应用领域是除了标准的功能和随机值。

然后我们能定义一种基本运动与加上一些随机扰动。

Sin(f*5)+rnd(0.5)

再说一次:

用“+”按钮能添加任何随机功能函数与现有的动画曲线混合。

随机数是一个非常灵活的方法用来创建更加逼真的动态。

随机性可以使模拟有好看的细微变化。

一个真正有效的方法是,与关键帧动画相结合用,“+”按钮。

d.条件(conditions)

另一个有趣的功能是使用“if”条件语句。

用这种方法你能够触发,停止或切换值,设置属性。

“if”功能需要三个参数,在括号里:

if(value1,value2,value3)

第一个值是比较特定条件,例如特定的帧或时间点:

if(f<49,value1,value2)

这意味着,从时间轴达到50帧的时刻,值将切换到value2的。

现在你也可以执行检查用赋值号“=”:

if(t=5.0,value1,value2)

相反,你可以使用从其他对象进行比较的节点值,像这样的:

if(Null01.rotation_X<180,value1,value2)

举个例子:

你想创建一个正弦函数运动用随机数,但75帧属性值变成0.表达式用if语句是没有问题的。

if(f<75,cos(t*5)+rnd

(1),0)

换句话说:

当达到75帧切换函数sin(t*5)+rnd

(1)到0.0.下面有张图描述了这种条件:

图:

条件(f<75,cos(t*5)+rnd

(1),0)告诉Realflow设置值为0在75帧。

另一个有趣的功能是切换刚体动力学。

选择节点的Dynamic参数,打开曲线输入:

if(f<99,0,1)

在Dynamics面板,对应参数编号:

0=No

1=Rigidbody

2=Softbody

如果你想到A)打开Softbodydynamics在100帧,或B)切换rigid,表达式像这样:

A)if(f<99,0,2)

B)if(f<99,1,2)

条件是很简单的,但这很强大可以创建各种切换或触发条件。

最好的办法是一点点试验这个功能,并探讨其可行性。

可以依赖从其他节点的属性,创建复杂的驱动式动画。

e.ComplexFunctions(复杂函数)

表达式还可以包含复杂的公式,由不同的函数组成。

看一下下面的公式:

sin(3*t+exp(t/2))*0.2+sin(3*t-exp(t/1.2))*0.2*exp(t/4)

这个函数是创建一个曲线基本正弦振荡,随时间变得越来越密集。

指数部分创建一个重叠的振动频率和幅度增长。

图:

这个函数的图形

要得到理想的效果,值的范围必须想办法控制。

每一个部分都有特殊的图形。

Sine,cosine,和Exponential函数曲线是一样的。

因子能缩放或更平一点,或更徒一点。

组合不同的函数生成复杂曲线,不容易发现需要的适合值。

试验找出参数因子极限值,避免异常值。

幸运的是,曲线编辑器的工作原理就像示波仪,使得它更容易优化和调整因子。

最好的工作流程是从开始的基本函数开始,一步步添加组合。

1.sin(t+exp(t))

2.sin(t+exp(t))+sin(t-exp(t))

3.sin(t+exp(t))+sin(t-exp(t))*exp(t)

4.sin(3*t+exp(t/2))*0.2+sin(3*t-exp(t/1.2))*0.2*exp(t/4)

这种方法可以帮助你找出其中部分函数的极值。

你可以限制它:

乘或除适当的值。

你唯一需要的注意的是括号,因为它要优先计算。

这当然需要一点时间测试得到适当的值,但几个测试过后,你能得到具有不同功能的范围值。

还有一个好方法执行下列函数。

Insert>Unaryfunctions

正如你看到的表达式是不难使用的。

他们快速自动生成一些动画。

在许多情况下表达式能代替脚本。

表达式是多线程和多核生理的。

最简单的脚本RealFlow都不会使用一个以上的处理器,因为Python是单线程的编程语言。

请记住,这一个限制是Python语言特定的,与RealFlow本身没有关系。

译者心得:

Realflow表达式,是差点被我遗忘的功能。

至从一次接触后就再也离不了它了。

就像Maya的表达式一样。

我最常用的是:

1.条件判断:

如if(f>12,0,1),在大于12帧后,将失去作用。

用在Simulation属性上。

就是说大于12帧后,由Active切换成Inactive

Inactive

(1),active(0),cache

(2).这个属性对应关系是自己试验的。

这个功能用的非常频繁,用来控制多个物体,或根据镜头长度做特效时,需要在某一帧让其失活,之前都是手动关闭.

2.Rnd(x)随机数用的也很多,通常是与关键帧动画结合的,就是那个神奇的“+”号。

可以让我模拟的结果更真实。

3.if(Null01.rotation_X<180,value1,value2)属性驱动,其实属于条件判断中的。

单独提出来原因,就是它能像maya一样把不同的属性可以关联起来。

这是非常非常有用的。

更多的表达式技巧,还需要大家多多亲自实践

如果有错的希望指出来,谢谢。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1