【问题标题】:Object is only visible to the left eye物体只对左眼可见
【发布时间】:2022-08-24 12:29:32
【问题描述】:

我有一个使用MRTKUnity 项目。

在我用以下着色器更改了MRTK/Standard 着色器后,它只将对象渲染到左眼。

如何将对象渲染到双眼?

Shader \"HoloUS/BrightnessContrast\"
{
    Properties
    {
        _MainTex(\"Texture\", 2D) = \"white\" {}
        _Width(\"Width\", Float) = 1
        _Center(\"Center\", Float) = 0.5
    }
    
    SubShader
    {
        Tags { \"RenderType\" = \"Opaque\" }
        LOD 100

        Pass
        {
            CGPROGRAM
            
            #pragma vertex vert
            #pragma fragment frag
            
            #include \"UnityCG.cginc\"

            struct VInp
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct VOut
            {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
            };

            sampler2D _MainTex;
            float4 _MainTex_ST;
            float _Center;
            float _Width;

            VOut vert(VInp inp)
            {
                VOut o;
                o.vertex = UnityObjectToClipPos(inp.vertex);
                o.uv = TRANSFORM_TEX(inp.uv, _MainTex);
                return o;
            }

            fixed4 frag(VOut inp) : SV_Target
            {
                float min = _Center - _Width / 2;
                return tex2D(_MainTex, inp.uv) * _Width + min;
            }
            
            ENDCG
        }
    }
}

    标签: unity3d shader augmented-reality hololens mrtk


    【解决方案1】:

    对于具有 Hololens 和 MRTK2 的着色器,可能需要单击升级路径: https://docs.microsoft.com/en-us/windows/mixed-reality/mrtk-unity/mrtk2/features/rendering/mrtk-standard-shader?q=shader&view=mrtkunity-2022-05

    此外,Unity 为 HoloLens 的立体渲染定义了以下着色器脚本要求: https://docs.unity3d.com/Manual/SinglePassStereoRenderingHoloLens.html

    从 Unity 的版本来看,无法分辨上面示例中使用的具体版本和 MRTK 版本。如果有进一步的细节,或许也能与社区进一步提供帮助。

    【讨论】:

    【解决方案2】:

    如果您使用的是单通道 VR,则着色器声明中的更改很少,以便在单通道中识别立体纹理输入。

    //add this in struct appdata
    UNITY_VERTEX_INPUT_INSTANCE_ID
    
    //add this in struct v2f
    UNITY_VERTEX_OUTPUT_STEREO
    
    //replace sampler2D
    UNITY_DECLARE_SCREENSPACE_TEXTURE(_MainTex);
    
    //add these inside v2f vert()
    UNITY_SETUP_INSTANCE_ID(v);
    UNITY_INITIALIZE_OUTPUT(v2f, o);
    UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
    

    附加链接:Single Pass Instanced rendering

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-10
      • 1970-01-01
      • 2022-10-14
      • 2011-03-20
      • 2021-10-03
      • 2017-12-31
      • 2018-07-15
      相关资源
      最近更新 更多