게임에서 사용되는 좌표계

Object Space (Local Space, 오브젝트 공간)

  • 특정 오브젝트만을 그리기 위한 정점 정보가 포함된 공간
  • 하나의 공간에 오브젝트(물체, 캐릭터 등) 하나만 원점에 두어서 물체를 그린 공간
  • 보통 오브젝트 공간에서는 오브젝트 공간의 방향 기준을 정하기 위해 임의로 방향 지정
    ex) 사람을 기준으로 한다면 사람 한명이 중심이라 가정, 각각의 사람이 하나의 오브젝트 공간의 주인공
  • 오브젝트 공간에서의 움직임 : 왼쪽, 오른쪽, 앞, 뒤 등으로 이동 지시
  • 월드 공간에서의 움직임 : 북쪽, 서쪽, 동쪽, 남쪽 등으로 이동 지시

World Space (월드 공간)

  • 현실 세계의 주소는 우리나라 안에서 절대적인 위치 표현
  • 지구상에서의 원점은 영국의 그리니치 천문대 위치 기준
  • 어디서든지 공통적으로 사용하는 약속된 좌표계
  • 모든 물체들이 모이는 하나의 공간이라 정의

Camera Space (카메라 공간)

  • 오브젝트가 (0, 0, 0)의 원점에 있다는 것이 오브젝트 공간이 아니라 카메라 공간
  • 바라보는 사람과 오브젝트 전부 원점에 있다면 물체는 같은 위치에 있기에 보이지 않아야함
  • 카메라 공간을 변환함에 있어 3D 카메라 공간(Projection) 또는 2D 카메라 공간 (Orthogonal)으로 변환할때 프로젝션이라는 변환 과정 필요

Upright Space (업라이트 공간)

  • 3D 그래픽스에서 'Upright Space'는 일반적으로 월드 좌표계와 오브젝트 공간 사이에 존재
  • 월드 공간에서의 수직 방향과 같은 축
  • 오브젝트 공간에서 업라이트 공간으로 변환하는 데에는 물체의 회전 정보만 필요
  • 업라이트 공간에서 월드 공간으로의 변환은 축을 재정립

월드 좌표계와 Upright Space

  • 월드 좌표계에서는 X, Y, Z 세 축을 사용해 공간 정의
  • 대부분의 3D엔진 및 툴에서는 Y축이 수직을 나타내는 것이 일반적 (Y-Up)
  • 이 경우 업라이트 공간은 Y축을 따라 정렬된 공간 또는 오브젝트
    ex) 캐릭터나 오브젝트가 Y축을 기준으로 서 있다면 upright하게 배치된 것으로 간주, 게임 엔진에서 업라이트 공간을 고려해 물체를 배치 및 회전시 물체가 Y축을 따라 정렬되어 있는지 확인 필요
  • 일부 시스템에서는 Z축이 수직을 나타내기도 하므로 업라이트 공간의 정의는 사용되는 좌표계의 관습에 따라 변동 가능

Basis Vectors and Coordinate Space Transform (기저 벡터와 좌표공간 변환)

