Stone_ingot
本帖最后由 Stone_ingot 于 2023-8-28 11:52 编辑









welcome to————   Worldmachine上色入门   ————&———   次时代生物群系上色技术教程   ———
——————   前言   ——————
        教程前言,最好看完。| 技术由来        啊,上色。        作为地形制作的关键步骤之一,我相信每个地形师或多或少都会为上色时方块种类的稀少而头疼。        满打满算,MC中一共也不过数百种方块,而你又不可能把诸如楼梯栅栏工作台等方块满图乱刷,于是最终常用的方块只剩下几十种。每次给新地形上色的时候都要纠结很久把地形做成某个样子后怎么上色才合适。        但,如果有种方法能够轻易突破这个限制,不动脑子也能随意给地图刷上上百种不同的颜色呢?        早在2021年就有了利用生物群系指定方块颜色调色板来进行上色的尝试,我也将其流程研究清楚后发出。然而这项技术由于操作流程过于繁琐耗时过了很久都未能大面积应用。        半年以前,我编写了一个基于python的上色脚本。这个脚本可以用来将输入的图片根据给定的数据自动生成生物群系调色板材质以及WP上色脚本参数。这使得操作大大简化,将整套图片转上色的流程耗时缩短到了分钟级。与此同时,在一张地图应用上百种颜色成为了可能。        又经过半年的实操和不断完善,利用脚本转化WM贴图的技术终于成熟。虽然依旧年轻,但已经初露头角
        于是在这里,通过这个教程,我将讲述这项技术的全部。
| 技术目的
        用WM制作地形贴图,并将地形贴图通过一系列操作最终快速,低损覆盖到MC地形上,从而做到更加真实的上色。
| 技术路径
        I、在WM中制作地形贴图。        II、通过python脚本将地形贴图转化为WP上色脚本参数与调色板材质。        III、搭建生物群系调色板材质包。        IV、修改WP上色脚本,实现上色。| 看教程前需要知道的:
|  完整走完本教程的内容需要您有:        基本的WP/WM知识——能走完从WM到mc存档的流程,并了解一些基本的模块的作用        基本的调色能力——知道RGB,HSV等颜色空间的基本知识        基本的看懂程序的能力|  同时你需要准备:        Worldmachine4027+        Worldpainter        python3.9+,并安装库:numpypillowmatplotlibopencvtqdmmplcursor        记事本(确信)        装了optifine的Minecraft 1.12.2|  同时,最好看完我一年前半年前的教程(不看也不影响实操)。|  本教程实例用到的文件:





colouring tutorial.zip

(11.68 MB, 下载次数: 0)





——————   本教程基于:Minecraft 1.12.2   ——————教程如有错误,欢迎回复指正本教程所有内容基于CC BY-NC-SA 4.0发表
——————   原理   ——————        教程中用到的各项技术的原理解释,看完对后文实操有很大帮助。| WM上色        作为砖业的地形软件,Worldmachine有着强大的地形上色功能:








抛瓦———        在WM中,可以找到这样的一个模块:Colorizer。








操作界面及简要翻译        这玩意的作用非常简单:以左端的灰度图输入作为读取位置值,对每个像素点在渐变梯度上读取对应的颜色后作为这个点的输出。        举个例子:







栗子        图中左侧为模块界面,右侧为输入/输出结果。我把一个灰度图梯度渐变(gradient)模块的输出接到了colorizer的输入上。此时不难发现gradient把输入的灰度图按照其界面中设定的颜色梯度进行转换从而得到最右边的输出。灰度图的暗部对应颜色梯度上左边的蓝色,而亮部对应红色。        那么现在就有人要问了:这么复杂的界面怎么去调整参数呢?        别急,你肯定在哪里见过这个参数界面:








