본문 바로가기

유물/MDX/MDL

Extrarius - A (not quite) brief tutorial on Interpolation


원문: http://wc3campaigns.com/showthread.php?t=79038
함부로 긁어왔습니다.
A (not quite) brief tutorial on Interpolation
A (not quite) brief tutorial on Interpolation:

Interpolation 은 당신이 가지고 있지 않은 정보를 얻기위해 당신이 가진 어떤 정보를 사용하는 메소드들의 그룹이다.

워크래프트 3 모델에서, 각각 시간과 연합하는 두 좌표에서, 어떤 공식을 사용해 그 사이의 어떤 시간의 좌표를 생성하는 것을 의미한다.

수학 목적에서, 첫 좌표로 사용되는 시간은 0이고, 두번째 좌표로 사용되는 시간은 1이다, 하지만 어떤 대수학을 이용해 당신은 당신이 원하는 어떤 다른 값을 사용할 수 있다(잘 모르겠음0_0).

이동, 스케이링, 그리고 회전이 아닌 다른 것(알파 값같은)을 위한다:

기본 메소드, Linear Interpolation 는 두 점 사이의 선분을 만드는것에 기초된 공식을 사용한다:
MiddleValue = (Time * (EndValue - StartValue)) + StartValue
이것을, 간단히:
MiddleValue = ((1 - Time) * StartValue) + (Time * EndValue)
기본적으로, 당신은 StartValue의 어떤 부분과, EndValue의 어떤 부분을 가질 것이고, 그것들을 같이 더 할 것이다.
시간이 0이면, 당신은 StartValue를 얻는다.
시간이 1이면, 당신은 EndValue를 얻는다.

타임 값이 중간인 동안, 시간이 0에 가까우면 StartValue에 가까운 값을 얻고, 1에 가까우면 EnaValue에 가까운 값을 얻는다.
이것을 이해하는 또다른 방법은 각 부분을 0.5(나누기 2한 것과 같은)로 곱하는 것 대신, 얼마나 많은 시간이 지났는지(당신이 한 장소에서 시작해 다른 곳에서 끝나기를 원하기 때문)에 따라 각 중간 차이 요점을 주어, 당신이 평균을 얻는 것이다.

좋다, 그러면 InTan 과 OutTan 요소가 이 어떻게 이안에 들어갈까? 그것들은 직선보다는 다른 모양을 만들기 위해 두개의 점보다다는 정보를 더 사용한다. 워크래프트 3 는 두 가지의 spline interpolation 을 사용한다: 3차(cubic) hermite curves, 그리고 3차(cubic) bezier curves. 3차는 (이 문장에서) 그것이 정보의 4 조각으로 수행한다는 것을 의미한다(ax^3 + bx^2 + cx + d = , 4개 말하는 거겠지).

Cubic Hermite curves 은 일차 보간처럼, 두개의 끝점을 가진다. 그러나 또한 각 점을 위한 접선(tangent)을 가진다. 이 접선은 그 점에 곡선이 이루어지는 방향이다. 예로, (0, 0, 1)의 접선은 그 점을 의미한다, 곡선은 직선으로 갈것이다(Z=1을 의미하기때문). 접선이 길다면(당신이 벡터 길이[모든 부분을 제곱하고, 모두 더한후에, 제곱 근을 취함]를 가지고 있다는 것을 의미한다), 더 커브가 그 방향으로 향할 것이다. 커브는 원만한 변동을 만들기 위해 두 좌표에 추가로 두 접선의 사이를 혼합할 것이다.

Hermite 커브에서, InTan은 좌표가 끝점으로 사용될 때 접선이다. 그리고 OutTan은 좌표가 시작점으로 사용될 때 접선이다. 예를 들어, 타임 0의 에니메이션에서 타임 500의 에니메이션 사이를 혼합하는 것은, 0때의 좌표를 시작점, 0 때의 OutTan를 시작 접선, 500의 좌표를 끝점, 500의InTan을 끝접선으로 사용한다.

Cubic Bezier curves 은 본질적으로 같지만, 다른 형식이다. 접선을 직접 주는 대신에, 당신은 제어점을 대신 주어야 한다. 시작점에, 커브는 처음 제어점을 향해 직선으로 간다, 그리고 끝점에서, 커브는 두번째 제어점으로 직선으로 간다. 당신은 이것으로 생각할 수 있다.
FirstControlPoint = StartPoint + StartTangent
그리고
SecondControlPoint = EndPoint + EndTangent
이것은 접선을 직접 지정하는 대신에 값을 관련된 좌표에 더하는 것을 제외하고는 Cubic Hermite Curve 와 같다,

Bezier 커브에서, InTan는 좌표가 끝점으로 사용될 때 두번째 제어점이고, OutTan는 좌표가 시작점으로 사용될 때 첫번재 제어점이다. 예를 들어, 에니메이션 0부터 500까지 블렌딩할 때, 0 좌표를 시작점, 0의 OutTanㅡㄹ 첫 제어점, 500의 좌표를 끝점, 500의 InTan을 두번째 제어점으로 사용한다. 커브는 더 원만한 변화를 만들기 위해 두 선분(제어점에 관련된 좌표부터) 사이를 혼합한다.

회전에 대해서, 회전은 벡터(다루기 쉬운)에 저장되지 않고 어려운 수학새끼가 될 Quaternions 에 저장되기 때문에 더 어렵다. 간단히 커터니언은 위치 대신 회전(Quaternion Rotation)을 가지는 벡터의 특별한 종류같은 것이다.
일차 보간 대신에,  Spherical Linear Interpolation 이라고 불리는 메소드는 부드러운 회전을 얻기위해 사용된다. 

This doesn't have any affect in what you put in an MDL file if you use Linear - you still just put the values you want and the game blends between them, but the information might help you understand Quaternions.
I'm not sure how Cubic Hermite or Cubic Bezier interpolation applies to rotation, but I'm fairly certain just sticking quaternions into the normal curve formulas would not work.
__________________