Daydream播放3D视频(视频左右分屏3D效果)

news/2024/11/29 0:49:50/


需求分析:

         因为VR项目需求,要实现3D视频的播放,即左右分屏视频播放。如下图所示类型视频。


使用GoogleVRForUnity插件实现VR功能效果。项目刚开始使用的是0.8的老版本插件,可以轻松实现3D视频的播放效果,但升级GoogleVRForUnity插件到1.10接入Daydream后,发现3D视频播放3D效果没有了。

 

解决方案:

一、未接入Daydream前实现方式。

1:老版本实现3D视频比较简单,GoogleVR实现了两个摄像机,可以通过设置左右摄像机的CullingMask可实现左眼看左图像,右眼看右图像。

        

2:播放器视图物体Layer一定要设置正确,左视图设置3DScreenLeftPart;右视图设置3DScreenRightPart;如下图所示:

 

 

3:通过代码修改相应的材质属性,将左右格式的图像区分开


即修改下图所示属性数值:


其它步骤不再复述。

OK,通过上面的步骤就可实现3D视频的播放。

二、接入Daydream后实现方式。(即升级GoogleVRForUnity插件到1.10版本)

接入Daydream后,发现GoogleVR在真机上没有3D效果了。经过分析发现GoogleVR优化了渲染方式。真机上运行时,只保留了一个主摄像机。所以老版本的设置方法都没用了。这怎么办?其实google已经给出了解决方案。我也是找了好久才看到。

1:先看图:


VideoDemoStereoShader视频立体Shader,这个是什么?从字面理解就可知道是为了实现视频立体效果。这里我对这个Shader做了一些修改,以适应项目需求。下面直接看代码:

// Shader that renders a "left on top"stereo texture
Shader "GoogleVR/VideoStereoShader"{Properties {_MainTex ("Albedo (RGB)", 2D) = "white" {}}SubShader{Pass{Tags { "RenderType"="Opaque" }CGPROGRAM#pragmavertex vert#pragma fragment frag#include "UnityCG.cginc"#include "GvrUnityCompatibility.cginc" float4 _MainTex_ST;sampler2D _MainTex;//是否为左右格式视频 1:上下格式  其它:左右格式int_isUpDownVideo;//视频左右上下格式是否正确 1:错误(即左右顺序不对,左图像放到了右边;右图像放到了左边)  其它:正常int_isVidePerversion;//C#代码修改以上两个数值  例如://Shader.SetGlobalInt("_isUpDownVideo",0);struct v2f {float4 pos : SV_POSITION;float2 uv : TEXCOORD0;};v2fvert(appdata_base v) {v2fo;o.pos= GvrUnityObjectToClipPos(v.vertex);o.uv= TRANSFORM_TEX(v.texcoord, _MainTex);//unity_StereoEyeIndex //0为左或上 1为右或下if(_isUpDownVideo == 1){o.uv.y*= 0.5f;if(_isVidePerversion == 1){if(unity_StereoEyeIndex == 0) {o.uv.y+= 0.5f;}}else{if(unity_StereoEyeIndex == 1) {o.uv.y+= 0.5f;}}}else{o.uv.x*= 0.5f;if(_isVidePerversion == 1){if(unity_StereoEyeIndex == 0) {o.uv.x+= 0.5f;}}else{if(unity_StereoEyeIndex == 1) {o.uv.x+= 0.5f;}}}returno;}fixed4 frag (v2f i) : SV_Target {return tex2D(_MainTex, i.uv);}ENDCG}}Fallback "Mobile/VertextLit"
}


代码分析:

这里添加了两个属性值。

_isUpDownVideo:通过此属性值判断是左右格式的视频,还是上下格式的视频。

_isVidePerversion:通过此属性值判断左右格式或上下格式的视频,图像位置是否正常,因为有些3D视频在制作时,有可能将左边的图像放到了右边;右边的图像放到左边。

 

C#代码修改以上参数方法:

//Shader.SetGlobalInt("_isUpDownVideo", 0);

 

unity_StereoEyeIndex:这个属性值是需要我们重点注意的。

unity_StereoEyeIndex == 0可理解为是左眼看到的屏幕

unity_StereoEyeIndex == 1可理解为是右眼看到的屏幕

通过此数值可以设置不同的UV属性以区分出左右视频图像,从而达到3D视频播放的效果。

使用方式:

1:将原先代码区分左右图像的代码删除,如下图


2:将原先材质Shader修改成我们修改后的VideoStereoShader,如下图所示:


其实这里没有必要再分左右两个视图物体了,只需要保留一个视图物体就可以了。

3:播放实现前,通过设置_isUpDownVideo _isVidePerversion属性值,即可达到正常播放3D视频效果。如果不设置默认为左右格式并且是左右图像正确的视频。

 

注意:VideoStereoShader要和GvrUnityCompatibility.cginc文件放到相同目录:如下图


Shader相关知识自行学习了,加油!!!!


http://www.ppmy.cn/news/249752.html

相关文章

[乐意黎原创] 左右格式的3D电影怎么播放

播放左右分屏显示的影片时,此时影片是属于3D格式, 了解决“左右格式的3D电影怎么看”这个问题,我们需要先来说明一下什么是左右格式。 左右格式和上下格式只是3D立体电影的一种存储方式,和拍摄方式,播放设备无关。如果…

为项目添加 HibernateValidator

HibernateValidatorhttps://hibernate.org/validator/ 引入依赖项 首先&#xff0c;确保已将Hibernate Validator添加到Maven或Gradle依赖项中&#xff1a; <!-- Maven 依赖 --> <dependency><groupId>org.hibernate.validator</groupId><artifa…

计算机系统相机怎么卸载,WinXP系统如何删除“扫描仪和照相机”功能?XP系统“扫描仪和照相机”的删除方法...

Winxp系统中有许多用户通常不会用到的功能&#xff0c;“扫描仪和照相机”就是其中一种。对于不常用的功能&#xff0c;小编建议可以对它们进行删除&#xff0c;因为这样可以很好地缓解系统空间压力。下面&#xff0c;小编就分享XP系统“扫描仪和照相机”的具体删除方法。 详细…

HTML+CSS+JS实现 ❤️照相机快门图片动画特效❤️

效果演示&#xff1a; 代码目录&#xff1a; 主要代码实现&#xff1a; 部分CSS样式&#xff1a; html {height: 100%;overflow: hidden; }body {min-height: 100%; }.container {cursor: pointer;background-position: center center;background-size: cover;background-im…

视频教程-iOS8开发技术(Swift版):照相机和图像库-iOS

iOS8开发技术&#xff08;Swift版&#xff09;:照相机和图像库 东北大学计算机专业硕士研究生&#xff0c;欧瑞科技创始人&CEO&#xff0c;曾任国内著名软件公司项目经理&#xff0c;畅销书作者&#xff0c;企业IT内训讲师&#xff0c;CSDN学院专家讲师&#xff0c;制作视频…

中兴u880照相机声音怎么关啊

前提是要ROOT&#xff0c;装RE文件处理器 首先是快门声音&#xff0c;声音文件在system/media/audio/ui&#xff0c; 用RE文件管理器把原两个文件camera_click.ogg和VideoRecord.ogg重命名成《相机camera_click.ogg》&#xff0c;《相机VideoRecord.ogg》&#xff0c; 之所以要…

android studio获取照相机,在Android Studio中获取相机镜头

我正在尝试创建一个auto-backup应用,其中从Camera拍摄的所有照片都将上传到Cloudinary。但是,我似乎无法让我的代码工作。我究竟做错了什么?在Android Studio中获取相机镜头 class UploadPhotos implements Runnable {@Override public void run() {File storageDir = Envir…

DIY一个带WIFI的树莓派照相机

本文由 极客范 - Boyd Wang 翻译自 Phillip Burgess。欢迎加入极客翻译小组&#xff0c;同我们一道翻译与分享。转载请参见文章末尾处的要求。 http://v.youku.com/v_show/id_XNjcyMzAwNDQ4.html 概览 这个项目使用了Adafruit PiTFT触摸屏和树莓派摄像头模块来制作一个一按即拍…