问题标签 [skeletal-animation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
707 浏览

unity3d - Unity3D:添加动画层使我的 2D 角色漂浮在地面上

我正在 Unity 中开发 2D 游戏,遇到了一个无论我做什么都无法解决的问题。

我有一个播放器角色(一个 .psb 文件被分成多个层,骨骼附加在统一的蒙皮编辑器中)并附加了一个动画师。在动画师中,有两层——一层基础层和一层“灯笼”层(之所以这样称呼,是因为它负责将常规动画与专门设计用于拿着灯笼的动画之间的混合)。两层都设置为覆盖,灯笼层同步,其权重由脚本控制。

当第二层存在时,我的角色总是开始逐渐向上飞行,无论其设置、重量或状态运动如何。如果我删除图层,所有问题都会消失。如果我在动画师上禁用“应用根动作”,问题也会消失,但遗憾的是我需要启用它。然而,实际上并没有动画修改角色的变换,只有骨骼的旋转。现在它变得有趣了:当我运行一个确实修改玩家位置的动画时,在它结束后,玩家不再飞起来。

我发现与此相关的所有主题都是关于 3D 装备的设置,这些设置比我的 2D 动画剪辑要多得多(这里只有 3 个选项......叹息),通常通过烘焙到姿势 Y(或这些线条中的东西)或设置来解决这个问题“足部 IK”为真。尽管如此,剪辑和动画师上的所有设置组合都无法解决问题(动画师状态上的“脚 IK”设置也没有改变任何东西,所以我将它们设置为禁用)。阻止我的播放器无限期向上飞行的唯一 3 种方法是:删除第二层,播放一次修改播放器位置的动画,或禁用根运动。

此外,没有脚本会以可能导致此问题的方式修改玩家的 y 坐标(我将它们全部禁用,但没有任何区别)。

我知道这是一个非常模糊的问题,但如果我能自己解决它,我就不会在这里发布。我没有附上任何屏幕截图或代码,因为我留下的印象是这更像是一个理论问题......也没有动画师的设置组合或剪辑能够改变任何东西,所以......:/不用说,如果有人认为这会有所帮助,我会很乐意这样做。

先感谢您!

最好的问候,科乔

0 投票
1 回答
120 浏览

skeletal-animation - C# SFML 2D 中的骨骼动画

当谈到 2D 骨骼动画时,我完全是绿色的。我创建了一个平台游戏,并为它制作了图形——用来粘贴角色的身体部位。我的问题是我完全不知道该怎么做。问题是:你如何在游戏中实现动画?我可以从以前粘合的身体部位逐帧进行,但我需要角色查看鼠标光标,所以它会脱落。我正在征求一些想法。

0 投票
0 回答
68 浏览

unity3d - Unity-3D - 我可以让多个对象显示相同的动画状态吗?

动画人物需要一个Animator才能显示动画。我正在尝试创建一个步调一致的士兵营。只需创建 200 名士兵并移动它们很容易,但每个人都有自己的动画师,并且正在计算每一帧中士兵的动画姿势 - 为每个士兵。

但是,如果它们都相同,最好让一个动画师计算姿势并为所有它们使用这个形状的网格。

有没有办法让多个游戏对象共享一个 Animator、一个网格和一个生成的姿势的单个副本?

随附的屏幕截图显示,500 位动画师在 5 个 CPU 上花费了几毫秒来制作动画……

显示 Unity 分析器的图像

0 投票
1 回答
357 浏览

visual-c++ - 在 Assimp 中获取骨骼动画的变换矩阵

我正在学习在Visual Studio Express 2019的Assimp中操作模型。所以我加载了一个模型,它有 0 个动画。我想对它的骨骼应用一些变换,也许是手,并以我导出的 obj 格式查看它的效果。现在要查看 obj 格式的效果,我必须对其顶点应用更改,因此我必须在骨骼中分层应用变换。但我不明白如何实现这一切。我看过 oglDev 教程 38 但看不懂。因此,任何帮助将不胜感激。

以下是我需要帮助的想法->

1.如何对骨骼及其所有孩子应用一些变换(考虑一个简单的人体模型)。

2.如何获得受特定骨骼影响的顶点的最终位置,对于骨骼,我们只有变换矩阵,那么如何将它们转换为 X,Y,Z 坐标以告知顶点位置。

我没有使用 OpenGL。

我想在 Assimp 中使用简单的 C++ 代码来完成这一切。

请参阅此处了解更多进展和困难详情: Assimp 中的错误骨骼旋转

0 投票
1 回答
301 浏览

c++ - 如何计算 COLLADA 文件的父子联合变换?

尝试实现索具:

  • 使用 Blender 创建了一个简单的操纵蛇测试并导出了一个 COLLADA 文件。
  • 我已经正确加载了顶点位置、权重和关节 ID。
  • 我已经为每个骨骼加载了骨架关节层次结构和这些变换(我加载了将所有浮点数转换为浮点数 [16] 的矩阵,然后我使用 glm::make_mat4(tmpFloatArray),然后我转置它,不确定是否这是正确的方法):

现在,如果我将每个骨骼的矩阵设置为 glm::mat4(1),我会得到:

截屏

但是,如果我尝试乘以关节父变换,就像在 Thin Matrix rigging tutorial 中一样,我会得到非常奇怪的结果:

上述代码的结果

请帮忙,我已经坚持了几个星期,但我没有成功,无论我多么努力地搜索网络,我都找不到任何有用的东西,关于我可能做错的任何想法?

0 投票
1 回答
787 浏览

c++ - 如何计算每个骨骼的起始矩阵(t-pose)(使用 collada 和 opengl)

我已经加载了顶点、材质、法线、权重、关节 ID、关节本身和父子信息(层次结构),我还设法将它们全部渲染,当我旋转或平移其中一个关节时,孩子旋转父母。我的问题是,父母在错误的点或偏移量上旋转(希望你明白我的意思),这意味着我的初始偏移量是错误的,对吧?为了获得起始t-pose,我猜我不需要旋转或平移,只需要关节位置的偏移量,但我不知道如何获得它,被卡住了很长时间。在 Collada 文件中,每个关节都有一个变换,我也加载了那个,但我不知道如何正确实现它,我的 3d 模型变形并且看起来不对。如果你回答这个问题,请把它当作你在向猴子(我)解释它,如果可能的话,一步一步来,我不熟悉这些绑定和反向绑定术语,并且非常困惑。我想如果我能做到这一点,我最终会自己弄清楚骨骼动画的其余部分,所以这只是这件小事。

0 投票
1 回答
222 浏览

unity3d - 将 .psb 中的矢量形状导入 Unity 时出现问题?

我在 Photoshop 中的 .PSB 文件中有我的角色,它是由矢量形状组成的。我没有对其进行光栅化。当我将该 .psb 文件导入 Unity 时,没有任何显示。但是,如果我将其栅格化,则可以。我想使用矢量形状而不进行光栅化,以便以后可以轻松地对其进行更改。有什么办法吗?还是我只是朝着错误的方向前进?

0 投票
0 回答
665 浏览

unreal-engine4 - (虚幻引擎 4)有没有办法可以在运行时将骨架网格体姿势转换为静态网格体?

我知道有一种方法可以将骨架网格物体转换为静态网格物体,方法是右键单击它并单击转换选项。我想知道是否有办法在运行时做到这一点。我有一些只适用于静态网格的功能,如果我能获得这些功能,我可以用我的游戏做一些很酷的想法。

我的最终目标是能够获取骨骼网格的特定动画帧的快照,然后根据该动画帧中的姿势创建一个新的静态网格。

我研究了姿势快照工具,但这似乎只适用于将某个姿势应用于动画师,而不是使用该姿势创建静态网格。

0 投票
0 回答
31 浏览

opengl - 动画蒙皮转换顺序问题

我正在做一个骨骼动画渲染器,但遇到了一些问题。我编写了自己的 Collada Loader,一切正常(我已经检查了多次),我为绘图准备了蒙皮和骨架数据。

我理解它的方式你必须首先将你的关节乘以反向绑定变换,以使它们位于你的世界坐标系的中心,然后根据动画乘以关节动画矩阵(关节层次结构的连接本地关节变换)将关节变换到正确的世界位置。

我将粘贴下面的代码,不处理帧的插值我尝试渲染每个关节动画的第一帧,这样我就可以只专注于蒙皮。

这就是模型的外观: 图片

任何帮助表示赞赏!

0 投票
0 回答
158 浏览

c++ - assimp:以正确的方式加载“mTransformation”和“mOffsetMatrix”。如何从assimp加载骨骼动画?

我目前正在尝试从 collada 文件 (.dae) 加载骨骼动画。但是我的代码中似乎有一个我找不到自己的错误。

该错误可视化为根本不显示层次结构的最后一个孩子。它们被加载,但以一种消失的方式发生了变化。

我尝试根据需要提供尽可能密集的代码spinets,以了解我在做什么。如果您需要更多上下文,请请求它!

我用于加载骨骼转换的代码:

bone_map从 assimp 关节名称转换为我的关节数组的映射在哪里。

我用于加载动画转换的代码:

我用来制作动画的代码:

wherei是当前关键帧索引,j是当前联合索引。

joints传递到着色器的转换数组在哪里。(结果)

请注意,父级的索引始终低于子级。因此,总是首先处理父级。

使用的数据结构(可能与问题无关):

感谢所有试图提供帮助的人!