本文主要是介绍Focus On 3D Terrain Programming·Chapter 5(1),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
写在前面的话
原著:《Focus On 3D Terrain Programming》
章节:Chapter5 Geomipmapping for the CLOD Impaired
说明:图形渣、英语渣,学习的同时记录下来的(主要是不翻译就读不下去TT),希望能和大家相互交流学习,翻译有误的地方欢迎指出^^
正文开始↓
哦吼!你将要学习地形编程中的核心内容,里面包含了相当复杂的算法。实际上,这是个谎话啦。本章我将讲述3种简单且高效的算法。并且,再一次,我会让你省略漫长的介绍而简要地告诉你本章内容:
■连续层次细节(CLOD)的含义
■Geomipmapping(Geometrical Mipmap)背后的理论
■实现Geomipmapping的方法
简单起见,我将本章的内容分成了3个部分。尽管如此,内容仍相当地多。不过,千万别被本章的篇幅吓到,我会一如既往地用一种风趣而简洁的方式来呈现。不过,要注意我将稍稍改变一下学习风格。第5、6、7章比之前的章节更注重算法和伪代码。在后面的章节,我仍会为你提供自己的示例及实现,但是这些实现是简单的,你需要结合文章使用。照之前所说,让我们开始吧。
CLOD Terrain 101
你已经多次在本书中听到Continuous Level of Detail(CLOD)一词,现在是时候告诉你它到底是什么了。CLOD算法,用一句话来解释,即一个动态多边形网格“给”需要更多细节的区域额外的三角形。这只是一个简单的陈述,学习本章之后,你将了解更多关于CLOD的内容。如果你还不理解CLOD,也别烦恼哈。
为什么要费心使用CLOD地形呢?
CLOD算法需要更多的研究,更难编写程序且比暴力实现方法占用更多的CPU周期。既然如此,为什么还要费心使用CLOD算法呢?答案很简单:为了创建更真实,更细致,最重要的是,更快速的地形。
更多细节添加到更多需要细节的地方
CLOD的一个基本思想就是添加更多的细节(更多三角形)到需要的地方。例如,我们想要一个相对平滑的地形曲面(见图5.1),比起一个相对复杂的地形曲面(见图5.2),需要平均较少的三角形。
图5.1 需要较少的三角形渲染平滑地形
图5.2 需要较多的三角形渲染复杂地形
然而,不是所有算法都担心需要细化的区域中三角形的分布。Geomipmapping不会对需要细化的区域放置更多三角形,但是Rottger的四叉树算法(第6章,“Climbing the Quadtree”)是这样做的。因此,对CLOD而言,从整体来看,在需要细化的地方添加更多细节,并不总是这样的,但大多数情况下是的。我已经完全把你搞混乱了吗?
剔除之前从未剔除的
基于CLOD算法的另一个优点是比起暴力方法允许选择性地对多边形进行剔除(cull)。这意味着那些看不见的多边形不用发送给API。例如,我们从一系列地形瓦片开始实现geomipmapping。如果某些瓦片不可见,我们一下子消除潜在的289个渲染顶点(17×17的顶点块)。这极大地减轻了显卡加载的负担,并且剔除操作也没有让CPU繁忙。这个简单的方法使得GPU、CPU甚至整个主板工作起来更加轻松。
CLOD地形并不是完美的
尽管使用CLOD地形算法确实存在一些缺点。说来奇怪的是,全世界都在帮我写下这一节,今天我的邮箱收到了8月发行的Game Developer Magazine。大多数CLOD算法的主要缺点是在每帧多边形网格更新时复杂的“薄记(book-keeping)”。
这种“簿记”的缺点几乎不那么普遍当这些算法(geomipmapping,Rottger的四叉树算法以及ROAM)中的大部分被设计时。这是因为这些算法想将大部分工作放在CPU运行,并且只将少量需要的信息传给GPU。不过,从那时起,处理方式已将在发生改变。现在比起CPU,我们更关注GPU。
CLOD地形介绍总结
很显然,如果geomipmapping、四叉树以及ROAM等算法过时了的话,那么现在你就没有机会读它们了,意思就是还有人对每个算法进行优化,让它们成为当今重要的地形渲染算法。考虑到这一点,我将不再唠叨CLOD并开始讲述geomipmapping的实现。
这篇关于Focus On 3D Terrain Programming·Chapter 5(1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!