3D 게임 엔진은 어떻게 3D 환경을 2D 화면으로 렌더링합니까? 스프라이트가 X 및 Y 축에서 이동한다는

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



답변

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

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

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

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


답변

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

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

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


답변

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

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

결과 이미지의 각 픽셀

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

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


답변

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

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

3D 행렬은 4×4 격자로 배열 된 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 도의 시야각으로 원근감을 착시시킵니다.

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