19 Games101 - 笔记 - 相机与透镜
**19 ** 相机与透镜
目录
- 摘要
- 一 照相机主要部分
- 二 小孔成像与视场(FOV)
- 三 曝光(Exposure)
- 四 景深(Depth of Field)
- 总结
摘要
虽说照相机与透镜属于相对独立的话题,但它们的确是计算机图形学当中的一部分知识。在过往的十多篇笔记中,我们学习的都是如何渲染出一张虚拟的图片,因此在本节当中会去介绍照相机与透镜的相关知识,了解现实图像生成的一些内容。
一 照相机主要部分
对于一个照相机来说,最重要的组成部分之一便是透镜,它是成像的关键,无论是小孔成像还是透镜成像,如下图所示:
其次我们知道照相机的快门一般一直处于关闭状态,直到按下拍照的瞬间才会打开,允许光线信息进入到透镜:
最后,当快门打开光线成功通过透镜之后,所有光线信息都会照射到传感器上(相当于胶片)来进行存储,通过传感器上的信息得到最终图像:
那么回想一下在讲辐射度量学的时候,我们介绍了种种关于光线物理性质的一些描述概念,对应于这里传感器,其存储的应该是什么呢?观察下图:
右边相当于传感器平面,传感器的每一点记录了来自物体所有方向的光,因此每一点存储的也就是irradiance(如果读者不清楚辐射度量学可以略过,并不影响本文阅读)。
以上就是对照相机成像的最重要几部分的简略介绍,接下来会一一详述解释。
二 小孔成像与视场(FOV)
相信读者一定都了解或听说过小孔成像,该项技术的起源十分悠久,通过小孔只允许一定方向的光线通过,从而得到一个倒立的成像:
对于小孔成像不多做解释,主要是希望通过它从而引出视场的概念,如下图:
举一个具体的例子:
从图中可以看出,当焦距越大的时候,成像的角度就越小集中在一小部分,类似于我们拿手机不停的放大拍摄倍数一样。
当然除了焦距,传感器的长度也有着很明显的影响,底片长度越大,自然FOV也就越大:
tips:
对于不同的设备,传感器长度不一,想要保持同样的FOV的话,就需要同比缩小焦距。
三 曝光(Exposure)
在第一章中我们提到传感器上接受到的是irradiance,也就是每单位面积所接受到的光线功率,而曝光就是用时间乘上了这个irradiance
Exposure = time x irradiance
从物理意以上来说就是真正的所接受到的能量(Energy)。那么这个时间由什么控制呢?
没错正是快门速度!除此之外,曝光还会被其他2个参数所影响,即一共3项参数:
1. 快门速度(Shutter speed),快门打开时间越长,进光时间越长,进光量自然越多。
2. 光圈大小(Aperture size),描述此项的数值称为f-stop,直观理解如果光圈越大,被遮挡的光越少,进光量越多,那么曝光的程度就会越高。
3. 感光度(ISO gain),对于感光度可以简单理解为对最终的图像值乘上了一个倍数。
以下给出一张图,构建对这三项的直观理解:
首先观察最下方的ISO变化对照片的影响,之前提到ISO就是一个简单的线性变化,对图像的结果乘上了一个倍数,随着ISO的值显著增大之后,虽然画面整体亮度会提升,但同时也会观察到画面有很多的噪点。这其实很容易解释,照片本质所记录的无非就是信号,那么对于光线的信息自然也会有些很小的noise进入,如果对图像进行整体进行亮度放大的话,noise自然也会变的更加明显形成了噪点。
接着是中间一行的快门速度,图片下方的值越大代表速度越慢,快门打开时间越长,透镜的进光量越大,图片也就会越亮,但同时运动的物体也会变的模糊起来。
原因如下: 快门打开后照相机会记录一段时间内的所有物体的光线信息,如果快门打开时间足够长,就能通过最终的照片捕捉到物体的移动,而这也就是动态模糊:
但这种模糊也不一定不是坏事,正如上图例子所示,左边快门速度慢看到了锤子有落下的趋势,获得到了更多的图片信息,而右边的快门速度快,看上去更像是静止的画面,没有动态的效果。
这也是为什么一般的电影拍摄只用24FPS却不会觉得卡顿,因为动态模糊的存在使得人眼接受到的信息更多。但对于游戏来说往往需要60FPS以上,因为游戏内每一帧都是静止画面并不存在动态模糊(有的游戏可以打开动态模糊),所以需要更多的图片数量才会使人觉得不卡顿。
但对于快门速度有一点需要额外关注,无论快门打开的速度有多快,它一定有一个打开关闭的过程,所以整幅照片上不同的部分往往记录的时间间隔有着微小差距,当拍摄高速物体时,这种效果更加明显:
最后,对于一开始那幅图的最上面一行,也就是光圈大小 F-stop 或者F-Number值(该行中的逗号代表小数点),该值大小与光圈直径的倒数成正比,因此FN值越小,代表光圈越大,进光量越大,画面亮度越高,但同时也会带来景深模糊的影响(对于该点留在下一节去解释):
以上就是关于曝光一些基础内容,对于曝光有两点主要的应用:高速摄影和低速摄影:
对于高速摄影来说,物体运动速度极快,因此需要非常小的快门速度来捕捉到它,但同时为了补偿进光时间不够,还需要使用大光圈或提高ISO来保证曝光正常:
对于低速摄影来说则相反,一般采用较长的快门时间来捕捉物体运动的轨迹,如下图飞机降落轨迹:
四 景深(Depth of Field)
在讨论到景深之前,我们先给出本章中所采用的理想透镜的性质:
(1) 所有平行射入透镜的光都会集中于一点,称该点为焦点
(2) 所有从焦点射入透镜的光都会平行射出(光路可逆性)
(3) 焦距可以被随意改变(这里单个透镜当然不行,但在现实中大部分的照相机都是一个透镜组,可以做到焦距随意改变)
利用这些性质可以得到理想透镜的成像规律,对于一个通过透镜的成像物体来说,其物距Z0,像距Zi和焦距f之间存在如下图的关系:
其推导过程可以简单的从两对相似三角形入手:
过程如下:
了解了上述的透镜成像规律之后,让我们一起观察一下景深模糊所产生的的原因:
同时这里也给出了不同光圈大小拍照的例子,小光圈锐利,景深模糊不明显,大光圈则有明显的景深模糊
那么回归到本章的主题,Depth of Field,它与景深模糊并不是同一个东西,景深模糊是一种情形,而景深则是一个具体的数值,其具体指 当我们固定一个可以接受的Circle of Confusion C值之后,可以逆向推导出小于该C值的对应的一段距离是多少,这个距离就是景深,如下图所示:
图中蓝色阴影区域的C值小于提前确定的值,该区域的长度即为景深,对应推导过程也已经在闫老师课上的这个Slides中给出。
Note:
关于如何在光线追踪当中实现景深模糊的效果,只需要简单的模拟透镜的光线传播即可,如下图当中的步骤所示:
实际渲染效果图:
相关文章:

