【GAMES101笔记速查——Lecture 19 Cameras,Lenses and Light Fields】

本章节内容:相机、棱镜、光场

计算机图形学的两种成像方法:

1.合成方法:光栅化、光线追踪(展示出现实没有的东西)

 

2.捕捉方法:相机(捕捉现实已有的东西)

目录

1 相机

1.1 针孔相机(Pinhole Image Formation)

1.2 视场(FOV)

(1)FOV一般定义

(2)视场FOV越窄,我们看到的东西会越远。

(3)焦距不变的情况下,传感器越大,视场FOV越大;传感器越小,视场FOV越小。

(4)手机如何做到拥有很大的FOV?焦距变小(右图所示)

1.3 曝光(Exposure)

1.2.1 有哪些因素在影响曝光(图片的亮度):光圈、快门、ISO

1.2.2 光圈、快门、ISO的协调关系

1.2.3 光圈:F数

1.2.4 快门

(1)快门速度的影响:运动模糊

(2)快门与光圈

(3)快门时间的应用

2. 镜头(Thin Lens Approximation)

2.1 理想薄透镜

2.1.1 薄透镜公式

2.1.2 推导

2.2 焦散(Defocus Blur)

2.2.1 弥散圆的大小(Circle of Confusion (CoC) Size)

2.2.2 光圈的明确定义

2.3 理想薄透镜渲染(Ray Tracing Ideal Thin Lenses)

2.3.1 薄透镜渲染步骤

2.4 景深(Depth of Field)

2.4.1 计算过程

2.4.2 演示网站


                                                        

1 相机

相机里面发生了什么?

最简单的针孔相机小孔成像

快门:控制光在多少分之一秒内进入相机

传感器:捕捉光,记录irradiance(来自各个方向的所有光)

 

为什么相机没有针孔或者棱镜不能成像?

如果这么操作,相当于直接把传感器放到人的面前,传感器上的任何一个点都会收集来自各个方向的信息,这个点不能区分来自各个方向的能量,此时它收集的是irradiance,不是radiance,结果就是所有东西都是糊的。(但也有人在研究用传感器直接区分不同方向的信息)

1.1 针孔相机(Pinhole Image Formation)

针孔相机成像

公元前,人们就已经发现了小孔成像的原理。

如果我们能用纸做一个小孔,那么我们可以拍出效果不错的场景。

针孔相机拍出来的东西没有深度可言,也就是说它拍摄到的所有东西都是清晰的。光线追踪也是采用的这种针孔摄像机模型

(虚化现象是由于棱镜的存在,如果可以编程模拟出光线与棱镜的作用,那么就可以得到带有景深的渲染效果)。

1.2 视场(FOV)

焦距对视场的影响

有一个简单的相似三角形关系

虽然对于小孔不存在焦距的概念,但是我们定义“小孔和传感器之间的距离”为焦距f

那么此时就可以计算tan角度,并用它的大小来定义FOV

目前看起来,FOV和传感器的大小焦距都有关系。

(1)FOV一般定义

所以人们规定:在定义FOV的时候,传感器大小默认固定35mm,然后用对应的焦距来定义。

(2)视场FOV越窄,我们看到的东西会越远。

(3)焦距不变的情况下,传感器越大,视场FOV越大;传感器越小,视场FOV越小。

之前我们混淆使用了传感器和胶片的感念,实际上,传感器(sensor)和胶片(film)是不同的东西,对于渲染来说,传感器记录irradiance多大,而最后的film决定了最后存储为什么样的图片格式。

(4)手机如何做到拥有很大的FOV?焦距变小(右图所示)

1.3 曝光(Exposure)

曝光 = 曝光时间 * irradiance

辐射度量学考虑单位时间,而照相考虑的是整体时间

曝光时间:由快门控制

单位面积上的能量irradiance与什么有关:1.落到传感器上的光能  2.光圈大小

1.2.1 有哪些因素在影响曝光(图片的亮度):光圈、快门、ISO

光圈大小(瞳孔:由f-stop来控制光圈大小。光圈是仿照人的瞳孔设计的,暗处瞳孔放大,明亮处瞳孔缩小。

快门速度(眼皮:快门越快,快门开放时间越短,进入的光越少。

IOS增益(视觉细胞:IOS可以理解为一种后期处理,给sensor最后的结果乘上某个数。这个乘法可以发生在硬件上(传感器调节灵敏度),也可以后期加(已经生成了照片然后再处理)。

1.2.2 光圈、快门、ISO的协调关系

不同的光圈大小:F数越大,光圈越小

不同的快门速度:通常用分数表示,1/1000就是快门开放1ms

不同的ISO:增益倍数

改变光圈大小,光圈大时,照片变虚。

ISO越大,照片越noisy,大家普遍不愿意调大这个数:对整个信号直接乘以一个很大的数,会放大信号,但同时,也会放大噪声。

控制其他变量,通过调节ISO来使曝光一致,得到的结果如下 :

1.2.3 光圈:F数

F数:两种写法FN或者F/N,N就是f数

F数的非正式理解:就是光圈的直径分之一

1.2.4 快门

机械快门:打开是有一个过程的。

(1)快门速度的影响:运动模糊

   1.运动模糊

在快门打开的一段时间内,高速运动的物体发生了一段位移,这个过程被传感器都记录下来并平均,产生了运动模糊现象。用更长的快门时间会容易发生运动模糊。

2.运动模糊不一定是坏事

比如,为了体现赛车等一些物体的速度,运动模糊可以展现出这种动态

3.拍视频

在不同时间对物体位置进行采样,采样是会有走样现象的,有运动模糊在一定程度上起到了反走样的效果。

4.Rolling shutter:超高速物体的扭曲:图片的不同位置记录的是不同时间进来的光。

(2)快门与光圈

下面的F数和快门速度的组合,基本可以实现同样的曝光。

如何理解?

直径从4到8,面积从1/16变到1/64,相当于缩小为原来的1/4。那么为了维持曝光不变,快门速度就要变成原来的4倍,也就是从1/60变到了1/15。

大光圈会造成浅景深

快门速度影响运动模糊

一般来说,需要在景深和运动模糊之间取平衡。

(3)快门时间的应用

1.高速摄影:快门时间更短,光圈更大, ISO更大。

2.延时摄影:快门时间很长、光圈更小,ISO更小。(俗称拉丝)

2. 镜头(Thin Lens Approximation)

目前的手机一般用透镜组

实际的透镜可能很复杂,光可能聚不到一点。

2.1 理想薄透镜

我们研究比较简单理想的情况。

1.平行于棱镜的光,经过透镜后可以集中到一个点

2.光路有可逆性,如果一个光线穿过焦点,那么会被透镜折射成一束平行光

3.薄透镜可以任意改变焦距(现代相机用透镜组的好处:最终的结果就好像是可以改变透镜的焦距)

2.1.1 薄透镜公式

过棱镜中心的光不改变方向

Z0:物距

Zi:相距

物理规律:见公式,这个公式反应了焦距、物距、相距,三者之间的关系。

即:如果要改变物距,相距一定会跟着改。

2.1.2 推导

蓝色的一对相似三角形

粉色的一对相似三角形

这个公式反应了焦距、物距、相距,三者之间的关系。

演示软件:

2.2 焦散(Defocus Blur)

2.2.1 弥散圆的大小(Circle of Confusion (CoC) Size)

还是用相似三角形解

把A移动到等式右边,可以发现弥散圆的大小棱镜的大小(F数)成正比

2.2.2 光圈的明确定义

F数:焦距f/光圈直径A

F数计算举例见图

2.3 理想薄透镜渲染(Ray Tracing Ideal Thin Lenses)

一般我们都是从相机往任何一个像素中心去连,这样默认是一个小孔成像的模型,所有入镜的物体成像都是清晰的。

我们也完全可以模拟薄棱镜,并且渲染出这样的图片

2.3.1 薄透镜渲染步骤

1.确定传感器大小

2.确定透镜本身属性:焦距、光圈大小

3.确定透镜与场景目标的距离z0.

4.根据透镜公式,可以算出相距zi(传感器sensor和棱镜的距离)

5.在成像平面上选择一个点x’

6.在透镜上选择一个点x’’

7.连接这两个点,组成的光线会穿过透镜打到物体平面上,并且打到的点x’’’是确定的,可以计算的。

8.计算x’’到x’’’的radiance即可。

2.4 景深(Depth of Field)

景深:实际场景中的一段深度,它经过透镜后在成像平面附近的小区域内(CoC足够小)。

2.4.1 计算过程

2.4.2 演示网站

光圈越小,景深越大,看到的东西更多清晰(越接近小孔成像)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/923332.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】认识进程以及进程的状态

目录 认识进程 基本概念 查看进程 父子进程 进程的状态 进程排队 运行状态 阻塞状态 挂起状态 僵尸进程 孤儿进程 认识进程 基本概念 有些教材上会说:正在运行的程序就是进程。这并没有错误,但是太过于笼统。现在我们深入到Linux底层来了解…

vue3项目部署在阿里云轻量应用服务器上

文章目录 概要整体部署流程技术细节小结 概要 vue3前端项目部署在阿里云轻量服务器 整体部署流程 首先有一个Vue3前端项目和阿里云应用服务器 确保环境准备 如果是新的服务器,在服务器内运行以下命令更新软件包 sudo apt update && sudo apt upgrade -y …

STM32H7开发笔记(2)——H7外设之多路定时器中断

STM32H7开发笔记(2)——H7外设之多路定时器中断 文章目录 STM32H7开发笔记(2)——H7外设之多路定时器中断0.引言1.CubeMX配置2.软件编写 0.引言 本文PC端采用Win11STM32CubeMX4.1.0.0Keil5.24.2的配置,硬件使用STM32H…

Web3 游戏周报(11.17 - 11.23)

回顾上周的区块链游戏概况,查看 Footprint Analytics 与 ABGA 最新发布的数据报告。 【11.17 - 11.23】Web3 游戏行业动态: 加密游戏开发商 Gunzilla Games 发推表示,其已与 Coinbase Ventures 达成合作并获得其投资。 国际足联将与 Mythica…

问题记录-Java后端

问题记录 目录 问题记录1.多数据源使用事务注意事项?2.mybatis执行MySQL的存储过程?3.springBoot加载不到nacos配置中心的配置问题4.服务器产生大量close_wait情况 1.多数据源使用事务注意事项? 问题:在springBoot项目中多表处理数…

微软Ignite 2024:建立一个Agentic世界!

在今年的Microsoft Ignite 2024上,AI Agent无疑成为本次大会的重点,已经有十万家企业通过Copilot Studio创建智能体了。微软更是宣布:企业可以在智能体中,使用Azure目录中1800个LLM中的任何一个模型了! 建立一个Agent…

python画图|无坐标轴自由划线操作fig.add_artist(lines.Line2D()函数

【1】引言 新发现了一种自由划线操作函数,和大家共享。 【2】官网教程 点击下述代码,直达官网: https://matplotlib.org/stable/gallery/misc/fig_x.html#sphx-glr-gallery-misc-fig-x-py 官网代码非常简洁,我进行了解读。 …

基于微信小程序的空巢老人健康管理系统

摘 要 随着社会老龄化程度不断加深,空巢老人的健康管理成为一个日益重要的问题。为了更好地关注和管理空巢老人的健康状况,本文利用Spring Boot框架和MySQL数据库,结合微信小程序等技术,设计并实现了一套基于微信小程序的空巢老人…

【JavaEE】Servlet:表白墙

文章目录 一、前端二、前置知识三、代码1、后端2、前端3、总结 四、存入数据库1、引入 mysql 的依赖&#xff0c;mysql 驱动包2、创建数据库数据表3、调整上述后端代码3.1 封装数据库操作&#xff0c;和数据库建立连接3.2 调整后端代码 一、前端 <!DOCTYPE html> <ht…

小程序-使用 iconfont 图标库报错:Failed to load font

官方默认可以忽略此错误&#xff0c;在清除缓存后首次刷新会显示此错误&#xff0c;重新渲染错误消失 解决方法&#xff1a; 在 iconfont 图标库选择项目设置 选中 Base64 保存&#xff0c;重新点击链接 -> 复制代码到项目中 操作步骤&#xff1a;

用CAXA CAD电子图板导入图框、标题栏并导出pdf的方法

1.导入图框&#xff1a; 点击调入图框->出现读入图框文件 一个一个点击&#xff0c;选择合适的图框 然后点击导入 2.导入标题栏&#xff1a; 调入标题栏->出现读入标题栏文件 一个一个点击&#xff0c;选择合适的标题栏&#xff0c;然后点击导入 3.导出pdf&#x…

《Shader入门精要》透明效果

代码以及实例图可以看github &#xff1a;zaizai77/Shader-Learn: 实现一些书里讲到的shader 在实时渲染中要实现透明效果&#xff0c;通常会在渲染模型时控制它的透明通道&#xff08;Alpha Channel&#xff09;​。当开启透明混合后&#xff0c;当一个物体被渲染到屏幕上时&…

加速科技精彩亮相中国国际半导体博览会IC China 2024

11月18日—20日&#xff0c;第二十一届中国国际半导体博览会&#xff08;IC China 2024&#xff09;在北京国家会议中心顺利举办&#xff0c;加速科技携重磅产品及全系测试解决方案精彩亮相&#xff0c;加速科技创始人兼董事长邬刚受邀在先进封装创新发展论坛与半导体产业前沿与…

【JavaEE初阶 — 多线程】线程池

目录 1. 线程池的原理 1.1 为什么要有线程池 1.2 线程池的构造方法 1.3 线程池的核心参数 1.4 TimeUnit 1.5 工作队列的类型 1.6 工厂设计模式 1.6.1 工厂模式概念 1.6.2 使用工厂模式的好处 1.6.3 使用工厂模式的典型案例 1.6.4 Thread…

JSON 性能测试 - WastJson 性能也很快

WAST 是一个高性能 Java 工具集库包&#xff0c;包括 JSON、YAML、CSV、HttpClient、JDBC 和 EL 引擎. WastJson 无论是小中大文本各种数据类型等性能都没有明显的短板&#xff0c;除了推广外可以说是六边形战士&#xff0c;更多测试参考 wast-jmh-test: wast性能测试 (并非所…

数据库-基础理论

文章目录 前言一、ORM框架二、ACID原则三、事务Transaction四、N1问题五、Normalization三范式六、FMEA方法论&#xff08;Failure Mode and Effects Analysis&#xff09;七、Profiling和PerformanceSchema查询分析 前言 基础理论 ORM框架、ACID原则、事务Transaction、N1问…

AI赋能电商:构建高效、智能化的新零售生态

随着人工智能&#xff08;AI&#xff09;技术的不断进步&#xff0c;其在电商领域的应用日益广泛&#xff0c;从购物推荐到供应链管理&#xff0c;再到商品定价&#xff0c;AI正在全面改变传统电商的运营模式&#xff0c;并推动行业向智能化和精细化方向发展。本文将探讨如何利…

[极客大挑战 2019]BabySQL--详细解析

信息搜集 进入界面&#xff1a; 输入用户名为admin&#xff0c;密码随便输一个&#xff1a; 发现是GET传参&#xff0c;有username和password两个传参点。 我们测试一下password点位能不能注入&#xff1a; 单引号闭合报错&#xff0c;根据报错信息&#xff0c;我们可以判断…

计算机网络socket编程(2)_UDP网络编程实现网络字典

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 计算机网络socket编程(2)_UDP网络编程实现网络字典 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记&#xff0c;欢迎大家在评论区交流讨…

GitLab|应用部署

创建docker-compose.yaml文件 输入docker-compose配置 version: 3.8 services:gitlab:image: gitlab/gitlab-ce:15.11.2-ce.0restart: alwayscontainer_name: gitlab-ceprivileged: truehostname: 192.168.44.235environment:TZ: Asia/ShanghaiGITLAB_OMNIBUS_CONFIG: |exter…