我們曾經為大家介紹過Unity中光照和陰影有關的內容,比如Unity實時陰影實現圖解。近幾年,增強現實應用開發(fā)者越來越多,相應的開發(fā)技巧被眾多開發(fā)者所關注。本文將指導您對Unity和Vuforia SDK增強現實的應用進行光照和陰影渲染。這背后的理論同樣適用于其它的SDK和游戲引擎。
光照與陰影的重要性
想要使用Unity創(chuàng)建優(yōu)質的游戲場景,光照和陰影的設置是非常重要的,因為它們被用來制造場景的景深,從而讓畫面更加自然與真實。缺少陰影會使得畫面缺乏真實感,如果沒有陰影,您無法區(qū)分出人物是站在平面上還是漂浮在空中,如下圖所示。

從上圖中可以看出有無陰影的明顯區(qū)別,在AR增強現實應用開發(fā)中也是如此。
渲染光照和陰影存在的問題
如果想在Unity中渲染光照或者陰影,就必須有網格。但是,添加網格會遮擋相機視圖。如下圖所示,灰色的平板擋住了桌面。

如果把灰色平板換成透明材質不就可以解決這個問題么?其實不然,如果使用透明材質替代上圖的灰色平面,使用Unity的標準著色器就無法在上面投射陰影(雖然可能有些自定義著色器可以投射)。如下圖所示,使用透明材質可以看到桌面,但沒有陰影。

解決思路:分別渲染光照和陰影
最初的想法是利用疊加(Addition)或者復合(Multiplication)效果,可以分別渲染光照和陰影,然后使用后處理效果將陰影和相機視圖結合起來。
我們可以將場景內容分為三層:背景、光照和陰影、3D對象,然后將它們合并到一起。

背景層:只包含相機渲染的圖像

光照和陰影層

3D對象層

三層疊加的最終效果
上圖由于桌面太黑了,因此可能看不清陰影。您可以查看下面的視頻了解更多詳情。
詳細步驟
如果您還不清楚Unity結合Vuforia開發(fā)AR應用的基本步驟,可以先看看之前的文章《5分鐘使用Unity制作AR應用》。

總得來講,我們需要添加三個相機分別用來渲染背景、光照和陰影以及增強現實對象,這三個相機的視角與Vuforia的Augmented Reality Camera相機完全一樣,本例中使用CopyCameraData.cs來實現上述功能。另外,由于無法將對象的陰影渲染到另外一層,因此需要將其進行拷貝,我們需要編輯副本的“Mesh Renderer”,將“Cast Shadows”屬性設置為“Shadow Only”。最后,本例中使用了Color FX插件實現后處理效果。您可以在文末查看教程的視頻演示,并點擊【閱讀原文】下載教程相關素材。
使用Unity實現本例中AR環(huán)境下的陰影與光照渲染效果的詳細步驟如下:
1)新建場景,刪除新場景默認的主相機和平行光。
2)將Vuforia中的預制件ARCamera拖拽至場景中,在檢視面板中加入App License Key(Vuforia 的激活碼), 并勾選配置文件的Datasets(數據集)中的Load MyTargets Database和Active。

3)將Vuforia 中的預制件ImageTarget拖拽至場景中,設置好Database中的目標識別圖。
4)新建一個Plane,將其Position的Y值設為-0.01(略低于識別目標圖)。
5)新建一個立方體和球體,作為光照遮擋物。
6)新建一個點光源,設置好光照范圍和陰影類型。

7)將ARCamera的中的World Center Mode由FIRST_TARGET改為SPECIFIC_TARGET。并將目標圖像(ImageTarget)指定給World Center。

8)在ARCamera下再創(chuàng)建兩個Camera分別命名為Light Camera和ARObject Camera。
9)打開Tags & Layers檢視面板,分別添加Background Layer、Light Layer 和 ARObject Layer三個層。

10)設置ARCamera下方的三個相機。將Light Camera的Culling Mask設置為Light Layer和Default;ARObject Camera的Culling Mask設置為ARObject Layer和Default;Camera?的Clear Flags設置為Solid Color, Culling Mask設置為Background Layer, 并且其子節(jié)點BackgroundPlane的Layer設置為Background Layer。
11)分別為Light Camera和ARObject Camera 添加 CopyCameraData腳本并將TargetCamera指定為Camera。
12)調整一下相機的視角,創(chuàng)建一個空對象命名為_ARObjects并將Plane、Cube和Sphere拖拽至其下方。然后復制_ARObjects對象并命名為_Light Layer Objects,并將Cube和Sphere的Cast Shadows 設置為Shadows Only。將_Light Layer Objects的層級設置為Light Layer。

13)刪除_ARObjects中的 Plane,并將其層級設置為ARObject Layer。

這樣三個相機對應三層就設置好了。最后在Camera上添加后處理腳本對圖像進行混合。本例中使用Colorful FX插件進行混合以實現后處理效果,您也可以使用其它的后處理腳本。在Light Camera上添加RendderTextureToBlend腳本并將Camera賦給腳本的Blend屬性。最后將ARObject Camera的Clear Flags設置為Depth only并調整深度值即可。調整混合模式選取最理想的效果。
您可以跟著下面的視頻一起練習一下:
在教學視頻中所涉及一些自定義的腳本,您可以點擊【閱讀原文】進行下載。
總結
希望本文可以幫您實現增強現實項目中的光照和陰影渲染。