你敢说你没见过        很好,看来你肯定知道了怎么调整参数了(逃)。上方控制条上的控制点控制关键点颜色位置,左键新建右键删除按住拖动,选中后下方可以编辑关键点的hsva或rgba值,习惯用哪个就用哪个调整关键点颜色(不会真的有人调颜色用rgb的罢)。选project colour就会自动使用预览地形时的着色方法(比如经典的woodlands & mountains,就是黄绿灰的地形着色)。选external file就可以调用外部调色板(可以参考这个)。        现在你已经知道colorizer——WM上色的核心怎么用了。掌握colorizer,就握住了通往WM上色的钥匙。| 调色板材质        有关调色板材质的原理,在我一年前的教程中已经大致阐述。        简单来说,就是optifine中mcpatcher可以通过读取材质中特定位置的调色板,从而根据材质文件设置,将原版中草方块在不同生物群系内呈现不同的颜色的功能拓展到任意方块上。        然而在一年以前的教程中我使用的还是原版的生物群系调色板格式,而在此教程中将使用更便捷的grid格式。        有关grid格式的详细讲解,见此教程中“生物群系调色板”目录下“生物群落(Grid格式)”下内容,这里做一个概括:        grid格式使用256x256调色板,其中每个像素点的横坐标代表其对应的生物群系ID,纵坐标对应方块高度,这样通过此256x256调色板就可以指定任意群系中任意高度下的方块对应的调色板颜色。并且,根据各种省略规则,如果只想指定任意群系下的方块颜色,可以直接使用256x1的调色板,其中横坐标对应生物群系ID。        这使得一个方块在1.12中最多能被指定59种调色板颜色,除去会积雪的生物群系也还有38种可以使用。biomes=[0,1,2,4,6,7,14,15,16,17,18,21,22,23,24,25,27,28,29,35,36,37,38,39, 129,130,132,134,149,151,155,156,157,163,164,165,166,167]#1.12.2所有不会下雪的生物群系的ID
biomes_snow=[3,5,10,11,12,13,19,20,26,30,31,32,33,34,131,133,140,158,160,161,162]复制代码        因而在一个地图中使用3种地表方块即可使得地表颜色种类达到三位数。由于地形贴图中颜色相对单一,减色至三位数颜色后依然能够保真,因而使用生物群系调色板来上色可以使得地形贴图能够低损覆盖到wp地形上。        学不会这么复杂的内容也不要紧。简而言之,就是你往材质包里塞一个256x1的调色板条,然后给配置文件中添上几笔,就能使mc读取每种生物群系对应的调色板,并使指定的方块改变颜色。没错,就是这么方便。








简洁优雅| WP上色脚本        这玩意的部分跟一年前一模一样。所以可以直接去看我一年前的教程了(笑)。        ColorToTerrain是由ctRy编写的基于MIT协议的Worldpainter上色脚本,经过魔改后可用于实现将地形贴图直接按照给定调色板覆盖到WP中的地形上。魔改方法与一年前的教程相同。在教程实例附件中也附有我使用的ColorToTerrain.js。| python贴图转化脚本        终于来到了这项技术的精髓:pytong贴图转化脚本。        半年以前我编写了这个脚本的初代,当时的脚本只实现了最基础的功能,非常原始。经过半年的实操我发现了其中的很多不足,并逐步加以完善。        在ColorToTerrain.js中每个方块都被指定了一个特定的rgb值代表这个方块的颜色。在上色过程中地形贴图上每个像素点都会被读取rgb值,然后依次计算与各个方块的rgb值之间的距离。取距离最小值对应的方块作为此像素点对应位置的地表方块。        而在生物群系调色板中,一个方块能被指定38种调色板颜色。这使得在指定完成贴图中像素点对应的方块后,还要将方块下所有的对应rgb颜色再细分为38个小类,分别对应到生物群系上形成生物群系调色板。而此python脚本的功能就是这个。
        脚本分为主体以及储存输入的方块rgb值的center.txt,储存脚本其余参数的parameters.txt以及储存脚本输出的palette.txt。        脚本首先读取同目录下的texture.png:img = Image.open("texture.png")#读图复制代码       接着按照预设间隔个读取图中像素点,得到图中全部不同颜色的rgb:scale=params[0]
