TIL(2024,07,24)기술 면접 대비

김보근·2024년 7월 24일

Unity

목록 보기
48/113
post-thumbnail

기술 면접 대비

1. 오일러 각의 한계점에 대해 설명해주세요.
2. Unity 내에서 짐벌 락 (Gimbal Lock) 현상을 직접 유도해볼 수 있나요? 그 방법을 적어주세요.

답변

  1. 오일러 각의 한계점에 대해 설명해주세요.
    오일러 각의 한계점은 주로 다음과 같은 문제가 있습니다:

짐벌 락 (Gimbal Lock): 세 개의 회전 축 중 두 축이 평행하게 align되면서, 하나의 자유도가 사라지는 현상입니다. 이로 인해 특정 회전이 불가능해지고, 원하는 방향으로 객체를 회전시키는 것이 어려워집니다.

비연속성 (Discontinuity): 오일러 각의 표현은 회전의 연속성을 보장하지 않아서, 작은 변화에도 큰 회전 변화를 일으킬 수 있습니다. 예를 들어, 각도가 0도에서 360도로 넘어가는 경계에서 문제가 발생할 수 있습니다.

회전 순서 의존성: 오일러 각은 회전 순서에 따라 다른 결과를 초래합니다. 즉, 회전 순서 (예: XYZ, YXZ 등)에 따라 동일한 각도 세트를 사용하더라도 다른 최종 회전 상태를 얻게 됩니다.

직관적이지 않은 표현: 특정 회전을 이해하고 제어하는 데 있어서 직관적이지 않으며, 특히 복잡한 회전을 다룰 때 문제가 됩니다.

  1. Unity 내에서 짐벌 락 (Gimbal Lock) 현상을 직접 유도해볼 수 있나요? 그 방법을 적어주세요.

Unity 내에서 짐벌 락 현상을 유도하는 방법은 다음과 같습니다:

새로운 3D 프로젝트 생성: Unity에서 새로운 3D 프로젝트를 생성합니다.

간단한 오브젝트 추가: 예를 들어, 기본 큐브(Cube) 오브젝트를 생성합니다.

큐브의 초기 회전 설정: 큐브의 Transform 컴포넌트에서 회전 값을 (0, 0, 0)으로 초기화합니다.

오일러 각을 이용한 회전:

큐브의 회전 값을 아래와 같이 설정합니다:
X 축을 90도로 회전시킵니다: (90, 0, 0)
이제 큐브는 X축을 중심으로 90도 회전되었으므로 Y축과 Z축이 동일한 평면에 있게 됩니다.

짐벌 락 유도:

이제 Y축 또는 Z축을 중심으로 회전을 시도합니다. 예를 들어, Y축을 90도로 회전합니다: (90, 90, 0)
이 상태에서 Z축을 중심으로 회전하려고 할 때, 큐브의 회전이 예상한 대로 이루어지지 않고, 회전 자유도가 하나 줄어드는 것을 관찰할 수 있습니다. 이는 짐벌 락이 발생한 것입니다.

실제 확인:

Unity 에디터 상에서 위의 회전 값을 직접 입력하고, 큐브를 회전시키면서 짐벌 락 현상을 확인합니다.
Transform 컴포넌트의 회전 값이 예상한 대로 반영되지 않는 것을 볼 수 있습니다.
위의 과정을 통해 Unity 내에서 짐벌 락 현상을 직접 유도하고 그 영향을 관찰할 수 있습니다.

설명 문제

1. 월드 스페이스 (World Space) 와 로컬 스페이스 (Local Space)의 차이에 대해 설명해주세요.
2. 벡터의 내적과 외적을 어느 상황에 사용할 수 있는지 설명해주세요.
3. 쿼터니언을 사용하는 이유에 대해 설명해주세요.

답변

  1. 월드 스페이스 (World Space) 와 로컬 스페이스 (Local Space)의 차이에 대해 설명해주세요.
    월드 스페이스 (World Space)로컬 스페이스 (Local Space)는 3D 그래픽스 및 게임 개발에서 객체의 위치, 회전, 스케일 등을 표현하는 두 가지 주요 좌표 공간입니다.

월드 스페이스 (World Space):

월드 스페이스는 전역 좌표계를 기준으로 객체의 위치, 회전, 스케일을 나타냅니다.
모든 객체는 같은 기준점을 공유하며, 이를 통해 씬 내에서 절대적인 위치와 방향을 정의합니다.

예를 들어, 게임 세계의 중심이 (0, 0, 0)인 좌표계에서 각 객체의 위치가 이 중심점을 기준으로 설정됩니다.

