当前位置: 首页 > news >正文

19 Games101 - 笔记 - 相机与透镜

**19 ** 相机与透镜

目录

  • 摘要
  • 一 照相机主要部分
  • 二 小孔成像与视场(FOV)
  • 三 曝光(Exposure)
  • 四 景深(Depth of Field)
  • 总结

摘要

虽说照相机与透镜属于相对独立的话题,但它们的确是计算机图形学当中的一部分知识。在过往的十多篇笔记中,我们学习的都是如何渲染出一张虚拟的图片,因此在本节当中会去介绍照相机与透镜的相关知识,了解现实图像生成的一些内容。

一 照相机主要部分

对于一个照相机来说,最重要的组成部分之一便是透镜,它是成像的关键,无论是小孔成像还是透镜成像,如下图所示:

img

其次我们知道照相机的快门一般一直处于关闭状态,直到按下拍照的瞬间才会打开,允许光线信息进入到透镜:

img

最后,当快门打开光线成功通过透镜之后,所有光线信息都会照射到传感器上(相当于胶片)来进行存储,通过传感器上的信息得到最终图像:

img

那么回想一下在讲辐射度量学的时候,我们介绍了种种关于光线物理性质的一些描述概念,对应于这里传感器,其存储的应该是什么呢?观察下图:

img

右边相当于传感器平面,传感器的每一点记录了来自物体所有方向的光,因此每一点存储的也就是irradiance(如果读者不清楚辐射度量学可以略过,并不影响本文阅读)。

以上就是对照相机成像的最重要几部分的简略介绍,接下来会一一详述解释。

二 小孔成像与视场(FOV)

相信读者一定都了解或听说过小孔成像,该项技术的起源十分悠久,通过小孔只允许一定方向的光线通过,从而得到一个倒立的成像:

img

对于小孔成像不多做解释,主要是希望通过它从而引出视场的概念,如下图:

img

image-20240411184844413

img

举一个具体的例子:

img

从图中可以看出,当焦距越大的时候,成像的角度就越小集中在一小部分,类似于我们拿手机不停的放大拍摄倍数一样。

当然除了焦距,传感器的长度也有着很明显的影响,底片长度越大,自然FOV也就越大:

img

tips:

对于不同的设备,传感器长度不一,想要保持同样的FOV的话,就需要同比缩小焦距。

三 曝光(Exposure)

在第一章中我们提到传感器上接受到的是irradiance,也就是每单位面积所接受到的光线功率,而曝光就是用时间乘上了这个irradiance

Exposure = time x irradiance

从物理意以上来说就是真正的所接受到的能量(Energy)。那么这个时间由什么控制呢?

没错正是快门速度!除此之外,曝光还会被其他2个参数所影响,即一共3项参数:

1. 快门速度(Shutter speed),快门打开时间越长,进光时间越长,进光量自然越多。

2. 光圈大小(Aperture size),描述此项的数值称为f-stop,直观理解如果光圈越大,被遮挡的光越少,进光量越多,那么曝光的程度就会越高。

3. 感光度(ISO gain),对于感光度可以简单理解为对最终的图像值乘上了一个倍数。

以下给出一张图,构建对这三项的直观理解:

img

首先观察最下方的ISO变化对照片的影响,之前提到ISO就是一个简单的线性变化,对图像的结果乘上了一个倍数,随着ISO的值显著增大之后,虽然画面整体亮度会提升,但同时也会观察到画面有很多的噪点。这其实很容易解释,照片本质所记录的无非就是信号,那么对于光线的信息自然也会有些很小的noise进入,如果对图像进行整体进行亮度放大的话,noise自然也会变的更加明显形成了噪点。

接着是中间一行的快门速度,图片下方的值越大代表速度越慢,快门打开时间越长,透镜的进光量越大,图片也就会越亮,但同时运动的物体也会变的模糊起来。

原因如下: 快门打开后照相机会记录一段时间内的所有物体的光线信息,如果快门打开时间足够长,就能通过最终的照片捕捉到物体的移动,而这也就是动态模糊

img

但这种模糊也不一定不是坏事,正如上图例子所示,左边快门速度慢看到了锤子有落下的趋势,获得到了更多的图片信息,而右边的快门速度快,看上去更像是静止的画面,没有动态的效果。

这也是为什么一般的电影拍摄只用24FPS却不会觉得卡顿,因为动态模糊的存在使得人眼接受到的信息更多。但对于游戏来说往往需要60FPS以上,因为游戏内每一帧都是静止画面并不存在动态模糊(有的游戏可以打开动态模糊),所以需要更多的图片数量才会使人觉得不卡顿。

但对于快门速度有一点需要额外关注,无论快门打开的速度有多快,它一定有一个打开关闭的过程,所以整幅照片上不同的部分往往记录的时间间隔有着微小差距,当拍摄高速物体时,这种效果更加明显:

