原贴链接 感谢:heheloveer授权转载、 @平平无奇草方块 协助更新草缓存相关生成流程

注:【】中内容为转载者总结自原贴评论区的内容。如遇问题,请先参考转载者注于本文底部4.4中的常见问题提醒
1 远景原理介绍
1.1 什么是远景?
在大多数使用3D技术的角色扮演游戏里,玩家所看到的游戏内画面都是通过一个位于玩家面前或者附近,能够相对自由地转动的镜头展现出来的。在游戏的三维空间里,离镜头越近的物体就显得越大;离镜头越远,物体便显得越小,到最后彻底不可见。这就产生了一个问题:怎么处理那些离镜头较远,玩家看不见或者看不太真切的物体?毕竟,设备的性能总是有限的,而渲染远处的物体听上去简单,实则却相当耗费性能。举个例子:如果游戏渲染玩家附近55范围内的物体,那么需要渲染的面积是25个平方单位;但是如果我们把渲染距离提升一倍,来到1010,那么需要渲染的面积就变成了100个平方单位,是原先的4倍之多。很明显,与其顶着不成比例的性能消耗去把远处的物体完整渲染出来,不如耍个花招,把它们替换成低精度模型或者干脆让一些不那么显眼的物体消失。如此节约下来的性能可以用来提升帧数,也可以用于提升近景的表现——毕竟大多数情况下玩家主要关注的还是近处的物体。这便是LOD(细节层次,level of detail)系统的基本理念:为一个物体配上若干个不同精度的缩水版模型;距离玩家越远的物体,其实际使用的模型精度就越低,从而达到节省性能的目的。在通俗的说法当中,LOD这一简称已经失去了它原本的意义,而被用来指代这些只会出现在远处的缩水版模型,也就是中文里的“远景”。
一言以蔽之,远景系统的根本目的在于节约性能。就目前而言,近景模型和材质质量的提升依旧可以说一眼望不到头:只要镜头凑得够近,玩家总能看到更多的细节,而现有的硬件机能和3D渲染技术还并不能做到实时输出足以以假乱真的画面。但是在正常的游戏体验里,远景是不可能出现在靠近镜头的地方的。在距离足够接近时,远景模型自然会被替换成完整模型。这也意味着,远景的精度只要达到了“位于远处时不仔细看看不太出和近景完整模型的区别”就足够了。超过这个临界点,任何往远景上额外投入的资源和性能基本都相当于打了水漂。这条原则需要时刻牢记——不要把宝贵的性能挥霍在无谓的地方!
当然,不同玩家对远景细致程度的要求不可能完全相同,而在大多数时候,远景也并不能真的做到以假乱真。部分情况下,远景系统可能会导致游戏观感显著下降:远景模型过于粗糙;部分物体在距离较远时直接消失;远景模型和近景模型出现较为明显的不匹配,以上这些都是常见的例子。我们可以借助各种手段减少这类现象出现的频率,或者降低它们造成的影响,但是只要远景系统的基本运行原理没有改变,它们就无法根除。
1.2 《上古卷轴5》中的远景系统是怎么运作的?
远景在不同游戏里的具体实现方式不甚相同。在《上古卷轴5》(下称“老滚5”)里,我们大致可以看到两种计量距离的方式。老滚5里最为基础的距离单位……唔,就是一“游戏内单位”。笔者并不清楚贝塞斯达(下称“B社”)有没有为这个单位给出具体定义,不过这个概念也只与游戏引擎原理相关,正常游玩不会涉及。在xEdit里我们看到的物体的XYZ坐标,所用的就是这个单位,诸如fShadowDistance
(决定渲染阴影的距离)这样的ini设置的单位也是它。根据Sheson的说法,128个游戏内单位等于6英尺,也就是说约等于1.83米。
除此之外,老滚5中另一个频繁用到的距离计量方式是“单元格”。老滚5的户外世界被划分成为了许多个单元格,每一个单元格都是40964096个“游戏内单位”这么大。单元格计量方式最重要的用处大概就是在臭名昭著的uGridsToLoad
这个设置上:它规定了游戏加载内容的范围大小。默认情况下,uGridsToLoad
被设定为5,意思就是说游戏里的一切都发生以玩家所处的单元格为中心的这55个单元格内,而在这25个单元格之外就是远景了。uGridsToLoad
和其他以单元格作为单位的设置都只能被设置为奇数,因为在偶数偶数大小的范围内不可能存在一个位于正中央的单元格。某些非常古老的文章里提到玩家可以把uGridsToLoad
设置为7甚至更高的值,以提升较远处物体的显示效果,不过这样做很不推荐。比起完整渲染55个单元格,完整渲染7*7个单元格的性能消耗可是增长了近一倍,玩家遭遇bug和不稳定因素的概率也会大大上升。

游戏加载范围的直观展示。关闭远景,开启单元格分界线之后可以清楚看到在默认设置下,加载范围由5*5个单元格组成。
一般来说,超出uGridsToLoad的范围外,完整模型就会被远景模型所替代,但是也有少数例外。根据替换对象的种类,老滚5的远景可以被划分为3种:地形远景、物体远景和树木远景。地形远景用来替换玩家脚底下踩着的地面(包括水面);物体远景用来替换山脉、岩石、建筑等中大型物体;树木远景,顾名思义,替换的则是完整的树木。从游戏运行的意义上,老滚5中的远景其实并不真正存在。它们没有碰撞体积,不会变化,无法与任何东西产生互动,甚至不能投射/接收阴影。它们只是海市蜃楼,把它们全部去掉不会对游戏运行产生任何影响。事实上,玩家也的确拥有把远景去掉的办法——在控制台中输入tll。这一命令会关闭/开启游戏中的远景显示,在判断一个模型属不属于远景时非常好用。
我们在讨论远景的定义时已经提到,远景一般包括多个不同的精度层次,游戏会在在距离玩家更远的地方使用精度更低的远景模型,以尽可能地节约性能。在老滚5里,物体远景和地形远景分为4个精度层次:LOD4、LOD8、LOD16、LOD32,精度逐级递减。LOD4指的是44个单元格内的地形/物体远景信息被汇总在了一个模型文件里;LOD8指的是88个单元格内的地形/物体远景信息被汇总在了一个模型文件里,以此类推。在各个远景层级中,LOD4距离玩家最近,模型的相对精度最高,LOD8次之,LOD16又次之,LOD32距离玩家距离最远,模型精度最低。需要注意的是,在默认设置下,老滚5的物体远景只有LOD4/8/16三级,LOD32只有地形远景方才使用。至于树木远景,不论其距离玩家多远,它始终都是两个平面交叉组成的一个极其简单的纸片模型(这个模型叫做billboard),因此也就不存在层级系统。此外,老滚5的地图上显示的是最远级别的物体和地形远景,在默认设置下也就是LOD16的物体远景加上LOD32的地形远景。游戏最远能渲染大约100个单元格的距离。

Billboard树木远景的具体展示——加载了同一份材质文件的两个平面呈九十度交叉。
(这里额外说一下水面远景:老滚5可以有多种不同的水,但是由于引擎限制,一个worldspace里只能存在一种远景水,也就是说不管江河湖海,整个天际的所有水体出了加载范围看上去都是一个样子。没有任何mod或者工具能够改变这一点。如果你在游戏中看到完整水和远景水之间出现了较为明显的色差/接缝,这不是任何远景生成工具的问题,而且有可能无法彻底解决。在确认插件排序无误的情况下,玩家可以考虑调整ENB设置中ReflectionAmount
、DisableDistantReflection
与Muddiness
等设置,观察能不能带来改善。)
!【远景水的色差更重要还是近景水的多样性更重要——如Water for ENB的Shaders of Skyrim版,取决于玩家个人喜好】
老滚5的远景数据都储存在一个个已经固定死了的模型文件里,而游戏自然是不可能在运行时对它们进行修改的。所以,无论游戏进行到了哪个阶段,远景呈现的内容都不会改变,除非玩家在游玩的间隙亲自去修改相关游戏文件。这就带来了一个问题:例如,游戏刚开始,玩家就目睹了Helgen的毁灭。可是,老滚5的远景系统却完全反映不了这样的变化——远景显示的小镇要么一直完好无损,要么一直都是一片废墟。在老滚5里,随着任务和剧情的发展,玩家身边的世界也经常会发生改变,但是简陋的远景系统却从头到尾都是一个样子。此外,老滚5的远景不支持动画效果。在远景里,瀑布不会流动,风车不会旋转,窗户自然也不会随着夜晚来临亮起灯光。这些都是老滚5原版远景系统中存在的巨大限制。B社大概也知道不是所有的远处物体都适合用远景系统显示,因此它在引擎里留下了一个后门:你可以给物体加上IsFullLOD
这个标签,具有IsFullLOD
标签的物体其显示距离仅仅受fSkyCellRefFadeDistance
这一设置控制。只要在fSkyCellRefFadeDistance
的范围内,它们就不会消失,也不会被替换成远景,无论它们在不在加载范围内。正因如此,我们将这些物体称为neverfade
。在原版游戏里,这个标签主要是给云朵/山雾使用的。
当玩家在户外世界移动时,游戏需要频繁执行远景和近景之间的切换,以确保玩家始终位于加载范围中心的那个单元格。从远景切换到近景的大致流程如下:玩家一跨过单元格的边界,玩家行进方向便有一排单元格会进入到加载范围内。此时,游戏会先加载出完整的地形,把原先的地形远景挪到完整地形的下面,并且取消加载水面远景。随即游戏会加载树木,取消加载树木远景,再加载物体,取消加载物体远景。由于“加载完整模型并且取消加载远景模型”这一过程需要花费一定时间,在一段短暂时间里完整模型和远景模型可能会同时存在。如果两个模型基本重叠,那么玩家就有可能会注意到它们之间发生了z-fighting
,也就是闪烁现象。
简单了解了老滚5远景的实现机制之后,我们很容易就能明白,在安装了mod的情况下,远景极其容易出现不兼容现象,而且这种不兼容无法依靠mod作者直接提供现成的远景文件来解决(事实上大多数mod作者的确也不会这么做)。举个最夸张的例子:一个LOD32远景文件囊括上千个单元格,而只要有两个mod分别修改了这上千个单元格当中的两个,那它们的远景就“不兼容”。这种情况发生的概率有多大,mod玩家大概心里都有数。可以想见,如果一位mod玩家想要拥有与自己的游戏完全匹配的远景,那么他/她就必然需要使用远景生成工具。

