【Unity】なんか影が出ない問題の対策
サンプルを色々といじっていた所、どうも影が出なくなる現象に当たったので、その原因と対策についてココに書いておきます。
影が出ない
光あるところに闇があり。影は基本的に光を遮った所に存在し、逆を言えば光があれば影が出来ることを期待出来ます。
ただし幾つかの設定によって、光を配置したのに影が出ないという事があります。
影は基本的に重い処理の一つであり、多くの影を無効化する設定が存在します。この影を無効化にする設定を間違えてONにしてしまう事は意外と存在し、その辺り知らないと影が出ないと困ることになります。
”影”を無効化する設定
この記事に辿り着くであろう人にまず見て欲しい項目は、Quality Settings(メニューアイテム > Edit > ProjectSettings > Quality Settings)です。
このShadowsの項目がDisable Shadowsになっていると影が表示されません。
ShadowsをHard And Soft Shadowsにします。
こんな所触ったこと無い? その場合は、もしかしたら2Dでプロジェクトを作ってしまったのかもしれません。最近Unityのプロジェクトを作成する際に2Dを指定すると、この項目やLightmapの設定が全てOFFになります。
なおScriptable Render Pipelineを利用している場合、この設定が無視される可能性があります。SRPのライト設定は別の場所にあるかもしれません。ScriptableObjectとか。
下の画像はLightweight RenderPipelineの設定ファイルです。影の項目がコチラに移動しています。
光が影を出していない
次点で意外とあるのが、光が影を出していない事です。
凄く単純で、Lightの設定のShadow TypeがNo Shadowsになっていると影が出ません。
影を出したいなら、Hard ShadowかSoft Shadow辺りを設定する必要があります。
GameObjectメニューから作成するLightの初期設定はNo Shadowなので、影がほしければShadow Typeを設定します。
Lightmap Staticが付いていない(オブジェクトのStaticフラグがOFF)オブジェクトに影がかかるのは、RealtimeかMixedのライトのみです。
また、HD Render Pipelineは設定項目が大きく違うので注意が必要です。
物質が光を遮らない
Shadowの設定が有効で、かつ光が影を発生させる設定になっている場合、オブジェクトが光を遮らない設定になっているかもしれません。
例えばTransparentなどのシェーダーは光を遮らない設定になっています。
シェーダーが光を遮るのか遮らないのかは、Edit Shaderで表示されるビューで確認できます。Cast Shadowsがnoなら遮らないし、onなら遮ります。
またRendererのCastshadowがOFFの場合も、影を遮りません。
SceneViewの設定
Shadowの設定でもLightの設定でも物質の設定でも無い場合、実はSceneViewで設定色々いじった結果なってた的なケースがあります。
SceneViewの上の方の太陽トグルが外れていると、光が出ません。
それでも駄目なら
エディター再起動したら治ることがあります。