82
62

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

UnityAdvent Calendar 2018

Day 22

Unityでの水彩画風ポストエフェクト

Last updated at Posted at 2018-12-22

今回以下のアドベントカレンダーにも投稿しました

・ARKit Advent Calendar 2018:UnityとARkitで電脳コ◯ルなアプリを作った話
https://qiita.com/awesome/items/5b8ee2b62c0076fbc569

以前Twitterで話題になっていた、UE4による水彩画風ポストエフェクト

を、Unityで作ってみました。

以下ツイッターに投稿した動画

■OnRenderImageを使う。

引数としてレンダリングされた結果をRenderTextureとしてもらえるので、それに対してシェーダーでフィルターをかけることでエフェクトをかけることができる。
OnRenderImage関数内で

Graphics.Blit(renderTarget1, renderTarget2, uvShiftMaterial);

とすることでレンダーターゲットにシェーダーを割り当てることができます。

引数に渡すrenderTargetとマテリアルを何個かあらかじめ作成しておき、
何度も何度も反復してマテリアルとrenderTargetを差し替えていくことで絵を作っていきます。
必要であれば、その間3Dモデルのマテリアルも差し替えます。

版画で色を重ねていくような作業ですね!

1.ベースとなるレンダリング結果

UnityのStandardShaderと、アウトライン用のマテリアルでアウトラインをノーマル方向に押し出した状態。

2-1.アウトラインのみのレンダリング結果

一部のマテリアルを差し替えてアウトラインのみを抽出した状態。

2-2アウトラインにノイズフィルターをかけたレンダリング結果

先ほどのアウトラインのレンダリング結果に、 ・ノイズテクスチャでマスク ・ノーマルマップで歪み を加えた。

以下フラグメントシェーダーの記述です

//ノーマルマップで歪ませる

float4 n = tex2D(_ShiftNormalTex, i.uv * 4. ); //4は歪みのサイズ
float4 col = tex2D(_MainTex, i.uv + n.xy * 0.03 ); //0.03はstrength
スクリーンショット 2018-12-22 19.11.58.png

3.ディフューズのレンダリング結果

ディフューズに色をつけただけのもの。

4.テクスチャカラーのみのレンダリング結果

テクスチャカラーのみをレンダリングしたもの。

5.ハイライトのみのレンダリング結果

ハイライトのみをレンダリングしたもの。

6.影のマスクのみのレンダリング結果

影をレンダリング後、ノイズを加えたもの。 スクリーンショット 2018-12-22 19.14.16.png

1〜6全てを合成したレンダリング結果

アウトライン+ディフューズ+カラー+ハイライト+シャドウ
を全て合成した結果です。
例えるならば、雰囲気的にはPhotoshopのレイヤーモードを変更したり、フィルターをかけたり・・・というふうに合成していく感じです。

最後に

体調悪くて雑な記事になってしまいすみません・・・

82
62
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
82
62

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?