一个方框代表一个LOD32模型文件覆盖的范围。很明显,中间的4个LOD32文件就已经覆盖了整个天际的绝大部分面积。
1.3 Large reference与large reference bug
在介绍远景生成工具之前,我们有必要认识一下组成原版远景的最后一块拼图:常常被人忽视的large reference。Large reference是老滚5特别版中加入的功能,其基本原理是通过正常物体和完整模型来改善远景的显示效果。具体来说,游戏数据当中有一个large reference列表,其中记载了一些比较大型的物体,例如建筑、山体等的具体位置。这些属于large reference的物体可以以完整形态出现在远景区域里,不会因为出了加载区域消失或被远景模型取代。你可以在控制台当中选中这些large reference完整模型,输入tll它们也不会消失,这意味着严格来说它们并不属于狭义上,或者说游戏引擎意义上的“远景”,而是和前面介绍的neverfade物体有一定相似之处。游戏ini设置中的uLargeRefLODGridSize
决定这些large reference具体能延伸到多远。这一设置和前面介绍的uGridsToLoad是同样的原理,也就是说它只能设置为奇数。在B社启动器的画质选项里,玩家最多只能把它拉到11,相信这也是大多数玩家所使用的设置。
我们以uGridsToLoad=5
,uLargeRefLODGridSize=11
为例。在这种情况下,以玩家为中心的55个单元格是加载区域,其中没有任何远景。在这25个单元格外,以玩家为中心的1111个单元格内的区域则属于large reference区域。在这一圈范围内,属于large reference的物体依旧会以完整形态显示,但是地形则会转变为远景,不属于large reference的物体也会照常消失/转变为远景。超出这121个单元格则是彻头彻尾的远景区域。大概B社也知道有多少人为了改善远景而调高uGridsToLoad
,为此他们想出了这种“折中”方案。当然,11*11个单元格并不算多大的范围,也就是说在默认设置下large reference只能改善中距离上的观感,对于远处的景物还是无能为力。当然,玩家也可以进一步扩大large reference的显示距离,不过笔者并不推荐这么做。就算不考虑可能大幅度增加的性能消耗,谁也没法保证在这么远的距离外完整模型还能带来显著的视觉效果提升。
如果large reference要生效,uLargeRefLODGridSize
显然必须大于uGridsToLoad
。如果你希望关闭large reference系统,只需要把uLargeRefLODGridSize
调到5,也就是等于uGridsToLoad
的值就行了。你可能要问,large reference系统不是挺不错的吗,为什么要关掉它?答案是,这玩意听上去很美好,实际上问题多多,甚至可能降低玩家的视觉体验。

