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

注册 登录

QQ登录

只需一步,快速开始

查看: 8747|回复: 25
打印 上一主题 下一主题

[原创] 【白左】Streamline3.1beta不完全详解——进阶版 ~码字好累~

 关闭 [复制链接]

60

主题

5353

帖子

7435

积分

游戏精英

Rank: 8Rank: 8

贡献度
1137
金元
28666
积分
7435
精华
2
注册时间
2009-5-14
跳转到指定楼层
主题
发表于 2009-12-9 20:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[em54] 不少教程一点都不详细。。。
为了不辜负放开那位奶奶 的建议。。。今天特地花了整整一下午研究这玩意。。。恩,还算可以吧。。。
因为TLF论坛关闭了注册。。。所以据说很详细的wa兄的分析我看不到。。。只能自己研究[em07]
考虑到还有其他上不了TLF的同学,我就分享下自己的研究心得。。。
出于DIY的乐趣,基本上没有用到游戏内部的界面,全部修改sl.ini完成。下面标记[略]的是其他很容易搜索到的教材有解释的,我就不多费口舌了。
OK,Let's shake it



首先,作者自己说了很多,但是关键部分还是没怎么讲清楚。。。
简单而言,SL利用你设定的FPS(Frame per Second)范围确定了一个基准数值vLOD(overall Level of Detail),下面所有动态优化均是以vLOD为参照的。(其实直接用FPS是一样的效果。。。大概是程序脚本用固定范围的变量比较强健)
废话少说,直接分析ini文件(这是我的sl.ini,和大家的default可能部分数值不一样)

;===================================================================================
; [Main Features Settings]                 Toggle Streamline Features (1=on, 0=off)
;===================================================================================
set SLv.Purging               to       1  ; Turn on Streampurge?  (cache purging)
set SLv.FPSsmoothing          to       1  ; Turn on Streamsmooth? (FPS smoothing)
set SLv.Streamsaving          to       0  ; Turn on Streamsaving? (timed autosaves)
set SLv.Streamsight           to       1  ; Turn on Streamsight?  (FPS enhancer)

为了能单独拿来看。。。我还是提一下吧。。。
[略]这4个分别是清除缓存,优化FPS,自动保存,高级FPS优化的开关
;===================================================================================
; [Streampurge Settings]                    An automated cache-cleaner for Oblivion
;===================================================================================
set SLh.SLmode                to       4  ; Memory Purge Mode (1-6)  (Default: 3)
                                          ;  Lower # = faster, higher # = slower
set SLv.PurgeOnTravel         to       0  ; Purge memory on travel & zone?
set SLv.PurgeOnWait           to       1  ; Purge memory when character waits?
set SLv.PurgeOnSleep          to       1  ; Purge memory when character sleeps?

[略]清理速度推荐4。过高会不稳定
;===================================================================================
; [Streamsmooth FPS Settings]              Acceptable Minimum FPS & Detail Settings
;===================================================================================
set SLfpsmon.High             to      20  ; Highest minimum FPS  (top of range)
set SLfpsmon.Low              to      10  ; Lowest minimum FPS   (bottom of range)
;-----------------------------------------------------------------------------------
set SLv.maxVLOD               to     100  ; Highest overall level of detail (%)
                                          ;  Default: 100    (Max: 100)
set SLv.minVLOD               to       0  ; Lowest overall level of detail (%)
                                          ;  Default:  0     (Min: 0)

这里是关键。vLOD的计算公式为100*[(实际fps-最低fps)/(最高fps-最低fps)],所以,推荐上面的maxvlod和minvlod不要修改,不然下面的计算会很麻烦。
最高最低fps(下面简称Exfps)的设定也是有讲究的,根据你的不同需求来定。关于最高最低fps的设定技巧我会在详细设定部分说明。我的优化目的是平时低fps无所谓,视觉效果要保证;战斗时完全不考虑视觉,只追求fps,因此设定值很低。
;-----------------------------------------------------------------------------------
set SLv.CombatFPS             to    15.0  ; The number of FPS added to the min/max
                                          ;  range when combat is happening nearby

战斗时Exfps上下限的附加值。同上,这个附加值的设定也是有技巧的。后面提及。
;-----------------------------------------------------------------------------------
set SLv.FPSmoninterval        to       6  ; Update interval for FPS smoothing
                                          ;  (Number of updates per second)
                                          ;  Faster updates = smoother performance
                                          ;  Smoother performance = more CPU usage
                                          ;  Default: 6/sec
set SLv.sensitivity           to     7.0  ; Sensitivity to changes  (Default: 7.0)
                                          ;  This is a relative number representing
                                          ;  how fast Streamsmooth tries to adjust
                                          ;  details to reach your FPS range.
                                          ;  Lower numbers = faster changes

[略]保留默认就够用了。
;===================================================================================
; [Streamsmooth Visual Categories]         What can Streamsmooth change on-the-fly?
;===================================================================================
set SLv.setDetail             to       1  ; LOD Detail, Specular, etc.
set SLv.setGrass              to       1  ; Grass density, range, etc
set SLv.setTrees              to       1  ; Tree detail, range, etc
set SLv.setLightShadow        to       0  ; Shadow number & range, etc.
set SLv.setObjects            to       1  ; Actors, Objects & Items distances
set SLv.setWater              to       1  ; Water details & reflections

[略]优化类别开关。完全等效下面的开关,只是方便批量开关而已
;===================================================================================
; [Streamsave Settings]                                    Streamsave configuration
;===================================================================================
[略]懒得用自动保存,设置也不难,不提

;===================================================================================
; [Streamsight Settings]                          Refer to documentation for values
;===================================================================================
set SLv.MinDistanceFog        to   15000  ; Min distance before fog starts (0%)
set SLv.MaxDistanceFog        to   68000  ; Max distance before fog ends (100%)
set SLv.MinWaterFog           to       0  ; Min distance before water fog starts
set SLv.MaxWaterFog           to    2500  ; Max distance before water fog ends
;-----------------------------------------------------------------------------------
set SLv.WeatherUnsticker      to       1  ; Leave set at 1 unless you use a
                                          ;  scripted weather mod
;-----------------------------------------------------------------------------------
set SLv.ExtremeClipping       to       1  ; Turn on clipping behind distant fog?
                                          ;  Gains FPS, but can cause some
                                          ;  clipping of distant mountains
set SLv.ClipMin               to   20000  ; Range under which clipping will stop
set SLv.FogUpdateFrequency    to       6  ; Speed control for fog updates (1 - 10)
                                          ;  # of updates per sec     (Default: 6)

[略]这个高级FPS优化决定了远景雾化的距离以及切片效果的开关。自己试验。其实直接更改uGridDistantCount效果差不多。
;===================================================================================
; [Miscellaneous Settings]                       Other misc settings for Streamline
;===================================================================================
[略]其他设置,不难,自己看吧
;===================================================================================
; [Hotkey Configuration]                 Hotkey combination settings for Streamline
;===================================================================================
[略]热键设定

;===================================================================================
; [Detailed Streamsmooth Settings]         Individual Settings (for ADVANCED users)
;===================================================================================
set SLv.AA0                   to     0.0  ; Enable?
set SLv.AA1                   to    100.0  ; highVLOD - fSpecualrStartMax
set SLv.AA2                   to     0.0  ; lowVLOD   "The maximum range of Specular
set SLv.AA3                   to   500.0  ; maxVAL     lighting effects.  Ties in
set SLv.AA4                   to   100.0  ; minVAL     directly to fSpecularLOD"

好了,终于到关键的详细设定了。每个选项的作用很多优化教程都有提及,不再赘述,我重点讲解如何设定来达到自己想要的效果。以此设定为例。
AA0是开启否,如果你特别优化过这个选项,不希望被动态调节,就设为0,下面的数值可以无视。
AA1~2是动态调节的触发范围,触发源就是vLOD。最高值和最低值代表动态调节的全功能作用范围。
AA3~4就是该oblivion.ini选项的数值,对应vLOD的高低。
这玩意究竟是怎么起作用的?我距离说明。将上述改为这样:(假设Exfps=10~20,战斗附加值=15)
set SLv.AA0                   to       1.0  ; Enable?
set SLv.AA1                   to     74.0  ; highVLOD - fSpecualrStartMax
set SLv.AA2                   to     20.0  ; lowVLOD   "The maximum range of Specular
set SLv.AA3                   to   500.0  ; maxVAL     lighting effects.  Ties in
set SLv.AA4                   to   100.0  ; minVAL     directly to fSpecularLOD"

