虚拟现实复习整理
虚拟现实复习整理
第一章
虚拟现实概念
Inducing targeted behavior in an organism by using artificial sensory stimulation, while the organism has little or no awareness of the interference. ------ S. M. LaValle.
虚拟现实是通过使用人工感官刺激来诱导生物体产生目标行为,而生物体对这种干扰几乎没有或完全没有意识
类似说法:通过人工多通道信号感知去刺激、诱导有机体特定目标行为,而这个有机体几乎没有,或是根本没有意识到这个诱导行为,对有机体来说像是自然交互一样
虚拟现实三特征(3I)
Immersion:沉浸感,给人身临其境的沉浸感
Interaction:交互性,指人能以纯自然方式与虚拟环境中的对象进行交互操作
Imagination:构想性,构思和设计虚拟环境的创造力
VR技术的优势
使用VR技术的原因
- 现实中成本太高,或工作太危险
- 宇航员太空环境模拟
- 工厂老旧设备生产环境检测
- 真实场景已经不存在
- 名胜古迹VR重构
- 现实世界还不存在的东西
- 科幻作品
- 现实世界难以可视化
- 医疗领域中的人体血管内部可视化
VR技术存在问题
瓶颈问题:
- 快速建模问题(传统3D建模要花费大量时间,并且需要一定专业知识)
- 真实感问题(虚拟现实的真实感是多个因素决定的,如图像质量、声音效果、交互方式等,目前VR还不能与真实世界媲美)
- 显示实时性问题(目前不能同时满足显示速度和图像质量的双重需求,为了速度必须降低模型的复杂度,减少处理的多边形边数)
- 多通道感知问题(视觉听觉是目前VR的主要信息,对其他感知通道的处理还很不成熟)
- 交互性问题(目前VR系统的交互主要依靠控制器或手势交互,交互方面还有待深入研究)
- 多模态数据融合(融合之前,需要对原始数据进行清洗、对齐、归一化等,这个过程比较复杂)
第二章
UI的概念
Specialized choice of hardware / software through which a user communicates with a computer system.
用户通过特定的硬件/软件选择与计算机系统进行通信,这些硬件软件就是User Interface
用户界面设计准则
- 性能(Performance)
- Efficiency, accuracy and productivity
- 易用性(Usability)
- Easy to use and learn
- 有效性(Usefulness)
- Focus on tasks
用户界面核心功能
- 导航(Navigation)
- 旅游,寻路
- 选择(Selection)
- 能够选择一个或多个对象
- 操控(Manipulation)
- 能改变系统的状态
多点触控技术
把任务分解为两方面的工作:
一是同时采集多点信号
二是对每路信号的意义进行手势识别,实现屏幕识别人的手指同时做的点击、拖拉等触控动作
实现多点触控的主要技术
LLP技术(Laser Light Plane)
- 主要运用红外激光设备把红外线投影到屏幕上。当屏幕被阻挡时,红外线便会反射,而屏幕下的摄影机则会捕捉反射去向。再经系统分析,便可作出反应
FTIR技术(Frustrated Total Internal Reflection)
- 在屏幕的夹层中加入LED光线,当用户按下屏幕时,便会使夹层的光线造成不同的反射效果,感应器接收光线变化而捕捉用户的施力点,从而作出反应
ToughtLight技术
- 运用投影的方法,把红外线投影到屏幕上。当屏幕被阻挡时,红外线便会反射,而屏幕下的摄影机则会捕捉反射去向。再经系统分析,便可作出反应
OpticalTouch技术
- 在屏幕顶部的两端,分别设有一个镜头,来接收用户的手势改变和触点的位置。经计算后转为座标,再作出反应
第三章
人类主要感官
了解每个通道的传感器
视觉
听觉
触觉
嗅觉
味觉
平衡感
视觉感知
成像系统
角膜:类似相机的镜头,是光线最先穿透的部分,使得光线可以进入
瞳孔:类似相机的光圈,瞳孔能够根据外界光线强弱自动调节直径大小,在昏暗的光线下最大,在明亮的光线下最小,从而使眼睛能够获得合适的光线
晶状体:类似相机调焦装置,完成聚焦光线的过程,能够对不同距离的物体进行聚焦,对于近处的物体更为球形,对于远处的物体更为扁平
视杆细胞(Rods):感光,只能感知黑白,不能感知颜色;主要负责在昏暗环境下进行视觉感知,与非色觉有关(感知明暗,轮廓,阴影)
视锥细胞(Cones):感知颜色,主要负责在光线充足的环境下进行视觉感知,与色觉有关
夜间活动的动物(如鼠)视网膜的光感受器以视杆细胞为主
而昼间活动的动物(如鸡)则以视锥细胞为主
暗适应:人们从明亮的环境进入黑暗环境时,眼前一片漆黑什么也看不见
亮适应:当人们从坑道或暗室突然回到明亮的环境,眼睛也会不适应,眼前一片白亮,什么也看不见
原因:因视杆细胞和视锥细胞中光敏化合物的浓度改变
避免措施:
- 在暗环境中工作或活动前,可以先在暗环境中适应一段时间,以提高视觉敏感度
- 在亮环境中工作或活动前,可以先在亮环境中适应一段时间,以降低对光敏感度
- 在从暗环境进入明亮环境时,可以闭上眼睛,等到感觉到光线不再刺眼时再慢慢睁开眼睛
- 在从明亮环境进入暗环境时,可以尽量避免直接看强光源,以防眼睛受到刺激
颜色感知
可见光范围:波长390 到 750 nm
人眼可见不同颜色的光,光的波长不同
眼睛将波长转换为可感知的颜色
不同的波长组合会产生更多的颜色
加色模型:RGB
减色模型:CMYK(青色Cyan, 洋红色Magenta, Yellow, blacK)
运动感知
视觉暂留效应:人眼在观察景物时,光信号传入大脑神经,需经过一段短暂的时间(感光细胞感光),光的作用结束后,视觉形象并不立即消失,这一现象被称为“视觉暂留”
视神经的反应速度是二十四分之一秒,是动画、电影等视觉媒体形成和传播的根据
深度感知
双眼视差,是指由左眼和右眼看到的物体的图像位置的差异,这是由于眼睛的水平分离造成的
大脑使用双眼视差从立体视觉中的二维视网膜图像中提取深度信息
3D图形变换
OpenGL用的右手系
DirectX用的左手系
学过GAMES101对应课程,看这里简直就是砍瓜切菜
先做MVP变换,再做视口变换(Viewport transformations)
M:Mode transformation(模型变换)
V:View transformation(视图变换)
P:Projection transformation(投影变换)
定义相机位置向量\(\overrightarrow{e}\),相机朝向方向\(\overrightarrow{g}\),相机正上方向量\(\overrightarrow{t}\)
最后变换的结果:把相机固定在原点,朝向\(-Z\)方向,正上方朝向\(Y\)方向
故先把相机移动回原点,\(\overrightarrow{e}\)移动到\((0,0,0)\)
再把相机旋转对应角度,矩阵为\(R_{view}\),直接写不好写,但是逆着写很好写
因此可以换个思路:如果从终点(原点,朝向\(-Z\)方向,正上方朝向\(Y\)方向)旋转到对应方向,乘的矩阵就是\(R_{view}^{-1}\):

