OCULUS-VR-ppt

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

OculusSDK•HMD-ALOG•Architecture•Termsanddefinitions•VrLib/VrApi目录•Importantstruct/class•ATW线程HMD-ALOG反畸变算法(Distortion)•多采样着色(Multi-ResolutionShading)反色散(ChromaticAberrationcorrection,CA)StereoRendering时间扭曲(Timewarp,ATW)位置扭曲(PositionalTimewarp)YawCorrectionSensorAlgo(暂时忽略)反畸变/DistortionVR眼睛看正常2D图像:上图圆圈所覆盖的位置是一样的。从左到右,是一个从边缘往中间内缩的过程。而内缩的幅度,与圆圈的半径,也就是像素点到图像中间的距离成比正比。所以为了从VR的凸透镜看到正常的图形,所以我们需要将原始2D图像经过一些反畸变,再通过眼睛的突变之后恢复成正常图像。经过VR渲染畸变图像:多采样着色(Multi-ResolutionShading)•Why?通过上一页我们知道,我们需要做Distortion。但是如果我们按照上张图来实现,就会引入一个问题,我们对每个2D图像每个像素点都进行渲染的话,不但边角毫无意义,主要会造成极大的硬件和软件的资源浪费。•How?在中央视区仍保留完整分辨率的情况下,外围视区则用类似于传统后处理阶段的扭曲方式进行渲染。当这一切完成后,同样用户感知效果的图像相比原来的像素数量可减少25%到50%,而像素渲染效率则提升为原来的1.3倍到2倍。反色散/CACorrection•色差(Chromaticaberration;chromaticaberration):色差又称色像差,是透镜成像的一个严重缺陷,色差简单来说就是颜色的差别,发生在以多色光为光源的情况下,单色光不产生色差。•现象:VR头盔在使用时候都会在边缘区域(边缘位置)出现红绿蓝的色边反色散方法:1.使用低色散的透镜,无法根本解决问题,并且成本还不知道贵不贵2.软件补偿StereoRendering•对同一图像需要渲染两次。简单的说,人的双眼看同一物体时,由于左右眼视线方位不同,视网膜上的图像会略有差别,即双眼视差,VR利用双眼视差原理在左右眼屏幕上分别显示两幅具有微小差别的图像,用户将两幅图像融合后得到一幅具有立体效果的图像。时间扭曲/Timewarp•时间扭曲:是一种图像帧修正的技术,在使用虚拟现实眼睛设备时,由于头部运动过快,而造场景渲染的延迟,即头已经转过去了,但是图像还没有渲染出来,或者渲染的是上一帧的图像,时间扭曲它通过扭曲一副被送往显示器之前图像,来解决这个延迟问题。最基础的时间扭曲是基于方向的扭曲,这种只纠正了头部的转动变化姿势,这种扭曲对于2D图像是有优势的,它合并一副变形图像不需要花费太多系统资源。对于复杂的场景,它可以用较少的计算生成一个新的图像帧。•异步时间扭曲:(AsynchronousTimewarp简称ATW)是一种生成中间帧的技术,当游戏不能保持足够帧率的时候,ATW能产生中间帧,从而有效减少游戏画面的抖动,但是,ATW不是灵丹妙药,有一定局限性(局限性在后面介绍),开发人员也应该意识到。指在一个线程(称为ATW线程)中进行处理,这个线程和渲染线程平行运行(异步),在每次同步之前,ATW线程根据渲染线程的最后一帧生成一个新的帧时间扭曲/Timewarp位置扭曲,PositionalTimewarp•()位置抖动(PositionalJudder):位置抖动是最明显的用基于方向的时间扭曲带来瑕疵之一,在使用虚拟现实设备时,当头部移动了,如果在ATW产生图像帧时只考虑了旋转分量,那么任何头部平移分量都将被忽略了。这就意味着当你的头部从一边移动到另一边时,甚至是旋转你的头并且你的转动眼睛,你讲看见离你很近的物体会有多个图像的抖动,这种效果是非常明显的。•()位置扭曲(PositionalTimewarp):解决位置颤抖的一个可能的方法是实现全位置扭曲,它应用平移和旋转两个分量来修正原始帧,位置扭曲,位置扭曲需要考虑原始帧的深度信息,由不同的量替代图像的一部分。然而,这样产生的中间帧会使物体边缘不闭合,由于没有原始帧中的数据,会导致中间帧某些区域不能被覆盖。YawCorrection(脑补翻译)•随着时间的改变,可能会方向会产生偏移,但是现实中人的方向还是正前方的。如下图:ArchitectureArchitectureTermsanddefinitions•HMD:HeadMonitorDisplay头戴式显示器•OVR:OculusVR•CA:chromaaberration色散•Timewarp:时间扭曲•Distortion:畸变•Pitch,Yaw,Roll:俯仰,偏航,翻转(右手笛卡尔)•EGL,OpenGL,JNI,SensorFusion•MIP:纹理特别大的时候,渲染物体小的情况下,效果不好。所以在一开始将纹理按照2的倍数缩小成很多大小不同的纹理,这样我们就可以很快的用任意大小进行纹理贴合。VRApiDir•││├──DirectRender.cpp•││├──DirectRender.h•││├──Distortion.cpp•││├──Distortion.h•││├──HmdInfo.cpp•││├──HmdInfo.h•││├──HmdSensors.cpp•││├──HmdSensors.h•││├──ImageServer.cpp•││├──ImageServer.h•││├──LocalPreferences.cpp•││├──LocalPreferences.h•││├──Sensors•│││——OVR_Android_DeviceManager.cpp││├──SystemActivities.cpp││├──SystemActivities.h││├──TimeWarp.cpp││├──TimeWarp.h││├──TimeWarpLocal.h││├──TimeWarpProgs.cpp││├──VrApi_Android.h││├──VrApi.cpp││├──VrApi.h││├──VrApi_Helpers.h││├──VrApi_local.h││├──Vsync.cpp││├──Vsync.h││├──WarpGeometry.cpp││├──WarpGeometry.h││├──WarpProgram.cpp││└──WarpProgram.hVIPFile•JAVA:VrActivity.java//实现VrActivity接口,publicclassMainActivityextendsVrActivity•Native:•VrApi.cpp,VrApi.h//JNI接口•App.cpp,App.h//实现了VrAppInterface基本接口,以及ClassApp的接口•Oculus360Videos.cppeg.Oculus360Videos.heg.//实现这个app的基本功能接口Struct/Class/enum•DeviceType:•HMDInfo•HMDDevice•SensorInfo•SensorDevice•classVrAppInterface•ClassAPPenumDeviceTypeHMDInfoclassHMDDevice这个机构体代表了HMD这个device,涵盖了基本操作。这个结构体被DeviceManager创建。classSensorInfoSensorHW本身的一些信息classSensorDevicevirtualvoidSetCoordinateFrame(CoordinateFramecoordframe)------------------------------------------------------------转换坐标系,将Sensor的坐标系转换成HMD坐标系classDeviceManager:publicDeviceBaseclassDeviceManager:publicDeviceBase•EnumerateDevices:获取可用的Device,并且把内部指针指向next,再次调用的时候就是第二个DEVICE.•Instance:上面就是创建DeviceManager,再有Manager获取第一个对应的HMD或者SensorDevice,创建它,再操作它。classVrAppInterfaceClassApp•参考源码:app.hATW线程•TimeWarpLocal::TimeWarpLocal:在这个类的构造函数里面实现,即由下面实现。•主要功能在WarptoScreen函数中实现•Waitforsyncpoint•Readsensordata•Warpbotheyes•Returnthenextvsyncbase

1 / 26
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功