博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于光线追踪的渲染中景深(Depth of field)效果的实现
阅读量:6253 次
发布时间:2019-06-22

本文共 882 字,大约阅读时间需要 2 分钟。

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

图片来自《Fundamentals of Computer Graphics》

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

图片来自网络

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

图片来自网络

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

图片来自网络

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

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

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

物体不在焦平面上的情形

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

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

新的方法则是:

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

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

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

你可能感兴趣的文章
linux下git+github个人使用记录
查看>>
昂贵的聘礼 POJ - 1062
查看>>
OpenGL 位图和图像概念
查看>>
jdbc
查看>>
模块初识
查看>>
百度地图需要的效果-有感
查看>>
1097 Deduplication on a Linked List
查看>>
查看 NPM、Yarn 全局安装的包
查看>>
软件版本号命名规则
查看>>
vue导航栏跳转路由
查看>>
OC - 缓存 - NSCache - 介绍
查看>>
Jenkins+GitHub+fir_cli 一行命令从源码到fir im
查看>>
【转】TCP三次握手和四次挥手全过程及为什么要三次握手解答
查看>>
[系统资源攻略]IO第一篇-磁盘IO,内核IO概念
查看>>
在 CentOS 7 上设置 grub2
查看>>
[BZOJ 4129]Haruna’s Breakfast(树上带修改莫队)
查看>>
[BZOJ 2140]稳定婚姻(强连通分量)
查看>>
人工智能工程师学习路线
查看>>
I don't like to be an theorist
查看>>
「docker实战篇」python的docker- 抖音视频抓取(上)(24)
查看>>