这些设置的意思是:
***没有战斗的时候,当vLOD大于等于74的时候fSpecualrStartMax=500;小于等于20的时候=100。20~74的时候线性渐变。比如vLOD=47,74和20的一半时,fSpecualrStartMax=300,500和100的一半。其中,vLOD20对应的fps是0.20*(20-10)+10=12;vLOD74对应的fps是17.4。用fps来衡量的话,现在的调节规则是:fSpecualrStartMax在fps小于等于12的时候为100,大于等于17.4的时候是500,两者中间的时候线性渐变。
***处于战斗中时,vLOD的计算发生了变化,现在对应的起始截止阈值fps从12~17.4变为27~32.4(上下限直接加15),调节规则变为:fSpecualrStartMax在fps小于等于27的时候为100,大于等于32.4的时候是500,两者中间线性渐变。
你可能会奇怪,莫非我的老本战斗时候fps还会高点不成?让我们来假设一下,我正常野外fps有17~25左右,战斗时跌到13以下。那么会发生什么情况呢?因为非战斗时fps最低都有17,所以高于Exfps上限,视觉效果全部是最大值。而战斗的时候最高fps都远远小于Exfps+15的截止fps,于是跳过线性工作区,直接所以选项掉到最小值。
最终的效果就是非战斗时能以略低的fps看看好的画面,而战斗时所有效果达到最低,腾出资源留给战斗。这玩意就好像二极管一样。。。我利用的是它的非线性工作区,利用的是二极管的开关效应。哦,不对,是Streamline的开关效应。
这种设置没有利用动态调节的线性工作区,是专为战斗优化的。同时,如果将Exfps设定到你野外的通常fps范围内,而战斗附加值很小(比如5),作用就是平滑平时的fps,战斗时略微优化,同时保留可观的视觉效果。不同的优化选项可以设置不同的动态调节范围,比如最求画质的同学,可以将水面效果的high/low vLOD设置为70~90,草地阴影设置为60~70,物件淡出设置为50~60,这样,当fps吃紧的时候,会按照水面效果,草地阴影,物件淡出的顺序依次降低细节等级,提高fps。也就是说,可以将不怎么在意的项目设置苛刻一点,比较在意的项目设置宽松一点,这样当fps略低,动态调节会先拿次要的项目开刀,fps实在吃紧后,再降低其他效果。
由上面的例子可以看出,不同数值的搭配,SL能起到的作用远远不止fps优化这么简单,只要自己花点功夫仔细设置,能够起到非常好的调节效果。
PS:vLOD调节实际上就是根据fps来调节,只是出于某种原因使用了vLOD这个中间变量而已,所以不必被vLOD这个名词绕得头昏,它基本上和fps的高低是等价概念。

