トップ 一覧 検索 ヘルプ 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ウィンドウ内の影を落としたい形状にドラッグ。
{{ref_image unity_projector_shadow_01.png}}
ここではCylinderに影を与えます。
 Cylinder
   Blob Shadow Projector
のようにツリー表示されています。
ここで「Blob Shadow Projector」を選択して、移動/回転で円すい状の位置を調整します。
!パラメータを調整
「Blob Shadow Projector」を選択したときのInspectorウィンドウのProjectorでパラメータを調整します。
{{ref_image unity_projector_shadow_02.png}}
影が対象形状にかぶっている場合は「Near Clip Plane」「Far Clip Plane」を調整して位置あわせします。Far Clip Planeの距離だけ離れていくと影はだんだん薄くなります。
「Field Of View」は円すいの角度になります。
Materialを好きなものに変更することで、影の形を変えることができます。

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

!!影を薄くする
影の表現は「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」で自動的にアルファを調整します。

この際のテクスチャのパラメータは以下。
{{ref_image unity_projection_shadow.png}}
Texture Typeを「Advanced」にして、Alpha From GraysをOn、Border MipmapsをOn、Mipmap FilteringをKaiser、Wrap ModeをClampにしてApplyボタンを押します。

以下のように、矩形の影を置くことができました。
{{ref_image unity_projection_shadow_2.png}}
----
{{lastmodified}}