로컬 스페이스 (Local Space):
로컬 스페이스는 객체의 부모 객체 또는 자기 자신을 기준으로 위치, 회전, 스케일을 나타냅니다.

부모 객체의 변환을 기준으로 상대적인 위치와 방향을 정의합니다.
예를 들어, 팔을 기준으로 손의 위치를 정의할 때 손의 좌표는 팔의 로컬 스페이스를 기준으로 표현됩니다.

로컬 스페이스를 사용하면 객체를 구성하는 하위 객체 간의 관계를 쉽게 관리할 수 있습니다.

차이점 요약:

월드 스페이스는 전체 씬의 전역 좌표계를 기준으로 객체의 위치를 정의합니다.
로컬 스페이스는 객체의 부모 또는 자기 자신을 기준으로 상대적인 위치를 정의합니다.

  1. 벡터의 내적과 외적을 어느 상황에 사용할 수 있는지 설명해주세요.

벡터의 내적 (Dot Product)벡터의 외적 (Cross Product)은 벡터 간의 연산에서 사용되는 두 가지 주요 연산입니다. 각각의 사용 상황은 다음과 같습니다:

벡터의 내적 (Dot Product):

코사인 각도 계산: 두 벡터 사이의 각도를 구할 때 사용합니다. 내적의 결과를 통해 두 벡터 사이의 각도를 계산할 수 있습니다.

벡터 정렬: 두 벡터가 얼마나 평행한지 또는 직각인지 판단할 때 사용됩니다. 내적 값이 1에 가까울수록 벡터가 같은 방향, -1에 가까울수록 반대 방향, 0에 가까울수록 직각임을 나타냅니다.

빛의 조명 계산: 조명 계산에서 표면의 법선 벡터와 광선 방향 벡터의 내적을 사용하여 표면이 광원에 대해 얼마나 많이 노출되었는지 계산합니다.

프로젝션: 한 벡터를 다른 벡터 방향으로 투영할 때 사용됩니다. 예를 들어, 속도 벡터를 특정 축에 투영하여 속도의 성분을 구할 때 유용합니다.

벡터의 외적 (Cross Product):

직교 벡터 생성: 두 벡터가 이루는 평면에 수직인 벡터를 구할 때 사용됩니다. 결과 벡터는 두 입력 벡터와 직교합니다.

회전 축 계산: 회전 변환에서 회전 축을 구할 때 유용합니다. 특히, 두 벡터 사이의 회전 축을 정의할 때 사용됩니다.

면의 법선 벡터 계산: 3D 그래픽스에서 삼각형 면의 법선 벡터를 계산할 때 사용됩니다. 삼각형의 두 변의 외적을 통해 면에 수직인 벡터를 얻을 수 있습니다.

토크 계산: 물리 시뮬레이션에서 힘 벡터와 위치 벡터의 외적을 통해 회전력(토크)을 계산할 수 있습니다.

  1. 쿼터니언을 사용하는 이유에 대해 설명해주세요.

쿼터니언은 회전을 표현하기 위해 사용되는 수학적 구조로, 3D 그래픽스와 게임 개발에서 매우 유용합니다.

쿼터니언을 사용하는 이유는 다음과 같습니다:

짐벌 락 회피: 쿼터니언은 오일러 각에서 발생하는 짐벌 락 문제를 피할 수 있습니다. 쿼터니언은 네 개의 요소로 회전을 표현하므로, 회전 자유도를 잃지 않고 모든 방향에서 회전을 자유롭게 표현할 수 있습니다.

효율적인 보간 (Interpolation): 쿼터니언은 스피어리컬 선형 보간(SLERP)과 같은 방법을 통해 회전 간의 부드러운 보간이 가능합니다. 이는 애니메이션과 카메라 움직임에서 자연스러운 전환을 구현하는 데 유리합니다.

간단한 연산: 쿼터니언을 사용하면 회전을 결합하거나 역회전을 계산하는 연산이 비교적 간단합니다. 행렬 기반 회전보다 연산량이 적고, 누적 오차가 적습니다.

회전의 안정성: 쿼터니언은 누적된 회전에서 발생할 수 있는 오차를 줄여주며, 오랜 시간 동안 안정적인 회전을 유지할 수 있습니다.

메모리 절약: 쿼터니언은 네 개의 숫자로 회전을 표현하므로, 3x3 회전 행렬보다 메모리 사용량이 적습니다.

profile
게임개발자꿈나무

0개의 댓글