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

妹でもわかるUnrealEngine4

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

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

マテリアルによるトゥーンアウトライン研究(3) SceneTextureノードの色々

f:id:una_unagi:20170321231804p:plain
SceneTexture:SceneDepth(を6000で割った物)

「ポストプロセスマテリアルの中では、色以外の情報も色々操作できる。だいたいSceneTextureというノード経由で、各ピクセルごとの情報を調べることが出来る。あんまり使わなそうなのもあるけど、上の画像は、その場所に表示されてる物体までの距離をそのままエミッシブカラーとして出力したもの。深度情報ともいう」

妹「その絵はなんかカッコイイかもしれない」

「距離が近いほど数字が0に近い=黒っぽい色になる。逆に遠くにいくと白くなる。距離の単位がよくわかってないんだけど、多分普通のUE4の計測単位で、1=1cmのやつだと思う。何にしても適当な数字で割って表示しないと、1cm以上の距離があるものを白にしちゃうと、画面全体が真っ白になってしまう」

妹「6000で割るのがいいの?」

「6000というのは、サンプルのマテリアルの中で使ってる数字を流用したんだけど、これはマップの寸法とか、見える範囲とか、あとエフェクトの都合とかで変えるものだと思う」

f:id:una_unagi:20170321232734p:plain

「他にも、各ピクセルごとの法線情報とか、光が当たる前のベースカラーとか、色々おもしろい物が取れるけど、輪郭線で特に関係しそうなのがさっきの深度情報。SceneTextureは、UVs入力に何もつないでない時は、デフォルトで現在担当中のピクセルのデータを返すけど、隣のピクセルの情報とかも調べられる。これを利用して、隣のピクセルとの深度差がデカい場所を黒いピクセルにするというのが、輪郭線処理の基本」

妹「深度差があると輪郭ができる? わかるようなわからないような」

「さっきの深度の画像でいう、色が違うところが深度差があるという結果が出る。たとえば黒い木と白い空の境目とか。ただ曲面とか斜めになってたりってこともあるから、ちょっとぐらいの違いなら無視して線を出さないようにとか、逆に深度差ないけどここは線が欲しいとか、そのへんは工夫が必要。好みの問題もかなりある部分」