基于物理的渲染-用真實的環境光照亮物體

目前,在游戲引擎中用于照亮物體的光源非常豐富。其中,比較常用的有:平行方向光、點光源、聚光燈以及體積光等,但它們都是對真實光源的近似,并不能很好地模擬真實世界中的復雜光照情況。為了增加光照效果的真實感,我們常用的一種光照計算方法是基于圖像的光照計算(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.pswp.cn/news/452710.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452710.shtml
英文地址,請注明出處:http://en.pswp.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 路由實踐(一)之后,斷更已經差不多一個月,畢竟是年前的最后一個月,各種事情扎堆,直到近幾天才稍微閑下來,于是有了此文。簡單回顧下,上一篇文章中簡單介紹了三種…