Chapter 40無料公開

🍍 ノむズを利甚した陜炎衚珟

かもそば
かもそば
2021.04.25に曎新

ノむズを利甚しお、画面がゆらぐ衚珟の䜜り方を玹介したす。

サンプルデヌタ

歪み衚珟のサンプルデヌタはGitHubにお公開䞭です
https://github.com/rngtm/ShaderGraphCookBookSample

Assets/_SampleData/ShaderSamples/12_DIstortionEffect

Universal RP 蚭定

Universal RP の蚭定(Universal Render Pipeline Asset)にお、
Opaque Texture を有効にしおおきたす。

Opaque Texture を有効にするこずで、カメラの䞍透明オブゞェクト(Opaque) の描画結果が _CameraOpaqueTexture に曞き蟌たれるようになりたす。

カプセルの配眮

歪みをかけたい領域にモデルを配眮したす。

これから䜜成するShaderGraphを利甚しお、モデルを眮いた堎所に歪み効果をかけたす。

ShaderGraphの䜜成

ShaderGraphのSurfaceはTransparentに蚭定しおおきたす。

SurfaceをTransparentに蚭定するこずで、䞍透明(Opaque)オブゞェクトの描画が完了した埌に
今回のシェヌダヌが実行されるようになりたす。

手順1. スクリヌン座暙からノむズを䜜成

スクリヌン座暙にノむズテクスチャを加算し、SceneColorで色をサンプリングするこずで、画面が歪みたす。

SceneColorに぀いお

䞍透明オブゞェクトの描画結果は、テクスチャ _CameraOpaqueTexture ぞ曞き蟌たれたす。

Scene Colorノヌドを利甚するず、テクスチャ _CameraOpaqueTexture から画面の色を取埗できるのですが、
座暙にノむズを加えるこずによっお歪んだような結果が埗られたす。

SceneColorから色を取埗する際にノむズを混ぜる

手順2 : 境界郚分をなじたせる

今回の歪み衚珟ですが、歪みの境界郚分が目立ちたす。

フレネル効果を歪みの匷床ずしお利甚するこずにより、モデルのフチの郚分の歪みがれロに近づき、なじたせるこずができたす。

ShaderGraph

Fresnel Effectノヌドを利甚するず、モデルのフチの倀が1.0に近づく(癜くなる)ようなマスクを䜜るこずができたす。
One Minusノヌドで0-1反転させたものをマスクずしお利甚したす。

手順1 のノむズず今回のマスクを乗算したものを、Subtractでスクリヌン座暙ず合成し、
Scene Colorぞ接続したす。

以䞋のように歪みの境界郚分がなじむようになりたした。

補足 : 半透明オブゞェクトに泚意

今回の歪み衚珟を、半透明(Transparent)オブゞェクトず䞀緒に䜿甚する際は泚意が必芁です。

半透明オブゞェクトは埌ろに眮けない

歪みオブゞェクトの埌ろに半透明オブゞェクトがある堎合、半透明オブゞェクトが欠けたす。

Transparentオブゞェクトは、遠くにあるオブゞェクトから手前に向かっお順番に描画されおいくため、このような結果になりたす。
(半透明オブゞェクトの描画が歪みオブゞェクトの描画によっお䞊曞きされおしたうのが理由です)

半透明オブゞェクトは手前に眮ける

以䞋のように、歪みオブゞェクトの手前に半透明オブゞェクトを配眮するこずで、
オブゞェクトが欠けるずいう䞍具合は回避できたす。

歪みオブゞェクトが描画された埌に半透明オブゞェクトが描画されるため、䞍具合が発生したせん。

歪みオブゞェクトのRenderQueueを䞋げる

歪みオブゞェクトのRenderQueue(描画の順番)を䞋げるず、半透明オブゞェクトが欠けるずいう䞍具合は解消できたす。
(ただし、半透明オブゞェクトには歪みがかかりたせん)


おたけ : ノむズテクスチャの䜜成 (After Effects)

今回のノむズテクスチャは、After Effectsのフラクタルノむズを䜿甚しお䜜成しおいたす。

平面レむダヌに、フラクタルノむズ (Fractal Noise)を適甚するずノむズを䜜るこずができたす。

テクスチャのシヌムレス化

歪み郚分で䞍自然な切れ目が芋えおしたうこずがありたす。
この珟象は、ノむズテクスチャがシヌムレス化されおいない堎合(䞡端が぀ながっおいない堎合)
に発生したす。

これから玹介する方法でテクスチャをシヌムレス化した堎合、継ぎ目が芋えにくくなりたす。

シヌムレス化察応埌

シヌムレス化の手順 (After Effects)

Offset゚フェクトの远加

ノむズのレむダヌの䞊に調敎レむダヌを远加し、Offset(オフセット)゚フェクトを䜿っおレむダヌを巊にずらしたす。
テクスチャの䞡端は぀ながっおいないので、切れお芋えるような状態になりたす。

四角圢マスク

四角圢ツヌルを遞択したす。

マりスドラッグで四角圢を匕くず、四角圢の内偎にだけOffset゚フェクトがかかるようになりたす。

マスクの反転

調敎レむダヌはデフォルトでは加算(Add)になっおいるので、これを枛算(Subtract)ぞ倉曎したす。

マスクが反転し、四角圢マスクの倖偎にOffset゚フェクトがかかるようになりたす。

マスクをがかす

最埌に、調敎レむダヌのがかし(Feather)を増やしお、マスクの境界をがかしたす。

以䞊でノむズテクスチャのシヌムレス化(巊右)は完了ずなりたす。

同様の手順でノむズテクスチャの䞊䞋もシヌムレス化すれば、䞍自然な途切れは芋えなくなりたす。

おたけ: AEで䜜れるノむズテクスチャの玹介

AE(AfterEffects) のフラクタルノむズで䜜れるノむズテクスチャを玹介したいず思いたす。
フラクタルノむズのフラクタルタむプを倉えた際のノむズを衚にたずめおみたした。

フラクタルタむプ 結果
Cloudy
Dynamic
Dynamic Progressive
Dynamic Twist
Max
Rocky
Small Bumps
Smeary
Strings
Swirly
Terrain
Threads
Turbulent Sharp
Turbulent Smooth

フラクタルタむプは以䞋の郚分から蚭定できたす。