[Unity]/[게임 엔진]

[게임 엔진] 1. 렌더링 엔진(3) - 가상 카메라

극꼼 2023. 11. 16. 22:52
반응형


<가상 카메라>

: 초점과 감광 표면으로 이루어져 있습니다.

감광 표면은 직사각형 형태의 가상의 감광 센서들이 격자 모양으로 이루고 있고, 각 센서는 픽셀 하나에 해당합니다. 이 센서들에 기록될 색과 빛의 강도를 결정하는 과정이 렌더링 입니다.

 

1) 뷰 공간

가상 카메라의 원점 = 뷰 공간의 원점이며, 카메라의 위치와 방향은 뷰-월드 행렬로 나타낼 수 있습니다.

  • 삼각형 메시 렌더링 : 정점 -> 모델 공간에서 월드 공간으로 변환(모델-월드 행렬 사용) -> 월드 공간에서 뷰 공간으로 변환(월드-뷰 행렬로, 뷰-월드 행렬의 역행렬)
    • 모델-월드 행렬 * 월드-뷰 행렬 = 모델-뷰 행렬
      이렇게 모델-뷰 행렬을 미리 계산해서 정점을 모델 공간에서 뷰 공간으로 변환할 때 행렬 곱셈을 한 번만 해도 되게 합니다.

 

2) 투영

: 3D 장면을 2D 이미지 평면에 렌더링하기 위한 특수한 변환입니다.

  • 원근 투영(perspective projection) : 진짜 카메라가 찍는 효과를 내주고, 카메라에서 물체가 멀수록 작게(원근 단축) 보이게 합니다.
  • 직교 투영(orthographic projection) : 카메라와 물체의 거리는 고려하지 않습니다.

 

3) 뷰 볼륨

: 카메라가 볼 수 있는 영역으로, 가상 감광 표면에 해당하는 근 평면(near plane), 가상 스크린의 경계인 4개의 옆 평면, 깊이 버퍼에 저장될 최대 깊이를 정의하는 원 평면(far plane) 이렇게 6개의 평면으로 정의합니다. 아래 이미지는 원근 투영에 사용되는 뷰 볼륨입니다. 직교 투영의 경우 직육면체 모양이 됩니다.

 

4) 동차 클립 공간

: 뷰 공간의 점들입니다. 투영 종류나 스크린의 해상도, 화면 비율 등에 무관한 표준적인 뷰 볼륨으로 변환하는 역할을 합니다.
클립 공간의 표준적인 뷰 볼륨은 직육면제 프리즘 형태입니다.

 

5) 스크린 공간

: 2차원 좌표계로, 좌표축의 단위는 스크린 픽셀입니다.

  • 화면 비율 : 스크린 너비 대 높이 비율
  • 스크린 매핑 : 클립 공간 좌표들을 스크린 공간에 위치하게 적당히 스케일하고 이동시키는 것

 

6) 프레임 버퍼

: 비트맵 컬러 버퍼로, 렌더링한 최종 이미지를 저장하는 곳입니다. 디스플레이 하드웨어는 프레임 버퍼의 내용을 주기적으로 읽습니다.

  • 이중 버퍼링 : 디스플레이 하드웨어가 하나의 버퍼를 읽은 동안 다른 버퍼를 업데이트해야 하기 때문에, 렌더링 엔진에 프레임 버퍼가 2개 있는 것입니다.
    • 테어링 현상 : 새 프레임을 그리는 동안 이전 프레임의 내용이 보이는 것으로, 이중 버퍼링은 이 현상을 막기 위해 수직 귀선 기간(vertical blanking interval. CRT의 전자총이 왼쪽 위로 다시 돌아가는 기간) 동안 두 버퍼를 교체합니다.
  • 삼중 버퍼링 : 엔진에 프레임 버퍼가 3개 있는 것입니다. 하드웨어가 1번 버퍼를 읽는 동안 2번 버퍼를 완성하고, 3번 버퍼에 새 프레임을 그릴 수 있습니다.
  • 렌더 타깃 : 렌더링 엔진이 그림을 그릴 수 있는 버퍼입니다. 중간 렌더링 결과를 저장하는 깊이 버퍼, 스텐실 버퍼 등 다양한 버퍼들이 있습니다.

 

7) 삼각형 래스터화

: 삼각형이 걸쳐 있는 픽셀들을 채워서 삼각형 이미지를 화면에 그리는 것을 래스터화라고 합니다. 

  • 단편 : 삼각형의 표면으로, 각 단편은 스크린의 한 픽셀에 들어가는 삼각형의 표면 영역입니다. 단편은 여러 테스트를 거쳐 검증된 후 색이 결정되고, 단편의 색은 프레임 버퍼에 기록되거나 기존의 픽셀 색과 블렌딩 됩니다.

 

8) 깊이 버퍼

: z-버퍼. 모든 단편은 z 좌표를 가지는데, 여러 단편 중 카메라에 가장 가까운 단편을 프레임 버퍼에 기록하고, 그렇지 않은 단편은 버립니다.

  • z-다툼 : 두 평면이 매우 가까울 때 멀리 있는 평면의 픽셀들이 가까운 쪽의 평면을 뚫고 들어오는 현상입니다. 정밀도를 가지게 해야 이를 최소화할수 있습니다.
  • w-버퍼 : z-버퍼는 카메라에서 멀어질수록 정밀도가 낮아지는데, w-버퍼는 전체 깊이 내에서 균등한 정밀도를 가집니다. 단점으로는 깊이 값을 직접 선형 보간할 수 없다는 점이 있습니다.

출처 도서 : http://acornpub.co.kr/book/game-engine-architecture-3e

반응형