i=math.floor(img.size[0]/scale)
j=math.floor(img.size[1]/scale)
final = []
print('\nReading Texture...')
for x in tqdm(range(i),ncols=80,desc=' ',colour='green'):
    for y in range(j):
        pix = img.getpixel((scale*x,scale*y))
        r=pix[0]
        g=pix[1]
        b=pix[2]
        if [r,g,b] not in final:
            final.append([r,g,b]) 复制代码       接着脚本将每种读取到的颜色分配到center.txt中各个给定的方块rgb下:    number = []
    for i in range(len(final)):#颜色分割
        distance = []
        for j in range(len(center)):
            a = [center[j][1],center[j][2],center[j][3]]
            distance.append(Distance(a,final[i])*center[j][4])
        number.append(distance.index(min(distance)))复制代码       再然后就是将每种方块rgb下的颜色减少到8类中的减色操作了。半年以前我使用的方法是先给贴图减色后运行脚本从而规避问题,而目前的解决方案是使用opencv中的Kmeans聚类减色:def Kmeans(data,num):
    data = np.float32(data)
    criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
   
    compactness,label,center=cv2.kmeans(data,num,None,criteria,10,cv2.KMEANS_PP_CENTERS)

    center = center.astype(int)
    return center
复制代码       这避免了指定的方块rgb导致一个方块下分配超过38种颜色的情况出现,同时使得每种方块能够用满38个群系,增加了颜色数量。        最后就是各种导出的操作了,我还添加了模拟上色功能用来在不进入wp运行ColorToTerrain.js的情况下预览上色完成后最终地表方块种类。








模拟上色结果例
——————   实例   ——————        一个简单小山的从WM上色到WP导出的操作流程实例。跟着教程做一遍能够让你学会操作方法,熟悉流程。| WM上色操作
        本次的实验对象:一座简明的小山。







你不要过来呀.jpg      最终的上色效果如下(我把模拟光照关掉了,为了更好看出上色的效果):








一坨稀饭2.0        本次教程的WM工程图,checkpoint后面为上色部分:








极 其 草 率        本教程中将主要讲解上色部分的思路以及技巧。WM工程图在教程实例附件中给出。在执行上色操作之前,首先需要将地形搓完。在上色的过程中主要会需要用到地形灰度图,风化模块的talus depth输出以及给地形贴底时用到的扭曲后的噪波(分别为checkpoint的第1,2,3输出)。








上色部分工程图        别看上色工程这么复杂,其实概括起来有一个明确的思路:        WM中有一个模块叫chooser:








chooser        在上图的例子中,我将纯红色接入到chooser的第一个借口,将纯蓝色接入到第二个借口,将左黑右白的gradient接入到第三个借口。而chooser的作用就是在第三个借口输入值高的地方输出第二个借口的输入值,在输出值低的地方输出第一个借口的输出值。如果第三个借口输入不是纯白纯黑那么就会将第一个和第二个输入加权输出。        在一般流程下给地形上色的时候,通常是选定一个上色范围(比如坡度)然后用选定的新方块替换原有的地表方块,重复此流程直到上色完成。那么WM的chooser就恰好起到这个“替换方块”的功能,只不过操作的对象是两张输入的贴图(当然chooser也可以choose高程灰度图)。        在WM中上色和WP中的上色思路基本相同。制作好不同地表对应的材质贴图(比如石头的材质和草地的材质)然后选定好替换范围(比如在哪些地方草替换了石头)后用chooser完成替换,重复此步骤即可。        搞懂了这个之后再回头看上色工程图。工程图的最主要的部分其实就是红色框内得出的贴图1与绿色框内得出的贴图2以黄色框内得出的遮罩范围在蓝色框的chooser中完成替换。        逝不逝非常简单?        接下来就是上色工程图每个部分的详细讲解,包括如何制作单个地表种类的贴图,以及替换范围选定等。







