我目前在android opengl中有一个粒子系统。物理学都得到了处理,粒子很好地吸引到了屏幕上。唯一的问题是它们呈现为GL_Points。所以它们只是彩色方块。我想知道是否有人知道如何将这些点组合成当粒子足够接近时看起来像液体的斑点。能够避免纹理会很好,但任何着色器建议都会非常感激。
有一些技术,如行进立方体,以创建一个点云的网格。但这绝不会在智能手机上实时运行。除非你模拟一个超级微小的液体。
您可以使用网格行进对渲染进行光线追踪,并且附近的粒子可能具有距离阈值,该距离阈值将使像素退出行进循环并根据此处附近粒子的距离渲染一些颜色。对于智能手机来说这将是非常沉重的(但是对于GTX480而言,这是完全可行的)。
您可以放弃高科技并使用广告牌渲染,每个点变为4个点(由于几何着色器或者由于某些CPU侧粒子场扩展复制传递到四边形缓冲区)然后使用球形广告牌渲染和正确的混合设置(添加剂会很好)避免广告牌走过彼此并需要排序,这会在小型设备上杀死你的性能。
这里有一些关于球形广告牌的资源:http://www.gamerendering.com/category/particle-systems/
您可以根据每个像素的字段评估创建自己的广告牌渲染着色器。广告牌几何只是一个“支持”,就像空间分区优化一样。您可以知道,如果您现在正在评估片段,而不是进行网格游戏,则可能是因为您位于粒子场附近。因此,您可以加速研究narby粒子并计算其中的斑点场,并从中决定像素的渲染。请注意,如果影响函数返回低于阈值的值,则结果可能是丢弃。这将有助于创建具有清晰界面的表面,如水。 (而不是烟雾或蒸汽等气体)。但它需要在每个帧的纹理中准备一个漂亮的查找结构。比如说一个带有粒子信息的立方体纹理,用于在着色器中快速查找。我怀疑这可以在超小型模拟的智能手机上完成。
您正在寻找一种名为元球的技术。这是一个参考:http://nullcandy.com/2d-metaballs-in-xna/