骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

搜索
购买CDKEY 小黑盒加速器
查看: 2602|回复: 5

[经验与教程] mod理论独家-骨骼拼接原理对多人复合运动关系的处理应用

[复制链接]

202

主题

984

回帖

986

积分

子爵[版主]

Rank: 7Rank: 7Rank: 7

UID
2893127
第纳尔
14521
精华
0
互助
90
荣誉
18
贡献
325
魅力
775
注册时间
2017-11-5
鲜花(428) 鸡蛋(0)
发表于 2023-1-9 08:55:41 | 显示全部楼层 |阅读模式
本帖最后由 vegetto 于 2023-1-9 13:49 编辑

首先看下我这个贴里面的涉及骨骼拼接运动原理基础知识的介绍https://bbs.mountblade.com.cn/thread-2096142-1-1.html(骨骼拼接理论及应用---火影须佐能乎(代码))在这个帖子里我简单讲了下如果将多个agent人利用 骨骼坐标获取操作(agent_get_bone_position, <position_no>, <agent_no>, <bone_no>, [<local_or_global>]),和开启关闭重力惯性能力可制造人体悬空   (agent_set_no_dynamics, <agent_id>, <value>),  的操作来制作不同agent从动于另一个agent的特定位置的行为。你们应该这种组合应用用的比较少,因为dynamics飞行应用是我很多年前第一个提出作用但没有多少人重视的,加上大家一时间对新事物新方法的想象力问题。所以我把我对这个操作控制组合依照我想象力下做出或能做的东西,举一些用例和扩展的基本原理解释给大家。
火影须佐能乎只能魔幻或特定题材用,所以实际上还可以举出一些写实、魔幻不同题材的例子,让不同题材的作者都能得到一些启发,做一些神奇的带有多agent配合的运动行为类操作。
大家先把我上面的帖子里面的op和相关原理基本解释和代码实例用法看下。
然后我的一些用例举例,由于时间的关系,下面的用例只简单说下基本处理方法和原理,有空再补充实际的整段代码参考:

按照拼接对象分类:


(1)多个完整人位置或骨骼位置之间的拼接从动运动(其中,人是否当人的定义来用也是进一步的一种划分,比如人模拟其他生物或机械)
(2)完整人骨骼位置与非完整人(比如只用一只手或绑定非人类的工具)骨骼位置的拼接从动运动
(3)引申:人骨骼位置与场景物/粒子等系统的拼接从动运动 --这个不在本贴的介绍范围,但是可以看看我这个帖子关于刺客伍六七魔刀千刃效果做法的代码理论贴https://bbs.mountblade.com.cn/thread-2096147-1-1.html

按照题材分类:

用例类型一、非主流恶搞系列应用,一般不适合正常mod


1.男上加男及其多种变形视频https://www.bilibili.com/video/BV1WG4y1g7EQ
(1)下图是经典的是“骑马打仗”这种小孩子玩的我们生活中的游戏(其实设定合理,也能作为正常mod的写实娱乐活动,所以东西合不合适,主要看整体设定的新游戏环境,而不是以当前环境批判),也就是一个人骑着动作始终在另一个人的脑袋上。

原理上就是将agentA以裆部骨骼为自身的相对位置基准始终设置在agentB的头部骨骼坐标位置上使得agentA通过no_dynamics设定可浮空的使其裆部伴随agentB头部运动





(2)下图这个是“骑马打仗”的变式,也就是下面被骑的人使用特制的爬行动作,其实呢,要让正常mod使用合理,也有办法处理,就说这个是亲子活动,你们就没有人或没看过电视中家长爬着孩子骑着或者甚至一些昏庸的帝王把大臣当马骑,所以联系生活发挥想象力,不是动不动就评价一句“这不合理”“这有些违和”“这种功能有什么用”。然后引申一下,如果你把其中一个人绑定做出特殊生物或坦克摩托车的骨骼动画呢,要知道马并不像人一样方面应用很多的新骨骼,所以男上加男,其中一个男如果变成载具,你能想象可以解决多少功能吗。



(3)下图这个是我视频里命名为“左右为男”这个比较“哲学”的词语的行为,其实就是一个人手拎着另外两个人的腰部。原理上就是将agentA和agentB的腰部骨骼为自身的相对位置基准分别始终设置在agentC的左右手武器点部骨骼坐标位置上,使得agentA和B通过no_dynamics设定可浮空的使其腰部伴随agentB两个手的骨骼动画运动轨迹运动。至于怎么用在一些正常的场合,你想想你小时候有没有家长或比你壮的大孩子把你单手拎起来,有时候可以拎你的腰,甚至拎你一只手,所以这不就是生活场景的应用。然后对于一些有英雄豪杰的,李元霸把你拎起来举上半空一丢或往墙上砸或撕成两半,这种是不是就是战斗场景可以考虑应用的场合,所以还是那句话,讲“这不合理”“这有些违和”“这种功能有什么用”先看看自己想象力和实际能力有没有构造一个整体的游戏环境。