19 Games101 - 笔记 - 相机与透镜
**19 ** 相机与透镜 目录 摘要一 照相机主要部分二 小孔成像与视场(FOV)三 曝光(Exposure)四 景深(Depth of Field)总结 摘要 虽说照相机与透镜属于相对独立的话题,但它们的确是计算机图形学当中的一部分知识。在过往的十多篇笔记中,我们学习的都是如…...

Flink入门学习 | 大数据技术
⭐简单说两句⭐ ✨ 正在努力的小新~ 💖 超级爱分享,分享各种有趣干货! 👩💻 提供:模拟面试 | 简历诊断 | 独家简历模板 🌈 感谢关注,关注了你就是我的超级粉丝啦! &…...

Arthas实战教程:定位Java应用CPU过高与线程死锁
引言 在Java应用开发中,我们可能会遇到CPU占用过高和线程死锁的问题。本文将介绍如何使用Arthas工具快速定位这些问题。 准备工作 首先,我们创建一个简单的Java应用,模拟CPU过高和线程死锁的情况。在这个示例中,我们将编写一个…...

HTML制作跳动的心形网页
作为一名码农 也有自己浪漫的小心思嗷~ 该网页 代码整体难度不大 操作性较强 祝大家都幸福hhhhh 效果成品: 全部代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD><TITLE> 一个…...

如何在Odoo 17 销售应用中使用产品目录添加产品
Odoo,作为一个知名的开源ERP系统,发布了其第17版,新增了多项功能和特性。Odoo 17包中的一些操作简化了,生产力提高了,用户体验也有了显著改善。为了为其用户提供新的和改进的功能,Odoo不断进行改进和增加新…...
为什么pdf拆分出几页之后大小几乎没有变化
PDF 文件的大小在拆分出几页之后几乎没有变化可能有几个原因: 图像压缩: 如果 PDF 文件中包含图像,而这些图像已经被压缩过,拆分后的页面依然会保留这些压缩设置,因此文件大小可能不会显著变化。 文本和矢量图形: PDF 文件中的文…...