img

最后,对于一开始那幅图的最上面一行,也就是光圈大小 F-stop 或者F-Number值(该行中的逗号代表小数点),该值大小与光圈直径的倒数成正比,因此FN值越小,代表光圈越大,进光量越大,画面亮度越高,但同时也会带来景深模糊的影响(对于该点留在下一节去解释):

img

以上就是关于曝光一些基础内容,对于曝光有两点主要的应用:高速摄影和低速摄影

对于高速摄影来说,物体运动速度极快,因此需要非常小的快门速度来捕捉到它,但同时为了补偿进光时间不够,还需要使用大光圈或提高ISO来保证曝光正常:

img

对于低速摄影来说则相反,一般采用较长的快门时间来捕捉物体运动的轨迹,如下图飞机降落轨迹:

img

四 景深(Depth of Field)

在讨论到景深之前,我们先给出本章中所采用的理想透镜的性质:

img

(1) 所有平行射入透镜的光都会集中于一点,称该点为焦点

(2) 所有从焦点射入透镜的光都会平行射出(光路可逆性)

(3) 焦距可以被随意改变(这里单个透镜当然不行,但在现实中大部分的照相机都是一个透镜组,可以做到焦距随意改变)

利用这些性质可以得到理想透镜的成像规律,对于一个通过透镜的成像物体来说,其物距Z0,像距Zi和焦距f之间存在如下图的关系:

img

其推导过程可以简单的从两对相似三角形入手:

img

过程如下:

img

了解了上述的透镜成像规律之后,让我们一起观察一下景深模糊所产生的的原因:

img

image-20240411185904420

image-20240411185918936

img

同时这里也给出了不同光圈大小拍照的例子,小光圈锐利,景深模糊不明显,大光圈则有明显的景深模糊

那么回归到本章的主题,Depth of Field,它与景深模糊并不是同一个东西,景深模糊是一种情形,而景深则是一个具体的数值,其具体指 当我们固定一个可以接受的Circle of Confusion C值之后,可以逆向推导出小于该C值的对应的一段距离是多少,这个距离就是景深,如下图所示:

img

图中蓝色阴影区域的C值小于提前确定的值,该区域的长度即为景深,对应推导过程也已经在闫老师课上的这个Slides中给出。

Note:

关于如何在光线追踪当中实现景深模糊的效果,只需要简单的模拟透镜的光线传播即可,如下图当中的步骤所示:

img

实际渲染效果图:

img

相关文章:

19 Games101 - 笔记 - 相机与透镜

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

Flink入门学习 | 大数据技术

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

Arthas实战教程:定位Java应用CPU过高与线程死锁

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

HTML制作跳动的心形网页

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

如何在Odoo 17 销售应用中使用产品目录添加产品

Odoo&#xff0c;作为一个知名的开源ERP系统&#xff0c;发布了其第17版&#xff0c;新增了多项功能和特性。Odoo 17包中的一些操作简化了&#xff0c;生产力提高了&#xff0c;用户体验也有了显著改善。为了为其用户提供新的和改进的功能&#xff0c;Odoo不断进行改进和增加新…...

为什么pdf拆分出几页之后大小几乎没有变化

PDF 文件的大小在拆分出几页之后几乎没有变化可能有几个原因&#xff1a; 图像压缩: 如果 PDF 文件中包含图像&#xff0c;而这些图像已经被压缩过&#xff0c;拆分后的页面依然会保留这些压缩设置&#xff0c;因此文件大小可能不会显著变化。 文本和矢量图形: PDF 文件中的文…...

如何在 VM 虚拟机中安装 OpenEuler 操作系统保姆级教程(附链接)

一、VMware Workstation 虚拟机 若没有安装虚拟机的可以参考下篇文章进行安装&#xff1a; 博客链接https://eclecticism.blog.csdn.net/article/details/135713915 二、OpenEuler 镜像 点击链接前往官网 官网 选择第一个即可 三、安装 OpenEuler 打开虚拟机安装 Ctrl …...

(六)PostgreSQL的组织结构(3)-默认角色和schema

PostgreSQL的组织结构(3)-默认角色和schema 基础信息 OS版本&#xff1a;Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本&#xff1a;16.2 pg软件目录&#xff1a;/home/pg16/soft pg数据目录&#xff1a;/home/pg16/data 端口&#xff1a;57771 默认角色 Post…...

DockerFile定制镜像

dockerfile 简介 Dockerfile 是⼀个⽤来构建镜像的⽂本⽂件&#xff0c;⽂本内容包含了⼀条条构建镜像所需的指令和 说明&#xff0c;每条指令构建⼀层&#xff0c;最终构建出⼀个新的镜像。 docker镜像的本质是⼀个分层的⽂件系统 centos的iso镜像⽂件是包含bootfs和rootfs…...

