読者です 読者をやめる 読者になる 読者になる

妹でもわかるUnrealEngine4

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

ポストプロセスマテリアルで中心以外をぼかす(7) ラジアルブラーでぼかす

f:id:una_unagi:20170328230225p:plain

「海外フォーラムでラジアルブラーという、中心から広がるようなボカシ方の、カスタムマテリアルを見つけたから、今日はそれを試してみた。中心からだんだんボケていくというのは、こっちのイメージが近いんじゃないかと思って」

妹「それはいいと思うけど、なんかカクカクしてるね」

「これもある程度ピクセル数を省くために、飛び飛びで調べてるから、どうしてもそのぶん粗さはある。あとそもそもこのマップがよくなかったなと。元がカクカクしすぎてる」

妹「それはたしかに」

元の投稿
forums.unrealengine.com

f:id:una_unagi:20170328230708p:plain

「こんな感じでやってるんだけど、ちょっと前の投稿だから、今のバージョンだと正常に動作しない箇所があったので少し手直しをしてある」

UE4.15対応版
f:id:una_unagi:20170328230908p:plain

float2 ScreenMult = View.ViewSizeAndSceneTexelSize.xy / View.RenderTargetSize;
int TexIndex = 14;
float samples[10] = {-0.08,-0.05,-0.03,-0.02,-0.01,0.01,0.02,0.03,0.05,0.08};
float2 dir = ScreenMult * float2(0.5,0.5) - UV;
float4 sum = SceneTextureLookup(UV, TexIndex, false);
float2 pos = float2(0.0,0.0);
for(int i = 0; i<10; i++)
{
    pos = UV + dir * samples[i] * sampleDist;
    max(min(pos, ScreenMult * float2(1.0, 1.0)), float2(0.0,0.0));
    sum += SceneTextureLookup(pos, TexIndex, false);
}
sum *= 1.0/11.0;
return sum;

「主な変更点は、ScreenMultを計算していた部分を削除して、外部からピンをつなぐようにしたこと。ここは書き方がかわってるんだけど、新しい書き方がわからなかったから、ノードで計算してからつないでる。あとはTexピンは一昨日書いた理由で入ってるダミーだから削除した」

妹「このプログラムなんか色ついてるんだけど」

「見やすいようにした。ブログの機能で、プログラム的の変数とか関数とかを自動的に違う色で表示してくれる。java用の設定だから微妙に塗れてない場所もあるけど。編集に使うメモ帳みたいなやつも、プログラマ用のは色分けに対応してる。色ついてないと読むのに余計時間かかるから」

妹「そういうって色は勝手につくの?」

「HLSLモードとか最初に設定したらあとは勝手につく。書き直すたびに文法チェックしてるから、誤植とかあるとその前後も含めて変な色になったりするけど。UE4のプロパティ欄で直接書くより、そういうので書いた方がわかりやすいし、使いやすくもある」

f:id:una_unagi:20170328232603p:plain

「パラメータ調整をして真ん中だけ写るようにしたやつ……なんだけど、どうも写真うつりが悪いというか、動いてるのを見るともう少しまともに見えるんだけど。動画にした方がいいかも」