[Unity]/[게임 엔진]

[게임 엔진] 1. 렌더링 엔진(1) - 렌더링 기초

극꼼 2023. 10. 18. 19:44
반응형


3차원 씬을 렌더링하는 과정을 대략적으로 살펴보면 다음과 같습니다.

가상의 씬이 있고, 상 표면이 붙어있는 가상의 카메라가 있습니다. 상 표면은 픽셀 단위의 빛 센서들이 모여있고, 렌더링 엔진이 렌더링 방정식을 통해 다양한 광원의 속성과 표면의 시각적인 속성으로 색과 강도를 계산해서 상 표면의 픽셀에 나타내줍니다.

게임 렌더링 엔진의 주된 작업은 표면을 렌더링하는 것입니다. 그 외의 일정한 형상이 없는 물체는 파티클을 써서 표현합니다.


렌더링을 배우기 앞서 기본적인 개념들을 배워봅시다.

 

1. 삼각형 메시

다음과 같은 이유로 실시간 렌더링에 주로 사용됩니다.

  • 가장 단순한 다각형으로, 꼭지점이 3개여서 항상 평평할 수 밖에 없음
  • 대부분의 변환을 거쳐도 삼각형(최악의 경우 선)

삼각형 하나는 정점을 나타내는 위치 벡터(p1, p2, p3) 정의되며, 삼각형의 어느 쪽이 전면인지는 감기 순서(시계 방향 또는 반시계 방향) 따라 결정됩니다.

 

메시를 정의하는 방법에는 다음과 같은 것들이 있습니다.

  1. 삼각형 리스트 : 정점을 3개씩 묶어서 리스트로 만듭니다.
  2. 인덱스 삼각형 리스트 : 위의 방법은 정점이 중복되기 때문에 메모리를 낭비합니다. 따라서 정점 버퍼에 정점 리스트를 저장하고, 인덱스 버퍼에 정점을 3개씩 묶어서 인덱스 리스트를 저장해줍니다. 정점 캐시 최적화 도구를 사용하면 캐시 재사용성이 최대가 되도록 삼각형의 순서를 규칙성있게 재배열해줍니다.
  3. 삼각형 스트립, 사각형 팬같은 특수한 자료구조 사용 : 인덱스 버퍼를 사용할 필요가 없고, 정점이 배열되는 순서로 사막형을 어떻게 구성할지 미리 정의합니다. 그에 따라 메모리 절약과 GPU가 RAM에 접근할 때 캐시 일관성을 향상시킨다는 장점이 있습니다.
    1) 삼각형 스트립 : 첫 정점 3개가 삼각형을 이루고, 그 다음부터 나오는 정점이 이전 정점 2개랑 새로운 삼각형을 만듭니다.
    2) 사각형 팬 : 첫 정점 3개가 삼각형을 이루고, 새로운 정점은 그 직전 정점과 맨 처음 정점으로 새로운 삼각형을 만듭니다.

메시를 복사해서 만드는 메시 인스턴스는 공통 메시 데이터에 대한 참조와 모델 공간에서 월드 공간으로 변환하는 변환 행렬을 가집니다.

 

2. 테셀레이션

표면을 여러개의 분할된 다각형(쿼드)으로 쪼개는 과정입니다. 테셀레이션이 고정되어 있으면 카메라가 가까워질수록 물체의 윤곽이 거칠어보이는 것입니다. 이런 문제가 없게 하기 위해 동적 테셀레이션으로 카메라가 가까워질수록 테셀레이션을 증가시켜서 일정하게 삼각형과 픽셀의 밀도를 유지합니다.

LOD(level of detail) : 붙는 숫자가 작을수록 높은 테셀레이션 레벨을 가지며, 카메라가 멀어질수록 LOD 0, LOD 1, LOD 2 … 로 전환됩니다.

동적 테셀레이션을 구현하는 방법에는 여러가지가 있습니다.

  • 격자 패턴으로 된 높이 필드를 이용해 메시를 나타내기도 합니다. 카메라가 가까워질수록 촘촘해짐. 범위가 넓은 물, 지형에 적용할 때 사용하는 방식입니다.
  • 점진적 메시 : 고밀도 메시(보통 LOD 0)를 만들고, 카메라가 멀어질수록 메시의 모서리를 없앱니다.

 

3. 컴퓨터 그래픽에 쓰이는 빛과 색

렌더링 엔진이 고려해야 하는 빛의 세가지 요소는 흡수, 반사, 굴절이 있습니다.

  • 반사는 난반사가 될 수도, 정반사가 될 수도 있습니다.
  • 파장에 따라 굴절각이 달라지는데, 이 때 스펙트럼 확산이 발생합니다.
  • 빛이 표면에 부딪힐 때 몇 가지 파장은 흡수되고 나머지는 반사됩니다.

색 모델 : 색을 측정하는 3차원 좌표계입니다. 컴퓨터 그래픽에서 가장 널리 쓰이는 색 모델은 RGB 모델로 (0,0,0)이 검정, (1,1,1)이 흰색이며, 거기에 불투명도인 알파 채널을 더한게 RGBA 또는 ARGB입니다.

 

4. 표면의 시각적인 속성

한 표면의 시각적인 속성을 나타내는 가장 단순한 방법이 표면의 점들에 속성을 지정하는 것입니다. 이걸 정점 속성이라 부릅니다. 

일반적인 삼각형 메시의 각 정점에는 다음과 같은 속성들의 일부 또는 전부가 담겨있습니다 : 위치 벡터, 정점 법선, 정점 탄젠트, 바이탄젠트, 난반사 색, 정반사 색, 텍스처 좌표, 스키닝 가중치.

 

