CS2-Box 在 GUI 里渲染 3D 物品预览(PIP 3D)与背景模糊。Iris(NeoForge/Fabric)与 Oculus(Forge)的 shader pack 会拦截/忽略模组的自定义渲染路径,因此本模组采用 检测 + 降级策略,与 Iris 官方建议一致(避免自定义 shader、提供 fallback 路径)。
- 每平台
utils/AnimRenderOps.java新增私有isShaderModActive():ModList.isLoaded("iris") || ModList.isLoaded("oculus")(NeoForge 用net.neoforged.fml.ModList.get().isLoaded;Forge 26.x 用静态net.minecraftforge.fml.ModList.isLoaded;Forge 1.20.1 用ModList.get().isLoaded)。 supports3D()改为!isShaderModActive():shader 激活时 3D 预览降级为 2D 图标。renderItem3D内部在 null 检查后直接走renderItem2D回退(含 TACZ 枪械分支, v1_21_1 / forge_1_20_1 的枪械 3D 同样降级)。- 背景模糊不受影响:
renderBlurredBackground走的是原版blurBeforeThisStratum()(26.x)/ 原版Screen.renderBlurredBackground(1.21.1)/ no-op(1.20.1),不是自定义 shader。 fade_in_blur后处理资源(common/assets/minecraft/shaders/)当前无任何 Java 引用, 属未接线资源(疑似历史遗留),Iris 兼容性不受其影响;是否删除留待后续审计。
| 环境 | 3D 预览(PIP/拖拽) | 背景模糊 | 开箱动画/概率 |
|---|---|---|---|
| 无 Iris/Oculus | 3D 正常 | 原版模糊正常 | 不受影响 |
| 装 Iris/Oculus + shader pack | 降级为 2D 图标 | 原版模糊(若 shader 不覆盖 GUI)或不可见(不崩溃) | 不受影响 |
| 装 Iris/Oculus 未开 shader pack | 2D(保守降级) | 原版模糊 | 不受影响 |
前置:至少在一个 26.x NeoForge 平台 + 一个 Forge 平台真机执行。
- 无 shader 环境(基线):3D 拖拽预览、开箱动画、批量屏、终端屏全部正常。
- 装 Iris/Oculus + 代表性 shader pack(如 Complementary / BSL):
- 开箱动画屏可正常打开,无黑屏/崩溃
- 3D 拖拽预览降级为 2D 图标(不渲染成黑色/空白)
- 批量开箱总览/流水屏正常
- 终端谈判屏(报价 3D 预览→2D)正常
- 背景模糊不导致黑屏(允许无模糊)
- 概率显示、开箱结果、成就触发与无 shader 一致
- 卸载 shader pack 但保留 Iris/Oculus:确认仍走 2D(保守),无异常。
- 无 Iris/Oculus 时确认
supports3D()返回 true(不误伤正常 3D)。
- Iris 官方文档结论(core-shaders.md):模组自定义 shader 在 shader pack 激活时被忽略, 无通用合并方案,官方建议 fallback——本方案即按此执行。
- 降级只影响「预览表现」,不触碰服务端 RNG 与任何概率/玩法逻辑。
- 26.x 的 PIP 在 Iris 下是否还有其它拦截点需真机验证(本仓库无法静态确认)。
装 Modern UI(modernui)不触发 3D 降级——其官方声明兼容 vanilla GUI 系统模组,
3D 预览保持 3D;只有 Iris/Oculus 生效时才降级 2D。两者(Modern UI + shader)同装时按
本文件规则降级。详见 docs/MODERN-UI-COMPAT.md。