渲染字符,四肢被割断(Java / OpenGL中的Blender模型)


10

如果我希望肢体可分离,在创建角色动画和渲染类时应该考虑哪些方面?我已经开发了详细的身体系统,可以定义到神经系统的所有内容。我的目标是达到与《矮人要塞》中详细的伤害程度相似的水平。例如,当角色对其上臂造成伤害时,可能会出现神经受损,从而使整个手臂失去能力。否则他们可能会完全失去手臂。

我写了一个系统来处理其中的数据部分。每个角色都有一个箱子,里面有附属物和内部零件。每个附件也可以具有子附件和内部部件。如果禁用或删除了父附件,则将禁用/删除子附件。如果生命中需要任何禁用/拆除的附件或内部零件,角色将很快死亡。

我现在正在研究的是绘图/动画部分。如何定义动画以了解在当前身体状态(缺少手臂/腿等)下允许哪些动画?如何设置绘制系统以不绘制缺少的四肢?每个肢体/附属物都必须是自己的模型吗(我想在地面上画出切除的附属物)?

我正在转换的简单系统(我只是将其编写用于测试)将动画的所有关键帧作为完整模型导入到VBO(以及关键帧开始/停止位置的顶点计数)。它不会导入或利用Blender中定义的骨骼,也不会在帧之间进行插值。

这可能是一个很大的问题,所以我也在寻找可以使我走到哪里的资源。

编辑

我询问有关动画的动画,因为我希望将其设置为在缺少所需肢体的情况下执行其他动画。考虑了这一点之后,我想我会在激活动画之前执行该检查,然后激活相应的动画。

Answers:


7

我目前正在使用类似的系统。程序动画+肢解等

如何定义动画以知道允许哪些动画给出身体的当前状态(缺少手臂/腿等)?

我不太了解这一点,如果肢体不在那儿,那么谁在乎它是否被动画化了,因为它无法被看到。

每个肢体/附属物都必须是自己的模型吗(我想在地面上画出切除的附属物)?

我通过使用顶点骨骼权重来动态构建这些。质量可能比手工完成每个步骤都要低一些,但是一旦完成一次,它的工作量就会减少,因为我可以将其应用于每个模型。

使用下一部分的明智方法,是的,每个肢体都有自己的模型。

我可能会拥有一个完整实体的完整模型,并且每个分支都割断了。

如何设置绘制系统以不绘制缺少的四肢?

2个主要选择,最简单的方法是分别单独绘制四肢,并且四肢连接处具有其他面孔,这些面孔通常被“原始肉”纹理隐藏,当移除四肢时会看到这些纹理。

第二种选择是动态地动态执行此操作,这仅适用于相对简单的模型。方法是采用基本模型,并找到权重为要肢解的肢体的顶点。删除这些顶点,注意它们连接的顶点,以便您知道打开的部分。然后,使用带有“原始果肉”纹理的三角形动态关闭开放区域。从理智的软件开发人员的角度来看,这种方法不是一种很好的方法(运行时模型变形),并且不太“平坦”的性能特征,但是我有点喜欢。

尽管第一种方法将生成更多的绘制调用,但它也更加平易近人。

我个人认为第二种方法比较成功,但是我的所有模型都是非常低的多边形,因此目前可以动态分割模型并在框架内重新上传VBO。

它不会导入或利用Blender中定义的骨骼,也不会在帧之间进行插值。

这使得很难以程序方式进行分解,因为您如何知道哪些顶点属于哪个关节?顶点骨骼的重量和肢解是相辅相成的,所以我建议您重新考虑一下。

我还建议您投资插值。没有它,您将无法加快/减慢动画的速度,而且帧速率也很高。这意味着您将可以从动画中获得更少的收益。例如,当有人停下来时,您不能放慢步行动画的速度等。


谢谢@迈克尔。我提出了插值和导入骨骼的方法,因为我知道最终将需要它们,但是我还没有。从您所说的来看,到那时我似乎会知道该怎么办。我可能只将一个附件或一组附件与骨骼关联。我将问一个有关导入骨骼的单独问题。
MichaelHouse

由于您正在从事类似的工作,也许您对这个相关问题有更多的了解?gamedev.stackexchange.com/q/20931/7191
MichaelHouse

5

最好的选择是切断四肢,并根据伤口的当前状态使用多个子模型。您对每个关键帧使用VBO的方法实在是太过分了。使用骨骼动画系统,并根据收到的伤害(用一只脚lim脚,不用两只脚爬网等)播放不同的动画。

Valve 在L4D2中发布了一系列有关伤口和肢解的幻灯片。我真的很喜欢在器官和骨骼上使用模型,并根据切口,枪声等的纹理投影来裁剪“皮肤”模型的方法。


有趣。那些幻灯片看起来不错。这似乎可以对不影响整个附肢的伤害起作用。
MichaelHouse
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.