VR的左右眼渲染方法

VR的左右眼视频渲染shader

unity_StereoEyeIndex 结点可以判断当前渲染的时候左眼还是右眼,所以可以通过着色器来更根据当前眼睛使用不同的渲染方式达到左右眼渲染不同。

c 复制代码
Shader "Unlit/VRVideoPlay"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        [KeywordEnum(None, Top_Bottom, Left_Right, Custom_UV)] Stereo ("Stereo Mode", Float) = 0
        [KeywordEnum(None, Left, Right)] ForceEye ("Force Eye Mode", Float) = 0
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #pragma multi_compile MONOSCOPIC STEREO_TOP_BOTTOM STEREO_LEFT_RIGHT STEREO_CUSTOM_UV
            #pragma multi_compile_local FORCEEYE_NONE FORCEEYE_LEFT FORCEEYE_RIGHT
           
            #include "UnityCG.cginc"

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

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

            sampler2D _MainTex;
            float4 _MainTex_ST;

            float2 SetVR_UV(float2 UV)
            {
                 #if FORCEEYE_NONE
                    // 左右采样
                    #if STEREO_LEFT_RIGHT
                        if (unity_StereoEyeIndex == 0)
                        {
                           return float2(UV.x / 2, UV.y);
                        }
                        else
                        {
                            return float2(UV.x / 2 + 0.5, UV.y);
                        }
                    #endif
                    // 上下采样
                    #if STEREO_TOP_BOTTOM
                        if (unity_StereoEyeIndex == 0)
                        {
                            return float2(UV.x, UV.y / 2);
                        }
                        else
                        {
                            return float2(UV.x, UV.y / 2 + 0.5);
                        }
                    #endif
                #elif FORCEEYE_LEFT
                    // 左右采样
                    #if STEREO_LEFT_RIGHT
                        return float2(UV.x / 2, UV.y);
                    #endif
                    // 上下采样
                    #if STEREO_TOP_BOTTOM
                        return float2(UV.x, UV.y / 2);
                    #endif
                #elif FORCEEYE_RIGHT
                    // 左右采样
                    #if STEREO_LEFT_RIGHT
                        return float2(UV.x / 2 + 0.5, UV.y);
                    #endif
                    // 上下采样
                    #if STEREO_TOP_BOTTOM
                       return float2(UV.x, UV.y / 2 + 0.5);
                    #endif
                #endif
                 return UV;
            }

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                float2 uv = TRANSFORM_TEX(v.uv, _MainTex);
                o.uv=SetVR_UV(uv);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                // sample the texture
                fixed4 col = tex2D(_MainTex, i.uv);
                return col;
            }
            ENDCG
        }
    }
}
相关推荐
程序猿小D4 天前
第三百八十九节 JavaFX教程 - JavaFX WebEngine
java·eclipse·intellij-idea·vr·javafx
BBTSOH159015160445 天前
Vicon MX40 光学动作捕捉摄像机
数码相机·vr·虚拟现实·定位·光学·动作捕捉·光学动捕
反方向的钟儿5 天前
人工智能入门(2)
大数据·人工智能·学习·自然语言处理·nlp·vr
huoyingcg7 天前
武汉火影数字|解锁沉浸式全息剧场制作:开启视听新次元
科技·计算机视觉·vr·动画·虚拟现实
蚁利科技12 天前
简易的数字化展厅中控软件代码,蚁利V3.0全息触控软件 智慧展厅3D互动软件定制,全息交互多媒体系统,全息控制软件开发编程
3d·硬件架构·交互·制造·vr·智能硬件·扩展现实
KL_lililli13 天前
探索未来世界:元宇宙、虚拟现实与增强现实的交互新体验
ar·交互·vr
cnbestec14 天前
从TouchDriver Pro到Touchdriver G1,Weart触觉手套全系解析:XR交互的“真实触感”如何实现?
交互·xr·vr
蛙色3DVR15 天前
VR大空间需要哪些硬件
vr
BBTSOH1590151604417 天前
Acer Spatial Labs 3D裸眼立体显示器
3d·计算机外设·vr·虚拟现实
huoyingcg17 天前
沉浸式vr大空间打造,打造超真实的虚拟体验
vr