- 好友
- 12
- 在线时间
- 486 小时
- 最后登录
- 2025-9-13
子爵[版主]
  
- UID
- 2893127
- 第纳尔
- 14867
- 精华
- 0
- 互助
- 93
- 荣誉
- 21
- 贡献
- 325
- 魅力
- 1384
- 注册时间
- 2017-11-5
 鲜花( 435)  鸡蛋( 0)
|
本帖最后由 vegetto 于 2025-8-1 22:40 编辑
之前讲了骑砍的2D动画系统(利用item/prop/界面overlay mesh各自的set material切换材质贴图),以及顶点动画系统(利用prop/spawned item 利用deform系列的op制作超越战团动作细节的动画,如履带滚动、降落伞、衣服头发飘动、整体怪物载具动画、双截棍等动态武器等等)。
而这次我要介绍一个更加革命性的自研动画系统,add mesh部件换装动画系统。
基本原理:通过agent equip item + cur_item_add_mesh 两个基本操作op组合,形成类似顶点动画效果的复杂模型动画。
核心配套处理:
(1)第一步
在module_string文件注册类似如下字符串
("amjb", "a{reg21}"),
作用是利用reg的可操作性,进行加减乘除的数字变化,使得str_amjb可以动态注册a1,a2,a3.。。。。。。。。。。。。。。a1000000等等无穷无尽的不同字母带数字后缀的字符串。
(2)第二步
将类似顶点动画的素材分解成各帧的obj模型导入BRF(最佳方式可以先做md3格式动画,导入brf后进行分解,分解时自动可以加前缀+数字命名);
将brf中的动画序列的静态模型以a1,a2,a3.。。。。。。。。。。。。。。。。。。。。a1000000等等 形成(字母+数字)后缀的命名方式。
(3)第三步
brf导入一个最简单的模型,比如四面体,然后贴图材质引用全透明,即这种情况游戏中看不见模型形态。
假设这个通用底模在brf里命名叫proprole0,作为衣服绑好骨。
(4)第四步
module_items文件注册itm_proprole0的id,并引用proprole0作为基础模型。加入如下item初始化触发器。
["proprole0", "proprole0", [("proprole0", 0)], itp_type_body_armor|itp_covers_legs|itp_doesnt_cover_hair|itp_can_penetrate_shield|itp_fit_to_head|itp_offset_lance|itp_covers_head|itp_couchable|itp_covers_beard|itp_no_pick_up_from_ground, 9223388534117761038, 250, weight(10.000000)|abundance(100)|difficulty(10)|head_armor(0)|body_armor(0)|leg_armor(0), imodbits_axe, [
(ti_on_init_item, [
(store_trigger_param_1, ":var_0"),
(store_trigger_param_2, ":var_1"),
(try_begin),
(agent_get_slot, ":var_2", ":var_0", 602),
(assign, reg21, ":var_2"),
(str_store_string, s21, "str_amjb"),
(1964, s21),
(val_add, reg21, 1000000),
(str_store_string, s21, "str_amjb"),
(1964, s21),
(val_add, reg21, 1000000),
(str_store_string, s21, "str_amjb"),
(1964, s21),
(val_add, reg21, 1000000),
(str_store_string, s21, "str_amjb"),
(1964, s21),
(val_add, reg21, 1000000),
(str_store_string, s21, "str_amjb"),
(1964, s21),
(try_end),
]),
]],
###############以上代码,部分玩家应该知道,我也是txt做的各种mod。
###############我以上示例add mesh 连用了5次,意味着示例中需要5个部件才能展示这个动态模型的一个单帧模型全貌,事实上你可以用1次或连用其他N次,取决于你要附着的模型本身分成几个mesh(由贴图数量决定),所以这样还挺有排列组合的意味,或者你也可以预留空位,就是add mesh多次,然后部分不用的部分附着一个全透明的空模型代替。
1964这个op操作号就是cur_item_add_mesh。
一般需要和str_store_string组合使用,因为引用的字符串需是s21这种形式,而不是str_xxx这种。
由于str_amjb=a{reg21},前已设置,那么我们操作reg21的加减乘除变化,利用agent 602号slot(我添加作为控制动画帧数的slot,在MT中另外有触发器控制其变化)。
这样每次人物刚穿着这个衣服proprole0,就会触发添加部件的cur_item_add_mesh指令。
比如agent 602号slot如果取值取0,则会给衣服proprole0添加brf中装载的名称为a0,a1000000,a2000000,a3000000,a4000000这四个模型部件(想象力不到,则参考我附件图片的brf命名情况,我把一个mmd女性动画的头发、脚等部位分成多个同一动画序列的静态各帧mesh)。
但前期工作导入brf中a0,a1000000,a2000000,a3000000,a4000000模型时,需按照部件需要与proprole0搭配的位置摆放好位置,然后也绑定战团身体骨骼admon块,否则无骨骼衣服身体在战团里看不到模型。
为什么要a0,a1000000,a2000000,a3000000,a4000000绑定admon块骨骼,因为这个是腰部的骨骼,绑定模型后人物做大部分动作不会导致模型扭曲,这样切换模型mesh部件时可以显示其原汁原味的形态,而不会遭受战团骨骼动作的拉伸扭曲。
然后类似的agent 602号slot如果取值变成1,那么部件就变成a1,a1000001,a2000001,a3000001,a4000001.
接下来问题来了,大家关注过这个cur_item_add_mesh看注释知道,这个指令只能用于item初始化,误以为在战场只有一次性的效果,无法形成动态的变化。
其实不然,那看接下来第五步
(5)第五步
在module_mission_templates创建 类似0,0,0条件的战场触发器。
循环agent,对需要使用换装动画的agent不断触发agent unequip item/agent equip item操作,使得agent反复卸载重新装备同一个装备,即这个proprole0底模,并用我注册的agent slot602号记录装备重置的次数,并根据agent的行为事件及想要执行的动作事件(比如做飞龙喷火动作),引发agent slot602号的改变及在某一值区间变化,根据这个值区间及特定值,触发事件,根据特定事件,反馈造成值的改变,进而被itm_proprole0的ti_on_init_item初始化触发获取,因为不断重新装备proprole0这件衣服,重新装备的瞬间,itm_proprole0的ti_on_init_item又会重置运行一次,这样循环往复,就会形成类似顶点动画的“幻灯片效果”。
(6)其他准备:如果完全用衣服模型替换战团人物外形做怪物,请准备一些手套、头盔、鞋子的屏蔽模型,对相关agent进行强制equip,避免战团原有头、手脚漏泄。
具体module_mission_templates后续再附上,我后面试验的mod改动太复杂,删减精简出来代码太麻烦。反正原理就是这个原理。
相关试验mod就是我最新的西游、变形金刚、英雄联盟、伍六七改。参考视频如下
对于伍六七,我用这个方法重做了魔刀千刃的效果,这样做的优势是,避免了人移动速度快时,用prop做会导致出现,马在前面跑,prop动态武器在后面追的情况。
也就是你也可以底模不像proprole0案例做无形模型,可以做一个有形的衣服,然后动态附着魔刀千刃破碎重组的动态动画分解的各帧模型作为mesh部件,形成动态武器的效果。
这样做不仅克服了过去prop做特殊动态武器时的游戏运行负担,而且可以避免agent与prop的双循环复杂写法,直接通过换装的方式仅仅利用agent循环就把动态武器和人绑定在一起。
----
此外这个操作用于同一个人换装加mesh部件就是动画效果,一人动态千面,批量使用于不同单位,如在itm_proprole0的ti_on_init_item初始化加入对troop id兵种的判断,添加不同mesh部件,就变成“千人千面”效果,两者一结合,就变成“千人动态千面”,让上百人变成飞龙等特殊动画怪物,或者拿着动态的武器(双截棍、滚动的电锯),加会动的翅膀(衣服绑定翅膀部件各帧换装切换)。
这些情况下,你仅仅只需要注册一个item id就可以完成一个人或多个人形态的千变万化,72变。
甚至于,你可以考虑战团动作和换装形成的帧动画进行混搭,你可以战团动作做着做着,变成一滩血水的动画,再恢复人形继续做战团动作,或化身飞龙动画又变回人类。
又甚至于,你可以做乳摇效果,比如利用mmd模型生成乳摇的Tpose女性人物,然后导出md3,到brf进行绑骨后分解静态模型mesh,利用我如上的方法,就可以形成有乳摇动画的性感女神。
总之,如果你能感受到“部件换装动画”的强大前景,对战团无疑也是一种新的助力发展,又能做很多新东西。后面有空我再补全我的代码示例。
|
-
-
|