骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

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

[经验与教程] 花糕滴小知识——anim篇细说(持续更新)

[复制链接]

17

主题

633

回帖

345

积分

见习骑士

Rank: 3

UID
3102512
第纳尔
2385
精华
0
互助
30
荣誉
0
贡献
0
魅力
74
注册时间
2019-9-6

骑砍中文站APP会员勋章战团正版勋章霸主正版勋章

鲜花(55) 鸡蛋(0)
发表于 2023-10-29 23:28:09 | 显示全部楼层 |阅读模式
本帖最后由 huagao 于 2024-11-7 18:42 编辑

     写一下anim的一些经验和总结的东西,如果有差错的地方还请斧正。  anim和骨骼动画的具体配合使用会写在骨骼动画篇里面。
     anim这部分研究的人很少,能找到的帖子资料也没几个,似乎因为制作费劲的问题很多人都放弃了这部分的研究,仅有的一部分也都是小打小闹。我在和阿格兰,杰喵喵,老奥 等的讨论和自己的测试中总结了一部分。

一,首先写一下anim的相关注释


#  There are two animation arrays (onefor human and one for horse). Each animation in these arrays contains thefollowing fields: anim有两种,一种对于人的,一种对于马匹的
#  1) Animation id (string): anim的id,调用使用.
#  2) Animation flags: acf类动作功能标识
#  3) Animation master flags: amf 动作优先级标识
#  4) Animation sequences (list). 动画序列,注意,一个anim动画可以拥有多个不同的序列
#  4.1) Duration of the sequence. 动画播放时间
#  4.2) Name of the animationresource. anim动画对应在brf里面骨骼动画的名字
#  4.3) Beginning frame of thesequence within the animation resource. 开始帧数
#  4.4) Ending frame of the sequencewithin the animation resource. 结束帧数
#  4.5) Sequence flags: arf 动作序列标识

在此之外还有几条需要补充的

#  4.6)动画声音:与pack 2或4f 配合使用,即pack 2或4 float,后跟参数为开始播放声音和结束播放声音的进度参数,0为anim开始,1为anim结束,动画播放声音的绑定疑似为硬编码,但是应该可以去掉pack参数和播放声音这个标签,就没声音了。

#  4.7)动画位移参数:需要配合acf_displace_position和偏移坐标 (x,y,z)   x右左  y前后  z上下,按照我的经验,每个单位量为3dmax中一格,注意该参数是动画播放完毕时相对于播放前的位置偏移量,如果你整个动画是飞起来又落地,那实际上是没有这个z轴上的位移的

#  4.8)布娃娃延迟,agent死亡后会有一段时间切换到布娃娃状态,这个参数就是控制这个时间的,单位为秒。这个参数很有意思,
我之前一度以为这个布娃娃参数是战团针对undead整活留的东西,似了以后可以临时放动画玩炸湿什么的。现在才发现,是为了修正skin里面的scale参数大人变大斧头的问题的。简单的说就是skin里面用scale参数调整大小比例的话,有一个小小的问题,即agent被投掷物杀死的时候这个投掷物prop也会变大,原因就是在agent死的一瞬间,如果直接便布娃娃的话,斧头会跟着一起变,所以会被scale参数污染。这个延迟时间的真正作用就是在修正这个,所以当时我写的 “不能超过2s,超过的话会直接挂起,就无法切换为布娃娃了” 这个是错误的,这个参数还真他娘的可以超过2秒。真正的用法是,如果你玩炸湿,那尽量控制在2s以内,如果是为了修正大人大斧头的问题,那需要在对应的dead动画里面将这个参数拉大,保证大于动画播放时间。

例如      
  1. [1.0, "death_chest", 4, 37, arf_blend_in_16|arf_make_custom_sound, pack2f(0.9, 0.0), (0,0,0), 0.5],</font>
复制代码

arf参数后面的三个参数就对应了4.6-4.8


二,anim文件结构和一些参数说明
  1. amf_priority_jump           = 2
  2. amf_priority_ride           = 2
  3. amf_priority_continue       = 1
  4. amf_priority_attack         = 10
  5. amf_priority_cancel         = 12
  6. amf_priority_defend         = 14
  7. amf_priority_defend_parry   = amf_priority_defend + 1
  8. amf_priority_throw          = amf_priority_defend + 1
  9. amf_priority_blocked        = amf_priority_defend_parry
  10. amf_priority_parried        = amf_priority_defend_parry
  11. amf_priority_kick           = 33
  12. amf_priority_jump_end       = 33
  13. amf_priority_reload         = 60
  14. amf_priority_mount          = 64
  15. amf_priority_equip          = 70
  16. amf_priority_rear           = 74
  17. amf_priority_striked        = 80
  18. amf_priority_fall_from_horse= 81
  19. amf_priority_die            = 95</font>
