9

技术背后的基本前提是什么,例如在 Oblivion 中发现的(以及其他游戏,我敢肯定;还没有玩到足够知道),当您从远处观看时,远处的物体会模糊地显示出来?例如,一座大塔在一英里外,你会看到它的模糊矩形从地平线上伸出来……显然,一个巨大的 3D 场景无法全部渲染,我知道在高度图的情况下,只有近似算法用于降低远离相机的高度图质量,但对于特定对象,显示它们的最佳方式是什么?

我在想可能是一种预渲染技术,您可以选择景观周围的特定位置,然后制作一个程序,在该位置周围绘制所有高度图和 3D 模型并拍照。它将拍摄几张照片,然后当玩家靠近该地点时,这些照片将用作天空盒。

另一种更明显的技术是存储非常粗糙的 3D 模型,但是 3D 渲染系统如何专门选择渲染建筑物的粗糙模型而不是其他不太重要的粗糙模型(并且可能无法从中查看-距离)物体?你将如何将这样的东西与你的高度图一起存储?也许按照设计,只有几个如此重要的地标,然后将它们的列表存储在一个小文件中,并在每一帧上渲染小于 x 的那些真正远距离的地标?

我知道 Halo 系列选择将游戏分成关卡,然后每个关卡都有不同的手工制作的天空盒。这就是我在第一个建议中想要的,但我不确定。我想我真的只是想在我的想法中收集其他想法或改进或问题,以便我可以用我有限的时间和知识选择哪些原型。

另一个相关主题是如何在远处显示山脉,因为它们将是高度图的一部分,而不是顶部的 3D 模型,因此它们实际上无法提供粗略的版本,并且高度图近似算法可能会出错从那样很远的距离上山(假设您甚至会尝试近似和渲染如此遥远的几何图形,而您可能不会这样做)。如果您在答案中也涵盖了这一点,则可以加分。:)

谢谢!

PS我正在使用OpenGL。我只是在寻找基本概念,但如果您选择发布示例代码,请使用 OpenGL 函数和术语!:)

编辑:感谢您的回答!出于文档目的,我发现了另一个资源:Game Programming Gems 2 中的第 4.9 章涵盖了将远处风景渲染到天空盒的概念:http: //books.google.com/books ?id=1-NfBElV97IC&lpg=PA416&ots=SOpnfijZly&dq= render%20distant%20to%20skybox&pg=PA416 (不幸的是,预览只是本章的第一页......我必须在八月份回来后尽快从我大学的图书馆里拿那本书)

同样在阅读了这些内容之后,我仍然认为 LOD 适用于距离仍然相当近的物体。如果对象甚至没有一个像素大,但您仍在将它们提供给显卡,那么无论是否使用 LOD,您都只是在浪费能量。除了绝对最大的遥远物体之外,其他一切都是如此。在大多数情况下,一些高楼和一些山脉,但从这么远的距离看不到小细节模型(灌木,甚至树木,岩石,任何其他风景......)。所以我很喜欢渲染到天空盒的技术,当我到达这座桥时,我就是这样过桥的;我会确保对所有模型都使用 LOD,我只是不会渲染这样的距离。

顺便说一句,我更多地是按照 Oblivion 游戏的思路思考,所以答案可能取决于游戏类型。

4

8 回答 8

7

我认为这就是您正在寻找的细节级别 (LOD)

于 2009-06-18T16:25:52.230 回答
7

一些技术,包括你提到的那些:

  • 详细程度。上面概述。
  • 贴图。对于纹理。
  • 视野。通过选择适当的缩放级别来限制您的相机可以“看到”多少东西。另请参见视锥体剔除。
  • 远裁剪平面。遥远地方的遮挡:大多数游戏都使用雾、山脉或其他一些借口来严格限制你能看到多远。这可以使用八叉树或其他一些此类技术来实现。这可能基于整个对象、多边形或其他任何东西,并且通常设置在上述山脉的后面。
  • Arenas/levels/areas/whatever - 大多数游戏再次人为地限制你一次只能在一个竞技场上玩;好处是显而易见的(你可以忽略所有其他领域的对象)
  • 预渲染——这就是你上面的建议。对于远处的静态场景,在“典型”视图中渲染场景并使其成为背景上的纹理,或者将其用于天空盒/反射贴图/等。

