欢迎光临散文网 会员登陆 & 注册

阿昌学习《RayTraing in one week》 (十一)

2022-11-22 22:40 作者:柯昌弟弟c  | 我要投稿

《第十一章》

《ray traing in one week》最后一个概念就是给摄像机添加一个消音模糊/聚焦模糊,或者通俗点就叫景深

而对于景深这个概念,就关系到摄像机的原理了

我用我自己学习理解到的说一下景深是什么样子的:

  1. 一束平行光摄入凸透镜之后,光线会汇聚在一点上,延长,那么光线会在这一点之后离散,这个点就叫做焦点

  2. 离散后这束光就像一个圆锥体一样传播,而这个圆锥体的底部圆形就叫做弥散圆

  3. 人眼是有识别弥散圆的范围的,就是弥散圆的直径放的太大了或者太小了就看不清了,那么在能看清的范围内就叫做容许弥散圆(焦点前和焦点后各有一个)

  4. 而2个容许弥散圆之间的距离就叫做景深

图片来源:百度文库

1)光圈:光圈越大,景深越小。光圈越小,景深越大。

2)镜头焦距:镜头焦距越长,景深越小。焦距越短,景深越大。

3)拍摄距离:距离越远,景深越大。距离越近,景深越小。

书中的表示非常简易

而这个原理我们需要简化一下,需要从一个虚拟的透镜范围中发射射线,而这个透镜与平面的距离就是焦距。

简化原理实现效果

简单点说就是,我们光线的创建就是经历了下边三个步骤:

1.原来是从一个点发射一条光线,最后获取颜色成像。

2.之后加入了多重采样,从一个点发射多条光线取平均值,最后获取颜色成像。

3.现在则是将从不同的点来发射光线。

既然发射光线是在一个圆形的透镜内随机产生点的,那么就写一个方法生成这个位置:

random_in_unit_disk

全新的摄像机来咯,加入透镜等参数:

camera.h完成!

主函数我们修改一下这个快门光圈,看看效果:

摄像机的参数简单修改一下

得到的图和书中基本一致的:

我这个是正方形

《第十二章》

最后一个部分就是书中的那张图,没有额外的太多,我直接把主函数截图给家看一下,基本就可以了:

one weekend 的最终 main.cpp

既然是最后的图,分辨率也是使用了400*300,看一下我的输出结果吧:

还是很漂亮的一张图的

到这里呢,One weenkend就是结束了,接下来就是 next week了,我也会持续更新的。

也给自己打个气,目前学了raytracing这个书,接下来一定要把光线追踪的圣经《Physically Based Rendering:From Theory To Implementation》(PBRT)好好学一下,加油啦!

如果有兴趣可以私信我,一起努力。

阿昌学习《RayTraing in one week》 (十一)的评论 (共 条)

分享到微博请遵守国家法律