复制代码

  这些是anim的优先级,高优先级的anim会打断低优先级的anim的播放,比如die,死亡的动画优先级是95,所以死亡会打断所有的其他动画,目前没发现有超过95的优先级,但是配合布娃娃延迟参数应该可以做一些炸湿类的小玩意
  需要注意amf_continue_to_next会暂时打破这个优先级的排列,应该是强制执行的。
  当然这里的优先级是你自己填数字也可以,amf只是一个方便检索的标识。

  1. horse_move = 10000
  2. combat     = 20000
  3. defend     = 35000
  4. blow       = 40000</font>
复制代码

  区间分段,和战团的anim_human搭配使用,该骨骼动画集成很多动作在里面,帧数过大,便于区分查找会用到该分段,例如  [1, "anim_human",combat+10, combat+50],

  1. attack_parried_duration = 0.6
  2. attack_blocked_duration = 0.3
  3. attack_blocked_duration_thrust = attack_blocked_duration + 0.3
  4. attack_parried_duration_thrust = attack_parried_duration + 0.1
  5. defend_parry_duration_1 = 0.6
  6. defend_parry_duration_2 = 0.6
  7. defend_parry_duration_3 = 0.8
  8. ready_durn     = 0.35
  9. defend_duration = 0.75
  10. defend_keep_duration = 2.0
  11. cancel_duration = 0.25</font>
复制代码
  一些播放时间的说明

  1. blend_in_defense = arf_blend_in_3
  2. blend_in_ready = arf_blend_in_6
  3. blend_in_release = arf_blend_in_5
  4. blend_in_parry = arf_blend_in_5
  5. blend_in_parried = arf_blend_in_3
  6. blend_in_walk = arf_blend_in_3
  7. blend_in_continue = arf_blend_in_1</font>
复制代码
  这个很特殊,试过很多方法,也差了不少资料,一直到现在我也没有确定这些arf的标签是干什么的,之前东海猜测过是控制结束帧的,我感觉应该不是,更应该是在当前播放的动画中加入一个动画,但是这个参数一直没搞明白。

然后是animlist正文,里面有几个点需要说明一下:
1,如果要添加新的anim,一定不能在中间直接插入,因为战团对于自带的anim的调用是硬编码的,和itm/trp/party等等不一样,如果排序变动会影响到后面所有anim的调用
2,新加anim可以直接写在 ### Unused human/horse animations startfrom here.后面,各留了一百个空位,但是human类的被婚礼之类的占用了一部分,也可以直接写在anim文件的最后。总之记得一点,不要打乱原条目的id!
3,一个anim里面可以写多个动作,播放时随机选取一个播放,所以攻击类动作的添加需要注意ready/release等前后帧的衔接,推荐直接复制上一部分的最后一帧作为第一帧
4,在第三条的情况下,如果使用了amf_use_cycle_period,会重复该动作,即动作的变换

三,分享讨论一下anim头文件中的一些总结

先说一下amf 动作优先级标识
amf_rider_rot_bow                        = 0x00001000 #限制骑手在马背上右转的角度,下面都差不多

amf_rider_rot_throw                      = 0x00002000
amf_rider_rot_crossbow                   = 0x00003000
amf_rider_rot_pistol                     = 0x00004000
amf_rider_rot_overswing                  = 0x00005000
amf_rider_rot_thrust                     = 0x00006000
amf_rider_rot_swing_right                 =0x00007000
amf_rider_rot_swing_left                  =0x00008000
amf_rider_rot_couched_lance               = 0x00009000
amf_rider_rot_shield                     = 0x0000a000
amf_rider_rot_defend                     = 0x0000b000
#以上都是限制骑手在马背上的上半身右转角度,限制范围各有不同

