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,30 @@
---
front: https://nie.res.netease.com/r/pic/20220408/16639574-e3de-4603-b64d-664b1fa77236.png
hard: 入门
time: 5分钟
selection: 37
---
# 模型制作方案
我的世界中国版支持两种模型格式,分别为原版模型与普通的骨骼模型。
| | 原版模型 |骨骼模型 |
| :---: | :---: | :---: |
| 制作工具 | Blockbench等 | 3D Max、CINEMA 4D、Autodesk Maya、Blender等 |
| 资源大小 | 小 | 略大于原版模型 |
| 模型风格 | 方块风格| 可支持各种风格,模型中可有曲面 |
两种模型在游戏中支持不同的使用场景,可根据需求调整模型制作方案。
| 使用场景 | 原版模型 |骨骼模型 |
| :---: | :---: | :---: |
| 生物模型 | 支持 | 支持 |
| 玩家模型 | 支持 | 支持 |
| 玩家第一人称模型 | 不支持 | 支持 |
| 模型骨骼绑定特效 | 不支持 | 支持 |
| 方块模型 | 模型文件格式做一定调整后可用于方块模型 | 不支持 |
| 装备模型 | 模型文件格式做一定调整后可用于装备模型 | 不支持 |
| PaperDoll | 支持模型显示,不支持指定动作播放 | 支持模型显示,也支持指定动作播放 |
| 模型贴图序列帧动画 | 不支持 | 支持 |
两种格式的模型制作请参照后续的文档。

View File

