본문 바로가기
Shader

돋보기 효과 만들기

by 대마왕J 2021. 2. 11.

기본적으로 스크린 포지션 좌표로, 씬칼라를 그리게 해 놓은 상태입니다. 이러면 화면을 그냥 캡쳐해서 제자리에 그리겠지요. 

 

다음은 화면을 이동시킬 생각입니다. 

화면 가운데를 중심으로, 오른쪽 위는 더 오른쪽 위로 ( + ) 

왼쪽 아래는 더 왼쪽 아래로( - ) 

이런식으로 사방으로 뻗어나가게 해야겠지요 

 

그래서 이렇게 준비를 했습니다. 이건 출발이 UV입니다. 즉 돋보기가 될 스프라이트를 따라서 가겠다는 의미지요. 

그리고 UV에 각각 -0.5 를 더해줘서, 가운데가 중심이 되도록 만들었습니다. 

이대로 원래 이미지에 연산해주면, 가운데는 영향이 없고 외곽으로 갈 수록 0.5 만큼 밖으로 이동하게 만들 수 있습니다. 

일종의 '확대' 가 된 것과 같습니다. 

 

 

외곽부분에 보면 크게 이동한 것을 볼 수 있습니다. 0.5를 더해주면 UV의 절반만큼 이동하므로 너무 멀리 이동해 버려 결과를 보기 힘드므로, 0.1 만큼만 영향을 주게 만들었습니다. 

 

이 방법을 이용해서 해볼 수 있는 것이 

 

이런 이미지를 포토샵에서 만들어서 

이것을 노말맵으로 변환해서 연산해 주면 원하는 결과를 만들 수 있습니다. 

노말맵의 X 와 Y는 결국 좌우 상하의 방향값이니까요 

그런데 이 방법의 문제는, 굴절되는 오브젝트가 지글댄다는 문제가 있습니다. 

 

이는 저기 사용된 텍스쳐의 압축 문제입니다. 텍스쳐의 사이즈를 줄이면 보간으로 좀 완화시킬 수는 있지만, 기본적으로 픽셀로 만들어진 이미지라 완벽히 깔끔하게 만드는 것은 무리가 있습니다. 

방법이 없진 않습니다. 텍스쳐를 크으으으게 만들면 또 됩니다. (...) 

 

하지만 그건 낭비이므로, 수학 연산만으로 비슷하게 하는게 쌉니다. 

 

 

이렇게 만들어주면 됩니다. 커지는 것 (외곽으로  이동하는것)은 맞는데, 가운데만 영향값이 크고 외곽으로 갈수록 영향이 작아지게 만들어 주면 됩니다 

 

 

 

 

이제 이렇게 만들어주면 완벽합니다. 스프라이트를 움직여도 돋보기 처럼 반응하도록 할 수 있습니다. 

 

반응형

'Shader ' 카테고리의 다른 글

Normal Blending (Detail map)  (2) 2021.02.22
Texcoord. xyzw와 UV1, UV2와의 관계  (1) 2021.02.11
Shader.PropertyToID  (2) 2021.02.09
URP Position Transform  (0) 2021.01.27
외부 오브젝트의 값을 셰이더에 넘겨주기  (1) 2021.01.27

댓글