;-----------------------------------------------------------------------------------
set SLv.AC0                   to     0.0  ; Enable?
set SLv.AC1                   to    100.0  ; highVLOD - fSpecularLOD2
set SLv.AC2                   to     0.0  ; lowVLOD   "Max range at which Level of
set SLv.AC3                   to   500.0  ; maxVAL     detail (LOD) used for
set SLv.AC4                   to   100.0  ; minVAL     specular lighting effects"
;------------------------------------------
set SLv.AD0                   to     0.0  ; Enable?
set SLv.AD1                   to    100.0  ; highVLOD - fSpecularLOD1
set SLv.AD2                   to     0.0  ; lowVLOD   "Min range at which Level of
set SLv.AD3                   to   300.0  ; maxVAL     detail (LOD) used for
set SLv.AD4                   to     0.0  ; minVAL     specular lighting effects"
;-----------------------------------------------------------------------------------
set SLv.AE0                   to     1.0  ; Enable?
set SLv.AE1                   to    30.0  ; highVLOD - iMinGrassSize
set SLv.AE2                   to     0.0  ; lowVLOD   "Grass density (inverse #)
set SLv.AE3                   to    80.0  ; maxVAL     Larger numbers mean less
set SLv.AE4                   to   200.0  ; minVAL     grass & higher framerates"
;-----------------------------------------------------------------------------------
set SLv.AF0                   to     1.0  ; Enable?
set SLv.AF1                   to    30.0  ; highVLOD - fGrassEndDistance
set SLv.AF2                   to     0.0  ; lowVLOD   "Max distance at which to
set SLv.AF3                   to  8000.0  ; maxVAL     display grass"
set SLv.AF4                   to  3000.0  ; minVAL
;------------------------------------------
set SLv.AG0                   to     1.0  ; Enable?
set SLv.AG1                   to    30.0  ; highVLOD - fGrassStartFadeDistance
set SLv.AG2                   to     0.0  ; lowVLOD   "Distance from player at which
set SLv.AG3                   to  7000.0  ; maxVAL     grass begins to fade out"
set SLv.AG4                   to  2000.0  ; minVAL
;-----------------------------------------------------------------------------------
set SLv.AH0                   to     0.0  ; Enable?
set SLv.AH1                   to    75.0  ; highVLOD - iMaxGrassTypesPerTexure
set SLv.AH2                   to    30.0  ; lowVLOD   "Number of possible textures
set SLv.AH3                   to     4.0  ; maxVAL     used per grass type"
set SLv.AH4                   to     1.0  ; minVAL
;-----------------------------------------------------------------------------------
set SLv.AJ0                   to     0.0  ; Enable?
set SLv.AJ1                   to   100.0  ; highVLOD - iActorShadowCountInt
set SLv.AJ2                   to    20.0  ; lowVLOD   "Number of actor shadows
set SLv.AJ3                   to    10.0  ; maxVAL     displayed when indoors"
set SLv.AJ4                   to     0.0  ; minVAL
;------------------------------------------
set SLv.AK0                   to     0.0  ; Enable?
set SLv.AK1                   to   100.0  ; highVLOD - iActorShadowCountExt
set SLv.AK2                   to    25.0  ; lowVLOD   "Number of actor shadows
set SLv.AK3                   to    10.0  ; maxVAL     displayed when outdoors"
set SLv.AK4                   to     0.0  ; minVAL
;-----------------------------------------------------------------------------------
set SLv.AL0                   to     0.0  ; Enable?
set SLv.AL1                   to   100.0  ; highVLOD - fShadowLOD2
set SLv.AL2                   to    25.0  ; lowVLOD   "Max range at which shadows
set SLv.AL3                   to  2900.0  ; maxVAL     are displayed"
set SLv.AL4                   to   400.0  ; minVAL
;------------------------------------------
set SLv.AM0                   to     0.0  ; Enable?
set SLv.AM1                   to   100.0  ; highVLOD - fShadowLOD1
set SLv.AM2                   to    25.0  ; lowVLOD   "Range at which a lower level
set SLv.AM3                   to  2800.0  ; maxVAL     of detail (LOD) starts being
set SLv.AM4                   to   200.0  ; minVAL     used for shadows"
;-----------------------------------------------------------------------------------
set SLv.AP0                   to     0.0  ; Enable?
set SLv.AP1                   to   100.0  ; highVLOD - iShadowFilter
set SLv.AP2                   to    20.0  ; lowVLOD   "Low/Medium/High shadow
set SLv.AP3                   to     2.0  ; maxVAL     detail.  Alters softness on
set SLv.AP4                   to     0.0  ; minVAL     edges of shadows"
;-----------------------------------------------------------------------------------
set SLv.AS0                   to     1.0  ; Enable?
set SLv.AS1                   to    31.0  ; highVLOD - fLODFadeOutMultActors
set SLv.AS2                   to     0.0  ; lowVLOD   "Relative range at which
set SLv.AS3                   to    10.5  ; maxVAL     actors begin to fade out"
set SLv.AS4                   to     6.5  ; minVAL
;------------------------------------------
set SLv.AT0                   to     1.0  ; Enable?
set SLv.AT1                   to    30.0  ; highVLOD - fLODFadeOutMultItems
set SLv.AT2                   to     0.0  ; lowVLOD   "Relative range at which
set SLv.AT3                   to     6.5  ; maxVAL     items begin to fade out"
set SLv.AT4                   to     1.5  ; minVAL

