LoginSignup
59
48

More than 3 years have passed since last update.

ドット絵のキャラクターに逆光を当ててみる

Last updated at Posted at 2019-08-27

前回の記事 の続きです。

こういうことをやりました

  • 前回記事で用意したSpriteRendererに 裏から光を当てて影を落とす
  • ボリュームライト を適用

SpriteRendererに裏から光を当てて影を落とす

 普通にライトの角度変えればいいんじゃないの?と思ってましたが

こっちは影が出るのに

こっちは出ない。。。

 これはどういうことかというと、カメラをSpriteRendererの後ろに回るとわかるのですが、裏面に表示用の面が無いため です。その結果、光を遮って影を作ることができることができていません。

Standardシェーダーに細工をする

 前回、もろもろの表現をするために、SpriteRendererにStandardシェーダーを適用しました。このStandardシェーダーは ポリゴンの面が無い方向には何も表示しない(カリング) という処理しているのですが、裏面にポリゴンの面がないSpriteRendererにおいてはそれだと都合が悪いです。

1. Starndardシェーダーをダウンロード

 そこで、カリング処理をしないStandardシェーダー を用意しましょう。StandardシェーダーはUnity組み込みのシェーダーで、普通は編集することはできません。Unity ダウンロード アーカイブ へアクセスし、今使っているUnityのバージョンから、ビルトインシェーダーをダウンロードしましょう。

image.png

 ダウンロードしたzipを展開し、フォルダ内から Standard.shader を見つけましょう。それをプロジェクト内にインポートしてください。

2. シェーダー名を変える

 インポートしたままだと、Unity内組み込みのStandardシェーダーと名前がバッティングしてややこしいです。ファイル名と、シェーダー名定義「StandardCullOff」とでも変えておきましょう。

image.png

StandardCullOff.shader
// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)

Shader "StandardCullOff" // ← ここがシェーダー名定義!
{
    Properties
    {
...

3.カリング処理をOFFにする

Shaderファイル内の54行目くらいの以下の場所に Cull Offと記述しましょう。

StandardCullOff.shader
    SubShader
    {
        Tags { "RenderType"="Opaque" "PerformanceChecks"="False" }
        LOD 300

        Cull Off // ← これを追加!

        // ------------------------------------------------------------------

4.シェーダーをマテリアルに設定

image.png

これで背面からの光でも影が出るようになります!

image.png

ボリュームライトを適用

 初回の記事でも触れましたが、ボリュームライトとは、本来見えない光の形が、霧やホコリによって見えることです。(参照)空間に奥行きを感じてリアリティが出て、リッチな印象を与えます。

 ボリュームライトの実現にはいくつか手段がありますが、今回はGitHubで公開されているVolumetric Lightsというアセットを利用します。

1. Volumetric Lightsをダウンロード

 GitHubのプロジェクトページ にアクセスし、Download ZIPをクリック。

2. 必要なファイルをプロジェクトにインポート

 フォルダごとプロジェクトにインポートしてもいいですが、最低限必要なのは以下のファイルと思われます。

  • Resources
  • Scripts
  • Shaders
  • Textures

適宜プロジェクト内に取り込みましょう。

3.コンポーネントを設定

  • Cameraに Volumetric Light Renderer
  • Lightに Volumetric Light

をアタッチして、シーンを実行するだけでOKです!ただし、Volumetric Lightのほうは、DirectionalSpot のタイプのライトでしか有効にならないとのことなので、ご注意を。

 

 光のシルエットが見えやすいように、光の通り道を部分的に作ったり、影のシルエットを意識したりするとその真価が発揮できる・・・かもしれません。
 このあたりコツを掴むのがやや難しいように感じたので、コンポーネントのパラメータの内容や、ライト・オブジェクトの配置の仕方について調べてみようと思います。

所感

 後ろから光が当たったときは、リムライト的な考え方でSpriteRendererのフチが明るくなるといいのですが、あくまで平面にノーマルマップを持たせたにすぎないので、今のところまだできていません。いよいよシェーダーをちゃんと触らないといけないかも…!
 今後はそのあたりと、Depth of Fieldを組み合わせて「オクトパストラベラー」や「The Last Night」っぽいジオラマシーンを作ってみようかなと思っています。

59
48
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
59
48