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
        }
    }
}
相关推荐
zhongqu_3dnest2 天前
VR视频制作有哪些流程?
vr·数字孪生·三维建模·vr看房·房产经纪·vr视频制作·vr视频拍摄
凯禾瑞华实训室建设2 天前
老年生活照护实训室建设规划:照护质量评估与持续改进实训体系
大数据·人工智能·物联网·ar·vr
zhongqu_3dnest2 天前
VR博物馆推动现代数字化科技博物馆
科技·vr·数字孪生·三维建模·数字博物馆·vr博物馆·线上展馆
广州华锐视点2 天前
船舶事故海上搜救VR情景演练全场景 “复刻”,沉浸式救援体验
vr
XR-AI-JK3 天前
Unity VR/MR开发-VR设备与适用场景分析
unity·vr·mr
电鱼智能的电小鱼3 天前
虚拟现实教育终端技术方案——基于EFISH-SCB-RK3588的全场景国产化替代
linux·网络·人工智能·分类·数据挖掘·vr
广州华锐视点5 天前
VR教育:开启教育新时代的钥匙
vr·vr教育
广州华锐视点5 天前
VR 虚拟仿真工器具:开启医学新视界的智慧钥匙
vr·vr虚拟仿真·vr虚拟仿真工器具
zhongqu_3dnest5 天前
VR线上展厅特点分析与优势
vr·vr展厅·特点·线上展厅·线上数字展厅·传统展厅·优秀案例
EQ-雪梨蛋花汤6 天前
【Part 3 Unity VR眼镜端播放器开发与优化】第二节|VR眼镜端的开发适配与交互设计
unity·交互·vr