物体仅对左眼可见

问题描述 投票:0回答:3

我有一个使用

Unity
MRTK
项目。

当我使用以下着色器更改

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
        }
    }
}
unity-game-engine shader augmented-reality hololens mrtk
3个回答
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);

附加链接:单通道实例渲染


2
投票

对于具有 Hololens 和 MRTK2 的着色器,可能需要单击以下升级路径: https://learn.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版本。如果有更多详细信息,也许也可以为社区提供进一步帮助。


0
投票

对于任何想要查看解决此问题的示例的人,我创建了以下教程:

https://youtu.be/JiCJN8EvoCA

© www.soinside.com 2019 - 2024. All rights reserved.