amf_start_instantly                        = 0x00010000 #立即开始播放,如正在播放其他动画会直接结束并播放此动画
amf_use_cycle_period                       = 0x00100000 #当一个anim里有多个动画并列的时候,重复该动作(正常情况下是随机播放其中之一)
amf_use_weapon_speed                       = 0x00200000 #武器速度会影响动画实际播放时间(例如装填瞄准)
amf_use_defend_speed                       = 0x00400000 #盾牌速度会影响动画实际播放时间
amf_client_prediction                      = 0x01000000 #联机用
amf_play                                   = 0x02000000#播放至最后一帧就结束
amf_keep                                     = 0x04000000 #播放完毕保持最后一帧直到有操作打破,和arf_cyclic一起使用会一直循环播放,有人说这个是循环播放,实际上不是
amf_restart                                = 0x08000000 #重新播放动画
amf_hide_weapon                            = 0x10000000 #播放时隐藏武器
amf_client_owner_prediction                = 0x20000000 #联机用
amf_use_inertia                            = 0x40000000 #运动速度(惯性)会影响动画实际播放时间
amf_continue_to_next                       = 0x80000000 #当前动画结束时,直接播放下一个动画

然后是acf类动作功能标识

acf_synch_with_horse         = 0x00000001 #同步骑手和坐骑
acf_align_with_ground        = 0x00000002 #将动画的纵轴与地面法线对齐(即播放时不会拖离地面)

#下面三条疑似优先级的强制执行可以保证动作一定会播放出来,不会因为骑马或者其他原因上下部分受到影响,以及应该还有enforce_upperbody?因为我在t社那边论坛看到了,或许是因为版本更新被取消了?
acf_enforce_lowerbody        = 0x00000100 #让动画始终在下半身播放,即使被调用的范围是上半身
acf_enforce_rightside        = 0x00000200 #实际效果是强制在右半侧播放,且会调整视角,视野内会有右手出现(例如很多武器的单手蓄力状态)
acf_enforce_all              = 0x00000400 #将动画在骨骼的所有部分上播放(上下两部分)

