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

远程3D对象渲染[游戏],3d,level-of-detail,3d,Level Of Detail,技术背后的基本前提是什么,比如《遗忘》(以及其他游戏,我确信;还没有玩到足够的程度去了解),当你从远处观看时,远处的物体模糊地显示出来?例如,一英里外有一座高塔,你可以看到它模糊的长方形从地平线上竖立起来。。。显然,一个巨大的3D场景不可能全部渲染,我知道在高度贴图的情况下,只有近似算法用于降低远离摄影机的高度贴图质量,但是对于特定对象,显示这些图像的最佳方式是什么 我在想也许是一种预渲染技术,你可以选择风景周围的特定位置,然后制作一个程序,在该点周围绘制所有的高度图和3D模型,然后拍照。它将拍

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

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

另一个更明显的技术是存储真正粗糙的3D模型,但3D渲染系统如何特别选择渲染建筑物的粗糙模型,而不是其他不太重要(可能从该距离看不到)对象的粗糙模型?你会如何将这样的东西与你的高度图一起存储?也许根据设计,只有几个这样重要的地标,然后将它们的列表存储在一个小文件中,然后在每一帧上渲染距离小于x的地标,真的很远吗

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

另一个相关的主题是如何显示远处的山脉,因为它们是高度图的一部分,而不是其上的三维模型,因此它们不能真正获得粗略的版本,而高度图近似算法可能会从很远的地方像那样把山脉弄得一团糟(假设您甚至会尝试近似并渲染如此遥远的几何体,而您可能不会)。如果您在回答中也包含了这一点,则会获得额外的分数。:)

谢谢

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

编辑:谢谢你的回答!出于文档目的,这里是我找到的另一个资源: 游戏编程中的第4.9章Gems 2介绍了向skybox渲染远处风景的概念: (不幸的是,预览版只是这一章的第一页……我必须在八月份一回来就从我的大学图书馆抓到那本书)

同样在阅读了这些内容之后,我仍然认为LOD适用于距离仍然相当近的对象。如果对象甚至不到一个像素大,但您仍将其输入图形卡,那么无论是否使用LOD,您都是在浪费电源。除了绝对最大的遥远物体外,所有物体都是如此;在大多数情况下,一些高层建筑和一些山脉,但小细节模型(灌木丛,甚至树木,岩石,任何其他风景…)从如此远的距离都看不到。所以我非常喜欢渲染到skybox的技术,当我到达这座桥时,这就是我要穿过它的方式;我将确保对所有模型使用LOD,我只是不会渲染这样的距离


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

一种技巧是LOD(细节级别)。对象离摄影机越远,绘制的三角形就越少。这里有一个链接:

我想这就是你想要的三维模型,这种技术叫做。从本质上讲,多个版本的模型可以根据上下文保持在一个正确的使用状态。它并不总是仅用于距离,还可以用于在其他情况下维护帧率

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


地形和对象模型都有动态LOD系统,但这些系统可能需要大量CPU

可以渲染到远处对象的纹理,但是每次透视变化超过某个阈值时,都必须重新渲染纹理。它非常适用于远景不会改变的遥远物体,就像你的远处山脉的例子一样,但是如果视图源移动得太快或者你离得太近,那么你会得到鱼眼效果,就像地震中天空渲染的早期一样。这种系统把它自己借给了像夏娃在线这样的世界,那里有着广阔的距离


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

模型的低细节版本尤其适用于车辆和物体,地形非常复杂。我做过战场类型的游戏和PC飞行模拟器。一点雾有助于掩盖细节之间的“砰砰”声

在较低的细节处,纹理贴图通常替换为几个单色多边形


“另一个更明显的技术是存储真正粗糙的3D模型,但3D渲染系统如何特别选择渲染建筑物的粗糙模型,而不是其他不太重要(从该距离可能看不到)对象的粗糙模型?如何将类似的内容与高度贴图一起存储?”

您可以对地形进行栅格化,并保留一个对象为v的列表