Skip to content

修复MotionBlur的Old模式产生的单行像素消失问题#128

Closed
UknownPerson wants to merge 1 commit intoFPSMasterTeam:mainfrom
UknownPerson:main
Closed

修复MotionBlur的Old模式产生的单行像素消失问题#128
UknownPerson wants to merge 1 commit intoFPSMasterTeam:mainfrom
UknownPerson:main

Conversation

@UknownPerson
Copy link
Copy Markdown
Contributor

772d392cc2c9192ddec58dd07c5c84b9
QQ20260412-125525.mp4

Copy link
Copy Markdown
Member

@gaoyu06 gaoyu06 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Codex review:

我建议先不要合这个 PR,原因有两点。

  1. [medium] src/main/java/top/fpsmaster/features/impl/render/MotionBlur.java:160-163
    这次提交在修 framebuffer 坐标系的同时,把历史帧混合那一层的 � 翻转也改掉了。原来这里是 �f, 1f, 1f, 0f,提交后变成了 �f, 1f, 0f, 1f。结合 drawTexturedRectNoBlend() 里顶点和 UV 的对应关系,这会直接改变 �lurBufferMain 的 Y 方向采样,不属于“单行像素缺失”的修复范围,而且很可能让旧帧拖影方向出错。

  2. [low-medium] src/main/java/top/fpsmaster/features/impl/render/MotionBlur.java:147
    GlStateManager.disableLighting() 被误吞进注释里了:
    // GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHAGlStateManager.disableLighting();
    这不是格式问题,而是状态设置真的没执行。这里原实现是显式关 lighting 的;现在丢掉之后,如果上游渲染路径遗留了 lighting 状态,这个 fullscreen composite 结果就可能被错误调制。

我认同把投影和 quad 尺寸改成 framebuffer 像素坐标,这部分看起来就是这次 bug 的正解;但上面两处不应该一起进。建议保留 framebuffer 坐标修复,只回退历史帧 draw 的 � 翻转,并把 disableLighting() 补回去。

Signed-off-by: Codex

@UknownPerson
Copy link
Copy Markdown
Contributor Author

幽默的是,这个修复方案我是用codex写的
很抱歉,我并没有仔细审查修改的部分,我的模糊倍数开的也比较小,并没有发现异常,我将关闭这个请求并重新提交pr

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