You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity VR:XR Toolkit中透明材质遮挡传送线问题

问题描述

使用Unity XR Toolkit开发VR项目时,为实现传送时的黑屏淡入淡出效果,在相机正前方添加了一个挂载无光照透明材质的Quad,通过脚本控制材质alpha值实现淡黑效果,但遇到以下问题:

  • 即使材质完全透明(alpha=0),传送线仍无法显示
  • 按下传送按钮后,传送线会短暂显示随即消失
  • 尝试修改材质渲染队列(2000、3000、2999、3001)均无效
  • 将传送线材质替换为非默认线纹理材质后,问题消失,但丢失了原本的颜色变化效果

使用的Shader源码如下:

Shader "Unlit/Unlit Transparent Color" {
Properties {
    _Color ("Main Color", Color) = (0,0,0,1)
}

SubShader {
    Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
    LOD 100
    Fog {Mode Off}

    ZTest Always
    Blend One OneMinusSrcAlpha
    Color [_Color]

    Pass {}
}
}
问题原因

核心问题出在Shader的ZTest Always设置:

  • 该参数强制Quad的深度测试永远通过,无论它与相机的距离是否比传送线更远,会让Quad始终渲染在所有物体(包括传送线)的前面
  • 即使材质alpha=0,透明渲染的Blend操作仍会干扰后续物体的颜色输出,导致传送线被“遮挡”
解决方案

修改Shader的深度测试规则,并补充透明物体的标准渲染参数:

Shader "Unlit/Unlit Transparent Color" {
Properties {
    _Color ("Main Color", Color) = (0,0,0,1)
}

SubShader {
    Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
    LOD 100
    Fog {Mode Off}

    // 替换ZTest Always为默认的LEqual,确保只渲染在比它远的物体前面
    ZTest LEqual
    // 透明物体禁用深度写入,避免影响后续物体的深度测试
    ZWrite Off
    Blend One OneMinusSrcAlpha
    Color [_Color]

    Pass {}
}
}

额外优化建议:

  • 将Quad的位置调整到相机近裁剪面之外(比如0.1m处),避免和相机自身的近裁面冲突
  • 确认传送线的渲染队列优先级低于Quad(保持Quad在Transparent队列,传送线设为Transparent+1即可)

内容的提问来源于stack exchange,提问作者Heinz Sander

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 16:05:06