我正在为我的 3D 游戏实现一个简单的闪电效果,如下所示:
http://www.krazydad.com/bestiary/bestiary_lightning.html
我正在使用opengl ES 2.0。不过,我正在思考在 3D 环境中渲染它的最佳外观和性能效率最高的方法是什么,因为从任何角度观看时,构成电动螺栓的线条都需要看起来“实心”。
我正在考虑为每个线段生成两个平面,在 X 交叉中创建线条粗细的效果。通过禁用深度缓冲区写入进行渲染,使用某种附加混合模式。使用带有 Alpha 通道的电外观纹理对每个线段进行纹理处理。
不过,我有点担心使用这种方法生成必要的三角形列表会影响性能,因为我的游戏可能会同时生成很多闪电。但由于闪电的长度和厚度会有很大差异,我怀疑简单地使用一个闪电的动画 3D 对象,拉伸并指向正确的位置,这是我最初的想法。
我正在考虑一种替代方法,在后处理过程中使用投影端点之间的 2D 线渲染闪电。这应该很有效,因为在我的例子中透视效果可以忽略不计,除非让线条出现在遮挡对象后面会很棘手。
关于这里的最佳方法有什么好的想法吗?
编辑:我从 nVidia 找到了这份白皮书:
http://developer.download.nvidia.com/SDK/10/direct3d/Source/Lightning/doc/lightning_doc.pdf
它使用一种方法,为每个线段设置广告牌,然后应用一些过滤来平滑每个广告牌产生的间隙和重叠。
似乎产生了相当不错的视觉效果,但是我对额外的过滤通道不太满意,因为游戏适用于手机,这样的步骤非常昂贵。而且,事实证明,广告牌的 CPU 成本也很高,因为额外的矩阵计算开销在移动设备上很慢。