纹理化OpenGL地形?

3
什么是在OpenGL中纹理四边形地形的最佳方法?我有大约30种不同的纹理,想要使用它们来构建不同类型的地形(每种地形选用一种纹理,因此有30种不同的地形),并希望在任何两个地形之间实现平滑过渡。
我在网上搜索了很多,发现有许多不同的方法,包括3D纹理、Alpha通道、混合和使用着色器。然而,这些方法中哪个最有效,并且可以处理我希望使用的纹理数量?例如:这个热门答案描述了如何使用某些技术,但由于混合贴图只有四个属性(RGBA),因此只能支持四个纹理。
我还应该注意到,我对着色器一无所知,因此最好使用不需要着色器的技术。

你是否使用任何LOD技术,比如ROAMgeometry clipmapping?那可能会影响你的纹理选项。 - Wyzard
我目前没有使用任何LOD技术,但我会研究一下。 - LucasS
就我所知,几何裁剪映射更适合现代GPU - Wyzard
2个回答

3

由于您链接到了一个描述贴图混合的答案,并且它的问题提到了游戏《上古卷轴4:奥布里翁》(Oblivion),我可以为此提供一些额外的见解。

使用RGBA混合贴图的基本贴图混合只支持每个地形四个纹理,但您可以为不同的地形区块使用不同的纹理集。《上古卷轴4:奥布里翁》将其地形分为边长为32个网格点(192英尺)的正方形(称为“单元格”),每个单元格定义其自己的四个地形纹理集。因此,您不能在一个小区域内拥有大量的纹理多样性,但是您可以在更大的区域内轻松地变化纹理。如果您愿意,您可以为较小的区域甚至单个区块定义纹理集,代价是使用更多内存。

如果您真的需要一个区块中超过四个纹理,您可以使用多个混合贴图。对于每一个额外的贴图,您只需进行另一个纹理查找,以获得四个额外的混合因子,并在前一个混合贴图的结果之上混合另外四个纹理。您可以按照需要扩展到任意数量的纹理,但代价是使用更多内存。

贴图混合技术与LOD(细节层次)技术在高度图上的结合可能有些棘手,因为当一个低细节的地形区块代表一组高细节的区块时,您必须对大区块的不同区域采样几个不同的混合贴图。《上古卷轴4:奥布里翁》通过仅将贴图混合用于完整细节的地形来回避这个问题;渲染较远的单元格时以较低的分辨率使用编辑器生成的预先计算好的纹理,该编辑器事先进行了混合和缩放。


3
一种替代纹理喷涂的方法是使用剪贴地图来渲染“超大纹理”。采用这种方法,您将拥有一个代表整个地形的单个大型纹理,并且通过仅根据查看者当前位置需要呈现它的详细程度来加载不同部分,避免了填满RAM的问题。(远处的地形无法以完全详细程度查看,因此没有必要以完全详细程度加载它们。)
这种方法的优点在于其艺术自由度:您可以在纹理中任意放置细节,而不考虑顶点网格。缺点是实现相对复杂,并且整个剪贴地图必须存储在某个地方,可能是磁盘上的一个大文件,以便您可以根据需要将其部分加载到RAM中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接