如何在 VM 虚拟机中安装 OpenEuler 操作系统保姆级教程(附链接)
一、VMware Workstation 虚拟机 若没有安装虚拟机的可以参考下篇文章进行安装: 博客链接https://eclecticism.blog.csdn.net/article/details/135713915 二、OpenEuler 镜像 点击链接前往官网 官网 选择第一个即可 三、安装 OpenEuler 打开虚拟机安装 Ctrl …...

(六)PostgreSQL的组织结构(3)-默认角色和schema
PostgreSQL的组织结构(3)-默认角色和schema 基础信息 OS版本:Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本:16.2 pg软件目录:/home/pg16/soft pg数据目录:/home/pg16/data 端口:57771 默认角色 Post…...
DockerFile定制镜像
dockerfile 简介 Dockerfile 是⼀个⽤来构建镜像的⽂本⽂件,⽂本内容包含了⼀条条构建镜像所需的指令和 说明,每条指令构建⼀层,最终构建出⼀个新的镜像。 docker镜像的本质是⼀个分层的⽂件系统 centos的iso镜像⽂件是包含bootfs和rootfs…...

Java8中JUC包同步工具类深度解析(Semaphore,CountDownLatch,CyclicBarrier,Phaser)
个人主页: 进朱者赤 阿里非典型程序员一枚 ,记录平平无奇程序员在大厂的打怪升级之路。 一起学习Java、大数据、数据结构算法(公众号同名) 引言 在Java中,并发编程一直是一个重要的领域,而JDK 8中的java.u…...
岛屿个数(dfs)
[第十四届蓝桥杯省B 岛屿个数] 小蓝得到了一副大小为 M N MN MN 的格子地图,可以将其视作一个只包含字符 0 0 0(代表海水)和 1 1 1(代表陆地)的二维数组,地图之外可以视作全部是海水,每个岛…...
【C++造神计划】运算符
1 赋值运算符 赋值运算符的功能是将一个值赋给一个变量 int a 5; // 将整数 5 赋给变量 a 运算符左边的部分叫作 lvalue(left value),右边的部分叫作 rvalue(right value) 左边 lvalue 必须是一个变量 右边 rval…...

Cortex-M3/M4处理器的bit-band(位带)技术
ARM Cortex-M3/M4的位带(Bit-Band)技术是一种内存映射技术,它允许对单个位进行直接操作,而不需要对整个字(通常是32位)进行操作。这项技术主要用于对特定的位进行高效的读写,特别是在需要对GPIO…...

【TOP】IEEE旗下1区,影响因子将破8,3个月录用,CCF推荐,性价比高!
计算机类 ● 好刊解读 IEEE出版社、中科院2区TOP,CCF推荐,今天推荐的期刊可谓buff叠满,好刊质量靠谱,有意向评职晋升毕业作者可重点关注: 01 期刊简介 ✅出版社:IEEE ✅影响因子:7.5-8.0 ✅…...
赚钱游戏 2.0.1 版 (资源免费)
没有c编辑器的可以直接获取资源来玩 #include <iostream> #include <string> #include <windows.h> #include <conio.h> #include <fstream> #include <ctime> #include <time.h> #include <stdio.h> #include <cstring&g…...

服务调用-微服务小白入门(4)
背景 各个服务应用,有很多restful api,不论是用哪种方式发布,部署,注册,发现,有很多场景需要各个微服务之间进行服务的调用,大多时候返回的json格式响应数据多,如果是前端直接调用倒…...
代码随想录算法训练营第三十六天| 435. 无重叠区间、 763.划分字母区间、56. 合并区间
435 题目: 给定一个区间的集合 intervals ,其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。 题目链接:435. 无重叠区间 - 力扣(LeetCode) 思路: …...
【AIGC调研系列】rerank3是什么
Rerank 3是一个针对企业搜索和检索辅助生成(RAG)系统优化的新型基础模型,它支持多语种、多结构数据搜索,并提供高精度的语义重排。通过这种方式,Rerank 3能够大幅提升响应准确度和降低延迟,同时大幅降低成本…...

Linux下网络编程基础知识--协议
网络基础 这一个课程的笔记 相关文章 协议 Socket编程 高并发服务器实现 线程池 协议 一组规则, 数据传输和数据的解释的规则。 比如说依次发送文件的文件名, 文件的大小, 以及实际的文件, 这样规定发送一个文件的顺序以及发送的每一个部分的格式等可以算是一种协议 型协议 …...

在 VS Code 中使用 GitHub Copilot
Code 结合使用。 GitHub Copilot 是什么 GitHub Copilot 是一个可以帮助你更简单、更快速地编写代码的工具,由 GPT-3 提供支持。你只需编写所需代码的描述——例如,编写一个函数来生成一个随机数,或对一个数组进行排序——Copilot 就会为你…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...

如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...