去除远景显示之后的游戏截图。可以看到,在开启了large reference系统之后,本来应该是空荡荡的远景区域里多出了很多完整显示的large reference模型。
首先一点是,游戏里的很多模型从近处看没有什么异样,但如果从远处观看,玩家可能会发现一些怪异现象,例如墙上的苔藓/山体上的雪覆盖的范围明显变广,甚至出现在了不该出现的地方。又比如,一些本来被其他模型/平面遮住的模型随着视角拉远反而露了出来,从而呈现出相当诡异的视觉效果。这种现象通常只会在完整模型上出现,而不会在远景模型上出现。一般来说玩家并不会在特别远的地方看到完整模型,所以这也无伤大雅。然而large reference系统大幅提升了完整模型的显示距离,也就大大增加了此类现象发生的频率。
上段提到的这类视觉问题,笔者不好直接将其定义为“bug”,但下面要提到的却百分之百是一个bug。在正常情况下,同一个large reference物体的完整模型和远景模型是不会同时存在的,但某些特定条件可能会诱使一整个单元格内的远景模型和large reference完整模型同时出现,重叠在一起,这种现象我们一般称作large reference bug。它带来的影响可大可小:如果完整模型比远景模型尺寸更大,能把它完全覆盖,那玩家是察觉不到什么异样的;反之,如果远景模型覆盖了完整模型,那就等同于large reference实际上没有起到作用,只在白白消耗显卡性能。第三种情况则更为严重:远景模型和完整模型尺寸相近,“互有出入”。就像前面提到的那样,这种时候玩家非常容易观察到两个模型重叠的地方发生z fighting,也就是闪烁。
Large reference bug似乎依旧处在一个鲜为人知的状态,但它其实广泛存在于打了不少mod的游戏当中。Large reference数据需要位于ESM插件当中才能生效,因此,如果有一般的ESP插件覆盖了这些数据,large reference bug就会被触发。由于它不止影响单个物体,而是一次性影响一整个单元格,由它导致的闪烁现象很有可能相当普遍。理论上来说最符合直觉的解决办法是把相关插件全部转化为ESM插件,不过这一方案显然没有太多可行性。
如果你经常在游玩中注意到类似上文所述的现象,可以考虑彻底关闭large reference系统。诚然,你的远景在中距离精度可能会有一定程度的降低,不过谁又能保证自己一定能注意到这点区别呢?如果你依旧希望使用这一功能,下面介绍的DynDOLOD远景生成工具至少可以在一定程度上解决large reference bug。
1.4 远景生成工具简介
在老滚5mod圈子提到“刷远景”这几个字,大部分玩家或许只能想到DynDOLOD,但其实能够生成远景的工具远远不止它一个。例如,被广大modder深恶痛绝的Creation Kit就理所当然地拥有这一功能。作为B社官方提供的mod制作工具,CK以界面复古、操作困难、bug多多而闻名于世。虽说如此,它的许多功能直到如今依旧无可取代,因此大家也只能捏着鼻子继续用它。万幸的是,“远景生成”并非CK的专利技术。笔者对CK了解很浅,因此无法在此提供什么细节。我们只需要知道,CK可以生成远景,但是我们完全没有任何必要去使用它的这一功能。
在老滚5刚刚发售时的modding蛮荒年代就已经有modder在钻研用来生成远景的第三方工具。Oscape就是一个发布于2011年的地形远景生成工具。笔者对该工具基本没有任何了解,不过从其复杂的UI界面来看,使用它生成远景想必不会轻松。该工具早在2012年就已经停止了维护,不仅功能性上早已落后,许多bug也从未得到解决,就连它的官方文档网站也已经在2015年左右失效。虽然如此,在相当长的一段时间内它都是除了CK之外唯一能够生成地形远景的工具,因此玩家依旧能在部分提供现成远景的mod(例如Terrain LOD redone)里找到它生成的文件。
2012年,大名鼎鼎的xEdit发布。某种意义上来说,xEdit可以被看作是CK的轻量化替代品,虽然它们的侧重点并不一样。既然CK能够生成远景,xEdit自然也得包含这一功能。xLODGen便是将xEdit的远景生成功能拆分出来得到的产物,其实它本质上就是一个改了名字的xEdit。和xEdit一样,这里的“x”可以指代许多B社游戏,例如在传奇版老滚5的语境下它叫做TES5LODGen,在特别版/周年版老滚5的语境下它叫做SSELODGen,在辐射4的语境下它叫做FO4LODGen,如此等等。“正式版”的xLODGen仅仅具有树木/物体远景生成功能。2018年,Sheson发布了具有地形远景生成功能的xLODGen Beta,从而取代了Oscape。在此后的更新中,Sheson又在xLODGen Beta中加入了occlusion生成功能和对季节mod的支持。目前,最理想的远景生成流程依旧需要使用xLODGen Beta生成地形远景。
关于xLODGen有两点需要格外注意,其一是Beta版本的xLODGen不在Nexus上,Nexus上你能找到的SSELODGen是已经完全过时,没有任何使用价值的旧版本。目前xLODGen Beta的官方下载渠道仅位于Step Modifications论坛上。其二则是老滚5的地形远景模型上除了相应的地形远景材质以外还覆盖有一层noise材质。顾名思义,noise材质很像老式电视机上会有的那种白噪音画面,它的主要作用是防止远景地面看上去过于单调。xLODGen不生成noise材质,noise材质也不影响xLODGen生成地面远景。如果xLODGen生成的远景地面材质和完整地面材质之间出现了色差,那么问题有可能就出在noise材质上。
2014年发布的DynDOLOD将会是本文重点介绍的对象。简单来说,DynDOLOD是由Sheson开发的进阶版xLODGen。它专门用于为老滚5(不限版本)生成物体/树木远景——这里有两点需要注意,一是它仅适用于老滚5(以及Enderal),其他B社游戏依旧只能用xLODGen生成远景;二是它仅负责物体/树木远景,而不负责地形远景——生成地形远景需要使用xLODGen Beta。DynDOLOD甫一诞生便取代了之前所有以改进老滚5远景为目标的mod/工具,成为了老滚5远景问题的终极解决办法。
1.5 远景生成基本原理
我们已经知道,远景由地形远景、树木远景和物体远景三部分组成,在一般的流程中,xLODGen负责前者,而DynDOLOD负责后两者。xLODGen会根据游戏内的数据创建出和完整地形相匹配的地形远景模型,并且根据游戏内的地形材质生成相匹配的远景材质。DynDOLOD则没有凭空生成远景模型的能力——它所做的其实是把它在游戏文件中能找到的远景模型拼凑成一整块LOD4/8/16/32模型。这也是为什么DynDOLOD Resources是DynDOLOD的必要前置——没有资源包里提供的远景资源,DynDOLOD可谓是巧妇难为无米之炊。同理,某些mod较大程度地修改了物体的完整模型,却没有提供相应的远景模型,这种情况下DynDOLOD只能使用DynDOLOD Resources当中与原版模型相对应的远景模型,也就是说完整模型和远景之间会出现不匹配的现象。如果你注意到了类似的现象,这不是因为DynDOLOD出了问题,而是因为mod作者完全忽视了远景,或者是对于远景认识不到位。Sheson在DynDOLOD Resources中包括了一些流行mod的远景模型资源,但他显然无法,也不需要为一切mod提供这样的支持。
(另外需要注意的一点是,DynDOLOD在拼凑物体远景模型的时候会读取地形远景模型。这是因为一部分物体远景模型可能会被埋在地形远景下头,DynDOLOD会把这部分模型去掉以节约性能。因此玩家需要先运行xLODGen再运行DynDOLOD。)
每一个模型都需要对应的材质才能正常显示,远景模型也不例外。DynDOLOD同样没有自己生成材质的能力,它所需要的材质都由TexGen——和DynDOLOD打包在一起的另一个软件——生成。这不代表DynDOLOD完全不处理材质:和模型类似,它会把一整个worldspace中远景需要用到的所有材质拼凑成一整张巨大的atlas,也就是说一个atlas材质文件对应一个worldspace。
生成(或者说拼凑)远景模型和材质是DynDOLOD最基础的功能,但其实xLODGen也能做到这些,尽管效果远不如DynDOLOD好。DynDOLOD真正独一无二的价值得从它的名字中寻找:这个名字其实是Dynamic Distant Objects LOD(动态远距离物体细节层次)的简称——用人话来说,DynDOLOD的意思就是“动态远景”。诚然,动态远景不过是DynDOLOD提供的一个可选功能,玩家完全可以不使用它,但它反映的正是DynDOLOD的初衷:解决远景“不会动”的问题。
和前面介绍的large reference一样,“动态远景”不是狭义上的远景,至少不是老滚5引擎意义上的远景。在控制台中输入tll关闭远景显示,动态“远景”并不会消失——因为它们其实就是完整的物体,是可以被控制台选中的。DynDOLOD利用了本来只是用来显示远处云朵/山雾的neverfade系统,给那些不适合用远景系统显示的物体加上了IsFullLOD
标签,这样它们就不会像一般的物体那样,离开加载区域就彻底消失不见,或者被相应的远景模型所取代。只要neverfade物体处于fSkyCellRefFadeDistance
的范围内,它们就会以完整状态显示。既然它们是完整的物体,那它们自然也就像其他完整物体一样,能拥有动画,也能随着任务进展而发生变化。为了确保动态远景不会消耗太多性能,DynDOLOD会额外通过脚本控制它们的显示距离。这里有两点需要说明,其一是动态远景是引擎意义上的完整物体,但它完全可以使用和普通远景一样的低精度模型,而不是非得使用该物体的完整模型;其二则是动态远景永远不会出现在地图上,因为地图只显示狭义上的、“正宗”的远景。这是一个小小的遗憾,不过一般来说影响非常有限。
1.6 DynDOLOD 3——革命性的提升
目前最新的稳定版DynDOLOD版本号为2.98,不过笔者不推荐玩家使用这个版本。这是因为在2020年年底,Sheson推出了DynDOLOD 3的Alpha测试,为软件添加了许多堪称革命性的新功能。DynDOLOD 3理论上依旧处在A测阶段,但是经过两年多的bug修复和改进,笔者认为DynDOLOD 3已经基本能够放心使用了。诚然,它并非尽善尽美,测试版较为频繁的更新也可能会对一些玩家带来困扰,但是相比老版本,它带来的视觉效果提升是实打实的。
DynDOLOD 3最主要的新功能在于对植被远景的改进。树木远景方面,DynDOLOD 3在UI中正式加入了Ultra树木远景功能。这一功能的实际作用是彻底抛弃原版的树木远景系统,改用物体远景系统去显示树木的远景。如前文所述,原版的树木远景尤其简陋,它所使用的billboard模型仅仅由两个平面交叉而成,不支持法线材质,没有真正的细节层次区分,其他方面也存在诸多限制。启用Ultra树木远景意味着树木可以拥有真正的3D模型,拥有法线材质和更好的光影效果,意味着玩家能通过DynDOLOD的规则栏具体控制树木远景在不同LOD级别的显示效果。启用Ultra树木远景堪称有百利而无一害,在设置恰当的情况下几乎不会影响性能表现。
(这里强调一点,Ultra树木远景不完全等同于3D树木远景。开启Ultra树木远景功能之后,DynDOLOD默认能生成改进款的billboard远景,但是能不能生成3D树木远景要取决于玩家有没有安装相应的3D树木远景资源。这些3D树木远景资源可以是完全3D的,也可以是混合式的——由3D的树叶树枝和billboard式的树干组合而成。3D树木远景的效果如何完全取决于3D树木远景资源的提供方,DynDOLOD只能控制在哪些LOD层级使用3D树木远景,在哪些LOD层级使用改进款的billboard远景。)
草地远景大概是DynDOLOD 3名头最响的新功能。在原版游戏里,草地其实是一种相当怪异的东西。它们无法用控制台选中,实际上也的确不属于游戏引擎意义上的物体。在游戏的插件数据里,每一个物体放置在具体什么位置都要详细记录在案。反观草地,游戏的插件数据里只是记载了某片地形上会不会长草,会长什么种类的草,玩家在游戏里看到的草都是根据这些数据实时生成的。也就是说,你每次打开游戏看到的草地其实都不完全一样。在原版游戏里,草地最多只能延伸到加载范围的边缘,远景区域里没有草,也没有草的远景。DynDOLOD同样无法根据这些抽象的草地数据生成远景,因此草地和光秃秃的远景地形之间颜色不匹配的问题一直在困扰着广大玩家。
2020年年底,No Grass In Objects(下称NGIO)横空出世,彻底改革了老滚的草地系统。它的功能远不仅是名字描述的那么简单:有了NGIO,草地能够不被加载范围限制,做到无限延伸;NGIO能够更改草地模型的大小,能够加大草地的密度,而最重要的是,NGIO修复了老滚5的草地缓存功能。和语焉不详的插件数据不同,草地缓存文件是真的明明白白记载了每一株草长在什么位置。不过,加载草地缓存的功能在游戏设置中默认关闭,就算你启用了它,原版游戏数据中的草地缓存文件也会导致严重bug。NGIO接管了加载草地缓存这一功能的开关,并且让玩家能够相对方便地生成与自己游戏相匹配的草地缓存文件。游戏实时生成草地需要耗费性能,加载草地缓存的本意在于节约这部分性能并提高游戏稳定性,但与此同时,草地缓存的存在也为草地远景铺平了道路。
我们已经提到NGIO让草地无限延伸成为了可能,但是随显示距离指数级增长的草模型显然会对游戏性能带来巨大影响。为了节约性能,草地远景应运而生。DynDOLOD 3能够读取草地缓存文件当中的数据,从而为这些确切存在的(而非量子态的)草生成远景。虽然完整草地依旧不属于“物体”,草地远景却是物体远景的一部分。它只存在于LOD4级别,也就是相对而言离玩家最近的一小圈远景当中,原因是草地远景依旧非常吃性能。草地远景使用的模型和树木远景一样是两个平面交叉的billboard,在单个模型的面数上已经没有任何优化空间。然而,草地的密度毕竟摆在那里,这意味着草地远景对于市面上大多数硬件依旧能构成不小的挑战。
原版老滚5的草地不支持法线材质。ENB在2022年推出了complex grass功能,让草地能够使用法线材质以提升它在光照下的表现。DynDOLOD 3也针对complex grass推出了支持法线材质的HD草地远景。需要注意的是,HD草地远景用到的单个草模型面数是普通草地远景的两倍,也就是说在同等密度下HD草地远景消耗的性能是普通草地远景的两倍。
无论是草地远景还是树木远景,生成它们都需要billboard文件。每一种会在远景中显示的树木/草都有自己对应的一套billboard。Billboard由两部分组成,其一是一至数份dds材质文件,记录该种植被的模型从正面(以及不同的侧面角度)看过去的样子,其二是一份txt文件,记载其他一些相关信息。在DynDOLOD 3之前,树木的billboard文件需要由树木mod作者自己提供。自DynDOLOD 3开始,DynDOLOD需要用到的所有billboard文件都由TexGen生成,因此玩家已经无需下载第三方提供的billboard。此外,当玩家用到Ultra树木远景和HD草地远景时,TexGen生成的HD billboard还会包括对应的法线材质。
!【大多数mod都只修改草地或者只修改地形材质,你不能指望这些风马牛不相及的mod搭配起来能有多和谐。大多数时候玩家都没法让远景地形颜色和草地颜色相匹配,因此草地远景显然是有价值的,而草地虽然只能存在于LOD4级别,但LOD4距离可以调整,距离调到了六七万左右在绝大多数视角下基本都能达到一望无垠的效果,当然这样对于性能消耗也很大。原版游戏里草地只能存在于加载范围内,而加载范围实在是小得很。使用NGIO让完整草地在加载距离外显示消耗的性能可能比草远景更加巨大,所以一般来说还是用草远景比较好。】
Occlusion是老滚5节约性能的一种方式。在游戏插件里,每一个户外单元格都有着自己的occlusion数据。通过这些数据,游戏能够判断有哪些远景从玩家视角来看是被地形所遮蔽的。既然玩家看不见这部分远景,游戏便会直接把它们隐藏起来,从而尽可能节约性能。问题在于,原版的occlusion数据存在几处bug:玩家明明能在正常游玩中看到的远景被错误地遮蔽起来,变成了几个大洞(这种现象多见于地图北方的海里)。xLODGen Beta能够重新计算occlusion数据从而修复这些bug,这一功能随后被引入至DynDOLOD 3当中。

