原版摄像机动画资源库
“摄像机动画资源库”是基于旁观展示实体、teleport命令,以纯指令驱动运行的数据包模组。
支持版本:Minecraft Java Edition 1.21.6+
设计原型
运镜(Camera Movement)
Q:“为什么要在Minecraft中实现运镜?”原版摄像机动画资源库
A:“在游戏中,如果只有静态场景,视觉效果不够流畅,显得机械。同样的场景,如果画面有运镜,视觉效果便更加流畅自然。”
基础运镜
在影片拍摄时,常通过以下方式实现运镜:
推、拉镜头
摇晃镜头
平移镜头
升、降镜头
甩镜头
分镜
提升画面质量、渲染氛围与营造感受,可以应用以下的方法:
正反打
跳轴拍摄
透视原理
构图
蒙太奇手法
有了运镜,动画内涵便从视觉效果无形中表达出来,提升玩家沉浸感,丰富游戏可玩性。
特点
数据包功能
过场动画、鸟瞰俯瞰场景摄像机运镜设计
技能动画运镜设计
数据包优点
- 流畅性
相比于直接旁观实体的tp插值,数据包允许平滑曲线运动,插值矩阵构造一阶导连续甚至二阶导连续的轨迹,观感舒适。
- 便捷性
相比于AnimatedJava等插件生成的摄像机运动,数据包可以实时编辑、预览轨迹,更加便于使用。
- 实时性
相比于命令生成与插件创建编辑,数据包的实时预览功能极其突出,无论保存或正在编辑的轨迹,都可以通过一条命令预览与调试。
使用方法
安装 CameraMovement 摄像机动画资源库
最新版本V4.0
下载链接 https://wwbol.lanzout.com/i1j6M3ip661a
安装到存档请见Minecraft Wiki 数据包-使用
编辑与播放
管理员与管理物品
- 在游戏内,玩家随时可以使用以下命令申请管理员
trigger camera_animation申请管理员后,若背包存在空间,即获得“关键帧工具”或“自由动画工具”,以下大部分操作均基于主手手持“关键帧工具”或“自由动画工具”生效。
关键帧工具:用于创建、编辑轨迹动画。轨迹动画的位置固定不动,就像火车铁轨一样,摄像机只能按照预设的路径移动。
自由动画工具:用于创建、编辑自由动画。自由动画的位置根据播放函数的执行位置而定,在不同坐标播放可以看到不同的摄像机路径。
创建与编辑
手持“关键帧工具”或“自由动画工具”时,当前存在的轨迹会以海晶灯(未选择)或菌光体(已选择)的形式显示,已选择的轨迹会显示预览(粒子效果),关键帧以侦测器的形式显示。
按E打开背包,悬停在“关键帧工具”或“自由动画工具”上可以查看操作键:
F创建轨迹
对于轨迹(海晶灯/菌光体)点左键选中,右键进入编辑页面
对于关键帧点左键是移动,单独点右键是设置朝向,左Shift(潜行)+右键打开位置设置面板
按Q删除关键帧或录制段
Shift+F打开数据包设置面板
保存与播放
进入游戏时默认显示的面板中有主要功能函数的介绍
保存动画
function camera:save/this {id: xx}id:轨迹的标准序号。
标准序号:右键打开编辑页面标题栏的轨迹数字序号,或轨迹实体(海晶灯/菌光体)的名称中的数字序号
播放动画
轨迹动画
播放一段动画
function camera:play/this {id: xx, cmd: '', stay: xx, tp: [0或1]}stay:在一定游戏刻后开始播放轨迹动画
cmd:在结束后执行命令(若不需要则留空字符串 " " )
tp:播放完是否将玩家传送回播放前的位置(0则不传送,1则传送)
播放多段动画
function camera:play/this {id: [1,2,3……], cmd: '', stay: xx, tp: [0或1]}- id:多段轨迹的标准序号组成的列表,用逗号 “ , ” 分隔。
自由动画
播放一段动画
execute as entity positioned x y z rotated ry rx run function tween:play/this {id: xx, cmd: '', stay: xx, tp: [0或1], free: [x, y, z, ry, rx ]}具体控制哪个玩家在什么位置播放自由动画,否则函数将无效。
free:一个五位有序数表,x y z ry rx 分别确定这五个坐标是否为自由坐标。 其中x y z 的自由坐标代表局部坐标 ^ ,非自由坐标为相对坐标 ~ ;ry rx 的自由坐标代表相对坐标 ~ ,非自由坐标为绝对坐标 ry rx 。
例如锁定 y 为非自由坐标,x z ry rx 为自由坐标,则传入 free: [ 1, 0, 1, 1, 1 ],游戏执行等效于如下修饰。
execute positioned ^ ~ ^ rotated ~ ~终止动画
仅调试模式时,在播放过程中强制切断动画
function camera:play/stop- 执行后会强制切断正在播放的轨迹动画。
玩家设置
开发功能
启用
scoreboard players set #enable camera_animation 0- 单次使用后将禁用进入游戏的重载提示,且不允许其他玩家成为操作员。
禁用
scoreboard players set #enable camera_animation 1- 单次使用后将启用进入游戏的重载提示,且允许其他玩家成为操作员。
玩家播放
启用
tag entity add camera.enable- 执行后该玩家将启用动画的播放,在执行相关函数后玩家可以正常看到摄像机运动。
禁用
tag entity remove camera.enable- 执行后该玩家将禁用动画的播放,在执行相关函数后玩家无法看到摄像机运动。
卸载与优化
卸载
function camera:uninstall/all上述命令将移除数据包全部内容,包括生成、保存的轨迹,全部记分项和命令存储。
提示成功后,可以使用如下命令安全卸载数据包,随后销毁相关物品(关键帧工具与自由动画工具)
datapack disable "[前置]CameraMovement V4.0 - 1.21.6+"优化
- 1.保存
Q:“我创建轨迹为什么会变卡?” A:“可以试试保存轨迹,大幅减少实体卡顿”
为什么要用实体呢?不如命令存储卡顿低?
在数据包开发最初,为了实现轨迹预览功能,以及并未考虑到计算机性能问题,因而使用marker实体。函数中大量@e扫描会造成难以容忍的卡顿,新增的保存函数可以极大优化卡顿,详见上文说明。
如果轨迹保存过后依旧造成大量卡顿,请务必联系作者反馈!
- 2.降低渲染
Q:“我只是帧率低,但是游戏运算并不卡有什么轻量化的优化方案?” A:“可以试试禁用轨迹预览”
在Shift+F打开的数据包设置面板中可以看到“显示轨迹预览一栏”,将其设置为“关”并保存设置即可关闭粒子渲染显示。

