分布式光线追踪模拟景深效果

2024-01-25 05:48

本文主要是介绍分布式光线追踪模拟景深效果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文为spanzhang(张友邦)原创,发布地址为:http://blog.csdn.net/spanzhang,转载请注明出处。

如果你还不知道景深是什么意思,可以随便找本摄影的入门书籍看看。景深是在大光圈下显示的特别的摄影效果,它能把焦点前后的景物虚化(所谓的焦外成像,Out of Focus),虚化的形状和快门的孔形有关。当光圈孔很小的时候,景深很大,光圈大的时候景深小。这里有一个关于景深及其计算的资料:http://www.blueidea.com/photo/skill/2003/215.asp。

分布式光线追踪(Distributed Ray Tracing)在模拟Translucency、Glossy表面、软阴影(Soft Shadow)、景深(Depth of Field)、运动模糊(Motion Blur)等方面有强力表现。它和照相机模型非常相似,只不过计算的时候光线是从胶片(投影平面)上发出来的,然后经过透镜射入场景中。昨天抽时间研究了一下DRT模拟景深,又回忆了一下高中时候的透镜方面的知识。幸好当时的物理还学得可以,这么多年没用还是把需要用到的点给回忆起来了。建立了一个很简单的凸透镜模型,把几个参数一定,在原来的普通光线追踪的基础上改了一下得到如下的结果:


没有景深效果的场景,所有的光源都没有开启软阴影。采用6 x 6的regular grid采样做的anti-aliasing。


光圈大小0.06,焦距比例2.7,焦点在前景上。光圈有点大,背景模糊的不行了。可以从散焦影像隐约的看出快门的形状是方形的。


光圈还是0.06,焦距比例为0.5,定位在背景上,前景模糊的很厉害。


光圈没变,焦距为1.6,定位在中间的球体上,前景背景都模糊了。


之前对每个投影点采用的是stochastic方式采样200条光线,这张图片使用的是regular grid采样81个点。可以看出,远景的模糊上要差一点点,但是大部分地方都要好过前一张。

可以看出,DRT在模拟焦外成像方面效果很不错。光线追踪以一种更加接近实际的模式来模拟光线和环境的交互,应该说它更像照相机一些。另外,由于每条光线可以并行处理,非常适合多核计算环境。但一个稍微复杂一点的模拟模型就会导致大量的光线产生(所谓光线爆炸),这也是光线追踪一直没有大规模进入电影级应用的原因。但总的来说,前景还是乐观的。基于光线追踪的应用会越来越多的。嗯,会的。

这篇关于分布式光线追踪模拟景深效果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/642265

相关文章

redis+lua实现分布式限流的示例

《redis+lua实现分布式限流的示例》本文主要介绍了redis+lua实现分布式限流的示例,可以实现复杂的限流逻辑,如滑动窗口限流,并且避免了多步操作导致的并发问题,具有一定的参考价值,感兴趣的可... 目录为什么使用Redis+Lua实现分布式限流使用ZSET也可以实现限流,为什么选择lua的方式实现

Seata之分布式事务问题及解决方案

《Seata之分布式事务问题及解决方案》:本文主要介绍Seata之分布式事务问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Seata–分布式事务解决方案简介同类产品对比环境搭建1.微服务2.SQL3.seata-server4.微服务配置事务模式1

CSS模拟 html 的 title 属性(鼠标悬浮显示提示文字效果)

《CSS模拟html的title属性(鼠标悬浮显示提示文字效果)》:本文主要介绍了如何使用CSS模拟HTML的title属性,通过鼠标悬浮显示提示文字效果,通过设置`.tipBox`和`.tipBox.tipContent`的样式,实现了提示内容的隐藏和显示,详细内容请阅读本文,希望能对你有所帮助... 效

Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

《Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)》文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一... 目录一、首先 npm 安装插件二、创建一个vue组件三、业务页面内 引用自定义组件:四、dhtmlx

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

SpringBoot如何使用TraceId日志链路追踪

《SpringBoot如何使用TraceId日志链路追踪》文章介绍了如何使用TraceId进行日志链路追踪,通过在日志中添加TraceId关键字,可以将同一次业务调用链上的日志串起来,本文通过实例代码... 目录项目场景:实现步骤1、pom.XML 依赖2、整合logback,打印日志,logback-sp

java如何分布式锁实现和选型

《java如何分布式锁实现和选型》文章介绍了分布式锁的重要性以及在分布式系统中常见的问题和需求,它详细阐述了如何使用分布式锁来确保数据的一致性和系统的高可用性,文章还提供了基于数据库、Redis和Zo... 目录引言:分布式锁的重要性与分布式系统中的常见问题和需求分布式锁的重要性分布式系统中常见的问题和需求

Golang使用etcd构建分布式锁的示例分享

《Golang使用etcd构建分布式锁的示例分享》在本教程中,我们将学习如何使用Go和etcd构建分布式锁系统,分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要,它有助于维护一致性,防止竞... 目录引言环境准备新建Go项目实现加锁和解锁功能测试分布式锁重构实现失败重试总结引言我们将使用Go作

基于Python实现PDF动画翻页效果的阅读器

《基于Python实现PDF动画翻页效果的阅读器》在这篇博客中,我们将深入分析一个基于wxPython实现的PDF阅读器程序,该程序支持加载PDF文件并显示页面内容,同时支持页面切换动画效果,文中有详... 目录全部代码代码结构初始化 UI 界面加载 PDF 文件显示 PDF 页面页面切换动画运行效果总结主