首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >远程3D对象渲染[游戏]

远程3D对象渲染[游戏]
EN

Stack Overflow用户
提问于 2009-06-18 16:21:29
回答 8查看 4.4K关注 0票数 9

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

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

另一种更明显的技术是存储真正的粗略3D模型,但是3D渲染系统如何具体选择渲染建筑物的粗略模型,而不是其他不太重要(并且可能从该距离不可见)对象的粗略模型?您如何将这样的内容与您的高度图一起存储?也许按照设计,只有几个这样的重要地标,然后将它们的列表存储在一个小文件中,并在每一帧上渲染那些小于x的地标-真的很远吗?

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

另一个相关的主题是如何显示远距离的山,因为它们是高度图的一部分,而不是它上面的3D模型,所以它们不能真正有一个粗略的版本,并且高度图近似算法可能会在非常远的距离上搞乱山(假设你甚至会尝试近似和渲染这样远的几何体,你可能不会这样做)。如果你在你的答案中也涵盖了这一点,那么你就会得到加分。:)

谢谢!

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

编辑:感谢您的回答!为了文档的目的,这里是我找到的另一个资源:游戏编程宝石2中的第4.9章涵盖了将遥远的风景渲染到天空盒子的概念:http://books.google.com/books?id=1-NfBElV97IC&lpg=PA416&ots=SOpnfijZly&dq=render%20distant%20to%20skybox&pg=PA416 (不幸的是,预览只是这一章的第一页……我8月份一回到学校就得去图书馆借那本书。

同样,在读完这些东西后,我仍然认为LOD是针对距离仍然相当近的对象的。如果对象甚至不到一个像素大小,但您仍然将它们提供给显卡,那么无论是否使用LOD,您都只是在浪费电力。除了绝对最大的远处物体外,一切都是如此;在大多数情况下,一些高楼和一些山脉,但小细节模型(灌木,甚至树木,岩石,任何其他风景……)在这么远的地方是看不见的。所以我确实喜欢渲染到天框的技术,当我到达这座桥时,我将通过它;我将确保对所有模型使用LOD,我只是不会渲染这么远的距离。

顺便说一句,我更多的是沿着遗忘游戏的路线思考,所以答案可能取决于游戏类型。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-06-18 17:43:34

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

  • 详细级别。概述above.
  • Mipmapping.对于视图的textures.
  • Field。通过选择适当的变焦级别来限制相机可以“看到”的内容数量。另请参见查看frustrum culling.
  • Far-clipping平面。遮挡遥远的地方:大多数游戏使用雾、山或其他借口来硬截断你能看到的距离。这可以使用八叉树或其他类似的技术来实现。这可能基于整个对象,或者多边形,或者其他任何东西,并且通常发生在前面提到的mountains.
  • Arenas/levels/areas/whatever之后--同样,大多数游戏人为地限制您一次只能在一个竞技场进行游戏;好处是显而易见的(您可以忽略所有其他arenas)
  • Pre-rendering中的对象--这就是您上面所建议的。对于较远的静态场景,在“典型”视图中渲染场景并使其成为背景上的纹理,或将其用于天框/反射贴图/等。

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

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

票数 7
EN

Stack Overflow用户

发布于 2009-06-18 16:25:52

我想这就是你要找的Level of Detail (LOD)

票数 7
EN

Stack Overflow用户

发布于 2009-06-18 16:28:05

对于3d模型,该技术称为level of detail。本质上,多个版本的模型保持可用,并根据上下文使用正确的模型。它并不总是只用于距离,它还可以在其他情况下用于维护帧率。

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

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1013675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档