3DMGAME 3DM首页 新闻中心 前瞻 | 评测 游戏库 热门 | 最新 攻略中心 攻略 | 秘籍 下载中心 游戏 | 汉化 购买正版 论坛

注册 登录

QQ登录

只需一步,快速开始

查看: 9734|回复: 40
打印 上一主题 下一主题

[心得] [技术贴] 永恒的话题~~再谈《天际》的 CTD(意外跳出)

  [复制链接]

66

主题

502

帖子

1440

积分

游戏狂人

开车不开灯

Rank: 6Rank: 6

贡献度
132
金元
9122
积分
1440
精华
0
注册时间
2012-2-11
跳转到指定楼层
主题
发表于 2017-4-9 00:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 1131361031 于 2017-4-9 11:56 编辑

  64位的重制版发布后,原以为我可以告别32位的《天际》,幸福地在游戏中遨游了——但很快发现,那些最激动人心的mod都还难以在重版中露面。而那些skse、实验室的开发者们不知何年何月才能发布期待中的64位作品。作为老司机绅士的偶真心感慨:自家不能掌握核心技术,不要说国家安全、经济发展,就连草民玩个游戏都要受外国列强的制约

  悻悻之余,几经周折又回到了天际x32,打开126级的存档,看着任务栏中一道道无法完成的任务,望机兴叹。全副武装却毫无斗志的主人公拉着几个漂亮随从,随便找个酒馆开房,正想XO,游戏很适时机地CTD(Crash To Desktop)了。

  ……望机兴叹。

  抛开绅士的私人话题不谈,单纯地作为一个玩家,觉得一款好游戏应该是什么样子呢?很多资深程序员都讲过这么一句话:“一款好的软件让用户察觉不到软件的存在”。游戏软件应该让用户沉浸在它所创造的世界观和故事情节中。老衮5有太多吸引人的地方,但CTD是惟独无法忽略的大问题——因为它打断了玩家的全部游戏体验,不断提醒玩家“原来这只是个幻觉”。就像在电影院看一场2小时的电影,每15分钟停电一次。(可是偶还居然一直想把电影看完。“贱”的定义就是这么来的)

  毫无疑问,任何一个执着于32位《天际》的玩家,都不可避免地要与各种CTD做斗争。坛子里面99%的老衮玩家皆是如此(如果你是zero-mod圣贤级玩家就另当别论了)。尽管坛子里面已有好多关于解释CTD原因和如何防止CTD的帖子,本人心里仍抱有想法和疑问,写出来希望大家共同探讨。同时分享一些游戏配置心得,有些从没在其它帖子里面发现过,也许有用,也许没用,但不写出来又怎能知道呢

————废话结束。那么,从最基本的问题说起————


64-32=?
  为什么32位的《天际》需要讨论CTD问题,而64位的不用呢?这个问题,非计算机专业还真不一定明白。简单说明:32位≈最多支持4G内存;64位≈甭管你多有钱你买不起这么多内存条。但至于“是否支持64位”这个定义还要分成3层理解:(1)硬件、(2)操作系统、(3)应用软件。
(1)如果你的硬件不支持64位,这种情况简单,请跳过本章节;
(2)如果你的硬件支持64位,内存也有个8G往上,那么如果你不晓得装64位的操作系统的话,我建议你现在关电脑,打开机箱,拔出>4G的内存条,卖了吧。
(3)硬件支持、操作系统支持,这种情况比较普遍,亦是大势所趋。举例:16G内存 + win7x64 + X。X是什么呢,是某款64位的软件。皆大欢喜。可惜《上古卷轴5:天际》是款天杀的32位软件。纵使你的(1)(2)都能满足64位,但(3)满足不了就白搭(注:文中所有《天际》都指的是《上古卷轴5:天际》32位的版本)至此,我的结论是:不要把任何时间浪费在试图让《天际》使用内存超过4G上面。我至今没有发现任何可信的证据,证明有人成功让《天际》内存使用率>=4G的(不要说4G,超过2G的请举手?)

1080-550=?
  这和CTD到底有几毛钱关系呢?一起分析一下。有人认为显卡越好CTD就越少。对么?可能对,我认为得这样理解:两个人被车撞了,身体强壮的那个死的比身体虚弱的人慢。一款处理速度快、显存大(很关键)的显卡,游戏体验肯定比拖拉机显卡好得多。但是如前面所说,显存多少道理如同内存,你有再多显存,《天际》能用的就那一部分。只要游戏需要的显存数or内存数在增加,那么CTD是早晚的事。

内存VS显存
  简单讲,内存是游戏运行到某一时刻,需要CPU运算(或即将运算)的数据。根据计算机硬件设计原理,硬盘上的数据是“死”的,到内存中是“活”的,是CPU可以处理的(至于为什么不能让CPU直接读写硬盘?不是不能,完全是出于性能考虑,以及硬盘的寿命);显存是游戏运行到某一时刻,要通过显示器展现给玩家的全部(或部分)数据。那么就《天际》这类3D游戏来讲,你面前看到的这只狼人的数据在显存里;而你背后有个巨魔正要偷袭你,这些信息在内存里面;你一转身,看到了巨魔,那么这些数据又跑到显存里面了。
  那么CTD的到底是内存溢出,还是显存溢出呢?在《天际》的配置文件中,既有配置内存数的属性,也有配置显存数的属性。我的个人经验是:都会。

