上古卷轴吧 关注:1,612,780贴子:27,986,678

远景生成详细教程【2023.6】

只看楼主收藏回复



IP属地:广东1楼2023-06-05 21:34回复
    1 远景原理介绍
    1.1 什么是远景?
    在大多数使用3D技术的角色扮演游戏里,玩家所看到的游戏内画面都是通过一个位于玩家面前或者附近,能够相对自由地转动的镜头展现出来的。在游戏的三维空间里,离镜头越近的物体就显得越大;离镜头越远,物体便显得越小,到最后彻底不可见。这就产生了一个问题:怎么处理那些离镜头较远,玩家看不见或者看不太真切的物体?毕竟,设备的性能总是有限的,而渲染远处的物体听上去简单,实则却相当耗费性能。举个例子:如果游戏渲染玩家附近5*5范围内的物体,那么需要渲染的面积是25个平方单位;但是如果我们把渲染距离提升一倍,来到10*10,那么需要渲染的面积就变成了100个平方单位,是原先的4倍之多。很明显,与其顶着不成比例的性能消耗去把远处的物体完整渲染出来,不如耍个花招,把它们替换成低精度模型或者干脆让一些不那么显眼的物体消失。如此节约下来的性能可以用来提升帧数,也可以用于提升近景的表现——毕竟大多数情况下玩家主要关注的还是近处的物体。这便是LOD(细节层次,level of detail)系统的基本理念:为一个物体配上若干个不同精度的缩水版模型;距离玩家越远的物体,其实际使用的模型精度就越低,从而达到节省性能的目的。在通俗的说法当中,LOD这一简称已经失去了它原本的意义,而被用来指代这些只会出现在远处的缩水版模型,也就是中文里的“远景”。
    一言以蔽之,远景系统的根本目的在于节约性能。就目前而言,近景模型和材质质量的提升依旧可以说一眼望不到头:只要镜头凑得够近,玩家总能看到更多的细节,而现有的硬件机能和3D渲染技术还并不能做到实时输出足以以假乱真的画面。但是在正常的游戏体验里,远景是不可能出现在靠近镜头的地方的。在距离足够接近时,远景模型自然会被替换成完整模型。这也意味着,远景的精度只要达到了“位于远处时不仔细看看不太出和近景完整模型的区别”就足够了。超过这个临界点,任何往远景上额外投入的资源和性能基本都相当于打了水漂。这条原则需要时刻牢记——不要把宝贵的性能挥霍在无谓的地方!
    当然,不同玩家对远景细致程度的要求不可能完全相同,而在大多数时候,远景也并不能真的做到以假乱真。部分情况下,远景系统可能会导致游戏观感显著下降:远景模型过于粗糙;部分物体在距离较远时直接消失;远景模型和近景模型出现较为明显的不匹配,以上这些都是常见的例子。我们可以借助各种手段减少这类现象出现的频率,或者降低它们造成的影响,但是只要远景系统的基本运行原理没有改变,它们就无法根除。


    IP属地:广东3楼2023-06-05 21:36
    收起回复
      1.2 《上古卷轴5》中的远景系统是怎么运作的?
      远景在不同游戏里的具体实现方式不甚相同。在《上古卷轴5》(下称“老滚5”)里,我们大致可以看到两种计量距离的方式。老滚5里最为基础的距离单位……唔,就是一“游戏内单位”。笔者并不清楚贝塞斯达(下称“B社”)有没有为这个单位给出具体定义,不过这个概念也只与游戏引擎原理相关,正常游玩不会涉及。在xEdit里我们看到的物体的XYZ坐标,所用的就是这个单位,诸如fShadowDistance(决定渲染阴影的距离)这样的ini设置的单位也是它。根据Sheson的说法,128个游戏内单位等于6英尺,也就是说约等于1.83米。
      除此之外,老滚5中另一个频繁用到的距离计量方式是“单元格”。老滚5的户外世界被划分成为了许多个单元格,每一个单元格都是4096*4096个“游戏内单位”这么大。单元格计量方式最重要的用处大概就是在臭名昭著的uGridsToLoad这个设置上:它规定了游戏加载内容的范围大小。默认情况下,uGridsToLoad被设定为5,意思就是说游戏里的一切都发生以玩家所处的单元格为中心的这5*5个单元格内,而在这25个单元格之外就是远景了。uGridsToLoad和其他以单元格作为单位的设置都只能被设置为奇数,因为在偶数*偶数大小的范围内不可能存在一个位于正中央的单元格。某些非常古老的文章里提到玩家可以把uGridsToLoad设置为7甚至更高的值,以提升较远处物体的显示效果,不过这样做很不推荐。比起完整渲染5*5个单元格,完整渲染7*7个单元格的性能消耗可是增长了近一倍,玩家遭遇bug和不稳定因素的概率也会大大上升。

      游戏加载范围的直观展示。关闭远景,开启单元格分界线之后可以清楚看到在默认设置下,加载范围由5*5个单元格组成。
      一般来说,超出uGridsToLoad的范围外,完整模型就会被远景模型所替代,但是也有少数例外。根据替换对象的种类,老滚5的远景可以被划分为3种:地形远景、物体远景和树木远景。地形远景用来替换玩家脚底下踩着的地面(包括水面);物体远景用来替换山脉、岩石、建筑等中大型物体;树木远景,顾名思义,替换的则是完整的树木。从游戏运行的意义上,老滚5中的远景其实并不真正存在。它们没有碰撞体积,不会变化,无法与任何东西产生互动,甚至不能投射/接收阴影。它们只是海市蜃楼,把它们全部去掉不会对游戏运行产生任何影响。事实上,玩家也的确拥有把远景去掉的办法——在控制台中输入tll。这一命令会关闭/开启游戏中的远景显示,在判断一个模型属不属于远景时非常好用。


      IP属地:广东4楼2023-06-05 21:37
      收起回复
        我们在讨论远景的定义时已经提到,远景一般包括多个不同的精度层次,游戏会在在距离玩家更远的地方使用精度更低的远景模型,以尽可能地节约性能。在老滚5里,物体远景和地形远景分为4个精度层次:LOD4、LOD8、LOD16、LOD32,精度逐级递减。LOD4指的是4*4个单元格内的地形/物体远景信息被汇总在了一个模型文件里;LOD8指的是8*8个单元格内的地形/物体远景信息被汇总在了一个模型文件里,以此类推。在各个远景层级中,LOD4距离玩家最近,模型的相对精度最高,LOD8次之,LOD16又次之,LOD32距离玩家距离最远,模型精度最低。需要注意的是,在默认设置下,老滚5的物体远景只有LOD4/8/16三级,LOD32只有地形远景方才使用。至于树木远景,不论其距离玩家多远,它始终都是两个平面交叉组成的一个极其简单的纸片模型(这个模型叫做billboard),因此也就不存在层级系统。此外,老滚5的地图上显示的是最远级别的物体和地形远景,在默认设置下也就是LOD16的物体远景加上LOD32的地形远景。游戏最远能渲染大约100个单元格的距离。

        Billboard树木远景的具体展示——加载了同一份材质文件的两个平面呈九十度交叉。
        (这里额外说一下水面远景:老滚5可以有多种不同的水,但是由于引擎限制,一个worldspace里只能存在一种远景水,也就是说不管江河湖海,整个天际的所有水体出了加载范围看上去都是一个样子。没有任何mod或者工具能够改变这一点。如果你在游戏中看到完整水和远景水之间出现了较为明显的色差/接缝,这不是任何远景生成工具的问题,而且有可能无法彻底解决。在确认插件排序无误的情况下,玩家可以考虑调整ENB设置中ReflectionAmount、DisableDistantReflection与Muddiness等设置,观察能不能带来改善。)


        IP属地:广东5楼2023-06-05 21:38
        收起回复
          老滚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文件就已经覆盖了整个天际的绝大部分面积。


          IP属地:广东6楼2023-06-05 21:40
          回复
            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为例。在这种情况下,以玩家为中心的5*5个单元格是加载区域,其中没有任何远景。在这25个单元格外,以玩家为中心的11*11个单元格内的区域则属于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模型。


            IP属地:广东7楼2023-06-05 21:41
            回复
              首先一点是,游戏里的很多模型从近处看没有什么异样,但如果从远处观看,玩家可能会发现一些怪异现象,例如墙上的苔藓/山体上的雪覆盖的范围明显变广,甚至出现在了不该出现的地方。又比如,一些本来被其他模型/平面遮住的模型随着视角拉远反而露了出来,从而呈现出相当诡异的视觉效果。这种现象通常只会在完整模型上出现,而不会在远景模型上出现。一般来说玩家并不会在特别远的地方看到完整模型,所以这也无伤大雅。然而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。


              IP属地:广东8楼2023-06-05 21:42
              收起回复
                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远景问题的终极解决办法。


                IP属地:广东9楼2023-06-05 21:43
                回复
                  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会额外通过脚本控制它们的显示距离。这里有两点需要说明,其一是动态远景是引擎意义上的完整物体,但它完全可以使用和普通远景一样的低精度模型,而不是非得使用该物体的完整模型;其二则是动态远景永远不会出现在地图上,因为地图只显示狭义上的、“正宗”的远景。这是一个小小的遗憾,不过一般来说影响非常有限。


                  IP属地:广东10楼2023-06-05 21:43
                  回复
                    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远景。)


                    IP属地:广东11楼2023-06-05 21:44
                    回复
                      草地远景大概是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还会包括对应的法线材质。


                      IP属地:广东12楼2023-06-05 21:45
                      收起回复
                        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中加入生成材质预览功能等。


                        IP属地:广东13楼2023-06-05 21:46
                        收起回复
                          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菜单。


                          IP属地:广东14楼2023-06-05 21:49
                          收起回复
                            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 Fixes(N网编号60891)
                            周年版版本(1.6+)用户使用草地缓存/生成草地远景必备,1.5.97版本用户不需要使用。不建议在网络上下载第三方提供的现成草地缓存,建议使用降级工具(例如N网编号57618)降级到1.5.97之后使用NGIO生成草地缓存。具体使用方法下文会详细介绍。
                            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)之后再使用。


                            IP属地:广东15楼2023-06-05 21:50
                            收起回复
                              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为地图增添更多细节。


                              IP属地:广东16楼2023-06-05 21:51
                              回复