开发简介
- 开发主题:VR畸变
- 参与人员:helen,xin,云淡风清,ice等(VR开发者QQ群:538874606)
- 项目代码
- gitter讨论链接
- 主要内容
- VR畸变/反畸变介绍
- openVR显示接口介绍
- zemax软件设计光学系统
- 反畸变处理
这里主要是分享一下我们对于这方面问题的一些看法,文档可能存在一些错误和不足,希望能够得到大家的批评和建议,与大家一起将这部分内容做的更加完善,持续更新.
VR畸变/反畸变介绍
在VR显示系统中,显示的模型为:人眼—透镜—显示屏.人眼通过透镜得到大的FOV,从而带来很强的沉静感,但透镜带来大FOV的同时,也会产生一些副作用,例如几何畸变和色散.
- 几何畸变
这里简要描述一下畸变和反畸变的过程:显示屏上图像如下图(图片使用distortionizer生成)
(distortion_normal)
上图中的横/纵线组成的方格图,横/纵各自都是笔直的直线,并且横/纵线互相垂直.这是在人眼直接观看屏幕时的情况,在VR显示系统中,人眼和显示屏之间增加了一个透镜,因为透镜的光学原因,最终看到的图像会是下图这样的
(distortion_pincushion)
该图中的横/纵直线不再互相垂直,并且可以看到明显的内凹(“枕型”),并且随着离圆圈中心的距离越远内凹幅度越大.这就是镜片产生的”枕型”畸变.人眼通过透镜观显示屏,显示屏上显示的是”distortion_normal”图片,而人眼最终看到的是”distortion_pincushion”图片,这就是人眼看到的畸变图像.
为了使人眼看到的图像为”distortion_normal”图片,我们可以通过修改显示屏上的显示内容,对原始图像进行预畸变处理,从而抵消镜片产生的畸变影响(还有一种方式是通过多个透镜单元,消除透镜产生的畸变,实现无畸变镜片,这种方式目前普及率低,这里不详细描述这种情况).
(distortion_barrel)
上图中的横/纵直线不互相垂直,并且可以看到明显的外凸(“桶型”),并且随着离圆圈中心的距离越远外凸幅度越大,显示屏上的图像进行了预畸变处理后,这与”distortion_pincushion”正好相反(外凸和内凹的幅度必须相同,才能将图片完美还原为最初的图像).显示屏显示”distortion_barrel”图片,人眼通过透镜观看到的图像就会是正常的图像,即”distortion_normal”图片那样.
这里是我在ShaderToy上做的一个畸变和反畸变的动画.
原图:
k<0时,”枕”型畸变:
k>0时,”桶”型畸变:
之前翻译过一些关于畸变的一些链接:
Understanding the Oculus Rift Distortion Shader
处理VR透镜畸变的三种方法
Distortion Correction
VR光学设计的关键参数 - 色散
白光通过透镜,不同颜色的光因波长的不同而出现颜色分离的现象,你可以拆下一个cardboard或其他VR透镜,然后通过眼睛观察,边缘的地方会出现如下图所示色散现象:
openvr显示相关接口
使用Zemax设计VR透镜
感谢Steven Cui分享了这部分内容,原稿在这里下载,下面是这份文稿的内容
基本原理
VR透镜的目的是为了将LCD显示屏成一个放大的虚像。
放大的目的有两个:1是显示屏靠人眼太近,人根本看不清,祖先没有进化出这种功能;2是FOV(field of view)太小。
所以,我们开始设计个单透镜,回顾下初中光学知识,我们需要将LCD屏放在一倍焦距之内,这就是基本原理。
下面开始说zemax的设计过程
ZEMAX的软件设计