Skip to content

Add glitch effect and clean up code#43

Merged
Gu-ZT merged 2 commits into
Anvil-Dev:dev/26.1from
ZhuRuoLing:feat/1.26.1/glitch
Jun 17, 2026
Merged

Add glitch effect and clean up code#43
Gu-ZT merged 2 commits into
Anvil-Dev:dev/26.1from
ZhuRuoLing:feat/1.26.1/glitch

Conversation

@ZhuRuoLing

Copy link
Copy Markdown
Contributor

概述

本 PR 为结构 Picture-in-Picture 渲染新增可选的 glitch 后处理效果,并补充对应的渲染管线、参数 UBO 和片元着色器。同时清理了相关代码中的未使用 import。

变更内容

  • 新增 GLITCH 后处理渲染管线和 core/glitch 片元着色器
  • 新增 GlitchPostEffect,用于对输入纹理应用基于时间的扫描线、水平抖动和蓝色染色效果
  • 新增 GlitchParametersUbo,向 shader 传递输入尺寸和游戏时间参数
  • ALRPostEffects 中初始化并暴露 glitch 后处理实例
  • 为结构 PIP 渲染增加 glitched 开关,并在启用时将结构渲染结果经过 glitch 后处理
  • 调整结构 PIP 状态中的渲染边界为整数坐标,适配后处理尺寸计算
  • 更新 GuiRenderExtras.submitStructure 接口以传递 glitch 开关
  • 在 GUI 测试屏幕中启用结构预览的 glitch 效果
  • 清理新增功能中遗留的未使用 import

兼容性

  • 现有不传入 glitch 开关的 submitStructure 便捷调用保持默认非 glitch 行为
  • 新增参数会影响直接调用完整 submitStructure 重载的代码,调用方需要显式传入是否启用 glitch
  • 结构 PIP 坐标从浮点边界调整为整数边界,渲染尺寸计算会以整数像素为准
  • 未启用 glitch 时,结构 PIP 渲染逻辑保持原有路径

@ZhuRuoLing

Copy link
Copy Markdown
Contributor Author

Code Review Summary

Verdict: Reviewed 💬 (0 critical, 1 warning, 3 suggestions)

PR: #43 — Add glitch effect and clean up code
Author: @ZhuRuoLing
Files changed: 10 (+346 / -46)

🔴 Critical

None found.


⚠️ Warnings

  • GlitchPostEffect.java:92-93 — 调试标签是复制粘贴错误:glitchParameterUBO 的 debug label 写的是 "GlitchPostEffect TransformUBO",但应该是 "GlitchPostEffect GlitchParametersUBO"。这会使 GPU 调试器(RenderDoc 等)中显示错误的标签名。

💡 Suggestions

  • GlitchPostEffect.java:41TextureTarget("Glitch Result", 854, 480, false) 硬编码了初始大小。process() 中的 resize 逻辑只放大不缩小if (width > glitchOutputTarget.width || height > glitchOutputTarget.height))。如果先用大尺寸渲染,后续小尺寸调用会保持大 target,造成少量 VRAM 浪费。可考虑初始化为 (1, 1) 或增加 shrink 路径。

  • StructurePipRenderer.java:192-194 — UV 裁剪 (u1 = width / targetWidth, v1 = height / targetHeight) 表明 glitch output target 可能比实际输入大。glitch shader 实际上处理了超出输入区域的部分像素,这些像素最后被 UV 裁剪丢弃。这是极小量性能浪费,但在高频 PIP 渲染中可考虑将 resize 条件改为 if (width != glitchOutputTarget.width || height != glitchOutputTarget.height) 避免浪费。

  • GlitchPostEffect.java:98uGameTime /= 10f 除 10 让动画速度固定。在高分辨率或宽高比不同的 PIP 上,扫描线的移动速度感知可能不同。可考虑将速度系数暴露为参数或与 InSize 挂钩。


✅ Looks Good

  • 架构清晰 — glitch 后处理效果完全自包含:独立 UBO、Pipeline 注册、Fragment Shader,低耦合高内聚
  • 向后兼容 — 通过保留 submitStructure() 便捷重载(传入 false 作为 glitched),现有调用方无需修改
  • float→int 坐标清理StructurePipRenderingState 从 float 坐标改为 int,移除了冗余的 Mth.floor() 重写,简化了边界计算
  • Shader 质量glitch.fsh 注释清晰,扫描线 + 水平抖动 + 蓝色染色三层效果层次分明,time-based 动画平滑
  • 代码清理BloomPostEffect 中的 debug label 统一化、GuiTestScreen 未使用 import 清理都是良好的代码卫生习惯
  • 框架复用 — 正确使用了现有的 BufferObject/BufferLayout/TransformsUbo 体系

Reviewed by Hermes Agent

@Gu-ZT Gu-ZT merged commit eccdc6d into Anvil-Dev:dev/26.1 Jun 17, 2026
16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants