Libwan
[FakeAxisUv] 본문
FakeAxisUv 아카이빙 및 튜토리얼을 위해 작성

목표-
오브젝트의 Position/Orientation과 관계 없이 World/ObjectLocal 등의 특정 Axis 를 UV로 활용할 수 있는 FakeAxisUv를 제작합니다.

본문-

비슷한 효과를 만드는 데에는 여러 방법이 있을수 있으나,
카메라와 카메라가 보는 픽셀의 연장선(카메라벡터) 과 Y/Z 면의 교점을 찾는 것으로 문제를 정리하였습니다.
그림에선 ? 로 표기된 T값을 찾아 Camera의 Position을 T만큼 카메라벡터 방향으로 밀면 원하는 Y/Z면의 교점을 찾을 수 있을 것입니다.
요약해 표현하면 CameraPosition + ( CameraVec * T ) = P 이 됩니다.
---
평면 상의 두 점의 차를 평면의 노말로 내적하면 0이 됩니다.

PNormal • (P1 - P) = 0 /// • (내적)
여기서 P가 카메라 벡터 위의 한 점이라고 생각하고 두 방정식을 T에 대해 풀어 쓴다면
T = (PNormal • (P1 - CameraPosition)) / PNormal • CameraVec 가 됩니다.
여기서 평면 위의 점 P 는 Y/Z면을 상정하였기 때문에 임의로 0,0,0을 대입, PNormal 역시 1,0,0 이 되겠습니다.
이미지 상의 노드에서는 보는 위치에 따라 뒷면인 -1,0,0 에도 대응할 수 있도록 LocalPos를 활용하여 Y/Z 면의 Normal을 찾았습니다.
이로써 CamPosition과 Uv사이의 거리 T를 구할 수 있습니다.
-----
T를 구했기 때문에 앞서 구한 방정식
CameraPosition + ( CameraVec * T ) = P 에 대입하여 Y/Z의 점 P의 Position을 찾습니다.
UV로 활용되는것은 Y/Z 면이므로 Vector3인 Position에서 Y/Z 만을 마스킹해 UV를 구합니다.
----
다른 축을 상정하거나 P1의 포지션을 수정하여 다양한 면을 추정해 그릴 수 있습니다.
'Unreal > Material&Shader' 카테고리의 다른 글
| [RadialBlur] (0) | 2023.05.30 |
|---|---|
| [Parallax Occlusion Triplanar Mapping] (0) | 2022.05.18 |
| [Parallax Occlusion Mapping] (0) | 2022.05.15 |
| [Material] - Infinity Panning From Center (0) | 2022.05.04 |