旋转矩阵是正交矩阵,逆矩阵就是旋转矩阵的转置
相机和物体都做同样的变换,故模型变换和视图变换是一样的
MV变换后进行投影变换
投影变换又包括正则变换(Orthographic projection)与透视变换(Perspective projection)
正则变换:


正则变换矩阵就是缩放矩阵乘位移矩阵:
1 | // 位移矩阵 |
透视变换:


设第三行为\((0,0,A,B)\),根据近平面不变和远平面中心点不变,解出AB


最终的透视矩阵就是:
1 | Persp << zNear, 0, 0, 0, |
先用透视变换把光锥挤压成长方体,再用正则变换将长方体中心固定在原点,压缩成长宽高都是2(xyz都是-1到1)的标准正方体
最后,进行视口变换(Viewport transformations)
视口变换就是把标准正方体映射到屏幕上

齿轮绘制


齿轮的一小块,以\(\dfrac{\theta}{4}\)为间隔,分成4条线:\(P_0\)到\(P_1\),\(P_1\)到\(P_2\),\(P_2\)到\(P_3\),\(P_3\)到\(P_4\)
光照
光由太阳或其他光源发射出来
光与物体相互作用;部分被吸收,部分被散射
光被传感器(人眼或胶片)吸收
光与物体交互
吸收(Absorption): 光强度减小或颜色改变,方向不变(intensity decrease/color change, direction unchanged)
- 通过透明介质,吸收很少;在清晰的吸收介质中有显著的吸收
散射(Scattering): 光方向改变,强度不变(direction of light changes, intensity unchanged)
- 如通过浑浊液体
发射(Emission): 产生新的光,在着色过程中不常出现(new light created; doesn’t come up often in shading)

