■ 굴절 (Refraction)
먼저 굴절 영역이 되어줄 quad 오브젝 하나를 배치해줬다.
해당 오브젝트의 쉐이더는 GrabPass{} 내용이 추가될 것이다. GrabPass란 화면을 캡처하는 내용이라 생각하면 된다. 이는 sampler2D _GrabTexture에 저장이 될 것이고 현재 화면의 UV 값을 가진 Input 구조체의 내장된 변수 screePos를 사용할 것이다.
일단 스크린 좌표계가 필요하기 때문에 UV가 정상적으로 입력되는지 확인해봐야 한다.
screen UV가 카메라의 거리에 따른 영향을 받지 않도록 rgb/a 처리를 해줬다.
이제 uv가 정상적으로 처리되는 것을 확인했으니 이를 갖고 굴절에 적용해보겠다.
다른 오브젝트들보다 나중에 그려져야 배경을 캡쳐할 수 있으므로 Transparent 및 zwrite off로 처리했다.
이렇게 한다면 해당 텍스처는 우리 눈엔 투명 상태가 되어 보이지만 실제로는 뒤에 장면들을 캡처하고 있다.
[GIF: 굴절량 조절]
이젠 굴절 모양이 될 텍스처를 받아 해당 텍스처 모양으로 굴절을 일으키도록 설정했다.
▼ 사용한 텍스처
▼ 결과물
[GIF]
728x90
'Computer Graphics > ShaderLab, HLSL' 카테고리의 다른 글
[ShadeLab] Triplanar (0) | 2024.03.11 |
---|---|
[ShaderLab] Water (0) | 2024.03.11 |
[ShaderLab] Matcap (0) | 2024.03.10 |
[ShaderLab] Dissolve (0) | 2024.03.06 |
[ShaderLab] 2Pass AlphaBlending (1) | 2024.03.06 |