Java8中JUC包同步工具类深度解析(Semaphore,CountDownLatch,CyclicBarrier,Phaser)

个人主页&#xff1a; 进朱者赤 阿里非典型程序员一枚 &#xff0c;记录平平无奇程序员在大厂的打怪升级之路。 一起学习Java、大数据、数据结构算法&#xff08;公众号同名&#xff09; 引言 在Java中&#xff0c;并发编程一直是一个重要的领域&#xff0c;而JDK 8中的java.u…...

岛屿个数(dfs)

[第十四届蓝桥杯省B 岛屿个数] 小蓝得到了一副大小为 M N MN MN 的格子地图&#xff0c;可以将其视作一个只包含字符 0 0 0&#xff08;代表海水&#xff09;和 1 1 1&#xff08;代表陆地&#xff09;的二维数组&#xff0c;地图之外可以视作全部是海水&#xff0c;每个岛…...

【C++造神计划】运算符

1 赋值运算符 赋值运算符的功能是将一个值赋给一个变量 int a 5; // 将整数 5 赋给变量 a 运算符左边的部分叫作 lvalue&#xff08;left value&#xff09;&#xff0c;右边的部分叫作 rvalue&#xff08;right value&#xff09; 左边 lvalue 必须是一个变量 右边 rval…...

Cortex-M3/M4处理器的bit-band(位带)技术

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

【TOP】IEEE旗下1区,影响因子将破8,3个月录用,CCF推荐,性价比高!

计算机类 ● 好刊解读 IEEE出版社、中科院2区TOP&#xff0c;CCF推荐&#xff0c;今天推荐的期刊可谓buff叠满&#xff0c;好刊质量靠谱&#xff0c;有意向评职晋升毕业作者可重点关注&#xff1a; 01 期刊简介 ✅出版社&#xff1a;IEEE ✅影响因子&#xff1a;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)

背景 各个服务应用&#xff0c;有很多restful api&#xff0c;不论是用哪种方式发布&#xff0c;部署&#xff0c;注册&#xff0c;发现&#xff0c;有很多场景需要各个微服务之间进行服务的调用&#xff0c;大多时候返回的json格式响应数据多&#xff0c;如果是前端直接调用倒…...

代码随想录算法训练营第三十六天| 435. 无重叠区间、 763.划分字母区间、56. 合并区间

435 题目&#xff1a; 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠 。 题目链接&#xff1a;435. 无重叠区间 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; …...

【AIGC调研系列】rerank3是什么

Rerank 3是一个针对企业搜索和检索辅助生成&#xff08;RAG&#xff09;系统优化的新型基础模型&#xff0c;它支持多语种、多结构数据搜索&#xff0c;并提供高精度的语义重排。通过这种方式&#xff0c;Rerank 3能够大幅提升响应准确度和降低延迟&#xff0c;同时大幅降低成本…...

Linux下网络编程基础知识--协议

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

在 VS Code 中使用 GitHub Copilot

Code 结合使用。 GitHub Copilot 是什么 GitHub Copilot 是一个可以帮助你更简单、更快速地编写代码的工具&#xff0c;由 GPT-3 提供支持。你只需编写所需代码的描述——例如&#xff0c;编写一个函数来生成一个随机数&#xff0c;或对一个数组进行排序——Copilot 就会为你…...

使用spring-ai快速对接ChatGpt

什么是spring-ai Spring AI 是一个与 Spring 生态系统紧密集成的项目&#xff0c;旨在简化在基于 Spring 的应用程序中使用人工智能&#xff08;AI&#xff09;技术的过程。 简化集成&#xff1a;Spring AI 为开发者提供了方便的工具和接口&#xff0c;使得在 Spring 应用中集…...

免费的 ChatGPT 网站(六个)

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 一、insCode二、讯飞星火三、豆包四、文心一言五、通义千问六、360智脑 现在智能…...

arm内核驱动-中断

先介绍个东西 ctags 这个工具可以像keil一样在工程里查找跳转&#xff0c;帮我们找到我们想要的东西。 安装教程可以找到&#xff0c;这里只讲怎么用。 在工程目录&#xff08;包含所有你会用到的头文件等&#xff09;下&#xff0c;先加载这个命令&#xff0c;可能要等待…...

第十五届蓝桥杯大赛软件赛省赛 C/C++ 大学 B 组

试题 C: 好数 时间限制 : 1.0s 内存限制: 256.0MB 本题总分&#xff1a;10 分 【问题描述】 一个整数如果按从低位到高位的顺序&#xff0c;奇数位&#xff08;个位、百位、万位 &#xff09;上 的数字是奇数&#xff0c;偶数位&#xff08;十位、千位、十万位 &…...

