Matcapなんてバカ正直にPhotoShopで球体塗らんでもええんやで(・ω・)適当に球置いてライトばかすか置いてSS撮ったら完成やで pic.twitter.com/mAoXbl2GTy
— ntny (@nD_ntny) 2016年7月1日
成る程、そんな手が…!?
あれ、Unity内で出来るなら動的に云々出来るんじゃね?
という事でやってみました。どの程度有益かは知りません。
Matcapテクスチャを動的に作る
まずはMatcapのテクスチャを動的に作成します。大体こんな感じの画面になります。
動的にテクスチャを作成しているので、ある程度の環境マップやライトの変化にも耐えられそうです。
また、同一の材質・ライト表現ならば、各モデルが各々計算するのではなく一括で流し込むような事も出来るかもしれません(それが安いかどうかは不明)
正面に配置した美顔ライト、ハイライト強調用の背面ライト等を駆使して、何か良い感じにします。
なお、動的に作るフローには、RenderTextureを使用します。
手順
- Matcap撮影用のレイヤーを用意します
- Matcap撮影用のカメラを用意します。カメラの設定は、Culling Modeに先ほど作成したMatcap専用レイヤー、Projection設定はOrthographic、sizeは0.5です。
- Matcap撮影用カメラの1メートル先にSphereを配置します。このSphereのレイヤーはMatcap専用レイヤーです。
- ライトをいい感じに配置します。Forwardレンダリングの場合はライト数に制限があるので、Deferredを使用したいですが、OrthographicではDeferredが使えないのでポイントライトの使用制限を緩和することで対処します。
詳細はライトを複数置いた時の問題 - テラシュールブログ - このままだとSkyboxの影響を受けます。Skyboxの影響を受けたくないのであれば、SphereにReflectionProbeを設定します。その際、ReflectionProbeには何も映らないように設定します。
- 最後にmatcapを撮影しているカメラにRenderTextureを設定します
- 後は作成したRenderTextureをMatcapに設定すればOKです。
感想
色々とツッコミどころがありますが、動的にある程度のライト表現を一括で処理出来るかもしれないので、もしかしたらStandardShaderで全シェーダーの計算を行うよりも、ステージにmatcap用スフィアを1つ置いて撮影するほうが、低コストに出来るのかもしれません。
とりあえず試した感じ「あ、意外と簡単に出来た」という事で。なお、ライトを照らして綺麗なMatcapを作れるかどうかは、また別問題です。
普通に考えてPhotoshopで云々した方が良いんじゃないかな感はあります。前段階としUnityや他のDCC(Digital Content Creation)ツールで作っちゃうのはアリそうですが。