【GAMES101】Lecture 19 透镜

2024-02-09 19:52
文章标签 19 lecture games101 透镜

本文主要是介绍【GAMES101】Lecture 19 透镜,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

理想的薄透镜

模糊

利用透镜模型做光线追踪

景深(Depth of Field)


理想的薄透镜

在实际的相机中都是用的一组透镜来作为这个镜头

这个因为真实的棱镜无法将光线真正聚焦到一个点上,它只能聚在一堆上

所以方便研究提出了一种理想化的棱镜,这个棱镜没有厚度,非常薄,它可以成功的将平行光线聚焦到一个点上,并且我们认为这个薄棱镜的焦距可以改变,实际上可以通过现实中的一组棱镜来达到这个效果

平行光线经过棱镜会聚焦到焦点,同样根据光路可逆,过焦点的光线经过棱镜会变成平行光线,从物体到棱镜的距离叫做物距Zo,棱镜成的像到棱镜的距离叫做相距Zi

物距和相距和焦距有这么个关系

这个关系是根据相似三角形对应边成比例推出来的

然后用数学变换得到

模糊

随便拍一张照片,它肯定有的地方模糊有的地方清晰,那模糊的地方是怎么来的呢?对于一个物体平面Focal Plane,那么它对于会有一个成像的平面,那这个成像的平面会在传感器上,那如果这个物体远离这个Focal Plane,比如说场景里的某个点远离这个平面,那么经过透镜它就会成像在传感器平面之前,那光线继续传播照射到传感器上的时候,那这个点就会照射成一个圆,那不就模糊了吗,这个圆就叫Circle of Confusion(CoC),根据相似三角形可以计算出来这个CoC的大小和光圈的大小成正比

那这个光圈越大,这个模糊的圆就会越大,那就会越模糊

我们之前说这个光圈的F数不准确的描述是光圈直径的倒数,这里给出准确的定义,对于这个描述光圈大小的F数,记作F/N,或者FN,这个N=f/D,即N等于焦距除以光圈直径

那这个模糊的圆CoC就可以写成这样,这里的A就是光圈的直径

利用透镜模型做光线追踪

我们之前做光线追踪都是用的针孔模型的,现在已经有了这个透镜模型了,那我们把这个透镜放到场景中,自然成像平面就是传感器的平面,然后对于成像的每一个像素x',我可以在这个透镜上采样点x'',然后根据物距、相距和焦距自然知道这个光线会打到这个物体平面的哪个点上,那这样光路就找到了,在计算所有点的光贡献到像素x'上就行了

景深(Depth of Field)

我们刚刚说照片里模糊的部分是因为不在focal平面上的点经过透镜之后会变成一个圆CoC,而这个光圈越大越模糊,我们知道屏幕上的照片是由像素组成的,这一个个像素它就是一个最小的单元,之所以看上去模糊是因为模糊部分的点形成的CoC比这个像素还要大

那也就是说我们看到的清晰的部分不是说没有发生这个CoC,而是因为这部分所形成的CoC和像素比起来尺寸差不多,或者比像素的尺寸小,也就是说存在这么一个范围,这个范围内的点经过透镜后形成的CoC小于等于像素的尺寸,这个范围就叫景深,这个景深是可以计算出来的,也是用这个相似三角形可以算出来

这篇关于【GAMES101】Lecture 19 透镜的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/695150

相关文章

详解Spring Boot接收参数的19种方式

《详解SpringBoot接收参数的19种方式》SpringBoot提供了多种注解来接收不同类型的参数,本文给大家介绍SpringBoot接收参数的19种方式,感兴趣的朋友跟随小编一起看看吧... 目录SpringBoot接受参数相关@PathVariable注解@RequestHeader注解@Reque

react笔记 8-19 事件对象、获取dom元素、双向绑定

1、事件对象event 通过事件的event对象获取它的dom元素 run=(event)=>{event.target.style="background:yellowgreen" //event的父级为他本身event.target.getAttribute("aid") //这样便获取到了它的自定义属性aid}render() {return (<div><h2>{

系统架构师考试学习笔记第三篇——架构设计高级知识(19)嵌入式系统架构设计理论与实践

本章考点:         第19课时主要学习嵌入式系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分)。在历年考试中,案例题对该部分内容都有固定考查,综合知识选择题目中有固定分值的考查。本课时内容侧重于对知识点的记忆、理解和应用,按照以往的出题规律,嵌入式系统架构设计基础知识点基本来源于教材内。本课时知识架构如图19.1所示。 一、嵌入式系统发展历程

C++笔记19•数据结构:红黑树(RBTree)•

红黑树 1.简介:         红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或 Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路 径会比其他路径长出俩倍,因而是接近平衡的。 当搜索二叉树退化为单支树时,搜索效率极低,为了使搜索效率高,建立平衡搜索二叉树就需要"平衡树"来解决。上一篇博客介绍了AVL树,这

GAMES101(5~6节,光栅化)

光栅化Rasterization 透视投影已知field和近平面,如何推导宽度? 根据三角函数:tan field / 2 = (height / 2) / ||n||近平面,从而可以求出高度 因为知道宽高比,所以可以求出宽度,高度 * 宽/高 视口变换 经过MVP变换,顶点位于正则化空间坐标,是一个在 [-1,1] ^3 之间的 x, y, z 坐标构成(标准立方体),我们下一步需要做

张飞硬件11~19-电容篇笔记

电容作用 作为源,对后级电路提供能量,对源进行充电。简单讲就是放电和充电。在电路设计中,源往往与负载相隔很远,增加电容就可以起到稳定作用。电容两端的电压不能激变,增加电容可以稳定电压。 电容可以类比为水坝,来让水保持一个供给量稳定。 提供能量时容量要偏大 滤波时容量要偏小 电容特性 电容的电场相吸,正负极电子增多,电场的形成就越快越强大。 相等电量(q)电容越大,则电压值

【C++学习笔记 19】C++中的对象生存周期

对象如何生存在栈上 在C++中,我们每次进入一个作用域时,我们就是在push栈帧。就像把书堆叠起来,将最新的书放在最上层,在这个作用域上创建变量就像在书中写内容,当作用域结束的时候,就把书拿走,此时每个基于栈的变量就结束了。 举个例子 #include <iostream>#include <string>class Entity{public:Entity(){std::cout <

设计模式 19 观察者模式

设计模式 19 创建型模式(5):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式结构型模式(7):适配器模式、桥接模式、组合模式、装饰者模式、外观模式、享元模式、代理模式行为型模式(11):责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式 文章目录 设计模式 19观察者模式(Observer Pat

2015年1月19日 对阿里巴巴点赞VS拍砖

肖峰说: 1.建立了一个信用体系 2.当认为交易不安全的时候建立了支付宝(担保体系) 3.当认为创业非常危险的时候他提供了一个创业的榜样 马光远说: 1.中国有没有假货跟有没有阿里巴巴没有关系 2.对中国经济的拉动史无前例 3.买东西更便宜了 李银认为 1.阿里巴巴的信用污点至今无法让人放心 2.假货问题 3.安全问题 阿里巴

kubernetes视频教程笔记 (19)-代理模式的分类

一、VIP 和 Service 代理     在 Kubernetes 集群中,每个 Node 运行一个 kube-proxy 进程。 kube-proxy 负责为 Service 实现了一种 VIP(虚拟 IP)的形式,而不是 ExternalName 的形式。 在 Kubernetes v1.0 版本,代理完全在 userspace。在 Kubernetes v1.1 版本,新增了