GTFO
You are viewing a potentially older version of this package. View Latest Version
Install with App

Details

Date Uploaded
Downloads
131
Size
13KB

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 即可,设置会在下次启动时回到游戏默认。不留存档痕迹。

Thunderstore development is made possible with ads. Please consider making an exception to your adblock.