这篇教程简单讲一下一些mod普遍存在的当大世界中视角为仰视察看mod时,角色出现光照错误(比如光照过暗)的原因和解决方法,以及非ZZMI(XXMI)启动器用户(或者XXMI用户在使用了修复工具后),mod出现的贴图污染(比如头发贴图错误)的原因和解决办法。
这两个问题分别对应了贴图替换的两种写法:槽位替换和hash替换,各自的弊端产生了这两个问题,但也都有对应的解决办法。
首先说原因:
如果mod是使用的槽位进行贴图替换,那么就会出现此问题。因为当视角变为仰视时,角色的光照贴图会从ps-t5、ps-t6变为ps-t6、ps-t7
解决办法:
首先建议mod制作者们在制作mod时,对ini的贴图配置优先考虑使用hash替换贴图,仅法线贴图ps-t4使用槽位替换。这样直接从根本解决问题。
对于已经存在问题的mod,有两种解决方法。一种是直接把槽位替换改成hash替换(只保留法线为槽位替换):
如上图,槽位替换就是直接在ib下面写ps-t3456这种格式,hash替换就是直接使用贴图的hash,用this的写法直接指定贴图资源进行替换。至于贴图的hash怎么获取,可以自己dump获取,也可以打开其他使用了贴图hash的同角色mod的ini直接照抄。
另一种解决方法适用于不方便使用hash替换的情况(比如角色存在多个IB共用贴图的情况,直接使用hash替换可能导致贴图污染),这时可以采用为贴图hash进行贴标签的方法:
写法如上图所示,将光照贴图ps-t5和ps-t6进行如图的if写法修改,然后给6号位的光照贴图hash写一个标签filter_index(筛选索引),这个数字可以看作是给贴图的编号,可以随意写一个,但是要和这个if语句后面使用的数字相同。(我写了两个标签是因为高低显的贴图hash不同,我都写了标签来保证兼容性)
同样先说原因:
一些角色存在不同部位共用贴图的情况,比如头发和四肢是两个不同的ib(两个模型),但是它们共用同一张贴图。如果一个mod只改了四肢的模型和贴图,但没有改动头发,这时直接使用hash替换贴图的话,就可能会导致头发的贴图也会被错误地替换掉。
解决办法:
使用ZZMI或XXMI,因为ZZMI(XXMI)使用了单独的指令run = CommandListSkinTexture对每个IB的贴图槽位进行检查,如果IB下没有这条指令,就不会进行贴图替换,这就避免了头发错乱等贴图污染问题。
如果不想换启动器,也有解决办法,一是把hash改槽位写法(上面介绍的写标签的方法),二是直接改3dmigoto的d3dx.ini文件,改成XXMI的写法,如下图:
默认只检查ps-t0,下面再加一条CommandListSkinTexture指令检查其他槽位。
然而
即使XXMI用户也可能遇到头发贴图错乱等贴图污染问题,这一般发生在对hash替换贴图的mod使用了修复工具之后。修复工具会自动为所有使用到该贴图的IB添加贴图检查,打开mod的ini,搜索Hair.IB,会发现下面的代码:
只要修改为下图即可:
