수학/이득우의 게임 수학

원근 투영 (4) - 원근 보정 매핑

monstro 2026. 6. 10. 11:18
728x90
반응형

- 개요

이미지 출처 - https://en.wikipedia.org/wiki/Texture_mapping#Affine_texture-mapping

 

이전의 방식을 사용하여 깊이 값을 고려하지 않고 텍스처 매핑을 진행하는 경우

위와 같이 격자 무늬가 꺾이거나 캐릭터의 눈과 눈썹이 출렁거리는 왜곡을 발생시킨다

이는 아핀 텍스처 매핑이 깊이 값을 무시한 채 NDC의 무게중심좌표로만 텍스처를 선형 보간하기에 발생한다

 

- 문제 원인 파악

시야각에 걸쳐 있는 두 점과 이를 투영한 결과

 

문제의 원인을 명확히 알아보기 위해 위와 같이 투영 과정을 구성하였다

투영하기 전 사영 공간의 점 P1P2카메라 시야각에 걸쳐있다고 가정한다

위 2개의 점을 투영 평면에 투영한 점 N1N2NDC 좌표 값은 각각 -11이 된다

그리고 카메라의 정면에 위치한 사영 공간의 점 P3를 투영한 NDC 좌표의 점 N3 투영 평면의 중심에 위치한다

 

뷰 공간의 선을 수평으로 조정해 측정한 결과

 

NDC 공간에서 N1N2를 이어 선분을 생성하면 선분의 중앙에 위치한 중점 N3의 무게중심좌표는 0.5가 된다

이때 사영 공간에서의 P1P2를 잇는 선분의 점 P3의 무게중심좌표는 0.5보다 작은 값이다

위와 같이 왜곡이 발생하는 원인은 사영 공간의 무게중심좌표NDC에서의 무게중심좌표가 다르기 때문이다

이런 문제를 수정하기 위해서는 투영되기 이전의 사영 공간에서의 무게중심좌표를 사용해야 한다

 

- 투영 보정 보간

1) 원리

사영 공간무게중심좌표를 사용하기 위해서는 다음의 절차를 진행한다

  • 투영 과정거꾸로 추적하여 NDC에서 무게중심좌표를 계산
  • 계산한 무게중심좌표로부터 사영 공간무게중심좌표를 계산

 

위와 같이 투영 전의 무게중심좌표를 계산해 텍스처를 매핑하는 것을 "투영 보정 보간"이라고 표현한다

투영 보정 보간의 계산식을 유도하기 위해서는 반비례 함수 y = -(1/x)의 성질을 알아볼 필요가 있다

 

2) 반비례 함수의 성질

반비례 함수의 그래프

 

반비례 함수를 그래프로 표현하면 위와 같이 표현할 수 있다

 

X값 4에 대응하는 무게중심좌표 계산식

 

이때 x축에 위치한 2, 4, 6의 세 가지 수 중에서 가운데에 위치한 4의 무게중심좌표 a는 위 식을 통해 0.5로 계산된다

 

Y값 -(1/4)에 대응하는 무게중심좌표 계산식

 

다음으로 4에 대응하는 Y값 -(1/4)에 대응하는 무게중심좌표 a는 위 식을 통해 0.25로 계산된다

이 식을 응용하여 Y축의 무게중심좌표 0.25로부터 X축의 무게중심좌표 0.5를 계산하는 식을 찾는다면,

사영 공간에서의 무게중심값을 계산할 수 있다

 

Y축의 두 점 사이의 점을 구하는 수식

 

Y축에서의 무게중심좌표를 q1q2로 지정하고 이를 사용하여

Y축의 두 점 y1y2 사이의 점 y`를 계산하는 수식을 위와 같이 정리할 수 있다

무게중심좌표의 정의에서 두 무게중심좌표의 합 q1 + q2의 값은 1이다

 

X축의 두 점 사이의 점을 구하는 수식

 

다음으로 X축에서의 무게중심좌표를 t1t2로 지정하고 이를 사용하여

X축두 점 사이의 점 x`를 계산하는 수식을 위와 같이 정리할 수 있다

동일하게 t1 + t2의 값은 1이다

 

x`와 y`는 반비례 관계

 

이때 반비례 함수이므로 x`와 y`는 반비례 관계이다

따라서 위와 같이 각각의 y값x값으로 표현할 수 있다

 

Y축의 두 점과 무게중심좌표를 사용하여 x`점 계산

 

위에서 변환한 식을 응용하여 Y축두 점무게중심좌표를 사용하여 X축의 x`점의 값을 계산할 수 있다

 

위의 식에서 양변에 분모를 곱한 결과

 

위의 식의 양변에 분모를 곱하면 위와 같이 식을 변환할 수 있다

 

두 무게중심좌표의 합이 1임을 이용하여 식을 변환

 

위의 식에서 두 무게중심좌표의 합이 1임을 이용하여 식을 변환할 수 있다

 

최종 계산식

 

위의 식에서 양변의 덧셈항을 분리하면 최종 계산식을 얻을 수 있다

위의 식을 적용하면 X축에서의 무게중심좌표 0.5가 문제없이 계산되는 것을 확인할 수 있다

 

3) 최종 계산식을 세 점의 조합에 적용

최종 계산식을 세 점으로 확장한 수식

 

2)의 최종 계산식을 삼각형을 구성하는 세 점의 조합으로 확장하여 적용하였다

세 점으로 확장한 수식은 위와 같다

 

최종 투영 보간 계산식

 

확장한 최종 계산식을 사용하여 NDC에서 구한 무게중심좌표를 사영 공간의 무게중심좌표로 변환할 수 있다

사영 공간에서 NDC로 변환될 때 나누는 값 뷰 공간Z이므로 

확장한 식에서 X-Z로 치환하면 최종 투영 보간 계산식을 얻을 수 있다

위의 수식을 활용한 텍스처 매핑을 "원근 보정 매핑"이라고 표현한다

728x90
반응형