erosion及其参数界面        首先,我在输出的地形本体后面接上了一个erosion。这个侵蚀模块将为后面的上色提供flow,wear和deposition遮罩。对于简单的地形也可以直接使用地形制作中的erosion的上述遮罩,但是在这里我还是单独接了一个出来。erosion的duration可以适当调小节省资源。rock hardness也适当调小些,得到更大范围的flow等遮罩。







红框内的部分        红框内的部分是石头的贴图。中心模块是colorizer,其输入是将输入为原地形的select slope与select height相乘后得到。一般而言岩石的colorizer的输入基本上由原地形经遮罩滤波后得到。无论是使用strata的layer还是直接select slope都可以,创造出变化即可。而与select height相乘的目的则是减少海拔较高的部分的颜色变化,使山的高处更加干净。        colorizer本身用的是gradient模式。使用的颜色渐变梯度由WM自带的预设略加调整后得到。在制作地形的过程中如果难以做出选择有时从预设出发是一个好方法。








colorizer的参数设置及其输出        接下来需要对colorizer输出的贴图做调整。首先我将之前erosion的wear遮罩经equalizer和inverter处理后(均未调参)与colorizer输出做overlay合成,将wear的纹理叠加到贴图上。再然后我用经过bias/gain调整的flow遮罩作为adjust color的遮罩,为岩石贴图增加沟壑的细节。        bias/gain这个模块在上色的时候比clamp的expand模式好用。既能更方便调节遮罩亮度/对比度又能保留边缘平滑。        最终得到的岩石贴图如下:








adjust color及其输出        接下来讲解绿色部分。绿色部分是草地的贴图。在这里我简单粗暴的用了HYLK的上色宏来给草地上色(效果很不错!)。把地形本身,flow,wear和deposition遮罩,talus遮罩和distortion遮罩接到输入后选择草地预设稍微调整即可得到非常好的一张草地上色贴图。此处distortion遮罩用的是上文提到的给地形贴底时用到的扭曲后的噪波,这样能使得草地上的纹理更贴合地形本身。宏本身的调参上我将石头的坡度最小和最大限制都调为了90°,也就是不产生石头(既然制作的是草地贴图就只考虑草地不要考虑石头了)。最后我接了一个adjust color用于调整贴图颜色,草地贴图就制作完成了。        (如果打开HYLK的上色宏看的话会发现里面还是一堆模块加colorizer,所以上色之源还是是colorizer。)







草地贴图最终输出        黄框的部分则是选择草地范围的遮罩(三个selector都接的原地形)。想要看懂这5个模块,首先要从一个问题入手:一座山上哪里会长草?        一个简单的答案:海拔低,坡度小,湿度大。        那么再回头看这5个模块就很好理解了:select height与select slope相减控制海拔和坡度,再把得到的遮罩与select wetness相加从而使湿度大的地方灰度值更高。注意到我把select height的输出接到了select wetness的遮罩上,这样使得湿度的选取也能考虑到海拔的因素。        最终我们得到了这样的遮罩(注意到遮罩并没有做二极化处理,因为根本不需要):








遮罩最终输出        最后在蓝框内将岩石贴图和草地贴图合成起来。岩石贴图接chooser输入一,草地贴图接chooser输入二,遮罩接chooser输入三,得到以下结果:








合成结果        蓝框内工程图的剩余部分主要是对贴图的一点修正。首先是用贴图与一个棕色的纯色输入一个combiner/average模块,将talus遮罩合成了上去:







talus遮罩的范围变成了棕色        接下来用贴图与对原地形用select covelxity得到的遮罩输入combiner/overlay模块,将噪点信息合成进贴图。注意这里overlay的值很小。这里的select covelxity除了对原地形使用,还可以接在诸如flow遮罩或distortion遮罩等各种地方,都有独特的效果。








放大后的合成效果        最后的最后,将得到的贴图用bitmap output输出为texture.png,就大功告成了。








