在立方体贴图中跨摄像机渲染点精灵

Posted

技术标签:

【中文标题】在立方体贴图中跨摄像机渲染点精灵【英文标题】:Rendering Point Sprites across cameras in cube maps 【发布时间】:2015-10-17 00:51:00 【问题描述】:

我正在渲染一个顶点粒子系统,然后在几何着色器中将其细分为四边形,并纹理化/渲染为点精灵。然后根据它们与相机的距离来缩放它们的大小。我正在尝试将场景的每一帧渲染成立方体贴图。所以基本上我在我的场景中放置了六个摄像机,并将它们指向立方体表面的每个方向并保存图像。

我的点精灵大小不一。当它们靠近一台摄像机的边界时(如果它们足够大),它们会同时出现在两台摄像机中。由于点精灵始终面向相机,这意味着当我将立方体贴图重新包装到 3d 空间时,它们沿接缝不连续。当这些点非常靠近相机时,这一点尤其明显,因为这些点更大,并且进一步延伸到两个相机视图中。我也在做一些 alpha 混合,所以这也可能导致问题。

我认为我不能只剔除靠近相机边缘的点,因为当我将所有内容放回 3d 中时,我会认为会有一些奇怪的区域,那里的云层更加稀疏。我的另一个想法是模糊每个相机的边缘,但我认为当我回到 3d 空间时,这也会给我一个奇怪的模糊区域。我觉得我可以在 Photoshop 中手动编辑帧,让它们看起来不错,但这会有点痛苦,因为它是 30fps 的动画。

所附图片是立方体贴图的细节。您可以看到精灵没有正确排列的水平接缝,以及图像右侧稍微不太明显的垂直接缝。我确信我的相机设置是正确的,因为我在其他场景中使用了相同的相机设置,而且我的立方体贴图看起来很好。

有人有想法吗?

我在 openFrameworks / openGL fwiw 中执行此操作。

【问题讨论】:

你能制作一张只在边缘放置一个(或几个)精灵的图像,以便我们可以准确地看到问题吗? 我花了一些时间尝试在不进行混合的情况下重现问题,但无法实现。在上图中,我使用的是 glBlendFunc(GL_SRC_ALPHA, GL_ONE);禁用深度测试。我认为问题实际上可能在于我混合粒子的方式。它们正在与它们后面或前面的任何东西混合,并且根据我的相机方向,我得到不同的粒子分布。不确定是否有更好的混合方法。目前,将我的相机设置在离剪辑更远一点的地方似乎足以掩盖边缘。 【参考方案1】:

而不是面对相机,让他们面对相机的原点?不确定这是否可以解决所有问题,但直觉上我会说它应该看起来接近 OK。也许这已经是你所做的了,我不知道。

(我希望这是评论,但没有声誉)

【讨论】:

以上是关于在立方体贴图中跨摄像机渲染点精灵的主要内容,如果未能解决你的问题,请参考以下文章

如何在 OpenGL 中使用立方体贴图数组来渲染带有阴影贴图的多个点光源?

关于游戏打包(Android)后,手机上的模型贴图显示模糊问题的解决方案

带有立方体贴图的 OpenGL 点光阴影映射

使用立方体贴图(OpenGL/GLSL)的点光源是不是可以实现软阴影?

unity自带的环境贴图在哪

使用渲染纹理的制作摄像头