图形学离线渲染中常用的透视摄像机模型时根据小孔成像的原理建立的,其实现通常是从向成像平面上发射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. P1241 括号序列

    P1241 括号序列 题解 谁解释下标签递推是个什么鬼,应该是暴力 数据比较小直接跑暴力 但是注意题目描述 也就是说: [ ( ] ) 是不合法的 补全应该是 [ ] ( [ ] ) 举个栗子: 比如 ...

  2. AndroidStudio NDK环境3种搭建方式

    AndroidStudio NDK环境3种搭建方式     转载. https://blog.csdn.net/zhang_jun_ling/article/details/85621427 一.前言 ...

  3. Java:基础知识点

    1. 面向对象的特征 (1)封装:把过程和数据包围起来,对数据的访问只能通过已定义的界面.即现实世界可以被描绘成一系列完全自治.封装的对象,这些对象通过一个受保护的接口访问其他对象:(2)继承:是一种 ...

  4. 机器学习之Xgboost算法

    知识点 """ xgboost:是一种提升算法,串行的决策树 过程: 第一棵树:目标值:1000 ,预测值:950 第二颗树:目标值:1000-950=50(残差作为输入 ...

  5. PCL中有哪些可用的PointT类型(2)

    博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=267 PointXY-float x, y; 简单的二维x-y point结 ...

  6. C# 打包安装部署 属性中找不到 查找目标或打开文件位置

    用第三方工具OrcaMis (一个可以修改msi文件的工具)来实现的 最后我又试了几次,以为是再程序打包的时候设置有问题,结果都没有找到原因,没有办法只有需求网络资源,网络上有朋友说VS创建的快捷方式 ...

  7. 小D课堂 - 新版本微服务springcloud+Docker教程_5-06 高级篇幅之深入源码

    笔记 6.高级篇幅之深入源码剖析Hystrix降级策略和调整     简介:源码分析Hystrix降级策略和调整 1.查看默认讲解策略 HystrixCommandProperties        ...

  8. delphi循环校验数据集

    function XXXXXFrom.CheckData(Sender: TObject): Boolean; var tmpcds:TfwClientDataset; begin Result:=F ...

  9. 简单wait(),notify()方法

    1.两个类public class Name{ public static void main(String[] args) throws InterruptedException { User us ...

  10. 3年磨一剑,我的前端数据 mock 库 http-mock-middleware

    不好意思,离开博客园4年多了,一回来就是为自己打广告,真是害羞啊... http-mock-middleware 是我最近完成的一个前端数据 mock 库.它是我汇总近3年工作经验而诞生的一个工具,使 ...