我为我的3D游戏实现了一个简单的闪电效果,如下所示:
http://www.krazydad.com/bestiary/bestiary_lightning.html
我使用的是opengl ES 2.0。我在思考在3D环境中呈现这种效果的最佳外观和最高性能的方法是什么,因为构成电动螺栓的线条需要看起来很坚固。#34;从任何角度看。
我正在考虑为每个线段生成两个平面,在X十字形中创建线条粗细的效果。通过禁用深度缓冲区写入进行渲染,使用某种类型的附加混合模式。使用具有alpha通道的电动纹理纹理化每个线段。
我有点担心使用这种方法生成必要的三角形列表所带来的性能损失,因为我的游戏可能会同时产生大量的闪电。但由于闪电的长度和厚度会有很大变化,我怀疑只需使用闪电的动画3D物体,拉伸并指向正确的位置就行了,这是我最初的想法。
我在考虑一种替代方法,在后处理过程中使用投影端点之间的2D线渲染闪电。这应该很有效,因为在我的情况下,透视效果可以忽略不计,除非那些线条出现在遮挡物体后面是很棘手的。
这里有关于最佳方法的任何好主意吗?
编辑:我从nVidia找到了这份白皮书:
http://developer.download.nvidia.com/SDK/10/direct3d/Source/Lightning/doc/lightning_doc.pdf
使用为每个线段设置广告牌的方法,然后应用一些过滤来平滑每个广告牌产生的间隙和重叠。
似乎可以产生非常好的视觉效果,但是我对于额外的过滤传递并不太满意,因为游戏适用于手机这样的步骤非常昂贵。事实证明,由于额外的矩阵计算开销,移动设备的速度很慢,因此广告牌也非常昂贵。
答案 0 :(得分:2)
我最终做了类似nVidia文章的建议,但是为了防止需要后处理步骤,我使用不同类型的纹理来处理不同类型的分支角度,以避免分段角落的间隙和重叠,结果相当好。为避免昂贵的广告牌矩阵计算,我改为使用更多2D方法绘制线段,但手动为段中的每个顶点计算深度值。这会产生可接受的性能和视觉效果。
答案 1 :(得分:0)
可能是由着色器驱动的动画纹理可能是处理此问题的最快方法。
任何几何体生成和渲染都会限制效果的质量,并且可能会占用更多的CPU时间,内存带宽和绘制调用。
在四边形上使用单个动画纹理,或创建程序闪电的着色器,将提供恒定的速度并使效果更容易实现。为此,this question可能会引起关注。