在编写游戏引擎的渲染端时,我现在似乎陷入了困境。我最初的计划是至少使用 HLSL 实现每个像素的动态光照,并让光照缓冲区与着色器通信,最多可以使用 8 个光照。
需要注意的是,到目前为止,我的整个地图都是由块组成的 3 维数组(64x64x64)。在一个非常基本的人脸减少算法之后,我正在查看 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 结合起来是否相当简单?