3D 게임 엔진은 어떻게 3D 환경을 2D 화면으로 렌더링합니까?


9

2D 스프라이트 게임의 경우 스프라이트가 X 및 Y 축에서 이동한다는 것을 이해할 수 있습니다. 그러나 3D 게임의 경우 게임 엔진은 평면 2D 컴퓨터 모니터에서 3D 환경을 렌더링하는 방법을 어떻게 계산합니까?


18
수학.
감속 캐비어

3
Magic Imps는 토지를 디자인 한 다음 마술 지팡이를 사용하여 화면에 이미지를 촬영합니다.

Math.PI, 그것의 많은.
Nick Bedford

답변:


10

3D 스프라이트는 X / Y 평면에서 깊이, 스케일링 크기 및 움직임을 저장하는 새로운 Z 축을 얻습니다. 더 멀리있는 스프라이트는 Z 값이 더 큽니다. 이제 스프라이트의 크기와 X / Y 축 이동을 Z 축으로 나눕니다. 다른 사람들이 지적했듯이, 이것은 3D 투시 투영 입니다. 내가 찾을 수있는 가장 좋은 그림은 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

더 멀리있는 것은 작게 보이기 때문에 개념적으로 의미가 있습니다. 그들의 명백한 움직임도 더 작게 보입니다.

또한 원거리 오브젝트 위에 근거리 오브젝트를 그려야합니다. 다시 말하지만, 이는 가까운 물체가 뒤에있는 물체의 시야를 가리기 때문에 개념적으로 의미가 있습니다.

이 기술들은 스프라이트 레벨에서 구현 될 수 있습니다. 그러나 가장 사실적인 투영의 경우 각 스프라이트에는 3D 모델이 있으며 픽셀 수준에서 렌더링됩니다.


2
다이어그램은 내게 도착한 것입니다. 그림은 천 단어의 가치가 있습니다.
김정우

17

카메라로 세상의 2D 사진을 캡처하는 방법과 비슷합니다. 3D 환경은 X, Y 및 Z 좌표로 설명되지만 궁극적으로 X 및 Y 축만있는 2D 화면에 매핑해야합니다. 이것은 각 3D 점이 2D 뷰 평면 에 투영 되는 투영 에 의해 수행됩니다 .

간단히 말해, 뷰 평면을 통과하여 3D 공간의 가상 카메라에서 각 3D 점으로가는 투영선을 상상할 수 있습니다. 투영 선이 2D 평면과 교차하는 점은 3D 점의 투영입니다. 직교 투영에서이 투영선은 모두 평행입니다. 물체와 카메라 사이의 거리는 투영 된 모양에 아무런 차이가 없습니다. 이 유형의 투영은 현실적이지 않지만 3D 엔진 (예 : HUD)을 사용하여 2D 그래픽을 그리는 등의 특정 경우에 유용합니다. 다른 유형의 투영은 이러한 선이 수렴하여 더 먼 물체를 더 작게 보이고보다 사실적인 결과를 제공하는 원근 투영입니다. 이 페이지에는 프로세스를 시각화하는 데 도움 이되는 몇 가지 그림 이 있습니다.

투영은 그래픽 파이프 라인 에서 수행되는 여러 변형 개체 중 하나 이며 일반적으로 투영 행렬을 사용하여 수행됩니다 . 투영이 Z 좌표를 버리는 것을 의미하지만 실제로 변환 된 Z 값은 여전히 ​​화면 깊이 측정에 사용되므로 어떤 객체가 표시되고 어떤 객체가 다른 객체에 의해 가려져 있는지 알 수 있습니다. 이것을 z- 버퍼링이라고 합니다.


5

그것은 우수한 차원의 다른 공간에서 공간을 정의 할 수있는 기하학적 연산 인 projection 에 관한 것입니다 (기본적으로 3D 환경의 2D 이미지를 설명합니다).

간단히 말해서, 이것은 3D 렌더링 엔진이 이미지를 생성하는 방법입니다 (3D 장면 및 투영이 제공됨).

결과 이미지의 각 픽셀

  • 투사 방향에 따라 투사 방향을 계산합니다. 기본적으로 3D 벡터입니다.
  • 이 방향으로 "본"장면에서 가장 가까운 물체를 찾으십시오 (벡터와 교차하는 물체를 추측하고 가장 가까운 물체를 유지하십시오).
  • 이 객체의 색상을 계산하면 픽셀의 색상이됩니다!

물론 이것은 단순한 모델이며 연기와 같은 특수 효과의 반사 / 굴절 / 반투명 물체에 대해서는 이야기하지 않습니다 ...


2

매트릭스 . 또는 많은 행렬 수학.

미숙 한 사람들에게는 무서운 일입니다. 공간의 3D 좌표를 화면의 2D 좌표로 변환하는 데 일반적으로 3 개의 4x4 매트릭스가 있습니다 (화면의 깊이를 Z로 포함).

3D 행렬은 4x4 격자로 배열 된 16 개의 부동 소수점 값 집합입니다. 알고리즘은 필요한 값을 생성 한 다음 행렬 벡터 곱셈을 사용하여 3 차원 벡터 (X, Y, Z)를 변환합니다.

[ 1, 0, 0, 0 ]
[ 0, 1, 0, 0 ]
[ 0, 0, 1, 0 ]
[ 0, 0, 0, 1 ]

이것이 항등 행렬입니다. 본질적 으로 벡터의 좌표 에는 아무런 영향미치지 않습니다 .


모델

첫 번째는 월드 또는 모델 매트릭스입니다. 이 행렬은 원점 (0, 0, 0)을 중심으로 모델링 된 개별 모델 (예 : 상자)의 정점을 가져와 월드 정점 좌표로 변환합니다. 여기에는 객체의 크기를 조정하고 원점을 중심으로 회전 한 다음 장면에있는 곳으로 객체를 변환하는 것이 포함될 수 있습니다.


전망

두 번째 행렬은 행렬입니다. 월드 좌표를 가져 와서 뷰의 맥락 안에 있도록 변환합니다. 카메라의 개념은 일반적으로이 매트릭스를 생성하는 데 사용됩니다.

카메라에는 일반적으로 위치 벡터, 방향 또는 대상 벡터 및 위쪽 벡터가 포함됩니다. 이 위로 벡터는 카메라의 '스핀'을 나타냅니다.

여기에 이미지 설명을 입력하십시오

이 벡터는라고 무엇을 생성하는 데 사용됩니다 행렬.

이것이 미치는 영향 은 기본적으로 카메라 를 "포지셔닝"하기 위해 카메라 주변의 세계를 회전하고 변환한다는 점에서 월드 매트릭스 와 유사합니다 .

X 축을 따라 10 단위 인 카메라는 다른 방향으로 월드 좌표를 10 단위로 변환합니다.


투사

퍼즐의 마지막 조각은 투영 행렬입니다. 카메라와 같은 원근 투영에서 매트릭스는 거의 화면 좌표를 변환하여 x 도의 시야각으로 원근감을 착시시킵니다.

640x480 게임의 경우 화면 모서리를 생각하면 투영이 화면의 2D 좌표 내에서 Z 축을 따라 좌표를 "정렬"하는 방식입니다. 직교 투영의 경우 Z 축을 따라 화면에 배율이 조정되지 않습니다. 원근감은 물체가 멀수록 화면의 범위와 관련하여 작아집니다.

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.