转载自:http://tieba.baidu.com/p/3038509618?qq-pf-to=pcqq.group
第一步:了解偏振式3D成像原理
偏振式3D成像是根据人眼成像原理发明的,人眼看到的景象呈现立体感,是由于双眼所观察到的景象有略微的差别,因为瞳距(两眼球之间的距离)导致观察的物体的角度不同。
所谓偏振成像就是将两幅不同偏振态的图像送到双眼,每只眼睛只允许看到其中一幅,我们用unity制作3D游戏,其实就是制作这两幅图像。或者说模拟3D信号。
这里要感谢这位国外的大神的教程所给的帮助。
http://paulbourke.net/stereographics/Unitystereo/
中文翻译版
http://www.cnblogs.com/zhiweifire/archive/2011/10/18/2216390.html
第二步:了解现在的硬件技术能帮我们做什么,我们需要做什么
在3D显示器出现之前,我们要做3D立体游戏,估计只能用两台投影仪来实现3D效果了,不过现在的3D液晶显示器大多都是集成好一键转3D功能,在这里这个转3D功能指的是自动识别左右半宽的信号(上下的就不考虑了,一般都是左右),并将其融合,转换为偏振的3D信号,并通过3D眼镜观看到3D效果。当然现在的3D显示器经常会宣传说一键2D转3D功能,这个功能不是我刚才说的融合,而是显示器根据2D影像自动给加上景深,生成左右两幅图像,其实是伪3D,试了一下,的确略微有些效果,不过效果真的不怎么样。。。我们这里还是做真的3D立体吧。
知道了显示器能够帮我们自动融合左右图像后,我们就只需要模拟出左右半宽的图像就OK了。
第三步:如何用Unity3D模拟出3D信号
这步才是我们要做的重点。要模拟出真实的3D立体影像,首先要知道人眼成像原理,上面第一步说了,因为我们有两只眼睛,并分开一定距离(大约150px),这样就出现了距离感。我们都知道unity中的摄像机是模拟人的眼睛的,一般我们在unity中观察场景都是创建一个摄像机,当然就没有立体感了,要模拟人的眼睛,就要创建两个摄像机(好吧,废话一大堆,其实我就是想说,请先创建两个摄像机。。。)。
把场景本来存在的主相机删掉,把创建的两个摄像机放在同一平面,分开很小的距离,角度调成一样,注意不是往中间看,而是平视,人的双眼也都是平视向前的,这个和焦距是两个概念,别弄混了,类似于下面这样:
至于相距多少,这个视环境而定,两个摄像机之间的距离类似于人眼之间的距离。我们用自带的第一人称控制器来解释这个距离。导入第一人称控制,把这两个摄像机拖到第一人称控制器的摄像机下,作为子物体,把第一人称控制自带的相机关掉(enabled=false),就是把camera组件对号去掉。把左右相机的位置改为这样:
左相机:
右相机:
对于第一人称控制器的大小来说,这个0.06的距离够用了,为什么说是够用了,不是正好,是因为距离大点小点都是可以的,距离越大,景深越大,看起来更清晰,好像是距离拉近了,不过给人观看的感觉更累了,这个很好理解,人的眼睛距离变大,就相当于人变成了巨人,或者眼前的景象拉近,也就是你把手指从远处拉到眼前的感觉,当近到一定程度是,你要看你的手指就会很吃力,要不就重影~~再近,就是斗鸡眼了,斗鸡眼的感觉,你懂的。。。
如果距离拉近的话,3D感会渐渐变弱,最近就是两个相机重合,重合后就没有立体感了。所以这个距离要根据你看的场景而定,对于自带的第一人称控制器,它的大小作为人的大小的话,它所存在的场景比例就是固定的,此时的瞳距根据你想要的效果而定,具体可以在显示器上测试。