2012-07-30 128 views
3

在OpenGL中紋理地形的最佳方式是什麼?我對地形有大約30種不同的紋理(每種地形1種紋理,30種地形類型),並希望在任何兩種地形之間有平滑的過渡。紋理Opengl地形?

我一直在網上做一些瀏覽,發現有很多不同的方法,包括3D紋理,Alpha通道,混合和使用着色器。但是,哪些是最有效的,並且可以處理我期望使用的紋理數量?例如:This popular answer描述瞭如何使用一些技術,但由於mixmap只有4個屬性(RGBA),所以只能支持4個紋理。

我還應該指出,我對着色器一無所知,所以非着色器所需的技術將是可取的。

+0

您是否使用任何LOD技術,例如[ROAM](http://www.cognigraph.com/ROAM_homepage/)或[幾何剪輯映射](https://research.microsoft.com/en-us/um /人/霍普/凸出/ geomclipmap /)?這可能會影響你的紋理選項。 – Wyzard 2012-07-31 00:18:10

+0

我目前沒有做任何LOD技術,但我會研究這些技術。 – LucasS 2012-07-31 01:18:07

+0

FWIW,[幾何剪貼圖更適合現代GPU](https://research.microsoft.com/en-us/um/people/hoppe/proj/gpugcm/)。 – Wyzard 2012-07-31 01:40:33

回答

3

既然你鏈接到了描述texture splatting的答案,而且它的問題提到了遊戲遺忘,我可以提供一些額外的洞察。

使用RGBA mixmap的基本紋理濺射僅支持每個地形四個四個紋理,但是您可以對不同的四邊形使用不同的紋理集。遺忘將地形劃分爲每邊32個網格點(192英尺)的正方形(稱爲「單元格」),每個單元格定義其自己的一組四個地形紋理。所以你不能在一個小區域內擁有很多紋理多樣性,但是你可以很容易地在較大的區域上改變你的紋理。如果你願意,你可以爲更小的區域定義紋理集,甚至可以定義單個四邊形,但需要花費更多的內存。

如果您確實需要四個以上的四個紋理,則可以使用多個混合貼圖。對於每個額外的紋理查找,您只需進行另一次紋理查找即可獲得四個混合因子,並在前一個混合貼圖的結果頂部再混合四個紋理。您可以根據需要放大任意數量的紋理,同樣以犧牲內存爲代價。

由於當單個低細節地形四邊形代表一組高細節四邊形時,您必須針對不同區域的樣本使用幾個不同的混合地圖進行採樣,因此在高度圖上使用LOD技術可能會很棘手,大四方。遺忘僅通過對全細節地形使用紋理濺射來回避該問題;以較低分辨率渲染的遙遠單元使用由編輯器生成的預先計算的紋理,其預先進行了噴濺和縮小。

+0

感謝您的解釋:) – LucasS 2012-08-04 04:51:05

3

紋理潑濺的一種替代方法是使用clipmap來呈現「megatexture」。通過這種方法,您可以獲得一張表示整個地形的大型紋理,並且可以避免通過加載其中的不同部分來填充內存,只需根據實際需要根據觀察者的當前位置渲染它即可。 (地形的遙遠部分不能全部看到,因此不需要全部加載)

這種方法的優點是它的藝術自由度:您可以在任何想要的地方放置精緻細節紋理,而不考慮頂點網格。缺點是實現起來相當複雜,並且整個剪貼圖必須存儲在的某處,可能位於磁盤上的一個大文件中,以便您可以根據需要將它的一部分加載到RAM中。