# 砂砾——覆盖纹理
本节前置知识:
渲染类型
覆盖方法乍一看并不容易有直观理解,我们首先以官方的范本为例,制作一个覆盖纹理,看看效果是什么样的。
# 为砂砾制作覆盖纹理
我们要为之前制作的砂砾设置覆盖纹理:
将官方的范本裁切开,放到ctm文件夹下,并新建gravel_overlay.properties
gravel_overlay.properties
method=overlay
matchBlocks=minecraft:gravel
tiles=0-16
很遗憾,什么都没发生!
# 属性文件的优先级
我们已经为砂砾设置了方法为repeat的properties文件,所以在这里产生了冲突。
在枯山水——优先级章节我们已经提到,可以通过修改属性文件的路径,路径排在前面的文件具有更高的优先级,在log文件中,我们也可以清晰看到属性文件的排序:
那么问题来了,既然我已经将gravel_overlay.properties设置为第一个加载,为什么它还是被dirt_stone.properties(砂砾——重复图案小节砂砾的属性文件)覆盖了?
这是因为matchTiles具有绝对优先级,任何macthTiles的属性文件都会在matchBlocks的属性文件之前加载。我们在dirt_stone.properties里设置的是macthTiles,而这里我们设置的是matchBlocks。
于是我们修改一下属性文件:
gravel_overlay.properties
method=overlay
matchTiles=minecraft:gravel
tiles=0-16
效果:
至此我们可以看出覆盖纹理出现在了砂砾和其他方块的交界处,适合用于方块间的过渡。
# 草方块的过渡
因为覆盖纹理是出现在砂砾上,那覆盖纹理本身应该是草皮的纹理,否则无法实现砂砾和草方块之间的过渡。
为什么我说覆盖纹理应该是草皮的纹理而不是砂砾和草皮各占一部分?
这是因为overlay纹理会在cutout_mipped层渲染,这一层是支持透明纹理的,而且这一层会覆盖在solid也就是普通渲染层的上面,形象地说就是草皮蔓延了一部分覆盖在了砂砾上方。
提示
还不知道渲染层是什么可以看看这一节哦
了解了这一点,我们就可以根据模板,制作草皮覆盖层的纹理了。
闭着眼瞎画的纹理:
我们看到虽然体现出草皮和砂砾的过渡了,但是草皮的颜色没了。
我们需要给属性文件加上tintIndex和tintBlock:
提示
不了解tintIndex可以看看这个小节。
gravel_overlay.properties
method=overlay
matchTiles=minecraft:gravel
tiles=0-16
# 默认值为-1,也就是不使用染色
tintIndex=0
# 使用草方块的染色方式
tintBlock=minecraft:grass
很好,我们已经实现草方块和砂砾的过渡了!
但现在砂砾不管遇到什么方块都会显示覆盖草方块的样子。
所以要加上connectBlocks或者connectTiles加以限制,我们选用connectTiles:
gravel_overlay.properties
method=overlay
matchTiles=minecraft:gravel
tiles=0-16
connectTiles=minecraft:grass_block_top
tintIndex=0
tintBlock=minecraft:grass
我们看到现在只有连接草方块时,砂砾才显示草方块的覆盖纹理:
既然如此,我们为什么不为其他方块也加上草方块的覆盖纹理呢?
gravel_overlay.properties
method=overlay
# 想加多少加多少!
matchTiles=gravel sand red_sand stone
tiles=0-16
connectTiles=minecraft:grass_block_top
tintIndex=0
tintBlock=minecraft:grass
效果:
现在看来,这个属性文件不是属于gravel的,反而是属于grass的,有了这个属性文件,可以让草方块蔓延到任何固体方块上。