kotlin编译版本

Kotlin和kapt的流行版本通常随着时间而变化&#xff0c;随着新版本的发布&#xff0c;更多的开发者会迁移到这些新版本。不过&#xff0c;由于Kotlin对向后兼容性的强调&#xff0c;大多数近期的Kotlin版本都支持Java 8。 截至本回答的知识截止日期&#xff08;2023年&#xff…...

【C#】 删除首/尾部字符

代码 static void Main(string[] args){string str "123abc";string strdelete "abc";string str1 str.Trim(1);string strc str1.Trim(c);string str11 str1.TrimStart(1);string strcc str1.TrimEnd(c);string strabc str.Trim(strdelete.ToCharA…...

第十五篇【传奇开心果系列】Python自动化办公库技术点案例示例:深度解读Python 自动化处理图像在各行各业的应用场景

传奇开心果博文系列 系列博文目录Python自动化办公库技术点案例示例系列 博文目录前言一、行业应用场景介绍二、 **计算机视觉研究与开发示例代码**三、人工智能与机器学习示例代码四、医疗健康领域示例代码五、制造业与质量控制示例代码六、农业与环境科学示例代码七、电子商务…...

什么是MOV视频格式?如何把MP4视频转MOV视频格式?

一&#xff0c;前言 当然可以&#xff0c;MP4视频可以转换为MOV格式。这两种格式都是常见的视频文件格式&#xff0c;它们都可以用于存储和播放视频内容。虽然它们的编码方式和特性有所不同&#xff0c;但使用合适的视频转换工具可以轻松地将MP4视频转换为MOV格式。 二&#…...

整理的微信小程序日历(单选/多选/筛选)

一、日历横向多选&#xff0c;支持单日、双日、三日、工作日等选择 效果图 wxml文件 <view class"calendar"><view class"section"><view class"title flex-box"><button bindtap"past">上一页</button&…...

Unity 人形骨骼动画模型嘴巴张开

最近搞Daz3D玩&#xff0c;导入后挂上动画模型嘴巴张开&#xff0c;其丑无比。 Google了一下&#xff0c;得知原因是Unity没有对下巴那根骨骼做控制&#xff0c;动画系统就会把它放到默认的位置&#xff0c;嘴巴就张开了。找到了3种解决办法。 1.移除动画中对下巴这个骨骼的转…...

可以做游戏可以视频约会的网站/福建百度seo排名点击软件

Free Ur Mind-推荐使用FreeMind工具 什么是MindMap? MindMap&#xff08;被译成思维导图或心智图&#xff09;是一种思维工具&#xff0c;由英国的记忆之父托尼-博赞发明。MindMap是一种新的思维模式&#xff0c;它将左脑的逻辑、顺序、条例、文字、数字&#xff0c;以及右脑的…...

正规网站建设定制/怎样做网站平台

enum FruitEnum {APPLE(1), ORANGE(2); // 调用构造函数来构造枚举项private int value 0;private FruitEnum(int value) { // 必须是private的&#xff0c;否则编译错误this.value value;}public static FruitEnum valueOf(int value) { // 手写的从int到enum的转换函数swit…...

朔州网站建设价格/小程序开发软件

本文转载自&#xff1a;http://www.blogjava.net/BlueDavy/archive/2009/04/28/267970.html&#xff0c; 转载请注明 在这篇blog中放置了我收集的一些网站架构相关的PPT和文章&#xff0c;提供给大家下载&#xff0c;如果大家有相关的好的PPT、文章的话&#xff0c;也欢迎推…...

怎么做阿里巴巴国际网站首页/广东今天新闻最新消息

2019独角兽企业重金招聘Python工程师标准>>> 今天在使用 codeigniter&#xff08;CI&#xff09;异步&#xff08;ajax&#xff09;传输数据时总是出现500 internal server error。 分两种分析&#xff0c;首先 如果使用url访问能够正确显示而没有这个错误&#xff…...

南宁网站建设公司哪家好/网站seo博客

框架搭建设想框架:在VS2010 下的项目管理流程RoadMarkingDetection&#xff1a;工程项目入口&#xff0c;启动项目&#xff0c;配置类型Configuration Type 为Application(.exe)可以调用以下所有模块&#xff08;.lib&#xff09;。commonClass&#xff1a;保存全局数据类、工具…...

东莞做阀门的网站/云搜索网页版入口

关键词 移动端车牌识别、安卓端车牌识别、ios端车牌识别、手机端车牌识别、移动端车牌识别sdk、安卓端车牌识别sdk、ios端车牌识别sdk、ocr车牌识别 什么叫移动端车牌识别&#xff1f; 移动端车牌识别sdk支持Android、iOS平台&#xff0c;支持接口开发。通过智能手机或Pad的摄像…...