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

目前,在游戏引擎中用于照亮物体的光源非常丰富。其中,比较常用的有:平行方向光、点光源、聚光灯以及体积光等,但它们都是对真实光源的近似,并不能很好地模拟真实世界中的复杂光照情况。为了增加光照效果的真实感,我们常用的一种光照计算方法是基于图像的光照计算(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,一经查实,立即删除!

相关文章

克隆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/…

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

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

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

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

Python基础-变量作用域

1.函数作用域介绍 函数作用域 Python中函数作用域分为4种情况: L:local,局部作用域,即函数中定义的变量:E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用…

php爱奇艺筛选标签,三种排序 快速筛选好视频_软件资讯技巧应用-中关村在线

使用在线视频播放器来观看视频,通常有可以分为有目标和无目标两种。即是用户如果定点找一部视频和随意查看喜欢的视频,这两种模式往往查找视频的方法也是不一样的。我们这里要和大家讲解的是,用户在没有目标视频的情况下,怎样更快…

Flask项目--发送短信验证码

1.后端代码 具体代码如下&#xff1a; # GET /api/v1.0/sms_codes/<mobile>?image_codexxxx&image_code_idxxxx api.route("/sms_codes/<re(r1[34578]\d{9}):mobile>") def get_sms_code(mobile):"""获取短信验证码""&q…

Jenkins系列之五——通过Publish over SSH插件实现远程部署

Jenkins通过Publish over SSH插件实现远程部署 步凑一、配置ssh免秘钥登录 部署详情地址&#xff1a;http://www.cnblogs.com/Dev0ps/p/8259099.html 步凑二、安装Publish over SSH插件 插…

php柱状图实现年龄分布,考官雅思写作小作文满分范文 柱状图:年龄分布

考官雅思写作小作文满分范文 柱状图:年龄分布2017年06月12日14:48 来源&#xff1a;小站教育作者&#xff1a;小站雅思编辑参与(40)阅读(63981)摘要&#xff1a;为大家分享前考官simon演示的9分雅思小作文。考官亲笔&#xff0c;用最正统的4段式写作&#xff0c;本文主题-柱状图…

Flask项目--注册

0.效果展示 1.后端代码 # coding:utf-8from . import api from flask import request, jsonify, current_app, session from ihome.utils.response_code import RET from ihome import redis_store, db, constants from ihome.models import User from sqlalchemy.exc import I…

图片处理

//图片处理public function img(){//读取图片$imageImage::open(./img/02.jpg);//dump($image);//获取图片的信息// 返回图片的宽度$width $image->width();// 返回图片的高度$height $image->height();// 返回图片的类型$type $image->type();// 返回图片的mime类…

数据流图 系统流程图 程序流程图 系统结构图联系与区别

1.数据流图&#xff08;Data Flow Diagram&#xff09;&#xff0c;简称DFD&#xff0c;它从数据传递和加工角度&#xff0c;以图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程&#xff0c;是结构化系统分析方法的主要表达工具及用于表示软件模型的一种…

迄今为止最快的 JSON 序列化工具 Jil

2019独角兽企业重金招聘Python工程师标准>>> 迄今为止最快的 JSON 序列化工具 Jil https://github.com/kevin-montrose/Jil 转载于:https://my.oschina.net/xainghu/blog/1621365

mysql数据库访问编程,mysql 连接数据库

1、首先启动mysql 并链接数据 小意思吧&#xff01;都会了是吧mysql -uroot -p //连接数据net start mysql // 启动mysql2、查询当前 服务器里有哪些数据show databases;3、创建数据库create database jddb -------数据库名字(jddb)4、 使用数据库use jddb;5、查询当前数据库下…

Flsak爱家租房--个人信息

0.页面展示效果 1.设置用户头像–后端代码 # coding:utf-8from . import api from ihome.utils.commons import login_required from flask import g, current_app, jsonify, request, session from ihome.utils.response_code import RET from ihome.utils.image_storage impo…

C++ string::size_type

从逻辑上讲&#xff0c;size()成员函数应该似乎返回整型数值&#xff0c;但事实上&#xff0c;size操作返回是string::size_type类型的值。string类类型和其他许多库类型都定义了一些配套类型(companion type)。通过这些配套类型&#xff0c;库函数的使用就与机器无关(machine-…

Flsak爱家租房--实名认证

0.页面展示效果 1.设置用户实名认证信息–后端代码 api.route("/users/auth", methods["POST"]) login_required def set_user_auth():"""保存实名认证信息"""user_id g.user_id# 获取参数req_data request.get_json()if …

php把语音转成帧,[转载]用TCP/IP实现自己简单的应用程序协议:成帧器部分

在前面《字节和字符,对信息进行编码》&#xff0c;《Socket>流&#xff0c;TCP连接,TCP可靠性概述》一系列的随笔中我们已经表述了相应的理论知识&#xff0c;现在可以动手实现一个自己的应用程序协议。将 数据转换成在线路上传输的字节序列只完成了一半的工作&#xff0c;在…