目录
- 2 地图选择配置
- 2.1 maptools.cfg
- 2.2 paginglandscape2.cfg
- 3 地图定义细节
- 3.1 公用配置选项(maptools.cfg和paginglandscape2.cfg)
- 3.2 地图分割专用配置
- 3.2.1 高度图定义
- 3.2.2 数据源
- 3.2.3 纹理
- 3.3 运行时配置(Plugin配置)
- 3.3.1 分页选项
- 3.3.2 数据源定义
- 3.3.3 材质定义
- 3.3.4 更多选项
介绍
在继续之前,请留意 Paging Scene Manager 里的相关内容。
后面提到的配置文件在OGRE中均是以".cfg"为扩展名的文本文件。各个配置项在配置文件里以"键=值"的形式存在,例如:"ImageSplit=yes"。对于二选一类型的选项采用了'yes' 或 'no'作为设置值。在配置文件中,各配置选项的书写次序无关紧要,但是以字符串形式出现的配置项的大小写形式很重要(大小写敏感)。
对于每一幅地图,你必须有2个配置文件,类似于XXX.cfg和XXX.gen.cfg的形式。前一格在PLSM加载地图的时候必须用到,后一个在工具软件对地图进行分页时用到。
在创建一幅新的地图(假设是4096x4096像素尺寸的地图)时,为了使PLSM能够将它渲染出来,你需要做以下几件事:
- 首先,你需要定义一个地图分割配置文件(就是上面说到的XXX.gen.cfg类似的文件),该文件描述了你将怎样分割和配置它的纹理;
- 然后,你需要添加上一步形成的配置文件的文件名到maptools.cfg内,maptools.cfg内有一个地图列表,你既可以一次只分割一幅地图,也可以批量分割多幅地图。其中defaultmap后面的地图会被首先分割,至于后面的地图会不会分割,由后面的BatchMode决定,=yes时列表中的所有地图都会被分割,而=no时只分割defaultmap后面的地图;
- 运行地图分割工具。[译者:在此推荐Demo中赠送的那个,感觉还可以。] 注意:根据不同的配置选项,该过程可能会长一些;
- 一旦你在硬盘上生成了分割后的地图,如果配以合适的运行时配置文件(就是上面说到的XXX.cfg类似的文件),PLSM就可以渲染你的地图了;
- 在运行时配置文件里,你至少需要定义到哪里找地图文件、怎样加载它们、应用怎样的缺省纹理模式。其实有些选项应该和分割配置文件一致,否则运行时要出问题。
地图选择配置
配置文件maptools.cfg和paginglandcsape2.cfg列出了可用的和缺省的地图。
配置文件maptools.cfg被分割工具使用,而paginglandscape2.cfg文件被Demo_PagingLandScape2.exe使用。在运行你自己的应用时,你可以拷贝paginglandscape2.cfg并且重新命名(例如:PLSMTerrain.cfg),使用场景管理器的setWorldGeometry函数加载该文件。
例如: mSceneMgr->setWorldGeometry( Ogre::String("PLSMTerrain.cfg") );
maptools.cfg
- DefaultMap: 被分割的缺省地图,该地图总是会被首先分割(如果程序没有运行时错误的话);
- GroupName: 资源组。可以找到地图配置文件的地方;
- =: Short Map Name指定配置文件名(不要后缀);而Config File Name则指你的分割配置文件名(不要后缀)。例:hf_129_3=hf_129_3.gen。你可以列出不止一幅地图,这些地图可以一个接一个地被处理(如果batch模式开启);
- BatchMode=yes/no 指明了你想分割所有列出的地图还是仅仅分割default map。
例如:(maptools.cfg):
# 缺省地图, 如果BatchMode=no则只分割它
DefaultMap=MyTerrain
#其它地图,如果BatchMode=yes则会被分割
puget_sound=puget_1k.gen
grand_canyon=gcanyon_height_4k2k.gen
MyTerrain=WorldTerrainMap.gen
# 资源组描述,在该资源组下,所有的PLSM2资源可以被找到
GroupName=PLSM2
# 批量模式: yes = 分割所有列出的地图, no = 仅仅分割缺省地图
BatchMode=no
paginglandscape2.cfg
- DefaultMap: 应用程序在开始时加载时的第一幅地图。如果为"none"将导致PLSM2不加载任何地图(缺省值: none);
- GroupName: 资源组描述,指明了到哪里可以找到地图配置文件;
- =: 配置的多幅地图。例:MyTerrain=WorldTerrainMap。你可以列出不止一幅地图,然后通过设置DefaultMap来选择使用谁;
- TextureFormatDebug: 尝试强制纹理混合(缺省值: no)。
例如:(paginglandscape2.cfg):
#缺省地图,开始加载的地图
DefaultMap=MyTerrain
#其它地图
puget_sound=puget_1k
grand_canyon=gcanyon_height_4k2k
MyTerrain=WorldTerrainMap
#资源组
GroupName=PLSM2
#不尝试强制纹理混合
TextureFormatDebug=no
地图定义细节
地图配置文件的名字必须和"DefaultMap"中给出的名字一致。也就是说:对于"DefaultMap=Test" ,地图的配置文件名就是"Test.cfg"。[译者:在PLSM加载你指定的地图时,这些设置可能会被用于索引数据文件。]
公共配置选项
地图定义
- GroupName : 资源组。所有地图及地图纹理都应该包含在该资源组下(见resource.cfg)
- LandScapeFileName : 地形文件名(不要扩展名),必须在ogre的资源路径里并且在"GroupName"指定的资源组下
- LandScapeExtension : 地形文件的扩展名。Raw:如果是16bits raw格式,其它支持的地形文件格式是8bits, 但PNG的16bits地形文件也支持(缺省值: png)
- LandScapeExportExtension : 地形导出后缀格式说明 (如果你想导出16bits请使用raw,或者你需要的其它格式)
- TextureExtension : 生成的纹理扩展名, PNG可以换得最少的数据损失,DDS现在不再被支持(缺省值:png)
- ScaleX, ScaleY, ScaleZ : 地形缩放因子,在分割设置和APP设置中可以不同,但至少应该与地形的比例协调。否则,声称纹理的splatting和法线将不再真实(缺省值: 1)
- PageSize : 高度图分割成的页的像素尺寸,必须满足2^n + 1, 513通常是个不错的设置(缺省值: 513)
- TileSize : 高度图的Tile的像素尺寸,必须满足2^n + 1, 65通常是个不错的设置(缺省值: 65)
地图分割专用配置
高度图定义
- OutDirectory : 指定分割工具生成数据后将存放到什么地方(使用"LandScapeFileName"将存放到前面配置的"LandScapeFileName"配置项指定的文件加下)
- MiniMap : 是否生成MiniMap,在鹰眼图上可能能用上 (缺省值: no)
- Paged : 决定了是否分割地形文件和纹理文件。主要用处是便于调试(缺省值: yes)
数据源
- Data2DFormat : 高度图的类型,可选'HeightField', 'HeightFieldRaw', 'HeightFieldN', 'HeightFieldTC', 'HeightFieldNTC','HeightFieldRawTC', 'HeightFieldRaw'.等 (缺省值: HeightField);
- MaxValue, MinValue : 如果Data2DFormat = 'HeightFieldTC' 压缩格式,需要知道值的范围从哪里heightfield文件被压缩(缺省值 : 5000, 0)。
纹理
- ColorMapName : 彩色纹理图的名字。你为你的整个高度图设置的彩色的纹理,分割工具可能会根据你的设置,将之分割成多个小的纹理以便PLSM2能直接使用(Textureformat=Image);
- ColorMapSplit : 如果你希望分割彩色纹理图,设置成yes(和Textureformat=Image一起使用)。(缺省值:no);
- ImageSplit : 二选一('yes' 或'no' ),针对于"ImagePaging"地形纹理模式。如果ColorMapSplit没有设置,该选项将被检测。该选项如设置成yes,会导致分割工具将大的图像分割成适合Page大小的小的图像;
- LitColorMapSplit : 如果你需要照亮地形。请参见下面的照明选项(缺省值: no);
- InfiniteMap : If you want your map to be infinitizable.(Default Value : no)
- HeightMapBlurFactor : 高度图的模糊因子。如果你需要使高度图更加平滑(缺省值: 0.0f)
- Equalize : Make sure heights use the whole range 0-255 or 0-65535.(Default Value : no)
- HeightMap : 如果你想把你的高度图分割成某种相同格式的高度图(8 bits的图像或者16bits的Raw(或Png)格式,以适应data2dformat = HeightField, HeightFieldRaw, or HeightFieldTC)。(缺省值:no)
- NormalMap : 生成法线图。RGB is xyz normal. (缺省值:no)
- HeightNormalMap : Generates normal maps and store it as RGB as XYZ normal and Alpha as 8 bits HeightMap (usable with data2dformat = HeightFieldN, or HeightFieldNTC) cannot be combined with Raw files (it gives 8 bits instead of 16 bits.)(Default Value : no)
- ColorMapGenerated : 生成彩色纹理图。现已废弃不用。(缺省值: no);
- LitColorMapGenerated : 生成已经加成了光照效果的彩色纹理图,见下面的设置(缺省值: no)
- NumMatHeightSplat : 指定高度将要被分成的段数,见下面的设置(缺省值: 0)
- MaterialHeight1, MaterialHeight2 : 以最高地形高度的百分比形式给出的高度分段值。在MaterialHeight1 以下的使用Splat0,大于MaterialHeight1但是小于MaterialHeight2使用Splat1,大于MaterialHeight2的使用Splat3;
- SplatFilename0, SplatFilename1, SplatFilename2, SplatFilename3, SplatFilenameX : 如果你采用了高度分段方式,这几个文件名就是你为不同高度配置的纹理的输入,但是这些纹理依然基于BaseTexture纹理层(也就是说,各层在纹理混合时都会和BaseTexture纹理层混合);
- BaseMap : 为大比例尺设置的基本纹理,会影响较远的地形范围,但不同于BaseTexture。(缺省值:no)
- LitBaseMap : 与上面的BaseMap类似但是加成勒光照效果。(缺省值:no)
- CoverageMap : Coverage is RGBA, each channel has info for 1 splat (Textureformat=splatting3). (Default Value : no)
- AlphaMaps : 为每个splatting生成Alpha图层 (Textureformat=splatting2, splatting4, splatting6, splatting7)。(缺省值:no)
- LightMap : 生成光照图。with 8bits texture white is full light to black being full shadow(see Textureformat=splatting4). (缺省值:no)
- ShadowMap : 用于调试,与光照图相反。(缺省值:no)
- Sunx, Suny, Sunz : 如果计算生成光照图,这三个值以向量的方式指定了太阳光的方向。
- Ambient, Diffuse, Blur : 生成光照图需要的参数,环境光颜色、漫反射颜色等。
- ZHorizon : Horizon mapping with sun always on Z axis, and thus can be use in a shader to real-time shadows a terrain. (Default Value : no)
- NumSplatMapToSplit, SplatMapName0, SplatMapName1, SplatMapName(N)' : Specifies additional map you want to split. (user provided alpha spla maps, for roads or anything)
- AlphaSplatRGBAMaps, AlphaSplatLightMaps, RGBMaps, HorizonMap, ElevationMap, PVSMap : deprecated. (Default Value : no)
- TextureModifiable:纹理是否应该/能够被用户改变(比如说绘制/变形)。[译者:该特性很有意思,比如说大家常常讨论的Decal,地形编辑]。
运行时配置文件
分页选项
- Width: 世界的宽度,在X方向上,列的数目,不可缺省;如=4,表示每一行(水平方向)有4个Pages;
- Height: 地图高度,在Z方向上,行的数目,不可缺省;如=2,表示有2行;
- VisibleRenderables:设置了摄像机周围能看到的tiles的半径数目。
- MaxAdjacentPages:决定了在摄像机周围将要加载的pages的半径数目(并不一定可见,取决于visible renderables.) (缺省值: 2)
- MaxPreloadedPages:在摄像机周围需要预加载的pages的半径数目(必须比MaxAdjacentPages大)(缺省值:3)
- MaxNumRenderable:一次可渲染可加载的最大数目;
- MaxNumTiles:指定了一次能加载的Tiles的最大数目(也就是tiles缓冲区的大小)
数据源定义
- Data2DFormat : 'HeightField', 'HeightFieldRaw', 'HeightFieldN', 'HeightFieldTC', 'HeightFieldNTC','HeightFieldRawTC', 'HeightFieldRaw'.指明了高度图页数据文件的格式。HeightField对应8-16bits的灰度图像文件,HeightFieldRaw 对应16bits Raw格式, HeightFieldN对应8bits灰度图像文件+和32bits的法线图文件, 格式TC对应于使用MaxValue, MinValue对高度缩放过的数据源(缺省值:HeightField);
- MaxValue, MinValue : 如果Data2DFormat = 'HeightFieldTC',这种设置在渲染前会参照MaxValue, MinValue指定的范围对每个顶点的Y值进行缩放,该处MaxValue, MinValue高度范围。(默认值: 5000,0);
- Deformable : 地形是否支持实时变形 (缺省值: no);
- TextureStretchFactor : 纹理延伸因子,作用于pagesize和texturesize。例如:将一个1024的纹理铺在一个513的page上,TextureStretchFactor就应该设置成2(缺省值 : 1.0f)。
材质定义
- TextureFormat : 定义了地形将怎样被着色。如果你想使用你自己的纹理, Image it?
纹理模式
纹理模式决定了你的地形的着色方式. 你可以为每个Page使用大的image(Color Texture Modes), 或者使用splatting得到好一些的近地细节,但是会消耗更多的GPU和内存资源
PLSM2提供的纹理模式
Color纹理模式:
固定管线:
- Image : 使用用户指定的Map.(例如:用terragen生成的)
- BaseTexture : 基于高度和斜坡计算生成的ColorMap
- BaseTexture2 : 与BaseTexture相似,但是采用预先生成方式
- InstantBase : 与BaseTexture相似,但是采用预先生成方式,并且动态地将deformation 反映到地形。
Shader可编程管线:
- InstantBaseShadowed : 与BaseTexture相似,但是采用预先生成方式,但是根据太阳的位置动态改变阴影。
Splatting模式:
固定管线:
- Splatting : 计算4层 alpha图(每一张图对应一个splats, 基于高度和倾斜度) => 4 通道 2 纹理单元
- Splatting2 : 与"splatting" 相似(使用预先生成的4层alpha图) => 4 通道 2 纹理单元
- Splatting4 : 与splatting2相似,但是每个通道7个纹理单元(使用预先生成的4alpha图) => 1 通道 7纹理单元
shader 可编程管线:
- Splatting5 : 与splatting4相似,但是 1通道 4 纹理单元,,使用 像素Shader (arbfp1 或 ps_2_0) ,1 通道 4 纹理单元 实时(不使用alpha图,所以使用了更少的纹理单元)
- SplattingShader : 与splatting4相似,但是1通道 4 纹理单元,使用 像素Shader (arbfp1 或 ps_2_0),1 通道7纹理单元(使用alpha图)
Splatting光照模式:
- splatting3 : 1通道,3 纹理单元 + 1 光照=4(使用预先生成的3 alpha图)
- Splatting6 : 与splatting2相似,但是每个通道3个纹理单元,4 通道 (使用预生成的4 alpha图)
- Splatting7 : 多层纹理splatting,每1通道使用6纹理单元(使用预先生成的3 alpha图)
- NumTextureFormatSupported : 设置支持的纹理格式的数目(依赖于你在分割地图时使用的格式)[译者:在地图分割器形成的文件夹里,有对应的alpha, base, coverage 或者 light 纹理层];
- TextureFormatSupported : 列出这幅地图所支持的所有纹理格式 ;(例:TextureFormatSupported0=Base TextureFormatSupported1=InstantBase 等等);
- MaterialHeight1, MaterialHeight2 : 以最大高度的百分比形式给出的高度分割线。在MaterialHeight1以下的部分地形Splat0, 高于MaterialHeight1但低于MaterialHeight2的地形Splat1,高于MaterialHeight1但低于MaterialHeight2的地形Splat2, 高于MaterialHeight2的地形Splat3。(在实时splatting模式下使用,或者当地形发生deformation而需要纹理更新时)
- SplatFilename0, SplatFilename1, SplatFilename2, SplatFilename3 : map defining textures used as input for averaging colors in BaseTexture map generation.
Textureformat=splatting4)
更多配置选项
- MaxRenderLevel :简化的LOD层次设置。必须满足2^MaxRendervel < (TileSize/2)。0 意味着不使用LODValue,100意味着使用最大的可能值。(缺省值:100);
- MaxPixelError : The maximum error allowed when determining which LOD to use. That would determine complexity on screen. More Precise means slower. (Default Value : 8);
- PageSize : 确定你的地形将会被GPU怎么划分批次,因为它会决定每个Page的纹理的尺寸。该值大一点较好,但是并不是所有的显卡都能支持很大的纹理。(注意:plsm2 demos 使用了257大小的小的尺寸,主要是为了测试Page管理功能), 但这可能会让你误以为PLSM2的速度比TSM还慢。在相同的pagesize和相同数目的Page的情况下,你可能会得到相同(或者更快)的结果。你可以尝试一下1025,2049(缺省值:513);
- TileSize : 这个值比较难调整,它将会决定顶点缓冲区有多大。太大的Tilesize (> 193)会使plsm2使用32 bits的索引缓冲区(更慢或者得不到所有显卡的支持);太小的Tilesize (<65)将会使plsm2在每一帧内处理数以千计的tiles,并且会升高GPU的批次,但是可以得到更多的裁减优化(视锥裁减,水平线裁减,八叉树裁减...)。 (缺省值: 65)
- VertexCompression : 如果你的显卡支持,请enable它 它 (如果你的显卡不支持,该设置将会被忽略)。 在GPU的因子3的前提下,它将会影响GPU内存的用法(缺省值: no);
- VertexProgramMorph : 如果你注意到当tile改变LOD的时候的跳跃感,该参数可能会帮你减少那种感觉。但是这会带来较大的性能损失,所以在性能不太好的情况下,还不如关闭该功能。(对于ATI上用opengl时,还会牵出驱动程序的一个Bug);
- HorizonVisibilityComputing : 水平裁减计算。如果你的地图上有高山、峭壁,请开启它,但如果仅仅是一个平面,则应该关闭它。在地形Tiles下面的所有东西 (for now just other terrain tiles, soon also any objects) 都不会送到GPU,这能大大地提高帧速,但这只是在特殊的情形下。(如果总是开启并不会太影响性能) (缺省值: no)
- LODMorphStart: This is as a proportion of the distance between the current LODs effective range, and the effective range of the next lower LOD (Default Value : 0.2f)
- HorizonVisibilityComputing: enable it if your map have moutains, cliff... not if it's mainly a plane. everything hidden will not be send to GPU, thus saving framerates.. (Default Value : no)
- VertexLit: 为高度图Mesh添加发现,对于stencil additive shadows阴影模式很有用。
// Linux plugin is created as Plugin_PagingLandScape2.so and set up to run
// via the plugins.cfg config file
//#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
//#ifdef _DEBUG
// Root::getSingleton().loadPlugin("Plugin_PagingLandScapeSceneManager2_d");
//#else
// Root::getSingleton().loadPlugin("Plugin_PagingLandScapeSceneManager2");
//#endif
//#endif
如果你在plugin.cfg里边加载了plsm2插件的话,就将这里注释掉!