光照模型
漫反射(Diffuse shading)
环境光(Ambient shading)
镜面反射(Specular (Phong) shading)
发射(Emission):发射是指物体自身发出光线,例如一个发光的物体(如灯泡或电脑屏幕)会发出光线,这种光线就是发射光
可以参考GAMES101 illumination和GAMES101 shading

定义3个向量:\(\overrightarrow{v}, \overrightarrow{n}, \overrightarrow{l}\),都是单位向量
其中\(\overrightarrow{v}\)是从shading point指向观察点方向的向量
\(\overrightarrow{n}\)是shading point的法线方向
\(\overrightarrow{l}\)是从shading point指向光源方向的向量
再定义一些数:物体表面对光的吸收率\(k_d\),shading point到光焰的距离\(r\)
漫反射
shading point周围的单位面积接收到光的能量
Lambert's cosine law:\(\cos{\theta}=\overrightarrow{l}\cdot\overrightarrow{n}\),直接用向量点乘算出角度

这里的\(\overrightarrow{n}, \overrightarrow{l}\)都是单位向量
根据\(\overrightarrow{l}\cdot\overrightarrow{n}=|l|\cdot|n|\cdot\cos{\theta}\)得出:\(\cos{\theta}=\overrightarrow{l}\cdot\overrightarrow{n}\)
又因为光单位面积的强度会虽传播距离增大而减小(总强度不变),如图

