最不该遗忘的功能RealFlow Expression.docx
- 文档编号:23308473
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:15
- 大小:556.41KB
最不该遗忘的功能RealFlow Expression.docx
《最不该遗忘的功能RealFlow Expression.docx》由会员分享,可在线阅读,更多相关《最不该遗忘的功能RealFlow Expression.docx(15页珍藏版)》请在冰豆网上搜索。
最不该遗忘的功能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一样把不同的属性可以关联起来。 这是非常非常有用的。 更多的表达式技巧,还需要大家多多亲自实践 如果有错的希望指出来,谢谢。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最不该遗忘的功能RealFlow Expression 最不 遗忘 功能 RealFlow
![提示](https://static.bdocx.com/images/bang_tan.gif)