到底该关注什么?
  前面说了很多不乐观的现实。为了防止CTD,要关注的方向其实超简单:
1、避免《天际》使用的内存超过某个值
2、避免《天际》使用的显存超过某个值

  “某个值”就是在游戏中配置的“可以使用”的最大值。“可以使用”必须加上引号,因为它不一定是真正可用的,而且有可能不少CTD都源于此:你写个“10G”在游戏配置文件中,让游戏程序以为它能用10G内存。然后,自不量力的程序就崩溃了(PS:并非所有的计算机语言编写的程序都这样。比如java就有良好的内存管理机制;但是经典的c语言,把内存管理的自由都交给开发者,一个c语言初学者让电脑死机是件相当轻松的事。从《天际》的运行表现来看,编写它的语言显然和c有亲戚关系)。感谢windows时代,我们会回到桌面而不用拔电源插销。
  说起来简单,但要做到非常困难。许多信息和个人经验证明,原版纯净的《天际》的设计内存完全能满足其运行要求。由此看来CTD的罪魁祸首不是mod还能是什么?(二氧化碳:罪魁祸首是人类无止境的欲望! 天之外:……别捣乱!) 在这里我想为B社正名,虽然它的“BUG社”的称号当之无愧,但是CTD现象绝大多数都是热情的玩家们自己造成的。
  当内存和显存确实都够用时,还会CTD么?会。质量不过关的mod、mod与游戏本体间的冲突、mod之间的冲突,都可能造成CTD。要发现和解决此类问题需要投入大量时间。互助的习惯很重要——把发现的mod的冲突或bug分享给大家,不要被同一块石头绊倒两次,这也算论坛的使命之一 。而我个人认为此类CTD不用太过担心,因为问题大都十分明显、迅速和固定。(我一向认为,总会出现的bug不算bug;不知道何时会出现的bug才是大问题)能确定冲突的来源是关键,就算不能解决mod冲突,不玩这个mod总可以吧!我的心得是:mod要一个一个装,装完一个测试通过再装下一个。在此向不辞辛苦整合mod的各位mods-binder们表达敬意,你们和modders们一样辛苦。

  综上所述,我给自己下的结论就是,不玩mod就不会CTD,老衮无罪。但~是~

我玩的不是老衮,是145个MOD
  作为天际绅士,没有mod我早就“跳槽”了。试想如果老衮根本不允许玩家自由添加mod,那么现在的3大妈的天际版块该多么冷清啊! 所以,我说的《天际》不是《天际》,而是《天际》+《炉火》+《黎明守卫》+《龙裔》+MOD*145+ENB+分辨率1680*1050+60帧+不想CTD。难度就在于此。


还是要谈性能
  不是谈如何提高《天际》的运行性能,而是谈为了游戏的稳定,该如何牺牲一定的性能以换取减少CTD。还是那句话,《天际》能用的内存就那么一点点,想要体验故事、看风景、百团大战还是拍艺术照,要怎样各位玩家得自己权衡。
  说到性能就必须谈谈ENB。大家应该知道原始版的《天际》画面是多么惨不忍睹。ENB给了《天际》新生的机会,但除此之外,我感觉它还做了别的事。我曾经用过一种简单粗暴的方法禁用ENB:直接删除d3d9.dll。但很快发现,CTD的现象并没缓解。据此不难推断,配置中某些内存/显存的管理选项,必须在启用directX动态链接库的条件下才起作用。因此,禁用ENB又不影响内存管理的正确姿势是:在enbseries.ini 中将效果总开关 UseEffect=true 改为 false。

  这里说一下我优化游戏的核心思想:网上很多帖子都讲过如何调大内存提高性能等等等等;我的建议正好相反,我认为应该把内存/显存相关的配置都调的足够小,小到确定有这么多可以给游戏用,才能避免CTD。这一点也不荒谬:调大内存是为解决性能问题,而我想要的是如何避免CTD。避免CTD必然以牺牲性能(或者更糟:牺牲游戏可玩性)为代价


必不可少的工具
SKSE_Elys_MemInfo.dll —— 这是个实时显示内存使用量和帧数的插件。安装后,打开scrollLock键,游戏右上角就会出现图中的信息。有了它才能使对游戏运行效果和内存之间的关系的研究成为可能。

  它提供的信息有两条很重要,一个是物理内存,另一个是句柄。物理内存大小是有绝对的上限的。而句柄,如果我理解没错的话,是CPU寄存器中保存的执行中的程序脚本引用地址,寄存器大小也是有绝对的上限的。每进入一个新的游戏场景,这两个值都会发生变化——大部分时候是变大——而这正是CTD的根源所在:良好的内存管理机制应该会把不再使用的“垃圾”数据从内存中清除,也就是说,内存使用量应该有增有减才对。句柄也是同理。所以如果发现内存or句柄数只增不减,那么几乎可以断定程序某些地方已经出问题了(例如加载了一个蹩脚的mod)。多次经历证明,一旦内存使用超过1024mb,游戏性能会有显著下降,而且离CTD不远了。
  当然想玩好老衮5,必不可少的工具远不止这一个,但其它的大家都太熟悉我就不一一列举了。
  PS:我知道有一个叫Freemem的mod可以在游戏中手动或定期自动释放内存,但经我的测试,效果并不理想——不是不能清理,而是清理过头。清理后的结果往往是要调用的数据不在了而导致程序直接锁死。不推荐。

