
*文章内所使用的Minecraft均为Java版本
由于可以进行便捷的抠像,绿幕在视频制作中十分重要。在游戏中得到绿幕可以依靠mod实现,但mod往往对游戏版本有要求,同时也要考虑mod加载器的适配、是否存在冲突等。此前我搜索了很多在游戏中创建绿幕的方法,绿幕两个关键字搜出来的绝大多数内容都是绿幕成品片段,搜出来的mod也不能满足版本需求,最终无果。在@jocemod的提醒以及在某个论坛上看到了用材质替换的方法,便进行了尝试。
绿幕材质成品我先放上来,想看制作的过程可以继续往下看,示范版本为1.21.4
荧石绿幕(1.21.4/1.19.4/1.16.5/1.14.4/1.13.2/1.12.2测试可用)
https://wwvn.lanzoul.com/iU0Oy2oil1sf
黄绿色染色玻璃绿幕(更好用,但只支持1.21.2以上版本)
https://wwvn.lanzoul.com/inyrQ2oil1tg
关于资源包的制作可以看Xekr的教程
提取原版材质包的方法在视频的5:32,我在上一篇文章《盔甲隐藏材质的制作与经验分享》中也有提及,在这里不再赘述。按照原版材质的结构创建资源包的必备的三个文件:
1.在游戏的资源包存放文件夹(resourcepacks)内新建文件夹,命名为“荧石绿幕”,然后在这个文件夹里面继续新建文件夹,命名为“assets”,在其内继续新建文件夹命名为“minecraft”,在其内继续新建并命名为“textures”,在其内继续新建并命名为“block”。
2.回到assets同一层级,也就是“荧石绿幕”文件夹内,新建文本文档,打开并输入以下字符,你可以直接复制粘贴:
{"pack":{"pack_format":46,"description":"将荧石改为绿幕"}}
(1)pack_format参数是代表资源包版本号,这个用于说明适用的游戏版本,可以到中文Minecraft Wiki查看游戏版本所对应的资源包版本号:https://zh.minecraft.wiki/w/%E8%B5%84%E6%BA%90%E5%8C%85 如果资源包版本号和游戏版本不对应,那就会显示红色,并在使用时警告。不过一般情况下可以无视这个。
(2)description代表描述文本,也就是显示在资源包处的说明文字,双引号内可以换成任意内容。
然后Ctrl+S保存,关闭,点击文件资源管理器上方的查看,然后在右边勾选显示扩展名,将该文本文档命名为“pack.mcmeta”。

3.创建图片作为资源包封面,图片大小一般64×64就足够,你也可以用更大尺寸的图片如128×128等,将其命名为“pack”,格式为“png”。

有了这三个文件游戏才会将其识别为资源包,现在文件结构应该是这样的:

随后将原版材质内荧石的材质复制粘贴过来,原材质位置:
assets\minecraft\textures\block\glowstone
请善用文件资源管理器右上角的搜索功能,不要花大把时间人工寻找。

将其复制并粘贴到“荧石绿幕”文件夹内对应的位置:
荧石绿幕\assets\minecraft\textures\block\
并将该材质用图片编辑软件改为高饱和度的绿色并保存(在不同的情况下你也可以更改它的材质图片,例如改为蓝色就作为蓝幕)。

由于“荧石绿幕”这个文件夹已经具有了资源包的结构,被游戏视为了资源包,所以在游戏中可以直接使用查看效果。


在游戏内应用的效果如上图所示,左边为荧石,右边为雪块。可以很明显的发现随便修改一个普通方块为绿幕材质最后的效果不尽人意,存在AO(环境光遮蔽,即面与面相交处的阴影)同时也会受到天空光照的影响,在夜晚无法使用。而自发光方块似乎本身就不存在AO,并且也无需担心光照问题,但仍然存在阴影面,不过这个程度也基本能用了,我的红石教程就是在这样的绿幕下完成的。
直到有一天我刷到了这个视频,并且在@Yuki_Tyan大佬的回复中得到了方向。

提到的Wiki页面是有关资源包模型的内容:
https://zh.minecraft.wiki/w/%E6%A8%A1%E5%9E%8B?variant=zh-cn

关于资源包文件结构和模型文件可以看Xekr的教程:
第七讲网页链接
第八讲网页链接
第九讲网页链接
虽然我还是看得半懂不懂的,也没有修改资源包内这些代码的经验,我就花了两三个小时不断尝试,一边改完保存一边在游戏内F3+T重载资源包。在“minecraft”文件夹内新建文件夹“models”,继续在其内新建文件夹并命名为“block”,现在文件结构应该是这样的:

然后把原版资源包里荧石对应的json文件复制粘贴过来,原版json文件位置:
assets\minecraft\models\block\glowstone
复制粘贴到“荧石绿幕”文件夹内对应的位置:
荧石绿幕\assets\minecraft\models\block\
用Notepad++打开后是以下内容(用记事本打开也行只不过不太好用):

最开始是套用了XeKr在教程中举例的讲台,为了不出错,就直接往里面直接粘贴了原版讲台的“element”的代码,蓝色部分是我复制粘贴加入的内容:

保存之后,在游戏里加载资源包一看,天塌了。

倒也和想象中的没差太多,至少是荧石有了讲台的形状。经过一部分一部分地删除可以发现,蓝色部分是讲台斜面的模型代码:


继续删除可以发现这一部分是讲台柱子的模型代码:


最后保留了底座这一段代码,并且将“to”修改为[16, 16, 16],使它充满整个方块


后面反复尝试加入shade均没有成功,毕竟没有参考代码例子,最后在wiki的这个页面里用Ctrl+F查到树苗中shade参数的使用示例,才知道false不用加双引号。
https://zh.minecraft.wiki/w/Tutorial:%E5%88%B6%E4%BD%9C%E8%B5%84%E6%BA%90%E5%8C%85/%E6%A8%A1%E5%9E%8B

最后试着往里加入"shade": false, 阴影面确实消失了。


因为我看shade在faces前面,也试过把faces那一大坨删掉,但删掉后阴影又回来了,最后还是保留了下来。最后我把"up"面的rotation去除,加了"cullface": "up",使得和其他面一致,这样应该就是个正常方块了。(在评论区交流之后,我额外删掉了“uv”这一串多余代码)


但材质要让它变成荧石的绿幕材质才对,我把每个面的"texture"后改成了"#glowstone",游戏内没有变化,突然想起来在代码最开头已经定义了 "all": "minecraft:block/glowstone",于是又把每个面的"texture"后修改为了“#all”


这下荧石绿幕的阴影面彻底消除了。至于AO,我也尝试过在代码里添加 "ambientocclusion": false,但在游戏内观察没有差别,可能是因为荧石是自发光方块没有AO的原因,所以不用加这一句。不过其他方块还是有AO的,如果想要别的方块不产生AO,可以在对应方块的代码里添加这一句来去除。这里以草方块为例,同样将草方块的json文件复制粘贴过来,打开并在“parent”后加入了这句代码,保存后即可在游戏中重载。

仔细观察一下加入之前和加入该语句之后的差异,当然这只是关闭了草方块的AO,其他方块你也可以按照相同方法来做。除非有特定需求,不然一般情况下都不需要动其他方块的AO,拍摄后看起来可能会有点奇怪。

最后将资源包的三个文件压缩打包为一个文件,做好命名就完成了,其余多余文件都可以删除。这个压缩包要放到resourcepacks文件夹中才能被识别,不要留在“荧石绿幕”文件夹里。

推荐至少准备两个方块的绿幕材质,以防万一其中一个方块需要在绿幕中出镜。另外是当绿幕中存在绿色物体,你可以直接更改资源包assets\minecraft\textures\block内材质的颜色,例如直接改为高饱和度的蓝色,就成为了蓝幕,也不用再次搭建场景,直接保存了就能用。
目前荧石绿幕使用下来唯一的缺点就是顶面不能封闭,一旦搭建了完全封闭的方盒绿幕场景,在里面的方块会由于没有光照导致变得很暗,虽然可以用光源方块解决这个问题,但会让整个过程麻烦很多。

在评论区交流后得知,由于玻璃透光,可以解决上述问题,所以我又试着修改黄绿色染色玻璃的json文件,并且额外添加了这两行代码来去除AO且以15发光等级渲染(不用普通玻璃是因为我觉得它的出镜概率比染色玻璃高很多):
"ambientocclusion": false,
"light_emission": 15,

游戏内效果不错,这下确实是可以密闭了,玻璃不影响光照,方块会按当前时间正常显示对应光照效果。light_emission是只对该方块的渲染有影响,并不代表真的发光从而影响旁边的方块,可以放心使用。


但是light_emission这一参数是在1.21.2的24w33a加入的,所以在低版本中无法生效。所以综合来说,1.21.2版本以上用玻璃绿幕效果更好,更低的版本如果荧石绿幕要封闭的话就用光源方块凑合吧。