1. Pendulum 1.1 周期公式 1.2 摆钟 1.3 航海钟 1.4 秒摆和米 2. 使用Blender模拟摆运动 2.1 秒摆-简单驱动器 2.2 摆动画-曲线编辑器 2.3 有点粗糙的关键帧模拟 2.4 其他可用Blender的物理特性模拟 3. 秒摆-驱动器进阶 3.1 带变量的驱动器公式 3.2 设置变量 fps 3.3 设置变量 length 3.4 设置变量 amp 3.5 摆插件
1. Pendulum
摆是一种实验仪器,可用来展现种种力学现象。最基本的摆由一条绳或竿,和一个锤组成。
锤系在绳的下方,绳的另一端固定。当推动摆时,锤来回移动。摆可以作一个计时器。
1.1 周期公式
摆的周期随着振幅θ₀(摆动的宽度)的增加而变长。
单摆的摆动周期取决于其长度、当地重力强度,以及摆锤偏离垂直方向的最大角度θ₀(称为振幅)。 它与摆锤的质量无关。
如果振幅被限制在较小的摆动范围内。角度远小于 1 弧度(通常认为小于 0.1 弧度,约 6°)θ₀≪1
在小角度近似下,单摆的运动可以近似为简谐运动。其中θ₀为振幅(即摆杆与竖直方向之间的最大夹角)。相应的近似周期为:
T≈2π√(L/g)
其中,L为摆长,g为当地的重力加速度。
摆长为 1米的单摆,于地表处作小角度摆动可近似为简谐运动,周期 T≈2s 这种单摆称之为秒摆。
1.2 摆钟
摆钟是以一种称为钟摆的摆动重锤为计时装置的时钟。
使用钟摆计时的优势乃是因其为一谐振子,钟摆基于其摆长以同一频率反复振动,且其振动单一而稳定。
从1656年克里斯蒂安·惠更斯正式发明摆钟以来直到20世纪30年代,基于摆钟的普遍程度,摆钟一直保持着世界上最精确的计时装置的地位。
钟表匠们意识到只有摆幅较小的摆锤(几度)才能保证走时同步,这促使罗伯特·胡克在1658年左右发明了锚式擒纵机构,将摆锤的摆动幅度缩小到4-6°。
- 秒摆(也称皇家摆),长0.994米(39.1英寸),周期为两秒,被广泛应用于高档钟表。
- 座钟则使用半秒摆,长度为25厘米(9.8英寸)或更短。
- 只有少数大型塔钟使用更长的摆,例如1.5秒摆,长度为2.25米(7.4英尺),
- 或者偶尔使用两秒摆,长度为4米(13英尺),例如大本钟使用的那种摆。
到17世纪末,秒摆的长度成为衡量某一地点重力加速度的标准。
到1700年,欧洲多个城市的秒摆长度测量精度已达到亚毫米级。
对于秒摆而言,重力加速度g与其长度成正比:g∝L
1667年,惠更斯在钟摆上加了1个齿轮,令其更加可靠,但无法在颠簸摇晃的船上使用。
最后用1具由两个弹簧推动的摆轮代替钟摆,从而造出航海钟。
1.3 航海钟
航海天文钟是一种精密计时器,安装在船上,用于通过天文导航确定船舶位置。
它通过比较格林尼治标准时间(GMT) 和根据天体观测确定的当前位置时间来确定经度。
航海天文钟最初于 18 世纪发明,是一项重大的技术成就,因为在缺乏电子或通信辅助设备的时代,精确掌握远洋航行中的时间对于有效导航至关重要。
第一台真正意义上的航海天文钟是约翰·哈里森毕生心血的结晶,他历经 31 年坚持不懈的实验和测试,彻底革新了海上(以及后来的航空)导航。
1.4 秒摆和米
Meter
在1791年法国采用公制之前的讨论中,定义新长度单位——米——的主要候选方案是北纬45°的秒摆。
这一方案由法国政治家塔列朗和数学家安托万·尼古拉·卡里塔·德·孔多塞领导的小组提出。
这是法国科学院委员会考虑的三个最终方案之一。
然而,1791年3月19日,委员会最终选择以穿过巴黎的子午线长度为基础来定义米。
秒摆的定义被否决的原因是其在不同地点存在差异,而且它是用时间单位来定义长度。
(不过,自1983年以来,米的官方定义已改为以秒的长度和光速为基础。)
另一个可能的原因是,激进的法国科学院不希望他们的新系统以秒为基础,因为秒是旧制度下的传统非十进制单位。
尽管米的长度并非由摆锤定义,但最终选定的米的长度——从极点到赤道的子午弧的10⁻⁷倍——与秒摆的长度(0.9937米)非常接近,误差在0.63%以内。
虽然当时并未给出选择这一特定长度的理由,但很可能是为了便于将秒摆用作辅助标准,正如官方文件中所提议的那样。
因此,现代世界的标准长度单位在历史上无疑与秒摆有着密切的联系。
最新一米定义于1983年国际度量衡大会重新制定,此次定义时使用了自然中随处可见的光,并且在70年代光速的测定已非常精确,所以最终定义为光在真空中行进299 792 458分之1秒的距离为一标准米。
故此,一旦光速得到更精准的量度,改变的数值会是米而非光速。
2. 使用Blender模拟摆运动
2.1 秒摆-简单驱动器
前面章节已经了解到秒摆的要求及状态。
1米的高度,摆动幅度介于4~6°,2秒完成一个周期。
那么就做一个2秒钟,共48帧的动画,可以做成无限重复播放的视频或动图。
周期公式: T≈2π√(L/g),其中 π2 ≈ g,所以 π ≈ √g,若L=1,那么 π√(1/g) ≈ 1,结果就是T ≈ 2s
建模
新建一个球体作为摆锤。编辑模式下顶部选取面,向上挤出,作为摆动杆。
摆锤和上方的杆是一体的,将物体原点设置到摆动杆顶端。作为旋转中心。
驱动器
#sin(frame/7.6)/11.4
- 其中sin()是正弦函数,
- frame是随帧数变化的全局变量。
- 这里的: /7.6, 控制频率,大约48帧,2秒完成一个周期。
- /11.4, 控制振幅,大约5°。
将公式写入摆锤Y轴旋转栏位,空格播放,完成。
2.2 摆动画-曲线编辑器
Tutorial: Pendulum Waves in Blender
以下内容参考教程视频如上,视频里还加入了酷炫的材质特效,有兴趣可以去看看。
这里只记录了制作摆的过程。
3D视图拆分出一个区域,打开 曲线编辑器
选中摆锤,鼠标停留在旋转Y轴栏位上方, I 添加关键帧,在曲线编辑器里,删除x,z的旋转,只保留Y。
选中曲线编辑器,中线,G 上下移动,3D视图的物体就会左右摆动了。[ESC]
曲线编辑器,打开右侧的修改器页签,点击,添加修改器\Built in Function 内置函数
就用默认的正弦。
现在 空格 播放,物体开始疯狂摆动。修改如下2个参数值。改变振幅和频率。
- 插值 (振幅) 0.3
- 相位倍值 Phase Multpiter (频率) 0.1
- 相位偏移 Phase Offset 默认0即可
- 值偏移 Value Offset 默认0即可
好了,一个摆动画。增加一点趣味
选中物体,Shift D,复制,沿Y移动5,重复约10次
然后从第二个开始,选中第二个,修改频率,0.11
选中第三个,修改频率,0.12 … 依次修改剩余摆锤。
空格,播放...
曲线编辑器 缩放操作
鼠标滚轮,缩放曲线,
Ctrl 鼠标中键, 鼠标缩放
A 全选所有摆锤,曲线编辑器里,所有曲线都会显示出来。曲线编辑器最大化 Ctrl 空格
本例中大概在 628帧处,找到了所有摆锤曲线的重合点。
总帧数设为该数值,即可循环播放了...
2.3 有点粗糙的关键帧模拟
还是以上的建模,摆锤与摆杆一体,物体原点在摆杆顶端。
在0(Y30°),30(Y0°),60(Y-30°),90(Y0°),120(Y30°)帧处分别插入关键帧,共120帧完成一个周期。
打开曲线编辑器,关闭x,z,只保留Y旋转。
A全选时间线所有关键帧,在曲线编辑器里,缩放。可以改变摆动速度。
继续添加模拟空气阻力带来的摆动衰减。
曲线编辑器,T,设置关键帧的插值模式。
缓动(通过力度)\二次型
选中怪异曲线2端,Ctrl E,选择淡出。调整其他怪异曲线,完成。
2.4 不太好控制的物理特性模拟
上方添加一个圆柱体,设置刚体:被动,形状选 Convex Huli 凸孔。摩檫力降到0.1
该圆柱体 穿过摆锤的杆顶端,作为锚点,旋转轴。
带杆的摆锤,设置刚体: 活动,形状选 Mesh 网格。摩檫力降到0.1。灵敏度降到0
重置摆锤原点。
播放。速度有点慢。
场景面板\刚体世界环境\速率,调整为5.
播放...
摆绳可用物理引擎的布料属性。
3. 秒摆-驱动器进阶
3.1 带变量的驱动器公式
这是《Python Scripting in Blender》书籍,(第09章 动画驱动器)里的示例。书本里有详细的过程。这里只摘录关键步骤。
这里的公式与前面章节(秒摆-简单驱动器)的不同之处,在于:
- 建模部分,顶端锚点和摆锤是分开的,其间的距离是个变量,就是周期公式里的L长度。上一节的秒摆例子是直接取了最简单的1。
- 第二个变量是每秒的帧数,也作为变量,你可以随意设置希望的帧数。
- 第三个变量是可以随意修改属性值,以改变摆动幅度。
这个例子可以让新手了解到如何设置自定义变量,如何添加自定义属性。驱动器里如何使用这些自定义项目。
建模:可以同上,不同之处是,不要修改摆锤的原点,让原点保留在摆锤球体中心。
在顶端新建一个空物体-空箭头,作为摆动的锚点,旋转中心。
由于摆锤的原点在锤体中心,所以,这时候旋转,会绕着锤体中心旋转,而不是上方的锚点。
添加旋转约束:选择摆锤,打开约束选项面板,添加约束: Pivot, 目标选择空对象。
将选择范围改为:Always,始终。以便所有方向的旋转都受到影响。
现在再旋转摆锤,他会绕着上方空物体锚点旋转了。
驱动器公式
#sin(frame/fps/sqrt(length/9.8))
这里的 fps,就是帧数变量。length,是摆绳长度。
将公式输入摆锤的旋转Y栏位,但并不会起作用,还要定义这2个变量才能用。
鼠标在 旋转Y栏位 上方右键菜单里 选择 编辑驱动器,打开编辑面板。
3.2 设置变量 fps
获取每秒帧数属性
单击“+添加输入变量”按钮将向驱动器添加新变量。
默认情况下,此变量的名称为var,并且是RNA属性变量——即,它从Blender中的另一个属性读取值。
- 下方的属性栏,左边选择类型:场景;右边选择当前的场景:Scene (本示例就用默认的这一个)
- 在下方的路径,填入: render.fps 以获取在渲染设置中设置的每秒帧数。
- 最后别忘了将基因代码(RNA)图标右侧的当前名称var重命名为fps。
下方的数值,应该已经取到当前设置的30帧了。
现在,变量名称与驱动器表达式中使用的名称匹配,因此frame/fps是当前帧的时间,以秒为单位。
这允许下一个变量length通过基于秒的公式影响周期。
3.3 设置变量 length
使用距离变量获取摆的长度
驱动器变量有四种类型:
- 单一属性 Single Property
- 变换通道 Transform Channel
- 旋转差异 Rotational Difference
- 距离 Distance
- 前两种,单一属性和变换通道,依赖于属性的值,
- 而后两种,旋转差异和距离则是两个对象变换之间的差异。
在这种情况下,绳索的长度是驱动对象与其支点之间的距离——即摆锤与空对象之间的距离。
因此,我们将使用它们的距离作为长度:
单击“+添加输入变量”按钮添加新变量。
单击RNA图标将类型更改为距离。面板将更改,允许您选择两个对象。
选择摆锤和空对象,并将变量名称更改为 length。
选择了2个对象后,下方的距离值就会显示出来。
空格,播放,小球已经摆动起来了。不过摆动幅度有点大。
3.4 设置变量 amp
控制振幅
选择我们用作支点的空对象。
在对象属性面板中,找到自定义属性部分。
单击“+新建”按钮以添加属性。默认情况下,它将命名为prop。
单击齿轮图标并将属性名称更改为 amplitude。
右键单击值(默认值1.00很好),选择“复制数据路径”。["amplitude"]
这将把属性的路径复制到剪贴板。当我们添加下一个驱动器变量时,这将很有用。
在驱动器中使用自定义属性
选择摆锤,打开旋转轴驱动公式的编辑驱动器面板。
单击“+添加输入变量”,并将新变量命名为amp。
单击类型选择 物体,选择空对象作为属性对象。
单击Path:字段并使用Ctrl + V粘贴存储在剪贴板中的数据路径,或输入["amplitude"]。方括号是自定义属性Python路径的一部分。
我们可以直接将* amp添加到驱动器表达式中,但我们可以做得更好:由于驱动器影响旋转,我们还可以将π添加到乘法中:
sin(frame / fps / sqrt(length/9.8)) * amp * pi
正弦函数在-1.0和1.0之间振荡,因此当幅度设置为1.0时,我们的驱动器结果在-π到π之间变化。
从0.0(静止摆动)到1.0(完整旋转)的控制对动画师和3D用户具有直接意义,因为它允许他们通过更改幅度设置所需的圆的分数。
到此,一个完整的摆动画驱动完成了,可以按需要修改3个变量的参数,以适应需求。
3.5 摆插件
编写一个插件,为活动对象设置摆。
这是书籍带的插件代码,书中详述了过程,有兴趣的可以查阅书籍内容。
下载安装插件后,即可使用。
在对象模式中,选择一个对象使其处于活动状态。
右键单击并选择“Make Pendulum”以调用插件。
在左下角操作符属性中设置长度和幅度的值。

没有评论:
发表评论