4个文件
4个几乎囊括《天际》所有配置、大家十分熟悉的ini文件。下面列出部分配置心得,或许可以缓解CTD:
Skyrim.ini 文件
[Papyrus]
fPostLoadUpdateTimeMS=500    <----很有趣,这应该是响应游戏脚本的频率。当我把值改为1000后(即从原来的每0.5秒响应一次改变每1秒响应一次),我惊讶地发现游戏性能有明显提高,操作也更加流畅了(刚加载存档时skyUI会有个错误提示,除此以外没发现任何问题)
bEnableLogging=1   <----日志记录开关。1是打开0是关闭。非开发状态没必要打开(日志记录是要写硬盘的,想象一下它的效率)。但反过来讲,如果你想获得一些错误信息,全靠它了
bEnableTrace=1      <----游戏中日志跟踪开关。1是打开0是关闭。非开发状态没必要打开
bLoadDebugInformation=1  <----调试信息加载开关。1是打开0是关闭。非开发状态没必要打开

SkyrimPrefs.ini 文件
[Display]
fShadowDistance=6000  <------要显示阴影的物品的距离。阴影是增加画面真实感的重要特效,但同时也是性能杀手之一。所以与其降低阴影质量,不如减少阴影加载距离,这样的话远景效果可能没有那么真实,但保住了画面近景的整体质量,同时保证了性能

enblocal.ini 文件
[MEMORY]
ExpandSystemMemoryX64=true   <-----这一条看起来好像是可以启用64位系统内存的开关,但正像我最前面说的,我严重怀疑它的有效性,也没有找到切实的证据证明其有效。
ReservedMemorySizeMb=256    <-----这一条非常有效,当把值调小时,CTD明显减少
VideoMemorySizeMb=2000    <----这个是让你自己告诉程序你的显卡显存有多大。应当调小,绝不要超过实际物理显存数。而且,和物理内存一样,显存也不会100%都留给一个程序用的,尤其在窗口模式下。
[LIMITER]
EnableFPSLimit=true    <----我想很少有人用它吧?这个是限制帧率开关
FPSLimit=60.0   <----当上面一条打开时,这条就起作用了。限制游戏帧率的最大值。这里我想强调一下,帧率太高不仅没有好处,而且可能有坏处。原因:第一,人的肉眼对动画的感受灵敏度是有上限的,一般人的眼睛很难分辨100fps和60fps的画面有何区别。第二,游戏程序对于CPU多线程的调用显然应该同步——举例:4核CPU跑《天际》,有2个核负责画面运算,另2个负责后台脚本运算。4个核线程时钟必须同步,程序才正常。当显示性能过高而运算性能不够时,程序可能出现异常现象。(玩过极品飞车(几代我忘了)的玩家一定有印象,主机版是30fps,移植到PC版后仍然是30fps。当时很多人吐槽。实际情况是如果改为60fps程序会不正常,不单纯是显卡性能利用的问题)。权衡利弊,我个人的建议是改为50。跑得慢总比跑死好

enbseries.ini 文件
[EFFECT]  <----该组中有各种分类效果的开关。
EnableDepthOfField=false  <----景深效果开关
EnableReflection=false   <----反射效果开关。关闭它时,游戏性能明显提升




尾声
  毕竟本人并非B社开发成员,以上的内容的真实可靠性连我自己都无法确定。但是既然敢发帖,接受吐槽的勇气在下还是有的。欢迎分享、回帖和指正。
  曾经在MS-DOS时代,有很多优秀的程序员写过很多文章,教人们如何把程序编写得很小很小,如何运行时占用很少很少的内存。当时算得上一种荣耀。这种追求极致完美的精神,随着计算机硬件的发展,似乎渐渐被人们忽略了。越来越多的人觉得编程越来越简单;存储硬件越来越便宜。“资源不足”似乎离我们越来越遥远。我个人也希望,资源取之不尽用之不竭的时代尽快到来,玩游戏时永远告别CTD。但是现实情况是,我有生之年不一定赶得上。而正是追求极致的专业精神的缺失,才会让软件质量出现各种良莠不齐,才会出现《天际》这样集优点缺点于一身的游戏。既然我们都活在当下,那就把解决CTD问题,当做电脑游戏的一部分乐趣吧~~~~~













评分

2

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|3DMGAME ( 京ICP备14006952号-1  沪公网安备 31011202006753号

GMT+8, 2026-4-1 03:32 , Processed in 0.029517 second(s), 20 queries , Memcached On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表