相机,棱镜和光场

一、成像方法

Imaging = Synthesis + Capture

1.Synthesis(图形学上)合成:比如之前学过的光线追踪或者光栅化

2.Capture(捕捉):把真实世界存在的东西捕捉成为照片

二、相机

1.小孔成像

  • 利用小孔成像的相机叫做针孔相机
  • 相机的各个部位
    • 快门(Shutter):控制光进入相机
    • 传感器(Sensor): 捕捉光并记录下来(记录 Irradiance)
  • 如果没有透镜,相机就拍不了了
    因为如果直接把感光元件放在一个人的面前,感光元件上任何一个点都可能收集到不同方向过来的光,而且作为传感器的它不会区分来自各个方向的光线,所以会糊
  • 针孔相机拍出的东西是没有深度可言的

    也就是任何地方都是锐利清楚的,都不会是虚化的

    因为透镜的存在所以会产生虚化,这个之后会提到

    并且我们之前做光线追踪的时候用的就是针孔相机的模型,所以我们也得不到景深的模糊效果

    所以如果我们可以模拟光线和透镜的作用,那么我们也可以作出景深的渲染效果

2.FOV(field of view 视场)

视场说的是能看到多大的范围

h: 传感器高度(宽度)

f: 焦距,传感器与 透镜/小孔 的距离

同样大小的传感器,焦距越大,视场越窄

同样焦距,传感器越大,视场越宽

同样视场,焦距和传感器等比

-焦距(Focal Length)

    • 历史原因,通常以35mm的胶片为基准(eg.17mm为广角)
    • 手机对应的基准会小很多(等效为35mm)

-传感器大小(Sensor Size)

    • 区分传感器和胶片:传感器记录收到的Irradiance; 胶片是存成图像格式

3.Exposure 曝光

曝光记录的是总共的能量,是T×E

曝光时间T由快门控制

Irradiance(E)由光圈与焦距决定

影响照片亮度的三要素:光圈、快门、感光度

三者的关系:

光圈

光圈是个挡光的东西,有大小,由F数控制,光圈是一种仿生学的设计,仿照人的瞳孔放大缩小

  • F-Number (F-Stop):描述光圈的大小
    • 有两种写法:FN or F/N(这些不重要,重要的是N)
快门
  • 快门:控制光通过的时间(我们关心从关闭到打开的过程)
    • 两个现象

更长的曝光时间/更快的物体运动速度 容易造成运动模糊

类似于在时间上采样

快门开启需要时间,这个会造成高速运动物体的扭曲,比如下图飞机的螺旋桨

ISO gain(感光度)
  • ISO :可以理解为乘了一个数(就是一个简单的增倍eg.ISO200就是ISO100的两倍)
  • ISO做简单放大的同时也会放大噪声,所以当倍数过大的时候可能会造成图片上很多白点

进光量~F-Stop² / Shutter Speed

(F数理解为直径分之一,与面积是平方关系,所以为了曝光量平衡,与快门速度也是平方关系)

即使比例关系做对了

但是大光圈会有浅景深的效果,快门时间会导致运动模糊等效果,需要权衡

  • 应用:
    高速摄影,每秒极高帧率,快门时间受限需要用更大光圈或者高ISO
  • 延时摄影,快门时间很长,光圈变小
  • 萤火虫长时间的飞构成了图片

三、透镜

真实的透镜并不那么理想,有些透镜无法将光线聚于一点 出现 Aberrations

理想化的透镜:

所有进入透镜的平行光线都通过透镜的焦点

穿过焦点的所有光线在通过透镜后将是平行的

焦距可以任意改变(实际上用透镜组改变焦距)

1 薄透镜方程

定义:zo(物距) zi(像距)f(焦距)

1/f =1/zi + 1/zo

推导过程:

2.Defocus Blur(焦散模糊) ------景深的原因

为了解释景深,我们引入Circle of Confusion (CoC)

左边有一个Focal Plane,其上的东西会成像到Sensor Plane上

如果Object不在Focal Plane上,如下图可能会聚焦在Image上,然后光线继续传播到Sensor Plane上,这时候在Sensor Plane上形成的圆就是CoC

