Patreon
针对滑块(形态键)MOD导致掉帧的“优化”脚本
Published 04/25/2026, 02:54:11 PM · Edited 05/24/2026, 12:11:11 PM

For English users, I'm sorry that I may not be able to accurately express the purpose and potential risks of this script in English. Therefore, I do not recommend using this script. If you really want to use it, you can try translating the following content and the content of the script
开始做滑块(形态键)MOD后,特别是将滑块数目扩充上来后,就陆陆续续有人表示MOD变卡了,这是由于滑块使用的Shapes.hlsl这个着色器效率很低(写这个着色器的人表示因为太烂所以干脆不再弄这个了,WWMI和EFMI都是导出工具会加形态键的功能,而SRMI没有,还是只能用这个着色器),占用了大量的资源,6个形态键就是相当于7个(6+1个基态:滑块全调0的状态)MOD的角色同屏,去计算每个滑块和基态的中间值,而这次的银狼由于stride从40变到56,相当于同点数下比其他角色占用高出了40%,就有很多配置低的会出现严重掉帧的问题。下面我会提供两个方法可能对出现掉帧的人有帮助(两个方法可以同时使用,但可能对部分人不生效,加上下面的信息部分来源于AI,我也不清楚对不对,所以优化打了引号):
1.手动修改ini,主动去掉某些不使用的形态键:
打开ini文件,搜索[CustomShaderComputeShapes],找到下面内容:
[CustomShaderComputeShapes]
x88 = $BoobsSize
cs-t50 = copy ResourceXXXPosition.1
cs-t51 = copy ResourceXXXPosition.2
cs = ./res/Shapes.hlsl
cs-u5 = copy ResourceXXXPosition.1
ResourceXXXPosition = ref cs-u5
Dispatch = x, 1, 1
x88 = $ButtSize
cs-t50 = copy ResourceXXXPosition.1
cs-t51 = copy ResourceXXXPosition.3
ResourceXXXPosition = ref cs-u5
Dispatch = x, 1, 1
x88 = $ThighsSize
cs-t50 = copy ResourceXXXPosition.1
cs-t51 = copy ResourceXXXPosition.4
ResourceXXXPosition = ref cs-u5
Dispatch = x, 1, 1
x88 = $VaginaOpen
cs-t50 = copy ResourceXXXPosition.1
cs-t51 = copy ResourceXXXPosition.5
ResourceXXXPosition = ref cs-u5
Dispatch = x, 1, 1
x88 = $AnusOpen
cs-t50 = copy ResourceXXXPosition.1
cs-t51 = copy ResourceXXXPosition.6
ResourceXXXPosition = ref cs-u5
Dispatch = x, 1, 1
x88 = $PregSize
cs-t50 = copy ResourceXXXPosition.1
cs-t51 = copy ResourceXXXPosition.7
ResourceXXXPosition = ref cs-u5
Dispatch = x, 1, 1
ResourceXXXPositionCS = ResourceXXXPosition
cs-u5 = null
cs-t50 = null
cs-t51 = null
上面除了第一个$BoobsSize建议不要去动,以及结尾的四行不要去删掉,其他的两个分隔符之间的内容可以选择性的整段删除,不需要哪个形态键就可以删掉哪段(对应形态键的滑块也会失去调整大小的功能),少一个形态键就相当于少一个MOD的角色需要被加载,就不会那么卡了。不过代价是部分形态键不能使用。
2.使用下面我提供的脚本“优化”这个形态键,不一定奏效,因此请仔细看说明(不看说明可能造成严重后果):
这里同时提供了exe版本和py脚本,exe版本可能会误报毒,介意的请使用py脚本(需要安装python)。这个脚本集成了优化和一键还原的功能,仅针对我的MOD生效。下面是使用方法:
①将脚本放到MODs文件夹,也可以放到单独的一个MOD文件夹内(仅针对单个MOD生效)
②双击运行,会弹出一个窗口,显示:输入Y进行优化,输入N还原优化 (Y/N)
这时候输入Y然后回车是进行优化,输入N然后回车是还原优化
③选择进行优化后,会先扫描符合优化条件的文件,然后再次弹出一个询问:是否合并64字节一个线程处理?注意:部分显卡合并后反而可能导致更卡 (Y/N):
输入Y然后回车选择合并线程会做出两个修改,一是会将Shapes.hlsl文件中的[numthreads(1, 1, 1)]改为[numthreads(64, 1, 1)],同时会将ini文件中[CustomShaderComputeShapes]里的Dispatch = x, 1, 1的x值除以64,然后向上取整,这样做的好处是驱动向 GPU 提交的线程数会下降64倍,可以解决一部分人卡的问题,但这个数也不是越大越好,只要不再是瓶颈了就行,而且64兼容性最好,不过存在部分人可能这个优化不起什么作用(卡的瓶颈不在这),甚至可能更卡,因此建议是和否都试试。
④在上个选择结束后,还会询问:是否取消形态键的 tangent 和 tangent1 的信息?选择是可能会对模型一些细微效果有影响,但能减缓卡顿程度 (Y/N)
如上所述,银狼的stride是56,它来源于position(12)+normal(12)+tagent(16)+tagent1(16),他们分别代表position-顶点的位置 normal-法向 tagent-主要是边缘线 tagent1-法线,法线(tagent1)除了银狼其他角色都没有,边缘线(tagent)不同形态键和基态之间几乎没有太大区别,因此可以在着色器中直接不计算这部分而去直接使用基态的就行了,因此这里选择Y后会删除shape.hlsl中tagent和tagent1的计算部分,对于银狼能节省近50%在这上面的GPU带宽消耗,且几乎不会有很明显的影响。
⑤上个选择如果选择Y,还会询问:是否也取消形态键的光照信息(已取消形态键 tangent 和 tangent1 的信息)?选择是可能会对光照的实际效果有影响,但能减缓卡顿程度 (Y/N)
在已经删掉tagent和tagent1的计算后如果还嫌不够,且不在意角色身上的自发光阴影区别,可以把上述normal部分也删掉,只使用位置信息(形态键最主要的作用)。但因为删除后会使用基态位置的光照(比如光照下胸比较大时一侧通常会有大块的阴影部分,删除光照后默认使用的胸最小时候的光照,本该是阴影的部分将不是阴影),如果不在意这个影响可以输入Y已取得最大限度的优化。
选择优化如果进行了任意的优化,则会对修改过的文件进行备份,会出现一个加了disabled前缀的txt文件,请不要删除这个文件。因为执行还原的时候需要用到这个文件,而需要更新我的MOD的时候需要先执行还原然后再覆盖(当然也可以单个MOD整个删除,来避免脚本检测到disabled txt文件后不执行优化) 。
图解:
PS:接下来几天会肝下游戏顺带休息下,然后好再去做新的MOD
Attachments (2)
优化形态键与还原exe.zip
优化形态键与还原py脚本.zip
