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

图片来自《Fundamentals of Computer Graphics》

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

图片来自网络

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

图片来自网络

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

图片来自网络

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

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

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

物体不在焦平面上的情形

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

对成像平面上的一点,发射射线,其中点位置。

新的方法则是:

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

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

基于光线追踪的渲染中景深(Depth of field)效果的实现的更多相关文章

  1. 景深(Depth of Field)

    http://www.cnblogs.com/cxrs/archive/2013/03/22/DepthOfFeild.html 景深(Depth of Field) 什么是景深? 所谓景深,就是当焦 ...

  2. 【原】实时渲染中常用的几种Rendering Path

    [原]实时渲染中常用的几种Rendering Path 本文转载请注明出处 —— polobymulberry-博客园 本文为我的图形学大作业的论文部分,介绍了一些Rendering Path,比较简 ...

  3. PBR(基于物理的渲染)学习笔记2

    相关资料 https://www.cnblogs.com/dojo-lzz/p/13237686.html 文档:PBR学习笔记.note 链接:http://note.youdao.com/note ...

  4. 基于物理的渲染——间接光照

    在前面的文章中我们已经给出了基于物理的渲染方程: 并介绍了直接光照的实现.然而在自然界中,一个物体不会单独存在,光源会照射到其他的物体上,反射的光会有一部分反射到物体上.为了模拟这种环境光照的形式,我 ...

  5. PBR(基于物理的渲染)学习笔记

    PBR基本介绍 PBR代表基于物理的渲染,本质上还是 gl_FragColor = Emssive + Ambient + Diffuse + Specular 可能高级一些在考虑下AO也就是环境光遮 ...

  6. PBR:基于物理的渲染(Physically Based Rendering)+理论相关

    一: 关于能量守恒 出射光线的能量永远不能超过入射光线的能量(发光面除外).如图示我们可以看到,随着粗糙度的上升镜面反射区域的会增加,但是镜面反射的亮度却会下降.如果不管反射轮廓的大小而让每个像素的镜 ...

  7. 离线渲染中的不规则光源(Meshlight)

    之前一直在考虑这样一个问题,在实际生活中的光源都是有体积的,但是图形学中,很多时候我们用简单的点光源,面光源,或者方向光来模拟实际生活中这些光源,势必会产生一些误差,同时导致很多效果不好做.那么在离线 ...

  8. Unity3D图像后处理特效——Depth of Field 3.4

    Depth of Field 3.4 is a common postprocessing effect that simulates the properties of a camera lens. ...

  9. 如何让IOS中的文本实现3D效果

    本转载至 http://bbs.aliyun.com/read/181991.html?spm=5176.7114037.1996646101.25.p0So7c&pos=9       zh ...

随机推荐

  1. C# 后台服务 web.config 中 项“ConnectionString”已添加。问题

    是自己在一网站下建了虚拟目录.原本网站为空,后来自己改了路径,有了默认配置很久后打开原本ok的虚拟目录,坑爹了.杯具了.代码:ConfigurationManager.ConnectionString ...

  2. solr 初接触

    solr教程,值得刚接触搜索开发人员一看 http://blog.csdn.net/awj3584/article/details/16963525

  3. Apache 流框架Flink简介

    1.Flink架构及特性分析 Flink是个相当早的项目,开始于2008年,但只在最近才得到注意.Flink是原生的流处理系统,提供high level的API.Flink也提供 API来像Spark ...

  4. 错误 MSB6006 CL.exe 已退出,代码为2

    环境 WIN10 + VS2019 社区版 按照其他网友的方法说 解决方法: 1 一个类内部的定义返回类型为double的方法种没有写return语句. 2 变量没有初始化也会导致这种情况. 但是设置 ...

  5. 在Python中使用glob模块查找文件路径的方法

    在Python中使用glob模块查找文件路径的方法 glob模块是最简单的模块之一,内容非常少.用它可以查找符合特定规则的文件路径名.跟使用windows下的文件搜索差不多.查找文件只用到三个匹配符: ...

  6. memcached源码分析-----item过期失效处理以及LRU爬虫

    memcached源码分析-----item过期失效处理以及LRU爬虫,memcached-----item 转载请注明出处:http://blog.csdn.net/luotuo44/article ...

  7. SecurityLibrary

    using System; using System.IO; using System.Linq; using System.Security.Cryptography; using System.T ...

  8. Data - 大数据分析学习之路

    一.大数据分析的五个基本方面 可视化分析 大数据分析的使用者有大数据分析专家,同时还有普通用户,但是他们二者对于大数据分析最基本的要求就是可视化分析,因为可视化分析能够直观的呈现大数据特点,同时能够非 ...

  9. 一些php常用函数积累

    本文链接 <?php // id: ecffe70d3af54df9bad97b61918ace7d global $ct_path, $ct_log_path; $log_path = &qu ...

  10. Django2.2 数据库的模块model学习笔记

    一.前言 为什么选用Django2.2,因为从2019年下半年起Django2.2逐渐成为长期支持版本,官网也有数据,所以当然选用维护时间长的版本 二.models的建立 Django的models也 ...