texture.png        新手入门在面对上色时肯定会不知所措。在这里我推荐两个学习地形上色的方法。        1、WM示例教程。在File选项栏里可以看到一个Open example world的选项,里面是官方给出的许多示例地形,而在其中不乏上色完成的工程。把官方的示例弄懂对学习上色大有帮助。








官方示例        2、卫星地图。有什么比大自然的地表上色更自然的呢?        这里附一个我写的看卫星地图的网页工具,解压后用浏览器打开即可:





arcgis_map.zip

(623 Bytes, 下载次数: 0)













大自然的上色| python脚本使用
        得到地形贴图之后就需要用python脚本进行处理。脚本本身在教程实例附件中可以找到。按照上文要求配置完成python运行环境可以直接双击打开.py文件。        脚本会读取同目录下的center.txt与parameters.txt作为配置文件,同时其部分输出会储存在palette.txt中,因此在运行脚本时请保证同目录下有此3个文件。








配置文件        首先打开parameters.txt。其中有5个参数:            center(bool):是否进行方块颜色读取。默认为false。            scale(int):计算调色板时读取地形材质的采样间隔,数值越小采样越精确同时耗时越长。默认为128。            export(bool):是否输出调色板以及材质。默认为false。            simulate(bool):是否进行上色模拟。默认为false。            scale2(int):进行上色模拟时读取地形材质的采样间隔,数值越小模拟越精确同时耗时越长。默认为8。        当center值为false时export与simulate的值会被设为false。当export的值为true时scale的值会被设为8。配置文件中参数可以缺失,此时将采用默认值。        将center的值设置为false。center=false
scale=128复制代码        双击运行脚本,会得到如下结果:








控制台输出








3D图表输出        此时3D图表中显示的是地形贴图中出现的颜色的大致种类及在RGB空间中的位置。左键拖动旋转图表,右键拖动缩放图表。调整角度,观察各个颜色的分布情况。








旋转和缩放后的图表        不难发现在此实例中贴图中颜色大致分为3类。这与直接观察地形贴图的结果相符(灰色的岩石,绿色的草地,棕色的砂土)。因此对此实例的贴图进行处理大致需要提供3种方块的颜色。        单击图表中的点,可以得到其RGB值。








单击得到RGB值        此时打开center.txt。其中储存了每种方块,其对应的RGB值以及其他参数。格式如下(如果积雪处参数值留空则使用不会下雪的生物群系生成调色板,为snow则使用会下雪的生物群系):,,,,,复制代码       在此案例中,我在center.txt中输入了如下参数(注意到岩石的方块我用的是安山岩andesite,目的是防止地底下的岩石也大量被生物群系调色板影响,否则生存中挖到地底下后会san值狂掉):andesite,95,93,87,1
coarse_dirt,133,121,102,1
grass,87,108,59,1复制代码       此时回到parameters.txt中,将center值设为true,同时将simulation值也设置为true,scale2值设置为1:center=true
scale=128
simulate=false
scale2=1复制代码       保存后重新双击运行脚本,得到如下结果:








控制台输出









3D图表输出









模拟输出        可以看到在3D图表中表示方块颜色的三个点被加深标注出来,而其余的点则按照所属的方块类别变成了与此方块的加深标识相同的形状。这样一来就可以根据图表判断地形贴图中颜色到方块的对应情况了。        同时脚本还会在同目录下保存如上图的simulation.png。打开后即可查看脚本模拟的最终地表方块分布。图中颜色对应center.txt中的方块的颜色。        根据simulation.png中方块的分布情况调整center.txt中方块的参数并重新运行脚本,重复此操作从而得到合理的地表方块分布。以下是调整参数的思路:        1、调整方块对应RGB值        2、调整方块的权重。权重在计算最小颜色距离时作为乘数,因而理论上权重越大方块对应的调色板颜色分布越密集。
        3、脚本支持一种方块对应多个方块颜色,只需在center.txt中添加对应参数即可,举例如下:
andesite,95,93,87,1
coarse_dirt,133,121,102,1
grass,87,108,59,1
coarse_dirt,114,51,4,1复制代码       此时方块coarse_dirt即对应两种方块颜色。注意到此操作并不会改变方块coarse_dirt总的调色板数量最大值限制,因而一种方块不应被指定过多颜色。        得到合理的地表方块分布后,在parameters.txt中将export值设置为true。center=true
scale=128
export=true
simulate=true
scale2=1复制代码        保存后重新双击运行脚本,得到如下结果:









控制台输出









3D图表输出
        export值为true时scale值会被设置为8,这会导致运行结果更加精确,以及一些方块对应的颜色的小变化。        此时再同目录下回生成与对应的方块同名的256x1大小的.png调色板(会覆写同目录下同名文件,注意避免此情况发生)。同时palette.txt的内容也会被覆写为修改WP上色脚本所需要的文本。








实例中生成的调色板









被覆写的palette.txt中的内容        此时python脚本所做的工作就告一段落了。如果熟练的话上述过程能在10分钟之内完成。| 材质包搭建
        运行完python脚本之后的工作便是搭建生物群系调色板的材质包了,而此过程也决定了这项技术能够适配的游戏版本。本教程中提供的是1.12.2下的材质包搭建方法,若需要适配其他版本也可自行研究。        此示例中搭建的材质包在教程实例附件中可以找到。材质包文件结构如下:terrain resources{
    pack.mcmeta#总配置文件
    assets{
        minecraft{
            mcpatcher{
                color.properties#生物群系调色板配置文件
                colormap{
                    [1]#调色板存储
                    }
                }
            models{
                block{
                    [2]#方块模型存储
                    }
                item{
                    [3]#物品模型存储
                    }
                }
            textures{
                blocks{
                    [4]#方块材质存储
                    }
                }
            }
        }
    }复制代码       根据上述文件结构参照示例中材质在游戏的资源包文件夹中搭建材质包框架。在给定位置创建上文给出的命名后的文件夹和配置文件等。[1],[2],[3],[4]处留空。材质包无需压缩也可被识别,因而此处不需要压缩材质包。        搭建材质包框架完成后打开pack.mcmeta,输入如下文本:{
   "pack":{
      "pack_format":3,
      "description":"Terrain resources"
   }
}复制代码       输入完保存后材质包即可被MC所识别。关于此文件的更多信息,见wiki








被识别的材质包        接下来将python脚本输出的调色板材质移动到[1]处,并打开color.properties进行编辑。








将调色板移动到指定位置palette.format=grid
palette.block.~/colormap/coarse_dirt.png=3\:1
palette.block.~/colormap/grass.png=2 31\:1 31\:2 175:\2 175:\3 59:\7
palette.block.~/colormap/andesite.png=1\:5
palette.block.~/colormap/leaves.png=18 161复制代码       其中第一行palette.format=grid意为此材质包采用grid格式调色板。后面的每一行对应一个调色板。        ~/colormap/xxx.png即为调色板的存储位置。        =3\:1则意为此调色板对应的方块是数据值为1的ID为3的方块(在这里也就是砂土coarse_dirt)。关于方块数据值见下图:








1.12.2方块与物品数据值 from wiki        除去python生成的调色板外在这里我还创建了一个单色的绿色的调色板用于固定树叶的颜色,并相应的在color.properties中添加了配置语句:palette.block.~/colormap/leaves.png=18 161复制代码       并且同一个调色板也可以指定应用到多种方块上,如下语句即为将grass.png应用到草方块草高草撅大撅上:palette.block.~/colormap/grass.png=2 31\:1 31\:2 175:\2 175:\3 59:\7复制代码       关于color.properties的更多内容,见此教程。        编辑完成color.properties之后需要更改方块材质来适配调色板。方块的最终材质是由其原本的材质与调色板颜色相乘后得到的,因而如果想要使调色板颜色正确显示的话就需要将方块本身材质的颜色调整为接近纯白。        首先需要提取原版的方块材质。使用压缩软件打开游戏.jar文件后在assets\minecraft\textures\blocks下即可找到。将调色板使用到的方块的材质复制到4]中。        接着使用图像编辑软件(如[paint.net)打开材质,首先将材质黑白化,然后找到亮度/对比度选项并调整直到材质接近纯白(注意是接近,因为依然需要保留一定纹理)。








调整后的材质,注意到并不是纯白        按照上述步骤处理所有需要的材质并存储到[4]处。此时如果尝试加载材质包,可以发现被调色的方块已经可以正常显示其颜色。








编辑过后的材质        然而此时材质包依然存在问题。在将方块材质修改为白色的同时其物品材质和粒子材质也变成白色的了。这是我们不希望看到的,因而接下来需要通过修改方块模型的方式来解决这一点。        在assets\minecraft\models下的block文件夹中找到方块对应的模型,复制到[2]处并修改。此处以安山岩andesite的模型为例。{
    "parent": "block/cube_all",
    "textures": {
        "all": "blocks/stone_andesite"
    }
}复制代码       这是安山岩的原版模型。其中"parent": "block/cube_all",意为此方块继承cube_all模型,而"all": "blocks/stone_andesite"意为将方块模型使用材质指定为blocks目录下的stone_andesite.png。此处将其修改为:{
    "parent": "block/cube_all",
    "textures": {
        "all": "blocks/stone_andesite_greyscale",
                "particle": "blocks/stone_andesite"
    }
}
复制代码       此处"all": "blocks/stone_andesite_greyscale"表示将方块模型的材质指定为blocks目录下的stone_andesite_greyscale.png,而相应的你需要回头把你之前修改完的白色材质的名称改一下。同时"particle": "blocks/stone_andesite"意为将方块的粒子采用的材质指定为stone_andesite.png(这时就不需要再材质包里有这个材质了,因为材质包里没有的材质游戏会从原版材质中读取,从而实现粒子效果的材质仍然为原版材质)。        同理,在assets\minecraft\models下的item文件夹中找到方块的物品对应的模型复制到[3]处并修改。此处依然以安山岩andesite的模型为例。{
    "parent": "block/andesite"
}复制代码        可以看到原版的安山岩的物品模型直接继承了它的方块模型。此时将其改为如下内容:{
    "parent": "block/cube_all",
    "textures": {
        "all": "blocks/stone_andesite"
    }
}复制代码       这段内容让安山岩的物品模型直接继承cube_all模型而不是其方块模型,并指定材质为stone_andesite.png。        按照此方法修改调色板材质包中用到的所有方块的模型(像草方块草高草撅大撅树叶这种方块则不需要修改,因为在原版中这些方块也是由生物群系控制调色板的,方块和物品模型已经做好了适配)。此时进入游戏加载材质包检查,可以发现修改过模型的方块的物品以及其破坏粒子已经恢复正常。








实例用到的模型文件,其实只有两个        修改完模型文件后材质包就搭建完成了。材质包的模型文件以及白色的方块材质可以通用,因而在完成上述操作后之后的地形材质的搭建可以直接复制粘贴,剩下的工作基本上只有删除旧的调色板并替换为新的调色板文件,在一分钟之内即可完成。| 后续处理
        打开教程实例附件中的ColorToTerrain.js,找到这一行:var def = "blablabla".split("\n");复制代码       打开palette.txt,将其中的内容复制到blablabla处。然后删除最开头的第一个\n,完成。        然后检查一下这一行:var terrainArr = ["Grass", "grass", "Dirt", "coarse_dirt", "Podzol", "sand", "red_sand", "Desert", "RedDesert", "Mesa", "HardenedClay", "white_terracotta", "orange_terracotta", "MagentaClay", "LightBlueClay", "yellow_terracotta", "LimeClay", "PinkClay", "GreyClay", "LightGreyClay", "cyan_terracotta", "PurpleClay", "BlueClay", "brown_terracotta", "GreenClay", "red_terracotta", "BlackClay", "Sandstone", "stone", "Rock", "Cobblestone", "MossyCobblestone", "Obsidian", "Bedrock", "Gravel", "clay", "Beaches", "Water", "Lava", "StoneSnow", "snow", "Netherrack", "SoulSand", "Netherlike", "Mycelium", "EndStone", "Resources", "Custom1", "Custom2", "Custom3", "Custom4", "Custom5", "Custom6", "Custom7", "Custom8", "Custom9", "Custom10", "Custom11", "Custom12", "Custom13", "Custom14", "Custom15", "Custom16", "Custom17", "Custom18", "Custom19", "Custom20", "Custom21", "Custom22", "Custom23", "Custom24", "RedSandstone", "granite", "diorite", "andesite", "StoneMix", "Custom25", "Custom26", "Custom27", "Custom28", "Custom29", "Custom30", "Custom31", "Custom32", "Custom33", "Custom34", "Custom35", "Custom36", "Custom37", "Custom38", "Custom39", "Custom40", "Custom41", "Custom42", "Custom43", "Custom44", "Custom45", "Custom46", "Custom47", "Custom48", "GrassPath", "Magma", "Custom49", "Custom50", "Custom51", "Custom52", "Custom53", "Custom54", "Custom55", "Custom56", "Custom57", "Custom58", "Custom59", "Custom60", "Custom61", "Custom62", "Custom63", "Custom64", "Custom65", "Custom66", "Custom67", "Custom68", "Custom69", "Custom70", "Custom71", "Custom72", "Custom73", "Custom74", "Custom75", "Custom76", "Custom77", "Custom78", "Custom79", "Custom80", "Custom81", "Custom82", "Custom83", "Custom84", "Custom85", "Custom86", "Custom87", "Custom88", "Custom89", "Custom90", "Custom91", "Custom92", "Custom93", "Custom94", "Custom95", "Custom96"];复制代码       中的方块名是否与你在center.txt中输入的方块名一致。如果不一致则修改此行中的方块名。        保存,ColorToTerrain.js修改完成。        打开worldpainter,导入地形灰度图。然后打开Tools选项栏中的Run Script。选择修改完成的ColorToTerrain.js,在Parameters中输入到texture.png的路径并运行。








Run Script界面









运行结果








显示生物群系后的运行结果        可以看到地表方块与生物群系已经成功刷到了地形上。        略作处理,刷上点草和树木,导出,打开MC,加载材质包,然后——
打  开  世  界








小山头
俯视地表上色,可以更明显的看到颜色的变化
——————   结语   ——————| 技术局限        截止到目前,此技术依然有以下局限:        1、由于调色板材质包未有读取的适配,地图难以导出为模型并渲染,也不能直接在chunky中渲染。        2、上色之后的生物群系极其杂乱,难以做出更多基于生物群系的操作(如不同的树叶颜色)。








然而你依然可以做出不同的树叶颜色——基于树叶种类        3、python脚本以及ColorToTerrain.js有进一步的优化和改进空间。        这些问题需要在今后的不断实践中改进并找出解决方案。| 技术意义
        有人会说:你这项技术感觉没什么大不了的啊,我直接上色也能做出这样的效果,甚至更好。        那么我认为你的格局就太小了。        火车刚刚出现的时候,每小时只能跑4公里,甚至比快步走路慢。当时的人们也认为火车没什么用。然而现在火车已经成为最重要的陆路运输方式之一,每年有成千上万的人坐火车出行,有亿吨级的货物通过铁路运输。        那么回过头来,这项技术意味着什么?是地表的颜色渐变更加丰富自然?是岩石的上色更加壮观?还是这样做比传统的上色方法更快?        都不是。这项技术的真正意义在于解放生产力。从今以后,你不必再思考今天的地形该搭配什么方块,什么样的方块有我需要的颜色,你只需要照着流程花个十几分钟跑一遍,就在地表刷上任意颜色。        从今以后,限制你的将只有你的想象力。Sky's the limit.









更新日志2023/8/28 完成教程。

来自群组: Nothingness

第一页 上一页 下一页 最后一页