PLSM 設定檔

來源:互聯網
上載者:User
文章目錄
  • 紋理
  • 資料來源定義
目錄
  • 1 介紹
  • 2 地圖選擇配置

    • 2.1 maptools.cfg
    • 2.2 paginglandscape2.cfg
  • 3 地圖定義細節
    • 3.1 公用配置選項(maptools.cfg和paginglandscape2.cfg)

      • 3.1.1 地圖定義
    • 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能夠將它渲染出來,你需要做以下幾件事:

  1. 首先,你需要定義一個地圖分割設定檔(就是上面說到的XXX.gen.cfg類似的檔案),該檔案描述了你將怎樣分割和配置它的紋理;
  2. 然後,你需要添加上一步形成的設定檔的檔案名稱到maptools.cfg內,maptools.cfg內有一個地圖列表,你既可以一次只分割一幅地圖,也可以批量分割多幅地圖。其中defaultmap後面的地圖會被首先分割,至於後面的地圖會不會分割,由後面的BatchMode決定,=yes時列表中的所有地圖都會被分割,而=no時只分割defaultmap後面的地圖;
  3. 運行地圖分割工具。[譯者:在此推薦Demo中贈送的那個,感覺還可以。] 注意:根據不同的配置選項,該過程可能會長一些;
  4. 一旦你在硬碟上產生了分割後的地圖,如果配以合適的運行時設定檔(就是上面說到的XXX.cfg類似的檔案),PLSM就可以渲染你的地圖了;
  5. 在運行時設定檔裡,你至少需要定義到哪裡找地圖檔案、怎樣載入它們、應用怎樣的預設紋理模式。其實有些選項應該和分割設定檔一致,否則運行時要出問題。
地圖選擇配置

    設定檔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>: 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: 資源群組描述,指明了到哪裡可以找到地圖設定檔;
  • <Short Map Name>=<Config File Name>: 配置的多幅地圖。例: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<n> : 列出這幅地圖所支援的所有紋理格式 ;(例: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外掛程式的話,就將這裡注釋掉!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.