基于光线追踪的渲染中景深(Depth of field)效果的实现

  图形学离线渲染中常用的透视摄像机模型时根据小孔成像的原理建立的,其实现通常是从clip_image002向成像平面上发射ray,并把trace这条ray的结果作为成像平面上对应交点的采样结果。即:

clip_image004

图片来自《Fundamentals of Computer Graphics》

  现实中的镜头拍摄的图像有景深(Depth of field)的效果,譬如:

clip_image006

图片来自网络

  显然,上图中的耳机被放在摄像机的焦平面附近,成像很清晰;背景中的景物则离焦平面较远,呈现出模糊的效果。对离线渲染而言,这一效果有利于加强渲染结果的真实性和层次感。但之前提到的摄像机模型过于简单,要得到景深,需要更精确的摄像机模型。

clip_image008

图片来自网络

  上图是网络上给出的关于景深的一张示意图,看起来复杂骇人。但稍微分析就能知道,使得不在焦平面上的景物显得模糊的最根本原因恰恰是焦平面的概念本身,如下图——

clip_image010

图片来自网络

  可以看到,假如在原来的透视摄像机模型中加入一个凸透镜,那么成像过程将不再是“一根”光线穿过小孔到达成像平面上的一点,而是许多光线透过凸透镜汇聚到成像平面上的一点。

clip_image012

物体恰好在焦平面上的情形  

  显然,假如有一物体正好在焦平面上,那么从上面某一点发射的光线通过凸透镜在成像平面上也会汇聚于一点,于是就得到了清晰的图像。但是,当物体不在焦平面上时,汇聚到成像平面上某一点的光线将不再全部来自于物体上的一点,而是来自于物体上的一小片区域,这就形成了模糊的效果,也就是最终看到的景深。

clip_image014

物体不在焦平面上的情形

  有了这一模型,要设计渲染出景深效果的算法就很容易了。以往从透视摄像机发射ray的方法是:

对成像平面上的一点clip_image016,发射射线clip_image018,其中clip_image020clip_image022clip_image002[1]点位置。

新的方法则是:

对成像平面上的一点clip_image016[1],求出射线clip_image024与焦平面的交点clip_image026,然后在凸透镜上随机采样(把凸透镜看做有一定半径的圆盘)。对每一个采样点clip_image028,发射射线clip_image030

新方法实质是在凸透镜所在的disk上对到达成像平面上特定点的能量用蒙特卡洛的方法进行了估值。

转载于:https://www.cnblogs.com/AirGuanZ/p/6363175.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

带你制作百词斩单词表读写插件

上篇博文简单的介绍了一下Chrome插件,今天就与大家分享一下我做的这款有实际意义的插件吧。 做这款插件主要是用百词斩站点进行单词学习时,遇到的一点点闹心事儿。在单词表中不能听发音。也不能练习拼写。所以才忍无可忍的做了这么一款插件。自我感觉还是…

iphone各机型参数对比_带你了解新款iPhone 12系列四款机型

2020年10月14日凌晨1:00,苹果召开新品发布会,发布了新款iPhone 12系列手机,“果粉”们期待已久的iPhone 12终于来了。iPhone 12系列手机共有四款机型,分别是iPhone 12 mini、iPhone 12、iPhone 12 Pro、iPhone 12 Pro …

高并发第一弹:准备阶段 了解高并发

高并发第一弹:准备阶段 了解高并发 首先需要知道什么并发, 什么是高并发. 并发: 关于并发的学习,可以从JDK提供的并发包为核心开始,许多其他的类和封装都是对其进行扩展或者补充,我们来看一下Java并发包(java.util.concurrent包,简…

matlab立体坐标定位_【半导光电】基于光电探测器的激光章动定位算法(二)

今日光电有人说,20世纪是电的世纪,21世纪是光的世纪;知光解电,再小的个体都可以被赋能。欢迎来到今日光电!----与智者为伍 为创新赋能----1. 章动定位算法实验前,首先需要对光路进行调节,保证经…

Android:支持多选的本地相册

前段时间在做一个动态发布功能,需要用到图片上传。一开始直接调用的系统相册和相机,由于系统相机不支持多选,就花点时间做了个本地相册,在此开源下。 先上截图,依次为选择相册界面、相册详情界面、查看图片大图界面 相…

心灵与大脑

2019独角兽企业重金招聘Python工程师标准>>> http://blog.sina.com.cn/s/blog_6f034fc30102f2tg.html 转载于:https://my.oschina.net/chirnson/blog/832011

python入门心得_记初学python的一些心得

人生苦短,我用python! 其实我自学python也很长一段时间了,但总是去更换学习资料,搞的现在学的不是很好,因为没更换次资料都要从头开始学起,那么分享下我的学习战况吧,不是很好,还将就…

16.U-boot的工作流程分析-2440

16.U-boot的工作流程分析-2440 分析的流程: 程序入口 第一阶段程序分析 第二阶段程序分析 2440开发板: 1.uboot的入口: 要看uboot工程的入口,首先打开顶层目录的Makefile: Uboot所支持的开发板,在顶层的Ma…

如何使用Redis做MySQL的缓存

应用Redis实现数据的读写,同时利用队列处理器定时将数据写入mysql。 同时要注意避免冲突,在redis启动时去mysql读取所有表键值存入redis中,往redis写数据时,对redis主键自增并进行读取,若mysql更新失败,则需…

psychopy 与脑电打码 eeg

2019独角兽企业重金招聘Python工程师标准>>> 实验程序就不放了,这里主要放如何向串口发送打码的代码 实际上,给脑电打码的本质就是向串口发送一个字符,脑电的程序会自动在收到该字符的同时在脑电数据上进行标记。以下代码打开了一…

mysql -- 索引的使用

普通索引:用于提升查询速度唯一索引:用于提升查询速度,还要求字段值不得重复主键索引:唯一性且不为空的索引全文索引:用于大量文本搜索中建立的索引虽然索引有好处,但是凡是都有俩面性,提高效率…

surface pro 7 linux,微软 Surface Pro、Studio、Laptop 全线更新

今晨,微软在纽约的秋季新品发布会上,发布了 Surface Pro 6、Laptop 2 以及最顶级的 Studio 2 三款备受期待的 Surface 产品。至此,包括年初的 Surface Book 2 在内,完成了2018 年 Surface 产品线所有升级计划。当然这场规模不算大…

dremwere怎样让多个图片并列排放_PPT图片布局不好看?六步教你,看完就会。

我们平时很多场合需要演示讲解时,少不了使用PPT。尤其目前白领层人士,项目总结、产品介绍、调研报告…无时无刻不被PPT包围,又无时无刻不被PPT设计所困恼。诚然设计好看实用的PPT需要高质量素材资源和坚实的文字功底。但在处理美化PPT时&…

ThreadLocal 你到底是个什么鬼

2019独角兽企业重金招聘Python工程师标准>>> 很多文章都拿它跟同步机制作比较,我觉得这个思路对于理解这个东西完全没有作用。 ThreadLocal跟synchronize这类东西作比较,是很多文章的套路,我感觉这么比较,就跟比较重载…

grep 显示包含两个关键字_linux三剑客之-grep

一、grep简介1.介绍全局查找正则表达式并且打印结果行的命令。2.输入一个文件或者一个标准输入(stdin),或者是一个“-”连字符()。3.输出打印在屏幕上4.grep家族扩展命令egrep、fgrep二、 Grep命令的应用1.命令格式grep [选项] 模式 [文件…]例如:grep root /etc/pa…

Python装饰器的实现原理

Python中的装饰器是通过利用了函数特性的闭包实现的,所以在说装饰器之前,我们需要先了解函数特性,以及闭包是怎么利用了函数特性的。 1.函数特性 Python中的函数特性总的来说有四点: 1.函数作为变量传递 def add(x):return x 1a add 2.函数…

opengl 安装_如何使得支持 OpenGL 的 Flatpak 应用和游戏在专有 Nvidia 图形驱动下工作 | Linux 中国...

一些支持 OpenGL 并打包为 Flatpak 的应用和游戏无法使用专有 Nvidia 驱动启动。本文将介绍如何在不安装开源驱动(Nouveau)的情况下启动这些 Flatpak 应用或游戏。-- Logix这有个例子。我在我的 Ubuntu 18.04 桌面上使用专有的 Nvidia 驱动程序 (nvidia-driver-390)&#xff0c…

RequireJS入门(一)

RequireJS由James Burke创建,他也是AMD规范的创始人。 RequireJS会让你以不同于往常的方式去写JavaScript。你将不再使用script标签在HTML中引入JS文件,以及不用通过script标签顺序去管理依赖关系。 当然也不会有阻塞(blocking)的…

Oracle数据库中游标的游标的使用

本人不喜欢说概念啥的,就直接说明使用方法吧 案例1: 1 DECALRE2 --声明游标3 CURSOR C_USER(C_ID NUMBER) IS4 SELECT NAME FROM USER WHERE TYPEID C_ID;5 V_NAME C_USER%rowtype; --定义游标变量6 BEGIN7 OPEN C_USER(变量值); …

eclipse占用内存过大_idea被评最好用java开发工具,为什么用eclipse的人更多?

从事java开发一般都需要使用到一些开发工具,记得以前刚接触java的时候还用过MyEclipse。idea被评为最好用java开发工具,为什么用eclipse的人更多?下面一起来了解下吧!IDEA毕竟不便宜啊,很多企业都买不起只能用Eclipse了&#xff…