可以看出,物件fade上下限差别非常大,因为我是利用开关效应,战斗的时候远处的石头对我而言完全没有意义。其他同学设置的时候,没有必要这么夸张,可以设置为10~14之类的,这样在fps降低时,可视距离只会有不太明显的变化,但是能gain一点fps,同时High/low vLOD也可以设置宽松一点,比如0~100。
;------------------------------------------
set SLv.AU0                   to     1.0  ; Enable?
set SLv.AU1                   to    30.0  ; highVLOD - fLODFadeOutMultObjects
set SLv.AU2                   to     0.0  ; lowVLOD   "Relative range at which
set SLv.AU3                   to     6.5  ; maxVAL     objects begin to fade out"
set SLv.AU4                   to     1.5  ; minVAL
;-----------------------------------------------------------------------------------
set SLv.AY0                   to     1.0  ; Enable?
set SLv.AY1                   to    30.0  ; highVLOD - fTalkingDistance
set SLv.AY2                   to     0.0  ; lowVLOD
set SLv.AY3                   to  2000.0  ; maxVAL
set SLv.AY4                   to   500.0  ; minVAL
;-----------------------------------------------------------------------------------
set SLv.AZ0                   to     1.0  ; Enable?
set SLv.AZ1                   to    30.0  ; highVLOD - fLodDistance
set SLv.AZ2                   to     0.0  ; lowVLOD
set SLv.AZ3                   to  1000.0  ; maxVAL
set SLv.AZ4                   to   400.0  ; minVAL
;-----------------------------------------------------------------------------------
set SLv.BA0                   to     1.0  ; Enable?
set SLv.BA1                   to    30.0  ; highVLOD - fFadeDistance
set SLv.BA2                   to     0.0  ; lowVLOD
set SLv.BA3                   to  1000.0  ; maxVAL
set SLv.BA4                   to   400.0  ; minVAL
;-----------------------------------------------------------------------------------
set SLv.BE0                   to     0.0  ; Enable?
set SLv.BE1                   to    66.0  ; highVLOD - bEquippedTorchesCastShadows
set SLv.BE2                   to    65.0  ; lowVLOD
set SLv.BE3                   to     1.0  ; maxVAL
set SLv.BE4                   to     0.0  ; minVAL
;-----------------------------------------------------------------------------------
set SLv.BK0                   to     1.0  ; Enable?
set SLv.BK1                   to    30.0  ; highVLOD - fTreeLODExponent
set SLv.BK2                   to     0.0  ; lowVLOD
set SLv.BK3                   to     1.0  ; maxVAL
set SLv.BK4                   to     0.2  ; minVAL
;-----------------------------------------------------------------------------------
set SLv.BL0                   to     1.0  ; Enable?
set SLv.BL1                   to    50.0  ; highVLOD - bUseWaterReflectionsMisc
set SLv.BL2                   to    49.0  ; lowVLOD   "Turns on water reflections
set SLv.BL3                   to     1.0  ; maxVAL     for Misc objects (rocks etc)"
set SLv.BL4                   to     0.0  ; minVAL
;-----------------------------------------------------------------------------------
set SLv.BM0                   to     1.0  ; Enable?
set SLv.BM1                   to    50.0  ; highVLOD - bUseWaterReflectionsStatics
set SLv.BM2                   to    49.0  ; lowVLOD   "Turns on water reflections
set SLv.BM3                   to     1.0  ; maxVAL     for Static objects (buildings
set SLv.BM4                   to     0.0  ; minVAL     etc)"
;-----------------------------------------------------------------------------------
set SLv.BN0                   to     1.0  ; Enable?
set SLv.BN1                   to    50.0  ; highVLOD - bUseWaterReflectionsTrees
set SLv.BN2                   to    49.0  ; lowVLOD   "Turns on water reflections
set SLv.BN3                   to     1.0  ; maxVAL     for Trees"
set SLv.BN4                   to     0.0  ; minVAL
;-----------------------------------------------------------------------------------
set SLv.BO0                   to     1.0  ; Enable?
set SLv.BO1                   to    50.0  ; highVLOD - bUseWaterReflectionsActors
set SLv.BO2                   to    49.0  ; lowVLOD   "Turns on water reflections
set SLv.BO3                   to     1.0  ; maxVAL     for actors (NPCs, monsters)"
set SLv.BO4                   to     0.0  ; minVAL
;-----------------------------------------------------------------------------------

还有一点非常值得注意。这类0,1的布尔值变量,vLOD的上下限最好如同默认值一样只差1。因为我说过,在上下限之间值是线性渐变的,而作者自己说过,vLOD是离散变量,一共101个取值,50和49之间没有取值,从而能保证选项的值要么是1,要么是0。如果不是这样,就可能出现小数。虽然布尔值凡是非0都认做1,但是为了避免出现什么稀奇古怪的现象,最好还是不要让它有渐变的机会。

OK,全部分析完了,码字累死了。。。[em10]
话说这玩意挺好用的,不光是针对低端机,高端机也有用武之地。比如设定一个非常高的Exfps,最低值设置为通常值,而最高值(正常游戏不可能达到的fps)设置为高端画面的设置,平常的话不会有任何变化,等到拍照的时候ctrl+】,强行设置为华丽的最高画面(伴随可能的低fps),咔嚓,然后恢复,继续游戏。。。
警告:streamline的默认设置是按照中高端机设置的,神卡级用户如果使用后发现更卡,请自行修改参数。

评分

1

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-8 05:51 , Processed in 0.027134 second(s), 17 queries , Memcached On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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