这个想法是在用户开始注意到之前丢弃尽可能多的细节。

有许多预先存在的工具包可以自动完成这些事情,但它们往往要花钱。如果您正在寻找一个严肃的应用程序,我建议至少研究它们包含的解决方案。

于 2009-06-18T17:43:34.070 回答
4

对于 3d 模型,该技术称为细节层次。从本质上讲,多个版本的模型可以根据上下文保持正确的使用。它不仅仅用于距离,它还可以用于在其他情况下保持帧率。

不过要小心,您应该启用 mipmapping,否则您会在较低分辨率模型上的较大纹理上闪闪发光,并且要小心动画。在动画骨架下切换模型很棘手,因此一种技术是即使在对模型进行 LOD 处理时也保持相同的骨架。

地形和对象模型都有动态 LOD 系统,但这些系统可能会占用大量 CPU。

于 2009-06-18T16:28:04.677 回答
0

一种技术是 LOD(细节层次)。物体离相机越远,绘制的三角形就越少。这是一个链接: http: //www.stefan-krause.com/

于 2009-06-18T16:25:16.097 回答
0

您可以为远处的物体渲染纹理,但是每次透视变化超过某个阈值时,您都必须重新渲染纹理。它适用于远景不会改变的远距离物体,就像您在远处的山脉示例一样,但是如果视图源移动得太快或您离得太近,那么您将获得类似于鱼眼的效果地震中天空渲染的早期。这种系统将它自己借给了像eve online这样的包含遥远距离的世界。

当然,这只是你武器库中的另一个技巧,在某种程度上你仍然需要 LOD。

于 2009-06-18T16:45:47.040 回答
0

模型的低细节版本特别适用于车辆和物体 地形真的很棘手。我从事过战区类游戏和 PC 飞行模拟器的工作。一点雾有助于掩盖细节之间的“流行”。

在较低的细节处,纹理映射通常被一些单色多边形所取代。


“另一种更明显的技术是存储非常粗糙的 3D 模型,但是 3D 渲染系统如何专门选择渲染建筑物的粗糙模型而不是其他不太重要(并且可能无法从中查看)的粗糙模型-距离)对象?你会如何将这样的东西与你的高度图一起存储?

您可以对地形进行网格化并保留每个网格单元中可见对象的列表。

于 2009-06-18T16:54:41.513 回答
0

处理地形的一种方法是使用多分辨率图块。就像 Virtual Earth 和 Google Maps 的做法一样,它们以递归方式将世界划分为瓦片。因此,0 级有 4 个图块,1 级有 16 个图块,等等……然后,使用一些 LoD 算法来确定缩放/比例,您将为给定区域加载适当的地形图块。

于 2009-06-18T17:54:13.117 回答
0

动态缓存远处对象的预渲染视图的技术通常称为“冒名顶替者”。这是一本关于该主题的旧 Game Programming Gems 书中的文章。

有许多技术可以处理高度图地形的细节层次。查看 vterrain.org 以了解一些常用技术的概述。在大多数变体中,一般原则是相同的——将地形分成多个部分,并在远处使用较低分辨率的几何体和纹理——但细节会有所不同。

为了减少提交给显卡的对象数量,通常会实施某种可见性剔除。在最简单的情况下,这可能只是完全丢弃边界球覆盖的屏幕像素小于某个阈值的模型(如果您有 LOD 系统,则在选择要使用的 LOD 时无论如何都会计算这一点)。为了提高效率,可以使用某种分层空间数据结构进行剔除 - 四叉树或八叉树、球体树、门户系统(通常不常用于室外环境)、简单的基于网格的方案等。基本思想是节省工作量通过剔除层次结构中的更高级别节点,从而避免查看许多叶节点。

对于像遗忘这样的游戏,他们可能还在进行某种遮挡剔除——根据确定对象隐藏在其他对象后面,在将对象提交给图形硬件之前对其进行剔除。有多种技术可以做到这一点,其中一些可能非常复杂。

于 2009-07-16T21:41:55.837 回答