使用详解
贝塞尔曲线编辑
Q:“相比于Catmull-Rom曲线算法,贝塞尔曲线既要编辑大量控制点位(关键帧与插值帧),播放起来又卡顿,怎么还将其留在数据包内?”
A:“正是因为贝塞尔曲线的高度可编辑性,在牺牲便捷性同时可以通过微调关键帧与插值帧,构建更复杂的运动函数,甚至可以做到二阶导连续。”
在相邻的关键帧间,摄像机运动总是从红色羊毛方向切向靠近关键帧,再从蓝色羊毛方向切向离开,因此相比于Catmull-Rom曲线,其在关键帧处的速度拥有更高可控性。
编辑贝塞尔曲线时同画图软件的钢笔工具,一般将插值帧(两侧控制点)三等分排布在两个相邻关键帧间,达到较为稳定的速度与加速度(曲率)。 角度也需要控制在球坐标中的ry(偏航角)与rx(俯仰角)均匀划过球面,这样可以让转动更加贴近球面短路径曲线,而非坐标上的曲线运动。 例如从 ( ry, rx ) = ( 0, -90 ) 转向 ( 90, 0 ) 摄像机旋转的轨迹类似螺旋线,但实际上我们视线希望转过的路程较小,因此可以在 ( 0, 90 ) 对应的蓝色羊毛从 ry = 0° 旋转到 ry = 50° ,而 ( 90, 0 ) 对应的红色羊毛只从 ry = 90° 旋转到 ry = 75° 左右,最终呈现效果更加贴近于我们希望的较短路径。

正如图中所示,红线是按照坐标上三等分法摄像机视线会转过的路径,而黄线为视觉修复下摄像机视线会转过的路径。 而Catmull-Rom曲线插值算法不支持单独控制每个关键帧处的速度与角速度,从而导致视线在俯仰角过大时显得速度不平滑了,正因如此,贝塞尔曲线在处理复杂旋转时尤其好用。
设置面板