CoC告诉我们看到的东西模糊不模糊,取决于光圈的大小,大光圈容易有模糊的效果

因为说CoC大小与光圈成正比,所以我们回头看光圈

之前我们说F数它是直径分之一,其实不对

F数的明确定义是焦距除以直径

一些例子:

3.在光线追踪中使用薄透镜近似

(略)

4.景深 Depth of Field

  • 用大/小 光圈会影响模糊的范围
  • 景深就是指实际场景中有一段深度,经过透镜后会在成像屏幕附近形成一段区域,我们认为这段区域的CoC都是足够小的。(可以理解为CoC和pixel一样小时,形成的image就是锐利的)
    • 所谓的景深的这一段就是对应CoC足够小的一段也就是清晰的一段
  • Depth of Field(FYI)
  • 考虑景深的最远处和最近处,推一下公式,把这些深度和焦距联系起来
    也就是某个位置穿过透镜会到某个地方
    • 把DF DN DS dF dS dN 联系起来(深度和焦距联系起来)
    • DOF = DF - DN

四.光场

Light Field / Lumigraph 两个词指同一东西,属于历史遗留问题,是由两个组独立几乎同时发现的同样东西,叫法不一样

要说光场,我们就从看到的世界是什么说起

我们看到这个三维世界,在我们眼睛里类似就是一幅图

那如果我们直接看到一幅图,这幅图完全记录了之前看到的光线信息,我们也能得到同样的结果

这也是类似虚拟现实的原理,用一个平面的成像设备,让人误以为在三维环境中

1.全光函数 The Plenoptic Function(描述我们可以看到的世界)

  • 从简单说:站在一个场景,位置固定,我们往四面八方看,定义任意一个方向
  • 改进:引入波长(颜色) → 彩色
  • 拓展:时间t → 电影
  • 再拓展:位置不固定,在三维空间内任意移动 VX VY VZ → 全系电影
  • 再改进:把函数理解为在任意位置,往任意方向看,在任意时间看到不同的颜色

→ 这就是我们看的世界

  • 可以从全光函数提取一些信息出来,用来表示更复杂的光

2.采样全光函数 Sampling Plenoptic Function

光场其实就是全光函数的小部分,在定义光场前我们先定义光线,定义一条光线需要的是二维的位置和二维的方向(在下面会阐述)

要记录一个物体向四周展示的样子,只需要记录包围盒上表面各个点往各个方向发射的光线的信息

这也就是光场记录的东西

在物体表面任何一个位置往任何一个方向去的光线的强度

怎么理解二维的位置与二维的方向呢?

物体的表面是二维的,方向也是二维的,所以用这个四个信息当变量的函数就是光场

我们把物体变成光场,记录下光场后也就相当于记录下了物体的观测

我们还可以理解成我们取一个平面,平面右边是一个物体,它的光会穿过这个平面来到左边

我们不需要知道右边有什么,我们只需要知道对于平面上任意一个点的任意一个方向会发出什么

相关推荐
Frank学习路上1 天前
【C++】OGRE:面向对象图形渲染库配置与示例
c++·图形渲染·ogre
Padid9 天前
Unity SRP学习笔记(二)
笔记·学习·unity·游戏引擎·图形渲染·着色器
refineiks15 天前
three.js绘制宽度大于1的线,并动态新增顶点
3d·图形渲染·webgl
Winston Wood17 天前
一个简单的例子,说明Matrix类的妙用
android·前端·图像处理·图形渲染
森龙安17 天前
VulkanTutorial(8·Shader modules)
图形渲染
云渲染图科普匠20 天前
3d室内设计效果图渲染平台哪个好?瑞云快图怎么样?
3d·图形渲染·3dsmax
先知demons20 天前
antvG6如何实现节点动画、连线动画、切换节点图标
前端·javascript·vue.js·图形渲染·canva可画
3DCAT实时渲染云21 天前
边缘计算技术的优势与挑战
实时互动·边缘计算·图形渲染
大耳猫24 天前
Android OpenGL天空盒
android·kotlin·android studio·图形渲染
大耳猫1 个月前
Android OpenGL触控反馈
android·kotlin·android studio·图形渲染