目前,在游戏引擎中用于照亮物体的光源非常丰富。其中,比较常用的有:平行方向光、点光源、聚光灯以及体积光等,但它们都是对真实光源的近似,并不能很好地模拟真实世界中的复杂光照情况。为了增加光照效果的真实感,我们常用的一种光照计算方法是基于图像的光照计算(Image-based Lighting)。例如:天空盒(Sky Box)作为环境光贴图,或者是用Reflection Probe作为反射贴图等。而在最近比较流行的基于物理的渲染管线(Physically-based Rendering)中,IBL成为了必不可少的一部分。

今天我们介绍的一篇论文是Paul Debevec在1998年Siggraph会议上发表的一篇文章。这篇论文主要解决的问题是:如何利用HDR(High Dynamic Range)图以及全局光照明技术,将虚拟的物体融合到真实照片中。它实现的效果类似于今天我们常说的AR(Augmented Reality)技术。在渲染虚拟物体的时候,文章作者采用的方法是用HDR图作为环境光贴图来计算光照结果。该方法是最早使用IBL进行光照计算的方法之一。我们先来看看他的渲染结果,如下图所示。

其中,左图是真实拍摄的图片,右边是将虚拟物体合成到真实拍摄图片的结果。可以看到,虚拟物体中的金属材质对周围环境的反射以及高光,都能和真实物体形成一致的光照结果。

论文将场景中的物体分成三类分别进行处理。下图是这篇论文的算法框架图。


这三类分别是:远处的场景、近处的局部场景、以及虚拟场景。在渲染远处场景的时候,论文作者用真实拍摄的图片以及简单的几何来渲染,其光照信息全部来自拍摄的图像。在渲染近处局部场景的时候,由于需要模拟真实场景对虚拟场景的影响,所以论文作者还对物体的材质进行了近似估计。最后,在渲染虚拟物体的时候,利用环境光照的入射光来计算光照。其算法过程示意图如下图所示。


首先,论文作者对真实场景进行拍摄。然后,利用反射探针对场景中的环境光进行获取。在获取环境光贴图时,作者采用的是HDR的表示方式。接着,利用获取的环境光照贴图对远处场景进行建模。最后,用全局光照软件渲染虚拟物体以及与虚拟物体有光照影响的近处局部物体,并融合到拍摄的真实图像中。接下来我们将对论文的算法进行详细介绍。


一、用真实的环境光照亮物体

文章作者采用了HDR图作为环境光照贴图。为了说明用HDR图比普通的LDR图更能表现实际光照环境,论文作者分别采用HDR和LDR环境贴图进行渲染,并对两者结果进行了比较,结果如下图所示。


第一排是用HDR图片渲染的结果,第二排是用LDR渲染结果。其中,右边三列结果中,LDR的渲染结果在计算时,作者将光照强度增大了6倍,从而使得LDR的入射光的强度能够与HDR的一致。但是从渲染结果中可以看到,采用HDR环境光图渲染的结果能够表现出更多的细节,而LDR的渲染结果显得比较平坦。因此,作者在其接下来的实验中全部采用了HDR图片作为环境光照入射光。


二、无限远场景

文章作者提出了一种基于光照的建模方法(Light Based Model)来对远处的物体进行建模。这种方法其实类似于我们今天常用的天空盒。它的做法是将HDR光照图映射到一个方盒上,作为远处的背景,如下图所示。

这张图不仅用于显示无限远处的场景,并且用于对虚拟物体渲染的入射光。


三、近处局部场景

为了模拟近处局部真实场景与虚拟场景之间的光照交互,不仅需要对近处局部场景进行几何建模,而且需要获取其材质信息。虽然可以采用材质获取工具对真实场景材质进行测量,但是文章作者采用了迭代的方法来对其进行估计。该方法的过程如下:

  1. 首先对局部真实场景的几何进行建模,然后对其材质进行估计,如:diffuse,diffuse加specular,或者是任意的BRDF模型,甚至是随空间变化的;
  2. 对估计的材质模型选择初始参数;
  3. 用全局光照算法对局部场景进行渲染;
  4. 采用不同的视角,比较渲染结果和真实拍摄结果;
  5. 如果渲染结果与真实拍摄结果不一致,则调整模型参数,并返回第3步继续迭代。

四、近处的虚拟场景

在渲染近处的虚拟场景时,需要将拍摄的多张环境光贴图合成一张完整的贴图作为入射环境光。因为,当采用Light Probe采集环境光照时,处于Probe球背面的场景无法被采集到。同时,正对着相机方向的场景由于球面边缘反射的拉伸,采样率低,容易出现瑕疵。因此,论文作者在多个不同的角度对Probe球进行拍摄,然后将多张拍摄的结果进行合成,最后形成一张完整的贴图。下图展示了论文作者采集的三张环境光贴图以及对虚拟场景的渲染结果。


在上方的图片中,上图是利用Light Probe拍摄的三张贴图,下图是用合成的环境光贴图渲染的虚拟场景。在渲染时,论文作者采用了全局光照渲染引擎Radiance进行全局光照渲染。与我们目前在游戏引擎中采用的实时算法不同的是,Radiance并不是实时计算完成的。由于当时的硬件条件限制,支持离线渲染。


五、融合结果

论文作者将远处场景、近处场景、以及虚拟场景进行融合,得出最终结果,如下图所示。