@@ -0,0 +1,225 @@
---
front:
hard: 入门
time: 分钟
---
# 原版模型制作指南
## 1. Blockbench
Blockbench 是由 JannisX11 开发的一款专门用于 Minecraft 3D 建模的免费软件。
使用软件Blockbench 3.4.2
官方网站https://blockbench.net/
因为官网源地址下载太慢依据软件的MIT协议这里提供一个国内的下载备份[地址](https://mcrealms.gdl.netease.com/Blockbench_3.4.2.exe)。
Blockbench有以下优点
* 软件操作简单,上手几乎没有门槛;
* 免费开源软件,任何人都可以自由的使用它
* 支持插件功能,可以方便的添加功能强大的插件;
* 制作的模型可以导出为 OBJ 文件,你可以使用任意现代化的 3D 建模软件渲染它,制作出好看的图片;
* 支持 Minecraft Java 版的方块物品建模Minecraft Java 版实体建模Minecraft 基岩版本的实体建模OptiFine 模组的实体建模等诸多功能。是你制作 Minecraft 模型不可或缺的工具。
![reg2-1](./picture/bbmodel/blockbench.png)
本文档我们将介绍如何使用Blockbench制作生物模型与动作。
**注意**Blockbench 3.x版本默认启用1.12.0版本基岩版模型。
下面,我们以制作“松鼠”模型和动作为例,详细说明如何制作模型和动作,最终输入资源路径为:示例\6-4 资源制作\工具和示例\bbmodel
## 2.模型制作流程
### 2.1 创建工程
![reg2-1](./picture/bbmodel/new_model.png)
### 2.2 参数设置
这里创建一个松鼠的模型文件名为squirrel模型Identifier为netease:squirrel贴图大小为64设置完直接点击“Confirm”进入下一步。
![reg2-1](./picture/bbmodel/setting.png)
### 2.3 导入贴图
在软件界面的左下角中找到贴图界面,导入模型将要使用的贴图,该贴图的大小应该和上一步中设置的参数一致,如下所示:
![reg2-1](./picture/bbmodel/import_texture.png)
### 2.4 创建模型几何
![reg2-1](./picture/bbmodel/edit.png)
如上图所示,在"**Edit**"标签下我们可以编辑几何模型区域1可以编辑模型区域2实时显示模型。
* 创建分组与立方体
在大纲栏Outliner可以通过创建分组来管理立方体。
![reg2-1](./picture/bbmodel/add_group.png)
如上图所示创建一个分组body里面包含两个立方体命名为body
* 编辑立方体
在创建分组与立方体完成之后选中指定的立方体如上图中第二个body便可以编辑其位置Position、大小Size、 轴心点 Pivot Point、旋转角度Rotation等信息。
* 编辑立方体贴图UV
![reg2-1](./picture/bbmodel/uv_texture.png)
如图所示,在左上角可以通过调整**X**和**Y**的值来调整“**当前编辑立方体**”使用的贴图。
### 2.5 导出模型
在完成模型编辑之后我们可以通过导出模型json便可以在游戏中使用。
![reg2-1](./picture/bbmodel/export_model.png)
在本示例中导出名称为squirrel.geo.json内容如下所示
```json
{
"format_version": "1.12.0",
"minecraft:geometry": [
{
"description": {
"identifier": "geometry.netease:squirrel", # 对应参数设置中的模型Identifier
"texture_width": 64, # 对应参数设置中的贴图大小
"texture_height": 64,
"visible_bounds_width": 4,
"visible_bounds_height": 1,
"visible_bounds_offset": [0, 0.5, 0]
},
"bones": [
{
"name": "body",
"pivot": [0, 5, 8],
"rotation": [-20, 0, 0],
"mirror": true,
"cubes": [
{"origin": [-3, 2, -2], "size": [6, 5, 10], "uv": [0, 0], "mirror": false},
{"origin": [-3, 7, 1], "size": [6, 1, 7], "uv": [22, 0], "mirror": false}
]
},
...
]
}
]
}
```
## 3.动作制作流程
首先,有一点我们需要清楚:动作是在模型的基础上,对模型的节点的位置、旋转角度进行调整。
### 3.1 界面说明
我们先来初步了解一下动作制作界面。
![reg2-1](./picture/bbmodel/edit_animate.png)
* 区域1编辑动作需要切换到"**Animate**"标签
* 区域2动作增加、动作删除、动作长度设置、动作预览、动作属性设置是否循环播放等
* 区域3动作关键帧编辑
* 区域4动作编辑管理
* 区域5模型分组大纲栏
* 区域6模型分组对应的骨骼瞄点
### 3.2 新建动作
![reg2-1](./picture/bbmodel/create_animate.png)
步骤如下:
* 点击创建动作按钮,弹出输入框;
* 输入动作名称如animation.squirrel.idle
* 点击确定
### 3.3 编辑动作
![reg2-1](./picture/bbmodel/edit_animate1.png)
* 选中需要编辑的动作
如图选中动作animation.squirrel.idle
* 选中模型立方体
如图选中节点head
* 选中动作时间节点
如图选中时间线上的0.5ms
* 插入关键帧信息
如图点击head下的Rotation右边的“+”按钮增加关键帧
* 编辑关键帧信息
如图编辑关键帧信息Rotation500
### 3.4 导出动作
![reg2-1](./picture/bbmodel/export_animate.png)
输入命名squirrel.animation.json后保存便得到我们需要的动作。
```json
{
"format_version": "1.8.0",
"animations": {
"animation.squirrel.idle": {
"loop": true,
"animation_length": 2,
"bones": {
"rearFootLeft": {
"rotation": {
"0.0": [0, 0, 0],
"0.4833": [15, 0, 0],
"1.6": [10, 0, 0],
"1.8833": [-10, 0, 0],
"2.0": [0, 0, 0]
}
},
...
}
},
"animation.squirrel.move": {
"loop": true,
"animation_length": 0.48,
"bones": {
"rearFootLeft": {
"rotation": {
"0.0": [5, 0, 0],
"0.1667": [125, 0, 0],
"0.4333": [5, 0, 0]
}
},
...
}
}
}
}
```
至此,我们可以将导出的模型和动作用于制作自定义生物了。

View File

@@ -0,0 +1,241 @@
---
front:
hard: 入门
time: 分钟
---
# 骨骼模型制作指南3DMAX)
## 1. 模型制作技术规范
本文档说明了如何使用软件MAX 2014制作符合《我的世界》规范的模型。
### 1.1 模型单位
![reg1-1-1](./picture/model/reg1-1-1.png)
### 1.2 朝向
![reg1-2-1](./picture/model/reg1-2-1.png)
### 1.3 贴图
- 只支持一张贴图,贴图名称必须为英文
- **模型制作当中,避免使用镜像或者对称!**
### 1.4 顶点
- **每个长方体通常是8个顶点整个模型应控制在300个顶点特殊模型可在1000以内**
- **每个顶点只绑定一根骨骼**
- **注意事项:法线检查**
模型制作完成提交前必须完成以下4个步骤
1. 属性中将模型设置为背面消隐,查看模型是否有反面,如果有的话 **flip检查过程当中多尝试**
![reg1-4-1](./picture/model/reg1-4-1.png)
2. Reset Xform **(多点击几次,然后塌陷)**
![reg1-4-2](./picture/model/reg1-4-2.png)
3. Mesh Select **与4一起点击完后不用操作直接塌陷**
![reg1-4-3](./picture/model/reg1-4-3.png)
4. STL Check
并最终转化为Poly模型提交此步骤可避免模型在引擎中显示出错。
如果模型出现法线问题,将法线出错的位置选择并反相 **flip** 即可。
![reg1-4-4](./picture/model/reg1-4-4.png)
### 1.5 动作输出注意事项
#### 1.5.1 关于蒙皮
- 骨骼架设使用纯bone
- 骨骼控制在20根以内最多不能超过50这种是为了做特殊boss用
- 需要添加rootupdown 三根骨骼
- root是质心的父级位移旋转都要归于坐标原点0.0
- up控制上半身质心的子级身体的父级
- down控制下半身质心的子级双脚的父级
- 所有的骨骼都要有链接武器挂件坐骑等都要链接给相应的手质心等位子可使用link
- 蒙皮选项当中的高级参数中,有个**骨骼影响限制,需要调为1**
![reg1-5-1](./picture/model/reg1-5-1.png)
#### 1.5.2 动作输出
- 文件版本为MAX 2014
- 输出文件命名使用拼音如技能_狂气输出spell_kuangqi
- 文件需要输出FBX输出文件夹命名英文
- 输出文件需要塌陷骨骼动画
- root、up、down骨骼不可以有动画
- 缩放动画必须用等比缩放,且不能有单轴向缩放
- 蒙皮与待机pose确认后再进行其余动作制作
**注意事项:模型当中不能有任何的中文**
#### 1.5.3 FBX输出设置
![reg1-5-3-1](./picture/model/reg1-5-3-1.png)
![reg1-5-3-2](./picture/model/reg1-5-3-2.png)
![reg1-5-3-3](./picture/model/reg1-5-3-3.png)
输出为FBX格式的文件后参考[教学中心-编辑器基础-关卡编辑器使用说明-资源管理-资源导入](../../15-资源管理/5-文件导入.md)转化为我的世界中可用的模型格式。
## 2. 制作导出流程
以大天狗制作流程为例
### 2.1 原画概念设计
1. 打开人形式神基础模型基础模型的每个格子单位为1就是像素单位不要改变这个大小
![reg2-1-1](./picture/model/reg2-1-1.png)
2. 利用材质球上色截图或者PS上色均可正面的效果可以比较快地确定颜色分布。
![reg2-1-2](./picture/model/reg2-1-2.png)
3. 增加外轮廓的辨识度突出的部分尽量归纳减少细节这一步使用PS绘制概念图。
![reg2-1-3](./picture/model/reg2-1-3.png)
4. 进一步增加轮廓的辨识度注意角色身上最具有特点的部位一个角色身上只有一到两个特征需要这样强调比如大天狗的翅膀。这一步同样使用PS绘制示意图背面也需要有设计。
因为风格限制不强制侧面的效果但是需要考虑到4分之一侧面的效果。
![reg2-1-4](./picture/model/reg2-1-4.png)
![reg2-1-5](./picture/model/reg2-1-5.png)
参考:《阴阳师》大天狗设计图,在转换为我的世界模型风格时,需要减少没有代表性的琐碎细节。
* 鞋子的造型需要直接归纳到腿部
* 翅膀的3层羽毛层次减少到2层边缘细节概括处理
**注意设计归纳的时候注意估算一下顶点数量小怪在300以下复杂模型在700以下BOSS在1000以下尽量低于最高值以免制作完成后超过难以修改。**
<img src="./picture/model/reg2-1-6.png" alt="reg2-1-6" style="zoom:67%;" />
![reg2-1-7](./picture/model/reg2-1-7.png)
### 2.2 建模附材质
#### 2.2.1 制作模型
根据绘制草图制作模型,建模部分可以在原本的格子上直接挤出来造型。**注意挤出的高度单位也是1**。
建模方法如下:
1. 根据游戏中的规范,用头部放大,然后删去不要的部分来建模(比如大天狗)。
**注意方法1与方法2不能使用在同一个部件上**
2. 如果头发造型过于复杂或者有动作上的可能性,则需要另外建模(比如酒吞童子)。
**注意检查挤出后不要有一些废面藏在模型里。**
![reg2-2-1](./picture/model/reg2-2-1.png)
#### 2.2.2 开始上色
因为我们使用的是一像素单位的像素格,使用为单个面赋予材质球的方式来上色。
**给同一个色相类型的材质球命名好编好号方便管理。比如黄色以Y开头Y-1 、Y-2类似**
区分好固有色后开始细分色阶同样一个固有色细分2~4个色阶不要太多细分太过细腻会削弱像素元素本身的美感。
![reg2-2-2](./picture/model/reg2-2-2.png)
![reg2-2-3](./picture/model/reg2-2-3.png)
### 2.3 材质球(贴图)处理
本步骤是为了方便整理材质,也可以不做
![reg2-3-1](./picture/model/reg2-3-1.png)
在上一步模型以及材质赋予步骤完成之后,参考上图步骤清空材质球选框,依次从左至右吸取头发、头部、身体等材质。(将会得到如上的多维子材质球)
制作中需要注意单个颜色的ID的排序参考上图由浅至深依次排列方便制作以及修改。
1. 按照下图中三个步骤,新建一个材质库
![reg2-3-2](./picture/model/reg2-3-2.png)
2. 保存材质库的命名以角色名称为命名之后材质目录中会出现该材质库下图示例yunv)
![reg2-3-3](./picture/model/reg2-3-3.png)
3. 选择单一材质球,依下图标识将该材质球加入材质库(所有材质球依次制作一遍)
![reg2-3-4](./picture/model/reg2-3-4.png)
注意材质球需要以部件名称为命名
![reg2-3-5](./picture/model/reg2-3-5.png)
4. 再次打开材质库可见所有材质球已经被导入材质库在材质库中右键保存入第一步中创建的mat文件中即可。**这么做的原因是为了方便整理材质球,便于调整颜色。**
![reg2-3-6](./picture/model/reg2-3-6.png)
### 2.4 后处理
#### 2.4.1 分UV
![reg2-4-1](./picture/model/reg2-4-1.png)
- 所有的UV线都必须横平竖直不能有倾斜否则会出现锯齿。
- UV边界需要像素填充通过烘焙可以扩边4个像素
- UV摆放原则身体结构按部位从上到下摆放不能颠倒朝向
- UV格子大小需要基本一致不能有太大的差别
#### 2.4.2 烘焙
**注意烘焙之前上传一版NXN做备份**
![reg2-4-2](./picture/model/reg2-4-2.png)
启用填充,烘焙贴图有扩边效果
![reg2-4-3](./picture/model/reg2-4-3.png)
贴图大小可以烘焙得大一点提高精度然后在PS里面缩小到**512X512**,注意缩小的时候使用邻近(硬边缘),因为都是像素格,这样缩小不会损失任何精度。
#### 2.4.3 减面
只留下必须的点面,多余的点面全部减掉,注意贴上烘焙好的贴图进行减面,**减的时候注意不要出现贴图拉伸变形的情况。**
![reg2-4-4](./picture/model/reg2-4-4.png)
![reg2-4-5](./picture/model/reg2-4-5.png)
### 2.5 完成
制作完的MAX文件贴上烘焙好的贴图的效果截图
![reg2-5-1](./picture/model/reg2-5-1.png)

