프로그래밍/Unity

[Unity] 2D URP 화면 굴절 쉐이더 구현해보기

musiklo 2023. 12. 3. 22:43

완성 결과물 미리보기


사전 준비

  1. Background(바다 배경) 이미지와 Mask 역할을 해줄 이미지를 아래와 같이 생성합니다.

  2. Mask 이미지가 Background 이미지에 가려지지 않게, Sorting Layer를 지정합니다. (Add Sorting Layer를 통해 Mask 레이어를 추가해줍니다.)

  3. Settings/Renderer 2D의 Foremost Sorting Layer 설정을 변경해줍니다.


쉐이더 구성하기

우선 쉐이더를 구성하려면, 쉐이더를 먼저 생성해야 합니다. 아래와 같이 Shaders 폴더 안에 Sprite Unlit Shader Graph를 생성해줍니다.

Distortion Shader 구성하기

3D 환경에서는 아래와 같은 구성으로 Scene Color를 바로 사용할 수 있지만, 2D 환경에서는 불가능합니다.

❓ 2D 환경에서 Scene Color를 바로 사용하지 못하는 이유 ?

Scene Color_CameraOpaqueTexture라는 글로벌 변수를 사용합니다. 그런데 2D 환경에서는 해당 변수를 사용하지 못하는데, 그 이유는 Opaque(불투명)라는 변수 이름에서도 나타나는데 2D환경에서 사용되는 Sprite RendererColor에서 Alpha값을 0으로 변경하면 투명해지는 것을 확인할 수 있습니다. 즉, Sprite Renderer는 Opaque(불투명) 특성을 가진게 아니라, Transparent(투명) 특성을 가지고 있어 해당 글로벌 변수를 사용하지 못합니다.

3D 환경에서 Scene Color를 사용하는 방법

따라서 2D 환경에서 Scene Color를 사용하려면 _CameraSortingLayerTexture 라는 레퍼런스 변수를 사용해야 하기에 아래와 같이 Texture2D 변수를 선언 후 Reference명을 변경해주어 사용합니다.

2D 환경에서 Scene Color를 사용하는 방법

이후 Distortion Shader의 Sub Graph(Sub Graph명은 아무렇게 지정해도 상관없습니다.)를 생성하여 아래와 같이 구성해줍니다.

Sub Graph의 생성 및 구성이 완료 되었다면, Distortion Shader도 마무리 구성을 해줍니다.

모두 구성해주었다면, Save Asset을 해준 뒤 씬으로 돌아가 확인해보면 왜곡 효과가 적용된 모습을 확인할 수 있습니다.

 

 

참고 사이트

- https://www.youtube.com/watch?v=ltJ-D7wHEQQ&t=123s

'프로그래밍 > Unity' 카테고리의 다른 글

[Graphics] 노멀 맵(Normal Map)은 왜 파란색일까 ?  (0) 2023.12.13
[Unity] Reflex  (0) 2023.12.04
Unity,C#) 객체 지향 프로그래밍, 상속의 개념  (0) 2020.12.31
Unity) C#. Foreach문  (0) 2020.12.30
Unity) Ray 와 RayCast  (0) 2020.12.29