ネットミーム
「ミーム」という言葉の意味が分からないけど周りの調子に合わせて分かった振りをしている長いものに巻かれた皆さんこんにちは。最近、知らない言葉が急に一般常識のように使われだす事が多くて世間のスピードについていけません。怖い、怖い。
アウトライン検出
例えば前回の記事で紹介した「Schim」もそうですが「Chants of Sennaar」や「Sable」のように、ここ最近のインディゲーム(主に海外)の中にはフォトリアルを目指すのではなく、色数を絞りエッジを強調してバンド・デシネのような絵作りでアピールするゲームが出てくるようになりました。
Sableのゲーム画面
Unityで上のようなビジュアルを実現するためにオブジェクトのアウトラインを検出・強調したい場合には主に二つの方法があります。
- オブジェクト側のシェーダでアウトラインを表示する
- カメラのエフェクト処理でアウトラインを表示する
このうち、オブジェクト側のシェーダで表現する手法はアウトラインを表示したいオブジェクトを限定できる、という利点はありますが、エッジの角度がきつい所謂ハードエッジの箇所ではどうしても線が途切れてしまう、カメラから見て線の太さが一定にならずアウトラインが汚く見える等の欠点があり、どちらかというとカメラエフェクトを使用した手法の方が多く利用されているように思います(私見)
とは言え、カメラのエフェクトを使う手法にもそこそこ欠点はあって、特にモデルが重なった部分のアウトラインを綺麗に表示するためにはアウトライン検出のパラメータの調整が必要となってきます。
Unityでのアウトライン検出の手法については以下の記事に詳しく書かれています。
MK Edge Detection - Screen Space Lines Shader
アウトライン検出用のアセットとしては比較的高額の部類ですが、それ相応の価値があるアセットを最近導入しました。
Built-InとURP,HDRPのいずれにも対応しており、Built-InとURPではPostPorcessing(PPSV2)と併用する方法とPPSV2を使わない方法を選ぶことが出来ます。
アウトラインの検出法については以下の3つが用意されており、各それぞれでパラメータ調整可能で全ての手法を適用する事もできますし、選択して組み合わせることもできます。
- Depth:カメラの深度バッファを利用してオブジェクトのシルエットを検出します。
- Normal:カメラの法線に基づいて内側のエッジを強調します。
- Scene Color:カメラのレンダリングされた画像に基づいてエッジが表示されます。
下の比較画像を見れば分かると思いますが、これらの検出法を組み合わせることで詳細なエッジが検出され、綺麗なアウトラインを描画する事が出来ています。
比較画像1
比較画像2
特に階段の箇所や、建物内部の細かい柱の箇所など、他のカメラエフェクトアセットではあまり綺麗に描けなかったような箇所でもアウトラインが綺麗に描かれていて驚嘆に値します。
導入手順
上記のようにこのアセットはBuilt-InとURP,HDRPのいずれにも対応していますが、今回は一番利用者が多いであろうBuilt-InでPostPorcessing(PPSV2)と併用するケースでの導入手順を説明したいと思います。
最初にPostPorcessing(PPSV2)を使うためにメインカメラにPostProcess Layerコンポーネントをアタッチ、Triggerにメインカメラを指定してLayerにPostProcess用のLayerを指定します。
次にシーン内に空のオブジェクトを生成して、オブジェクトのLayerにPostProcess Layerで指定したLayerを指定、そこにPostProcess Volumeコンポーネントをアタッチします。
PostProcess VolumeのInspectorから「Add effect...」ボタンを押し、「MK→MK Edge Detection」を選択します。
Mk Edge Detectionコンポーネントが追加されるのでここでパラメータの調整を行います。
アウトライン検出法
前述のようにこのアセットでは3つのアウトライン検出法が採用されています。
それぞれの検出法はInputDataの項目で採否を選択することが出来ます。
各検出法の効果を個別に検証するために下のモデルを利用します。
■Depthのみを適用した場合
オブジェクトの外観部分のエッジが検出されていることが分かります。
■Normalのみを適用した場合
各オブジェクトの形状が変化する部分のエッジが検出されています。
■Scene Colorのみを適用した場合
オブジェクト内で色合いの変化が大きい部分がエッジとして検出されています。
■全ての処理を適用した場合
半透明の箇所を除き、アウトラインとして欲しい部分が検出されているのがわかると思います。
エッジ検出専用で結構高額なんですがそれなりに有用なので個性的な絵作りには役立つアセットではないでしょうか。