插值生成速度:控制每游戏刻插值帧生成数量,降低此项有利于游戏MSPT的降低,会增加插值帧生成时间。
播放实体:动画播放时玩家旁观的实体,建议使用展示实体,拥有更平滑的路径插值算法,不过有概率出现卡顿情况,属于展示实体的Bug;盔甲架则不会播放卡顿,不过其路径较不平滑,有明显的顿挫感。
轨迹预览:是否开启粒子显示选中的轨迹路径,会小幅增加渲染压力。
切换动画模式:在轨迹动画与自由动画模式间切换,不同模式下只会渲染此动画模式的轨迹。
编辑页面

更改插值数 & 修改动画信息:无论其值与更改前是否相等都会刷新轨迹,并且在两关键帧间生成这里规定数量的帧,如果遇到轨迹生成出错,可以使用此按键刷新。
更改注释:将轨迹注释修改为设置值,轨迹注释只在编辑页面可见,不会对播放产生影响。
迁移轨迹:将轨迹标准序号更改为其他序号数,只能迁移为不存在的轨迹,如果迁移至按顺序还未生成的序号,则按顺序生成(创建轨迹)时会略过此轨迹序号。
删除轨迹:清除此轨迹对应的实体、分数、命令存储。
缓动函数页面


在F键创建轨迹时,在缓动函数页面点击缓动函数名称按键,打开缓动函数列表,如上图所示。
在缓动函数列表单击选中缓动函数,双击选中并使用,等价于单击后点击退出选择。
在创建缓动函数页面,有如下两个选项:
- 通过解析式创建
写入缓动函数解析式,支持 + - * / ^ () 五种运算符与括号,以及常数 e(2.71) π(3.14),其中自然常数e用小写字母 “ e ” 表示,圆周率π用小写字母 “ p ” 表示。
写入的空格会自动忽略。

- 通过定点创建
仿照下式用小括号 ( ) 包围有序二元数组,自变量顺序无规定,只需要存在即可判定。
写入的空格会自动忽略。

- 缓动函数详见文章末链接。
原理推导
贝塞尔曲线
初见插值——从向量开始
两向量a与b的和,通过改变a与b前系数,使其恒为定值,可以获得一条直线。 如果时间t参与构成向量的系数,便得到了最基础的插值运动——直线运动:
当t从0步进到1时产生的线段刚好就是

高阶贝塞尔曲线
进一步讲,如何让运动更可控,类似于物理的加速度概念,当运镜过程符合实际运动规律时视觉效果更加平滑。
因此可以通过叠加两次Lerp插值,实现简单的平滑曲线:

仿照上述过程,进行多重运动叠加,当有控制点

经过使用,人们发现三阶分段曲线最为实用,能兼顾平滑与可编辑性。因此以下讨论皆为三阶曲线
插值矩阵形式
换一种写法,写出三次贝塞尔曲线关于t的多项式函数。 当控制点为
为了更清晰显示
现在,我们有了三阶贝塞尔曲线的矩阵形式,由此,不妨试试更改矩阵的项,我们会得到不同的曲线,这些曲线统一称为样条线。
Catmull-Rom曲线
我们将每个
使用t的多项式形式,设曲线为
由已知条件
可解得
由此得出
曲线的形状如下图所示,其中

当
Hermite曲线
其中,数据包的录制模式支持间隔采样再插值,即先获取玩家在一些点的位置速度信息,再依次穿过这些点生成平滑曲线,其插值算法即为Hermite曲线
其形状与速度如下图所示

可以看到,此算法生成的曲线更加动态,无二阶导连续。
至此,有关插值曲线的推导就结束了,在此感谢你看到这里!
也希望你对摄像机动画支持库有良好的评价
制作鸣谢
特别感谢
制作工具与网站
文献参考
什么是插值
缓动函数
基岩版32种缓动函数
贝塞尔曲线介绍
样条插值算法
贝塞尔曲线详解
Catmull-Rom曲线详解1
Catmull-Rom曲线详解2
Hermite曲线详解
样条函数及三次样条插值
MCBE Camera命令详解
终于实现电影级运镜!!camera指令到底还有多少用途!?
完整分镜教程-从零基础到实战
那些你早该知道的镜头原理
总结与展望
数据包完全免费开源点此查看更新,密码:e0qv。
合作与Bug反馈请移步CoolGaston个人空间私聊作者。
最后,衷心希望此资源库数据包能为各位开发者的地图创作带来便利!