(4)下图可以叫男上加男plus或者人塔,比较印度式的感觉,就是多个人互相骑头上然后堆的高高的。是(1)男上加男做法原理扩展。这个可能正常适用的mod场合就比较少了,当个野怪或者攻城(傻子才这样攻城上墙)也有些僵,这就算图个乐。
视频https://www.bilibili.com/video/BV1iK411z7SU




用例类型二、写实类mod可用例

1,骑马带妹浪漫视频https://www.bilibili.com/video/BV1XW411r7w1


其实这个哪个mod都可以用,你想想骑砍的结婚系统是不是对于谈恋爱大部分就是对话完成任务走结婚过场然后成了你的管家npc,夫妻之间就没其他互动了(先不谈其他mod耍流氓的有关功能)。所以利用我这个机制,可以做一个红尘作伴潇潇洒洒,骑着马前面搂着妹一起骑马看风景的功能。

这个基本原理:骨骼拼接的出发点有两种考虑方式,一个是利用马的骨骼坐标把骑士agent的女票设置到马背上位置偏骑士前面一点通过no_dynamics设定可浮空。另外一个方式就是直接获取骑手的裆部骨骼坐标,然后把坐标向前的水平角度往前取一个坐标位置,把骑士agent的女票设置到这个位置通过no_dynamics设定人可浮空。所对于骨骼拼接这两种考虑其实想告诉你们,骨骼位置伴随运动的设定,这个相对位置这么取,要看行为特征,按理来说要在全体骨骼动画使得骨骼位置变动的情况下,要两个agent特定位置一直贴在一起,就是要利用骨骼运算。否则这种非线性的骨骼点运动仅仅通过agent pos的有限move/rotate基本位移旋转操作是无法保证所有动作下都能完美贴对不同人的不同特定部位,所以,根据双人骑马这种特定关系,我们最直接的坐标参考点应该是马背位置的骨骼坐标,但是对于骑马带女票来说,马没死时,骑士在马背上坐的位置基本是变化幅度不大的平面位置,所以可以参考目前骑士的坐的位置往前平移一点点找个坐标再坐一个人,在全过程动作动画运动中,女票与马的贴合度会基本满足我们设想的情况。


2.类似战地骑兵的骑枪扎人带着一起动的功能
视频https://www.bilibili.com/video/BV1bh41187zw原战地游戏的相关表现从1:10这个时刻开始看到这类功能