이러한 정점 속성을 저장하는 자료 구조 레이아웃을 정점 형식이라 합니다. 보통 의 구조체나 C++ 클래스의 자료 구조를 사용합니다. 위에 적힌 정점 속성을 조합할 수 있는 방법의 가짓 수는 엄청나게 많은데, 이런 여러가지의 정점 형식을 처리하는 것은 그래픽 프로그래머의 골칫거리가 됩니다. 그래서 정점 조합 중 일부만 사용하게 제한하기도 하고, 일부 GPU는 정점 자료 구조에서 필요한 속성을 뽑아내는 기능이 있기도 합니다.

 

픽셀 단위의 속성이 필요할 때 정점 속성을 가지고 속성 보간을 합니다. 대표적인 방법으로 고로 셰이딩이 있는데, 고로 셰이딩은 정점 단위의 속성 데이터를 선형으로 보간합니다. 정육면체가 있을 때 한 면의 네개의 정점의 법선이 모두 같을 경우 한 가지 색상으로 보이고, 법선이 서로 달라질 경우 그라데이션이 됩니다.

 

5. 텍스처

정점 단위로 표면 속성으로 표면을 그리면 테셀레이션 레벨이 낮은 경우 표면이 이상하게 보일 수 있습니다. 이 때 사용하는 것이 텍스처 맵이라 불리는 비트맵 이미지입니다. 텍스처에는 색 정보가 들어있고 메시의 삼각형 위에 투영됩니다. 

 

* 텍셀 : 화면에 픽셀이 기본 단위로 있는 것처럼 텍셀은 텍스처의 기본 단위입니다.

* 텍스처 좌표 : 정점마다 텍스처 공간((0,0~(1,1) 범위의 공간) 내의 좌표를 지정하는데, 이를 텍스처 좌표라 합니다.

 

<텍스처의 종류>

  • 난반사 맵 : 알베도 맵이라고도 하며 가장 널리 쓰임. 텍셀에 표면의 난반사 색을 가짐
  • 법선 맵 : 각 텍셀의 단위 법선 벡터를 가지고 있고, RGB 형식
  • 글로스 맵 : 각 텍셀 표면이 얼마나 반짝이는지
  • 환경 맵 : 반사 효과를 렌더링하기 위해 주변 환경 이미지를 담고 있음

<그래픽 하드웨어가 텍스처 좌표가 [0,] 범위를 벗어날 경우 처리하는 방식>

  • 반복
  • 거울
  • 고정(텍스처의 경계 텍셀 색 사용)
  • 경계 색(사용자가 지정한 색 사용)

 

<압축 텍스처>

요즘 대부분의 그래픽 카드와 그래픽 API들은 압축 텍스처를 지원합니다. 기본적인 원리는 4*4 블록의 필섹 단위로 나누고 작은 색 팔레트로 각 블록의 색을 저장하는 것입니다. 압축 텍스처에는 렌더링이 빠르고, 인접한 픽셀들이 64 또는 128 비트의 워드 하나에 담겨서 캐시 성능에 유리한 메모리 접근 패턴이고, 텍스처의 더 많은 부분이 한 번에 캐시에 올라갈 수 있다는 장점들이 있습니다.

 

<밉맵>

픽셀 하나 당 몇 개의 텍셀이 사용되는지에 대한 밀도는 항상 1에 가깝게 유지되는 것이 좋은데, 이를 위해 사용하는 기법을 밉맵이라 부릅니다. 텍스처마다 해상도가 낮아지는 비트맵을 만드는데, 각각의 이미지를 밉맵 또는 밉 레벨이라 부릅니다.

(ex) 64 * 64 텍스처는 다음과 같은 밉맵을 가짐 : 64 * 64, 32 * 32, 16 * 16, 8 * 8, 4 * 4, 2 * 2, 1 * 1

 

* 월드 공간에서의 텍셀 밀도를 꼭 1에 맞출 필요는 없지만, 물체마다 일관된 밀도를 가지게 하지 않으면 해상도 차이가 나게 됩니다.

 

<텍스처 필터링>

렌더링할 때 그래픽 하드웨어는 텍스처 공간에서 픽셀 중심의 위치를 보고 텍스처 맵을 샘플링하는데, 텍셀과 픽셀이 일대일로 맞아 떨어지는 경우가 드물어서 여러 텍셀을 샘플링해 이걸 블렌딩한 후 최종적인 텍셀의 색을 결정합니다.

  • 근접 샘플 필더링 : 매우 조잡한 방식으로 픽셀 중심과 가장 가까운 텍셀 선택
  • 이중선형 필터링 : 픽셀 중심을 둘러싼 4개의 텍셀들을 샘플링해서 가중 평균
  • 삼중선형 필터링 : 가장 가까운 두 밉 레벨 모두에 이중선형 필터링을 적용한 후 그 결과를 선형 보간
  • 비등방성 필터링 : 이중, 삼중선형 필터링은 둘 다 2 * 2 블록의 텍셀을 샘플링하는데, 이는 비스듬히 볼 때 괜찮지 않음. 비등방성 필터링은 바라보는 각도에 맞게 사다리꼴 영역의 텍셀을 샘플링해서 품질을 향상시킴

 

6. 머티리얼

Material은 메시의 시각적인 속성입니다. 메시와 머티리얼이 있으면 렌더링을 위한 모든 정보를 갖추었다고 볼 수 있습니다. 3D 모델은 여러 개의 머티리얼을 사용하는데, 여러개의 서브메시로 나눠서 각각 1개의 머티리얼에 연결합니다.


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

반응형