原カバンは鞄のお店ではありません。

Unityを使ったゲーム制作のあれこれを綴っていきます。

【Unity】シンプルだけどお洒落な画面を作りたい:COLOR BOX Shader

長くなるのでいきなり本題

例えばMonument Valleyのような、ローポリでシンプルだけど凄くお洒落な画面を作りたい場合、非常に助けになるアセットが今回紹介する『Color Box - UV Free Unlit Color Gradient Shader』(以下、ColorBox)だと思います。

 

assetstore.unity.com

前回の記事でも紹介したのですが、このシェーダーではテクスチャを必要とせずに3Dモデルに色づけをすることができ、私もUnityroomで公開した『Geometry Drop』でこのシェーダーを使用しています。

 

f:id:Karvan:20190507220033g:plain

 

もちろん、3Dモデルに色をつけるだけなら標準のシェーダー(例えばStandardシェーダー)でもテクスチャ無しで色を指定することは可能です。

 

ですがその場合、3Dモデルの全ての面が一律で塗りつぶされ、シーン内の光源(ライト)の影響によってその濃淡が表現されます。

 

f:id:Karvan:20190521220321p:plain

Standardシェーダーで赤色を設定したCUBE

 

ColorBoxを使用すると光源の影響を受けることなく、自身の指定した濃淡での色づけが可能なため、単に赤一色だとしても3Dモデルをお洒落に表現することがきます。

 

f:id:Karvan:20190521220419p:plain

ColorBoxシェーダーで赤色を設定したCUBE

 

上の図では同じ赤色でも薄い赤を上面に、正面と左面にそれぞれ濃さの違う赤色を指定して、それをフラットに塗りつぶしています。

 

f:id:Karvan:20190521220634p:plain

ColorBoxシェーダーの設定

 

ここで注目してほしいのは「Gradient Space」という項目、これは色付けを行うための座標系を指定する項目です。

 

World座標系による色づけ

ColorBoxシェーダーでは色付けの座標系を

  • World:ワールド座標
  • Object:オブジェクト(のローカル)座標
  • Screen:スクリーン(からの見た目)座標
  • Camera:カメラを起点にした座標

から選んで指定することができます。

 

上記の設定の中ではGradient Spaceの項目がWorldになっています。

これは色付けの方向を「ワールド座標での右(X方向)、上(Y方向)、正面(Z方向)」を指定しています。


この場合、3Dモデルが回転しても色付けの方向は一定(変わらない)なので、その方向からライトを当てたかのような表現になります。

 

f:id:Karvan:20190521221345g:plain

 

上の動画の通り、回転しても色の位置は変わらず、上方向の面が明るい赤、左方向の面が暗い赤、になっていることが分かります。

 

もっと分かりやすくする為に、同じ赤色ではなく各面でそれぞれ違う色を指定した場合の動画も作ってみました。

 

f:id:Karvan:20190521221512g:plain

こんな感じ、World座標系指定を指定すると、3Dモデルの向きに関係なく色付けが行われることが分かります。

 

では、3Dモデル自体に色付けをしたい場合はどうするのでしょうか。

 

Object座標系を指定した場合

その場合は、Gradient Spaceに「Object」を指定します。

 

Object座標系を指定した場合は、対象となる3Dモデルを基準としたローカル座標での方向指定となるので、モデルの指定した面に色付けが固定されます

 

先程と同じ色指定でGradient Spaceの項目だけを「Object」に変更すると、

 

f:id:Karvan:20190521223004g:plain

こんな感じになります。


各面に指定した色が固定されるため、当然、3Dモデルが回転しても各面の色が変わることがありません。

 

f:id:Karvan:20190521223104p:plain

ColorBoxシェーダーの設定

 

Screen座標系を指定するケース

Screen座標系の指定は一見するとWorld座標系を指定した場合と大きく変わることが無いかもしれません。

 

ただ、複数の3Dモデルを並べて、それらを(スクリーン上)一律にグラデーションを掛けたい場合、この座標系指定が役に立ちます

 

具体的には奥行き方向に並んでいる3Dモデルに対して、手前の3Dモデルは明るく、奥にいくほど暗い色で表現したい場合、わざわざマテリアルを分けたり、色を変えたりすること無く、一つのマテリアルで実現することができます。

 

f:id:Karvan:20190521223416p:plain

 

こんな感じ。並んでいるオブジェクトは全て同じマテリアルを使用しています。

 

ColorBoxシェーダーの設定は以下のように行います。

上方向(Top Color)のグラデーション設定でStartで暗めの色、Endで明るめの色を指定しているのに注目してください。

 

f:id:Karvan:20190521223502p:plain

 

この他にも色んな機能がある

今回は色付け座標系の機能について紹介しましたが、ColorBoxシェーダーには他にも

  • 塗りつぶし方法を「単色」か「グラデーション」か指定可能
  • グラデーションの塗りつぶしの回転
  • グラデーション位置のコントロール
  • アウトラインの表示

等々の機能があり、一回の記事では紹介しきれません。

 

また、最初に「光源の影響を受けることなく」と書きましたが、Receive / Cast Shadowの指定やライトマップのサポートも可能なので使い勝手は非常に良いと思います。お洒落な画面作りにはもってこいですね。

 

あとは使う人間のセンス次第ということで・・・

 

◇プライバシーポリシー

●個人情報の利用目的

当ブログでは、メールでのお問い合わせ、メールマガジンへの登録などの際に、名前(ハンドルネーム)、メールアドレス等の個人情報をご登録いただく場合がございます。

これらの個人情報は質問に対する回答や必要な情報を電子メールなどをでご連絡する場合に利用させていただくものであり、個人情報をご提供いただく際の目的以外では利用いたしません。

●個人情報の第三者への開示

当サイトでは、個人情報は適切に管理し、以下に該当する場合を除いて第三者に開示することはありません。

・本人のご了解がある場合
・法令等への協力のため、開示が必要となる場合

個人情報の開示、訂正、追加、削除、利用停止
ご本人からの個人データの開示、訂正、追加、削除、利用停止のご希望の場合には、ご本人であることを確認させていただいた上、速やかに対応させていただきます。

アクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。

このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。

●免責事項

当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。

当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

●プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。

修正された最新のプライバシーポリシーは常に本ページにて開示されます。