スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Unityシェーダ講座⑥(輪郭線の話)

すっげぇ久々になる今回。

トゥーンシェーダ関連での検索が割と多い(というか他にやってる人が少ないのでここに来るようになる)のでそれに関連したことをやっときます。

トゥーンではなく、それに関連したアウトラインの話。実はかなり大事な話なんでアウトラインを実装する場合には少なくともこれくらいの改造はしましょう。デフォルトのままだとみるに堪えないです。
アウトラインに関しては基本法線方向に伸ばして、反転カリングZ比較有Z書き込みなし黒で表示みたいな形。(アウトラインに関してはポストエフェクトでやるような方法もあるんですけれどモバイル機では実用に足るレベルではありません)なので独立頂点になっている部分に関しては頂点座標が分かれてしまうので頂点が分かれるので汚く見えちゃいしますね。あと、デフォルトシェーダでは法線方向に伸ばしすぎている感のあるのでその辺りも調整しちゃいましょう。そのほかの問題はZ精度の問題でアウトラインの黒ポリゴンと本体とで干渉する部分が結構出てくると思います。

Toony-BasicOutline.shader内で

v2f vert(appdata v) {
v2f o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
float3 norm = mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal);
float2 offset = TransformViewToProjection(norm.xy);
o.pos.xy += offset * o.pos.z * _Outline;
o.color = _OutlineColor;
return o;
}

float2 offset = TransformViewToProjection(norm.xy);

float2 offset = TransformViewToProjection(norm.xy) * 0.5;
この部分をこんな感じの修正で輪郭線は申し訳程度にしとくとポリゴンが分かれている部分も目立たなくなります。

o.pos.xy += offset * o.pos.z * _Outline;
の後で
o.pos.z += 0.001f;
とか適当な数値を入れてスクリーン後方に持って行ってしまいましょう。これで大分干渉は無くなるはずです。

めんどくさいので画像等載せてませんけど試してみるだけの価値はあるはずですよ。

ただし、アウトラインそのものも重いってのはあるけれども。

関連記事

コメントの投稿

非公開コメント

コード間違えてます。プロジェクションマトリクスをかけたあとの深度はzではなくwに入るので、opos.zではなくopos.wをかける必要があります。

プロフィール

masanotooru

Author:masanotooru
雪国で働くプログラマでしたが、会社を辞めて関西にいます。
プログラムの話もしますが漫画が好きなので漫画の話をします。
バイクを買ったので、そっちの話も増えました。
最近はUnityばかりなのでそっちメイン。

Google Adsense
検索フォーム
カテゴリ
最新コメント
メールフォーム

名前:
メール:
件名:
本文:

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。