유니티에서 트라이 플래너 UV 맵핑 구현 과정 - Whitmem
유니티에서 트라이 플래너 UV 맵핑 구현 과정
게임 개발 및 엔진
2026-01-04 16:24 게시 f889ae6c9c455c4c318c

0
0
10
이 페이지는 외부 공간에 무단 복제할 수 없으며 오직 있는 그대로 게시되며 부정확한 내용을 포함할 수 있습니다. 법률이 허용하는 한 가이드 라인에 맞춰 게시 내용을 인용하거나 출처로 표기할 수 있습니다.
This page is not to be distributed to external services; it is provided as is and may contain inaccuracies.
이번 게시글에서는 트라이 플래너 UV 맵핑을 구현 해 볼 것이다. 트라이 플래너 UV 맵핑을 구현하게 되면 객체의 uv 맵과는 전혀 관련 없이 오브젝트의 월드 좌표 또는 로컬 좌표 기반으로 텍스처를 샘플링하여 적용할 수 있다.
이 구현의 장점은 무엇보다 객체가 미리 UV가 지정되어 있지 않더라도 동적으로 자연스럽게 UV를 맵핑할 수 있다.
구현 방법은 그렇게 어렵지는 않다. 객체의 법선과 각 월드의 방향 벡터와 내적하여 0~1 값을 세기로 곱하는 방법도 있다.
다만 방향 벡터의 x,y,z 성분이 각각 방향을 의미하는 것이므로 객체의 노말 벡터를 구한 뒤 x,y,z 성분을 세기로 이용하는 방법이 정석으로 보여 이 방법을 활용하기로 하였다.
우선 모든 처리는 Fragment 쉐이더에서 수행되기 때문에 Vertex Shader에 들어오는 객체 정점 좌표와 법선 정보를 모두 Fragment 로 넘겨줘야 한다. 따라서 Varyings 구조체에 normal, worldPos 를 넘겨주도록 하였다.
그리고 Vertex Shader 에서는 노말을 로컬 공간에서 월드 공간으로 이동해주고, 월드 정점을 로컬 공간에서 월드 공간으로 이동한다.
그리고 Fragment 측면에서, worldPos 로 넘어온 월드 좌표를 기준으로 각 월드 정점을 UV 로 변환해준다. 이 때 각 면의 모습으로 사영된다고 생각하고 3 축에서 한 개의 축을 제거해 앞쪽, 옆쪽, 윗쪽 UV 좌표를 만들어준다. 윗쪽 아랫쪽은 UV 좌표계를 동일하게 맞춰줄 생각이므로, 세 개의 면만 구성하였다.
그리고 위 UV 좌표 3개를 사용해 각 면에 투영되는 텍스처를 샘플링한다.
그리고 모두 abs (왼쪽 오른쪽 둘다 동일한 UV로 투영하기 위해) 해주고, 정규화 해준다. normalize 하는 방법도 있지만 벡터의 길이는 제곱 합이 1이 되는 것이고, 여기서는 단순히 비율로 곱해줄 것이기 때문에 총 합으로 나누었다.
이제 각각의 x,y,z 성분 값이 해당 방향의 세기가 되는 것이다.
해당 텍스처를 적절하게 blend 하여 반환하면 된다.
객체를 늘리거나 줄이더라도 UV 깨짐 없이 동적으로 잘 확장되는 것을 볼 수 있다.
댓글 0개
댓글을 작성하는 경우 댓글 처리 방침에 동의하는 것으로 간주됩니다. 댓글을 작성하면 일회용 인증키가 발급되며, 해당 키를 분실하는 경우 댓글을 제거할 수 없습니다. 댓글을 작성하면 사용자 IP가 영구적으로 기록 및 부분 공개됩니다.
확인
Whitmemit 개인 일지 블로그는 개인이 운영하는 정보 공유 공간으로 사용자의 민감한 개인 정보를 직접 요구하거나 요청하지 않습니다. 기본적인 사이트 방문시 처리되는 처리 정보에 대해서는 '사이트 처리 방침'을 참고하십시오. 추가적인 기능의 제공을 위하여 쿠키 정보를 사용하고 있습니다. Whitmemit 에서 처리하는 정보는 식별 용도로 사용되며 기타 글꼴 및 폰트 라이브러리에서 쿠키 정보를 사용할 수 있습니다.
이 자료는 모두 필수 자료로 간주되며, 사이트 이용을 하거나, 탐색하는 경우 동의로 간주합니다.