3D地形编程——之GeoMipMap基础(1)

来源:互联网 发布:网络ip计算 编辑:程序博客网 时间:2024/04/24 00:19

HoneyCat游戏编程学习笔记---3D地形编程

原著《Focus on 3D Terrain Programming

翻译:邱涛 风轻炫舞 HoneyCat

Emailqiutaoleo@163.com

Bloghttp://blog.csdn.net/honeycat/

QQ241855668

说明:英语水平有限,在自己学习时候同时记录下来的,希望能与大家技术交流互相学习,翻译有误的地方欢迎指出。Good luck to you.

 

 

5

Geomipmapping For The CLOD Impaired

 

嚯!你现在开始学习所有地形编程的核心部分,他们又难以置信的复杂算法组成。实际上,这是一个谎话。在这一章我将讲述3个算法,选择他们是因为他们简单而且高效。并且,再一次在这本书,我将让你省略漫长的介绍而简要的告诉你这章的事项:

 

n         连续层次细节(CLOD)含义的解释

n         GeomipmappingGeometrica Mipmap)的理论知识

n         实现GeoMipMapping的方法

 

为了简单,我打破了这3个事项。不管这些分类,这章就太庞大了。不过,别让这章的大小吓到你;这些具体内容将一如既往的用一种有趣且简单的方法描述。然而,注意我将改变一些学习的风格。第567章比前面的章节更多关注算法的讲解和伪代码。在随后几章,我仍然为你提供我自己的示例和实现,但这些实现是简单的,而且你应该只有在它们同文字关联起来时使用。照之前说的,我们开始吧。

 

CLOD Terrain 101

你已经在这本书里听过Continuous Level of Detail(CLOD)几次了,但现在是我告诉你它到底是什么的时候了。连续层次细节(CLOD)算法用一句话来说,是一个动态多边形网格“给”需要更多细节的区域额外的三角形。那是个简单的描述,但是你将在这节结束前明白更多关于连续层次细节(CLOD)的东西,你将更多知道这章结束了。如果你现在还没理解连续层次细节(CLOD)是什么,别烦恼。

 

CLOD 地形为什么麻烦

连续层次细节(CLOD)算法需要更多探究,比代码更难,平均比蛮力(brute force)方法占用更多CPU周期。同那些一起在你的心里,为什么你希望麻烦的连续层次细节(CLOD)算法?答案真的简单:为了创建更真实的、更细致的、最重要的、更快速的地形片。

 

更多细节添加到需要更多细节的地方

连续层次细节(CLOD)的一个基本想法是我们添加更多的细节(更多三角形)到需要它们的地方。举例来说,如果我们有一个相当平滑的地形片(见图5.1),比起我们想要一个复杂的多的地形片(见图5.2),我们想要平均较少的三角形。

 

 

5.1 需要较少的三角形渲染这个平滑地形。

 

 

5.2 需要许多三角形渲染这个复杂地形

 

然而,不是所有算法都担心需要细化的区域中三角形的分布。Geomipmapping不对需要细化的区域放置更多三角形,但是Rottger的四叉树(Quadtree)算法(在第6章,“攀登四叉树”)是这样做的。因此,做为一个整体来看对连续层次细节(CLOD)而言,对需要细化的区域增加更多细节,并不总是真的,但是绝大多数情况是。我已经完全把你搞混乱了吗?

 

剔出你以前从未剔除的!

另外可以确定的是连续层次细节基础(CLOD-based)算法它们允许比蛮力(brute force)算法拣选更多的多边形剔除。这意味着那些多边形不可见、不会发送给API。举例来说,我们从一系列地形片开始工作以实现Geomipmapping。如果一个图块是不可见的,我们清除潜在的289个渲染顶点(17×17的顶点块)象掉下一般。这极大减轻显卡加载的负担,并且剔除也没让CPU繁忙(剔除载CPU中进行)。用简单的方法,象一个整体样的我们让GPUCPU两者都满意,也让主板高兴。

 

不是在CLOD地形大陆的每件事都高兴

尽管,使用连续层次细节(CLOD)算法有一些缺点。很神奇的,全世界的都帮助我写下这一节,在今天早些时候我的邮箱收到了8月发行的Game Developer Magazine。在大多数连续层次细节(CLOD)算法中主要的缺点是在每帧多边形网格更新时复杂的“薄记”。

这个“薄记”的缺点在大多数这些算法(GeomipmappingRottger的四叉树算法、ROAM)被设计时几乎不流行。那是因为在这些算法希望大部分工作量放在CPU,并且只有少量需要的信息传给GPU。从那时起,尽管事情完全改变了一小部分。现在我们希望比放在CPU更多的焦点放在GPU上。

 

包装你对CLOD地形的入门

很显然,如果GeomipmappingQuadtreeROAM算法都过时了,现在你就不会读到他们了,意思就是某人,某时对每个算法优化后仍旧让它们成为当今重要的地形渲染。在这个观点下,我们将走出连续层次细节(CLOD)的入门期,并且开始进入Geomipmapping实现的入门。

 

半弱的CLODGeomipmapping理论

GeomipmappingWillem H. de Boer开发,是一个友好的GPU连续层次细节(CLOD)算法。它也是完美转变到CLOD大陆的简单算法。我们继续前进,你也许会想查阅实际Geomipmapping的白皮书,为了你方便浏览放在CD-ROM里。(Algorithm Whitepapers/geomipmapping.pdf)

 

简单的基础

如果你对Mipmap纹理映射的概念很熟悉,那么Geomipmapping似乎对你来说也应该很浅显。它们的概念是一样的,除此之外我们不是对纹理而言,而是对地图片的顶点而言。继续Geomipmapping的概念,需要规则的地形片。意思就是,一个片的大小是5个顶点(5×5的格子)。5×5的块将有许多级别(level)的细节,级别0是最细致的,在这里面级别2是最粗糙的。如果你需要每个块不同级别的直观展示请看图5.3。在图中黑色顶点不会被送到渲染API,但是白色顶点会。

 

如果你想查阅Willem de BoerGeomipmapping白皮书,你也许会注意到三角形排列方式在图5.3与白皮书中的方式有些稍微不同。这么做的原因在晚一点说,但是现在就只需要知道我这么做是有原因的。

 

现在是时候我们讨论Geomipmapping更多一点的内容。之前你已经知道了基础,但是现在是时候让你了解所有……

 

 

5.3 地图块的三角形排列方式,最高细节排列在左边,最底细节排列在右边。

 

好的,几乎所有事。我也许会保留些信息。

 

如同我之前所说的,GeomipmappingMapMip纹理映射相似,除了用陆地块代替纹理块以外。我们需要做什么呢,从我们在3D空间中的点(摄像机观察点的位置)开始,这让在观看者周围的所有块都是最高细节,因为这些块占据了用户视野的大部分。在一个特定的距离之外,我们将选择低一些级别细节的块。同时,在又一个距离外,我们选择更低级别的细节。图5.4形象的展示了这些内容。

 

如同你在图中所看的,这些块在观看者所在的当前区域是0细节级别(Level of Detail简称LOD),这个意思就是这些块是最高细节级别。随着块变的更远,他们变成级别1,这是第2高细节级别。在距离观看者更远的距离,图块是级别2,这是图像呈现的最低细节级别。

 

让三角形排列简单

早些时候,你也许注意到我在图5.3中使用的三角形排列方式与我让你查阅的Geomipmapping文章(在CD中或者互联网上,网址在这章的末尾)中有些不同。实际上你不必现在就打开那篇文章,图5.5中展示了文章建议的三角形排列看起来象什么样。