Add gravitational lensing effects and support#3812
Conversation
- 在 mixin 配置中注册 PostChainAccessor 访问器 - 添加客户端配置选项控制引力透镜效果开关和参数 - 在 BlackHoleBlockEntity 中注册/注销客户端引力透镜管理器 - 实现 GameRendererMixin 加载透镜着色器效果 - 在 LevelRendererMixin 中注入引力透镜后期处理逻辑 - 添加 ModShaders 管理引力透镜着色器链 - 实现 RenderState 检查透镜效果启用状态 - 添加 gravitational_lens.fsh 片段着色器实现引力透镜算法 - 创建 gravitational_lens.json 后处理配置文件 - 实现 GravitationalLensManager 管理黑洞屏幕投影计算 - 创建 PostChainAccessor Mixin 接口访问后处理通道
- 在配置中新增 LensingShape 枚举类型,支持 CIRCULAR 和 CUBIC 模式 - 添加立方体模式相关的配置选项:cubicEventHorizonRadius 和 lensPerspectiveScale - 在着色器中实现多边形透镜计算函数和射线多边形交点算法 - 新增顶点投影和凸包计算逻辑以支持立方体形状渲染 - 修改渲染管线以传递多边形顶点数据到着色器 - 实现透视缩放和距离计算以改善视觉效果 - 更新均匀变量设置以支持新的着色器参数
- 在客户端配置中添加 cubicPolygonScale 参数用于控制立方体剪影放大比例 - 更新英语和英语倒置语言文件以支持新的配置选项 - 修改重力透镜着色器将距离转换回UV单位使重力强度与多边形大小成正比 - 调整立方体投影计算逻辑以使用多边形缩放参数 - 更新渲染层混合以传递多边形缩放配置值到透镜管理器
- 在客户端配置中添加 cubicPolygonScale 参数用于控制立方体剪影放大比例 - 更新英语和英语倒置语言文件以支持新的配置选项 - 修改重力透镜着色器将距离转换回UV单位使重力强度与多边形大小成正比 - 调整立方体投影计算逻辑以使用多边形缩放参数 - 更新渲染层混合以传递多边形缩放配置值到透镜管理器
- 将引力透镜相关配置项整合到 GravitationalLens 类中 - 移除旧的独立配置字段并创建新的嵌套配置结构 - 更新着色器程序中的参数访问路径 - 修改渲染状态检查逻辑以使用新的配置结构 - 更新英语和反向显示语言文件中的配置键名 - 移除不再使用的独立透镜配置项的翻译条目
- 将黑洞数量从4个增加到8个,添加了BlackHole5-8的相关uniform变量 - 更新了getHolePos和getHoleDist函数以支持8个黑洞的坐标和距离获取 - 修改了循环范围从4次迭代扩展到8次以处理更多黑洞 - 在JSON配置文件中添加了新黑洞的参数定义 - 优化了世界坐标到屏幕坐标的转换逻辑,移除背面点镜像并返回null - 改进了黑洞收集逻辑,只处理屏幕上的黑洞并按距离排序 - 添加了屏幕边缘检测以跳过远离屏幕中心的黑洞 - 在LevelRendererMixin中同步更新了黑洞数量限制和循环范围
- 在客户端配置中添加 lensDirection 参数用于控制透镜方向 - 更新着色器程序将多个单独的黑洞性质统一为 vec4 数组 - 实现凹凸透镜效果:正值为凸透镜(向中心吸引),负值为凹透镜(远离中心) - 修改事件视界渲染逻辑仅对凸透镜生效 - 更新投影矩阵计算以支持透镜方向参数 - 添加新的本地化字符串资源用于透镜方向配置项
- 在 GravitationalLensManager 中添加白洞位置客户端缓存 - 实现白洞注册和注销方法 - 修改 collectVisibleBlackHoles 方法以同时收集黑洞和白洞数据 - 区分黑洞为凸透镜效果(正方向),白洞为凹透镜效果(负方向) - 更新 LevelRendererMixin 以使用新的双方向透镜参数 - 在 WhiteHoleBlockEntity 中添加客户端侧的透镜管理器注册 - 重构收集逻辑到独立的 collectFromSet 辅助方法
- 更新注释说明仅对屏幕内的凸面黑洞渲染事件视界 - 添加检查跳过屏幕外黑洞中心的事件视界渲染 - 避免屏幕外黑洞导致的渲染异常
Reason: Security scan — [MEDIUM] Variation selector characters detected: Content contains Unicode variation selectors (VS1-256). These are commonly used in emoji sequences but may indicate steganographic encoding or obfuscation Reply |
Reason: script execution via -e/-c flag Reply |
Reason: script execution via -e/-c flag Reply |
|
现在已经拿到了所有必要的信息。让我来整理审查报告。 PR #3812 审查 — 添加引力透镜效果与支持PR 标题: Add gravitational lensing effects and support 范围: 15 个文件(9 Java + 5 JSON + 1 GLSL),5 个新文件,+443/-12 行 🔴 关键问题1. 文件末尾缺失换行符 — BlackHoleBlockEntity.java 和 WhiteHoleBlockEntity.java行 94 和 140 的 diff 以
|
Reason: script execution via -e/-c flag Reply |
代码审查摘要 — PR #3812标题: Add gravitational lensing effects and support for cubic shapes 🔍 主要变更概述为黑洞和白荷添加引力透镜后期处理效果:
🟢 良好设计
|
| 检查项 | 结果 |
|---|---|
| 调试语句/遗留 TODO | 未发现 |
| 密钥/凭据泄露 | 未发现 |
| 合并冲突标记 | 未发现 |
| 语言文件键一致性 | en_us ↔ en_ud 13 个 key 完全匹配 ✓ |
| 着色器 JSON 结构完整性 | 两份 JSON 均合法解析 ✓ |
| Mixin 注册 | PostChainAccessor 已在 anvilcraft.mixins.json 注册 ✓ |
| 配置文件完整性 | 所有翻译 key 均有对应配置字段 ✓ |
| 结束换行符 | 两处 No newline 均为改前已有,非本 PR 引入 ✓ |
📋 总结
本 PR 实现了一个完整的引力透镜后期处理管线,从方块位置注册 → 客户端缓存 → 投影计算 → 着色器渲染,链路完整。着色器物理模型简洁有效,JSON 配置结构完整,Mixin 注入点合理。主要建议集中在边缘抗锯齿和命名清理这类非功能性改进上。
结论:🟢 评论 — 无阻塞性问题,建议按上述意见做视觉和代码质量微调后可合并。
由 Hermes Agent 自动审查
- 将BlackHole数组从8个元素扩展到256个元素以支持更多透镜 - 使用UBO(Uniform Buffer Object)替代逐个uniform设置提升渲染性能 - 添加GL30/GL31依赖以支持缓冲区操作 - 实现统一缓冲区绑定机制减少GPU状态切换 - 移除JSON配置中的硬编码BlackHole数组定义 - 重构着色器程序绑定逻辑以正确处理UBO块索引
- 将事件视界遮罩计算从硬边缘改为平滑过渡效果 - 重命名黑洞收集方法为更通用的孔洞收集方法 - 更新渲染器中对孔洞收集方法的调用以支持黑白洞统一处理
- 在客户端配置中添加最大黑洞数量设置选项(范围2-256) - 更新英语和反向英语的语言文件以支持新配置项 - 修改渲染器以使用配置的最大黑洞数量替代硬编码值 - 将渲染逻辑中的固定256限制替换为可配置的最大值
|
现在我已经完整审查了所有变更。以下是审查结果: 代码审查摘要 — PR #3812: 添加引力透镜效果作者: Gu-ZT | 分支: render/1.21/1.6 → dev/1.21/1.6 结论: 评论(有 3 个需关注的问题) 🔴 关键
|
- 将引力透镜循环限制从 8 提升到 256 以支持更多黑洞 - 为 UBO 数据上传预分配 FloatBuffer 缓冲区以减少内存分配 - 添加 OpenGL 上下文丢失时的 UBO 重建逻辑 - 优化 UBO 更新流程以提高渲染效率
|
审查完毕。以下是完整分析。 代码审查摘要:PR #3812 — 引力透镜效果与支持结论:评论(无阻塞性问题,多为建议) 作者: Gu-ZT 变更概述此 PR 为黑洞/白洞方块添加了引力透镜后处理效果:
一行建议(可改进项,非阻塞)1. 🔶 GL 上下文丢失检测:
|
| 方面 | 评价 |
|---|---|
| 安全性 | 无硬编码凭据,无注入风险,纯客户端视觉效果 |
| 可配置性 | 完整配置 UI(@CollapsibleObject),所有参数可调,默认可关闭 |
| 语言文件 | en_us.json 与 en_ud.json 完美对称,key 完整无遗漏 |
| 着色器逻辑 | std140 布局正确,UV 坐标变换正确,凸/凹透镜模式逻辑清晰 |
| 代码结构 | GravitationalLensManager 职责单一,与 PostChain/UBO 代码分离清晰 |
| 错误处理 | try/catch 包裹 PostChain 加载,ModShaders.getLensChain() == null 早期返回 |
| 修复旧问题 | 顺手修正了 BlackHoleBlockEntity 和 WhiteHoleBlockEntity 缺失的 EOF 换行符 |
| 无调试残留 | diff 中无 TODO、FIXME、HACK、print 语句 |
总结
这是一个很干净的 PR。核心效果(引力透镜后处理 + UBO 数据传递 + 凸/凹透镜区分)实现正确,配置完整,安全性无虞。主要改进点是 GL 上下文丢失检测的健壮性——建议将 glIsBuffer 模式替换为更可靠的上下文监听方案,以避免少见驱动下的 UBO 失效。着色器循环上限的文档提示也能让用户更好地理解性能开销。
由 Hermes Agent 审查
- 添加anvilcraft$resetLensUbo方法用于重置镜头UBO句柄 - 简化镜头UBO缓冲区创建逻辑,移除冗余的glIsBuffer检查 - 在加载镜头效果时调用重置方法确保缓冲区正确初始化 - 添加适当的注释和抑制警告注解
Reason: Security scan — [MEDIUM] Variation selector characters detected: Content contains Unicode variation selectors (VS1-256). These are commonly used in emoji sequences but may indicate steganographic encoding or obfuscation Reply |
- 将GL相关的导入和UBO缓冲区管理代码移动到GravitationalLensManager类 - 在GravitationalLensManager中实现统一的UBO上传和状态重置方法 - 移除LevelRendererMixin中的UBO相关字段和处理逻辑 - 更新ModShaders中对UBO重置方法的调用引用 - 使用新的管理类方法处理透镜效果的均匀缓冲区对象 - 简化渲染流程中的黑洞数据上传实现
|
审查所需的分析已经完成。以下是完整审查意见。 代码审查摘要 — PR #3812结论:评论(建议,无阻塞性问题) PR 范围: 添加黑洞/白洞的引力透镜后处理视觉效果。包括着色器、UBO 数据传输、客户端黑洞位置管理、配置选项及语言文件。 🟢 整体架构评价
|
|
Now I have a complete picture. Here's my review: 代码审查摘要:PR #3812 — 引力透镜效果结论:评论(新功能,实现质量高,无阻塞性问题,仅有优化建议) 范围: 15 个文件(9 Java + 5 JSON 配置文件 + 2 语言文件),其中 5 个新增文件。纯客户端后处理着色器功能。 🟢 主要更改
💡 建议
✅ 看起来不错
总结这是一个实现质量很高的新功能 PR。核心的引力透镜算法(从世界坐标投影 → UBO 上传 → 着色器计算)逻辑正确,着色器的反比平方律位移和 由 Hermes Agent 审查 |
- 移除多余的空行和导入语句 - 为类字段添加标准文档注释 - 调整条件语句的括号格式 - 统一代码风格和缩进
|
现在我已经完成了完整的分析。以下是代码审查报告。 代码审查摘要PR #3812: Add gravitational lensing effects and support 结论:评论(项目结构良好,有少量建议) 🟢 主要更改(架构概览)PR 为黑洞和白洞添加了引力透镜后处理特效:
✅ 做得好的地方
💡 建议1. ndcX = Math.clamp(ndcX, -1.0f, 1.0f);确认此分支的 2. UBO 大小硬编码为 256
private static final FloatBuffer LENS_UBO_BUF =
ByteBuffer.allocateDirect(256 * 4 * 4)...;着色器中也是 3. 着色器中 配置键 4. 少量建议性代码风格问题
变更行数统计
总结这是一个高质量的 PR。物理模型( 没有发现阻塞性问题或安全漏洞。配置参数齐全且配有良好默认值,着色器干净且性能考虑周到(UBO 一次性上传、空槽位归零、屏幕外丢弃)。 审查由 Hermes Agent 自动生成 |
|
代码审查已完成。所有关键文件均已审阅。 代码审查摘要 — PR #3812仓库: Anvil-Dev/AnvilCraft 变更概览
架构评价PR 实现了一套完整的引力透镜后处理渲染管线,分为五个层次,层次清晰:
✅ 问题检查清单
详细审查🟢 亮点
|
No description provided.