这个来自前几年很火的一个战地游戏视频,骑兵骑枪扎进对手的身体后还能挂着一起移动一段距离再甩开,当时玩家们说这个可比骑砍真实多了,伟大的骑砍能做到这种程度吗?当时肯定很多人要摇摇头,但是现在你们结合我的骨骼拼接运动理论,这种功能也是小意思。
原理在骑砍里可以这么考虑:
步骤1)ti_on_agent_hit条件里判断骑兵用骑枪的agent为攻击施加方时,受到攻击的agent以slot1号记录伤害的坐标位置(最好骨骼坐标),以及一个状态量slot2号表示是否受到这种需要仿照战地功能的运动事件启动(我下面简称为羊肉串功能启动),以及提前标记每个agent的序号记录到一个状态量slot3号,然后以受到攻击的agent再用一个slot4号记录是哪个序号的攻击者agent要用这种战地骑枪功能对付他(为了保持一一对应关系,所以要构造序号对应,不然我总不能像羊肉串一样,短时间五六个人都串在骑枪上吧?)
步骤2)当进行try for agents 的循环检测到slot2号的值为战地骑枪羊肉串功能启动,那么把slot3号和slot4号结合判断的羊肉串功能的两个关联agent进行筛选出来,扎人的agent利用agent_get_bone_position获取骨骼编号为19的武器点骨骼坐标,然后获取骑枪长度op以武器骨骼坐标为基点向手虎口向上角度position move XYZ一定长度(长度范围在距离手部最深扎深的杆子局部长度到骑枪最大长度,这个要另外用slot根据你的力道等等每次触发这个事件时在这个范围内取个总体随机但单次固定的扎深值),这样就得到骑手要扎的人应该把身体的特定部位放置到什么坐标位置上。
步骤3)将被扎的人先获取agent pos坐标值 :pos1(x1,y1,z1),再获取期望扎到的特定部位如特定骨骼坐标值获取为:pos2(x2,y2,z2),而期望扎到的骑枪杆子上的位置坐标值获取为:pos3(x3,y3,z3),
那此时,我们知道,如果仅仅将被扎的人位置设置到骑枪杆子上,那我们只要(agent set position,被扎的人,pos3)然后set no dynamic浮空跟随骑枪,但是这样设置,看上去是被扎的人不特定的动画最底部的部位踩在骑枪上(比如站立时是脚底踩骑枪,死亡动作是腰躺着的部位贴着骑枪),这样就不固定并且允许被扎时动作变化时扎的位置就在动且不像人被扎的样子。所以我们这个时候要这样处理:
(x2-x1,y2-y1,z2-z1)得到一个坐标方向向量,这个就不是坐标值了,而是位移矢量,目的是对骑枪特定位置(x3,y3,z3)进行矢量变换到(x3-(x2-x1),y3-(y2-y1),x3-(y2-y1)),这个写法是什么意思呢,意思就是先获取一下被扎的人在任意动画动作下,agent pos和骨骼pos之间的变化公式,以向量的形式表现,这时候如果被扎的agent整个身体模型的agent pos设置到骑枪某位置上时,你需要逆向将这个位置偏移到自身的特定骨骼坐标上,那就要将骑枪的特定位置坐标逆向进行被扎的人agent pos和骨骼pos之间的坐标向量变换。所以得到到(x3-(x2-x1),y3-(y2-y1),x3-(y2-y1))这个新pos,设为pos4,那么(agent set position,被扎的人,pos4)就是将被扎的人的特定骨骼坐标与骑枪特定位置贴着进行从动伴随运动,这样你骑枪扎人时,你想扎头拖着人走还是扎一只手拖着人走还是扎腰,都可以实现。步骤4)设定扎人后顶着人一起运动的持续时间slot,到达时间峰值后解放set no dynamic状态到默认值0后,相关状态类自定义slot归0,把人丢下。




用例类型三、魔幻类武侠类mod可用


1.巨人捏着人

巨人的做法骑砍由来已久,但是巨人实际上除了身体大一些以及要弯腰砍人以及可以跨越部分障碍物外,基本上就没其他优势行为了,如果配合我的骨骼拼接运动原理代码,就可以做很多东西,比如巨人打一下正常人,给一个slot标记状态,然后循环,将正常人的腰部骨骼位置设置到巨人的,手部骨骼位置贴合进行从动伴随运动,折磨揉拧一段时间再把正常人丢出去丢飞个抛物线运动到地上摔伤。你看看,发挥想想,不同的部位不同的骨骼,是不是可以发挥的地方有很多。




2.四臂人,做类似三头六臂的功能
视频https://www.bilibili.com/video/BV1JE411h7kJ




这个功能用例是告诉你们人不一定要当成完整的人一起用,可以比如三个人,一个用完整的人,一个人只留一个左手,一个人只留一个右手,然后把多出来的左右手给第一个人。当然做这个功能时注意不要只换皮,要结合新种族skin和新骨骼要用的skeleton.xml文件来构造新骨骼的种族,比如我这个人只要一只手,那么把原始骨骼的其他身体部分的hitbox全部移除,因为这种骨骼拼接时就像人卡人人挤人一样,多个人叠在一起,hitbox会挤压导致互相之间运动受阻,比如移速减缓和砍人被挡住。所以要阉割骨骼或其hitbox的有效部位。





3.类似奥特曼的360度甩人
视频https://www.bilibili.com/video/BV1Ut411z7Bb


也就是agentA两个手抓住agentB做趴地动作时的一只脚,然后agentA做旋转位移控制,agentB跟随从动。效果就像奥特曼抓住怪兽的一个部位通常是尾巴来360度旋转再甩飞。你看看,做了这个,是不是很多武侠动作也可以做了,武侠想要招式显的巧妙,就是要紧密判断肢体的接触并做出反馈,我们很多作者在判断肢体接触方面代码能力还是可以的,毕竟做精密的骑射ai要做到指哪打哪,但是接触后的反馈却做的很少,因为这个要骨骼动画产生的动作与位移控制的结合事件,而因为大家以前对agent_set_no_dynamics在agent运动控制上不熟悉,导致动画位移事件如击飞等等行为基本直接靠骨骼动画动作本身一起完成,而动画动作如果在任何情况都负担动画和位移两个行为,势必会对控制的自由度(如多个agent之间具有复合行为过程的复杂行为控制自由)产生影响,进而不能做出打的天花乱坠的武侠打斗。
所以想要做武侠等格斗类的对单体行为具有自由表现力的mod,要重视这个骨骼拼接运动理论的应用。

-----------------------------------------------------------------------------------------------------


题外话:骑砍未来还可以进步地方,除了界面与动画及多系统组合策划的想象力创造,还有对运动事件的灵活控制,特别是这种需要多人、多物、人与物的配合型运动的掌握。这样我们无论是做贪吃蛇、愤怒的小鸟、还是掘地求升 等各种游戏的运动行为的模拟都会得心应手,让骑砍变成什么游戏都不在话下。
当然就我的作品来说,我一直以来并不是要大家学我,把骑砍改成不像骑砍的各种模式的游戏。而是,创新和挑战未知,然后总结,联系和区别,然后反过来去强化现有理论、满足已知部分的进步,再进行未知部分的探索瞎搞。就像万有引力相对论刚创造出来不知道有什么用,结果百年后用来发现小行星。然后就像2009年各种山寨机手机千奇百怪的造型圆形的都有,折叠屏,还有当锅子接受国外卫星电视信号的手机,诺基亚还出过带电脑键盘的手机然后就被收购了,但后来手机都学苹果的造型千篇一律一片板砖+触摸屏,但是近两年手机带电脑键盘还有华为折叠屏又兴起。所以从时代变迁的角度,你永远无法评判,当前一个新技术以后会不会有广泛的应用。并且从资本的角度,和谐的核心不是满足用户习惯,还是培养用户习惯,当你像一些大厂一样把十几亿人都养成了习惯,那有些创新就变得更加无力,所以什么“画风不和谐”“功能无意义”,一方面是你真的基本的东西没做对或满足现在大众的习惯,另一方面是没有一个完整的整体的新概念,然后长时间给用户灌输这个新概念,养成一个新的用户习惯,就像领军者的出现,导致玩家对没有自动处理战力品和换装导致再回过去玩战团或同样没有这个功能的mod而感到不习惯。当然对于骑砍来说,时间不多了,要养成新的习惯,要让一个新概念让所以玩家都接受是比较困难的,就像现在大厂垄断了十几亿中国人的生活习惯,让吊丝逆袭变得越来越困难,大家就自成一派,看看有没有能力形成更多的前所未有的独家特色。









评分

参与人数 1荣誉 +1 第纳尔 +50 互助 +2 魅力 +50 收起 理由
Aomine Daiki + 1 + 50 + 2 + 50 您的帖子很有价值!

查看全部评分

鲜花鸡蛋

杰喵喵  在2024-1-19 09:29  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下

0

主题

20

回帖

6

积分

平民

Rank: 1

UID
3284052
第纳尔
467
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2021-11-3

骑砍中文站APP会员勋章

鲜花(10) 鸡蛋(0)
发表于 2023-1-9 18:06:18 来自手机 | 显示全部楼层
顶礼膜拜,我一直就想那个马能够骑多人的功能,有时间试试。来自: Android客户端

15

主题

740

回帖

367

积分

子爵[版主]

汉[Han]
联机ID:Han_DongHai

Rank: 7Rank: 7Rank: 7

UID
3033293
第纳尔
10331
精华
0
互助
24
荣誉
2
贡献
360
魅力
184
注册时间
2018-10-3

第十届战团中国联赛征战勋章汉匈决战正版勋章战团正版勋章霸主正版勋章

QQ
鲜花(37) 鸡蛋(0)
发表于 2023-1-9 19:22:09 | 显示全部楼层
老彼得

0

主题

57

回帖

17

积分

随仆

Rank: 1

UID
3346943
第纳尔
519
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2022-4-8
鲜花(2) 鸡蛋(0)
发表于 2023-1-12 12:27:00 来自手机 | 显示全部楼层
感谢大佬分享来自: Android客户端

16

主题

57

回帖

22

积分

随仆

Rank: 1

UID
2999399
第纳尔
623
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2018-5-3
鲜花(1) 鸡蛋(3)
发表于 2024-1-7 22:42:19 | 显示全部楼层
大佬  用OPENBRF里可以移除hitbox,但是咋给新骨骼添加hitbox呢?   或者如何把其他MOD的骨骼和hitbox移植到另外一个MOD里?

13

主题

85

回帖

144

积分

见习骑士

Rank: 3

UID
3304622
第纳尔
605
精华
0
互助
19
荣誉
2
贡献
0
魅力
123
注册时间
2021-12-28
鲜花(26) 鸡蛋(0)
发表于 2024-1-19 09:29:23 | 显示全部楼层
已使用感谢分享
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

Archiver|手机版|小黑屋|骑马与砍杀中文站

GMT+8, 2024-5-1 00:54 , Processed in 0.130193 second(s), 29 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表