上一节课我们成功将Alex转码成4D格式,为了让萌新们更好的熟悉Json文件各个语法的意义,在接下来的两节课中我们将着手修改alex.json,使其四肢更细并戴有发卡最终效果如下图所示
本节课你将会了解到材质文件的格式以及size,uv的用法。
下节课会讲解origin的用法和添加新模型的方法
熟悉材质文件与size的用法
我的世界的所有模型均为立方体构成,我们熟知立方体有6个面,而这六个面在材质文件中有体现。
为了节省材质文件的空间,在材质文件的展开图呈现丄字形而不是十字型,但是道理依然是一样的。
你可以想象成长方形展开图下面的那个面剪了下来拼到了上面,其中展开图构成的立方体朝向一定是固定的,上面两个面一定代表着上面和下面,下面的四个面一定代表着左前右后,其中“前”是指面朝我们的那个面(很重要,以免某些人把“前”的位置弄错而贴错材质)。
有了这个意识后,我们也可以推出这个立方体的大小,以前面那个面为基准
- 左右的宽度为8
- 上下的高度为4
- 前后的厚度为6
但有人可能想问了,这个展开图已经把每个面分色标注了,但是如果没有标注,该怎么看尺寸呢?
前面已经说过了,这个展开图为了节省空间将下面移到了上面,但是其他的5个面没有变动,因此,测一下左边缺口的长度即对应前后的厚度,测最左边短边的长度即对应上下的高度,测一下最上面短边的长度,除以2,就是左右的宽度 。
而立方体的大小由json决定,比如上面的立方体用json表示出来如下。
"size": [8, 4, 6]
在size数组里,第一个数表示左右宽度,第二个数表示上下高度,第三个数表示前后厚度。
由此,在我们了解了展开图怎么看之后,我们就可以知道alex的所有部件的尺寸了,请根据下面的伪代码,理解一下展开图,Json和实际模型的相关关系
{
"geometry.humanoid": {
"bones": [{
"name": "head",
"cubes": [{
"size": [8, 8, 8]
}]
},
{
"name": "body",
"cubes": [{
"size": [8, 12, 4]
}]
},
{
"name": "leftArm",
"cubes": [{
"size": [3, 12, 4]
}]
},
{
"name": "rightArm",
"cubes": [{
"size": [3, 12, 4]
}]
},
{
"name": "leftLeg",
"cubes": [{
"size": [4, 12, 4]
}]
},
{
"name": "rightleg",
"cubes": [{
"size": [4, 12, 4]
}]
}
]
}
}
这个代码不完整,请勿粘贴到Json中
文件覆盖操作:在mt管理器左栏打开压缩包,在右栏找到用来覆盖的文件,重命名为相同的名字,长按,选择”添加”,稍等片刻,即可完成压缩包内文件的覆盖。
现在,我们开始改alex.png,使其手臂尺寸为2x12x3,腿部尺寸为3x12x4,改法随意,下面有一张已经改好的图,供参考。
但是决定尺寸的是Json文件,所以我们也对应把Json的尺寸改掉,很简单,用mt管理器自带的文本编辑器改size行的数据即可,或者使用Json编辑器找到size数据并修改,在这里以右手为例做一个简单的示例。
- 文本编辑方式
首先找到右手的代码块
{
"name": "rightArm",
"reset": true,
"pivot": [-5.0, 21.5, 0.0],
"cubes": [{
"origin": [-6.0, 11.5, -1.5],
"size": [4, 12, 4],
"uv": [40, 16]
}]
}
改一下size行的数字,保存即可
{
"name":"rightArm",
"reset":true,
"pivot":[-5.0,21.5,0.0],
"cubes":[{
"origin":[-6.0,11.5,-1.5],
"size":[2,12,3],
"uv":[40,16]
}]
}
- Json编辑器编辑方式
依次展开
Root/geometry.humanoid/bones/#4/cubes/#1/size
然后会看到3行数据,对应数组的3个数字,依次修改,保存即可。
其他的部件也如上述操作,最终代码如下:
{
"geometry.humanoid": {
"bones": [{
"name": "body",
"pivot": [0.0, 24.0, 0.0],
"cubes": [{
"origin": [-4.0, 12.0, -2.0],
"size": [8, 12, 4],
"uv": [16, 16]
}]
},
{
"name": "head",
"pivot": [0.0, 24.0, 0.0],
"cubes": [{
"origin": [-4.0, 24.0, -4.0],
"size": [8, 8, 8],
"uv": [0, 0]
}]
},
{
"name": "leftArm",
"reset": true,
"mirror": false,
"pivot": [5.0, 21.5, 0.0],
"cubes": [{
"origin": [4.0, 11.5, -2.0],
"size": [2, 12, 3],
"uv": [32, 48]
}]
},
{
"name": "rightArm",
"reset": true,
"pivot": [-5.0, 21.5, 0.0],
"cubes": [{
"origin": [-7.0, 11.5, -2.0],
"size": [2, 12, 3],
"uv": [40, 16]
}]
},
{
"pivot": [-6, 14.5, 1],
"neverRender": true,
"name": "rightItem",
"parent": "rightArm"
},
{
"name": "rightLeg",
"pivot": [-1.9, 12.0, 0.0],
"cubes": [{
"origin": [-3.9, 0.0, -2.0],
"size": [3, 12, 4],
"uv": [0, 16]
}]
},
{
"name": "leftLeg",
"reset": true,
"mirror": false,
"pivot": [1.9, 12.0, 0.0],
"cubes": [{
"origin": [-0.1, 0.0, -2.0],
"size": [3, 12, 4],
"uv": [16, 48]
}]
}]
}
}
在多玩盒子里浏览,的确发现四肢变得更细了一些但是,改到了这里,又出现了一些新的问题。
- 四肢的位置是歪的
- 手臂的模型没有闭合(如图)
歪斜的问题与origin有关,这个将会在下节课讲。
立方体尺寸是正确的,为什么没有闭合呢?如果存在这个问题,多半是uv设置不正确造成的。
UV的用法
熟悉材质文件后废话少说,直接说正事。UV决定的是展开图在材质中的位置,之所以立方体没有闭合,是因为json定义的展开图位置不正确造成的
UV记录的是展开图的左上角的坐标,如果展开图的左上角没有与UV记录的值对齐,就会出现立方体不闭合的情况
因为我们在做手臂时把前后厚度缩小了1格,对应材质文件要把上边抹掉一个像素,导致没有对齐,要解决这个问题有两种方法。
- 移动展开图,使其与正确的坐标对齐
弊端很明显,因为我们不知道坐标的实际值,只能慢慢摸索
- 修改json文件,使json定义的展开图在正确的位置上。
首先找到错误的模型对应的展开图,找到左上角的坐标(如上图黄点标注),然后从画布的最左上角开始数,先数横向位置,再数竖向位置,可以把背景色关掉,得到的透明色棋盘的大小正好为8x8,这样数更方便。根据数出的结果,我们得到右手的坐标为(41,18),左手的坐标为(33,50),双腿的坐标是正确的,所以这里不再举例。
然后我们将其换算成uv值,换算成uv值时坐标要减1,即
"uv": [40, 17]
"uv": [32, 49]
由于修改的地方很少,这里不再发代码,若需要修改请用Json编辑器或mt管理器修改rightArm与leftArm里的UV值。
好的,这节课就到这里了,感兴趣的朋友可以多加尝试修改Json,以观察模型的变化。
因为我也没有任何资料,所有教程都是我自己修改Json自己总结的,总之自己学会感悟会更深的。