読者です 読者をやめる 読者になる 読者になる

テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】Matcap、事前に用意した綺麗な光表現を利用する

f:id:tsubaki_t1:20160630015515j:plain

今回はMatcapについて紹介しようと思います。

Matcapって何?

matcapとは、事前にレンダリングした画像を使用してライト表現を行う手法です。

この手法では、材質と光を表現した球の絵を使用して擬似的にライティングを行います。つまり、ライティングの処理を行わず(事前計算して)ライティングの表現を行える訳です。多分

f:id:tsubaki_t1:20160630020342j:plain

表現の調整が直感的で楽

通常、物体の色や光沢は「光を受けた結果」表現されます。そのため、本当にライティングを行いたい場合、ライトを複数置いたり間接光を調整するといった事を考える必要があります。

対してMatcapは、ライトを受けた結果の「絵」を元に光沢や影を表現します。例えば下の絵のような感じです。そのため、PhotoshopGimp等のツールで光の陰影を調整し、結果をモデルに適応出来ます。

f:id:tsubaki_t1:20160630022429j:plain

光の表現は、球体を基本として傾きを計算、再現を行っています。下の絵のように並べてみると、左の球体の一部と右の角度の結果が概ね一致しているのが分かります。

f:id:tsubaki_t1:20160630020940j:plain

また金属や光沢のある物を表現する場合、下手にPBRで焼くより「綺麗に見える」かもしれません。

f:id:tsubaki_t1:20160630025908j:plain

ちなみにBakeでライトを焼いた場合、ReflectionProbeが無いとメタリックはメタリックぽく無くなります。ライトを焼いた時に妙にマットになった場合、ReflectionProbeを設定します。

f:id:tsubaki_t1:20160630030403j:plain

バイルでも動作する

matcap、実は割と軽いです。光沢や陰影を綺麗に表現したい場合、沢山のライトやReflection(Cubemap)を使用する必要があるのですが、この手法だとテクスチャ1枚読んでシェーダーで変換かけるだけで済みます。
また、ライティングを使わずに光表現ができるので、ライティングに掛かっていたコストをまるっと削れます。(ダイナミックに影を付けたい場合はまた話は別)

ダイナミックなライティング?PBR?なにそれ美味しいの?

 Matcapの最大の問題は、ライティングの影響を受けない事です。影の描画をテクスチャから受けるので当然といえば当然なのですが。
例えば下のように、赤い感じの部屋ではPBRで設定すると部屋に馴染む感じで描画出来ますが、Matcapでは以前同様に銀色となり、浮いています。

当然、PBRによるライティング的に破綻のない絵など出来ません。

f:id:tsubaki_t1:20160630031025j:plain

とはいえ、裏を返せば「ポイントライトやライトを使用せず、思った通りの絵を表現出来る」という事です。


特にモバイルでポイントライトは無理だし、キャラクターが背景に必ずしも溶け込んでいる必要もないので、その辺りのデメリットは場合によっては無視できるかもしれません。PBRによるリアルな絵作りが必ずしも欲しい絵では無いので、その辺りは取捨選択の所です。

 

なお、稀に「ライティングの影響を受けるMatcap」なる物もあります。例えばMatcapFXはLightの影響を受けます。
これらの手法を利用した場合、材質の美しさはかなり失われます。ケースバイケースでもありますが、下のように水晶に光を当てた際、期待していた表現と異なると思います。
一応、MatcapFXでは「どの程度Matcapを使用するか」的なパラメータを調整する事で、多少違和感のない表現を可能にしています。

f:id:tsubaki_t1:20160702152939j:plain

視点はある程度固定が前提

matcapにはもう一つ問題があります。それは「どの向きから見てもライティングの結果が同一である」という事です。

通常ライトは特定の方角から照らされている為、光を背負うような形にすると逆光になります。しかしmatcapは1面のライティング情報しか保持していないため、どこから見ても常にライティングは同じになってしまいます。イメージ的には、カメラマンの背中に常にライトが付いてくるような感じ。

f:id:tsubaki_t1:20160630032441j:plain

ただ、セルルックなキャラクターに美顔ライト(顔に陰影が入らないようにするライト)を設定したい場合や、キャラクターを周囲から見渡さない・視点が固定のゲームでは、この点も余り気にならないかもしれません。

角度がある程度固定なら、角度ごとにmatcapなテクスチャを用意するって手もあるかもしれませんし。それ何てCubemap

 

 

UnityでMatcapを使用する

ではUnityでMatcapを使用する方法についてです。
Shaderを自分で書いても良いかもしれませんが、面倒くさいのでフリーのアセットを使用します。既存品最高

アセットのダウンロード・インポート

Matcapのシェーダーは幾つかありますが、今回はFree Matcap Shadersを使用します。色々と使った感じ、自分にはコレが一番合ってます。

f:id:tsubaki_t1:20160630033205j:plain

 

インポートすると、JMO Assetsというフォルダがインポートされます。サンプルプロジェクトは JMO Assets > Matcap Shaders > Demoに有ります。

f:id:tsubaki_t1:20160630033659j:plain

実際に使ってみる

まずマテリアルを用意します。「Create > Material」

次に、MaterialのシェーダーをMatcap対応の物にします。Matcap 以下に幾つかシェーダーがあるので、その内のどれかを使います。

f:id:tsubaki_t1:20160630034541j:plain

  • Matcap > Bumped > Plain
    ノーマルと材質の色とMatcap
  • Matcap > Bumped > Textured add
    ノーマルとテクスチャとMatcap(加算)
  • Matcap > Bumped > Texture Multiply
    ノーマルとテクスチャとMatcap(合成)
  • Matcap > Vertex > Plain
    色とMatcap
  • Matcap > Vertex > Plain Additive
    色とMatcap(加算)。アウトラインのみとか出来る
  • Matcap > Vertex > Plain Additive Z
    色とMatcap(加算)Zも書き込む

    f:id:tsubaki_t1:20160630035505j:plain

  • Matcap > Vertex > Texture Add
    TextureとMatcap(加算)
  • Matcap > Vertex > Texture Lit
    TextureとMatcap。色の調整も出来る
  • Matcap > Vertex > Texture Multiple
    TextureとMatcap(合成)

f:id:tsubaki_t1:20160630041332j:plain

後はシェーダーにテクスチャを設定します。Baseはテクスチャの色、MatcapはMatcapの画像、Bumpmapはノーマルマップを設定します。
色は場合によってはR128,G128,B128が良いかもしれません。

Matcapのサンプルは、ZBrashについての情報やその他諸々を参考にします。

個人的には、光沢のある物は色々と物が写っていた方が綺麗になる印象です。MatcapはRepository | 淡波ログさんのページで幾つか公開されているので、使ってみると面白いかもしれません。自作も楽(らしい)ですし。

f:id:tsubaki_t1:20160630035819j:plain

後は作成したマテリアルをオブジェクトに設定します。
場合によってはRecieve ShadowやCastShadowの項目はOFFにしても良いかもしれません。少なくともRecieve Shadowは使わないはずなので。

f:id:tsubaki_t1:20160630044322j:plain

その他

その他Matcapで調べていると肌を表現するシェーダーもありました。
サブサーフェイススキャタリングのような、光が半透明な物体の表面を透過し、内部で散乱した後に表面から出て行くメカニズム*1を擬似的に再現出来たりするみたいです。

これもモバイルで動きます。

f:id:tsubaki_t1:20160630041125j:plain

上の絵はFast Fake Skinを使用

関連

Metasequoia 4.5の新機能:Matcap表示 | metaseq.net

cgchips.com

sakana0147.blog53.fc2.com

ゲームは初心者にやさしく: 【一見の価値あり】高品質なシェーダパックが登場

*1:サブサーフェイス・スキャタリング - Wikipedia