@@ -414,14 +414,15 @@ Remote ──(PasswordCorrect)────────────────
414414#### 4.4.1 全屏覆盖 UI (` ASS_UI ` )
415415
416416- ** 渲染方式** : 使用自定义 Shader (` UnityBox/ASS_UI ` ) 直接渲染到摄像机全屏
417- - Shader 在顶点着色器中将 Quad 顶点直接映射到裁剪空间覆盖整个屏幕
417+ - Shader 在顶点着色器中将 Quad 顶点通过视图空间投影映射到裁剪空间覆盖整个屏幕
418+ - 通过在相机前方 ` d=5 ` 单位处构建视图空间坐标再投影,确保在近/远裁剪面内且渲染在 VRChat 表情镜摄像机后方
418419 - ** 不需要** 世界空间定位
419420- ** 位置** : 作为 Avatar 根对象的直接子对象
420421- ** 默认状态** : ` SetActive(false) ` ,仅 Locked 状态时由动画启用
421422- ** Mesh** : 简单 Quad(4 顶点),顶点位置无关紧要(由 Shader 重新映射)
422423 - 三角形绕序:` {0, 1, 2, 0, 2, 3} ` (统一逆时针,Unity 标准正面定义)
423424 - 调用 ` RecalculateNormals() ` 和 ` RecalculateTangents() ` 确保法线/切线正确
424- - ** Bounds 设置为 100000 单位** (` mesh.bounds = new Bounds(Vector3.zero, Vector3.one * 100000f ) ` ),防止 Unity 视锥体剔除导致 UI 在特定视角不可见
425+ - ** Bounds 设置为 200 单位** (` mesh.bounds = new Bounds(Vector3.zero, Vector3.one * 200f ) ` ),防止 Unity 视锥体剔除导致 UI 在特定视角不可见
425426- ** 材质属性** (已混淆,属性名不可读):
426427 - 背景颜色: 白色(遮挡背景)
427428 - 进度条颜色: 红色
@@ -867,3 +868,19 @@ VRCFury 会在 blend tree 中以 Float 方式使用 `IsLocal` 参数(如 SPS/H
867868
868869- Defense.cs 不包含任何注释(代码足够自文档化,注释在技术文档中维护)
869870- 粒子光源复用策略:不创建额外 Light 组件,复用 LightDefense 已有的 Light 引用,避免超出 LIGHT_MAX_COUNT 上限
871+
872+ ### 10.7 UI Shader 全屏覆盖深度修复(v0.3.3)
873+
874+ ** 问题(v0.3.2)** :
875+
876+ UI Shader 在顶点着色器中于相机前方 ` d=100 ` 单位处构建视图空间坐标再投影到裁剪空间。当某些 VRChat 地图的相机远裁剪面 < 100 时,几何体超出裁剪空间有效深度范围,被 GPU 硬件裁剪(发生在光栅化之前,` ZTest Always ` 无法阻止)。但 VRChat 表情镜使用独立相机且远裁剪面通常更大,因此 UI 在镜中能正常显示而主视角不显示。
877+
878+ 同时 ` Feedback.cs ` 中 Mesh Bounds 仅 2 单位,在某些世界中可能被 Unity CPU 端视锥体剔除。
879+
880+ ** 修复方案(v0.3.3)** :
881+
882+ 1 . ** UI Shader** : 将 ` d ` 从 ` 100 ` 改为 ` 5 `
883+ - 大于相机近裁剪面(~ 0.01-0.3),确保不被近裁剪面剔除
884+ - 小于所有地图的远裁剪面,确保不被远裁剪面剔除
885+ - 大于 VRChat 表情镜摄像机距离(~ 3-4m),确保 UI 渲染在表情镜后方(遮挡表情镜)
886+ 2 . ** Feedback.cs** : Mesh Bounds 从 ` 2f ` 增大到 ` 200f ` ,防止 CPU 端视锥体剔除
0 commit comments