今回以下のアドベントカレンダーにも投稿しました
・ARKit Advent Calendar 2018:UnityとARkitで電脳コ◯ルなアプリを作った話
https://qiita.com/awesome/items/5b8ee2b62c0076fbc569
以前Twitterで話題になっていた、UE4による水彩画風ポストエフェクト
以下ツイッターに投稿した動画
■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
3.ディフューズのレンダリング結果
ディフューズに色をつけただけのもの。4.テクスチャカラーのみのレンダリング結果
テクスチャカラーのみをレンダリングしたもの。5.ハイライトのみのレンダリング結果
ハイライトのみをレンダリングしたもの。6.影のマスクのみのレンダリング結果
影をレンダリング後、ノイズを加えたもの。1〜6全てを合成したレンダリング結果
アウトライン+ディフューズ+カラー+ハイライト+シャドウ
を全て合成した結果です。
例えるならば、雰囲気的にはPhotoshopのレイヤーモードを変更したり、フィルターをかけたり・・・というふうに合成していく感じです。
最後に
体調悪くて雑な記事になってしまいすみません・・・