目前我知道的绝区零制作透明mod的方法有两种,一种是角色本身具有透明材质,比如安比的背包的黄色壳子,柳的眼睛片等,这些部位的着色器可以读取到贴图的透明度,所以我们可以通过修改alpha值来制作透明效果。
但这些部位往往和我们想要修改的部位不是同一个IB,而且本身带有透明材质的角色很少,所以这种方法很有局限性。
还有另一种方法就是利用3dmigoto本身的代码支持,实现透明。这种方法更加通用,所以本文介绍这种方法。
首先,制作透明mod需要先将mod的部件拆分,导出为具有多个drawindex的mod。比如我们想要让衣服透明,那就要将身体和衣服拆开,让它们分别具有单独的drawindex。如果整个身体只有一个drawindex,那么我们即使添加了透明代码,也只能让整个身体透明,而不是仅仅让衣服透明。
代码对比如下:
这是没有拆分的mod,这个IB只有一个drawindex,无法单独为衣服制作透明。
而这就是做了拆分的mod,每个部件具有单独的drawindex,我们就可以为这些部件单独制作透明效果。
相关阅读:
我来展示一下为柳的裙子添加透明效果。
首先,在ini中找到负责绘制裙子部分的代码:
可以看到有多个drawindex,如果代码内没有注释,我们可以通过在drawindex行前添加分号后回到游戏查看效果,来寻找裙子的drawindex,找到后,我们将这个drawindex使用分号注释掉,然后在上方添加一行代码:
run = CustomShaderTransparency
注意,“run = ”后面的代码中,必要的部分是“CustomShader”,剩余的部分则可以自定义,建议使用部位来命名,比如这里我使用了“CustomShaderTransparencySkirt”:
然后来到Override部分的最后,添加如下代码:
(如果对ini代码的结构不熟悉,也可以添加在所有代码内容的最末尾)
我们只需要调整前三个值来控制透明效果,0为全透明,1为不透明。一般我们会同时调整这三个数值,你也可以单独调整他们的值来改变透明的色调。
最后一行的drawindex就是上一步中我们注释掉的那一行负责绘制裙子的drawindex。
下面是此部分代码的模板:
[CustomShader###]
blend = ADD BLEND_FACTOR INV_BLEND_FACTOR
blend_factor[0] = 0.5
blend_factor[1] = 0.5
blend_factor[2] = 0.5
blend_factor[3] = 1
handling = skip
drawindexed = ###
完成以上修改后,我们回到游戏查看效果,发现裙子的透明效果实现了,但裙子下面的内裤却消失了:
但其实如果我们将视角转到裙底,会发现内裤并没有消失,只是透过裙子观察时,会连同内裤一起透视掉。
这是最需要注意的一点。如果我们回到ini代码中,会发现负责绘制裙子的drawindex,在负责绘制内裤的drawindex之前,这就是导致错误的原因:
代码中的绘制顺序会影响最终mod的显示效果。
我们将裙子的drawindex部分移动到内裤之后(或将内裤的绘制提前),再回到游戏中查看效果:
显示恢复正常了。
一句话总结就是:在ini代码中,需要按照由内到外的顺序进行绘制。
比如素体要在内衣之前绘制,内衣要在外套之前绘制,这样最终的透视效果才不会出错。
最后,如果要对多个部位制作透明,重复上面的修改过程,并为每个部位配置单独的CustomShader即可:
注意按照由内到外的顺序进行绘制才不会出错。
延伸阅读:
还可以给透明效果设置按键切换开关:
