您好,登錄后才能下訂單哦!
小編給大家分享一下Unity3D如何實現移動平臺上的角色陰影,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
由于目前主流使用Unity3.x在移動平臺上并不支持陰影的動態生成技術,所以目前最普遍流行同時性價比也最高的陰影生成方法有以下兩種:
1、 簡單貼圖法
所謂簡單貼圖法即是直接在角色的角底附加一個陰影半透明貼圖,并讓其跟隨角色一起運動,一般是將該陰影Object成為角色模型的子物體,該種陰影生成效果如下:
陰影的Inspector視圖如下:
其中ShadowComponent是控制陰影的一個腳本,與其生成無關,故不再這里介紹。影響該應用生成的主要有兩個部分,一個是Shadow網格,另外一個則是渲染所需要的材質“No Name”。需要注意的是,Shadow網格是一個平面,但不建議使用Unity自身生成的Plane,因為Unity生成的面數較多,可通過3DMax等建模工具來自行建模,如下所示:
對于材質,最重要的則是Shader的書寫,我將其列在下方,以方便大家使用:
Shader "iPhone/SimpleShadow" { Properties { _MainTex ("MainTex", 2D) = "" {} } SubShader { Tags { "Queue" = "Transparent" } Pass { Blend SrcAlpha OneMinusSrcAlpha Color [_clrBase] Cull Off Lighting Off SetTexture [_MainTex] { combine texture, one - texture } } } }
通過以上設置即可生成最簡單的陰影效果,大家可以通過自己設定腳本來控制陰影的移動和變化等等。
但是,該陰影生成方法有一個明顯的“硬傷”,即該陰影只能適用于平坦的地面,一旦地面凹凸不平或有遮擋物,則會出現“穿幫”的效果,如下圖所示,該方法生成的陰影對腳下的正方體完全沒有影響,所以為了解決這種問題,投影生成法應運而生。
2、 投影生成法
該方法本質上來說是一種貼花(Decal)技術,即設定一個投影器,然后將陰影貼圖投射到你想展現陰影的地方,該方法的優點在于投影效果不取決于被投影區域的幾何形狀,即被投影區域可以任意凹凸的曲面,也可以處理各種障礙物。該方法生成的陰影效果如下:
下面我就具體介紹一下該陰影的生成方法:
(1) 通過“GameObject->Create Empty”來創建一個空的物體,并取名為“Shadow Projector”。
(2)通過“Component->Effects->Projector”在該空物體上加入Projector組件,并通過平移、旋轉和調整參數達到如下效果:
(3) 然后在Material選項中拖入已經準備好的材質,即可投影出陰影,效果如下:
我們看到,場景中不僅生成了陰影,同時角色的身體也“變黑”了,這是因為投影器的“Ignore Layers”設定為“Nothing”的緣故,我們將可忽略層設為角色的層“Player”,則可使角色不再被投影,效果如下:
(4)最終的Shadow Projector的Inspector視圖如下:
其中材質所用到的shader為:
Shader "Projector/Multiply" { Properties { _ShadowTex ("Cookie", 2D) = "gray" { TexGen ObjectLinear } _FalloffTex ("FallOff", 2D) = "white" { TexGen ObjectLinear } } Subshader { Tags { "RenderType"="Transparent-1" } Pass { ZWrite Off Fog { Color (1, 1, 1) } AlphaTest Greater 0 ColorMask RGB Blend DstColor Zero Offset -1, -1 SetTexture [_ShadowTex] { combine texture, ONE - texture Matrix [_Projector] } SetTexture [_FalloffTex] { constantColor (1,1,1,0) combine previous lerp (texture) constant Matrix [_ProjectorClip] } } } }
通過以上的步驟,我們即可實現投影式的陰影生成方法。與第一種方法一樣,可以設定一些特定腳本來控制該陰影的移動以及變化等等。另外,需要注意的一點是“Ignore Layers”選項的設定,原則上是盡量去掉那些不需要被投影的層,從而來減少不必要的計算量。
上述兩種方法是目前移動平臺上的主流陰影生成方法,優點是生成簡單,使用方便、計算量較小,但缺點同樣突出,即該陰影是假的,并不是真的物體投射陰影,所以真實感并不強。下面我就介紹兩種目前可以在移動平臺上使用的實時動態陰影生成方法,不過在這篇中我們只介紹陰影效果,并不介紹具體的實現技術和生成方法,留待以后高級教程中講解。
3、 Shadow Map方法
雖然Unity目前并不支持在移動設備上生成動態陰影,但同樣可以通過RenderTexture來生成簡單的Shadow Map,效果圖如下所示:
我們看到所生成的陰影存在鋸齒,這是由于Shadow Map分辨率不夠所致,你可以通過增加RenderTexture的分辨率來減少鋸齒的影響,如下圖所示,當然這樣做的同時也會帶來一定的渲染消耗。
4、 環境遮擋方法
該方法取自于游戲《Shadow Gun》,通過分析物體的近似環境遮擋信息來實時生成動態陰影,效果如下圖所示:
其生成方法大致為如下三步:
首先在角色腳底生成一個顯示陰影的網格。
其次,根據分別在角色的跨步以及兩腿處生成三個圓球,通過這三個圓球來計算底面的環境遮擋(Ambient Occlusion)信息。
最后,根據計算所得AO信息來動態細分網格,這樣就可以生成最終的AO陰影。
看完了這篇文章,相信你對“Unity3D如何實現移動平臺上的角色陰影”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。