假设在距离为1的球壳上单位面积光强为\(I\),距离为\(r\)的球壳上单位面积光强为\(I^{'}\): \[ \begin{align*} 4\pi\cdot1^2\cdot I&=4\pi\cdot r^2\cdot I^{'}\\ I^{'}&=\frac{I}{r^2} \end{align*} \] 故最后漫反射的结果就是:

其中\(k_d\)是shading point对光的吸收率,如果是1那就全部反射,如果是0那就全部吸收,看着就是黑的
取\(\text{max}\)是因为只考虑反射,如果角度大于90度说明是从物体下方射到上方的表面,不考虑
漫反射,光线打到shading point,能量会被均匀反射到各个方向,即不管从哪个方向观测,看到的结果应该是一样的,因此跟观测方向\(\overrightarrow{v}\)没有关系

\(k_d\)的影响:

镜面反射(高光)
Blinn-Phong

镜面反射的方向是\(R\)
但是因为物体表面材质原因,可能会在与镜面反射方向接近的方向也能看到高光,即沿着镜面反射方向有一个分布
\(\overrightarrow{v}\)与\(R\)足够接近时,能看到高光
Blinn-Phong模型:当\(\overrightarrow{v}\)与\(R\)足够接近时,\(\overrightarrow{l}\)与\(\overrightarrow{v}\)的半程向量\(\overrightarrow{h}\)与法线方向\(\overrightarrow{n}\)很接近
这个改进就是半程向量很好算,反射向量很不好算
求两个单位向量的角平分线方向很容易,根据平行四边形法则求和即可,再归一化成单位向量,如下图所示
\[
\overrightarrow{h}=\dfrac{\overrightarrow{v}+\overrightarrow{l}}{||\overrightarrow{v}+\overrightarrow{l}||}
\]
判断两个向量很接近:点乘
\(k_s\)是镜面反射系数,也就是高光下的颜色,通常都是白色
注意\(L_s=k_s\cdot(\dfrac{I}{r^2})\cdot\max{(0,\overrightarrow{n}\cdot\overrightarrow{h})\color{red}^p}\),后面有个指数\(p\),原因如下:

两个向量的夹角余弦确实能体现接近程度,但是容忍度太高了,生成高光的时候会出现一个很大的高光区域
我们认为的高光应该是一个很亮的,集中在很小的区域,只要方向稍微离开一点就看不见高光了
通常这个指数\(p\)会取在100到200左右,用来控制高光区域有多大

环境光
我们认为任何一个点接收到来自环境的光,永远都是相同的(实际并不是这样,这里只是简化,如果要算真正的环境光,需要全局光照)
环境光设置为一个常数,与法线、光照方向、观察方向都无关

最后结果

顶点法线计算
利用叉乘求解法线


很容易计算
网格表面绘制

先决定母线:\(x^2+z^2=[a+\cos{(y+b)}]^2\)
画一个三角函数\(x=a+\cos{(y+b)}\),就在XOY平面上画了一个三角函数
XOZ平面切这个花瓶,得到的是圆,平面所在\(y\)不一样,半径就不一样
所以令\(r=a+\cos{(y+b)}\)
半径知道了,在XOZ平面上就能知道\(x\)和\(z\)的大小: \[ \begin{align*} x&=r\cdot\cos{(\theta)}\\ z&=r\cdot\sin{(\theta)} \end{align*} \] 然后根据给定的\(y\)来采集点,\(\theta\)从小到大转一圈,取点,然后\(y\)再加一个值,接着重复取点
两层对应位置上4个点构成一个四边形
对应点:第\(i\)层的第\(j\)个点,第\(i\)层的第\(j+1\)个点,第\(i+1\)层的第\(j\)个点,第\(i+1\)层的第\(j+1\)个点
把等号右边挪到左边,得到隐函数表示的曲面方程:\(f(x,y,z)=x^2+z^2-[a+\cos{(y+b)}]^2\)
求这个曲面方程的法向量就很容易,直接求梯度即可;至于为什么求梯度就能算出法线,可以参考这个视频
分别对\(x,y,z\)求偏导,得出: \[ \begin{align*} \frac{\partial f}{\partial x}&=2x\\\\ \frac{\partial f}{\partial y}&=-2(a+\cos{(y+b)})\cdot (-\sin{(y+b)})\\ &=2\sin{(y+b)}\cdot(a+\cos{(y+b)})\\\\ \frac{\partial f}{\partial z}&=2z\\ \end{align*} \] 把法向量化成单位向量,则: \[ \overrightarrow{n}=(\dfrac{2x}{\sqrt{(\frac{\partial f}{\partial x})^2+(\frac{\partial f}{\partial y})^2+(\frac{\partial f}{\partial z})^2}},\dfrac{2\sin{(y+b)}\cdot(a+\cos{(y+b)})}{\sqrt{(\frac{\partial f}{\partial x})^2+(\frac{\partial f}{\partial y})^2+(\frac{\partial f}{\partial z})^2}},\dfrac{2z}{\sqrt{(\frac{\partial f}{\partial x})^2+(\frac{\partial f}{\partial y})^2+(\frac{\partial f}{\partial z})^2}}) \]
OpenGL光源位置以及属性
材质

光源
OpenGL总共有8个光源
GL_LIGHT0
到GL_LIGHT7
光源要与材质对上
OpenGL有点光源(w=1
)和远处光源(w=0
),其中w
是齐次坐标的w
纹理映射
纹理映射概念
纹理映射:将N维图像粘贴到集合对象上
作用:用低成本的方式实现较为真实的效果
纹理图像放大缩小
最邻近法(Box filter)
双线性插值法(Bilinear interpolation)
平均值法
Mipmaps
最邻近法

双线性插值法


Mipmaps
仅能做正方形
距离近的用高分辨率纹理
距离远的用低分辨率纹理


OpenGL实现纹理映射基本过程
- 指定纹理
- 读取或生成图像
- 分配给纹理,调用
glTexImage2D
,里面能指定Mipmaps的等级 - 启用纹理和绑定
- 指定纹理参数
- 包装,Wrap Modes
- 过滤,Filter Modes
- 为每个顶点分配纹理坐标
Bump mapping
Bump Mapping(凹凸映射)是一种在计算机图形学中常用的技术,它可以增强被渲染物体的表面细节,使其看起来更加真实和立体,是模拟几何体上的褶皱和凸起的廉价方法
原理:Bump Mapping是一种在像素级别扰动物体表面法向量的光照技术。它一般采用纹理映射作为输入表示扰动的大小。在光照计算时,程序读取法线图,并获取到当前像素点的法线信息,结合光线信息进行光照计算,从而让物体表现更丰富的细节
实现:Bump Mapping的实现方法有多种,包括法线贴图(Normal Mapping)、视差贴图(Parallax Mapping)、浮雕贴图(Relief Mapping)等。其中,最常用的是法线贴图,增加法线贴图后,对局部的物体表面进行法线扰动,进而改变明暗关系,从而达到增加表面细节的效果
优点:Bump Mapping是一种提升物体真实感的有效方法,但却不需要额外提升物体的几何复杂度,无需对物体增加顶点或者改变顶点位置,达成提升物体表面细节或不规则性方面效果
第四章
阴影形成过程

点光源:

区域光源:

阴影体:

进一个加一,出一个减一
观察最后是1还是0,如果是1就是阴影,如果是0就不是阴影
软阴影和硬阴影
硬阴影:硬阴影是由理想中的点光源造成的,只有本影区,边缘清晰。这是因为理想的点光源会产生清晰的阴影边缘,只包含物体的本影(umbra)。在计算机图形学中,硬阴影通常是通过阴影映射(Shadow Mapping)或阴影体(Shadow Volumes)等技术实现的
软阴影:软阴影是由现实中的光源(如线、面或体光源等)产生的,有半影区,边缘模糊。这是因为现实中的光源本身有一定的体积,会形成拥有半影区的阴影,使阴影的边缘呈现出柔和的过渡效果。在计算机图形学中,软阴影的实现通常需要更复杂的算法,如基于区域光源的阴影映射,或者采用一些模糊化处理技术

左图只有一个阴影,是点光源产生,硬阴影
右图阴影边界虚化,说明不是点光源,故是软阴影
平面阴影投射矩阵
我不会算,但我能记住: \[ \begin{align*} S &= H\cdot P\\\\ H&=\begin{bmatrix} -Al_x\cdot\overrightarrow{n}\cdot\overrightarrow{l} & -Bl_x & -Cl_x & -Dl_x\\ -Al_y & -Bl_y\cdot\overrightarrow{n}\cdot\overrightarrow{l} & -Cl_y & -Dl_y\\ -Al_z & -Bl_z & -Cl_z\cdot\overrightarrow{n}\cdot\overrightarrow{l} & -Dl_z\\ 0 & 0 & 0 & \overrightarrow{n}\cdot\overrightarrow{l} \end{bmatrix} \end{align*} \] 可以看成: \[ \begin{bmatrix} -Al_x & -Bl_x & -Cl_x & -Dl_x\\ -Al_y & -Bl_y & -Cl_y & -Dl_y\\ -Al_z & -Bl_z & -Cl_z & -Dl_z\\ 0 & 0 & 0 & 1 \end{bmatrix} \] 然后对角线元素每个都乘\(\overrightarrow{n}\cdot\overrightarrow{l}\)


光线追踪
通过追踪光线从来源开始照射到物体上,再由物体反射的光线“路径”,模拟真实世界中的光线的物理特点
由于完整运算所有路径十分消耗运算资源,因此现有光线追踪技术仅运算“目所能及”的光线路径
第六章
人耳解剖结构及功能
外耳:可见,由皮肤和软骨折叠而成,外耳的主要功能是收集声音并引导它进入耳道,引起鼓膜振动
中耳:包含鼓膜,功能是放大声音
内耳:分析声波并包含一个维持身体平衡的装置
描述声音的三个技术指标
音高/频率:声音的频率,人体频率范围20 Hz至20000 Hz
响度:声音的能量,与声音振幅成比例的属性。描述了声音的大小,以分贝为单位
音色:音符、声音或音调的质量,用于区分不同类型的声音产生,如声音和乐器
HRTF立体声
HRTF利用 IID(Inter Aural Intensity Difference)两耳音量大小差和 ITD(Inter Aural Time Delay)两耳时间延迟量差等技术产生立体音效,使声音传递至人耳内时,聆听者会有环绕音效之感觉,通过 DSP,可实时处理虚拟世界音源
两耳音量大小差:如果声音被物体挡住,我们听到的声音音量会变小。如果声音从我们的正左方传来,那么我们的左耳觉察到的声音保留了原始声音,而我们的右耳察觉到的声音的音量会减小,因为我们的头吸收了一部分音量
两耳时间延迟量差:假设两耳的距离为20厘米,声源在左边,则声波会首先到达左耳,588us后,声音会到达右耳,通过时间延迟人脑可以毫不困难分辨不同的方位
声波遇到物体时会反弹。耳朵是内空的卵圆型,因此,不同波长的声波在外耳产生不同的效应。按照频率分析的观点,当不同的声源从不同的角度传来,会在鼓膜上产生不同的频率振动。正因为耳廓的存在,造成了从前面和从后面传来的声音截然不同
第七章
动画与电影实现的视觉基础
主要利用的是人眼的视觉暂留效应,是一种通过在屏幕上显示的一系列单独状态来产生运动错觉的技术
计算机动画技术
动作捕捉
夸张
基于物理的动画
第八章
AR
AR概念
一种动态融合虚拟场景和真实场景的技术
虚拟景物对真实场景起增强作用
AR特征
属于虚拟现实条件弱化类,允许用户在看到虚拟环境的同时还能感知所在的真实世界
实时人机交互
与VR区别
VR:看到的东西全是电脑生成的,看不见现实的东西,虚拟现实要求在与人所处环境完全隔离的场景中体现沉浸感
AR:可以看到现实的东西,也能看到新的东西,增强现实的目标是使用户处于一种融合的环境中,无法区分真实与虚拟
不同类型的AR
基于光学
基于视频
基于监视器
基于光学的透视HMD系统
利用光学镜片的部分透光性和反光性

基于视频的透视式HMD系统

基于视频与基于光学的比较:
- 基于光学的AR系统能较好地保持真实场景图像,失真小
- 基于光学的AR系统安全性较好
- 基于视频的AR系统融合灵活,亮度匹配容易
基于监视器的立体眼镜系统

AR系统实现基本步骤
获取真实场景信息
对真实场景和相机位置信息进行分析
生成虚拟景物
合并视频并显示
AR系统实现关键技术
- 聚焦与对比度(Focus and contrast)
- 由计算机生成的虚拟对象恒聚焦,而摄像机摄取的真实世界由于景深及焦距的原因将造成部分聚焦,部分散焦
- 人眼能够检测高对比度的物体,而摄像机和显示器能响应的动态对比度很有限
- 融合精度与实时性问题(Registration)
- 增强现实系统对融合精度要求很高,随用户视点变化应在几十毫秒内融合完,技术上实现起来非常困难。若整合精度较低或显示发生滞后,将有可能造成环境中的人出现“平衡不适应感”或“位置不适应感”,这会导致所谓的“运动病”
- 系统可移动性(Portability)
- 增强现实需要用户在较大范围内移动,甚至要求用户位于任务现场。因此增强现实强调系统的移动性,特别要求能远离系统控制环境,在室外或野外自由活动
- 传感系统(Sensing)
- 构建有效的增强现实系统的最大障碍是缺乏能有效检测用户及其周围对象位置的精确的远程传感器和跟踪器,这种追踪误差对于虚拟现实系统也同样存在
第九章
触觉器官:皮肤
皮肤:
热感受器
疼痛感受器
机械性感受器(机械性压力)
触觉系统
A force reflecting system which allows a user to touch, feel, manipulate, create, and/or alter simulated objects in a virtual environment
一种力反馈系统,它允许用户在虚拟环境中触摸、感觉、操纵、创建和/或改变模拟的物体
按触觉反馈原理,可分为5类:
- 视觉式
- 充气式
- 振动式
- 压电刺激式
- 神经肌肉刺激式
味觉器官:舌头
4种味觉:酸甜苦咸
(注意,“酸甜苦辣”并不是4种味觉,准确来说“辣”不是味觉,“咸”才是)
嗅觉器官:鼻子
鼻子(挥发性物质)
嗅觉感知/味道展示(气味“投影机”)