acf_parallels_for_look_slope= 0x00001000 #动画启用俯仰视角,即该动作虽然条目里面只写了一段动画,但是添加标签后会将条目内的动画作为平时视角的动画,在brf中平视动画之前100帧起会作为俯视视角动画,平视动画之后100帧起会作为仰视视角动画
例如defend_shield_parry_1
  1. ["defend_shield_parry_1", acf_parallels_for_look_slope|acf_anim_length(100), amf_priority_defend_parry|amf_play|amf_restart|amf_rider_rot_shield,
  2.    [defend_parry_duration_1, "anim_human", defend+121, defend+130, arf_blend_in_1],</font>
复制代码
起始帧为defend+121, defend     = 35000
正常的是35121,俯视视角是35021,仰视视角是35221,在brfanim_human中我们在对应的帧数可以对比看到三种视角,截图丢最后。

acf_lock_camera              = 0x00002000 #锁定cam在动画play的过程中不会移动
acf_displace_position        = 0x00004000 #需要配合偏移坐标 (x,y,z)   x右左  y前后  z上下,按照我的经验,每个单位量为3dmax中一格,注意该参数是动画播放完毕时相对于播放前的位置偏移量,如果你整个动画是飞起来又落地,那实际上是没有这个z轴上的位移的。如果你到你动画有位移但是实际代码里面没写这个位移相关的参数和flag,那么在动画结束后会瞬移到动画开始时的位置。
acf_ignore_slope             = 0x00008000 #动画过程不考虑倾斜角度
acf_thrust                   = 0x00010000 #刺击
acf_right_cut                = 0x00020000 #右攻击
acf_left_cut                 = 0x00040000 #左攻击
acf_overswing                = 0x00080000 #上劈
#下面三条常用于瞄准,有俯仰角度或旋转的攻击动作里面(rotrotate的缩写),但是实际最好用的还是acf_rot_vertical_bowsword这个有时候有点怪怪的,像是不生效,没用
acf_rot_vertical_mask        = 0x00300000 #垂直旋转,影响部位暂时不明,用在瞄准类动画上
acf_rot_vertical_bow         = 0x00100000 #垂直旋转,用在瞄准攻击类动画上,可以旋转俯仰角(例如上刺)
acf_rot_vertical_sword       = 0x00200000 #垂直旋转,用在瞄准类动画上,但会影响头部和右肩骨骼(疑似有问题,会影响实际效果)

最后是arf 动作序列标识
#arf_make_walk_sound和arf_make_custom_sound播放声音。
#与pack2f或pack4f配合使用
#括号内参数是开始播放声音和结束播放声音的进度
#播放的声音内容应该是编码的,改不了,不能自定义播放内容就基本没什么大用了
arf_make_walk_sound          = 0x00000100 #走路声音,会自行播放人或马的走路声音(会参考是否在水中)
arf_make_custom_sound        = 0x00000200 #播放对应的声音(获取弹药,装弹,摔落等)

arf_stick_item_to_left_hand  = 0x04000000 #物品移动到左手(比如火枪装弹)有时候会突然移回右手
arf_cyclic                   = 0x10000000 #循环播放
arf_use_walk_progress        = 0x20000000 #使用当前的前进动作方向
arf_use_stand_progress       = 0x40000000 #使用当前的站立动作方向
arf_use_inv_walk_progress    = 0x80000000 #同上,但是反向
这三条之前瞎几把猜的,现在更正
arf_use_walk_progress        = 0x20000000 #自动适配并应用当前的步行动作的进度
arf_use_stand_progress       = 0x40000000 #自动适配并应用当前的站立动作的进度
arf_use_inv_walk_progress    = 0x80000000 #同上,但是反向

暂时写的就这么多,一直没有系统地整理,可能漏了一些小姿势,后面记起来再补充吧。也算是对这么长时间anim研究的一点交代,希望可以尽快找到志同道合的朋友一起做解侠

俯视视角

俯视视角
平视视角.png
仰视视角.png

评分

参与人数 1第纳尔 +20 互助 +2 魅力 +2 收起 理由
agjib + 20 + 2 + 2 您的帖子很有价值!

查看全部评分

鲜花鸡蛋

djman  在2023-10-30 23:27  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
杰喵喵  在2023-10-30 08:57  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
杰喵喵  在2023-10-30 08:57  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
解解解解解解解解解解解解解解解解解解

17

主题

633

回帖

345

积分

见习骑士

Rank: 3

UID
3102512
第纳尔
2385
精华
0
互助
30
荣誉
0
贡献
0
魅力
74
注册时间
2019-9-6

骑砍中文站APP会员勋章战团正版勋章霸主正版勋章

鲜花(55) 鸡蛋(0)
 楼主| 发表于 2023-10-29 23:38:25 | 显示全部楼层
就因为写了github所以就一直发不出去,还吞我一大半内容
解解解解解解解解解解解解解解解解解解

42

主题

94

回帖

221

积分

见习骑士

Rank: 3

UID
3199602
第纳尔
1162
精华
0
互助
36
荣誉
0
贡献
1
魅力
227
注册时间
2020-9-4
鲜花(60) 鸡蛋(0)
发表于 2023-10-29 23:54:15 | 显示全部楼层
救世啊。

0

主题

59

回帖

18

积分

随仆

Rank: 1

UID
3346943
第纳尔
519
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2022-4-8
鲜花(2) 鸡蛋(0)
发表于 2023-10-30 07:38:18 来自手机 | 显示全部楼层
给大佬递茶来自: Android客户端

31

主题

210

回帖

187

积分

见习骑士

Rank: 3

UID
2462463
第纳尔
1587
精华
0
互助
23
荣誉
0
贡献
0
魅力
83
注册时间
2015-3-3
鲜花(58) 鸡蛋(0)
发表于 2023-10-30 08:37:32 | 显示全部楼层
是大佬!!!!!

16

主题

108

回帖

197

积分

见习骑士

Rank: 3

UID
3304622
第纳尔
690
精华
0
互助
26
荣誉
3
贡献
0
魅力
158
注册时间
2021-12-28
鲜花(31) 鸡蛋(0)
发表于 2023-10-30 08:57:11 | 显示全部楼层
很好的贴子,学习学习

17

主题

847

回帖

399

积分

子爵[版主]

汉[Han]
联机ID:Han_DongHai

Rank: 7Rank: 7Rank: 7

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

第十届战团中国联赛征战勋章汉匈决战正版勋章战团正版勋章霸主正版勋章骑士美德之谦恭勋章[杰出会员财富勋章]骑士美德之奉献勋章

QQ
鲜花(40) 鸡蛋(0)
发表于 2023-11-2 09:37:44 | 显示全部楼层

0

主题

25

回帖

8

积分

平民

Rank: 1

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

骑砍中文站APP会员勋章

鲜花(10) 鸡蛋(0)
发表于 2023-11-2 10:45:18 来自手机 | 显示全部楼层
太厉害了,学习学习了来自: Android客户端
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

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

GMT+8, 2024-12-23 01:52 , Processed in 0.147074 second(s), 33 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

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