左侧为原版occlusion数据造成的视觉错误,右侧为使用xLODGen/DynDOLOD重新计算occlusion数据后的效果。
上文中我们已经介绍了large reference bug。在默认设置下,DynDOLOD能够解决一小部分在原版游戏里就已经存在的large reference bug(这也是为什么DynDOLOD会在ESP插件之外专门生成一个ESM插件),但它无法修复ESP插件引发的large reference bug。好在,一段时间之前Sheson为DynDOLOD 3加入了试验性的large reference bug解决办法。在理想状况下,该功能能够让一切large reference bug从玩家的游戏中消失。此外,large reference bug解决办法还能改善在主城内看到的城外景色。虽说该功能还在试验阶段,笔者认为一般用户其实也可以考虑使用。使用该功能需要一些额外步骤,具体信息会在后文详细介绍。
除了上述这些主要改进之外,其他值得一提的DynDOLOD 3新功能包括对于Enhanced Volumetric Lighting and Shadows (EVLaS)、Seasons of Skyrim SKSE、Base Object Swapper和Community Shaders等流行mod的支持,对于Open Cities Skyrim及类似mod的远景生成的简化,以及在TexGen中加入生成材质预览功能等。
!【请注意,这并不代表你将白漫苔原改造成为白漫大森林就直接可以提高帧数,因为Occlusion的本质是放置occlusion plane,而除了occlusion plane之外的物体并没有类似的遮蔽功能,可以把occlusion plane放置在类似于树木这样的大型物体里头,从而达到节省性能的效果,但这不代表单凭树木本身就能做到这一点。xLODGen和DynDOLOD所重新计算的occlusion数据是另一种遮蔽方法。这些occlusion数据不是物体放置reference,而是单元格reference本身的一部分。游戏会根据它们判断哪些远景会被【地形】所遮蔽。树木这样的物体显然与这个过程无关。】
2 远景生成准备工作
2.1 远景生成前置:必备篇
远景生成说容易也容易,说复杂也是真的复杂。许多经验不足的mod玩家似乎都对“刷远景”有一些畏惧,不过它的基础步骤其实并不算【特别】繁琐。在正式开始之前,玩家必须确保自己安装了以下mod/工具/软件:
1)符合当前游戏版本的SKSE
这个不用多说。可在其官网或N网编号30379下载。笔者使用的游戏版本是1.5.97,因此对于周年版版本(1.6+)的认识不算全面,不过下文依旧会介绍一些周年版玩家需要额外注意的事项。
2)现代mod管理器,例如MO2/Vortex
同样不用多说。应该已经没有人还在手动安装mod或者用NMM了吧?笔者只使用过MO2,因此本文也只介绍MO2的操作经验。
3)最新版本的Microsoft Visual C++ 2015-2022 Redistributable
Visual C++运行库对于许多游戏/软件的运行都至关重要。笔者推荐每一个游戏玩家都安装最新版本的Visual C++运行库并且关注更新信息,这个建议不仅针对老滚5玩家。
4).NET Desktop Runtime(6.0版本及以上)
DynDOLOD前置,许多其他软件和工具也需要用到,推荐所有Windows使用者安装最新的稳定版本并且关注更新动态。
5)DynDOLOD Resources
DynDOLOD运行时必须用到的资源包,务必确保安装的版本与你的游戏版本和DynDOLOD版本相匹配。本文只介绍老滚5特别版下的DynDOLOD 3,该版本需要用到的资源包位于N网编号52897。
6)PapyrusUtil SE(N网编号13048)
许多重要mod的前置,注意使用与游戏版本对应的版本。此外,如果你使用的是周年版版本(1.6+),你还需要安装对应版本的Address Library for SKSE Plugins(N网编号32444)。
7)xLODGen Beta
用于生成地形远景的工具。切记不要使用N网上的旧版本SSELODGen(编号6642),旧版本的功能已经被DynDOLOD全面取代。目前该软件的官方下载渠道只能在Step Modifications论坛上找到。论坛可直连(百度搜索xLODGen Beta即可找到链接),但软件需要特殊上网方式下载。
8)xLODGen Resource- SSE Terrain Tamriel(N网编号54680)
确保xLODGen能够生成游戏地图最边缘,玩家不可进入区域的地形远景。严格来说是可选项,但是不使用会出现视觉bug。一般用户推荐使用Extend版本,性能不吃紧也可考虑Full Extend版本。具体使用方式下文会详细介绍。
注意该mod与Worldspace Transition Tweaks(N网编号48889)不兼容。如果你安装了Worldspace Transition Tweaks就无需安装该mod。
9)DynDOLOD
远景生成的主角。本文介绍的是DynDOLOD 3 Alpha(N网编号68518)。
10)SkyUI(N网编号12604)
无需介绍。严格来说同样属于可选项,用来显示DynDOLOD的MCM菜单。
2.2 远景生成前置:推荐篇
上节列举的这些软件/mod当中有许多都是人尽皆知,很可能玩家在接触到DynDOLOD之前已经安装了它们。可以说,如果只是要确保远景能够顺利生成完毕,玩家其实不需要费太多心思。不过在这之外,还有许多非必要但是十分推荐安装的mod/工具,其中大部分极其推荐所有用户安装。
1)RaceMenu(N网编号19080)
最为流行的捏脸工具,除此之外还包含有一些额外功能。DynDOLOD可以借助它提供的功能动态控制远景发光窗户的亮度。
2)DynDOLOD DLL SE(N网编号57264)
PapyrusUtil的替代品,如果玩家没有安装PapyrusUtil那就需要安装DynDOLOD DLL以确保DynDOLOD正常运行。两者可以同时存在,但在安装了PapyrusUtil的情况下DynDOLOD DLL基本没有太大安装价值。不过,近段时间Sheson推出了试验性的DynDOLOD DLL NG,作为large reference bug解决方案的必要前置。如果玩家希望使用large reference bug解决方案那就必须安装DynDOLOD DLL NG。此外,使用DynDOLOD DLL NG也能在一定程度上提高DynDOLOD的性能表现。必须强调的是,由于DynDOLOD DLL NG还处在试验阶段,Sheson隐藏了它的N网文件。目前下载链接只能在DynDOLOD官网的Large Reference Bugs Workarounds页面上找到。
3)SSE Engine Fixes(skse64 plugin)(N网编号17230)
极其关键的引擎修复,可作为NGIO前置的前置。
4)No Grass In Objects(N网编号42161)
大名鼎鼎的NGIO,可以说彻底改革了老滚5默认的草地系统。DynDOLOD 3的草地远景功能需要借助NGIO生成的草地缓存才能实现。需要.NET Script Framework(N网编号21294)作为前置。不支持周年版版本(1.6+)。
5)Worldspaces withGrass SSEEdit Script for No Grass In Objects(N网编号55152)
xEdit脚本,能够列举出游戏中拥有草地的worldspace。用来确保NGIO在生成草地缓存时会跳过没有草地的worldspace,从而节省生成草地缓存的时间。该mod会与DynDOLOD Resources中的Whiterun Exterior Grass选项产生隐性冲突,解决方法下文会详细介绍。
6)Grass Cache Helper NG(N网编号101095)
用以替代过时的Grass Cache Fixes。该skse插件将修复草缓加载的bug,并且添加了对于 Seasons of Skyrim支持,自动根据当前季节加载对应的*.SPR|SUM|AUT|WIN.CGID文件。同时,其可以自动计算并调整一些原本需要手动调整的ini条目,方便玩家刷草缓。
7)xEdit(SSEEdit)
无需太多介绍,排查解决插件问题所必备。可在N网(编号164)或GitHub上下载。
8)LOOT
同样无需太多介绍。笔者个人不使用它排序,但它能提供很多有价值的信息。可在N网mod工具区(编号439)或GitHub上下载。
9)NifSkope
用于查看/编辑老滚5游戏模型的软件,资深modder必备。可在GitHub上下载。
10)Creation Kit
B社官方mod工具,部分草地mod需要用CK编辑过后才能生成草地远景。可在Steam上免费下载。推荐安装N网上的第三方修复/改进(如编号20061、41195、71371)之后再使用。
11)DynDOLOD Modders Resource Fixes(N网编号53526)
修复了部分mod的远景资源问题。按需安装。
12)DynDOLOD TexGen Fixes (Summerset Isle-Gray Cowl-Beyond Reach-Midwood Isle-ELFX)(N网编号69323)
同上。
13)LOD Mesh Fixes for DynDOLOD(N网编号69851)
同上。
14)LOD Model Library for DynDOLOD(N网编号87521)
修改一部分DynDOLOD Resources中的远景资源,使其与某些mod更加匹配。按需安装。
15)Glacier LOD Meshes
更高质量的冰川远景资源。位于N网传奇版区(编号110367),但是适用于所有游戏版本。
16)HD LODs Textures SE(N网编号3333)
更高质量的远景资源(主要是建筑)。注意使用DynDOLOD版本,并且删除所有billboard文件(下文会有详细介绍)。
17)LOD Unloading Bug Fix(N网编号61251)
安装此mod后玩家可以手动移除因为bug而出现在近处的远景。DynDOLOD的动态远景功能修复了这一bug,因此这个mod一般情况下派不上用场。
18)HD Terrain Noise Texture SE(N网编号47057)
更高质量的noise材质,颜色深浅适中,能够保证远景地面颜色不会产生太大偏差。
19)Far Object LOD Improvement Project SSE(N网编号79197)
通过DynDOLOD为远景(与地图)增添部分物体,例如道路。
20)A Clear Map of Skyrim and Other Worlds(N网编号56367)
地图mod,基本理念是辅助xLODGen和DynDOLOD生成与玩家游戏内容相匹配的地图。能够让DynDOLOD为地图增添更多细节。
21)ACMOS Road Generator(N网编号79205)
A Clear Map of Skyrim的附件,能在xLODGen生成的地图材质上添加道路。
22)Markarth LOD Unlock(N网编号84375)
让Markarth像其他四大主城一样使用Tamriel主世界的远景数据而非独立的远景数据。能够显著改善在城内看到的城外景色,当然也会对性能造成一定影响。该插件实际做出的改动非常简单,因此玩家可以选择不安装它,而是使用xEdit自行创建与其功能一致的补丁插件,以保证兼容性。后文会进行详细介绍。
23)Visualize Vanilla(N网编号84265)或类似mod
半整活向mod,将全游戏中所有的材质都替换为四色方块。该mod的原本意图是“帮助重度mod玩家寻找游戏内依旧存在的原版材质”,不过也可以在生成草地缓存时使用,以减少内存占用,缓解跳出现象。类似的超低分辨率材质替换mod也能起到相同效果。
![完成草缓存生成后请关闭该模组,否则将影响之后的terrain lod生成]
24)ENB
不需要太多介绍,可在其官网下载。本文中提到ENB主要是因为0.472版本中加入的complex grass功能。新版本的ENB核心能够兼容老版本预设,因此务必关注ENB官网更新信息,保持ENB核心处在最新状态。
25)与你当前草地相对应的complex grass材质
ENB complex grass功能需要专门的complex grass材质才能生效,不过目前大部分草地mod都不包括这些材质。ENB Complex Grass - Patch Compendium for various grass mods(N网编号67304)中汇总了大量流行草地mod的complex grass材质。除此之外,Step Modifications团队也制作了原版草地(N网编号68640)和Cathedral Landscapes草地(N网编号69578)的complex grass材质。
26)与你当前树木相对应的3D树木远景资源
DynDOLOD 3的3D树木远景功能需要相应的3D树木远景资源才能生效。DynDOLOD Resources中已经包含了原版树木的3D远景资源,但是大多数树木mod的3D远景资源都需要其作者(或者其他mod作者)提供。注意不要误下载了billboard文件。
27)Seasons Your Grass(N网编号105038)
用于批量处理草缓季节性后缀的工具。
2.3 远景生成前置:黑名单篇
既然有推荐的mod和工具,那自然也有不推荐安装的mod和工具。以下提到的mod/工具/文件完全不推荐使用,它们最好情况下也是毫无作用,甚至很有可能干扰理想的远景生成。如果玩家安装了它们应该立即移除,并使用推荐方式重新生成远景。注意这一黑名单并不全面,一些比较冷门的mod或者古老的传奇版mod不包括在内。与此同时,DynDOLOD内置有一份更加全面的黑名单插件列表,如果它检测到你安装了黑名单中的插件,它会在加载时弹窗警告并强制关闭。如果你遇到这种情况,请按照DynDOLOD的指示卸载相关mod。
1)SSELODGEN(N网编号6642)
上文提到的已经过时的老版本xLODGen,DynDOLOD早已包含其具有的一切功能。务必安装最新版的xLODGen Beta。
2)第三方提供的地形远景模型与材质
第三方提供的地形远景模型与材质有较大概率与玩家的地形不匹配。Terrain LOD redone(N网编号9135)和Perfect Terrain LOD(N网编号39563)是此类mod中N网下载量较多的两个例子。前者包含的地形远景模型为Oscape生成(可能会引发bug),材质为xLODGen生成;后者则完全就是用xLODGen生成的(外加一个来自xLODGen Resource - SSE Terrain Tamriel的插件)。绝大多数情况下玩家应该使用xLODGen生成符合玩家游戏内容的地形远景。
3)Darker Distant LOD for ENB(N网编号23585)
颜色过深的noise材质,部分情况下可以让远景地面更加贴近草的颜色,但与此同时也会让雪地远景显得非常灰暗。鉴于DynDOLOD 3能够生成草地远景,这个mod的“本职工作”也已经被取代了。
4)一切第三方提供的billboard文件
Billboard是DynDOLOD生成树木/草地远景必须用到的资源。自DynDOLOD 3开始,TexGen可以生成所有需要用到的billboard,因此一切第三方提供的billboard都失去了存在价值。后文会介绍如何彻底清除第三方billboard文件。
5)Realistic HD Tree LOD Textures(N网编号4263)
第三方提供的树木远景,极其不推荐使用,尤其是因为DynDOLOD的Ultra树木远景已经彻底淘汰了原版的树木远景系统。
6)Trees LODs with shadows SE(N网编号1885)
同上。
7)一切第三方提供的瀑布远景资源
DynDOLOD Resources中已经包括了合适的瀑布远景资源,没有必要使用第三方远景资源。已安装的第三方瀑布远景资源建议移除。如果你使用Bright Waterfall Fix for ENB(N网编号37956),切记不要安装可选文件中的DynDOLOD Bright LOD Waterfall Fix——该文件已经过时。
8)Winterhold College LOD Shimmer Fix(N网编号25577)
修复了一个原版游戏中就有的large reference bug。DynDOLOD同样能够规避这个bug(无论有没有使用large reference bug解决办法),因此没有必要使用这个mod。
9)Culling dataglitch fix(N网编号6314)
该mod试图通过暴力移除所有occlusion数据的方式来“修复”occlusion引发的bug,这一做法会对游戏性能造成显著负面影响。使用DynDOLOD 3生成正确的occlusion数据。
10)EVLaS Skyrim Underside
Enhanced Volumetric Lighting and Shadows (EVLaS)(N网编号63725)这一mod能大幅度改善老滚户外世界的体积光和阴影效果,非常推荐玩家安装。问题在于,无论是完整地形还是地形远景都无法遮挡体积光,因此使用EVLaS时体积光很有可能会直接透过地形,造成比较怪异的视觉效果。为了解决这一问题,terrain underside应运而生。Terrain underside是一份粗略复制了地形起伏、能够遮挡体积光的模型文件。我们将其放置在略低于实际地面的位置,确保在它不露出地面的同时能营造出和地面遮挡体积光基本一致的效果。DynDOLOD 3能够生成terrain underside文件,因此没有必要使用EVLaS的N网页面里提供的EVLaSSkyrim Underside文件。