View File

@@ -0,0 +1,182 @@
---
front:
hard: 入门
time: 分钟
---
# 骨骼模型制作指南Blender
## 1.模型制作技术规范
使用软件blender 2.82
### 1.1 模型单位设置
模型单位设置为:英寸
![unit_set](./picture/unit_set.png)
### 1.2 朝向
背对y轴x轴朝右z轴朝上
![chaoxiang](./picture/blender_chaoxiang.png)
### 1.3 贴图
只支持一张贴图,贴图名称必须为英文
**模型制作当中,避免使用镜像或者对称!**
### 1.4 顶点
每个长方体通常是8个整个模型控制在300个顶点特殊模型可以在1000以内
每个顶点只绑定一根骨骼
注意事项:法线检查
模型制作完成提交前必须完成2个步骤
- 检查法线朝向
![faxiang](./picture/blender_faxiang.png)
- 游标归于模型中心,模型位于场景中心
![notice2](./picture/blender_notice2.png)
### 1.5 关于蒙皮
对于蒙皮,主要注意以下几点:
1骨骼需要有总控root骨骼且每部分只能用一根骨骼骨骼示意以及层级关系如下图
![mengpi1](./picture/blender_mengpi1.png)
2骨骼命名也需要按照肢体去规范名字
- 总控=root
- 身体=body
- 头=head
- 左胳膊=arm_l
- 右胳膊= arm_r
- 左腿=leg_l
- 右腿=leg_r
3骨骼数要控制在20根以内最多不能超50某种特殊boss可能会用到50根以内的骨骼常规要控制在20根以内
4蒙皮需要注意的每个模块只能受一根骨骼影响如下图所示头部只能受“head”骨骼影响。
![mengpi2](./picture/blender_mengpi2.png)
5FBX输出设置
![mengpi3](./picture/blender_mengpi3.png)
## 2.制作流程
下面以大天狗制作流程为例说明骨骼模型的制作过程。
### 2.1 原画概念设计
1打开人形式神基础模型基础模型的每个格子单位为1就是像素单位不要改变这个大小
![make_step1](./picture/blender_make_step1.png)
2利用材质球上色截图或者PS上色均可正面的效果可以比较快的确定颜色分布
![make_step2](./picture/blender_make_step2.png)
3增加外轮廓的辨识度突出的部分尽量归纳减少细节这一步使用PS绘制概念图
![make_step3](./picture/blender_make_step3.png)
4进一步增加轮廓的辨识度注意角色身上最具有特点的部位一个角色身上只有一到两个特征需要这样强调比如大天狗的翅膀。这一步同样使用PS绘制示意图背面也需要有设计因为风格限制不强制侧面的效果但是需要考虑到4分之一侧面的效果
<img src="./picture/blender_make_step4.png" alt="make_step4" style="zoom:80%;" />
<img src="./picture/blender_make_step5.png" alt="make_step5" style="zoom:80%;" />
参考:《阴阳师》大天狗设计图,在转换为我的世界模型风格时,需要减少没有代表性的琐碎细节。
鞋子的造型需要直接归纳到腿部
翅膀的3层羽毛层次减少到2层边缘细节概括处理
**注意设计归纳的时候注意估算一下顶点数量小怪300以下复杂模型700以下BOSS1000以下尽量低于最高值以免制作完成后超过难以修改。**
![make_step6](./picture/blender_make_step6.png)
### 2.2 建模和着色
#### 2.2.1 制作模型
根据原画制作模型建模部分可以在提供的标模的格子上直接挤出来造型。注意挤出的高度单位也是1。
1根据游戏中的规范用头部放大然后删去不要的部分来建模。比如大天狗
2如果头发造型过于复杂或者有动作则需要另外建模。比如酒吞童子
**注意:关节处的模型体块必须分开制作(胳膊,腿,身体的体块都是要分开的,动物类模型尾巴有转折的话,尾巴的转折处也要分开制作)**
#### 2.2.2 开始上色
![make_step7](./picture/blender_make_step7.png)
材质属性面板选中需要着色的面赋予不同颜色的材质球因为颜色会比较多材质球命名上可以用类似green_01,green_02这种方便查找对应的颜色。
### 2.3 后处理
#### 2.3.1 UV拆分
所有的uv必须横平竖直不能有倾斜否则会出现锯齿
每块uv边界之间要留至少两个像素的距离贴图要制作扩边
uv摆放时可以导入一张对应贴图像素大小的棋盘格每一条uv边缘线都必须要和棋盘格的格子对齐
![make_step8](./picture/blender_make_step8.png)
#### 2.3.2 减面
![make_step9](./picture/blender_make_step9.png)
![make_step10](./picture/blender_make_step10.png)
复制一个模型减面或拓扑用拓扑的话就可以拓扑后再拆分uvuv摆放的规则一定要重视只留下轮廓线多余的线全部删掉。
填色的高模备份一个,后面烘焙颜色用。
#### 2.3.3 烘焙颜色
烘焙类型选择漫射烘焙颜色的时候可以提高贴图精度之后再用PS缩小到128像素大小
![make_step11](./picture/blender_make_step11.png)
注意缩小图像大小的时候使用邻近(硬边缘),因为都是像素格,不会损失精度。
![make_step12](./picture/blender_make_step12.png)
### 2.4 完成
贴上烘焙好的贴图效果截图如下:
![make_step13](./picture/blender_make_step13.png)

