게임 컨텐츠가 만들어지는 과정
- 게임에서 사용하는 물체를 기획
- 로컬 공간에서 모델링을 진행
- 메시 데이터로 변환
- 게임 엔진에 적용하여 월드 공간(스테이지)에 배치
- 플레이어와 카메라를 설정해서 시점을 관리
- 프러스텀 컬링 : 카메라가 보는 영역에 있는 물체만 선택하여 처리하는 최적화 기법
- 렌더링 : 앞에서 선택된 물체들의 메시 데이터를 분석하여 그래픽카드에서 최종 렌더링을 진행
게임 로직과 렌더링 로직
-
게임 로직 : 게임을 시작하면 프레임마다 월드 공간이 사용자의 입력과 로직에 따라서 시뮬레이션 된다. (물체를 움직일 벡터의 수학이 중요하게 사용된다.)
-
렌더링 로직 : 게임 로직 이후 카메라에 보이는 물체만 걸러내어 렌더링 (전에 정리한 공간의 수학과 점을 그리는 수학이 중요하게 사용된다.)
게임 로직 - 물체의 이동
물체를 이동 시키는 것은 물체의 형태(벡터공간)을 변경하는게 아니라 물체가 속한 로컬공간 자체를 움직이는것이다
.
이런 공간의 변환을 설정하는 것을 트랜스폼
이라고 한다.
어떤 게임 화면에 게임 오브젝트가 존재할 때
만약 이 오브젝트의 벡터 공간만 수정하면 게임화면에는 물체가 움직인 것처럼 보일테지만
사실은 물체(로컬공간)은 이동하지 않은것이고 물체의 형태가 변환된것이다. (이동 x , 물체가 a -> a`로 변경)
반대로 오브젝트의 트랜스폼만 수정했다면 물체의 형태를 유지하면서 진짜로 물체(로컬공간)이 이동한 것이다. (이동 o, 물체가 a로 유지)
벡터의 연산
벡터의 기본적인 연산들 부터 소개한다.
스칼라란? 사칙 연산이 가능한 수집합의 원소
벡터와 벡터의 덧셈
v1 = (x1, y1), v2 = (x2,y2)
v1 + v2 = (x1+x2, y1+y2)
벡터와 스칼라의 곱셈
v = (x,y)
av = (ax,ay)
벡터의 방향 즉 기울기를 유지한 상태에서 크기를 조절한다.
선형 조합
덧셈과 곱셈을 조합하여 사용하면 새로운 벡터를 만들수 있다
a1v2 + a2v2 + ... + anvn = v
평행하지 않은 두 벡터를 선형 조합하는것으로 평면상의 모든 벡터를 생성할 수 있다
> 평행한 벡터는 곱셈만으로 가능하다.
표준기저벡터
(1,0)과 (0,1)를 표준 기저 벡터 라고한다.
둘을 조합해서 면의 모든 벡터를 생성할 수 있다
벡터의 응용
위의 연산들은 기본적인 연산들이고 벡터를 다양하게 응용하기 위한 연산들이 존재한다.
벡터의 내적
3 차원 벡터의 내적 (어떤 차원에서 든지 벡터의 내적연산은 가능하다.)
v1 = (x1,y1,z1), v2 = (x2,y2,z2)
v1 * v2 = x1x2 + y1y2 + z1z2
각 축을 곱해서 모두 더해준다. 이러한 계산은 컴퓨터가 빠르게 계산할 수 있고 많은 곳에서 활용된다.
예를 들어서
1. 두 벡터가 직교인지 판별
2. 물체의 앞 뒤 판별
3. 시야각 영역안에 물체가 있는지 밖에있는지
4. 벡터를 다른벡터에 투영시킬 때 사용
5. 평면의 방정식이 유도되고 이것으로 절두체를 생성한다.
백터의 외적
벡터의 외적 연산은 3차원에서만 가능하다.
두 벡터의 외적은 두 벡터에 수직인 새로운 벡터를 생성합니다
v1 = (x1, y1, z1), v2 = (x2, y2, z2)
v1 X v2 = (y1z2 - y2z1, z1x2- z2x1, x1y2 - x2y1)
각 축의 나머지 축 들을 곱해서 빼준다.
`벡터의 외적은 벡터의 내적으로만은 부족한 부분을 보충`해준다.
1. 두 벡터의 평행성 판별
2. 물체의 좌 우 판별
3. 두개의 벡터로 생성된 평면에 수직인 벡터를 만들수 있다. 즉, 평면의 방향을 파악할 수 있다.
4. 3차원 공간을 구성하는 3가지 축을 모두 외적을 사용하여 계산할 수 있다. ( 면접 단골 질문이라고 한다 )
벡터 v를 기준으로 로컬 좌표축을 구성하는 방법
기준 벡터 v 와 두개의 수직인 보조 벡터 Y와 x를 사용하여 로컬 좌표축 x,y,z를 구성
x(local) = v x Y / |v X Y|
v 와 Y의 외적결과를 정규화 하여 단위벡터로 만든다.
z(local = v / |v|)
z(local)은 단순하게 v벡터를 정규화하여 단위벡터로 만든다.
y(local) = z x x
z(local)과 x(local)의 외적을 통해 구성한다.
벡터의 내적을 사용하면 두 벡터가 수직인지 알수있고,
벡터의 내적의 결과는
스칼라
이다
벡터의 외적을 사용하면 두 벡터에 대해서 수직인 새로운 벡터를 생성할 수 있다.
벡터의 외적의 결과는
벡터
이다.