2

我正在启动一个允许角色隐藏在黑暗区域的游戏项目。躲在黑暗的角落应该会让其他角色更难看到你。

我需要的是一种计算角色所在位置的光照条件的方法。

理想的情况是拥有一个

double getLightFactor(GameCharacter observer, GameCharacter target)

因为我认为可能存在光线下降的照明条件,因此目标的不同侧面被不同数量的光线击中。但我很乐意接受

double getLightFactor(GameCharacter target)

无论您从哪里观看,甚至是从哪里观看,都可以为特定角色获得光线

double getLightFactor(int x, int z)

只是在地形中的特定地图点获得光线。

该方法需要考虑到光照条件在游戏过程中可能会发生变化,但由于它是基于回合的,因此可能允许进行一些繁重的计算。我打算让使用手电筒成为可能,因此也需要考虑它们(但它们可以单独建模和处理)。

我将使用 Ogre3d 来处理我的场景,但我很乐意接受通用解决方案甚至其他引擎的解决方案(我对引擎的选择并不是一成不变的)。

非常欢迎想法、论文或任何相关的东西!

4

3 回答 3

3

考虑到当前的灯光设置,您可以从观察者的角度将场景渲染到屏幕外缓冲区(即使分辨率相当低)。然后你可以计算目标字符中间的平均亮度值。

我不了解 Ogre3d 引擎,但这应该是处理您的问题的一种相当通用的方法(毕竟它只是从不同的角度渲染场景......)

于 2009-05-29T07:18:25.053 回答
0

好家伙。这在很大程度上取决于引擎。我现在可以告诉你,你想要第二种选择。

照明如何工作?它是动态的还是静态的?让我们假设它是两者的结合。

对于静态照明,请检查附近的光照贴图。它要么是基于顶点的,要么是纹理的,无论哪种方式,您都可以在附近的几个点对其进行采样并对它们进行平均。看看引擎如何计算模型的光照,深入研究图形代码并查看数据的实际来源,您可以使用相同的来源。一些游戏具有体积光照信息,Quake 2 在 BSP 树中以每叶为基础执行此操作(易于检查),而 Quake 3 具有体积纹理(也易于检查)。

然后你需要添加动态灯光。您可以做到这一点的一种方法是向光源发射来自玩家的光线(可以肯定的是,来自玩家不同部位的几条不同的光线)。数一数被击中的数量,并根据光线的距离为每个数量添加一点点。所有体面的游戏引擎都有一个“发射射线并查看它击中什么”的程序,这就是 AI 如何进行视线以及如何确定子弹击中了什么以及撞到墙壁时会发生什么。不要将太多光线射得太远,因为它可能会很慢。

您不必过于频繁地重新计算此值,您可以在创建新光源时执行此操作,然后每隔一秒左右执行一次。

于 2009-05-29T07:48:28.520 回答
0

根据环境的复杂性,您可以作弊并使用覆盖在地形上的 2D 光照贴图。每个单元格将具有基于附近光源的光强度值。即使是移动的物体也可以快速计算,并且可以快速访问以确定位置的“暗度”。

您可能必须使用简单的框或圆形算法在其上“标记”形状,具体取决于您拥有的灯光类型。

于 2009-06-26T21:58:41.147 回答