dump ②
假定你要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




by xqfa · 来自踩蘑菇PC端 发布于 2026-07-13
若有附件,打赏后可直接下载 赠人玫瑰 手留余香
默认
最新
1