这篇博客介绍了对应的逻辑,以及我相关的思考 。
背景
在游戏《孢子》中,由于游戏要处理的是完全不可预测的,由玩家决定的 Mesh,因此当玩家改动或增减了躯干时,需要实时重新生成对应的蒙皮信息 。因此在《孢子》中使用了(一般也被称为)来表示蒙皮信息 。
的介绍
考虑场函数 D(r)=1r2 和在3D空间中的一系列控制点 。其中 r 指的是三维空间中的某一个点到控制点的距离,而在场中对应的强度则可以认为是这一系列控制点所产生的场强度的总和 。
那么这样一来,我们预先设定一个强度,并且绘制出三维空间中的等势面,这个等势面就是一个 。
![游戏《孢子》的思考 —— Metaball的逻辑,实现及对应思考](http://img.gansulong.com/231109/1G031MY-0.png)
文章插图
如下图,可以看出来针对于来说,当他们相互靠近时,对应的那些顶点会被彼此的控制点影响 。
![游戏《孢子》的思考 —— Metaball的逻辑,实现及对应思考](http://img.gansulong.com/231109/1G03113C-1.gif)
文章插图
当控制的图元不再是点,而是一条线段或者一个平面时,那么r通常取空间中的点到这条线段或者平面上的最短距离,例如下图就是不同场强度的 。
![游戏《孢子》的思考 —— Metaball的逻辑,实现及对应思考](http://img.gansulong.com/231109/1G0315061-2.gif)
文章插图
对于线段的控制图元来说,一个可能出现的问题在于交界处的融汇 。如果只是简单粗暴实现,有可能导致在两根线段交汇处出现鼓起的情况,例如下图的最下面的情况:
![游戏《孢子》的思考 —— Metaball的逻辑,实现及对应思考](http://img.gansulong.com/231109/1G0314S8-3.gif)
文章插图
有些时候,这种鼓起来的状况并非开发者所期待的,开发者更期待的可能是两条线平滑融合……这种情况可以使用各种不同的 来解决 。
的实现
在项目中的实现往往要考虑性能的开销 。场函数往往是可以延伸到无限远处的地方,但这样会导致计算量的快速增长 。
因此,可以考虑将在一段距离之后,将对应的场强直接设定为0 。这样一来,就可以节省一些计算量了 。
因此的公式可以设定为:
【游戏《孢子》的思考 —— Metaball的逻辑,实现及对应思考】f(r)=?????????????
- The Great Game 《伟大的博弈》[PDF]扫描版
- 数码兽x进化是什么动画
- 摧花毒降头是什么电影
- 《云计算框架与应用课程论文》
- 警察荣誉是什么电视剧
- 二腿之间是什么西班牙电影
- 何钦铭颜晖 浙大版《C语言程序设计》第四版 第2章 用C语言编写程序 课后习题
- 转 解决使用USB键盘进行游戏后按任意键出现蓝屏的错误
- 图集:十大最不可思议的计算机
- 《春日》古诗英文版是什么