Coordinate Space Transformation (좌표공간 변환)

  • 물체 랜더링시 조명에 의한 명암을 계산할때 오브젝트 공간 내에서가 아닌 물체를 월드에 배치시켜서 계산해야 함
  • 따라서 월드에서의 빛의 위치를 알아야 함
  • 결국 오브젝트 공간에서 월드 공간으로의 좌표변환이 가능해야함

    ex) 로봇 이동
    목표는 로봇의 정점들을 새로운 위치로 변환하는 것
    로봇을 부엌으로 이동시키려면 제자리에서 120도 회전
    우측 위 방향으로 이동, [18, 0, 10]

  • 통상적으로 이동 후 회전이 자연스러워 보이나, 회전을 먼저 진행해 주는 것이 더 이해하기 좋음
  • 물체를 회전할때 회전 중심은 원점
  • 이동 이후 회전시 원점이 아닌 점을 중심으로 회전하므로 복잡한 계산 과정 필요 ([1, 0]에서 180° 회전시 [-1, 0]이 되므로 이동하는 추가 연산 필요)
  • 그 이유는 원점에서의 회전은 원점에 대한 선형 변환, 원점이 축이 아닌 회전은 아핀 변환이기도 하기 때문
  • Linear Transform (선형 변환)
    • 선형 변환은 원점을 그대로 유지하면서 벡터를 다른 벡터로 변환하는 과정
    • 주어진 벡터에 대해 회전, 스케일링(확대/축소), 반사 등 수행 가능
    • 원점이 그대로 유지
    • 직선은 직선으로, 평면은 평면으로 변환
    • 선형 변환에는 이동(Translation)이 포함되지 않음
  • Affine Transform (아핀 변환)
    • 선형 변환에 이동을 추가한 변환
    • 좌표를 이동시킬 수 있기 때문에 더 일반적인 변환
    • 이동을 포함하기 때문에 원점이 다른 위치로 이동할 수 있음
    • 직선은 직선으로 평면은 평면으로 변환되지만 위치가 바뀔 수 있음
    • 선형 변환의 모든 특성을 포함하며 더 일반적
  • 주요 차이점
    • 원점 : 선형 변환은 원점을 이동시키지 않으나, 아핀 변환은 원점을 다른 위치로 이동시킬 수 있음
    • 수학적 표현 : 선형 변환은 단순 행렬곱, 아핀 변환은 행렬곱 + 벡터 덧셈
    • 적용 범위 : 선형 변환은 회전, 스케일링, 반사 등의 변환만 가능, 아핀 변환은 앞선 모든것 + 이동
  • 원점이 아닌 상태에서의 회전은 회전의 중심을 원점으로 두고 회전 이후 다시 해당 위치로 변환
    ex) 물체를 원점으로 이동, 원점에서 회전, 기존 위치로 재이동
  • 올바른 위치로 이동시켰다해도 월드 공간에서의 원점을 중심으로 물체가 배치된 상태
  • 우리가 보는 눈(카메라)에서의 원점으로 선형 변환 필요
  • 카메라 공간 변환
    • 카메라가 원점으로 이동한 거리만큼 모든 물체들을 이동
      => 카메라가 원점에 존재하게 되어 월드 공간과 카메라 공간이 동일해짐
    • 물체 이동과 반대로 이동 이후 회전
      => 원점을 기준으로 회전했을 경우 연산이 더 쉽기 때문
    • 최종적으로 프로젝션 화면으로 변환 필요
  • 여기서 카메라 뷰와 객체의 위치 및 방향을 처리하는 두가지 방법
  • Absolute Perspective (절대적 관점)
    • 객체나 카메라의 위치와 방향을 전역 좌표계(Global Coordinate System) 기준으로 처리
    • 전역 좌표계는 씬 전체에 걸쳐 고정, 모든 객체와 카메라는 좌표계를 기준으로 위치, 방향 계산
    • 특징
      • 일관된 관계 : 모든 객체의 위치와 방향이 하나의 전역 좌표계를 기준으로 계산되므로 위치와 방향이 명확하고 일관된 관계를 갖음
      • 고정된 기준 : 객체가 이동하거나 회전한다 하더라도 전체적인 장면 내에서의 위치가 명확
      • 예시 : 3D에서 카메라가 고정된 위치에서 씬 전체를 관찰하는 경우 또는 특정 객체가 씬의 중심을 기준으로 이동하는 경우
    • 응용 사례
      • 전체 씬의 배치, 월드 빌딩, 전역적 조명 계산 등 씬의 전반적인 구조를 고려해야하는 작업에서 유용
    • 장점
      • 씬의 전체적인 구조와 일관성을 유지하기 쉬움
      • 복잡한 씬에서 객체의 위치를 명확하게 파악 가능
    • 단점
      • 객체간의 관계를 처리할때 유연성이 떨어질 수 있음
      • 로컬 변환을 처리하기 복잡할 수 있음
  • Local Perspective (지역적 관점)
    • 객체나 카메라의 위치와 방향을 그 객체의 로컬 좌표계(Local Coordinate Space) 기준으로 처리
    • 로컬 좌표계는 객체 자체에 따라 이동, 객체의 이동이나 회전에 따라 좌표계도 함께 변화
    • 특징
      • 상대적 관계 : 객체 간의 위치와 방향이 각각의 로컬 좌표계에 따라 정의되므로 객체간의 관계를 상대적으로 이해
      • 유연한 변환 : 객체가 이동 및 회전시 로컬 좌표계도 이동하므로 객체간의 관계를 보다 유연하게 조작 가능
      • 예시 : 캐릭터가 자신을 기준으로 주변을 탐색하는 경우, 팔이 몸체를 기준으로 움직이는 경우
    • 응용 사례
      • 개별 객체의 애니메이션, 복합적인 상호작용, 객체 내부의 세부적인 움직임을 처리할때 유용
    • 장점
      • 객체간의 상대적인 움직임 처리에 용이
      • 애니메이션과 상호작용을 자연스럽게 구현 가능
    • 단점
      • 전역적인 씬 구성에서 일관성을 유지하기 어려움
      • 로컬 좌표계를 이해하지 못하면 복잡해짐
  • 작업의 성격에 따라 두 관점을 적절히 사용해야 함

