边缘世界 RimWorld

边缘世界 RimWorld

235 个评价
[实验性] 图片加载优化 Image Opt
5
4
4
2
   
奖励
收藏
已收藏
取消收藏
Mod, 1.6
文件大小
发表于
更新日期
6.426 MB
8 月 7 日 上午 2:36
8 月 29 日 下午 8:10
26 项改动说明 ( 查看 )

订阅以下载
[实验性] 图片加载优化 Image Opt

描述
这是一个试图优化纹理图片加载时间的mod

25-8-23重构
将读取,加载,上传数据到gpu的行为完全放到多线程中,进一步优化了性能。
后续将只支持windows 64bit,因为使用了d3d11 api。

这个mod的主要功能:
  • 对于png/jpeg图片:进行多线程并行读取,解码,加载,大幅度提升此类图片的加载速度。
  • 对于dds图片:多线程读取文件,小幅度提升加载速度。
  • 对于本mod生成的dds.zstd图片:同dds图片,但大幅度减少在硬盘上占用的存储空间。
  • 检测纹理图片过期并自动重新生成

Q&A
Graphics Settings+的区别是什么
GS+只有单线程加载dds图片的功能。

与rimsort的optimize texture区别是什么
rimsort只能生成dds图片,不能进行zstd压缩

启用zstd压缩dds有什么好处
经过压缩后的dds图片会变小,减少占用硬盘空间。(但是不会减少显存占用)
zstd解压非常快,几乎不会影响加载速度。(特别是在多线程加载的情况下)

将已有的png图片转为dds有什么好处
dds是可以直接被gpu读取的格式,加载更快,显存占用更小,gpu渲染压力更小。

什么是过期自动重新生成
试想一个场景,昨天你生成了dds纹理,然后今天mod作者对一张png图片进行了更改(而图片名字没变),但是即使mod更新了,你使用的仍然是昨天创建的旧的dds纹理。
而本mod的这个功能,会在加载图片时检测图片文件的修改日期,如果dds比源png旧,那么会自动重新生成新的dds。
这个操作是耗时的,但是考虑到更新纹理非常罕见并且加载处于多线程中,所以这个代价应该是可以接受的。

error: 创建纹理时出现错误, code: <int>
请先尝试使用本mod的纹理压缩工具(在mod设置页面中),重新覆盖生成所有dds文件。如果还出现错误,请在报告错误时附带上传log文件。

error: Texture2D.***: not allowed on native textures.
请看兼容性部分。报告这个mod(或者提供日志),我会将其添加到兼容列表进行额外处理。

推荐用法
启用此mod后,打开游戏进入mod设置页面,点击打开GPU压缩纹理工具,勾选所有选项(包括覆盖和zstd),质量为high,然后点击生成按钮。接下来等待多线程压缩,请不要关闭窗口。作为参考:在我的5600CPU上处理550mod中的23600张图片,耗时大约为600秒。
如果你之前使用了rimsort/rimpy生成了dds文件,可以先点击清除所有dds文件来减少硬盘占用。
此操作不会删除或修改任何mod本身的png图片,只会生成/删除dds文件,不会破坏mod内容。

使用本mod时,如果你:
1, 不使用.dds:你会获得并行解码带来的加载速度提升。
2,使用本mod生成的dds或rimsort生成的dds:与只使用Graphics Settings+没有区别,dds加载本身非常快,但是并行加载会带来一点额外的加载速度提升。
3,使用本mod生成的dds.zstd:大大减少dds占用的硬盘空间。


兼容性
理论上对任何修改了texture加载代码的mod都不兼容,Graphics Settings+除外。
此mod可以与Graphics Settings+一起使用,Graphics Settings的dds加载功能与mipmap bias不会生效,但是材质显存占用计算可以正常使用。

该mod创建的texture2d无法在cpu读取/写入,因此使用了GetPixel(s)、ReadPixels、SetPixels 以及 EncodeToJPG等方法的mod会出现错误。目前解决办法是手动修补GetPixels32实现,但是不知道还有没有其他mod使用了其他不支持的方法。

这个mod会使原版的`画质压缩`选项失效,因为这个选项本质上是在加载时即时压缩图片。它的原理和功能跟使用dds是一样的,但是画质更差并且会延长加载时间。如果你需要用这个功能,那我想你不需要ImageOpt(

原版dds加载
在1.6.4.4552 unstable中,原版内置了读取dds的功能。这与Graphics Settings+的功能类似,但它似乎仍然没有提供修改mip bias的功能(Graphics Settings+和本mod都提供。

ai生成内容:
* 英语翻译
* Logo图片

小知识: .zstd是一种压缩格式,如果你的压缩软件支持的话(比如bandizip),你甚至可以直接打开它并且看见里面的.dds文件。
176 条留言
Kizakami 17 小时以前 
我用rimsort的dds还能正常开游戏,用ztsd的格式后会爆内存,是因为解压的时候都是丢到内存暂存了么?
顺便,提速的效果挺不错。
SkyKZ 11 月 8 日 下午 11:13 
游戏加载存档时生成地图时报错,查看log发现是imageopt和贴图的问题,卸载mod后Unityengine报错找不到贴图。重新启动mod后log内报找不到id=xxxxx的贴图。有解决方法吗?
xuanxuan 11 月 2 日 下午 10:27 
即使rimsort压缩的和这个mod压缩的加载游戏速度有区别吗
xuanxuan 11 月 2 日 下午 10:26 
与rimsort的optimize texture区别是什么
rimsort只能生成dds图片,不能进行zstd压缩 区别在于压缩的mod体积大小吗
☭Ⓐʳᵗ🅡🅣´꒳`ᰔᩚ 10 月 27 日 上午 9:25 
What happens after I remove the mod? I don't expect it to delete the files, but does everything goes back to normal? Can I just re-add it and not need to re-compress it again? :automatons:
Pupil_passed 10 月 26 日 下午 1:31 
这个mod会使原版的`画质压缩`选项失效,因为这个选项本质上是在加载时即时压缩图片。它的原理和功能跟使用dds是一样的,但是画质更差并且会延长加载时间。如果你需要用这个功能,那我想你不需要ImageOpt(
实际使用下来并不是简单的即时压缩,可能涉及到内存利用的方面,我在开启你这个模组后内存就爆掉,打不开游戏了
Thetaprime 10 月 16 日 上午 9:17 
Also, does this compress the files in the Mods folder of the game install?
Thetaprime 10 月 16 日 上午 9:16 
I have a question. Normally I use ToDDS to compress textures to DDS and there are about 33,000 files. This is only compressing about 22,000. Any ideas why there is such a large difference?
伊崎苍空 10 月 15 日 下午 11:27 
我在用转了zstd之后打不开游戏了,那我该怎么把zstd全部删掉?
frus-m 10 月 5 日 上午 5:57 
Докладываю: мод не работает с высоким разрешением 3840х2160. играю на двух компьютерах в разных местах - точная копия с переносом папок. На втором Full HD и на нем работает прекрасно. Если удаляю мод на первом - игра загружается.