朱峰社区评论:大家好,欢迎在朱峰社区学习,今天我们介绍一下UDK的曲线编辑器的使用和物理约束的参考。希望大家学过后能很好的应用到制作中。
介绍
UnrealEnginge3(虚幻引擎3)利用其曲线编辑器,实现对适时修改属性的精确控制。它当前应用于Matinee?和Cascade工具中。
概况
下图是正在运行的曲线编辑器截图:
| 1 | 使窗口符合轨迹的可视部分的宽度 |
| 2 | 使窗口符合轨迹的可视部分的高度 |
| 3 | 平移/编辑模式 |
| 4 | 缩放模式 |
| 5 | 自生成曲线模式 |
| 6 | 用户设置曲线模式 |
| 7 | 曲线切断模式(拐角) |
| 8 | 线性模式 |
| 9 | 常数值模式 |
| 10 | 曲线名称 |
| 11 | 显示/隐藏曲线按钮 |
| 12 | 曲线切线控制柄 |
控件
曲线编辑器使用的控件与UnrealEnginge3(虚幻引擎3)中其他工具相似:
在平移/编辑模式下:
| Click-drag on background(点击拖动背景) | 平移查看 |
| Mouse wheel(鼠标滑轮) | 放大和缩小 |
| Click on key(点击按键) | 选择点 |
| Ctrl-click on point(Ctrl-点击点) | 点的选中与否 |
| Ctrl-click on curve(Ctrl-点击曲线) | 在点击处添加新的关键点 |
| Ctrl-drag(Ctrl-拖动) | 移动当前选择 |
| Ctrl-Alt-drag(Ctrl-Alt-拖动) | 方框选择 |
| Ctrl-Alt-Shift-drag(Ctrl-Alt-Shift-拖动) | 方框选择(添加至当前选择) |
| Delete(删除) | 删除已选定的点 |
| Ctrl-Z | 取消 |
| Ctrl-Y | 重做 |
| Z | 进入缩放模式 |
在缩放模式下:
| Left-click, drag vertically(左击,垂直拖动) | 缩放Y轴 (输出) |
| Right-click, drag horizontally(右击,水平拖动) | 缩放X轴 (输入) |
注: 并非所有使用曲线编辑器的工具均可支持Undo/Redo(取消/重做)。
插值模式
插值模式按钮(在示意图中的编号为5至9)控制着曲线上每一点抵达另一点所使用的方法。如果您选用一种曲线模式(自动、用户或折断),那么您将会发现白色控制柄(在示意图中的编号为12),您可以点击拖动,帮助更好地控制点与点之间的曲线。如果您选择自动曲线模式下的一个按键,并利用白色控制柄(编号12)调节其切线,它将自动转换为手动曲线模式。
曲线编辑器预置曲线
曲线编辑器现在支持预置曲线——一组简易的自动生成曲或是保存和重新使用用户创建的曲线。
注: 值得注意的是预置曲线仅仅提供一个在CurveEditor(曲线编辑器)中可用的曲线模板。它们解决了反复创建相同曲线的问题,有效地节约了时间。CurveEdPresetCurve(曲线编辑器预置曲线)是一种简易的储存器对象,用于存储与用户所存的预置曲线相关的数据。它们不能“共享”不同对象间的曲线。
使用自动生成曲线
为了使用由引擎提供的自动生成曲线,仅需右击您希望添加到曲线编辑器左栏中的曲线,并选择“Preset Curves(预置曲线)”,将显示下列对话框,含有按照曲线显示的分配类型而启动的可选子曲线:
图1:预置曲线对话框
在预置下拉组合框中,可选择下列选项:
- Do Not Preset(不作预置)——让曲线保持现状。
- Cos Wave(余弦波)——生成一条用时间(水平)值作为余弦函数(垂直数值)输入的曲线。
- Sine Wave(正弦波)——生成一条用时间(水平)值作为正弦函数(垂直数值)输入的曲线。
- Linear Decay(线性衰减)——生成一条曲线,具有线性衰减功能。
- User-Set(用户设置)——允许加载和使用先前保存的用户设置曲线。
选定Cos Wave(余弦波)或Sine Wave(正弦波)预置后,将显示下列设置参数:
- Frequency(频率)——在一定时间内的波频(目前限定为 [0.0..1.0])。
- Scale(比例)——按照该比率系数,成倍缩放已计算出的数值。允许调整曲线尺寸,满足用户需求。
- Offset(偏移)——与相关数值(比例缩放后)相对应的偏移。这将确保所有数值均为正值,等等。
下图显示了一个频率为2.0,比例为0.5,偏移为1.0的Cos Wave(余弦波)。
[next]图2: 一个生成的Cos Wave(余弦波)实例
选定Linear Decay预置后,将显示下列设置参数:
- StartDecay - 开始衰减的时间。
- StartValue - 曲线起始点的数值。
- EndDecay - 停止衰减的时间。
- EndValue - 终止衰减处的数值。
下图显示了一个StartDecay为0.2,StartValue为0.9,EndDecay为0.8且EndValue为0.25的Linear Decay(线性衰减):
图3: 一个生成的Linear Decay(线性衰减)实例
注意此情况下的曲线需要一些调整。默认情况下,所有自动生成的曲线采用AutoSet(自动设置)曲线插值方法。在Linear Decay(线性衰减)的情况下,选点并设置插值的方法将“修正”这条曲线。
用户设置曲线
为了使用用户设置曲线,您必须首先在一个数据包中创建一个CurveEdPresetCurve(曲线编辑器预置曲线)实例。右击综合浏览器,并选择“New CurveEdPresetCurve(新建曲线编辑器预置曲线)”,即可完成该操作。您可以根据自己的喜好来为曲线命名,但在当时不得使用。否则,该对象将不会公开显示任何参数。
完成上述操作后,右击您希望在曲线编辑器左栏中保存的曲线标签,并选择“Save Preset Curve(保存预置曲线)”,即可将一条曲线保存到这个对象中。它还会打开PresetCurve(预置曲线)对话框,但此时,仅有下列可用选项:
- Do Not Preset(不作预置) ** 不保存这条曲线。
- User-Set(用户设置) ** 保存这条曲线。
选定用户设置后,将显示下列对话框:
图4:用户设置属性窗口
在您希望保存曲线的综合浏览器中,选择相关曲线,点击属性窗口上的“Use Current Object(使用当前对象)”按钮。点击OK按钮,您将会把这条曲线保存到已选定曲线对象的目录中。
现在用户可以通过选择用户设置(User-Set)选项,并从综合浏览器中选择要使用的曲线来使用这条预置曲线了。
使用说明1:有时,您通过预置组合框中的鼠标点击来选择一条选项时,它并未正确更新对话框。出现这种情况时,仅需选择组合框,使用上行和下行箭头,选择一个预置曲线选项。
使用说明2:目前,预置曲线还不适用于VectorUniformCurve(矢量平均曲线)分部。这个问题将会尽快修正。
[next]好了,关于曲线编辑器的使用内容就到这了,我们来学习下面的内容,物理约束参考。
物理约束的参考我们主要从概况,设置,示例来介绍。
概况
约束实际上是关节的另一个名称。它使您能够将两个刚性物体连接在一起,并应用限制或者力。虚幻引擎3有非常灵活的数据驱动约束系统,允许设计者简单地更改一些选项就可以制作许多不同类型的关节。该引擎有一些默认的关节类型(球窝、hinge(铰链)、Prismatic(棱柱))而它们仅仅在设置上有所不同。您应该可以从任意类型的关节入手,通过设置自己的配置进行实验。
共享的及每个实例设置
这些设置被分为2部分——某个关节的所有实例所共享的设置,以及特别针对各个实例的设置。例如,一个关节限制对该关节的所有实例都是相同的,但是在各个实例中各种运动设置不尽相同。共享属性被存储在RB_ConstraintSetup对象中,而每个实例的属性被存储在RB_ConstraintInstance对象中。在PhAT中您可以通过按下键盘上的“I”键(或者按下工具栏上的“i”按钮)选定关节,在这些设置间切换。
硬度及阻尼
您可在约束中的几处设置一个“硬度”与“阻尼”参数以控制弹簧行为。您可以在一个由弹簧与油缸活塞制成的汽车悬架环境中考虑这些设置。弹簧控制力量产生的大小,将物体带回其默认位置或者平衡位置;而阻尼就像用于阻碍任意运动的油。如果您有硬度而没有阻尼,那么运动将前后摆动且从不停止。如果您将阻尼设置得很大,会花费很长时间到达平衡状态。
RB_ConstraintSetup
总体设置
| ConstraintBone1 | 在一个PhysicsAsset(物理资源)中,关节应该连接的第一块骨骼的名称。 |
| ConstraintBone2 | 在一个PhysicsAsset(物理资源)中,关节应该连接的第二块骨骼的名称。 |
线性设置
有3个LinearSetup(线性设置)结构——分别对着X,Y与Z方向。每个都有如下设置
| bLimited | 是否对此程度的自由度存在限制。如果为假,线性运动没有丝毫限制。 |
| LimitSize | 如果bLimited为真,在此方向上允许的运动量。将此设置为0会完全“锁定”此自由度 。 |
注意线性限制实际上是球状的——所以如果方向没有被限制为0(“锁定的”)那么它将使用最大的3 LimitSize值。所以如果X为0,Y为10且Z为20,它将被限制在在YZ平面上一个半径为20的圆内。如果X为0,Y为0且Z为20,它将被限制在沿着Z轴从+20到–20的线段上。
[next]| bLinearLimitSoft | 默认情况下线性约束是“hard(硬)”。如果您将此设置为真,它们将被作为弹簧性的处理,而您可以“推”进它们内部。 |
| LinearLimitStiffness | 如果bLinearLimitSoft为真,它控制限制弹簧的硬度。 |
| LinearLimitDamping | 如果bLinearLimitSoft为真,它控制限制弹簧的阻尼。 |
| bLinearBreakable | 如果为真,通过在关节上作用一个线性力,该关节会损坏(主要将关节拉断)。 |
| LinearBreakThreshold | 如果bLinearBreakable为真,这就是破坏关节所需要的力。 |
角度设置
关节的角度部分在条件“swing(摆动)”与“twist(扭曲)”中指定。您可以认为摆动是沿X轴的圆锥体,而twist(扭曲)是绕该轴的旋转。在UE3中,锥形约束由两个角度描述,因此可以是一个椭圆锥体。
| bSwingLimited | 如果为真,两个体之间的夹角为一个圆锥体。 |
| bTwistLimited | 如果为真,两个体之间的twist(扭曲)被限制。 |
| bSwingLimitSoft | 默认情况下摆动锥的限制为“硬”。如果此被设置为真,它变为弹簧性且能被推入。 |
| bTwistLimitSoft | 默认情况下twist(扭曲)限制为“硬”。它变为弹簧性且能被推入。 |
| Swing1LimitAngle | 用角度定义摆动限制锥的一维。 |
| Swing2LimitAngle | 用角度定义摆动限制锥的另一维。 |
| TwistLimitAngle | 定义在两个受约束体之间允许的twist(扭曲)的数量。 |
| SwingLimitStiffness | 如果bSwingLimitSoft为真,它控制锥体的硬度 。 |
| SwingLimitDamping | 如果bSwingLimitSoft为真,它控制锥体的阻尼。 |
| TwistLimitStiffness | 如果bTwistLimitSoft为真,它控制twist(扭曲)限制的硬度。 |
| TwistLimitDamping | 如果bTwistLimitSoft为真,它控制twist(扭曲)限制的阻尼。 |
| bAngularBreakable | 如果为真,在其上作用扭矩时候,此关节可以被破坏(主要扭断关节)。 |
| AngularBreakThreshold | 如果bAngularBreakable为真,这就是破坏关节所需要的扭矩。 |
滑轮设置
滑轮是一种特殊的关节,如同一个体上的某一点通过绳索连接到另一个体上的一点,而该绳索在空间上也穿过这两个点。当使用这种关节时,大部分其它关节设置将没有效果。
| bIsPulley | 如果为真,该关节将被作为滑轮类型处理。 |
| bMaintainMinDistance | 如果为真,在“rope(绳索)”中不允许有“slack(松弛)”,它们反而有点像支杆那样别处理,所以您可以推上一个物体而另一个将被推下。 |
| PulleyRatio | 滑轮上的齿轮传动比。如果它不为1.0,拉一端将会导致另一端运动较少,但是力量更多。 |
RB_ConstraintInstance
速度及位置驱动
虚幻引擎3提供2种方法驱动一个关节——位置及速度驱动。位置驱动的作用力像弹簧,在此关节试图使用您指定的硬度及阻尼属性到达一个给定位置。速度的作用如同一个马达,在此您指定您想要的速度以及用于达到此速度的最大的力。
线性设置
| bLinearXPositionDrive | 在线性X轴上允许位置驱动。 |
| bLinearXVelocityDrive | 在线性X轴上允许速度驱动。 |
| bLinearYPositionDrive | 在线性Y轴上允许位置驱动。 |
| bLinearYVelocityDrive | 在线性Y轴上允许速度驱动。 |
| bLinearZPositionDrive | 在线性Z轴上允许位置驱动。 |
| bLinearZVelocityDrive | 在线性Z轴上允许速度驱动。 |
| LinearPositionTarget | 如果允许线性位置驱动,这是关节试图达到的目标相对位置。 |
| LinearVelocityTarget | 如果允许线性速度驱动,这是关节试图达到的目标相对速度。 |
| LinearDriveSpring | 如果线性位置驱动被激活,这是驱动弹簧的硬度。 |
| LinearDriveDamping | 如果线性位置驱动被激活,这是驱动弹簧的阻尼。 |
| LinearDriveForceLimit | 如果线性速度驱动被允许,这是用于获得LinearVelocityTarget的最大的力。 |
角度设置
| bSwingPositionDrive | 在摆动轴上允许位置驱动。 |
| bSwingVelocityDrive | 在摆动轴上允许速度驱动。 |
| bTwistPositionDrive | 围绕twist(扭曲)轴允许位置驱动。 |
| bTwistVelocityDrive | 围绕twist(扭曲)轴允许速度驱动。 |
| bAngularSlerpDrive | 高级选项。指定将驱动作用于关节的方法。 |
| AngularPositionTarget | 如果角度位置驱动被激活,这是关节试图达到的目标相关四元数。 |
| AngularVelocityTarget | 如果角度速度驱动被激活,这是关节试图达到的目标相对角速度。 |
| AngularDriveSpring | 如果角度位置驱动被激活,这是驱动弹簧的硬度。 |
| AngularDriveDamping | 如果角度位置驱动被激活,这是驱动弹簧的阻尼。 |
| AngularDriveForceLimit | 如果角度速度驱动被激活,这是用于获得AngularVelocityTarget的最大扭矩。 |
示例
球窝
球窝结合是一种简单的关节,它所有的线性部分被锁定且所有角度部分都是自由的。
Hinge(铰链)
与球窝结合一样,一个hinge(铰链)的所有线性部分是锁定的,但是其摆动部分也被锁定,故它能绕着它的twist(扭曲)轴旋转。
Prismatic(棱柱)
Prismatic(棱柱)关节3个线性自由度中有2个被锁定,且其所有角度自由度也被锁定。这允许沿着一个“轨道”滑动但不能旋转。
关节摩擦
您可以使用驱动设置模拟关节摩擦。打开目标速度为零的速度驱动,并使用LinearDriveForceLimit与AngularDriveForceLimit设置控制该关节阻碍运动的强度。
“Punchbag(沙袋)”
您应该首先创建一个球窝关节,用一个关节来模拟像Punchbag(沙袋)的东西(一个球位于垂直杆顶部,该垂直杆可以被敲击)。然后打开swing(摆动)位置驱动并调节AngularDriveSpring与AngularDriveDamping,直到被推动时顺利底绕着垂直位置摆动。您可以设置摆动限制,以确保它不会过度弯曲。
评论