美文网首页我的世界我的世界4D皮肤Minecraft
【我的世界4D皮肤】第2课 材质及模型尺寸操作

【我的世界4D皮肤】第2课 材质及模型尺寸操作

作者: 小狸卡 | 来源:发表于2019-03-22 02:23 被阅读2次

上一节课我们成功将Alex转码成4D格式,为了让萌新们更好的熟悉Json文件各个语法的意义,在接下来的两节课中我们将着手修改alex.json,使其四肢更细并戴有发卡最终效果如下图所示


本节课你将会了解到材质文件的格式以及sizeuv的用法。

下节课会讲解origin的用法和添加新模型的方法


熟悉材质文件与size的用法

我的世界的所有模型均为立方体构成,我们熟知立方体有6个面,而这六个面在材质文件中有体现。

alex.png
为了节省材质文件的空间,在材质文件的展开图呈现丄字形而不是十字型,但是道理依然是一样的。 示例展开图
你可以想象成长方形展开图下面的那个面剪了下来拼到了上面,其中展开图构成的立方体朝向一定是固定的,上面两个面一定代表着上面和下面,下面的四个面一定代表着左前右后,其中“前”是指面朝我们的那个面(很重要,以免某些人把“前”的位置弄错而贴错材质)
有了这个意识后,我们也可以推出这个立方体的大小,以前面那个面为基准
  • 左右的宽度为8
  • 上下的高度为4
  • 前后的厚度为6

但有人可能想问了,这个展开图已经把每个面分色标注了,但是如果没有标注,该怎么看尺寸呢?
前面已经说过了,这个展开图为了节省空间将下面移到了上面,但是其他的5个面没有变动,因此,测一下左边缺口的长度即对应前后的厚度,测最左边短边的长度即对应上下的高度,测一下最上面短边的长度,除以2,就是左右的宽度
而立方体的大小由json决定,比如上面的立方体用json表示出来如下。
"size": [8, 4, 6]
size数组里,第一个数表示左右宽度,第二个数表示上下高度,第三个数表示前后厚度。

由此,在我们了解了展开图怎么看之后,我们就可以知道alex的所有部件的尺寸了,请根据下面的伪代码,理解一下展开图,Json和实际模型的相关关系
{
    "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,改法随意,下面有一张已经改好的图,供参考。


alex.png

但是决定尺寸的是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]
            }]
        }]
    }
}
在多玩盒子里浏览,的确发现四肢变得更细了一些 修改后的Alex

但是,改到了这里,又出现了一些新的问题。

  • 四肢的位置是歪的
  • 手臂的模型没有闭合(如图)
    未闭合的手臂
    歪斜的问题与origin有关,这个将会在下节课讲。
    立方体尺寸是正确的,为什么没有闭合呢?如果存在这个问题,多半是uv设置不正确造成的。

UV的用法

熟悉材质文件后废话少说,直接说正事。UV决定的是展开图在材质中的位置,之所以立方体没有闭合,是因为json定义的展开图位置不正确造成的

红色部分为json定义的展开图,黄点表示实际材质的左上角
UV记录的是展开图的左上角的坐标,如果展开图的左上角没有与UV记录的值对齐,就会出现立方体不闭合的情况

因为我们在做手臂时把前后厚度缩小了1格,对应材质文件要把上边抹掉一个像素,导致没有对齐,要解决这个问题有两种方法。

  • 移动展开图,使其与正确的坐标对齐

弊端很明显,因为我们不知道坐标的实际值,只能慢慢摸索

  • 修改json文件,使json定义的展开图在正确的位置上。

首先找到错误的模型对应的展开图,找到左上角的坐标(如上图黄点标注),然后从画布的最左上角开始数,先数横向位置,再数竖向位置,可以把背景色关掉,得到的透明色棋盘的大小正好为8x8,这样数更方便。根据数出的结果,我们得到右手的坐标为(41,18),左手的坐标为(33,50),双腿的坐标是正确的,所以这里不再举例。
然后我们将其换算成uv值,换算成uv值时坐标要减1,即
"uv": [40, 17] "uv": [32, 49]
由于修改的地方很少,这里不再发代码,若需要修改请用Json编辑器或mt管理器修改rightArmleftArm里的UV值。

在正确的size和uv设置下,立方体显示正常了

好的,这节课就到这里了,感兴趣的朋友可以多加尝试修改Json,以观察模型的变化。

因为我也没有任何资料,所有教程都是我自己修改Json自己总结的,总之自己学会感悟会更深的。

相关文章

网友评论

    本文标题:【我的世界4D皮肤】第2课 材质及模型尺寸操作

    本文链接:https://www.haomeiwen.com/subject/iohamqtx.html