什么是技术背后的基本前提,例如在Oblivion(以及其他游戏中,我确定;没有足够的知识)中发现的技术,当你从远处观看它们时,远处的物体会被模糊地显示出来?例如,一个大塔距离一英里远,您会看到它从地平线上隐藏起来的模糊矩形......显然,一个巨大的3D场景无法全部渲染,我知道在高度图的情况下,只有近似算法用于降低远离相机的高度图质量,但对于特定物体,显示这些物体的最佳方式是什么?
我想也许是一种预渲染技术,在这种技术中你可以选择景观周围的特定位置,然后制作一个程序,绘制围绕该点的所有高度图和3D模型并拍照.它需要几张照片,然后当播放器靠近那个地方时,这些照片将被用作天空盒.
另一个更明显的技术是存储非常粗糙的3D模型,但是3D渲染系统如何专门选择渲染建筑物的粗略模型而不是其他不太重要的粗略模型(并且可能不可见 - 来自 - 物品?你会如何与高度图一起存储类似的东西?也许通过设计,只有一些这样重要的地标,然后只将它们的列表存储在一个小文件中,并在每个帧上渲染那些小于x真正远距离的那些?
我知道Halo系列选择将游戏划分为级别,然后每个级别都有一个不同的手工天空盒.这是我在第一个建议中的目的,但我不确定.我想我真的只是想在我的想法中收集其他想法或改进或问题,这样我就可以选择用我有限的时间和知识来制作原型.
另一个相关主题是如何在远处显示山脉,因为它们将是高度图的一部分而不是顶部的3D模型,因此它们实际上不能具有粗略版本,并且高度图近似算法可能会螺旋从那么远的山上上山(假设你甚至会尝试近似并渲染如此遥远的几何形状,你可能不会这样).如果您在答案中也涵盖了这一点,那么奖励积分.:)
谢谢!
PS我正在使用OpenGL.我只是在寻找基本概念,但如果您选择发布示例代码,请使用OpenGL函数和术语!:)
编辑:谢谢你的答案!出于文档目的,这里是我发现的另一个资源:游戏编程中的第4.9章宝石2涵盖了将远景渲染到天空盒的概念:http://books.google.com/books? id = 1-NFBElV97IC&lpg = PA416 &ots = SUMIfijZly& dq =渲染%20distant%20to%20skybox&pg = PA416 (不幸的是,预览只是本章的第一页......我将在8月份回来后立即从我大学的图书馆获取该书)
在阅读完这些内容之后,我仍然认为LOD适用于距离相当近的物体.如果物体甚至不是一个像素大,但你仍然将它们送到显卡,你只是浪费电力,无论是否使用LOD.对于除了绝对最大的远距离物体之外的一切都是如此; 在大多数情况下,一些高大的建筑物和一些山脉,但是从这样的距离看不到小的细节模型(灌木丛,甚至树木,岩石,其他任何风景......).所以我喜欢渲染到天空盒技术,当我到达这座桥时,我就是这样穿过它的; 我会确保为所有型号使用LOD,我只是不会渲染这样的距离.
顺便说一下,我更像是一个Oblivion游戏,所以答案可能取决于游戏类型.
我认为这就是你寻找的细节水平(LOD)
一些技巧,包括你提到的技巧:
详细程度.概述如上.
纹理映射.对于纹理.
视野.通过选择合适的缩放级别来限制相机可以"看到"的内容.另见view frustrum culling.
远剪裁平面.封锁遥远的地方:大多数游戏都使用雾,山或其他借口来确定你可以看到多远的地方.这可以使用八叉树或一些其他这样的技术来实现.这可以基于整个对象,或多边形,或者其他任何东西,并且通常设置为在上述山脉后面发生.
竞技场/等级/区域/无论如何 - 大多数游戏都会人为地限制你一次在一个竞技场上玩; 好处是显而易见的(你可以忽略所有其他领域的对象)
预渲染 - 这是您在上面提出的建议.对于远处的静态场景,在"典型"视图中渲染场景并使其成为背景上的纹理,或将其用于天空盒/反射贴图等.
我们的想法是在用户开始注意之前尽可能多地丢弃细节.
有许多预先存在的工具包会自动执行这些操作,但它们往往会花钱.如果你正在寻找一个认真的应用程序,我建议至少研究它们包含的解决方案.