feat:上传mcguide-开发指南部份

This commit is contained in:
Othniel su
2024-12-23 10:57:59 +08:00
parent 7292166c88
commit 0dc59fa4f0
3297 changed files with 63375 additions and 0 deletions

View File

@@ -0,0 +1,34 @@
---
front: https://nie.res.netease.com/r/pic/20230130/6d6b026f-3b65-483c-afeb-4d008c07d436.png
hard: 入门
time: 5分钟
selection: 40
---
# 特效编辑器简介
特效编辑器是一个用于编辑特效、挂接特效到模型的编辑器。同时在最新版本也引入了部分原生音效的挂接。
它支持:
1. 编辑中国版粒子、序列帧特效,将其挂接至骨骼模型,并在内嵌游戏中预览;
2. 挂接微软粒子到原版模型,并在内嵌游戏中预览;
3. 挂接原生游戏音效到骨骼模型、原版模型。
4. 配置骨骼模型所使用的材质,并实时重载刷新材质效果。
主界面模块如下图所示:
![](./picture/A1.png)
包含以下重要模块:
1. **属性面板**,用于显示或者修改所选项的属性,包含:① 显示/修改粒子特效及序列帧特效的属性;② 显示模型骨骼属性;③ 显示时间轴轨道属性(如播放延迟等)。
2. **时间轴面板**,用于控制特效和人物动画的播放,包含:① 模型动作的播放、停止、逐帧播放;② 控制模型动作是单次播放还是循环播放;③ 控制单次播放的预览时间区间;④ 拖动拖柄控制时间轴上的特效、音效开始播放时点。
3. **资源管理器面板**,用于显示和管理当前拥有的资源,与其他编辑器的资源管理器相同。
4. **模型挂接面板**,用于挂接特效到模型骨骼挂点/锚点上。通过调整挂点、锚点的位置,就能够控制不同特效播放的位置。同时也可以用于将模型挂接到模型上。
5. **预览设置面板**,用于设置模型动作预览的选项,同时也能通过场景模型、场景特效功能支持多个不同的模型及特效在指定的位置进行播放。
6. **工具栏**,位于界面顶部,左侧的移动、旋转、复位用于对挂点进行可视化操作,右侧按钮用于调整当前相机视角和项目的存储、运行。
这几个面板组成了特效编辑器的主体功能,各个部分的详细使用说明请参考后续文档。

View File

