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

目前,在游戏引擎中用于照亮物体的光源非常丰富。其中,比较常用的有:平行方向光、点光源、聚光灯以及体积光等,但它们都是对真实光源的近似,并不能很好地模拟真实世界中的复杂光照情况。为了增加光照效果的真实感,我们常用的一种光照计算方法是基于图像的光照计算(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
转载请与作者联系,同时请务必标明文章原始出处和原文链接及本声明。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452710.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php中取出数组中指定的值,PHP除开数组中指定的值

PHP去除数组中指定的值//一维数组简单的做法 unset($arr[array_search($value,$arr)])$arr array("a","b","c","d");function isHave($var){if($var!"b")return true;}$arr_filter array_values(array_filter($arr,"…

实体以及实体型和实体集

实体(Entity) 客观存在并可相互区别的事物称为实体。 可以是具体的人、事、物或抽象的概念。 属性(Attribute) 实体所具有的某一特性称为属性。 一个实体可以由若干个属性来刻画。 实体型(Entity Type&#xf…

mysql中locat函数,MySQL中的LOCATE和POSITION函数使用方法 | 很文博客

不常用:MySQL中的LOCATE和POSITION函数LOCATE(substr,str)POSITION(substr IN str)返回子串 substr 在字符串 str 中第一次出现的位置。如果子串 substr 在 str 中不存在,返回值为 0:mysql> SELECT LOCATE(bar, ‘foobarbar);-> 4mysql…

什么是数据的完整性约束

为了防止不符合规范的数据进入数据库,在用户对数据进行插入、修改、删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确、有效、相容。

Python--协程(gevent模块)

一:前言 协程又称为微线程,纤程。英文名Coroutine:协程是一种用户态的轻量级线程 协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复之前保存的寄存器上下文和…

ffmpeg 0.6.3 代码, 经过我努力,能够在vs 2005 下单步调试代码

1. ffmpeg-0.6.3_modify.7z 是修改后的ffmepg的代码; 2.ffmpeg-0.6.3_srouce.tar.bz2 是ffmpeg原始代码; 3.SDL-devel-1.2.15-VC.zip 是图像显示使用使用的sdl代码; 4.w_cc_p_10.1.020.exe 是vc 2005 需要使用的编译器&#xff1b…

克隆CentOS6虚拟机eth0被修改为eth1如何修改eth0

2019独角兽企业重金招聘Python工程师标准>>> 直接修改 /etc/sysconfig/network-script/ifcfg-eth0 删掉UUID HWADDR 配置静态地址 然后: rm -rf  /etc/udev/rules.d/70-persistent-net.rules然后reboot 转载于:https://my.oschina.net/hengbao666/blog/…

[Hnoi2013]消毒

Description 最近在生物实验室工作的小T遇到了大麻烦。 由于实验室最近升级的缘故,他的分格实验皿是一个长方体,其尺寸为abc,a、b、c 均为正整数。为了实验的方便,它被划分为abc个单位立方体区域,每个单位立方体尺寸 为111。用(i,…

php按照文件名字排序,php readdir 排序问题,如何按照日期进行排序

目前是这么写的:function posts_get($directory,$ext){if (is_dir($directory)) {$handle opendir($directory);while ($file readdir($handle)){$subdir $directory . / .$file;if ($file ! . && $file !.. && is_dir($subdir)){posts_get($sub…

关系模型的名词

关系(Relation)一个关系对应通常说的一张表元组(Tuple)表中的一行即为一个元组属性(Attribute)表中的一列即为一个属性,给每一个属性起一个名称即属性名主码(Key)也称码键…

物理卷、卷组、逻辑卷

参考文章: 相关文献 谢谢作者分享!

fibonacci数列的题目——剑指Offer

https://www.nowcoder.net/practice/c6c7742f5ba7442aada113136ddea0c3?tpId13&tqId11160&tPage1&rp1&ru/ta/coding-interviews&qru/ta/coding-interviews/question-ranking 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出…

如何高效的编写与同步博客 (.NET Core 小工具实现)

系列目录 [如何高效的编写与同步博客(一)- 编写 ]如何高效的编写与同步博客(二)- 快速发布到多个渠道一.前言 写博客,可以带给我们很多好处,比如可以让我们结识更多志同道合的人;在写博客过程中…

java appendable,org.eclipse.jetty.util.Utf8Appendable$NotUtf8Exception: Not valid UTF8

上传文件奇怪的错误2016-10-14 11:00:52,254 nuoshang.bluejay.common.shiro.cache.RedisCache.put(RedisCache.java:54) DEBUG - SET nameshiro-activeSessionCache key70qv5bejsihmgot7hroqg6q0lv2016-10-14 11:00:52,254 nuoshang.bluejay.common.shiro.cache.LCache.fire(L…

Oracle高可用概述(HA与RAC的关系解惑)

1.你如何理解高可用的概念? 所谓的高可用HA就是当你的系统中的某个节点异常损坏了,系统还是可用状态,还可以对外提供服务,不会因为你的节点丢失而整体瘫痪。 2.列出你知道的Oracle高可用产品,并作一些功能和应用场景上…

从github clone文件: Failed to receive SOCKS4 connect request ack.

安装了代理,能上网,也能从github上下载文件,就是无法从github上clone文件, 查了很久资料后,终于发现使用sudo可以解决问题。不过,不知道原因是什么? 比如:git clone https://github.…

mxf高速发展和数字电影母版制作技术

1.实现MXF的诺言——格式只是迈向可互操作内容管理的一步 当把元数据加到数字内容的MXF(素材交换格式)标准通过EBU于2002年推出时,当时曾预期广播机构将会迅速无缝地管理其所有来自不同厂家的制作、后期和分配系统上的数字内容。 六年过…

Android 路由实践(二)

前言继上一篇Android 路由实践(一)之后,断更已经差不多一个月,毕竟是年前的最后一个月,各种事情扎堆,直到近几天才稍微闲下来,于是有了此文。简单回顾下,上一篇文章中简单介绍了三种…