Unity VR中实现播放3D电影

3D电影的原理

今天要在unity中借用steamVR观赏3D电影,之前没有留意过3D电影相关,完全没有思路,于是先百度了一下3D电影的原理.

在这里插入图片描述

很久之前看过几次3D电影,那时候比较新奇,当时中途摘下过红蓝色的3D眼镜,屏幕大概是这个效果,发虚的感觉.
现在我们知道,实际上有两台放映机以一定的偏差,模仿人的双眼,把同一片源播放了两次,而3D眼镜的作用就是让左眼看其中一个影像,右眼看另外一个影像,最终我们的大脑会帮我们自动合成3D效果.
在这里插入图片描述
我们就以这个原理为核心,实现Unity中用VR看3D电影

实现过程

首先我们先来看看3D电影的源文件是什么样子的.
在这里插入图片描述
可见这部电影的片源已经有两份了,不需要我们想办法做出人眼的偏差.
但是和我们在电影院看过的3D电影好像还有些不一样.
应该是把两份片源分别拉伸到整个屏幕那么大,重叠在一起才会有发虚的效果.
于是我们先写个shader把片源拆成两份

Shader "Custom/SpitScreen" {
	Properties{
		_MainTex("MainText", 2D) = "white" {}//主贴图
		_SpitPercentX("SpitPercentX",Range(0,1)) = 1//水平方向切割后保留的比例
		_SpitPercentY("SpitPercentY",Range(0,1)) = 1//垂直方向切割后保留的比例
		_SpitOffsetX("SpitOffsetX",Range(0,1)) = 0//水平方向裁剪区的偏移量
		_SpitOffsetY("SpitOffsetY",Range(0,1)) = 0//垂直方向裁剪区的偏移量
	}
	SubShader{
		LOD 200
		Tags{ "RenderType" = "Opaque" }
		CGPROGRAM
		#pragma surface surf Lambert
		sampler2D _MainTex;
		fixed _SpitPercentX;
		fixed _SpitPercentY;
		fixed _SpitOffsetX;
		fixed _SpitOffsetY;
		struct Input {
			float2 uv_MainTex;
		};
		void surf(Input IN, inout SurfaceOutput o) {
			float2 uv = IN.uv_MainTex;
			fixed4 tex = tex2D(_MainTex, float2(uv.x*_SpitPercentX + _SpitOffsetX, uv.y*_SpitPercentY + _SpitOffsetY));//解析贴图
			o.Albedo = tex.rgb;//计算漫反射颜色
		}
		ENDCG
	}
	FallBack "Standard"
}

在这里插入图片描述
在这里插入图片描述
我们修改参数就可以取左边或者右边的一半.(写好之后发现表面着色器自带缩放和偏移,Tiling和offset的效果和上面的代码是完全一致的)
在这里插入图片描述
在这里插入图片描述
通过这个shader我们可以把片源的两个影像拆分出来了.
在这里插入图片描述
在这里插入图片描述
接下来我们创建两个material改变参数,让两块屏幕分别显示左半部分和右半部分,然后把两个屏幕的position改成一样的
在这里插入图片描述
在这里插入图片描述
为两块屏幕设置不同的层,名字随便取,目的是让相机分别过滤掉另一个屏幕,模仿3D眼镜的原理.左眼看不见右屏幕,右眼看不见左屏幕.
然后创建两个相机,分别对应左右眼,过滤掉另一块屏幕(我把MainCamera做成了右眼相机)
在这里插入图片描述
在这里插入图片描述
至此,3D电影就改造完毕了,steamVR的SDK会识别到标记为左右眼的相机,并且把相机渲染的图像输出给头盔的左右眼.
如何在Unity中播放一段视频不在本篇讨论范围内,我个人是使用了AVpro的插件来播放视频.
至于是什么效果.编辑器里是看不到了,需要一个VR头盔才行,个人觉得和在电影院看到的3D电影是同样的效果.
最后感叹一下,还是人类的大脑NB,自动合成3D影像

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: Unity3D是一个非常流行的跨平台游戏开发引擎,它提供了强大的工具和功能,可以帮助开发者创建精美的游戏场景和模型。其,宇宙天空盒子是Unity3D提供的一个非常实用的功能,它可以让开发者创建出非常逼真的宇宙场景。 Unity3D宇宙天空盒子可以让开发者轻松创建出逼真的宇宙场景,包括星球、行星、恒星等等。开发者可以选择使用不同的贴图,创建出不同的天空和空间景象,例如星云、星系、银河等等。同时,还可以添加自然光和阴影效果,使得整个宇宙场景更加逼真。 宇宙天空盒子不仅可以用于游戏开发,还可以用于其他领域,例如电影、动画、建筑可视化等等。开发者可以在Unity Asset Store上购买成套的宇宙天空盒子,或者自己创建定制的贴图,以满足自己的需求。 总的来说,Unity3D宇宙天空盒子是一个非常实用的工具,可以大大简化开发者创建逼真宇宙场景的过程,同时也帮助开发者节省宝贵的时间和精力。 ### 回答2: Unity3D是一款游戏引擎软件,支持多种平台的游戏开发。宇宙天空盒子是Unity3D的一个免费资源包,可以用于游戏的背景画面,创造出宇宙景观的效果。 宇宙天空盒子资源包包含了多种宇宙天空场景的贴图素材,例如星云、行星和星际尘埃等。在使用这些素材时,游戏开发者可以将其应用于游戏的相机,用于呈现游戏场景的背景以及天空。这些素材经过精心设计,可以呈现出真实的宇宙场景,同时又可以很好地适应游戏开发者的设计需求。 对于开发3D游戏的开发者而言,宇宙天空盒子资源包是一个非常有用的工具。使得开发者可以轻松地实现宇宙空间的场景设计,并且还可以避免花费大量的时间、经历和处理工作用来设计宇宙背景。开发者可以通过选择不同的场景贴图来实现不同的宇宙场景,例如红色巨星、流星雨和行星带等。 总之,宇宙天空盒子资源包是一个非常有用且易于使用的资源包,为Unity3D开发者提供了一种快速制作宇宙题材游戏背景的方式。它可以减少游戏开发者的工作量,并且在实现高品质的游戏场景效果方面表现出色。 ### 回答3: Unity3D宇宙天空盒子是一种用于Unity3D引擎的插件,它可以帮助用户更方便地创建逼真的空间环境,包括星空、行星、太阳、银河系等。这个插件可以让你的游戏或VR应用程序更加炫酷和吸引人。 Unity3D宇宙天空盒子包含了多种不同的天空材质和纹理,可以方便地应用到不同的场景。用户可以根据需要选择不同的颜色、亮度和纹理样式定制天空盒子,以达到更好的视觉效果。 此外,Unity3D宇宙天空盒子还提供了许多内置特效和动态的天空环境,如流星雨、天气变化、动态云层和日月星移等,可以让用户在游戏创造出非常逼真的天空环境。 总之,Unity3D宇宙天空盒子是一个非常强大的工具,可以让用户轻松创建令人惊叹的天空环境,是游戏开发者和VR应用程序制作者的一项必备工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值