【Unity】【シェーダ】4種のアウトライン描画方法とその特徴

アウトラインの描画方法はいくつかのパターンがあります。
このブログでもいくつか紹介してきたので、この記事ではそれらの概要と特徴をまとめてみます。

概要

この記事では下記の4つの方法を順番に紹介していきます。

  1. モデルを拡大する方法
  2. モデルを拡大してステンシルバッファを使う方法
  3. ポストエフェクトで深度情報を使う方法
  4. ポストエフェクトで法線情報を使う方法

1. モデルを拡大する方法

元のモデルの前面をカリング&法線方向に拡大してアウトラインとする方法です。

f:id:halya_11:20180409232530p:plain

当ブログでは下記の記事で紹介しています。

light11.hatenadiary.com

特徴として、モデルが重なった部分もそれぞれのアウトラインが描画されるため、
例えば身体に重なった顎のラインなども描画されます。

また、ハードエッジのモデルでは法線を調整しないとうまくアウトラインが出ません。

レンダリングは2回行っているので処理負荷は相応にかかります。

2. モデルを拡大してステンシルバッファを使う方法

モデルを拡大するという点では1.と同様ですが、アウトライン部分をステンシルバッファにのみ書き込みます。
そして最後にポストエフェクトなどでアウトライン部分に色を付けます。

f:id:halya_11:20180513181714p:plain

下記の記事で紹介しています。

light11.hatenadiary.com

モデルが重なった部分のアウトラインを描画しない場合に使いやすい方法です。

また、アウトライン部分にテクスチャを使うことなどもできるので面白い表現が考えられます。

処理負荷はレンダリングを3回やっているので1.よりかかるケースが多そうです。

3. ポストエフェクトで深度情報を使う方法

カメラからの深度情報を使って、深度が急に変化する部分をアウトラインとみなす方法です。
次の記事で紹介しています。

light11.hatenadiary.com

この方法は描画対象のモデルのシェーダを変えなくていいというメリットがあります。

ただカメラから見た深度情報が必要なので生成する必要が出てきます。
他のポストエフェクトなどで深度情報をすでに使用している場合には効率よくアウトラインを描画できる方法であるといえそうです。

また特定のモデルにのみアウトラインをかけたい場合などには工夫が必要になってきそうです。

4. ポストエフェクトで法線情報を使う方法

これはこのブログで紹介していない方法となります。
法線と視点方向への単位ベクトルとの内積を求め、その値が急に変化する部分をアウトラインとみなします。

次の記事の背景のアウトラインの記述部分で詳しく説明されています。

西川善司の3Dゲームファンのための「GRAVITY DAZE」グラフィックス講座(後編) - GAME Watch

関連

light11.hatenadiary.com

light11.hatenadiary.com

light11.hatenadiary.com