← Back to sora_

Patreon

针对滑块(形态键)MOD导致掉帧的“优化”脚本

Published 04/25/2026, 02:54:11 PM · Edited 05/24/2026, 12:11:11 PM

针对滑块(形态键)MOD导致掉帧的“优化”脚本

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

优化形态键与还原exe.zip

优化形态键与还原py脚本.zip

优化形态键与还原py脚本.zip