复杂网格表面上的动态流体(与重力实时交互)

时间:2013-01-23 22:55:53

标签: textures shader mesh

我的问题就是: 详细说明人物表面的血液是如何完成的? 从0:34开始,此视频显示here

好的,现在关于我已经研究过的更多细节(我已经尝试在几周内实现这种效果,但没有成功): 我尝试了一种强力方法,我得到了与平面相交的三角形(字符网格三角形),并计算每个三角形的线方程,以绘制一条线(斜线)。为了滴下表面,我尝试创建一个三角形贴图,该贴图将索引保持为通过边缘连接到每个三角形的三角形。然后我沿着重力方向沿着每个三角形的表面行。这需要大量的处理器能力并且通常会产生不良影响。当试图增加滴水的厚度时,会产生许多其他问题,因此根本不起作用。

我研究了八叉树纹理以及它们在模拟液体流过表面时的用途,但是我不知道如何实现这一点,据我所知,这对于引力无效。

我目前正在研究Cg着色器,并认为这是解决方案的所在。我发现同一团队的另一个视频(Wolfire)暗示使用着色器来显示here的血液效果。我已经找了一些着色器示例,可能会让我知道它是如何完成的,但到目前为止我没有运气。

我正在使用语言C#和Cg作为着色器。如果有人想要提供任何代码来帮助解释等,那么任何语言都会做,我会转换: - )

感谢任何帮助我的人,因为就像我之前在这篇文章中所说的那样,我花了很多时间试图解决这个问题,我的大脑开始受伤了。

2 个答案:

答案 0 :(得分:1)

这比光滑粒子流体动力学等动态流体更像是一个着色器技巧。

首先,上面的视频是由一位非常优秀的图形程序员(IMO)创建的。请注意,获得相同或类似的效果不是一件容易的事。

他说他存储了一种独特的血液质地"它存储每个纹素的血量。

当加入伤害时,你会增加伤口处的血量(到血图)。

每个框架根据一些标准更新血图:

  • 对于每个纹素 - >如果上面的纹素中有很多血液......增加当前纹素的血量。

  • 您需要确定上面的内容""通过检查着色器中的世界坐标

  • 如果您想匹配视频,则还需要检查垂直间隙。滴落。

  • 将所有纹素的总血量减少到一定的最小值(以使系统随时间减慢)

当血滴到水平面时会发生什么?"?看起来他在水平表面上添加了一个贴花,在每次"滴水时增加了贴纸。

祝你好运

编辑: 这里有一个糟糕的(1小时开发时间)我刚刚制作的滑动血液的例子......它在GLSL中...你需要一个像样的图形卡和一个符合webGL标准的浏览器来查看它。   http://glsl.heroku.com/e#6237.48

答案 1 :(得分:0)

这太晚了,但我会把它留给后代。 Wolfire血液飞溅效果似乎是nVidia Gravity Maps样本的(非常)升级版本。样本可以在这里找到:

http://developer.download.nvidia.com/SDK/9.5/Samples/samples.html#HLSL_BloodShader

此处还有来自GDC演示文稿的幻灯片:

ftp://download.nvidia.com/developer/presentations/GDC_2004/gdc2004_BloodShader.pdf