左侧为不使用terrain underside时的体积光效果,可以看见近处的树木能遮挡体积光但是远处的山体却不能。右侧为使用terrain underside时的体积光效果,此时体积光不再是视山体如无物。
11)SSE FPS Stabilizer(N网编号38438)
该mod的主要功能是根据帧率实时调节LOD4/8/16物体远景的显示距离,以将帧率控制在玩家设定的目标附近。然而,影响帧率的因素很多,远景不过是其中之一,许多情况下就算玩家将远景彻底关闭也无法实现稳定的高帧率。使用该mod之后,玩家将无法在DynDOLOD的MCM菜单中调节远景层级显示距离,只能去编辑该mod的预设文件。笔者个人认为使用这一mod弊大于利,当然各位读者可以自行斟酌。
12)一切第三方提供的草地缓存
生成草地缓存对于周年版版本(1.6+)的用户来说是一件麻烦事,因此部分玩家会选择使用第三方提供的现成草地缓存。然而和前面提到的现成远景文件一样,这些草地缓存文件有较大概率和玩家的游戏内容不匹配,从而引发草地穿模浮空等问题。笔者还是推荐想使用草地远景的周年版玩家利用降级补丁生成符合自己游戏内容的草地缓存。N网上绝大部分现成的草地缓存文件都由用户dionysist提供,这里不做列举。
2.4 游戏ini设置及推荐
老滚5的游戏设置储存在skyrim.ini、skyrimprefs.ini和skyrimcustom.ini这三个文件里。三个文件当中,skyrim.ini是主要的设置文件,它可以修改绝大部分游戏内设置;skyrimprefs.ini只能修改一部分游戏设置,其中包括skyrim.ini修改不了的那些;skyrimcustom.ini则和skyrim.ini没有任何本质区别。skyrimprefs.ini的优先度高于skyrimcustom.ini,skyrimcustom.ini的优先度高于skyrim.ini。换言之,skyrimcustom.ini中的设置会覆盖skyrim.ini中的设置,而skyrimprefs.ini中的设置会覆盖skyrimcustom.ini和skyrim.ini中的设置——前提是这个设置真的能够被skyrimprefs.ini所修改。某些mod自带ini文件,其中包含对部分游戏内设置的编辑。这些文件不能编辑那些可以被skyrimprefs.ini编辑的设置,不过它们会覆盖skyrim.ini和skyrimcustom.ini中的设置。在此之外,还有一些带有DLL插件的mod能够在不修改游戏ini设置的情况下用自己的客制化设置覆盖掉一切ini文件包含的游戏设置,前面提到的NGIO和SSE FPS Stabilizer就是很好的例子。
很多玩家都推荐使用BethINI(N网编号4875)编辑ini文件。笔者的个人看法是初安装游戏的玩家可以先使用BethINI生成一份大致符合自己需求的ini文件,之后再根据具体情况手动编辑相应设置,而不是一要修改ini文件就请BethINI代劳。本文就不介绍BethINI的使用方法了。另外,如果你使用MO2,务必确保你修改的ini文件是你当前的profile所使用的设置文件,不要搞混了。下面是笔者对于部分比较关键的远景相关设置的介绍和推荐:
skyrim.ini:
[Display]
bEnableLandFade=0
特别版引入的新款地形远景切换效果,默认情况下开启。该功能容易导致地形远景切换到完整地形的过程中发生闪烁,建议关闭。
!【大多数人文件里都没有这一行,需要自己加上去】
[General]
uGridsToLoad=5
uExterior Cell Buffer=36
uGridsToLoad决定游戏加载范围的大小,默认设置为5,其值只能为奇数。不建议修改。uExterior Cell Buffer决定缓存单元格的数量,其必须大于等于uGridsToLoad数值+1的平方。默认为36。
[Grass]
bAllowCreateGrass=1
bAllowLoadGrass=0
bEnableGrassFade=0
fGrassFadeRange=14128
bAllowCreateGrass
用来开启/关闭实时生成草地功能。bAllowLoadGrass
用来开启/关闭加载草地缓存功能。bEnableGrassFade
用来开启/关闭草地渐变消失功能。fGrassFadeRange
决定草地在多远的距离开始渐变消失。如果你要生成草地远景,skyrim.ini中的这几条设置可以被NGIO(1.5.97版本)或者Grass Cache Fixes(1.6+版本)覆盖,因此修改此处的设置更多只是为了保险。后文会有详细的相关介绍。
[LightingShader]
fDecalLODFadeEnd=1.0000
fDecalLODFadeStart=1.0000
fEnvmapLODFadeEnd=1.0000
fEnvmapLODFadeStart=1.0000
Sheson推荐的设置,用来确保decal/environment map的渐变消失不出问题。笔者对这方面基本没有了解,就不班门弄斧了。
skyrimprefs.ini:
[General]
uLargeRefLODGridSize=11
Large reference范围大小,必须设置为奇数。默认为9,在游戏启动器中最小可设置为5,最大可设置为11。必须大于uGridsToLoad
才能起到作用。不推荐设置为大于11的数值,如想关闭large reference功能可设置为等于uGridsToLoad
(默认为5)的数值。
[Grass]
fGrassMaxStartFadeDistance=6144
fGrassMinStartFadeDistance=0
fGrassStartFadeDistance=6144
以上三个选项(主要是fGrassStartFadeDistance)控制草地开始渐变消失之后又会延伸多远才彻底消失。推荐按照上面的例子设置。fGrassStartFadeDistance
可以被NGIO覆盖,因此如果你使用1.5.97版本,修改这里的设置更多只是为了保险。后文会有详细的相关介绍。
[MAIN]
fSkyCellRefFadeDistance=655360.0000
调整neverfade物体(云朵/山雾/DynDOLOD动态远景)的最远显示距离。将该值设置为600000以上基本可以确保neverfade物体永远不会因为距离消失。
[TerrainManager]
fBlockLevel0Distance=57344
fBlockLevel1Distance=147456
fBlockMaximumDistance=327680
fSplitDistanceMult=1.0000
fTreeLoadDistance=500000.0000
fBlockLevel0Distance
、fBlockLevel1Distance
和fBlockMaximumDistance
分别设置的是LOD4、LOD8和LOD16的物体远景显示距离。草地远景只存在于LOD4当中,因此fBlockLevel0Distance
直接控制了草地远景的显示距离。
fSplitDistanceMult
会将不同层级的地形远景显示距离调整至其对应物体远景层级设置的x倍。例如,在fSplitDistanceMult=1.5
,fBlockLevel0Distance=20000
,fBlockLevel1Distance=50000
的情况下,LOD4级别的地形远景显示距离为200001.5=30000,LOD8级别的地形远景显示距离为500001.5=75000,以此类推。如果该值设置为1,地形远景和物体远景将会在同一距离切换层级,这样可能会导致切换效果较为明显。该选项常见的设置在1至4之间,不过如果你使用xLODGen生成的高质量远景地形模型,改动该选项通常不会对性能和显示效果造成太大影响。
fTreeLoadDistance
控制树木远景的显示距离。如果你使用Ultra树木远景,该选项不会有任何作用。
上述[TerrainManager]下的选项均可在DynDOLOD的MCM菜单中实时修改。
2.5 远景生成必备工具/mod安装及设置
本节中提到的所有mod(除非特别说明)请在安装后立即启用并确保使用对应游戏版本的最新mod版本,并在任何时候都切勿卸载/取消加载。
1)安装远景生成前置软件,如现代mod管理器、最新版本的Microsoft Visual C++ 2015-2022 Redistributable、.NET Desktop Runtime
这一部分不做过多介绍,需注意后两者务必从微软官方网站下载。分别搜索“Microsoft Visual C++ 可再发行程序包”与“.NET桌面运行时6.0(或者7.0)”能较为简便地寻找到相应的微软官网页面。推荐同时安装Microsoft Visual C++ 2015-2022 Redistributable的32位和64位版本。推荐安装.NET Desktop Runtime最新的稳定版本,一般只需安装64位版本即可。注意不要安装成了.NET Runtime。.NET SDK包含有.NET Desktop Runtime,因此如果你出于某种原因安装了SDK就无需再安装Desktop Runtime。
2)安装符合当前游戏版本的SKSE
这个也不过多介绍。SKSE应当拷贝到游戏主文件夹里,而非用MO2安装。将skse64_loader.exe添加至MO2的可执行程序当中。
3)安装SkyUI、PapyrusUtil SE和xLODGen Resource - SSETerrain Tamriel
下载相应文件并用MO2安装即可。周年版版本(1.6+)的PapyrusUtil SE需要Address Library for SKSE Plugins作为前置。一般用户推荐使用xLODGen Resource - SSE Terrain Tamriel的Extend版本,如果性能不吃紧也可考虑Full Extend版本。
安装xLODGen Resource - SSE Terrain Tamriel后将插件拖拽到插件列表最顶端,让其被其他所有插件覆盖,并暂不启用。
(如果你使用Worldspace Transition Tweaks,请勿安装xLODGen Resource - SSE Terrain Tamriel)
4)按需安装并启用DynDOLOD Resources SE 3
用MO2安装。安装选项中,Whiterun Exterior能改善在Whiterun城内看到的城外景观,Solitude Exterior同理。Whiterun Exterior Grass能让Whiterun城外显示草地。(这一选项会与Worldspaces with Grass SSEEdit Script for No Grass In Objects产生隐性冲突,下文会详细介绍解决办法。)High Hrothgar Window Glow能让High Hrothgar的远景窗户在夜晚发光。DLC2 Vvardenfell 3D Plume能将红山喷发的2D特效更换为3D模型。以上选项均能对游戏视觉效果带来较大提升,一般推荐勾选。
其他选项中,Low-Res LOD Textures会安装分辨率更低的远景材质。该选项会降低视觉效果,而且对于性能的改善在绝大多数情况下相当有限,不推荐勾选。Desync Birds of Prey能让城市上空的鸟不再同步拍打翅膀,推荐勾选。Holy Cow是一个彩蛋选项,它会在游戏中添加一尊巨大的圣牛,不推荐勾选。
(除非你打算向Sheson献上你的firstborn)
(该选项与DynDOLOD加入的圣牛加载界面没有任何关系,下文会介绍如何阻止DynDOLOD添加圣牛加载界面)
安装DynDOLOD Resources后,玩家可能会注意到它与许多其他mod产生了覆盖关系。这是因为DynDOLOD Resources里包含有部分经过修复/改进的Particle Patch for ENB模型,这些模型常常会被其他mod覆盖。真正会与DynDOLOD Resources中的远景资源产生冲突的mod并不多。一般推荐将DynDOLOD Resources放置在mod列表较为靠前的位置,并覆盖Particle Patch for ENB。玩家可以在MO2中隐藏它与Particle Patch for ENB共有的文件,以更好地观察它提供的远景资源产生的覆盖关系。注意DynDOLOD Resources中提供的绝大部分远景资源都只有在生成了DynDOLOD之后才会生效。
DynDOLOD ResourcesSE 3依旧处在测试阶段,更新频繁。请密切关注其更新信息,保证使用的是最新版本。
5)安装xLODGen Beta与DynDOLOD 3 Alpha
用解压缩工具将软件解压至非中文路径、非重要文件夹内,切记不要使用MO2安装。这里所说的“重要文件夹”包括系统文件夹、游戏文件夹,MO2内的文件夹等。如果你还是无法判断能安装到什么地方,可以将它们分别安装到(盘符):\xLODGen和(盘符):\DynDOLOD内,绝对保险。
将xLODGen解压到合适的位置之后,修改xLODGenx64.exe文件名为SSELODGenx64.exe,并使用MO2将其添加到可执行程序当中。注意务必使用64位程序而非32位程序。与此同时,在MO2的参数一栏添加命令-o:"c:\OutputPath\"
,以设置生成文件的位置。将c:\OutputPath\替换为你想使用的文件夹路径,注意这一路径同样也不能是上文所定义的“重要文件夹”。如果你没有设定生成位置,xLODGen默认会将文件生成至游戏本体的数据中(在MO2的语境下就是overwrite文件夹里)。一般不推荐这么做。
将DynDOLOD软件解压到合适的位置之后,将TexGenx64.exe和DynDOLODx64.exe添加至MO2的可执行程序当中。注意务必使用64位程序而非32位程序。分别在这两个程序的参数一栏添加命令-sse
(不包括中括号)以将软件的游戏模式设置为老滚5特别版。
xLODGen Beta和DynDOLOD 3 Alpha均处在测试阶段,更新频繁。请密切关注它们的更新信息,保证使用的是最新版本。
6)按需安装以下推荐使用mod:RaceMenu、Glacier LOD Meshes、HD LODs Textures SE、LOD Unloading Bug Fix、HD Terrain Noise Texture SE、Markarth LOD Unlock和Visualize Vanilla(或类似mod)
以上mod下载相应文件并使用MO2直接安装即可。
如果你使用的是1.5.97版本的RaceMenu,推荐同时安装RaceMenu 0.4.16 Memory Leak Hotfix (SE)(N网编号70161)。
HD LODs TexturesSE务必使用DynDOLOD版本。
玩家可以使用xEdit创建和Markarth LOD Unlock功能一致的补丁,因此该文件其实可以不用安装。如果你不打算使用xEdit,这一插件应当放置在尽量靠近列表底端的位置。注意不要下载N网页面中的Cidhna Mine Terrain Fix。
Visualize Vanilla务必下载Loose版本,安装后放置在mod列表最底端,并且不要启用。也可以使用其他类似的超低分辨率材质替换mod。
7)按需安装以下推荐使用mod:DynDOLOD Modders Resource Fixes、DynDOLOD TexGen Fixes (Summerset Isle-Gray Cowl-Beyond Reach-Midwood Isle-ELFX)、LOD Mesh Fixes for DynDOLOD和LOD Model Library for DynDOLOD
使用MO2安装。不要下载与你所使用的mod无关的文件,安装时不要选择与你所使用的mod无关的选项。
8)按需安装以下推荐使用工具:xEdit、LOOT、NifSkope、Creation Kit
一般推荐将xEdit压缩包中的内容解压至游戏根文件夹(SkyrimSE.exe所在的位置)里。解压完毕后,在游戏根文件夹创建一份xEdit.exe的副本,并将两个文件分别重命名为SSEEdit.exe和SSEEditQuickAutoClean.exe。将这两个程序添加至MO2的可执行程序当中。一般不推荐使用x64版本的xEdit,这一点与xLODGen和DynDOLOD不同,需要格外注意。
使用LOOT安装包将LOOT安装至非中文路径、非重要文件夹里。一般推荐使用64位版本。将LOOT.exe添加至MO2的可执行程序当中。
将NifSkope压缩包中的内容解压至非中文路径、非重要文件夹里。将NifSkope.exe添加至MO2的可执行程序当中。在NifSkope的Options\Settings\Resources当中添加你的游戏路径,以确保NifSkope打开模型文件时能加载相应的材质文件。
在Steam上搜索并下载Creation Kit。将CreationKit.exe添加至MO2的可执行程序当中。推荐安装N网上的第三方修复/改进(如编号20061、41195、71371)之后再使用。第三方修复/改进的具体安装方法请参考其N网页面。
9)安装SSE Engine Fixes (skse64 plugin)并按需设置
下载相应版本的Part 1文件并用MO2安装。下载Part 2文件并将压缩包内容解压至游戏根文件夹内。按需修改EngineFixes.toml内的设置,这里不做介绍。
10)按需安装以下推荐使用mod:No Grass In Objects、Worldspaces with Grass SSEEdit Script for No Grass In Objects、Grass Cache Helper NG
NGIO是生成草缓的核心mod,需要安装其主文件(根据游戏版本选择对应版本)以及Grass Generation MO2 Plugin。需要注意当前mod主文件安装后,请在安装后启用该mod 并启动一次游戏(只需进入主菜单界面即可关闭游戏。)届时,将会在MO2的overwrite\SKSE\Plugins目录下生成GrassControl.ini 。推荐将这个文件直接移动到NGIO自己的mod文件夹下的SKSE\Plugins中,因为保持overwrite文件夹简洁是个好习惯。当然,你也可以在NGIO页面的可选文件中下载由其提供的GrassControl.ini,并将其直接安装在NGIO的对应文件夹内。
关于Grass Generation MO2 Plugin的版本选择,推荐直接使用最新的v3.1。如果需要使用旧版本(完全想不到这么做的理由)或者你是VR用户,请参考:如果使用的是 MO2 2.5 及更高版本,下载v2
如果使用的是 MO2 2.4.4 或更低版本,下载v1.5
如果使用的是 MO2 版本 2.5 及更高版本,并且是 VR用户,下载v2 VR
下载完毕后,解压该文件夹,将文件内容移动到 MO2 文件夹的 /plugins 文件夹中(例如如果你将 MO2 安装到 'C:\Modding\MO2' 中,请将其移动到 'C:\Modding\MO2\plugins'。)
Worldspaces with Grass SSEEdit Script for No Grass In Objects是辅助NGIO生成草地缓存的xEdit脚本,显然需要xEdit才能使用。将Worldspaces with Grass SSEEdit Script for No Grass In Objects压缩包内的内容解压缩至xEdit安装路径下的Edit Scripts文件夹内。
正常安装Grass Cache Helper NG,并启用。
以上这些mod的具体设置和使用方法会在后文详细介绍。
11)按需安装A Clear Map of Skyrim and Other Worlds和ACMOS Road Generator
使用MO2安装A Clear Mapof Skyrim and Other Worlds,不推荐安装ACMOS – Lazy Roads。在安装选项中,推荐选择DynDOLOD 3/With DynDOLOD LOD32。按需选择其他mod世界和Remove Clouds选项。注意,选择了With DynDOLOD LOD32选项而未按照相应要求生成DynDOLOD必然会引发远景出现在近处的bug。后文会详细介绍使用该选项时玩家需要对DynDOLOD做出的相应修改。
推荐将ACMOS Road Generator解压至非中文路径、非重要文件夹内。不推荐使用MO2安装该工具,也不必将该工具添加至MO2的可执行程序里。
12)按需安装ENB、与你当前草地相对应的complex grass材质和与你当前树木相对应的3D树木远景资源
在ENB官网下载最新版ENB核心,将压缩包内WrapperVersion文件夹里的d3d11.dll与d3dcompiler_46e.dll拷贝到游戏根目录内。本文不介绍ENB预设的安装方式。
大多数流行草地mod的ENB complex grass材质都能在ENB Complex Grass - Patch Compendium for various grass mods(N网编号67304)中找到。除此之外,N网上还有Step Modifications提供的原版草地(N网编号68640)和Cathedral Landscapes草地(N网编号69578)的complex grass材质。如果你的草地mod没有相应的complex grass材质,你将无法正常使用ENB complex grass功能和DynDOLOD的HD草地远景功能。一份complex grass材质文件中同时包含了草的漫反射贴图和法线贴图,因此相当容易辨别。Complex grass材质显然必须覆盖基础的草地材质。
DynDOLOD Resources中已经包含了原版树木的3D远景资源。不同树木mod对待3D远景资源的态度有所不同:部分树木mod默认包含对应的3D远景资源;部分树木mod会在安装包里提供安装3D远景资源的选项;部分树木mod的3D远景资源位于N网页面的可选文件里,需要单独下载;部分树木mod的3D远景资源拥有单独的N网页面;部分树木mod完全不提供3D远景资源。3D树木远景资源文件的文件名格式为treename01_XXXXXXXXpassthru_lod.nif与treename01_XXXXXXXX_trunk.nif,如果玩家不确定自己有没有安装3D树木远景资源可以自行排查。如果某个树木mod完全不提供3D远景资源,玩家依旧可以使用DynDOLOD的Ultra树木远景功能,但是只能生成改进款的billboard纸片远景,不能生成3D/混合树木远景。
13)按需安装DynDOLOD DLL SE
玩家能在DynDOLOD DLL SE的N网页面上看到的DynDOLOD DLL只是PapyrusUtil SE的替代品,在安装了PapyrusUtil SE的情况下没有必要使用。新版的DynDOLOD DLL NG and Scripts 3.00则为DynDOLOD添加了large reference bug解决办法功能。由于该功能依旧在试验阶段,N网上该文件处于隐藏状态。玩家可以在DynDOLOD官网Help/Large-Reference-Bugs-Workarounds页面找到该文件的下载链接。使用MO2安装并启用该文件,覆盖DynDOLOD Resources SE 3。如果你不打算使用风险较高的试验性功能,或者你关闭了large reference系统,那么无需安装这一mod。
DynDOLOD DLL NG and Scripts 3.00处在试验阶段,更新频繁。请密切关注其更新信息,保证使用的是最新版本。
2.6 其他准备工作
1)确认你真的安装了所需mod/工具
不用多说。人难免有疏漏,检查一遍还是很有必要的。
2)确认你没有安装以下mod/工具:SSELODGEN、Darker Distant LOD for ENB、Winterhold College LOD Shimmer Fix、Culling data glitch fix、EVLaS Skyrim Underside和DynDOLOD Bright LOD Waterfall Fix
以上mod/工具完全不推荐安装/使用。如果你已经安装了它们,请将其卸载/删除。
3)确认你没有安装第三方提供的地形远景/树木远景/物体远景
使用远景生成工具的目的就是生成符合玩家游戏内容的远景,使用第三方提供的现成远景文件与这一目的背道而驰,因此玩家不应安装这些文件。一般来说它们不会干扰正常的远景生成,但是会白白占用你的硬盘空间,因此推荐卸载。
游戏所用到的全部远景模型文件均位于meshes/terrain文件夹内,该目录下的每个文件夹内都含有一个worldspace所用到的全部远景模型/数据。以Tamriel worldspace为例,其地形远景模型位于meshes/terrain/tamriel根目录内,命名格式为Tamriel.x.x.x.btr;树木远景数据位于meshes/terrain/tamriel/trees文件夹内,命名格式为Tamriel.x.x.x.btt;物体远景模型位于meshes/terrain/tamriel/objects文件夹内,命名格式为Tamriel.x.x.x.bto。地形远景模型(btr文件)和物体远景模型(bto文件)均能用NifSkope查看。
在默认情况下,游戏所用到的全部远景材质文件均位于textures/terrain文件夹内,该目录下的每个文件夹(除了lodgen)内都含有一个worldspace所用到的全部远景材质。以Tamriel worldspace为例,其地形远景材质位于textures/terrain/tamriel根目录内,命名格式为Tamriel.x.x.x.dds;树木远景atlas材质位于textures/terrain/tamriel/trees文件夹内;物体远景atlas材质位于textures/terrain/tamriel/objects文件夹内。
使用MO2右侧的数据栏判断mod列表里有哪些mod包括了现成的远景文件。仅仅包含这些远景文件而没有其他内容的mod(例如N网编号9135、39563、4263、1885)应当卸载,以节省存储空间。
4)确认你没有安装第三方提供的billboard文件
Billboard文件是生成草地远景和树木远景时需要用到的资源。自DynDOLOD 3开始,TexGen能够生成远景生成所需的全部billboard,因此不推荐安装一切第三方提供的billboard文件,以免其干扰正常的远景生成。如果安装了第三方提供的billboard文件请立即删除。
Billboard文件均位于textures/terrain/lodgen内,该目录下的每一个文件夹对应一个插件,这些文件夹里包含该插件添加的部分草/树种类的billboard文件。一份billboard包含一至数份dds材质文件和一份txt文件,其基础命名格式为treename01_xxxxxxxx.dds/txt。
使用MO2右侧的数据栏判断mod列表里有没有现成的billboard文件,如果有的话请将这些文件立即删除。
5)确认你是否安装了SSE FPS Stabilizer
SSE FPS Stabilizer会根据帧率实时调节LOD4/8/16物体远景的显示距离。该mod会覆盖ini文件中的相关设置,并且玩家将无法在DynDOLOD的MCM菜单中调节远景层级显示距离。笔者不推荐使用该mod,如果你希望使用该mod,务必记住你只能通过编辑该mod的预设文件以修改不同远景层级的显示距离。具体方式本文不做介绍。
6)确认你没有安装第三方提供的草地缓存文件(推荐)
第三方提供的草地缓存文件有较大概率与玩家游戏内容不完全匹配,从而引发视觉问题。草地缓存文件全部保存在grass文件夹中,其命名格式为WorldNamex*y.cgid或WorldNamexy*.gid。
使用MO2右侧的数据栏判断mod列表里有没有现成的草地缓存文件,如果有的话推荐将这些文件删除,并自行生成草地缓存。
7)使用LOOT查看提示/警告信息(推荐)
通过MO2启动LOOT并更新主列表,以查看提示/警告信息。如果你的mod列表较长,建议通过左侧的筛选功能隐藏无信息的插件。按照信息中的指示解决mod兼容性问题。使用xEdit清理所有LOOT表示需要清理的插件。请读者自行决定是否使用LOOT调整插件排序。
8)使用xEdit清理插件(必须)
由于Dyndolod新版本对脏插件有了更严格的判定,所以现在的游戏本体,即Skyrim.esm、Update.esm、Dawnguard.esm、HearthFires.esm、Dragonborn.esm,都必须清理,否则无法使用Dyndolod生成远景
而其他模组,则需要使用LOOT判断哪些插件需要清理。但并非所有本体以外的脏插件都需要清理,因为有一些脏插件是作者故意为之,具体需要结合模组作者在简介和评论区的说明来确定。
通过MO2启动SSEEditQuickAutoClean.exe,选中需要清理的插件,执行清理。提示清理完毕之后关闭程序。每次开启程序只能清理一个插件。在清理完所有插件之后,打开LOOT并更新主列表以进一步确认。已经清理过的插件不会再提示信息。
9)使用xEdit为Worldspaces with Grass SSEEdit Script for No Grass In Objects/WhiterunExterior Grass和Markarth LOD Unlock创建补丁(可选)
使用Worldspaces with Grass SSEEdit Script for No Grass In Objects是为了让NGIO不为具有No Grass标签的,也就是不显示草地的worldspace生成草地缓存,从而缩短草地缓存的生成时间。在原版游戏数据里,Whiterun worldspace就是这些不显示草地的worldspace之一,也就是说在默认情况下,在使用Worldspaces with Grass SSEEdit Script for No Grass In Objects之后,NGIO将不会为Whiterun worldspace生成草地缓存。
如果你选择了DynDOLOD Resources中的Whiterun Exterior Grass,DynDOLOD生成的插件将会为Whiterun worldspace去除No Grass标签,这样Whiterun城外就会出现草地。这一改动显然只有在生成了DynDOLOD之后才会生效。
DynDOLOD草地远景功能依赖于NGIO生成的草地缓存,也就是说草地缓存生成在先,DynDOLOD运行在后。如果你同时使用了Worldspaces with Grass SSEEdit Script for No Grass In Objects和Whiterun Exterior Grass,运行完DynDOLOD之后Whiterun城外并不会出现草地——尽管Whiterun worldspace是显示草地的,它却没有相应的草地缓存数据,因此草地依旧不会出现。
解决这一问题的办法有很多,其中最简单直接的大概是在Worldspaces withGrass SSEEdit Script for No Grass In Objects生成的列表当中手动加入WhiterunWorld。笔者对这一问题的个人解决办法是在xEdit中找到Whiterun worldspace条目,把排在最后的插件数据复制到一个新插件(推荐使用带有ESL标签的ESP插件)中,然后在DATA – Flags (sorted)里移除No Grass。命名并保存这个新插件,确保它位于mod列表的底端,覆盖其他所有插件。这样一来,当你使用Worldspaces with Grass SSEEdit Script for No Grass In Objects之后,NGIO依旧会为Whiterun worldspace生成草地缓存。
Markarth LOD Unlock做出的唯一改动是在Markarth worldspace的Parent\PNAM – PNAM\Flags (sorted)中添加了Use LOD Data标签。为了避免该mod导致兼容性问题,玩家可以考虑不安装它,而是在xEdit中找到Markarth worldspace条目,把排在最后的插件数据复制到一个新插件(推荐使用带有ESL标签的ESP插件)中,然后在Parent\PNAM – PNAM\Flags (sorted)中添加Use LOD Data。命名并保存这个新插件,确保它位于mod列表的底端,覆盖其他所有插件。这样一来,玩家就不用担心这个mod与其他改变了Markarth worldspace数据的mod产生冲突。当然,使用xEdit创建补丁不代表你不能安装这一mod,只是它的数据会被你的补丁覆盖,因此无法起到任何作用。
玩家可以将上述两处改动添加到同一个新插件当中。
!【如不用xedit清理脏插件,则无法使用DynDOLOD实验性的Large Reference bug解决办法功能。】