Basis Vector (기저 벡터)

  • 로봇의 어깨에 부착된 광원의 빛 계산을 위해 라이트의 월드 좌표를 구해야한다 가정
  • 로봇을 중점으로 두고 오른쪽 어깨가 (-1, 5)만큼 떨어져 있을때의 월드 좌표 계산
  • 단계 분리
    1. 로봇의 좌표는 (4.5, 1.5)
    2. 로봇의 기준에서 어깨 좌표는 (-1, 5)
    3. 로봇 좌표계 기준으로 길이가 1인 right 방향 벡터는 [0.87, 0.5], up 방향 벡터는 [-0.5, 0.87]
    4. (4.5, 1.5) + (-1) X [0.87, 0.5] + 5 X [-0.5, 0.87] = (1.13, 5.53)
  • o는 물체의 좌표, b는 어깨가 위치한 좌표
  • p는 물체 기준 오른쪽을 바라보는 월드 공간에서의 단위 벡터, q는 위쪽을 바라보는 월드 공간에서의 단위 벡터로 정의
  • 최종 월드 좌표(w)는 w = o + bxp + byq로 표현
  • 이를 이용해 3차원 좌표를 더욱 간단하게 v = xp + yq + zr로 도출 가능
  • p, q, r은 3차원 공간에서 기준이 되는 기저 벡터
  • 기저 벡터 : 각 공간에서의 방향 기준을 정해주는 벡터
  • 공통적으로 3차원 공간에서 p = [1,0,0], q = [0,1,0], r = [0,0,1]이 기저 벡터
  • 기준이 어디인지에 따라 p, q, r이 다른 값을 갖기도 함
  • 좌표 공간은 기저 벡터가 바뀌면 변환됨
  • 이 과정은 선형 변환과 관련이 있으며, 새로운 기저로 변환된 좌표는 원래 벡터와 동일한 공간 내에서 표현되지만 다른 좌표계를 사용
    • 기저 벡터 : 벡터 공간의 차원 정의, 공간 내 모든 벡터를 생성할 수 있는 선형 독립적인 벡터 집합
    • 좌표공간 : 주어진 기저 벡터에 따라 벡터를 표현하는 방법, 벡터의 성분을 나타냄
    • 벡터의 좌표 : 기저 벡터의 선택에 따라 달라짐, 기저가 바뀌면 좌표도 변환
  • 기저 벡터간에 수직을 이루는 벡터를 직교 기저 벡터
    • 직교 기저를 사용하면 벡터의 분해와 재구성이 쉬워지며 계산이 간편해짐
    • 직교 기저 벡터를 구하는 방법으로는 그람-슈미트 등

Nested Coordinate Space (중첩 좌표 공간)

  • 3D 공간에서 3D모델은 오브젝트 공간에 생성
  • 게임 공간에 배치하기 위해서는 각 점들을 월드 공간으로 배치해야 물체끼리의 상호작용이 가능
  • 여러 좌표계를 동시에 계산할 수 있도록 중첩시켜 갖고 있는게 계산에 유리
    ex) 빛의 세기 계산시 카메라 좌표 이용, 애니메이션 관련 계산시 오브젝트 좌표 이용

참고 및 출처:
게임 개발을 위한 수학

profile
Face the fear, Build the future

0개의 댓글