【发布时间】:2013-02-27 04:59:20
【问题描述】:
在编写游戏引擎的渲染部分时,我现在似乎陷入了困境。我最初的计划是至少使用 HLSL 实现每个像素的动态光照,并让光照缓冲区与最多 8 个光照的着色器进行通信。
值得注意的是,到目前为止,我的整个地图都是由块 (64x64x64) 组成的 3 维数组。在一个非常基本的人脸减少算法之后,我正在查看 32x32x32x6 人脸,以便在最坏的情况下进行渲染。我将使用其他方法来减少负载,但首先我想解决这个问题。
目前,在着色器中有 8 个灯,我使用 GTX 470 获得了大约 60-120 的帧速率,这是一张不错的卡。显然还有许多其他优化我必须研究,但由于动态光照对我来说并不重要(至少不是 8 盏灯),我一直在研究光照贴图。
如果我要每个面有 4x4 流明,我正在为我的整个关卡的光照贴图寻找纹理图集,该贴图大小为 32x32x32x6x16,每像素 4 字节。这就是我要使用的纹理,即 2048x2048(最接近的 2 次幂分辨率)。
我已经查看了几个来源,尤其是这个,http://www.flipcode.com/archives/Light_Mapping_Theory_and_Implementation.shtml,虽然我掌握了如何使用基本场景来实现它,但我不知道如何在我当前的几何情况下实现它.
所以这是我的问题。有一个更好的方法吗?这种大小的光照贴图可以使用吗?我对每张脸使用 4x4 lumels 感觉很舒服,因为双线性过滤最终似乎真的使事情变得平滑了。另外,将静态光照贴图系统与每像素动态的光照贴图系统与 HLSL 结合起来是否相当简单?
【问题讨论】:
-
每张脸都有不同的纹理吗?您是否为每个立方体单独调用drawprimitive?此外,如果您将“体素”密度提高 4 倍,它对帧速率的影响有多大?我怀疑您受照明的限制较少,而受非最佳渲染选择的限制更多...
-
不,我已经做了很多工作来最小化批次计数。我使用大约 32 个绘制调用渲染每个立方体,并且没有着色器,我每秒获得大约 900 帧。
-
另外,我的工作不需要超高体素密度。 64-128 的场跨度就足够了,而且我得到了非常好的帧速率。
-
32 次抽奖!?每帧有多少次绘制调用?
-
我每帧总共使用了大约 40 个绘制调用,这确实很少。
标签: c++ direct3d directx-9 direct3d9