一、核心 Section 运行关系与优先级

graph TD A[Constants] -->|初始化全局变量| B[Key] B -->|按键事件触发| C[CommandList] D[TextureOverride] -->|纹理匹配时执行| C E[ShaderOverride] -->|着色器匹配时执行| C F[Present] -->|每帧结束时执行| C C -->|变量传递| G[ShaderRegex] G -->|注入修改| H[GPU执行] style A fill:#f9f,stroke:#333 style B fill:#cff,stroke:#333 style C fill:#ffc,stroke:#333 style D fill:#fcc,stroke:#333 style E fill:#cfc,stroke:#333 style F fill:#ccf,stroke:#333

1. Section 执行优先级

顺序 Section 类型 触发条件 执行频率 变量作用域
1 [Constants] 初始化时 一次 全局持久化
2 [Key_*] 按键事件 事件驱动 全局
3 [TextureOverride_*] 纹理哈希匹配 按需 局部+全局
4 [ShaderOverride_*] 着色器哈希匹配 每绘制调用 局部+全局
5 [CommandList_*] 被显式调用时 按需 局部(可转全局)
6 [Present] 帧结束(present调用) 每帧 全局
7 [ShaderRegex] 着色器加载时 着色器初始化时 着色器寄存器级别

2. 变量传递机制

变量类型 声明方式 作用域 生命周期 示例
全局变量 global $var = value 所有Section 游戏进程 global $censor = 0
持久化全局变量 persist global $var = value 所有Section 跨游戏启动 persist global $cfg
局部变量 local $temp = value 当前CommandList CommandList内 local $backup = x10
寄存器变量 x217 / y172 GPU着色器内 绘制调用 x217 = $h/360.0
正则捕获变量 ${group_name} ShaderRegex替换块内 替换操作期间 ${header}

二、3DMigoto 运行时序架构

sequenceDiagram participant Game participant 3DMigoto participant GPU Game->>3DMigoto: CreateTexture/Shader 3DMigoto->>3DMigoto: 计算哈希值 alt 纹理哈希匹配 3DMigoto->>[TextureOverride]: 执行关联CommandList else 着色器哈希匹配 3DMigoto->>[ShaderOverride]: 执行CommandList 3DMigoto->>[ShaderRegex]: 汇编代码修改 end Game->>3DMigoto: DrawCall 3DMigoto->>GPU: 注入修改后的着色器 3DMigoto->>GPU: 绑定覆盖的纹理 Game->>3DMigoto: Present() 3DMigoto->>[Present]: 执行帧末逻辑 3DMigoto->>GPU: 提交绘制命令 loop 每帧 GPU-->>3DMigoto: 寄存器状态反馈 3DMigoto->>[CommandList]: 条件执行逻辑 end

三、着色器修改流程

graph TB A[游戏创建着色器] --> B[3DMigoto截获字节码] B --> C[反汇编为文本] C --> D{匹配ShaderRegex?} D -- Yes --> E[正则替换] D -- No --> F[保留原始] E --> G[重新汇编为字节码] G --> H[替换游戏着色器] H --> I[GPU执行修改版]