假定你要dump3.5上半剧情的清宵,那时场景中有多个人物在场,会有多份形态键数据,造成WWMIT提取报错。或者dump某个npc,也很难避免dump多份形态键数据的问题(因为玩家通常在场)

由于wwmit在FrameAnalysis文件夹中获取一份形态键数据是通过cs u0 u1输入输出绕来绕去的,我实在是不想改。
所以转向自己分辨出哪份形态键数据是正确的
dump后手动区分
如下,可以观察到cs hash值的周期规律,就将cs这样分组,一批批放到文件夹里提取试试

可以通过vb6确认是哪一组,如下能够确认是13-17这一组,那就把其他cs全部删掉

dump前设置
问题一:如何分组?
- 注意到,一个人物的一组形态键cs总是54d648ecf7b56c38、cfa3cff14d6c4072、9bf4420c82102011、7a8396180d416117
- 经过多个版本观察,这套hash暂时是稳定的
- 在第一个cs54d648ecf7b56c38中设置只进入一次的条件语句,用变量接着控制后面连续的3个,不是第一次时则关闭dump
问题二:如何确定是哪组?
- 注意到,一个人物的一组cs中的第一个cs-u0与目标vb6是相同的
- 问题在于cs-u0在一帧的顺序在vb6前面,导致无法同帧获取
- 解决办法也很简单,照样获取vb6指针到变量(XXMI dll新语法),只要下一帧不重置那个变量就可以了
以下是ini示例,hash值为3.5版本的IRIS
[Hunting]
; 覆盖原全局dump设置
analyse_options = 0
[Constants]
global $first_cs
global $cs_group
global $vb_6
[Present]
; 每帧开始时重置
post $first_cs = 1
post $cs_group = 0
[TextureOverride_target_vb0]
hash = f2afeadf
; 在dump之前赋值,$vb_6没有在每帧开始时重置
; 先判断vb6是否存在,因为有些component是没有形态键的
if vb6 !== -0.0
$vb_6 = @vb6
endif
filter_index = 1.1
; shapekey cs 这一组hash值很多个版本都没有变了,暂时认为是稳定的
[ShaderOverride_54d648ecf7b56c38]
hash = 54d648ecf7b56c38
; $vb_6在之前的帧就被赋值
if $first_cs == 1 && @cs-u0 == $vb_6
analyse_options = dump_rt dump_tex dump_cb dump_vb dump_ib buf txt dds
$first_cs = 0
$cs_group = 1
else
$cs_group = 0
endif
[ShaderOverride_cfa3cff14d6c4072]
hash = cfa3cff14d6c4072
if $cs_group == 1
analyse_options = dump_rt dump_tex dump_cb dump_vb dump_ib buf txt dds
endif
[ShaderOverride_9bf4420c82102011]
hash = 9bf4420c82102011
if $cs_group == 1
analyse_options = dump_rt dump_tex dump_cb dump_vb dump_ib buf txt dds
endif
[ShaderOverride_7a8396180d416117]
hash = 7a8396180d416117
if $cs_group == 1
analyse_options = dump_rt dump_tex dump_cb dump_vb dump_ib buf txt dds
endif
[ShaderRegexAllPS]
shader_model = ps_5_0
if vb0 == 1.1
analyse_options = dump_rt dump_tex dump_cb dump_vb dump_ib buf txt dds
endif



闽公网安备35010302000678号


















