其中,图(a)是真实拍摄的结果。图(b)显示了用Light Probe拍摄环境光贴图的设置。图(c)至图(f)显示了采用迭代对局部场景(地板)进行估计的过程。为了表现出虚拟物体和地面之间的阴影遮挡以及多次反射,论文作者用一张纯diffuse的纸板对地面进行几何近似,并通过第三节中的迭代算法对地面的材质参数进行估计。图(g)显示了将虚拟物体融合到真实场景的结果。


六、总结

这篇论文提出了一种利用真实拍摄光照贴图对虚拟物体进行渲染并融合的算法。该算法可以很好地将虚拟物体融合到真实拍摄的场景中。其主要原因是,渲染虚拟物体的环境光照贴图是从真实拍摄的HDR图片中获取,所以虚拟物体的渲染结果的光照能够与真实拍摄场景一致。其次是论文作者在渲染时,对与虚拟物体有相互影响的真实场景进行几何和材质的估计。然后,根据估计结果进行全局光照的渲染。最终能够捕获真实场景与虚拟物体之间相互反射以及阴影遮挡的效果。


七、论文信息

作者信息:
Paul Debevec,南加州大学兼职研究员,GoogleVR项目主要成员,著名计算机视觉、图形学学者。他的研究成果包括,利用Light Stage获取BSDF,如人脸的反射模型,以及将高动态图用于基于图像的建模与渲染。他的研究成果被用于许多著名电影渲染,包括黑客帝国、蜘蛛侠2、金刚、超人归来、蜘蛛侠3、以及阿凡达等。

原文出处:侑虎科技
本文作者:admin
转载请与作者联系,同时请务必标明文章原始出处和原文链接及本声明。

基于物理的渲染-用真实的环境光照亮物体相关推荐

  1. opengl-PBR基于物理的渲染(Physically Based Rendering):理论基础

    PBR文档链接 PBR-learnOpengl官方文档 理论基础 PBR概念 PBR基于物理的渲染(Physically Based Rendering),它指的是一些在不同程度上都基于与现实世界的物 ...

  2. 图形学基础 | 基于物理的渲染理论(PBR)

    转载自: https://learnopengl.com/PBR/Theory Learn OpenGL PBR Theory PBR 基于物理的渲染(Physically Based Renderi ...

  3. (十九)unity shader之——————基于物理的渲染技术(PBS):中篇(Unity 5中的Standard Shader的实现和使用)

    一.unity 5中的standard shader 在unity5中新创建一个模型或是新创建一个材质时,默认使用的着色器都是一个名为standard 的着色器.这个standard shader使用 ...

  4. 什么是Physically Based Rendring基于物理的渲染?

    什么是Physically Based Rendring基于物理的渲染? PBR不是一种技术,而是一种渲染方式 PBR的优点 什么是Physically Based Shader? 材质的光学特性 微 ...

  5. 游戏中基于物理的渲染(一)

    "游戏中基于物理的渲染"系列由4-5篇文章组成,介绍了如何在实时渲染中使用基于物理的方法.内容主要来自于SIGGRAPH 2010的course:Physically-Based ...

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

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

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

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

  8. PBR:基于物理的渲染(Physically Based Rendering)+理论相关

    一: 关于能量守恒 出射光线的能量永远不能超过入射光线的能量(发光面除外).如图示我们可以看到,随着粗糙度的上升镜面反射区域的会增加,但是镜面反射的亮度却会下降.如果不管反射轮廓的大小而让每个像素的镜 ...

  9. 基于物理的渲染技术(PBR)系列一

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...

最新文章

  1. empress和queen区别_queen与empress
  2. SCOM 2012知识分享-21:无代理管理
  3. nestjs连接远程mysql_Nestjs 链接mysql
  4. 动画性能优化-requestAnimationFrame、GPU等
  5. pandas读取Excel文件
  6. AcWing 897. 最长公共子序列(LCS朴素版)
  7. (xd mac直装版)支持m1完美支持m1完整详细教程
  8. java 中如何连接 oracle 数据库
  9. 简单网页-------课程表
  10. matlab进行分子动力学模拟,一种基于分子动力学模拟测试碳纳米管力学性能的方法与流程...
  11. 随机课堂、随机提问、随机抽检、随机名单,可去重可重复
  12. php 颜值测试源码,微软小冰颜值测试PHP最新代码
  13. 手把手教你升级车载导航
  14. Netty高性能之道1-传统RPC调用性能差的三宗罪
  15. python实现爬虫探探_全栈 - 9 实战 爬取豆瓣电影数据
  16. aptx与ldac音质区别_aptx跟ldac差距大么
  17. 卸载工具Android,教你轻松卸载/删除Android手机内置游戏/软件
  18. 信息安全-网站安全需求分析与安全保护工程(一)
  19. 区分浏览器,判断浏览器版本
  20. 计算机专业学生 | 要尝试去学会阅读源码,它能让你学会很多!

热门文章

  1. java向Excel文件写入数据
  2. android 投票功能,腾讯新闻Android客户端更新 加入投票功能
  3. php curl 数据采集 空,PHP curl从网站返回空数组的数据
  4. Spring+Hibernate+SpringMVC+MySql实现配置多个数据源!
  5. copying mysql status_mysql慢查询copying to tmp table
  6. CSDN写博客(字体颜色、大小)
  7. std::future详解
  8. C++学习 高级编程
  9. java-web前端 javascript
  10. gcc交叉编译的实现