日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity3D游戏制作 移动平台上的角色阴影制作

發布時間:2024/8/26 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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陰影。
    ?


    小結

    綜上所述,本文已經給出了移動平臺上角色陰影的兩種基本渲染方法及其Shader實現,在這里我并沒有去分析每種渲染效果的原理,而僅是從實際出發,直接給出對應的簡單實現方法。如果想要對陰影的生成方法進行深入理解,可以Google搜索其原理進行了解。對于后兩種真實的動態陰影生成方法,我將在后續的blog中進行詳細更新。

    總結

    以上是生活随笔為你收集整理的Unity3D游戏制作 移动平台上的角色阴影制作的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。