Unityシェーダーチュートリアル  不必要なブルームを抑える

シェーダー

皆さん、「ブルーム(Bloom)」は好きですか?

画にインパクトが欲しい時や、リアルな光感を出したい時にはブルームが効果的です。

 

Unity Asset Store から「Post Processing Stack」をダウンロードすれば、

簡単にブルーム効果を追加できます。

 

が、しかし・・・何も考えずに適当に設定してしまうと、

スペキュラーエイリアシング的に、パチパチとした想定外のブルームが頻繁に発生します。

Unity シェーダ― ブルーム

ただの皮手袋なのにパチパチしてほしくありません。

今回はこの不必要なブルームを簡単に除去する方法を紹介します。

 

 

 Standardライティングモデルのコードを改造する

 デフォルトのシェーダ―ファイルを変更する

以下のディレクトリを見てください。

[Unityインストールディレクトリ / Editor / Data / CGIncludes]

 

数十個のシェーダーファイルの中に、UnityPBSLighting.cginc というファイルがあります。

この中身を少し変更するだけで簡単に不必要なブルームが無くなります。

 

インストールフォルダのファイルを直接変更すれば、デフォルトの Standardシェーダ―や、

Standard Lighting を利用したカスタムシェーダ―に効果が現れます。

(同バージョンの Unity を使ったすべてのプロジェクトに影響が出るのでお勧めしない)

 

各プロジェクトのシェーダ―フォルダにインポートして変更すれば、

Standard Lighting を利用したカスタムシェーダ―のみに効果が現れます。

 

 

 出力に制限をかける

設定次第ですが大体の場合において、ブルームと言うのは「かなり明るいところ」に発生するので、

「かなり明るくならない」ように、最終出力に制限をかければ良いのです。

 

UnityPBSLighting.cginc の90行目あたりにこんな記述があります。

(Unityのバージョンによって多少違いがあるかもしれません)


return c;

 

あやしいですね。いろいろ計算した後、最終的に出力しているっぽくないですか?

ここを以下のようにします。


return min(1, c);

 

こうすることで、「かなり明るいところ」だったとしても、

強制的に「ただの白いところ(明るくない)」になります。

 

あとは、1より大きい数値でブルームが発生するように、

ポストプロセスのパラメーターを調整すれば良いのです。

 

「1より大きいかなり明るいところ」を作りだす際には、Standard シェーダーの Emission もしくは、

自作の Vertex/Fragment Shader を使えば良いでしょう。

 

 

 LDRの場合

画作りの設定が HDR ではなく LDR の場合は、0.95 あたりで制限をかけて、

1でブルームが発生するように調整すれば同じような事ができます。

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)