トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

unity_projector_shadow

Projectorを使ったニセ影


Unity 2017/2018あたりではこれは削除されている。
代わりとして「影だけを受ける地面の配置」を参照。

Basic版のUnityでも、Projectorを使用することで円や指定のテクスチャを使ったニセ影を置くことができます。

ただし、数が増えるとDraw Callが呼ばれる数が増えます。あまり速くないです。

 手順

PackageのProjectorsをインポート

ProjectのAssetsを右クリックしてポップアップメニューより「Import Package」-「Projectors」を選択。

Blob Shadow Projectorを影を落としたい形状に割り当て

インポートしたAssets - Standard Assets - Projectorsの「Blob Shadow Projector」のPrefabを選択し、
Hierarchyウィンドウ内の影を落としたい形状にドラッグ。

ここではCylinderに影を与えます。

Cylinder
  Blob Shadow Projector

のようにツリー表示されています。
ここで「Blob Shadow Projector」を選択して、移動/回転で円すい状の位置を調整します。

パラメータを調整

「Blob Shadow Projector」を選択したときのInspectorウィンドウのProjectorでパラメータを調整します。

影が対象形状にかぶっている場合は「Near Clip Plane」「Far Clip Plane」を調整して位置あわせします。Far Clip Planeの距離だけ離れていくと影はだんだん薄くなります。
「Field Of View」は円すいの角度になります。
Materialを好きなものに変更することで、影の形を変えることができます。

後は、影を割り当てた形状を動かすと段差のある部分でも影が落ちます。
ただし、影のカリングはされずにズドンと突き抜けた感じになるため、Far Clip Planeをうまく調整してだんだん薄くなるように調整しましょう。


 影を薄くする

影の表現は「Projector Multiply.shader」で記述されています。
以下のように「_Transparent」のパラメータを追加して、「SetTexture [_ShadowTex]」の記述で

constantColor ([_Transparent], [_Transparent], [_Transparent], 0.0)
combine texture + constant, ONE - texture

のように置き換えるとTransparentの値が1.0に近づくにつれて影が薄くなるような表現になります。

Shader "Projector/Multiply" {
  Properties {
     _ShadowTex ("Cookie", 2D) = "gray" { TexGen ObjectLinear }
     _FalloffTex ("FallOff", 2D) = "white" { TexGen ObjectLinear   }
     _Transparent ("Transparent", Range(0, 1)) = 0.5
  }

  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] {
           constantColor ([_Transparent], [_Transparent], [_Transparent], 0.0)
           combine texture + constant, ONE - texture
           //combine texture, ONE - texture
           Matrix [_Projector]
        }
        SetTexture [_FalloffTex] {
           constantColor (1,1,1,0)
           combine previous lerp (texture) constant
           Matrix [_ProjectorClip]
        }
     }
  }
}

 独自の影テクスチャを割り当て

AssetとしてProjectorの影をインポートした直後は、マル影とグリッドのテクスチャしかありません。
ここに、背景を白/影部分を黒としたテクスチャを独自に割り当てることで、独自の影表現を行えます。
「Shadow Material」のCookieのテクスチャを入れ替えます。

影テクスチャは、PhotoShopなどで描くときはアルファを処理しなくてOKです。
後々Unity側の「Alpha From Grays」で自動的にアルファを調整します。

この際のテクスチャのパラメータは以下。

Texture Typeを「Advanced」にして、Alpha From GraysをOn、Border MipmapsをOn、Mipmap FilteringをKaiser、Wrap ModeをClampにしてApplyボタンを押します。

以下のように、矩形の影を置くことができました。


最終更新時間:2019年02月03日 21時32分16秒