美文网首页我的世界4D皮肤我的世界Minecraft
【我的世界4D皮肤】第3课 模型的位置操作

【我的世界4D皮肤】第3课 模型的位置操作

作者: 小狸卡 | 来源:发表于2019-03-26 00:11 被阅读0次

    废话不多说

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

    反物理手和歪腿
    接着上一节课,Alex手和腿的位置是错误的,这是因为立方体的宽度被我们缩小了,但位置信息依然是3格宽的手和4格宽的腿要解决这个问题,我们只需要对应将其位置调成适应两格宽的手和3格宽的脚就可以,这个位置值由"origin": [x, y, z]控制,为了把这个值调对,我们需要了解空间直角坐标系这个概念。
    首先惯例上图
    Minecraft中的空间直角坐标系
    考虑到一些人只知道平面直角坐标系,这里简单类比一下就可以理解:

    平面是一张纸,你在上面作了一个平面直角坐标系,可以用来表示所有在这张纸里的点,但如果你想表示在纸外面的点,怎么弄呢?你垂直向纸面打一束光,纸上会留下纸外点的影子,你把纸内的影子用平面直角坐标系表示出来(x, y),然后测量纸外点距纸面的距离,即纸外点与影子的距离,这个值记作z,这样的话,纸外任何点的位置都可以用纸内点+距离的方式表述,将其写成坐标即为(x, y, z)

    在找坐标之前,我们必须要在每个立方体上找个参照点,因为坐标系只能表示点,而不能直接表示立体图形的位置。我在第1课已经提到过一嘴,即模型左下靠前的位置,这对所有模型都适用。

    复习一下
    现在开始谈坐标系,从第一张图看出,原点在Alex的脚底正中,从侧面看绿线所在位置距离(z)为0(因为绿线是“纸面”的位置。
    另外距离(z)也是有正方向的,如果偏向身后就是正值,偏向身前就是负值。
    我们以头部的坐标为例来寻找坐标。
    首先从正视图来看,参照点的坐标为(-4, 24)
    然后从侧视图找到距离(z),得到参考点距离“纸面”为4,但由于是反方向,还需要加个负号,即z = -4
    用空间坐标表示出来即为(-4, 24, -4),在Json上为"origin": [-4, 24, -4]
    另外,与上节课讲的sizeuv不同,origin可以接受小数,比如右手臂的默认坐标为"origin": [-7.0, 11.5, -2.0],可以观察一下三视图,手臂错开身体半格。

    了解坐标系后,接下来修复错误!

    首先是右手,
    右手默认坐标是"origin": [-7.0, 11.5, -2.0]
    身体默认坐标是"origin": [-4.0, 12.0, -2.0]
    首先,左右的位置与x轴有关,我们将x轴相减,取绝对值,即为左右的宽度值,即d=|x1-x2|,然后我们发现宽度是3,但是修改后的手臂宽度是2,为了让手臂靠紧身体,我们改动手臂的x坐标为-6,此时d=2
    另外,由于身体前后厚度为4格,而手臂只有3格,这个在坐标里看不到,因为身体和手臂在前后的相对位置是并列的,没有相对距离。为了放在中间我们需要将手臂向后移动0.5格,即将z值加0.5(-1.5),这样的话参考点距“纸面“1.5格,由于厚度是3格,所以参考点后面的这个面也距离“纸面”1.5格,这样就放在中间了。这个就得纯靠空间想象力了,因为这玩意光从理论讲也讲不清楚,有条件搜一下“空间直角坐标系”,并自己摸索着多试几组数字
    最后的结果就是
    "origin":[-7.0,11.5,-2.0]"origin":[-6.0,11.5,-1.5]
    同样的思想,修复其他部位。

    • 左手左右位置没有问题,向后移半格(z+0.5)

    "origin":[4.0,11.5,-2.0]"origin":[4.0,11.5,-1.5]

    • 左腿和右腿都需要向右移动半格(x+0.5),而前后由于厚度是4,与身体一致,不用管。

    "origin":[-3.9,0.0,-2.0]"origin":[-3.5,0.0,-2.0]
    "origin":[-0.1,0.0,-2.0]"origin":[ 0.5,0.0,-2.0]
    修改对应的值后,我们看到Alex已经可以正常显示了

    更加纤瘦的Alex
    附Json供研究
    {
        "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, -1.5],
                        "size": [2, 12, 3],
                        "uv": [32, 49]
                    }]
                },
    
                {
                    "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, 17]
                    }]
                },
    
                {
                    "pivot": [-6, 14.5, 1],
                    "neverRender": true,
                    "name": "rightItem",
                    "parent": "rightArm"
                },
                {
                    "name": "rightLeg",
                    "pivot": [-1.9, 12.0, 0.0],
                    "cubes": [{
                        "origin": [-3.5, 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.5, 0.0, -2.0],
                        "size": [3, 12, 4],
                        "uv": [16, 49]
                    }]
                }
            ]
        }
    }
    

    为Alex添加新的模型

    都是以前教过的东西,直接讲步骤

    1. 修改头顶的像素使其适配发卡


      头部的发卡
    2. 绘制发卡的材质,建议先绘制展开图再贴上材质,这里使用3x3x1的模型。


      展开图
      材质
    3. 将修改好的皮肤导入文件中
    4. 打开json编辑器,依次展开。root>geometry.humanoid>bones>#2>cubes
      (不知道展开哪一个编号?看一下编号下面的注释,找到有head的就行)
      注释会很有用的
    5. 点唯一一个#1右边的三个点,选择clone,再重复一次,创建两个#0,然后返回上一级再进去,复制的两个对象会自动编号为#2,#3


      复制后的cubes
    6. 打开#2,设置好size和uv,使其大小为3x3x1并定位到材质文件刚刚画好的发卡


      size&uv
    7. 计算位置坐标。头顶高度为32格发卡要向下沉一格,所以y轴是31格。参考点在左右方向向左偏移中心5格,所以x轴是-5,参考点在前后方向向前偏移一格,所以z轴是-1


      右发卡的坐标
    8. 同样的方法设置#3,注意参考点永远都在模型的前左下角,所以x轴只偏移了两格!


      #3
    9. 保存json并格式化
      json编辑器自带格式化(indent)功能,只不过效率不太高就是了。
      indent就是格式化
      如果不格式化,则代码会变成这样:
    {"geometry.humanoid":{"bones":[{"cubes":[{"origin":[-4,12,-2],"size":[8,12,4],"uv":[16,16]}],"name":"body","pivot":[0,24,0]},{"cubes":[{"origin":[-4,24,-4],"size":[8,8,8],"uv":[0,0]},{"origin":[-5,31,-1],"size":[3,3,1],"uv":[32,0]},{"origin":[2,31,-1],"size":[3,3,1],"uv":[32,0]}],"name":"head","pivot":[0,24,0]},{"cubes":[{"origin":[4,11.5,-1.5],"size":[2,12,3],"uv":[32,49]}],"mirror":false,"name":"leftArm","pivot":[5,21.5,0],"reset":true},{"cubes":[{"origin":[-6,11.5,-1.5],"size":[2,12,3],"uv":[40,17]}],"name":"rightArm","pivot":[-5,21.5,0],"reset":true},{"name":"rightItem","neverRender":true,"parent":"rightArm","pivot":[-6,14.5,1]},{"cubes":[{"origin":[-3.5,0,-2],"size":[3,12,4],"uv":[0,16]}],"name":"rightLeg","pivot":[-1.9,12,0]},{"cubes":[{"origin":[0.5,0,-2],"size":[3,12,4],"uv":[16,49]}],"mirror":false,"name":"leftLeg","pivot":[1.9,12,0],"reset":true}]}}
    
            难以阅读
    
    1. 然后导入json,3d浏览,完美


      鼠耳Alex

    从上面的案例里我们了解了以下知识
    . 一个材质可以使用多次
    . cubes里的模型不止可以放一个
    同样的道理,bones里也可以放更多的方块组,而不止头身体四肢,只不过方块组不能运动而已。


    写 在 最 后

    到了现在,4D皮肤的基础教程已经全部完成了,原本我想再随后制作进阶教程,但考虑到学业因素还是往后放放吧,高考后会考虑更新进阶教程?
    这些教程足以用来制作类似于网易的4d皮肤了,可以多多尝试添加cubes来组合成你想要的模型。
    好的就是这些了,另外,用minecraft设计一个皮肤也是一个好主意。


    正在设计中的新版4d卡比

    头部使用了4个cubes来创建一个近圆形,通过cubes的累加,你可以创造出任何你想要的模型!
    【哦对了,忘记json了】

    {
        "geometry.humanoid": {
            "bones": [{
                "cubes": [{
                    "origin": [-4, 12, -2],
                    "size": [8, 12, 4],
                    "uv": [16, 16]
                }],
                "name": "body",
                "pivot": [0, 24, 0]
            }, {
                "cubes": [{
                    "origin": [-4, 24, -4],
                    "size": [8, 8, 8],
                    "uv": [0, 0]
                }, {
                    "origin": [-5, 31, -1],
                    "size": [3, 3, 1],
                    "uv": [32, 0]
                }, {
                    "origin": [2, 31, -1],
                    "size": [3, 3, 1],
                    "uv": [32, 0]
                }],
                "name": "head",
                "pivot": [0, 24, 0]
            }, {
                "cubes": [{
                    "origin": [4, 11.5, -1.5],
                    "size": [2, 12, 3],
                    "uv": [32, 49]
                }],
                "mirror": false,
                "name": "leftArm",
                "pivot": [5, 21.5, 0],
                "reset": true
            }, {
                "cubes": [{
                    "origin": [-6, 11.5, -1.5],
                    "size": [2, 12, 3],
                    "uv": [40, 17]
                }],
                "name": "rightArm",
                "pivot": [-5, 21.5, 0],
                "reset": true
            }, {
                "name": "rightItem",
                "neverRender": true,
                "parent": "rightArm",
                "pivot": [-6, 14.5, 1]
            }, {
                "cubes": [{
                    "origin": [-3.5, 0, -2],
                    "size": [3, 12, 4],
                    "uv": [0, 16]
                }],
                "name": "rightLeg",
                "pivot": [-1.9, 12, 0]
            }, {
                "cubes": [{
                    "origin": [0.5, 0, -2],
                    "size": [3, 12, 4],
                    "uv": [16, 49]
                }],
                "mirror": false,
                "name": "leftLeg",
                "pivot": [1.9, 12, 0],
                "reset": true
            }]
        }
    }
    

    (还是Alex的,卡比的还在设计中)

    相关文章

      网友评论

        本文标题:【我的世界4D皮肤】第3课 模型的位置操作

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