View File

@@ -0,0 +1,343 @@
---
front:
hard: 入门
time: 分钟
---
# 骨骼模型的使用
骨骼模型、骨骼动画的制作请参考[骨骼模型制作指南(3DMAX)](02-骨骼模型制作指南3DMAX.html)等相关文档。
通过专业的模型制作软件完成模型后导出为FBX格式然后再转换为《我的世界》中的模型格式JSON格式相应的方法请查阅[教学中心-编辑器基础-特效编辑器-入门教程01-模型导入与使用](../9-特效/10-模型导入.md#1-导入fbx模型)。
> 如需将已转换为我的世界中国版格式的骨骼模型导入至其他作品中,可以参考[骨骼模型json的导入](../9-特效/10-模型导入.md#2-导入骨骼模型json)
在将骨骼模型转换为JSON格式后我们就可以准备在游戏内使用骨骼模型了。以离线文档中 **示例/6-4 资源制作/工具和示例/fbxRes/xuenv** 资源为例先在编辑器中导入这个模型然后按下面的步骤进行。实际上下面的1~3步目前编辑器已经自动完成了需要手动操作文件时可以参考。
## 1. 填入模型路径信息
`mod_resource/models/netease_models.json`里面填入模型的骨骼,网格及动作的文件路径(目前编辑器已经自动做好这一步了),如下图所示:
<img src="./picture/anim/reg4-1.png" alt="reg4-1" style="zoom: 80%;" />
**骨骼模型动画的命名最好使用英文单词/拼音/数字/下划线组成。**
## 2. 将资源放入对应目录
将skeleton、mesh、animation资源放入`mod_resource/models`下对应的文件夹:
![reg4-3](./picture/anim/reg4-3.png)
## 3. 指定贴图
mesh文件中会有指定material如下图所示
名称对应到`mod_resource/textures/models/xuenv.png`,所以需要在此位置放置贴图资源。
<img src="./picture/anim/reg4-4.png" alt="reg4-4" style="zoom: 80%;" />
## 4. 代码调用
采用component的结构来创建模型与控制动画播放
创建模型替换原有模型
```python
modelComp = self.CreateComponent(playerId, 'Minecraft', 'model')
# 'xuenv'即为netease_models.json里配置的骨骼模型名称
modelComp.SetModel('xuenv')
```
播放动画
```python
modelComp = self.GetComponent(playerId, 'Minecraft', 'model')
# 播放动画'prepare'第二个参数设置为True表示循环播放该动画接口详细信息可以查看modAPI接口文档
modelComp.PlayAnim('prepare', True)
```
## 5. 第一人称模型
上面部分完成了第三人称视角的骨骼模型显示及动画播放当我们想在游戏中切换到第一人称也有骨骼模型与动作时需要另外做一套骨骼模型和动作如下图的steve_fp并且使动作的名称与第三人称模型的动作一致。然后把他配置为第三人称模型的“arm_model”例如
<img src="./picture/anim/reg4-2.png" alt="reg4-2" style="zoom: 50%;" />
在上图中我们可以看到steve有骨骼模型动画这些属于第三人称视角的骨骼模型动画steve中的”arm_model”属性可关联第一人称视角的骨骼模型。配置第一人称视角骨骼模型之后当玩家切换到第一人称视角时如果手上无物品或者手上物品不显示则会显示第一人称骨骼模型即这里的“steve_fp”
当播放动作时第一人称视角模型的动作会跟随第三人称模型。例如给本地玩家替换steve模型后播放walk动作那么切换到第一人称视角时显示的steve_fp模型也会播放walk动作。
如果替换的第三人称骨骼模型没配置”arm_model”字段例如上述的”xuenv”模型则在第一人称视角下手上无物品或者手上物品不显示时不会显示任何模型。
## 6. 模型贴图序列帧动画
骨骼模型动画除了支持上述在animation文件夹下放置相应的json文件这一方式外也支持另一种只是单纯贴图变化的序列帧动画
<img src="./picture/frame_anim/xuenv_frames.gif" alt="xuenv_frames" style="zoom: 80%;" />
制作这种贴图序列帧动画需要两个步骤,我们以上述的雪女为例:
1) 用图片处理工具修改`mod_resource/textures/models/xuenv.png` 路径下的这张贴图:
根据动画需要的帧数横竖方向重复铺开此例中我们以6行5列总共30帧进行制作处理每一帧中贴图需要变化的部分序列帧播放的顺序由贴图的左上角先横再竖播放到贴图的右下角。
原图:
<img src="./picture/frame_anim/xuenv.png" alt="xuenv" style="zoom: 10%;" />
处理后:
<img src="./picture/frame_anim/xuenv_frames.png" alt="xuenv_frames" style="zoom: 20%;" />
2) 修改`mod_resource/models/netease_models.json`中雪女的json配置新增frame_anim字段
<img src="./picture/frame_anim/xuenv_json.png" alt="xuenv_json" style="zoom: 100%;" />
字段中各参数意义如下:
row: 贴图动画中分了多少行此例中6行5列即6行所以此处填6
col: 贴图动画中分了多少列此例中6行5列即5列所以此处填5
frames: 帧数此例中为30帧此数字不一定为row乘col的值允许贴图留有空白假如贴图右下角留了一帧的空白区域此处可填29
time: 动画总时长此例中为5秒代表5秒内播放完30帧然后开始循环
注意:
为了节省运行时的内存,建议资源制作时尽量秉持宽高最邻近二次幂数相乘最小原则。
所谓最邻近二次幂数即数字往上寻找最靠近自己的二次幂二次幂就是124816326412825651210242048等等。
比如一张贴图为200 * 200的分辨率200的最邻近二次幂数为256则加载入内存后即占用256 * 256的大小此处为了讲解方便简化了一些计算细节读者可简单理解为内存占用与宽高成正比。
在此例中我们雪女单帧的图片大小256 * 2566行5列排放后为1280 * 1536, 宽高最邻近二次幂数分别为2048和2048所以占用内存为2048 * 2048。
但假如我们调整一下用横4竖8的方式排放宽高即为1024 * 2048此方式最高可支持 4 * 8 = 32帧宽高最邻近二次幂数分别也为1024和2048占用内存即为1024 * 2048内存占用可降低到原来的一半
最后,在代码调用时无须添加额外代码即可生效:
```python
modelComp = self.CreateComponent(playerId, 'Minecraft', 'model')
# 'xuenv'即为netease_models.json里配置的骨骼模型名称
modelComp.SetModel('xuenv')
```
## 7. 模型使用自定义材质及更多贴图
若我们想要实现更为复杂的渲染效果则可能会需要使用特殊的shader及shader所需要采样的贴图这时候我们需要修改材质并配置为使用我们的shader。我们可以在netease_models.json中为模型指定material_cpu和material字段则骨骼模型将使用指定材质进行渲染。自定义材质都需要先在资源包resource_pack/materials/entity.material中进行定义。
以雪女模型为例:
```json
"xuenv_1": {
"skeleton": "skeleton/xuenv_skeleton.json",
"mesh": "mesh/xuenv_mesh_frame.json",
"animation": {
"idle": "animation/xuenv_animation_idle.json",
"walk": "animation/xuenv_animation_idle.json",
"skill1": "animation/xuenv_animation_skill1.json",
"behited": "animation/gun_animation_idle.json",
"prepare": "animation/xuenv_animation_prepare.json",
"win": "animation/xuenv_animation_win.json"
},
// 定义自己的自定义材质
"material": "xuenv_custom",
// 自定义CPU蒙皮材质可不进行配置根据开发者的需要也可配置
"material_cpu": "xuenv_custom_cpu",
// 这个自定义材质所需要的自定义贴图最多可配置4张
"texture": {
//"tex0": "my_custom_texture0",
"tex1": "my_custom_texture1",
"tex2": "my_custom_texture2",
"tex3": "my_custom_texture3",
},
"frame_anim": {
"row": 6,
"col": 5,
"frames": 30,
"time": 5
}
}
```
`material`为GPU骨骼渲染的形式下所使用的材质会全局存储所有骨骼的变换矩阵列表顶点着色器中每个顶点只存储对应的骨骼下标在执行过程中用通过该下标从列表中查询得出变换矩阵因为会有不同的顶点共用相同的骨骼相比于后文的CPU骨骼蒙皮渲染形式使用此方式能更为节省GPU带宽。材质的配置可参考官方骨骼模型材质(data/vanilla_netease/materials/entity.material/entity_for_skeleton)。**几乎所有情况下引擎都会使用该形式的材质**。
`material_cpu`为传统的CPU骨骼蒙皮渲染形式顶点着色器中每个顶点存储自己的变换矩阵。**目前引擎只会在部分安卓设备且该设备不支持使用大顶点Uniform变量large vertex shader uniforms时才会使用的CPU骨骼蒙皮渲染其它情况下则使用GPU骨骼渲染的渲染形式**。**因此开发者如无特别需要可以不定义该材质也可以直接指定为GPU骨骼渲染材质。**如开发者有需要,则材质的配置可参考官方骨骼模型材质(data/vanilla_netease/materials/entity.material/entity_for_skeleton_cpu与GPU所使用的的材质不同的是该材质没有定义`USE_SKINNING`以及`BoneId0`.
两种材质的差别基本如图所示:
<img src="./picture/model/xuenv_material.png" alt="xuenv_material" style="zoom: 100%;" />
在上面我们为模型配置了自己的材质及shader接着如果我们的材质及shader需要有更多的自定义贴图我们就可以增加如下`texture`字段:
```json
// 这个自定义材质所需要的自定义贴图最多可配置4张
"texture": {
//"tex0": "my_custom_texture0",
"tex1": "my_custom_texture1",
"tex2": "my_custom_texture2",
"tex3": "my_custom_texture3",
},
```
关于自定义贴图我们一共可以配置且最多配置4张字段名称分别为`tex0`,`tex1`,`tex2`,`tex3`。 字段的值为贴图的路径,即`textures/models/`路径下的贴图名称,不需要后缀名。
其中`tex0`所配置的贴图会覆盖`mesh`文件中`material`字段所指定的贴图即上文第3节-指定贴图中所配置的贴图。所以一般不需要额外配置`tex0`。如果`mesh`文件中`material`字段没有配置模型贴图,则可以使用`tex0`来配置。
`tex1`,`tex2`,`tex3`,则可供开发者按需求进行配置。
在配置了以上贴图后我们则可以在我们的自定义材质中指定了的fragment shader当中通过声明`LAYOUT_BINDING`使用这些贴图:
```glsl
LAYOUT_BINDING(0) uniform sampler2D TEXTURE_0; // TEXTURE_0对应tex0, 也对应mesh文件中material字段指定的贴图
LAYOUT_BINDING(1) uniform sampler2D TEXTURE_1; // TEXTURE_1对应tex1,
LAYOUT_BINDING(2) uniform sampler2D TEXTURE_2; // TEXTURE_2对应tex2,
LAYOUT_BINDING(3) uniform sampler2D TEXTURE_3; // TEXTURE_3对应tex3,
void main(){
vec4 base_color = texture( TEXTURE_0, uv );
vec4 base_color1 = texture( TEXTURE_1, uv );
vec4 base_color2 = texture( TEXTURE_2, uv );
vec4 base_color3 = texture( TEXTURE_3, uv );
// do what you want
//...
}
```
## 8. 模型使用多个材质及贴图
2.8版本后,可以对同一个骨骼模型的不同骨骼定义不同的材质及所使用的贴图,也可以使用骨骼模型渲染屏蔽接口<a href="../../../mcdocs/1-ModAPI/接口/模型.html#SetModelPartVisible" rel="noopenner"> SetModelPartVisible </a>进行指定骨骼的渲染屏蔽。
想要对骨骼模型配置多个材质以及使用骨骼渲染屏蔽功能需要在netease_models.json中增加如下字段的配置
1`useSplitMeshes` bool类型字段决定了骨骼模型在读取时是否按照指定的骨骼来拆分生成多个mesh值默认为fasle。当设为true时读取该模型的时候将按来分`splitBonesGroup`中指定的骨骼来分别生成和存储mesh而不会按过往方法来合成一整个mesh。骨骼模型渲染时也会变成多个mesh一起渲染因此如果不是要进行骨骼模型按骨骼进行渲染屏蔽或者并没有使用到骨骼模型多材质功能时不要设置为true。
2`splitBonesGroup` 字典类型字段,可以指定拆分的骨骼名称,以及这个骨骼所使用的材质及这个材质所需要的贴图。指定后,骨骼模型将拆分为本体模型以及这些骨骼各自所组成的模型。
以雪女模型为例:
```json
"xuenv_1": {
"skeleton": "skeleton/xuenv_skeleton.json",
"mesh": "mesh/xuenv_mesh_frame.json",
"animation": {
"idle": "animation/xuenv_animation_idle.json",
"walk": "animation/xuenv_animation_idle.json",
"skill1": "animation/xuenv_animation_skill1.json",
"behited": "animation/gun_animation_idle.json",
"prepare": "animation/xuenv_animation_prepare.json",
"win": "animation/xuenv_animation_win.json"
},
// 定义本体模型的自定义材质
"material": "xuenv_custom",
"material_cpu": "xuenv_custom_cpu",
"texture": {
//"tex0": "my_custom_texture0",
"tex1": "my_custom_texture1",
"tex2": "my_custom_texture2",
"tex3": "my_custom_texture3",
},
"frame_anim": {
"row": 6,
"col": 5,
"frames": 30,
"time": 5
},
// 设置useSplitMeshes为true设置后骨骼模型将按splitBonesGroup中的骨骼来拆分渲染。
"useSplitMeshes": true,
// 指定需要分离出来的骨骼名称,指定后,骨骼模型将拆分为本体模型以及这些骨骼各自所组成的模型。
// 骨骼名称需要与该骨骼模型的"skeleton"所指定的skeleton.json文件中存在的骨骼名称一致大小写一致否则无效。
// 可以对分离出来的骨骼指定自定义材质及所使用的贴图。
"splitBonesGroup": {
"Bone007":{
// material 如果没有定义,则使用本体模型的材质
// texture 如果没有定义,则该骨骼使用骨骼模型"mesh"字段所指定的mesh.json文件中该骨骼所属的mesh中"material"字段所定义的贴图路径,如果这个也没有,则使用本体模型的贴图
},
"Bip001 Head":{
// 这个骨骼模型的本体模型使用了frame帧动画贴图如果想要这个骨骼也使用同样的帧动画贴图为了保证帧动画贴图显示正常则可以为这个骨骼的贴图tex0指定同样的帧动画贴图如下
"texture": {
"tex0": "xuenv-1"
}
// 当然也可以不用指定tex0贴图。不指定帧动画贴图的情况下如果想要这个骨骼也显示跟本体模型同样的帧动画效果则请保证mesh.json中所有包含这个骨骼的mesh的"material"字段都定义了相同的帧动画贴图。
},
// 雪女模型的身躯骨骼,我们为这个骨骼指定自定义的材质
"Bip001 Spine": {
// 自定义的材质,材质的定义在资源包/materials/entity.material中定义
"material": "xuenv_special",
// 自定义CPU蒙皮材质可根据需要配置
"material_cpu": "xuenv_special",
// 该材质里的shader所使用的到的贴图名称不需要后缀名最多为4张。贴图放置于资源包/textures/models中。
// 如只需使用1张则定义"tex0"即可使用2张则定义"tex0"及"tex1",如此类推。"tex0"对应shader中的TEXTURE_0, "tex1"对应shader中的TEXTURE_1如此类推。
"texture": {
"tex0": "special_1",
"tex1": "special_2",
"tex2": "special_3",
"tex3": "special_4"
}
}
}
}
```
骨骼的材质会按照如下顺序来优先适用:
1是否指定了`material`,如果有,则该骨骼优先适用`material`中指定的材质;
2如果没有指定`material`,则该骨骼采用与本体模型相同的材质。
骨骼的贴图会按照如下顺序来优先适用:
1是否指定了`texture`,如果有,则该骨骼会优先适用`texture`中定义的贴图至于这些贴图如何被使用则由自定义材质中的shader来决定。
2如果没有指定`texture`则该骨骼优先适用骨骼模型的mesh.json文件中该骨骼所属的mesh中"material"字段指定的贴图。
3如果以上均没有则使用本体模型的贴图。
经过如上配置后,如果在游戏中实时隐藏某个骨骼,则可以调用<a href="../../../mcdocs/1-ModAPI/接口/模型.html#SetModelPartVisible" rel="noopenner"> SetModelPartVisible </a>
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
modelId = comp.SetModel("xuenv_1")
# 屏蔽指定骨骼
print comp.SetModelPartVisible(modelId, "Bip001 Head", False)
```
## 9.骨骼模型自定义多pass
2.8版本开放了自定义多pass的特性目前开发者可以通过对骨骼模型配置多pass材质实现更多效果。开发者仅需修改`netease_models.json`中的模型配置,将模型配置中的`material`字段配置成数组即可:
```json
{ // netease_models.json
"model_example": {
"dy_load": true,
"mesh": "mesh/model_example_mesh.json",
"skeleton": "skeleton/model_example_skeleton.json",
"material": ["entity_for_skeleton", "netease_drawline_example"] // ****多pass材质数组****
}
}
```
可以看到模型`model_example`中的`material`字段被配置为了由两个材质组成的数组,第一个材质是网易骨骼模型材质`entity_for_skeleton`第二个材质是2.8新增的内置描边材质`netease_drawline_example`
在渲染模型时,引擎会**按顺序**渲染配置中的材质数组,在这个例子中,模型`model_example`会首先使用材质`entity_for_skeleton`渲染一次,再使用材质`netease_drawline_example`渲染一次。
详细示例可参考[多pass演示描边效果](../7-材质与着色器/4-材质实战.md#自定义多pass)。
## 10.支持半透明渲染的材质
骨骼模型在默认情况下使用不透明材质进行渲染。片段着色器输出中gl_FragColor的第四个参数alpha在不透明渲染中并没有效果即gl_FragColor.a无论是什么值都不影响最终渲染效果。
开启半透明渲染之后gl_FragColor.a代表透明度范围为[0.0, 1.0], 1.0代表完全不透明0.0代表完全透明看不见。开启方式如下,只需要在材质的定义中声明如下部份即可:
<img src="./picture/model/xuenv_blend_def.png" alt="xuenv_material" style="zoom: 100%;" />
Blending代表使用混合模式进行渲染blendSrc代表使用SourceAlpha作为混合源因子, blendDst代表使用OneMinusSrcAlpha作为目标混合因子。
关于混合因子说明可看[材质配置说明](../7-材质与着色器/3-材质配置说明.md#材质属性)中关于Blend 半透明对象颜色混合的说明。
接下来我们尝试修改gl_FragColor.a进行测试修改为透明度0.5
<img src="./picture/model/xuenv_blend_frag.png" alt="xuenv_material" style="zoom: 100%;" />
修改完成后游戏中该骨骼模型即会出现半透明效果:
<img src="./picture/model/xuenv_blend.png" alt="xuenv_material" style="zoom: 100%;" />
注意:因为半透明材质无法通过深度检测优化性能,所以尽量不要过多使用,不然会造成一定渲染压力。

View File

@@ -0,0 +1,66 @@
---
front:
hard: 入门
time: 10分钟
---
# 原版模型的使用
## 导入前的准备
原版模型使用Blockbench制作制作完成后需要导出三个文件
1. 以.geo.json结尾的模型配置文件
2. 以.animation.json结尾的动画配置文件可选
3. 以.png结尾的模型贴图文件可选
将这三个文件保存在同一个文件夹中,并且尽量以相同的文件名命名这些文件。例如我们需要导入蜘蛛精的原版模型文件,就需要将它们命名为:
![](./images/bb1.png)
## 将模型导入编辑器
我们点击资源管理器目录上方的资源导入按钮,在下拉菜单中选中【原版生物模型】。
![](./images/bb2.png)
选择刚才保存原版模型的文件夹,即会弹出下面这个窗口:
![](./images/bb3.png)
1. 模型ID为导入的模型取名仅限 **小写** 英文字母和数字;
2. 模型贴图:默认会选择当前文件夹下的.png文件作为贴图可点击【选择图片】按钮更换为其他文件。如果当前模型不需要贴图则可不填写
3. 模型动作(可选):默认会选择当前文件夹下的.animation.json文件。如果当前模型不需要动作文件则可不填写。
> 注意动作文件里的动作id请注意不能是中文和大写字符否则无效。
确认填写无误后,即可点击蓝色【确定】按钮导入模型。导入后,
1. 我们可以在资源包路径下的models/entity路径下找到刚刚导入的zhizhujing.geo.json文件。
2. 其动作文件被放置在资源包路径下的animations文件夹
3. 贴图文件被放置在资源包路径下的textures/entity文件夹,
4. 同时会在animation_controllers下生成一个动画控制器供在编辑器播放使用。**如果不熟悉mod制作请勿随意修改**,如果不小心修改了导致动画播放不了,**请重新导入**。
> 【注意】
> 1. 导入的动作名称不能包含大写字母,否则编辑器会将其自动改为小写字母再导入。
> 2. 引擎有时会因为缓存资源的问题,导致模型无法正常显示,可点击挂接面板下的刷新按钮,手动刷新下。
## 在特效编辑器中预览模型
我们切换到特效编辑器,将左侧模型挂接面板的主角模型通过下拉菜单替换成我们刚刚导入的蜘蛛精模型,即可看到模型已导入成功。
![](./images/bb5.png)
在特效编辑器中,我们可以看到模型的动作、特效挂点,并通过时间轴控制模型动作的播放。想要原版模型上挂接微软粒子,可参见对应的指南文档。
![](./images/bb6.png)
> 【注意】 当前并不支持在特效编辑器中修改模型的挂点数量、位置等需要在模型制作的时候在blockbench中为其添加好挂点调整好挂点位置再导入到编辑器中使用。
## 将原版模型应用到实体预设
现在,编辑器支持了将原版模型直接应用到实体预设上。
我们在预设编辑器中打开需要修改的实体模型,然后在右侧的属性面板中找到【资源包组件】,把其中的【模型】和【纹理】都替换成先前导入的原版模型,然后点击上方的【刷新所有属性】按钮,即可看到当前实体预设的模型和纹理都被替换成了之前导入的蜘蛛精模型。
![](./images/bb7.png)

View File

@@ -0,0 +1,87 @@
---
front: https://mc.res.netease.com/pc/zt/20201109161633/mc-dev/assets/img/model_face_config.25817915.png
hard: 入门
time: 15分钟
---
# 我的世界模型导出规范
推荐软件: 3dMax 2014
## 系统单位设置
![模型单位设置](./images/model_unit_config.png)
## 模型朝向
![模型朝向设置](./images/model_face_config.png)
## 贴图
只支持一张贴图,且贴图的名称必须为英文
## 顶点
每个长方体通常是 8 个,整个模型控制在 300 个顶点,特殊复杂模型可以在 1000 以内
## 输出检查
1. 属性中将模型设置为背面消隐查看模型是否有反面如果有的话需要反相flip
![check_notice_1](./images/check_notice_1.png)
![check_notice_2](./images/check_notice_2.png)
2. Reset Xform多点击几次然后塌陷
![check_notice_3](./images/check_notice_3.png)
3. Mesh Select与 4 一起,点击完后,不用操作,直接塌陷)
4. STL Check最终转化为 Poly 模型输出,此步骤可避免模型在游戏中显示出错
![check_notice_4](./images/check_notice_4.png)
## 蒙皮
1. 骨骼架设使用纯bone
2. 骨骼控制在20根以内最多不能超过50
3. 需要添加 rootupdown 3根骨骼
- root是质心的父级位移旋转都要归于坐标原点0.0
- up控制上半身质心的子级身体的父级
- down控制下半身质心的子级双脚的父级
4. 所有的骨骼都要有链接武器挂件坐骑等都要链接给相应的手质心等位子可使用link
5. 蒙皮选项当中的高级参数中,有个骨骼影响限制,需要调为 1如图所示
![coving](./images/notice_cover.png)
## 动作输出
1. 输出文件版本为 MAX2014
2. 输出文件命名为英文文件需要输出FBX。
3. 输出文件需要塌陷骨骼动画
4. rootupdown骨骼不可以有动画
5. 缩放动画必须用等比缩放,且不能有单轴向缩放
## FBX输出设置
输出设置如下图所示:
![fbx_output_1](./images/fbx_output_1.png)
![fbx_output_2](./images/fbx_output_2.png)
![fbx_output_3](./images/fbx_output_3.png)
## 注意事项
1. 模型制作中,避免使用镜像或者对称!
2. 如果模型出现法线问题将法线出错的位置选择并反相flip即可。
3. 模型当中不能有任何的中文!

View File

@@ -0,0 +1,54 @@
---
front:
time: 15分钟
---
# 原版模型转换工具使用说明
## 工具介绍
经过前面几篇文档的学习开发者们都了解了原版模型和骨骼模型的区别和制作、使用技巧原版模型容易上手制作的模型风格更符合MC的风格骨骼模型较为复杂但能通过SDK接口实现更精美的动作表现。
为了降低开发者使用两种模型格式的门槛,提高开发者的开发效率,我的世界开发工作台提供了原版模型转换工具,开发者可通过此工具**将原版模型转换为骨骼模型**,接下来就详细介绍下该工具的使用方法:
1. 登录我的世界开发工作台,依次点击创作→工具箱→原版模型转换工具:
![启动器截图](./images/bb2fbx1.png)
1. 点击**导入原版模型**按钮,在弹出的对话框选择原版模型所在的文件夹。
![启动器截图](./images/bb2fbx2.png)
2. 点击确定后,工具便会自动开始转换,并将转换结果展示到下方的列表中,对于转换成功后的模型,可点击右侧的**输出目录**按钮打开存放转换后的骨骼模型的文件夹。
![启动器截图](./images/bb2fbx3.png)
3. 对于转换失败的模型,你可以点击**查看日志**按钮,查看具体报错日志,调整完模型后,点击**重新导入**按钮重试。
![启动器截图](./images/bb2fbx4.png)
5. 同样,你也可以点击**删除**按钮删除本条转换记录,注意,此操作不会删除源文件和输出文件夹。
![启动器截图](./images/bb2fbx5.png)
## 骨骼模型使用
1. 转换后的骨骼模型会按照下列结构存放:
![启动器截图](./images/bb2fbx6.png)
2. 可以在编辑器中进行导入如下图点击骨骼模型json
![启动器截图](./images/bb2fbx7.png)
3. 选择输出目录中的`netease_models.json`文件,即可导入转换后的骨骼模型,并在特效编辑器中查看模型。
![启动器截图](./images/bb2fbx8.png)
> 有关骨骼模型使用的更多说明可以参考[这篇文档](./04-骨骼模型的使用.md)
## 注意事项
1. 同一个原版模型的所有json文件需要放在同一个文件夹下导入时选择该文件夹。
2. 模型文件(.geo.json、动作文件.animation.json以及贴图.png必须保证同时满足下列条件
1. 名称保持一致
2. 名称不含中文
3. 名称不含特殊符号
3. 暂不支持一个模型(.geo.json对应多个动作文件.animation.json和多个贴图的情况。
5. 导出后的模型也需要满足从[模型输出规范](./10-模型输出规范.md)否则可能会产生异常例如骨骼数不能超过50。

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 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: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 350 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 986 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 320 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 279 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 383 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

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