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

图片来自《Fundamentals of Computer Graphics》

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

图片来自网络

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

图片来自网络

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

图片来自网络

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

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

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

物体不在焦平面上的情形

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

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

新的方法则是:

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

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

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

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

  1. Unity 景深Depth Of Field

    目录 介绍 准备 设置 基于Unity Builtin 管线 基于Unity URP 基于Unity HDRP 介绍: 景深效果Depth Of Field是摄影界的老常客了,在游戏中也非常多见,它能 ...

  2. URP——后期处理特效——景深Depth Of Field

    Depth Of Field 景深组件应用景深效果,它模拟相机镜头的焦点属性.在现实生活中,相机只能清晰地聚焦在特定距离的物体上.离相机较近或较远的物体都没有对焦.模糊给了一个关于物体距离的视觉提示, ...

  3. Unity景深Depth of field优化,得到清晰边界

    Unity景深模拟的实现大都是, 1.先获取屏幕后期纹理,然后复制出来进行高斯等方式模糊. 2. 再根据场景物体的深度纹理, 在着色器中对景深需要清晰的目标为切割获取0-1的深度插值. 3.将屏幕后期 ...

  4. 【转载】【《Real-Time Rendering 3rd》 提炼总结】(九) 第十章 · 游戏开发中基于图像的渲染技术总结

    本文由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://blog.csdn.net/poem_qianmo/article/details/78309500 这是一篇近万字的总结式 ...

  5. 【《Real-Time Rendering 3rd》 提炼总结】(九) 第十章 · 游戏开发中基于图像的渲染技术总结

    本文由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://blog.csdn.net/poem_qianmo/article/details/78309500 这是一篇近万字的总结式 ...

  6. 基于光线追踪的Mental Ray鱼眼镜头的编程实现 作者:华文广

    基于光线追踪的Mental Ray鱼眼镜头的编程实现 作者:华文广                                                                    ...

  7. Learn OpenGL 笔记7.1 PBR Theory(physically based rendering基于物理的渲染 理论)

    PBR,或更通常称为基于物理的渲染,是一组渲染技术,它们或多或少基于与物理世界更接近的相同基础理论.由于基于物理的渲染旨在以物理上合理的方式模拟光线,因此与我们的原始光照算法(如 Phong 和 Bl ...

  8. 【基于物理的渲染(PBR)白皮书】(五)几何函数相关总结

            本文由@浅墨_毛星云 出品,首发于知乎专栏,转载请注明出处           文章链接: https://zhuanlan.zhihu.com/p/81708753 在基于物理的渲染 ...

  9. maya中redshift渲染深度景深后nuke合成方法

    1.redshift 渲染pass通道中的 depth层,会输出一个z 通道图片,建议使用tiff float方式,此方式精度很高. nuke中读取tiff时,鼠标在图片上移动,发现深度信息集中在图片 ...

最新文章

  1. 敏捷之父Martin Fowler作序推荐《演进式架构》
  2. [LeetCode]: 53: Maximum Subarray
  3. localdate获取几个月前_关于近期使用java8中LocalDateTime的总结
  4. 音频降噪处理+java_适当的音频捕获和降噪
  5. NET问答: 如何用 C# 计算相对时间 ?
  6. [译]预留位置队列PRQueue:多线程程序中消息输入队列和消息输出队列保持同序...
  7. 在C++中用虚函数的作用是什么?为什么要用到虚函数
  8. mysql dmz_MySQL 中LIMIT的使用详解
  9. 面对颇有心机的同事要具备的四个心态
  10. 通过debug过程分析Struts2什么时候将Action对象放入了值栈ValueStack中
  11. OpenCasCade网格的显示
  12. 打印机怎么无线扫描到计算机,富士施乐打印机CM215fw无线扫描到电脑功能的使使用教程...
  13. Linux桌面没有minidwep,ubuntu安装minidwep-gtk
  14. python for ArcGIS 绘制武汉市板块地图
  15. 深度解析输入偏置电流和输入失调电流的定义来源以及对电路的影响
  16. 新品发布 | P600准行业无人机研发平台,室外视觉识别跟踪、激光雷达避障、多机组网!
  17. Arcgis ArcTutor数据下载
  18. Android 11 安装EdXposed + Magisk框架
  19. 原来何恺明提出的MAE还是一种数据增强
  20. MySQL入门语法(视频学习笔记)

热门文章

  1. 如何打开eclipse进行编写Java程序
  2. python安全攻防---scapy使用
  3. python安全攻防---爬虫基础--re解析数据
  4. 【转载】ACM中矩阵乘法的应用
  5. 58. 最后一个单词的长度 golang string类的用法
  6. Redis运维和开发学习笔记(2) redis持久化
  7. 字符串题目---2判断两个字符串是否为变形词
  8. c++中STL的常用算法---2(遍历算法,查找算法)
  9. Linux编程手册读书笔记第四章(20140407)
  10. c语言实现配置文件的读写