@@ -0,0 +1,203 @@
---
front: https://nie.res.netease.com/r/pic/20230130/35bf289d-584b-4565-999b-f7f5360ee356.png
hard: 入门
time: 10分钟
---
# 模型导入与配置
**本文主要介绍以下内容:**
1. 特效编辑器里支持的模型种类有哪些。
2. 特效编辑器里如何导入外部模型。
3. 特效编辑器里如何使用模型。
## 模型支持
在我的世界中国版中模型的支持主要有3种格式
1. **原版生物模型**:以 .json 为后缀的原版生物模型文件。
2. **原版方块模型**: 以 .bbmodel 为后缀的原版方块模型文件。
3. **FBX通用模型**: 以 .fbx 为后缀格式的模型文件。这是一种通用的模型格式,目前几乎所有主流的三维软件中都可以支持 fbx 模型的导出,内部包含信息很丰富,当前特效编辑器主要支持骨骼模型贴图和骨骼动画。
## 常用目录介绍
![](./picture/A2.png)
如上图所示,在特效编辑器中,我们可以轻松地通过资源管理器的**精简模式**找到常用的模型、特效、贴图文件。善用资源管理器右侧的搜索功能,即可通过文件名称 关键词精准定位文件。
如果你更习惯使用资源管理器的**完整模式**,你可以关注以下目录来定位你需要的资源(它们也被收编在完整模式默认的常用目录中):
1. **资源包 effects 目录**:中国版自定义特效目录,包括创建和导入的自定义特效文件都存放在这里目录里。
2. **资源包 models 目录**:模型相关目录,导入的模型骨骼、骨骼动作、骨骼模型网格、原版方块模型、原版生物模型和对应各个模型的特效挂接文件都存放在这个目录的对应文件夹下。
3. **资源包 textures 目录**:贴图目录,特效贴图、骨骼贴图和动画序列帧文件都存放在这个目录的对应文件夹下。
![](./picture/A3.png)
## 模型的导入
如下图所示点击资源管理器【导入】按钮展开【模型】子菜单即可发现有4个主要选项
1. 骨骼模型fbx
2. 骨骼模型json
3. 原版方块模型
4. 原版生物模型
> “骨骼模型动作fbx”选项用于单独导入骨骼模型动作文件不属于我们这里介绍的导入模型操作。
下面将分别介绍这些资源的导入方式:
![](./picture/A4.png)
### 1. 导入fbx模型
我们这里以一个名为`datiangou`的fbx模型导入流程为例。
在导入之前,可以先观察`datiangou`模型有哪些东西,打开文件夹,可以看到里面包含了一张`datiangou.png`的**贴图**和若干个 .fbx 文件,为什么有这么多 .fbx 文件呢?
![](./picture/A10.png)
通常在制作骨骼模型的同时,也会制作相应的骨骼动画(即模型的动作),每个骨骼动画都会导出成单独的 .fbx 文件。使用 [Autodesk FBX Review](https://www.autodesk.com/products/fbx/fbx-review) 可以预览 fbx 模型和播放相应的动作。在这些 fbx 模型中,有一个是**主模型文件**,即其他的动画都是基于这个主模型为基准导出的,这个和具体的导出配置有关,这里不做详细介绍,只要了解到有**主模型文件**这个概念即可。
接下来就开始正式导入 fbx 模型了,在资源管理器左上角点击【导入】-【模型】-【骨骼模型】,会出现文件夹选择界面,选择模型所在文件夹,点击确定,出现界面如下:
![](./picture/A5.png)
各个选项的含义如下:
- **选择主模型**,整个文件夹下的其他以此模型为基准的骨骼动画都会被自动导入,如果主模型选择错误,可能会导致其他骨骼动画导入异常。
- **选择贴图**,有些模型可能包含多个贴图文件,这里仅支持单个贴图,所以要选择好相应的贴图文件。如果模型需要明度贴图,也可在“明度贴图”一栏选择相应的贴图文件。
- **动态加载**,该选项用于控制模型在游戏中的加载方式,动态加载是指在游戏中使用到该模型时才会去加载对应的模型资源。因为游戏默认启动时全部加载,当包含模型较多时,建议使用动态加载,控制加载数量。
- **下次自动选择FBX文件和贴图**,勾选此项下次会默认选择该文件夹下的贴图文件和模型文件(可在编辑器右上角【作品】-【设置】-【其他】- 【导入FBX资源时自动选择文件与贴图】停用该功能
当模型导入完成后会弹出提示导入成功的弹窗这样fbx模型的导入工作就结束了。
![](./picture/A6.png)
导入后文件将被自动归类放置,贴图文件会被存放至资源包 textures 文件夹下,模型的骨骼、动作等将被解析成编辑器使用的文件格式,并移动至资源包 models 文件夹下的各个对应文件夹内。
### 2. 导入骨骼模型json
json格式的骨骼模型实际上就是fbx模型导入后在编辑中的文件结构为了方便开发者们复用已有作品的模型特地支持了json格式的骨骼模型导入
1. 转换后的骨骼模型会按照下列结构存放:
![启动器截图](./images/bb2fbx6.png)
1. 点击导入骨骼模型json
![启动器截图](./images/bb2fbx7.png)
3. 选择目录中的`netease_models.json`文件,即可导入转换后的骨骼模型,并在特效编辑器中查看模型。
![启动器截图](./images/bb2fbx8.png)
### 3. 导入原版生物模型
下面我们将导入一个原版生物模型。我们以一个名为`zhizhujing`的原版生物模型为例。
原版生物模型通常使用Blockbenck软件制作而成需要进行原版生物模型制作的开发者可以通过[Blockbench官方网站](https://www.blockbench.net/)下载软件。制作完模型后,我们将模型、动作文件、贴图统一保存在一个文件夹中,然后开始导入工作。
在标准命名规则下,这三个文件分别为:
- `xxxx.geo.json`:模型文件
- `xxxx.animation.json`:动作文件
- `xxxx.png`:贴图文件
在资源管理器左上角点击【导入】-【模型】-【原版生物模型】,找到模型所在的文件夹,然后选中`zhizhujing.geo.json`。点击确认后,会弹出如下所示的窗口:
![](./picture/A11.png)
编辑器会自动识别模型的动作文件和贴图位置,如果开发者希望使用其他的文件替换自动识别的结果,可以直接在上面修改。确认无误后,即可点击【确认】按钮。
当模型导入完成后,会弹出提示导入成功的弹窗,这样原版生物模型的导入工作就结束了。
![](./picture/A6.png)
### 4. 导入原版方块模型
接下来尝试导入原版方块 bbmodel 模型,同样点击【导入】-【模型】并选择【原版方块模型】出现文件选择界面选择下载的demo/bbmodel/decoration文件夹下的bbmodel文件选择完成后出现如下导入界面
![](./picture/A7.png)
各个选项的含义如下:
- **命名空间**,允许开发者在导入时自定义模型的命名空间,方便后续操作。
- **模型ID**导入模型的唯一ID。
- **方块物品贴图**,一般 bbmodel 中会内置贴图,如果需要引入外部贴图可以在这里进行选择。
- **开启环境光遮蔽**,用于提高模型对光线的处理。
bbmodel模型将被解析为编辑器使用的文件格式并存放在 models/netease_block 文件夹(模型)和 textures/blocks 文件夹(贴图)下,具体的使用方法可以参考 [自定义方块模型](../../20-玩法开发/15-自定义游戏内容/2-自定义方块/5-自定义方块模型.md)。
## 模型的使用和预览
导入模型完成后,我们在特效编辑器【模型挂接】窗口的顶部通过下拉框可以将主角模型切换为我们导入的模型,以便进行特效挂接等后续工作。
![](./picture/A12.png)
### 1. 第一人称模型修改
第一人称模型是指位于第一人称视角下的模型,对于 Steve 来说,即相当于 Steve 的手臂,但是第一人称模型可以不仅仅是手臂,例如将第一人称模型设置为大天狗,即大天狗的第一视角下仍然会再渲染一个大天狗出来。
> 仅当模型为骨骼模型时,才支持第一人称模型,且第一人称模型也需要为骨骼模型。所以默认的 Steve 不支持第一人称模型。
**修改第一人称模型的步骤如下:**
1. 在模型挂接面板将模型修改为导入的骨骼模型
2. 修改挂点面板的第一人称模型,修改该项改为导入的第一人称模型(手臂模型)
3. 修改挂点面板的第一人称模型动作,修改该项为对应的(挥舞)动作
4. 切换视角到第一人称查看该模型
![spark_first_person_model](./images/preview_fp_model.gif)
### 2. 骨骼模型材质配置
当所编辑的模型是骨骼模型时,模型挂接面板相比原版模型会增加几个选项,如下图所示:
![spark_first_person_model](./images/material.png)
#### 配置本体模型的材质
如[骨骼模型自定义材质和贴图](../6-模型和动作/04-骨骼模型的使用.md#_7-模型使用自定义材质及更多贴图)所描述我们可以在netease_models.json中定义骨骼模型的材质和贴图。
在特效编辑器,也对应支持了上述字段的可视化配置,如上图中的紫色部分所示,点击齿轮按钮即可打开材质配置的弹窗,进行整个骨骼本体模型的材质和贴图配置。
#### 配置指定骨骼的材质
如[骨骼模型自定义多个材质和贴图](../6-模型和动作/04-骨骼模型的使用.md#_8-模型使用多个材质及贴图)所述我们可以在netease_models.json通过useSplitMeshes和splitBonesGroup字段对模型的其中一部分骨骼配置自定义材质和贴图。
在特效编辑器也对应支持了上述字段的可视化配置,如上图中红色框选部分,通过勾选【启用按骨骼配置材质】选项,再在下方的骨骼层级中选中任意骨骼,即可在右侧的属性栏查看和配置该骨骼的材质和贴图。
#### 配置多pass材质
如[骨骼模型自定义多Pass材质](../6-模型和动作/04-骨骼模型的使用.md#9骨骼模型自定义多pass)所述我们可以在netease_models.json将material属性改写成一个列表按照顺序配置多个材质则引擎加载时会按照列表顺序一次加载每一个pass的材质。
在特效编辑器也对应支持了上述内容的可视化配置如下图所示无论是配置指定骨骼还是配置本体模型的材质材质和低端机材质均为可自定义长度的材质列表开发者可以根据需要自行添加和设置多pass材质。
![spark_first_person_model](./images/multipass1.png)
### 3. 重载材质
当我们在配置和调试材质时难免会有修改材质和着色器shader代码的需求在以往这些修改一般需要重启游戏引擎才能生效现在特效编辑器的顶部工具栏新增了【重载材质】按钮点击后可以直接实时重载引擎内的材质效果实现“热更”的效果提升开发者调试材质shader代码的效率如下图
![图片](./images/refreshmaterial.gif)
### 4.骨骼模型挂点偏移
当所选择的模型是骨骼模型时,在任意骨骼创建一个挂点,即可在挂点的属性面板看到一系列快捷偏移的属性,点击属性右侧的偏移按钮,即可快速将该挂点偏移到对应面或者模型的中心。
> 外部建模软件和MC引擎的坐标系可能不一致因此快捷偏移所标注的面上下左右前后和开发者实际感知的面可能会出现没有一一对应的情况。
![](./images/kjpy.gif)
### 5.删除单个模型动作
若您导入模型后希望删除指定动作,可在模型挂接面板的动作列表选中指定动作,并右键,点击删除按钮后可将该模型动作完全删除,如下图所示。
![](./images/deleteani.gif)

View File

@@ -0,0 +1,62 @@
---
front: https://nie.res.netease.com/r/pic/20230130/e0cd6be8-6360-4a79-99fb-17ff5344e707.png
hard: 入门
time: 15分钟
---
# 原版特效创建与导入
本篇文档主要介绍以下内容:
1. 如何创建一个原版粒子特效。
2. 如何将创建好的原版粒子特效导入特效编辑器。
## 原版粒子特效的创建
### 使用编辑器创建、编辑原版粒子
**原版粒子特效**有时也被称作**微软粒子特效**,它可以被用来挂接到**原版生物模型**上,增加美术表现力。我们可以在特效编辑器中直接创建特效并对其进行编辑,具体操作详见[这篇文档](./21-原版特效属性详细说明.md#创建原版粒子特效配置)。
### 使用Snowstorm创建原版粒子特效
部分开发者也习惯使用Snowstorm软件来创建。你可以通过它的[官方Github页面](https://github.com/JannisX11/snowstorm)找到并使用其[网页版](https://snowstorm.app/)或[VSCode插件版](https://marketplace.visualstudio.com/items?itemName=JannisX11.snowstorm)。
![](./picture/A13.png)
这两个版本的界面是相似的,如下图。
![](./picture/A14.png)
我们可以在左侧修改粒子的属性字段然后在右侧进行效果预览。Snowstorm也提供了若干模板供用户学习参考大家可以在顶部【Examples】标签下点击应用。
![](./picture/A15.png)
在这篇文档中我们不会对每个字段详细的书写方式进行逐一介绍已有第三方教程对原版粒子的编写方式进行了较为详细的介绍例如知名创作者McHorse拍摄的 **《如何使用 Snowstorm(雪暴) 创建粒子特效》** 视频教程),大家可以自行搜索学习。
在制作原版粒子的时候请注意以下两点:
1. 导入原版粒子特效时一定要注意特效文件的identifier不能与已有的特效相同否则后导入的特效会直接覆盖先前导入的特效。
![](./images/ms2.png)
2. 原版粒子特效配置文件中有一项【**Emitter Lifetime**】用于控制粒子特效的播放是单次还是循环播放。如果选用循环播放looping并绑定在实体动作上则会在实体执行该动作后持续存在于挂点位置不会自动消失且类似行走、跑步、攻击等高频重复的动作将会反复产生循环播放的粒子特效导致较为严重的卡顿问题。所以如果希望特效在动作播放后能消失而不是持续驻留需要将【Emitter Lifetime】的**模式Mode** 选为 **单次once** 而不是 **循环looping**
![](./images/ms3.png)
## 原版粒子特效的导入
如果你使用了Snowstorm创建原版粒子那么在创建完毕后就需要将其导入编辑器作品中。我们在编辑器的资源管理器中点击【导入】-【特效】-【原版粒子特效】,然后选择刚刚编辑好的原版粒子特效文件。
> 原版粒子标准命名格式为 `xxxx.particles.json`。
选择好粒子文件后,即会弹出下面的弹窗,用于指定特效的纹理贴图。这里默认使用的是引擎内置的贴图,如果开发者希望使用其他的纹理,需要再此手动更换。确认无误后,即可点击【确定】按钮进行导入。
![](./picture/A17.png)
当粒子导入完成后,会弹出提示导入成功的弹窗,这样原版粒子特效的导入工作就结束了。
![](./picture/A6.png)
> 如果你又在Snowstorm中编辑了该粒子特效的本地源文件也没有关系只需要点击属性面板的【热更新】按钮即可将修改同步到编辑器中。

View File

@@ -0,0 +1,403 @@
---
front: https://nie.res.netease.com/r/pic/20230130/41c658f3-1995-4112-9456-2a174ca7d453.png
hard: 入门
time: 30分钟
selection: 2
---
# 原版特效属性详细说明
本文围绕原版粒子特效的属性面板进行说明和演示原版粒子是如何制作的。主要内容有:
1. 创建原版粒子特效配置
2. 基础知识
3. 发射器属性组
4. 粒子属性组
5. molang 变量
6. 发射骨骼模型
![](./picture/mics_particle/property_overview.png)
## 创建原版粒子特效配置
原版粒子特效配置下文简称粒子配置可以通过snowstorm进行创建并导入(具体参考上一篇文章); 还可以通过编辑器的新建文件向导进行创建。本文使用的是第二种方法创建,然后通过资源管理器,鼠标右键配置文件->快速预览 可以看到一个红色心形的粒子。已有的粒子配置可以通过属性栏的“使用模板”,快速生成各种样式的配置。
![](./picture/mics_particle/create_1.png)
快速预览使用新建文件先导创建的粒子特效:
![](./picture/mics_particle/create_2.png)
## 原版粒子模板
在特效编辑器中我们内置了若干原版粒子配置模板供开发者学习研究。如果想使用这些配置模板只需要在粒子json文件的属性窗口找到蓝色的【**使用模板**】按钮,点击后在弹出的窗口中通过下拉框选择想要应用的配置模板即可。
![](./picture/A35.png)
## 原版粒子特效的制作基础知识
一个完整原版粒子特效配置是由一个json文件和对应的纹理文件构成的。每一个配置都有一个唯一的标识identifier如果有两个相同identifier的原版粒子特效那么后面加载的会覆盖前面加载的配置。
很多时候开发者需要使用第三方编辑器如snowstorm对粒子配置进行修改因此属性面板提供一个热更新的按钮点击后会让编辑器重新加载这个粒子配置。
组件的概念:一个系统性的功能,可以拆分成多个相互独立的小功能,这些小功能我们称为组件。原版粒子特效就是根据这种思想进行设计的,例如粒子的生命周期可以是一个组件,粒子的运动可以是另一个组件。原版粒子特效配置拆分的组件及具体含义可以查阅[官方文档](https://learn.microsoft.com/en-us/minecraft/creator/reference/content/particlesreference/particlecomponentlist)。
组件与属性面板里属性的关系:大部分情况下是一个或同一类组件对应一个属性, 例如Emitter Rate Components这个类型的组件对应"发射器->速率"这个属性。
纹理除了可以选择当前存档里的图片作为纹理外编辑器还提过一个默认粒子纹理图片的选项textures/particle/particles,这个图片存在于引擎自带资源里。纹理的具体使用放在后面的粒子部分进行讲解。
材质:现提供三种基本材质供开发者选择,每种材质作用如下:
alpha : 使用了alpha测试单面
blend : 使用颜色混合,多用于半透明的纹理,双面
opaque: 不透明,单面
一个原版粒子特效实例(下称特效实例)是指使用某一个粒子特效配置在游戏引擎里生成一个正在播放的特效实例。一个特效实例由发射器和发射器发射的粒子构成,一般情况下发射器的所在的位置就是这个特效实例的本地空间坐标原点。
mc里的特效实例有两种承载方式一种是在世界空间单独存在如快速预览的特效实例一种是挂接在其他实体节点上的如挂接在原版模型的锚点上需要原版模型动作进行驱动播放。不同承载方式粒子所使用的坐标系也不同。属性面板中的“空间”属性共同控制所使用的坐标系规则如下
- 本地坐标:当勾选时,且特效挂在实体上,则粒子位置是相对实体空间进行模拟的。
- 本地旋转:当勾选时,且特效挂在实体上,则粒子旋转是相对实体空间进行模拟的;只当'本地坐标'选中时,该选项才有效。
- 本地速度:当勾选时,且特效挂在实体上,则粒子速度是相对实体空间进行模拟的;只当'本地坐标'不选中时,该选项才有效。
例如一个绑定在实体上的粒子特效,如果没有勾选本地坐标,则实体移动时,特效实例不会跟着移动。
## 发射器属性组
![](./picture/mics_particle/emitter_overview.png)
从属性面板可以看出发射器由速率、生命周期、形状三种类型组件构成。下面分别讲解他们的用法:
* 速率
控制粒子发射数量及速率目前支持有两种发射模式1.instant 固定一次性发出多少粒子2.steady 可指定生成效率,单位为(个/秒),即每秒钟平均发射多少个粒子,如果当前特效实例存在的粒子数等于“最大粒子数”,就不会再发射了。
* 生命周期
这个组件是管理发射器是否激活的,可以认为发射器有三种状态:激活,睡眠和过期, 只有激活的发射器才会发射粒子,过期的发射器无法激活,会等待其发射的粒子全部销毁后,该特效实例会被引擎销毁。生命周期的三种模式:
1. once
只激活一次可指定激活时间时长单位s
2. loop
可循环激活,一个循环周期是激活时间+睡眠时间。注:该模式只对挂接的特效实例生效,非挂接的只会循环一次。
3. expression
使用molang表达式控制激活也销毁
> 激活表达式:表达式计算结果为真(非0)时,即激活
> 过期表达式:表达式计算结果为真(非0)时,即过期
* 形状
实体有多种形状可以选择其中point是最简单的一种, dics 是圆盘形状entity bounding box 用绑定实体包裹盒。下面对组件的主要属性进行讲解。
1. 偏移:当前发射器相对于特效实例本地空间的原点的偏移量。
2. 方向类型inwards 由当前发射形状由外向内发射outward 由当前发射形状由内向外发射Custom使用发射方向属性自定义
3. 发射方向:一个三维向量表示发射粒子的运动方向,这个属性会被引擎归一化。如果粒子的运动模式是动态的,且有初始速度时,粒子就会向这个方向运动。
4. 仅表面:仅在当前形状表面生成粒子。
## 粒子属性组
该属性组用于控制特效实例中所发射粒子的行为及表现。
* 表现
这个属组要用于控制粒子大小和朝向。首先需要知道的是每个特效实例里面的粒子都有速度,方向的属性,速度的方向并不等于方向。下面介绍的朝向模式中 direction_* 形的模式依赖方向属性进行计算。
方向:
我们有两种方式确定我们的粒子的方向,即属性"direction->方向模型"的选项:
> 使用速度方向:会使用速度方向作为粒子的方向:这里有一个"最小速度"的阈值,只有当速度大于这个值时才会更新粒子方向。
> 自定义:自定义粒子的方向, 这时粒子速度方向就不等于粒子方向。
朝向模式:
这个属性决定了一个粒子本地空间坐标系的朝向。最基本的粒子正对着的方向就本地空间坐标系Z轴方向。 举个例子说明朝向的原理假设你的朋友让你用手机帮她拍张个证件照那么你首先要让手机的镜头取对准你的朋友记住是用镜头不是其他部位然后你需要摆正你的手机因为斜着拍或者倒着拍的效果都不是想要的。想想这过程本质就是1.对准 2.摆正。怎么才算摆正呢?就要有个一个叫“上方”的方向,把手机的某个部位对准这个方向就是摆正。再看 lookat_xyz这个模式的实现1.用粒子的轴方向对着摄像机,实现面向摄像机 2.旋转粒子使y轴尽可能朝向上方世界空间的y轴方向实现摆正。direction_*模式也可以按照这个过程去理解。一般没有特别说明的情况下这个“上方”指的是世界坐标y轴的方向。
 ![](./picture/mics_particle/particle_billboard.png)
1. rotate_xyz:
对齐摄像机,使粒子本地空间坐标系Z轴方向于摄像机镜头方向相反。
1. rotate_y:
对齐摄像机但是只能绕世界空间y轴旋转
1. lookat_xyz
面向摄像机,以世界坐标y轴的的方向为上方即粒子的y轴尽可能朝向世界空间的y轴方向
2. lookat_y
面向摄像机,但只能围绕世界空间y轴旋转
5. direction_x:
粒子的x轴对着粒子的"方向"属性所指方向,粒子y轴朝上即粒子的y轴尽可能朝向世界空间的y轴方向
6. direction_y:
粒子的y轴对着粒子的"方向"属性所指方向,粒子z轴朝上
7. direction_z:
粒子的z轴对着粒子的"方向"属性所指方向,粒子y轴朝上
8. emitter_transform_xy
粒子面片平面平行发射器的xy平面
9. emitter_transform_xz
粒子面片平面平行发射器的xz平面
10. emitter_transform_yz
粒子面片平面平行发射器的yz平面
* 纹理UV
- 纹理宽/纹理高
这两个属性的含义是把纹理图片的宽高按这个取值来对待那么后面UV相关属性的取值就按照这个大小进行衡量例如有一个uv属性取值是(x, y),那么它实际在纹理图片的位置是(纹理实际宽\*x/纹理宽, 纹理实际高\*x/纹理高)
- UV开始/UV大小
这两个属性决定了粒子使用到纹理的那个位置。
- 动画配置
开启动画配置后引擎会按照设置的FPS这个频率来更新"UV开始"属性,每次更新都会增加"UV步长"的值,从而达到动画效果,这种动画叫 flipbook 动画。
* UV开始
粒子使用纹理坐标起始值
* UV大小
粒子使用纹理的宽高
* UV步长
每次更新对"UV开始"增长值
* FPS
更新动画的频率
* 最大帧数
最多更新多少帧,初始值算第一帧
* 延迟至生命周期
如果勾选这个选项FPS将被赋值为最大帧数/粒子生命周期,即在粒子的生命周期里播的帧数为"最大帧数"
* 循环
如果选中,则播完全部的帧数后,再从第一帧开始播放;如果没有选中,则播完全部帧数后停在最后一帧。
- 颜色&灯光
粒子某个像素点的最终颜色是 纹理颜色*该属性设置的颜色 的计算结果
* static: 静态颜色模式,颜色取值是固定的
* gredient: 梯度表模式,"插值函数"是一个molang表达式运算结果作为时间变量,再从"颜色表"上,按照时间变量取插值,获得最终的颜色。如:"插值函数"设置为 v.particle_age 就是根据当前粒子存在的时间进行取颜色值。
* 启用环境光: 启用后颜色会受当前环境光的影响,即在夜晚看起来较暗。
- 运动
粒子的运动包括位移和旋转两个方面。首先我们需要知道一些运动的基本规则:
1. 只有在动态的运动模式是才会根据速度产生位移(位移 = 速度*时间),如果是静态运动模式是看不到粒子运动的,对于旋转也是如此。
2. 位移 = 速度* 时间
3. 速度 = 速度 + 加速度*时间
4. 初始速度 = 速度初始方向 * 初始速度大小
5. 旋转角度 = 旋转速度 * 时间
6. 旋转速度 = 旋转速度 + 旋转加速度 * 时间
速度初始方向是粒子的发射方向(发射器->形状->发射方向)决定的,下面是各个属性的说明:
* 初始速度: 即初始速度大小
如果设置为0, 方向模式使用速度方向,会导致粒子无法显示。
* 初始旋转角度:逆时针方向,单位-度
* 初始旋转速度
* 逐帧计算参数
- 动态位置开关
打开后位置将不是通过"基本规则"算得, 而是同过"动态位置"设置。
- 动态位置
这是一组molang表达式,每帧都会运算一次,计算结果作为粒子的位置。
- 动态速度开关
打开后,忽略"基本规则"规则对速度的运算,使用"动态速度"属性的运算结果。
- 动态速度
这是一组molang表达式,每帧都会运算一次,计算结果作为粒子的速度。
- 动态旋转开关
打开后,忽略"基本规则"规则对旋转角度的运算,使用"动态旋转角度"属性计算结果作为旋转角度。
- 动态旋转角度
这是一组molang表达式,每帧都会运算一次,计算结果作为粒子的旋转角度。
* 运动模式: 静态/动态
* 动态运动
* 加速度: 见开头“基本规则”
* 速度阻力系数: 可以对粒子位移运动产生阻力
* 旋转加速度: 见开头“基本规则”
* 旋转阻力系数: 可以对粒子旋转运动产生阻力
- 粒子生命周期
销毁表达式该表达式返回结果为true时销毁粒子。
无限生命周期: 没有最大生命周期的限制。
最大生命周期表达式: 计算结果为float类型作为最大生命周期粒子到达这个时间就会销毁。
销毁平面:当粒子穿过这个平面是会被销毁,平面表达式为: A*x + B*y + C*z + D = 0
如果想限制粒子只能在某些地方活动,可以设置“在这些方块上则销毁”或“不在这些方块上则销毁”属性, 例如在把“minecraft:water”设置在“不在这些方块上则销毁”则离开水的粒子就销毁水里的气泡就可以这么做。
- 碰撞
- 启用表达式
如果表达式计算结果为true 则启用碰撞功能。
- 阻挡系数
当粒子碰撞时改变粒子的速度,用于模拟碰撞时的摩擦/阻力,值越大阻力越大
- 反弹系数
设置为0时不反弹设置为1时反弹至原来高度以此类推。
- 碰撞半径
用于减少颗粒与环境的相互渗透注意这必须小于或等于0.5单位
- 碰撞后销毁
## molang 变量
Molang是一种简单的基于表达式的语言用于在运行时进行快速、数据驱动的值计算并与游戏内的值和系统直接连接。【[详见](https://learn.microsoft.com/en-us/minecraft/creator/reference/content/molangreference/examples/molangconcepts/molangintroduction)】。
在MC配置里经常使用到Molang表达式粒子特效也不例外。Molang很简单只要会加减乘除和函数调用就能写Molang表达式。但首先必须知道的是在Molang里的值类型只有float(浮点形)如果在一个语境下需要表达true或false则0.0 表示 false 其他情况表示true。
编辑器里如果一个属性值可以是molang表达式则在输入框后面会有一个大写M。
![](./picture/mics_particle/molang_input.png)
粒子特效里的molang变量有两种一种是内置变量一种是自定义变量。
- 内置变量
![](./picture/mics_particle/molang_variable.png)
可以看到,所用变量都是以"variable."开头的我们在写表达时也可以使用简写形式“v.”。需要注意变量的作用域问题,这里有两个作用域,分别是发射器和粒子,粒子作用域的变量无法在发射器作用域使用,但是发射器作用域的变量可以在粒子作用域使用。例如 variable.particle_age表示当前粒子的寿命只能在粒子作用域使用在发射器作用域使用是无意义的。
如下图制作一个沿着y轴移动的粒子v.particle_age表示粒子当前的寿命随着时间的推移而增加所以可以看到粒子延y轴方向移动。
![](./picture/mics_particle/molang_variable_1.png)
- 自定义变量
molang变量需要先定义(声明)才能使用,例如:
- “v.a = v.a + 1;” 这个表达式会有运行时报错因为v.a 是一个未定义的变量。
- “v.a = 0; v.a = v.a + 1;” 这个表达式是正确的,
第一个语句定义了v.a变量第二个使用了v.a的变量。
所以有必要了解自定义变量的运行时机。
![](./picture/mics_particle/molang_variable_2.png)
这里有四个地方可以填molang表达式他们运行时机如下
- 变量声明
在粒子发射器生成时即特效实例生成时运行一次。一般用来定义变量v.a = 0;
- 发射器Tick
发射器每一帧更新都会运行一次。
- 粒子更新Tick
每个粒子更新时都会运行一次这里是在粒子作用域里运行的所以可以使用像v.particle_age的变量。
- 粒子渲染Tick
每个粒子渲染时都会运行一次这里是在粒子作用域里运行的所以可以使用像v.particle_age的变量。
与“粒子更新Tick”区别当调用mod.client.component.particleSystemCompClient.ParticleSystemCompClient.Pause 接口时特效停止更新但是依然有渲染所以“粒子更新Tick”会停止运行但“粒子渲染Tick”依然运行。
另一种声明自定义变量的方式是使用曲线。mc提供了4种曲线的支持linear线性bezier贝塞尔catmull-rom bezier-chain贝塞尔链
- 计算结果变量
这里输入就是要声明的自定义变量的名字。粒子每一次渲染前都会根据当前曲线重新计算出变量的值。
- 曲线类型
有4种类型的曲线可以把每一种曲线都认为是一种函数方程。
- 输入变量
作为曲线函数方程的输入参数
- 水平范围
我们的曲线方程都规定输入参数的取值范围是是[0,1], 但是大部分时候我们的输入参数是超出这个范围的,这个值就是用来对输入变量做归一化处理,即输入到曲线方程的参数其实是:输入变量/水平范围
- nodes
当前曲线视图,可以点击右边按钮进行编辑。
下面展示如何使用曲线自定义变量让粒子在xy平面上做一个曲线运动
![](./picture/mics_particle/curve_2.png)
这里输入变量是粒子的当前生命长度水平范围取值为1表明这个曲线运动会在1秒钟完成。
![](./picture/mics_particle/curve_3.png)
![](./picture/mics_particle/curve_1.gif)
可以看到粒子在第一秒的轨迹是和我们在nodes属性里设置的曲线是相吻合的因为粒子的x坐标取了曲线的输入值y坐标取出了曲线的输出值。
## 发射骨骼模型
从2.6版本开始可以使用原版粒子系统发射骨骼模型该功能暂时不支持使用编辑器编辑只能通过手动修改json文件实现完整Demo链接可以点击 [这里](../../20-玩法开发/13-模组SDK编程/60-Demo示例.md#NeteaseModelParticleDemo)下载。
- 定义发射的模型
在发射骨骼模型之前需要先在开发包中定义好需要使用的骨骼模型,具体步骤参考[骨骼模型的使用](../6-模型和动作/04-骨骼模型的使用.md),将骨骼模型加入开发包后可以尝试在游戏中调用骨骼模型相关的接口验证资源是否正确。需要注意的是,引擎内置了[几种常用的材质](../7-材质与着色器/2-内置材质清单.md#网易扩展-entity-material-材质文件内容),能够覆盖大多数情况下粒子系统中骨骼模型的渲染,若需要使用自定义材质,需要参考内置材质的做法。
打开json文件在description属性中添加`basic_model_render_parameters`,然后使用`model_identifier`引用刚刚添加的骨骼模型,由于发射的骨骼模型已经定义好了贴图、纹理、材质,所以这里不需要再填写`basic_render_parameters`了,当`basic_render_parameters``basic_model_render_parameters`同时存在时,引擎会忽略掉`basic_render_parameters`并按骨骼模型粒子来处理:
```json
"description": {
"identifier": "netease:model_demo",
"basic_model_render_parameters": {
"model_identifier": "pet_model"
}
}
```
添加完后就能在游戏中使用该粒子特效了。
![](./picture/fbx_particle/fbx_particle_1.gif)
若模型需要使用自定义材质或Shader则需要对该材质添加USE_INSTANCE的定义。例如定义如下使用自定义材质的骨骼模型
```json
"entity_for_skeleton_customized": {
"+defines": [
"USE_SKINNING",
"USE_OVERLAY",
"NETEASE_SKINNING",
// 微软粒子发射骨骼模型当该模型使用自定义材质及shader时需要在材质define中加上USE_INSTANCE的定义
"USE_INSTANCE"
],
"+samplerStates": [
{
"samplerIndex": 0,
"textureFilter": "Point"
}
],
"fragmentShader": "shaders/glsl/netease_entity_skeleton_customized.fragment",
"msaaSupport": "Both",
"vertexFields": [
{
"field": "Position"
},
{
"field": "Normal"
},
{
"field": "BoneId0"
},
{
"field": "UV0"
}
],
"vertexShader": "shaders/glsl/netease_entity_skeleton_customized.vertex",
"vrGeometryShader": "shaders/entity.geometry"
},
```
对于USE_INSTANCE的使用可参考官方内置材质中的entity_for_skeleton_particle材质中使用的vertex shader。
- 定义模型使用的动作
此外粒子特效发射的骨骼模型还支持动作同样也需要先在netease_models.json中定义好相关的模型动画并导入资源。
然后在json文件中的components内添加`netease:particle_appearance_FBX`该component中包含三个属性
- `play_animation`
每个粒子播放的动画该动画需要预先在models/netease_models.json中定义好。
- `loop`
动画是否循环播放如果设置为false则会在每个发射器的生命周期开始时重新播放动画。
- `size`
设置发射出来的骨骼模型的大小支持molang表达式。
```json
"components": {
"netease:particle_appearance_FBX": {
"play_animation": "happy",
"loop": true,
"size": [1, 1, 1]
},
...
}
```
![](./picture/fbx_particle/fbx_particle_2.gif)
**注意**: 骨骼模型的粒子特效会屏蔽掉原有二维粒子特效的一些属性定义,比如`minecraft:particle_appearance_billboard`中的`size``uv`
**注意**: 每个粒子发射器内的所有粒子会保持同一动画,不同粒子发射器的动画则表现相对独立。
- 出于性能考虑,建议以下几点
- 每个粒子发射器能发射的最大数量控制在**50**个以内。
- 用于粒子系统的骨骼模型不宜太复杂,将顶点数控制在**1000**以内。
- 同一场景内不应创建过多的粒子发射器。

View File

@@ -0,0 +1,89 @@
---
front: https://nie.res.netease.com/r/pic/20230130/5a8830ad-b293-4837-a9a4-c06fe531a8c3.png
hard: 入门
time: 15分钟
---
# 中国版特效创建与使用
本篇文档主要介绍以下内容:
1. 粒子特效和序列帧特效的区别。
2. 如何创建/导入特效。
3. 制作第一个粒子特效和序列帧特效。
## 粒子特效和序列帧特效的区别
中国版特效可以用来挂接到中国版骨骼模型上。中国版特效又分为**中国版粒子特效**和**中国版序列帧特效**两种类型。
1. **粒子特效** 是通过在场景中生成大量粒子图像来产生视觉效果,每个粒子都代表着效果中的单个元素,所有的粒子组合起来就形成了完整的粒子特效。
2. **序列帧特效** 是通过在场景中绘制一张单面片的贴图,在这个贴图上不断的更换新的图片,这个过程形成完整的序列帧特效。
## 创建/导入中国版特效
在资源管理器点击【新建】-【特效】-【中国版特效】可以新建中国版粒子特效或序列帧特效。
![](./picture/A19.png)
所有中国版特效都存放在 effects 文件夹下,通过在资源管理器点击特效文件,可在右侧属性窗口中查看并修改相应的属性,具体属性细节可以参考[特效属性说明](./70-中国版特效属性详细说明.md)。
> 由于特效属性皆已支持可视化编辑操作,不建议开发者手动修改特效源文件,以免造成特效文件损坏。
如果开发者有现成的中国版特效文件需要导入编辑器,可以在资源管理器中点击【导入】-【特效】-【中国版特效】。
![](./picture/A20.png)
## 制作一个中国版粒子特效
首先来制作一个红色buff粒子特效步骤如下
1. 点击通过资源管理器新建文件向导创建中国版特效选择粒子输入名称fire_buff这样在资源管理器的 effects 文件夹下会创建一个名为 fire_buff.json 的文件,点击该文件即可在属性面板查看粒子属性。特效在创建后会自动选中,这样属性栏会显示该特效的相关属性。
2. 在基础属性下,将初始方向(最大),初始方向(最小),初始速度都设置为 0这样即可创建一个不会移动的粒子。
![](./picture/A21.png)
3. 将粒子尺寸(最大),粒子尺寸(最小)都设置为 0.5,这样创建了一个固定大小为 0.5 的粒子。
![](./picture/A22.png)
4. 在发射器下将最大粒子数量修改为1这样同时只会有一个粒子出现但是由于生存时间默认为 1即粒子存在 1 秒后就会被销毁,所以粒子会每秒闪烁一次,为了防止这种情况,将粒子的生存时间改为 999 会经过999秒才会被销毁。
![](./picture/A23.png)
5. 修改完粒子后可以开始预览粒子首先将effects文件夹中的的 fire_buff.json 拖拽到挂机面板下的挂点结构中这里我们拖拽到left_arm结构中也就是Steve的左臂上拖拽完成后点击选中挂接结构中left_arm再点击时间轴上的播放按钮即可在预览窗口中看到粒子特效了。
> 挂接特效绑定会在第三节详细介绍,这里只用跟着动图操作即可,如果现在就感兴趣,可以去[《特效挂接到模型》](./40-特效挂接到模型.md)查看更加详细的说明和演示。
![](./picture/B1.gif)
下面我们将这个buff特效修改为红色。如下图所示在属性面板展开动态属性点击动态颜色按钮进行修改。
![](./picture/B2.gif)
> 当没有任何设定时粒子默认颜色是白色点击了粒子颜色后可以看到默认的粒子颜色被修改为从白色到黄色的渐变。横坐标表示粒子生命周期百分比由于我们把粒子生命周期改为了999即粒子在产生时为白色逐渐变黄然后在999秒的时候变成黄色。
为了把粒子变红,所以只用把粒子的整个周期的颜色改成红色即可。改掉后关掉动态颜色属性设置,点击时间轴的播放,可以看到粒子已经变成了红色。
这样,我们就成功地制作了第一个粒子特效,如果有希望了解更多的粒子属性可以参考[中国版特效属性说明](./70-中国版特效属性详细说明.md)。
## 制作一个中国版序列帧特效
用与之前相同的方法我们可以使用资源管理器的新建文件向导创建一个名为snow的中国版序列帧特效。
创建完后观察属性面板可以发现中国版序列帧特效的属性相对于中国版粒子特效来说少了很多。这是因为自定义序列帧特效的主要是通过Texture Packer软件生成的序列帧贴图和序列帧配置文件来控制在编辑器内能控制得属性较少。
> **序列帧贴图(.png)和序列帧配置文件(.json)**
>
> 序列帧贴图是将多个贴图以某种规律拼接在一起后输出成一张单个的图片,其中合在一起的规律就写在序列帧配置文件里。更加具体的分析可以查看[序列帧配置文件解析](./90-中国版序列帧配置文件解析.md)。
我们使用Texture Packer生成了序列帧贴图和配置文件后直接将贴图从外部文件夹拖动到编辑器内序列帧属性窗口的【贴图】字段即可。如下图所示将外部文件夹下的 `snow_3.png` 文件拖动到序列帧属性栏的贴图上,即可看到贴图的文字变成 `textures/sfxs/snow_3.png`,拖动完成后,序列帧特效的贴图就已经改变并生效了。
> 拖动序列帧贴图时,特效编辑器会自动将序列帧贴图对应的序列帧配置文件也一并复制过去。被拖动的文件存放在 `textures/sfxs` 文件夹下。
通过修改属性将序列帧特效制作完毕后,同样再将特效文件拖动到挂接结构对应的节点上,选中节点后,点击时间轴上的播放按钮,即可看到该序列帧特效。
![](./picture/B3.gif)
目前我们制作出来的效果还比较基础,在后续文档中我们将进一步了解如何调整中国版特效在模型上的挂接位置,及如何控制特效播放时间。

View File

@@ -0,0 +1,167 @@
---
front: https://nie.res.netease.com/r/pic/20230130/7586f6c1-50dd-4b4c-ab22-9661becac87e.png
hard: 入门
time: 20分钟
---
# 特效挂接到模型
本篇教程主要介绍以下内容:
1. 原版粒子特效挂接到原版Blockbench模型。
2. 中国版特效挂接到中国版骨骼模型。
> **注意:**
>
> 上面两套挂接关系是不能相互交叉的(例:不支持将原版粒子特效挂接到中国版骨骼模型上)。
## 原版粒子特效挂接到原版模型
原版生物模型是由Blockbench软件制作的而原版粒子特效是有Snowstorm软件制作的。关于原版模型的制作请参考[原版模型制作指南](../6-模型和动作/01-原版模型制作指南.md)。
接下来我们将介绍原版模型、原版粒子的相关知识,及其挂接操作。
### 1. 原版模型结构介绍
原版Blockbench模型是由一个有一个立方体组成而多个立方体可以合并为一个 **组group** 结构。换句话说,一个组是单个或多个立方体的集合。它的作用就类似于骨骼模型中的骨骼。
> **注:**
>
> 在其他文档中“Group”也被翻译为原版模型的“骨骼”。这并没有实质性的错误但是为了和后文骨骼模型做区分本文还是译作“组”。
组在Blockbench的结构列表中显示为文件夹的形式可以展开查看组内的立方体而在特效编辑器中只能查看到“组”这一层看不到内部包含的立方体。
原版粒子想要挂接到原版模型上,是不能直接挂接到立方体或者组上的,因为它们的位置是相对固定的,我们不可能为了调整特效的位置而去改边模型本身的形状。因此,原版模型引入了**锚点locator**,来辅助粒子特效挂接。
原版粒子特效必须挂接在锚点上而锚点必须要创建在组下面如下图左边是锚点在Blockbench中的展示右边是锚点在特效编辑器挂接面板结构列表中的展示。在模型播放动作时锚点会跟随组移动但是开发者可以自由调整锚点对组的位置、旋转来控制特效生成的相对位置和旋转角度。
![](./picture/A25.png)
如果导入的模型本身自带锚点,则这些锚点会在结构列表中显示出来。同样,开发者也可以在模型的组上右键,选择【新建锚点】并且为其命名,即可创建一个新的锚点,用来挂接原版粒子特效。
![](./picture/B4.gif)
### 2. 原版模型的挂接面板
原版模型的挂接面板如下图所示:
![](./picture/A24.png)
|序号|模块名称|模块介绍|
|---|---|---|
| ①|模型|通过下拉框选择要挂接的是哪个模型。在这里选择一个原版模型,下面其他内容显示的就是原版模型的格式。|
|②|动作 |指定需要挂接特效到哪一个模型动作上。受限于原生游戏设定原版特效的挂接信息是绑定到原版模型的动作上的一个动作对应一套特效挂接。如果你需要在B动作上使用与A动作完全一样的特效则需要在B动作上重新挂接一遍无法直接复用。|
| ③|结构列表 |用于展示原版模型的组结构、组内的锚点,以及锚点上挂接的特效。|
### 3. 原版粒子特效的挂接至锚点
想要将原版粒子特效挂接到原版模型上只需要从资源管理器窗口将特效json文件拖至希望挂接的锚点上即可完成挂接。
如果需要修改当前锚点位置、旋转角度,只需要选中锚点后,点击左上角的【移动】或【旋转】按钮,即可在预览窗中显示对应的变换拖柄,方便我们进行可视化拖拽调整。调整完毕后如果需要隐藏拖柄,点击【复位】按钮即可。
![](./picture/B5.gif)
挂接完毕后,我们切换至时间轴窗口,可以看到时间轴显示出了刚才挂接的特效,及其所在的锚点名称。点击左上角的【播放】按钮,即可预览动作播放时的特效效果。
> 常见问题:
> 1. 如果微软粒子特效挂接的bb模型动作时长为0则在编辑器中可能会出现同时多次发射该粒子的情况。
> 2. 如果bb模型动作时长不为0但是仍然出现了动作播放时仍然出现了两次播放该粒子的情况请检查下所挂接的动作json文件中是否存在“loop”字段如果存在将其删除。
> ![](./picture/A28.png)
## 中国版特效挂接到中国版骨骼模型
接下来我们将介绍原版模型、原版粒子的相关知识,及其挂接操作。
### 1. 中国版骨骼模型的挂接面板
中国版骨骼模型的挂接面板如下图所示:
![](./picture/A26.png)
|序号|模块名称|模块介绍|
|---|---|---|
|①|模型|用于显示和修改当前挂接模型名称。|
|②|第一人称模型|用于显示和修改当前挂接模型的第一人称模型。具体用法可参考[第一人称模型修改](./10-模型导入.md#第一人称模型修改)|
|③|第一人称模型动作|用于显示和修改当前挂接模型的第一人称视角播放的模型动作|
|④|动作列表|用于显示和修改和预览当前挂接模型的骨骼动画,并为每个动作提供了单独的分组选择下拉框,开发者可以在此选择每个动作使用不同的分组,点击某一动作并在时间轴窗口点击播放按钮,可以在预览窗中查看动作播放效果(如下图)。<BR>另外特效编辑器为每个模型都默认添加了一个空动画“通用”,在“通用”下,模型不会播放任何动画。</BR>|
|⑤|挂点列表|用于显示和管理骨骼模型当前的骨骼节点和特效挂接结构。挂点列表包含挂接分组、挂点结构、挂接点和挂接资源如图中ABCD所示。|
![](./picture/B6.gif)
> **注:**
>
> Steve **不算骨骼模型**所有没有骨骼动画。Steve 身上的head、body、left_arm等结构我们统称为**部件**。
中国版模型的**挂点列表**相对复复杂,下面我们进行详细说明。
**A. 挂接分组:**
存放一系列挂接信息,通过创建多个不同的分组可以有效管理同个模型不同状态下的挂接信息,当前挂接分组主要用于第④点中的动作列表,可为每一个动作选择不同分组下的挂点信息以达到切换特效的功能。
挂点分组右侧的 【+】按钮可以新增挂点分组每个分组右侧的【×】可以删除当前挂点default分组只能清空挂接信息不可删除
**B. 挂点结构:**
通过列表或树结构实时展示当前挂接模型的骨骼/部件结构以及挂点、特效信息。
**C. 挂点:**
用于挂接特效资源等,与原版模型中的“锚点”功能相同。挂点可以调整特效相对于骨骼的位置、旋转等。
**D. 挂接资源:**
中国版粒子特效、序列帧特效、骨骼模型等我们需要挂接到当前模型身上的资源。可以直接挂接到骨骼模型、部件(无法挂接模型)或挂点上。
**E. 右键快捷操作:**
在挂点列表的任意节点右键可触发快捷操作,对于不同类型节点支持的快捷操作如下:
|右键点击对象|可进行的快捷操作|
|---|---|
|骨骼|新建挂点、绑定模型、复制分组(挂点信息)、粘贴分组(挂点信息)、复制(当前节点挂点信息),粘贴(当前剪贴板的特效信息),粘贴信息(当前节点挂点信息)|
|部件|新建挂点、复制分组(挂点信息)、粘贴分组(挂点信息)、复制(当前节点挂点信息),粘贴(当前剪贴板的特效信息),粘贴信息(当前节点挂点信息)|
|挂点|删除、重命名、复制分组(挂点信息)、粘贴分组(挂点信息)、复制(当前节点),粘贴信息(当前节点挂点信息)、粘贴(节点)、创建副本|
|特效|删除、复制分组(挂点信息)、粘贴分组(挂点信息)、复制(当前节点)|
### 2. 中国版特效挂接至挂点
首先点击挂接模型,将 Steve 切换到 datiangou即可看到人物变成了大天狗的模型。我们将把名为`fire_buff`的特效挂接到大天狗的左手。
创建挂接分组,点击【+】按钮新建挂点分组,输入`buff`,即可创建`buff`分组,然后在该分组选中挂点结构中的`l_arm`,点击【新建挂点】按钮,创建挂点`fire01`
![](./picture/B7.gif)
> 注意:模型的具体挂接位置是由模型本身确定的
点击资源管理器,将里面的 `fire_buff.json` 拖入到`fire01`挂接点中点击时间轴的播放即可看到模型的左肩部产生红色buff特效。
![](./picture/B8.gif)
同样地,我们在大天狗右臂(`r_arm`)新增一个挂点`fire02`,并挂接一个`fire_buff`特效。
![](./picture/B9.gif)
修改了 `fire02` 后,为什么已经在左肩和右肩都挂了粒子特效,仍然只有右肩在播放呢?这是因为我们开启了【仅播放子配置】选项。我们可以按照自己的需求,采用以下两个方法恢复`fire01`下的特效显示:
- 从挂点结构修改,当点击某个挂接点时,仅仅会显示该挂接点的包含特效,所以我们只需点击 `root`根节点 挂接分组即可全部显示。如图所示:
- 取消勾选仅播放子配置取消勾选后会播放当前挂接模型分组下的所有特效与选中root根节点效果一致如图所示:
![](./picture/B10.gif)
挂接粒子特效之后,接下来开始挂接序列帧特效。由于序列帧特效是一个光圈,期望是将其挂接到两个位置:一个是人物的背后,另一个是人物头顶。
我们新建 `snow01` 挂接点,选择挂机位置为 `spine`可以看到序列帧特效正好在人物的身上如果觉得看不清可以点击【预览设置】选择【主角和相机分离】这样可以360°查看人物。
![](./picture/A27.png)
如果我们需要调整特效挂点的位置,需要使用到【位移】、【旋转】变换拖柄,它们的操作与上文中原版模型锚点的变换拖柄操作方法相同。
> **注意:**
>
> 【位移】仅可在模型为骨骼模型并且**选中了一个挂点**时才可用如果是默认的Steve模型无法使用位移功能
另外,我们也可以选中挂点后,在右侧属性面板对其【偏移】、【旋转】参数进行精细调整。
例如我们可以使用变换拖柄将`snow01`的特效调整到模型背后。
![](./picture/B11.gif)

View File

@@ -0,0 +1,95 @@
---
front: https://nie.res.netease.com/r/pic/20230130/643514fa-d862-46a7-b480-2e0a56689fe1.png
hard: 入门
time: 10分钟
selection: 1
---
# 时间轴功能
将特效挂接到模型,只能帮我们实现特效在某个位置播放,但是并不能控制特效具体在模型动作的哪个时点开始播放。想要控制特效播放的时机,就需要用到特效编辑器的**时间轴功能**。
除了控制特效播放时点外,时间轴还支持音效挂接和播放控制。
## 时间轴界面划分
时间轴窗口的界面主要分为3个模块
![](./picture/A29.png)
## 时间轴功能简介
下面我们将按模块依次介绍时间轴的功能:
### 1. 播放控制区
用于控制模型动作的播放。包含5个功能按钮从左至右依次为
- 播放/暂停
- 停止
- 跳转到前一帧
- 跳转到后一帧
- 循环播放、单次播放切换
### 2. 结构树
结构树的功能包括:
**1展示特效挂接**
结构树会按顺序依次展示当前模型结构中,挂接了特效的挂点或锚点,及它们下面挂接的特效。
点击挂点/锚点左侧的三角形按钮,可以折叠其下方的特效。
**2控制特效显隐**(仅中国版骨骼模型可用)
对于中国版骨骼模型,如果开发者仅希望查看当前已挂接的特效中的部分特效效果,可以点击特效前面的小眼睛按钮,来隐藏多余的特效显示。
![](./picture/B12.gif)
**3挂接音效**
结构树下方还有【音效】标签,点击右侧的【+】号可以为动作添加音效。选中已添加的特效,可以在右侧属性窗口通过下拉框修改具体的音效种类。
> 目前时间轴只支持添加原版游戏自带的音效。
![](./picture/B13.gif)
- 如果想删除已挂接在中国版骨骼模型上的音效,点击其右侧的【垃圾桶】按钮即可。
- 如果想删除已挂接在原版模型上的音效,需要右键点击后选择【删除音效】。
### 3. 时间轴编辑区
时间轴编辑区的主要功能为控制已挂接的各个特效和音效的播放开始时点。
**1预览功能**
提供动作的预览功能是时间轴的最基础任务。当我们在左侧挂接面板选择了一个动作,时间轴顶部就会显示出两个蓝色的小拖柄,它们分别位于动作的第一帧和最后一帧,用于指示动作预览的起点和终点。我们点击播放按钮后,动作就会从预览起点开始播放,到达预览终点后停止。播放过程中,会有一个当前帧指示器标出播放进度,指示器走到预览终点,即代表播放结束。
![](./picture/A32.png)
预览起点和终点是可以手动调整的。当我们只需要观察动作的一部分时,拖动预览起点和终点拖柄来限制预览范围。
![](./picture/B14.gif)
**2特效播放时点控制**
特效挂接到模型动作后默认都是从动作的0s处开始播放的。有时我们希望他在动作的中间某个时点开始播放这就需要用到特效拖柄来调整它的播放时间。
拖动特效时间轴上的拖柄,我们可以让特效在动作时间范围内的任意时点开始播放。如果你需要更加精确地调整特效播放的时机,可以点击某个特效的时间轴后,在右侧时间轴属性面板直接调整它的延迟数值。
![](./picture/B15.gif)
> **注意:**
>
> **本段说明仅针对中国版特效,原版粒子特效不受影响**
> 中国版特效(粒子和序列帧)自带“延迟开始播放”属性。初次挂接到骨骼模型时,中国版特效在时间轴上的播放起点将读取其配置中“延迟开始播放”字段的值。此时如果我们拖动了时间轴上的拖柄,相当于放弃了粒子配置中的“延迟开始播放”字段,而采用时间轴上新的延迟设置。我们更推荐使用时间轴延迟(因为修改配置中的延迟无法做到实时预览,只能删除特效后重新挂接),但如果您希望保留并使用原本配置中的设置,请勿调整时间轴拖柄。
>
> ![](./picture/A33.png)
> **提示:**
>
> 特效拖柄可以拖至模型动作结束时点之后,即代表在动作播放完之后一段时间播放该特效。但需要注意的是,特效编辑器只能播放预览起点和终点以内的时间。如果你的特效播放时点晚于预览终点时间,则需要在开发包中自行测试调整。
**3音效播放时间控制**
与特效播放控制相同,可以通过拖柄调整或在右侧属性菜单精确调整。在此不再赘述。

View File

@@ -0,0 +1,118 @@
---
front: https://nie.res.netease.com/r/pic/20230130/db68a109-78fc-409b-bce1-de52abd118fe.png
hard: 入门
time: 10分钟
---
# 预览功能
本篇教程主要介绍以下内容:
1. 预览面板功能。
2. 使用预览面板预览模型和特效。
## 预览面板功能
默认的预览面板如图所示:
![spark_preview_panel](./images/preview_panel.png)
特效模型预览用于快速的预览指定模型和挂在其身上的特效,不仅如此,也可以在场景中添加其他模型和特效。
其中各个参数说明如下:
- **屏蔽左键攻击**用于开关是否屏蔽Steve左键攻击的动作。
- **主角和相机分离**用于开关是否让相机可以360°查看模型视角默认的游戏视角仅能查看主角的正面或者背面而且视角固定通过打开视角分离可以更为方便的查看模型。
![image](./images/create_binding07.gif)
- **预览分组**:保存和管理预览设置的一系列设置和特效模型的挂接信息,通过切换分组可以快速切换预览多种配置的场景特效和模型。
- **场景模型**,用于在场景中批量显示任意模型,其配置项如下:
![spark_Preview_model](./images/preview_other_model.png)
- 模型:用于选择显示的模型(仅支持骨骼模型)。
- 动作:模型预览时播放的骨骼动画。
- 挂接分组:模型预览时选择特效的挂接分组。
- 使用主角位置:勾选起来会默认使用当前主角位置,如果取消勾选,则可以将模型放置于指定坐标中。
- 旋转:用于修改模型的旋转角度。
- **场景特效**:用于在场景中任意地点显示自定义特效,其配置项如下:
-
![image](./images/preview_other_effect.png)
- 特效:用于选择要播放的特效,仅支持位于 effects 文件夹下的网易自定义特效。
- 使用主角位置:勾选起来会默认使用当前主角位置,如果取消勾选,则可以将特效放置于指定坐标中。
- 旋转:用于修改特效的旋转角度。
## 预览模型和特效
了解了以上预览功能后,可以直接在场景中添加模型和特效了,首先来添加特效,点击场景特效上的 + 号,选择已有的 fire_buff.json点击播放即可看到特效在场景中被渲染。
> 为了显示方便,这里将模型修改为不带任何特效的 Steve。
如图为演示预览场景特效:
![image](./images/demo_preview_effect.png)
如图为演示预览场景模型:
![image](./images/demo_preview_model.gif)
预览功能整体来说比较简单,主要是为了让玩家能够更加方便的预览多个模型和多个特效。
## 预览手持物品绑定位置
当开发者希望用骨骼模型作为玩家模型时,此时玩家如果手持一些原版的物品,则会有可能出现手持物品位置与骨骼模型无法匹配和对应的情况,如下图:
![图片](./images/V29boneitem.gif)
为了解决上述问题在2.8新增了<a href="../../../mcdocs/1-ModAPI/接口/模型.html#binditemtobone" rel="noopenner">BindItemToBone接口</a>,该接口可以将玩家主副手手持物品的位置绑定到骨骼模型的某个骨骼中,并且支持偏移、旋转和缩放。
开发者可以在制作骨骼模型时单独为玩家手持物品的位置增加一个透明骨骼,再调用上述接口,即可将手持物的位置设置到对应位置,再根据表现调整偏移、旋转和缩放参数。
为了简化上述来回修改接口调整参数值的过程,在特效编辑器新增了手持物品预览的功能,具体使用方法如下:
1. 进入特效编辑器,切换到对应的骨骼模型
2. 选中任意想要绑定的骨骼
![图片](./images/V29finemodel.png)
1. 点击属性面板,找到手持物品预览相关属性
2. 调整参数,勾选预览,即可在预览窗观察玩家手持的物品被绑定到当前选中的骨骼的效果。
![图片](./images/V29editmodel.png)
> 注意该功能仅供开发者调试最佳的绑定参数无法直接生效到作品请自行在挂在骨骼模型到玩家身上后调用BindItemToBone接口设置对应的参数。
## 预览模型动画关键帧信息
当挂接特效时,经常会出现开发者希望特效的出现和持续时间与某个关键帧的时间完全一致,但无法确切知道关键帧的时间,难以匹配,现在,当你选用某个骨骼时,属性面板会显示出该骨骼的所有关键信息,如下图所示。
![图片](./images/showkeyframe.png)
## 修改和预览steve皮肤贴图
当您未制作模型,仅希望修改和测试一张玩家皮肤贴图时,您可以将皮肤贴图导入`resource_pack_xxx/textures/models`目录下,在特效编辑器选择steve默认模型时其下方会出现【皮肤贴图属性】此时开发者可以修改和预览皮肤贴图如下图所示。
![图片](./images/stevepng.png)
## 调整预览窗口的分辨率
如您特别关注某个分辨率下特效的效果是否准确,您可以调整工具栏上的分辨率预设类型和适配基准,帮助您更好观察指定分辨率的效果,如下图所示:
![图片](./images/editscreensize.png)

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,407 @@
---
front: https://nie.res.netease.com/r/pic/20230130/e3c80bef-08f6-455e-89cd-c5e8902ed470.png
hard: 入门
time: 30分钟
---
# 中国版粒子配置文件解析
本文档主要包括三个部分:
- [粒子属性介绍](#particleAttr)
对粒子的每一个属性进行了介绍方便读者了解particle json
- [粒子效果规范](#particleRule)
对游戏中最大可支持的粒子效果提供了约束,保证粒子效果在大部分机型上能够流畅运行
- [粒子调试指令集](#particleOp)
针对粒子编辑器暂时不能外放的现状,提供了实时预览粒子的游戏指令集,方便调试粒子效果
<span id="particleAttr"></span>
## 1. 粒子属性
粒子特效的配置文件为json格式如下图所示
![reg1-1](./picture/particle/reg1-1.png)
客户端中的粒子特效会根据数值变化实时呈现不同的粒子效果以下为对粒子配置文件json的解释。
### 1.1 Initial
![reg1-2](./picture/particle/reg1-2.png)
关于粒子属性:
- 3个数值框的从左向右分别对应xyz如Constant Force、Direction等
- 2个数值框的从左向右分别对应最小值和最大值
- **粒子发射器的属性并不是完全如上对应的数值,而是最大值和最小值之间的一个随机值**
如上图Direction具有标有min和max的两个值分别对应最小值和最大值
- **粒子发射器发射的粒子实际为空间中的一个朝向相机的矩形面片这在粒子的size设置的时候只设置x,y得到体现。**
下面简单介绍每个属性的作用及样例:
#### Constant Force
粒子受力,相当于粒子运动过程中的加速度
![reg1-3](./picture/particle/reg1-3.png)
#### Direction
粒子发射的初始方向取值为min和max之间的差值
![reg1-4](./picture/particle/reg1-4.png)
#### Damping Force
阻力理解为方向与粒子速度方向相反的加速度,每一帧的运算的公式为:
<center>v = v - damping force * v</center>
v为粒子当前速度,所以damping force实际上起到了逆向加速度因子的作用。
![reg1-5](./picture/particle/reg1-5.png)
#### Active Time与Inactive Time
##### Active Time
粒子发射器活跃时间
![reg1-6](./picture/particle/reg1-6.png)
##### Inactive Time
粒子发射器冷却时间
![reg1-7](./picture/particle/reg1-7.png)
Active Time与Inactive Time这两个值是配合使用的即粒子发射器每活跃Active Time之后冷却Inactive Time然后继续循环
在使用的时候可以将Active Time当作发射器生命周期方便调试有时间限制的效果。如果将Active Time设置为0粒子发射器会一直发射没有停歇
普通效果建议不设置这两个值或者都设为0
需要实现循环喷射效果时可以使用这两个参数
#### Particle Size
粒子出生时的大小当前只有x,y值有效z值无效留给以后发射立方体用
游戏中一个地形块的大小为1以此作为尺寸参考
![reg1-8](./picture/particle/reg1-8.png)
#### Time To Live
粒子生命周期,即每个粒子的存在时间
![reg1-9](./picture/particle/reg1-9.png)
#### Velocity
粒子初始速度
![reg1-10](./picture/particle/reg1-10.png)
#### Rotation废弃建议使用Rotation Range
粒子初始角度即粒子绕z轴的旋转的角度0~360
![reg1-11](./picture/particle/reg1-11.png)
#### Rotation Speed废弃建议使用Rotation Speed Range
粒子自转速度每秒旋转Rotation Speed角度
![reg1-12](./picture/particle/reg1-12.png)
#### Rotation Range
粒子初始旋转角度即初始时刻粒子绕xyz三轴的旋转角度0-360
```json
{
"particleeffect": {
"rotationRange": {
"max": "90.0 90.0 90.0",
"min": "0.0 0.0 0.0"
},
...
}
}
```
#### Rotation Speed Range
粒子自转速度即绕xyz轴每秒旋转的角度0-360
```json
{
"particleeffect": {
"rotationSpeedRange": {
"max": "90.0 90.0 90.0",
"min": "0.0 0.0 0.0"
},
...
}
}
```
### 1.2 Variation
该参数与粒子生命周期内的形变有关
- Add粒子尺寸每秒增加倍数`size = size * (1 + add)`默认该值为0.0。
- Multiply粒子尺寸每秒尺寸缩放倍数`size = size * multiply`默认值为1.0。
- 每秒粒子尺寸的计算公式为:`size = size * multiply * (1 + add)`
![reg1-13](./picture/particle/reg1-13.png)
### 1.3 Color
#### Color
设置粒子颜色格式为RGBA
![reg1-14](./picture/particle/reg1-14.png)
#### Color Fade
该参数与粒子生命周期内的颜色变化有关
![reg1-15](./picture/particle/reg1-15.png)
粒子在生命周期中,可以在不同的时间点设置不同的颜色关键帧,粒子的颜色逐渐向关键帧渐变。
如上图所示粒子在0.00s时,颜色为(0.500.300.501.0)在0.5s时颜色值为(1.00.01.01.0)在2.0s时为(0.00.00.01.0)
#### Color与Color Fade
设置Color就不可设置Color Fade设置Color Fade就不可设置Color二者的关系是互斥的
如果二者均不设置,则直接读取贴图的颜色
#### Enable Color与Enable Texture
部分粒子配置中会出现"enablecolor"和"enabletexture"配置项,他们都能影响粒子颜色的计算流程:
- 粒子的初始颜色为纯白不透明
- 若Enable Color启用则粒子颜色会乘上Color或Color Fade中配置的颜色值否则跳过
- 若Enable Texture启用则粒子颜色还会乘上贴图的颜色否则只会乘上贴图的透明度
二者均不设置的情况下,
只要Color或Color Fade中任一配置存在则Enable Color启用同时Enable Texture禁用效果为使用设置指定的颜色
要是Color和Color Fade的设置均不存在则Enable Color禁用同时Enable Texture启用效果恰为直接读取贴图颜色。
### 1.4 Emitter
该部分主要介绍与发射器有关的参数
处于性能考虑每秒最多发射3000颗粒子
#### Number Of Particles
同时存活的粒子最大数量
![reg1-16](./picture/particle/reg1-16.png)
#### Emitter Size
粒子发射器尺寸,即粒子出生空间大小,(000)说明粒子都从原点出生
否则,粒子从定义的空间中随机位置生成
![reg1-17](./picture/particle/reg1-17.png)
#### Emission Rate
粒子发射率,数值越高,发射频率越高
左为min右为max
下图可以理解为最少每秒发射40次最多每秒发射50次
![reg1-18](./picture/particle/reg1-18.png)
#### Emission Shape
粒子发射器形状当前支持球形和立方体参数分别为“Box”、”Sphere”
![reg1-19](./picture/particle/reg1-19.png)
![reg1-20](./picture/particle/reg1-20.png)
### 1.5 Resource
#### Material
**无效,开发中。**
![reg1-21](./picture/particle/reg1-21.png)
#### Texture
可参考demo中的bb.png和bb.json进行阅读
- "name"为粒子纹理路径路径从textures开始不需要后缀
![reg1-22](./picture/particle/reg1-22.png)
如果想添加新的纹理需要将png必须为png文件放置在particle路径中
- "ani"为粒子序列帧
- "ani"中"name"为序列帧的json配置文件路径从textures开始不需要后缀
- "ani"中"fps"为序列帧播放帧率注意数字要加引号最小值为0默认值为30
- "ani"中"shuffle"为序列帧是否乱序播放第一帧就开始随机默认值为false注意不加引号图中未配置使用默认值
![reg1-23](./picture/particle/reg1-23.png)
上图中,"texture"的"name"对应的`textures/particle/bb`为序列帧贴图bb.png而"ani"的"name"对应的`textures/particle/bb`为序列帧json配置文件bb.json
[序列帧打包方式](./90-中国版序列帧配置文件解析.md#4-texture-packer使用配置)在序列帧文档中有介绍
### 1.6 Render
#### Blend Mode
混合模式,建议开发者多尝试一下
- "add"与背景色是叠加的关系
![reg1-24](./picture/particle/reg1-24.png)
- "blend"与背景色是覆盖的关系
![reg1-25](./picture/particle/reg1-25.png)
#### Face Camera Mode
可用模式:
- Rotate XYZ
粒子始终朝向相机,适合正方形面片
![reg1-26](./picture/particle/reg1-26.png)
- Direction
粒子Y轴朝向粒子运动方向适合线性扩散效果
![reg1-27](./picture/particle/reg1-27.png)
如下图所示粒子实际为x = 0.2, y = 2.0的长方形面片face Camera Mode为Direction
![reg1-27-1](./picture/particle/reg1-27-1.png)
建议开发者尝试改变burst.json中的参数观察效果可以帮助理解
#### Loop
颜色或贴图序列帧是否循环当粒子生命周期大于Color Fade或序列帧的时长的时候可以进入循环模式
![reg1-28](./picture/particle/reg1-28.png)
![reg1-29](./picture/particle/reg1-29.png)
<span id="particleRule"></span>
## 2. 粒子效果规范
- 粒子单幅贴图大小不要超过 32 * 32粒子序列帧贴图参考序列帧规范
- 小规模粒子
Particle Num <= 30, Particle Emitter Num <= 200
- 中规模粒子
Particle Num <= 100, Particle Emitter Num <= 50
- 大规模粒子
Particle Num <= 1000,Particle Emitter Num <= 5
<span id="particleOp"></span>
## 3. 粒子调试指令集
### 3.1 指令集
#### //crp \<name>
在玩家眼前创建粒子效果name为粒子配置文件名不包括”.json”后缀
#### ///rep <>
重新加载粒子效果,无参数
#### //rmp <>
移除游戏内所有粒子效果,无参数
### 3.2 使用样例
//crp fire
![reg3-1](./picture/particle/reg3-1.png)
![reg3-2](./picture/particle/reg3-2.png)
//rmp
<img src="./picture/particle/reg3-3.png" alt="reg3-3" style="zoom:150%;" />
<img src="./picture/particle/reg3-4.png" alt="reg3-4" style="zoom:150%;" />
//rep
加载mod时对应mod资源会被拷贝到如下目录中
```%AppData%\MinecraftPE_Netease\games\com.netease\resource_packs```
要动态修改粒子效果需要修改该目录下的同名mod中的对应粒子特效配置文件再使用`//rep`指令。
下图为fire.json所在的文件夹
![reg3-5](./picture/particle/reg3-5.png)
fire.json原先的配置及表现效果如下所示
![reg3-6](./picture/particle/reg3-6.png)
![reg3-8](./picture/particle/reg3-8.png)
修改fire.json中参数如下图后在游戏中输入`//rep`指令,可以看到该粒子效果发生了改变:
![reg3-7](./picture/particle/reg3-7.png)
![reg3-9](./picture/particle/reg3-9.png)
## 4. 致开发者
粒子效果非常灵活,熟练各个参数,可以做出非常出彩的效果
同时,各位开发者也一定不要忘记遵守粒子效果规范,毕竟游戏的性能是有限的

View File

@@ -0,0 +1,100 @@
---
front: https://nie.res.netease.com/r/pic/20230130/768c242f-92fb-4898-91ea-619fdc31ddfc.png
hard: 入门
time: 10分钟
---
# 中国版序列帧配置文件解析
## 1. 序列帧简介
《我的世界》中提供了序列帧类型的特效,序列帧本质上即为一个单面片的贴图,如果未设置始终面向摄像头,当观察角度位于序列帧的侧面时可以看出为一片面片
<center><img src="./picture/sfx/reg1-1.png" alt="reg1-1" style="zoom:70%;" /> <img src="./picture/sfx/reg1-2.png" alt="reg1-2" style="zoom:80%;" /></center>
当序列帧的贴图不断变化时即可以形成视觉上的动画效果因此可以用来实现序列帧动画特效。在游戏中一般需要将单个特效的所有贴图合在一起变成一幅大图上述中的特效包含9幅贴图将9幅图用合图工具Texture Packer合图如下所示
<img src="./picture/sfx/reg1-3.png" alt="reg1-3" style="zoom: 67%;" />
## 2. 序列帧json参数说明
序列帧动画主要包含一个json文件与一个贴图这两者由Texture Packer生成
其中json文件内容如下
![reg2-1](./picture/sfx/reg2-1.png)
其中包含frames和meta两个字段
- **"frames"** 表示每帧动画的贴图信息
- **"meta"** 字段包含合图软件相关的信息
开发者对此文件基本可以不用关注其中在frames字段中可以自己手动加入字段 **”scale”** 表示对该帧进行缩放没写默认为1倍缩放即为
![reg2-2](./picture/sfx/reg2-2.png)
另外该缩放功能支持插值,即在不同帧之间大小倍数不同时会进行平滑过渡,如果需要关掉插值则需要关掉插值开关(下文提到的[**"lerp_scale"**](#lerpScale)字段)
如果使用编辑器生成序列帧动画则会在此基础上多一个编辑器对应的json如下图所示
![reg2-3](./picture/sfx/reg2-3.png)
其中cylinder开头的配置为环状序列帧的功能
- **"cylinder_enable"** 表示是否为环状序列帧
- **"cylinder_frac_num"** 表示近似多边形的个数,即环状体由几个多边形组成
- **"cylinder_height"** 表示环状序列帧高度
- **"cylinder_radius_down"** 和 **"cylinder_radius_up"** 表示底部和顶部的环状半径
- **"face_camera"** 表示帧动画是否始终面向摄像机
- **"fps"** 表示帧动画的播放帧率,即一秒播放多少帧动画
- **"shuffle"** 表示是否开启随机播放帧动画
- **"layer"** 表示设置渲染层级默认设置为1设置范围为0-15,层级为1表示不开启渲染层级的功能开启后渲染层级高的会遮挡层级低的并且同一层级的特效会根据位置存在遮挡关系
- <span id="lerpScale"> **"lerp_scale"** </span>表示是否开启帧之间的插值
- **"loop"** 表示帧动画是否循环
- **"rot_speed"** 表示帧动画的旋转速度
- **"scale"** 表示帧动画的整体缩放
- **"tex_repeat_num"** 表示在x轴和y轴两个方向上重复的特效个数
- **"texture"** 为上述由texture packer生成的具体json特效路径
## 3. 序列帧贴图生成指南
序列帧贴图资源需要使用Texture Packer生成打包格式见下文[Texture Packer使用配置](#TexturePacker)
Texture Packer导出大图和json文件放置在`textures/picture/sfxs`
如下图所示序列帧贴图与普通贴图唯一的不同就是多了一个同文件名的json文件该贴图和json文件都是由Texture Packer导出
![reg3-1](./picture/sfx/reg3-1.png)
<span id="TexturePacker"></span>
## 4. Texture Packer使用配置
![reg4-1](./picture/sfx/reg4-1.png)
Texture Packer主要用来打包序列帧文件需要注意的配置如下
![reg4-2](./picture/sfx/reg4-2.png)
- Allow rotation不要勾选
- Trim mode选择为None
这样导出的大图中每一幅小图都一样大,**当前我们的序列帧绘制只支持大小相同的子图**
## 5. 序列帧贴图规范
- 贴图格式为 png
- 单张贴图大小不超过512 * 512
- 总像素数不要超过512 * 512 * 5

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 991 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 725 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 757 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 781 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 319 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 557 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 461 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 496 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 404 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 700 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 409 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 689 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 303 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 984 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 621 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 982 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 977 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 811 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 956 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 527 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Some files were not shown because too many files have changed in this diff Show More