| Date uploaded | 2 weeks ago |
| Version | 1.1.1 |
| Download link | alp-PerfKit-1.1.1.zip |
| Downloads | 29 |
| Dependency string | alp-PerfKit-1.1.1 |
This mod requires the following mods to function
BepInEx-BepInExPack_GTFO
BepInEx pack for GTFO. Preconfigured and includes Unity Base DLLs.
Preferred version: 3.2.2README
PerfKit
GTFO 的纯参数型性能调节。不改任何游戏数据、不打 Harmony 补丁、不碰存档, 只调整 Unity 的全局画质/日志参数。所有项目都能在配置文件里单独开关。
配置文件:BepInEx\config\local.perfkit.cfg(首次启动后生成)
默认配置
[1-Log]
StripLogStackTrace = true # 关掉 Log/Warning/Assert 的堆栈追踪
StripExceptionStackTrace = false # Exception 保留,方便排查
[2-Shadows]
Enabled = true
DistancePercent = 65 # 阴影距离 = 原来的 65%
[3-Textures]
Enabled = true
MipOffset = 1 # 相对游戏自身设定再降一档
[4-Threads] # 原 GTFOThreadRelief 的功能
JobWorkerCount = 0 # 0 = 不修改
AsyncUploadBufferMB = 0 # 0 = 不修改
AsyncUploadTimeSliceMs = 0 # 0 = 不修改
AsyncUploadPersistentBuffer = false
[5-Misc]
TargetFrameRate = 0 # 0 = 不修改
VSyncCount = -1 # -1 = 跟随游戏内设置
DisableVSyncWhenCapping = false # 锁帧时是否自动关 VSync
ReapplySeconds = 0 # 0 = 只在启动时应用一次
配置文件里每一行上面都有中英双语的注释。
每一项到底改了什么
| 配置项 | 作用 | 视觉影响 | 收益 |
|---|---|---|---|
StripLogStackTrace |
Application.SetStackTraceLogType 设为 None |
无 | 小(纯省 CPU) |
StripExceptionStackTrace |
同上,连 Exception 也关 | 无 | 小,但出错时排查变难 |
DistancePercent |
QualitySettings.shadowDistance 按比例缩放 |
远处阴影消失 | 大(GPU) |
MipOffset |
QualitySettings.masterTextureLimit,相对于启动时游戏自身的值 |
贴图和 UI 变软 | 中(显存/带宽) |
JobWorkerCount |
JobsUtility.JobWorkerCount |
无 | 通常为零(Unity 默认已是上限,只允许调低) |
AsyncUploadBufferMB |
纹理上传环形缓冲 | 无 | 小,多占内存 |
AsyncUploadTimeSliceMs |
每帧上传时间片 | 无 | 小,可能增加单帧耗时 |
TargetFrameRate |
Application.targetFrameRate |
无 | 稳帧、降温 |
VSyncCount |
QualitySettings.vSyncCount |
无(可能有撕裂) | 降延迟 |
三项预设
保守(几乎看不出来):DistancePercent=85、MipOffset=0、其余默认
平衡(默认):DistancePercent=65、MipOffset=1
激进(低配机):DistancePercent=40、MipOffset=2
默认不锁帧。
TargetFrameRate = 0表示完全不干预帧率,交给游戏自己的垂直同步。 想要锁帧才需要改它,并且必须同时处理垂直同步(见上文「锁帧为什么可能不生效」)。
⚠
MipOffset是相对于游戏自身设定的。如果你在游戏里把纹理调成"低", 游戏本身可能已经把masterTextureLimit设成 2,这时MipOffset=1会变成 3。 想看基准值就搜日志里的纹理基准 =。⚠ 纹理降档对隐形敌人(Shadow 类)的可辨识度可能有轻微影响,因为这类敌人靠很细微的 明暗/形变变化才能看见。介意的话把
[3-Textures] Enabled设成false,性能收益主要来自阴影那一项。⚠
VSyncCount默认-1(跟随游戏内设置)。不建议在公开发布版里强制关闭垂直同步 —— 部分玩家会出现画面撕裂。要改请让玩家自己在 cfg 里改。
锁帧为什么可能不生效(重要)
Unity 的硬性规则:只要 vSyncCount > 0,Application.targetFrameRate 就被完全忽略。
GTFO 默认垂直同步是开的,所以只填 TargetFrameRate 不会有任何效果。
两种做法:
① 在游戏内把垂直同步关掉,再填 TargetFrameRate = 60
② 或者:TargetFrameRate = 60 + DisableVSyncWhenCapping = true(由 MOD 代关)
另外注意:锁帧只对“帧率高于上限”的情况有用。如果机器本来就跑不到 60, 锁 60 等于没锁。想稳帧应该锁在略低于实际平均值的数(比如平均 50 就锁 45)。
定期复查会不会卡顿
不会。ReapplySeconds > 0 时,复查只处理阴影距离、日志堆栈、帧率上限这三类廉价项;
绝不会再去改纹理 mip —— 运行时改 masterTextureLimit 会触发全部贴图重新上传,那才是卡顿的来源。
发现值没被改回去时也不会重复写,所以正常情况下它什么都不做。
默认 ReapplySeconds = 0(只应用一次,零额外开销);想防止被别的 MOD 覆盖再调大。
兼容性
- 只改
Application/QualitySettings的全局值,不碰任何 GameData 数据块, 所以和改武器、敌人、地图、UI 的 MOD 都不冲突。 - MOD 地图不受影响:这些参数是全局画质,不会改变地图逻辑、光照数据或生成。
- 如果同时装了别的画质类 MOD(比如 LowSpecGaming),把
ReapplySeconds设成0, 否则两边会互相覆盖,谁后写谁赢。 - 原
GTFOThreadRelief.dll的功能已并入[4-Threads],不要两个一起装。
怎么确认生效
BepInEx\LogOutput.log 会成对打印「应用前 / 应用后」的真实数值:
[PerfKit] 启动时:VSync=1 targetFrameRate=-1 shadowDistance=200 masterTextureLimit=2
[PerfKit] 阴影距离 200 -> 130 m
[PerfKit] 纹理基准 = 2
[PerfKit] 纹理 mip 上限 2 -> 3
[PerfKit] 应用后:VSync=1 targetFrameRate=-1 shadowDistance=130 masterTextureLimit=3
[PerfKit] 完成。
对照两行快照就知道每一项到底有没有写进去。如果 TargetFrameRate 填了但应用后仍是 -1,
日志里会有一条 warning 告诉你原因。
三行分别对应:阴影缩放、纹理基准(游戏自身的值)、实际写入的 mip 上限。 没看到对应行说明那一项没启用,或者日志被别的 MOD 刷掉了。
与其他优化 MOD 的关系
- Performance Traffic Control(PTC):完全不冲突。PTC 处理的是逐对象的敌人阴影、 尸体/布娃娃预算、雾气与植被渲染;PerfKit 处理的是全局画质参数。两者没有交集, 只是收益会叠加时互相稀释。
- 如果 PTC 的
[Performance.EnemyVisuals] Enabled打开(默认关),它会在压力高时 关闭敌人阴影投射;对隐形敌人的辨识可能有影响,按需决定。
版本记录
v1.1.0 | 2026-10-20 | 锁帧失效时明确告警并新增 DisableVSyncWhenCapping;复查不再触碰纹理(避免贴图重传卡顿);
默认改为只应用一次;配置说明改为中英双语;新增应用前/后数值快照日志
v1.0.1 | 2026-10-20 | 纹理改为"相对游戏自身设定"的偏移量,修掉把画质调高反了的问题
v1.0.0 | 2026-10-20 | 首版:日志堆栈 / 阴影距离 / 纹理 mip / 线程与异步上传
卸载
删掉 PerfKit.dll 即可,设置会在下次启动时回到游戏默认。不留存档痕迹。
CHANGELOG
1.1.2
- Packaging only: English readme and description. No code change.
1.1.1
- The mod no longer caps the frame rate by default (
TargetFrameRate = 0). - Documentation no longer implies a default frame cap. The cap is still available, but has to be enabled explicitly.
1.1.0
- Added
DisableVSyncWhenCapping: whenTargetFrameRate > 0, VSync is disabled so the cap actually takes effect (Unity ignorestargetFrameRatewhilevSyncCount > 0). - A clear warning is printed when a frame cap cannot take effect, instead of failing silently.
- Fixed: the periodic re-check no longer touches
masterTextureLimit— changing it at runtime re-uploads every texture, which is what caused a short hitch. ReapplySecondsnow defaults to0(apply once at startup, zero overhead).- Config descriptions are bilingual (Chinese + English).
- Added before/after value snapshots to the log so you can verify what was actually applied.
1.0.1
- Texture option fixed:
MipOffsetis now an offset relative to the value the game sets at startup, instead of an absolute value (the old behaviour could raise quality instead of lowering it when the game had already reduced texture quality).
1.0.0
- First release.
- Log: disables stack traces for
Log/Warning/Assert(optionally forExceptiontoo). - Shadows: scales the global shadow distance by a percentage.
- Textures: lowers the global mip limit by an offset.
- Threads: absorbs the former
GTFOThreadReliefoptions (JobWorkerCount and async upload settings), disabled by default. - Misc: optional frame cap and VSync (default
-1, follow the in-game setting). - Every option can be toggled independently in
BepInEx\config\local.perfkit.cfg.