[Unity]/[게임 엔진]

[게임 엔진] 1. 렌더링 엔진(4) - 시각 효과와 오버레이

극꼼 2023. 11. 17. 12:23
반응형


1) 파티클 효과

: 연기, 불꽃 등 일정한 형상이 없는 물체를 구현한 것입니다. 실제 게임 엔진에서는 특수화된 파티클 효과 애니메이션 및 렌더링 시스템을 사용해 파티클 효과를 구현합니다.

파티클 효과의 주요 특징은 다음과 같습니다.

  • 상대적으로 단순한 기하 형상들이 여러개 모여 이뤄지며, 항상 카메라를 향합니다.
  • 머티리얼이 거의 예외없이 반투명합니다.
  • 다양한 방향으로 애니메이션합니다.
  • 계속 스폰되었다가 없어집니다.

 

2) 데칼

: 기하 형상들의 표면에 씌우는 작은 기하 형상으로, 표면의 외양을 바꾸는데 쓰입니다. (ex) 총탄 흔적, 발자국, 긁힌 자국, 갈라진 흔적

  • 데칼을 사각형 영역으로 모델링 -> 화면에 일직선으로 투영해서 3차원 공간에 직육면체 프리즘을 만듦 -> 프리즘이 가장 먼저 교차하는 표면에 데칼이 입혀짐
  • z-다툼이 일어나지 않게 z값을 살짝 조정합니다.

 

3) 환경 효과

: 전용 렌더링 시스템으로 대개 구현됩니다. 하늘, 지형, 물을 예시로 살펴보겠습니다.

  • 하늘
    • 가장 간단한 방법은 3D 물체를 렌더링하기 전에 프레임 버퍼에 하늘 텍스처를 채우는 것입니다. (텍셀 대 픽셀 비율은 1:1에 가깝게) 이 때 모든 3D 물체가 하늘 위에 그려져야 하기 때문에 프레임 버퍼의 깊이 값을 최대한 크게 해야합니다.
    • 요즘 게임 플랫폼에서는 전체 장면을 렌더링한 후에 하늘을 그리는 경우가 많습니다.
      z-버퍼를 최대 z-값으로 채워 초기화 -> 장면을 그림 -> 물체들이 그려지지 않은 곳에 하늘을 그림(z-테스트(최대한 1보다 작게)를 켜고 z-쓰기를 끈 후 하늘을 그림)
    • 플레이어가 모든 방향을 볼 수 있는 게임에서는 돔, 박스형태의 하늘을 사용하기도 합니다.
    • 구름을 그릴 때 전용 렌더링 시스템과 애니메이션 시스템을 구현하는 경우가 많습니다.
  • 지형 : 지표면을 구현하고 다른 요소가 놓일 수 있는 토대를 제공합니다. 마야 같은 도구를 써 직접 모델링하기도 하고, 동적 테셀레이션, LOD시스템을 쓰는 경우도 있습니다.
    • 높이 지형 필드 : 넓은 지형을 모델링하는데 자주 사용됩니다. 그레일 텍스처로 저장해서 데이터가 적은 편입니다.
      • 수평 평면을 일정 격자 패턴으로 테셀레이션 -> 높이 필드 텍스처를 샘플링해 지형 정점의 높이를 얻음
      • 높이 필드를 색칠할 수 있는 전용 도구로 지형지물을 파냄
  • 물 : 호수, 강, 폭포, 분수, 축축한 표면 등등.. 종류마다 특수한 렝더링 기법이 필요합니다. 여러 렌더링 기법과 하부 시스템을 조합해 사용하는 경우가 많습니다.
    • 폭포 - 특수한 물 셰이더 + 밑 부분의 안개에 쓰이는 파티클 효과 + 거품을 표현하는 데칼 형태의 오버레이 + ...

 

4) 오버레이

: GUI 등의 시스템을 그리는데, 주 장면 렌더링을 마친 후에 z-테스트를 끄고 렌더링합니다.

  • 텍스트/폰트 시스템 : 특수한 형태의 2차원 오버레이로 구현됩니다. 텍스트 렌더링 시스템은 문자열에 맞는 글자 글리프들을 화면의 다양한 위치에 적절한 방향으로 그립니다.
    • 글리프들이 들어있는 글리프 아틀라스라는 텍스처 맵으로 폰트를 구현하는 방법
    • 프리타입 등의 폰트 라이브러리를 사용하는 방법
      게임같은 실시간 애플리케이션은 프리타입으로 필요한 글리프들을 미리 아틀라스에 찍고 -> 런타임에 텍스처 맵으로 사용합니다.
    • signed distance field로 글리프 정보를 표현하는 글리프 렌더링 기법
      이 기법을 글리프를 픽스맵에 렌더링하는데, 각 픽셀은 픽셀 중앙으로부터 가장 가까운 글리프의 가장자리까지 부호 있는 거리의 값을 담습니다. 글리프의 안쪽이 음수, 바깥쪽이 양수입니다. 이걸 통해 거리나 보는 각도에 관계없이 픽셀 셰이더에서 매우 정확한 알파 값을 계산하여 부드러운 글자를 그릴 수 있습니다.

 

5) 감마 보정

: CRT 모니터에 선형적으로 증가하는 R, G, B값을 보내면 사람 눈에는 비선형적으로 변하는 것처럼 보여서 어두운 부분이 원래부터 어두워보입니다. 이를 보정하기 위해 렌더링하기 전에 수준높은 렌더링 엔진은 텍스처들을 감마 디코딩하고, 렌더링이 끝난 후 다시 감마 인코딩합니다.

 

6) 풀 스크린 후처리 효과

: 렌더링된 3차원 장면에 적용돼 부가적인 사실성을 더하거나, 멋있는 효과를 냅니다.

원래의 씬이 렌더링한 텍스처 -> 화면 전체 크기의 쿼드에 매핑 -> 렌더링

(ex) 모션 블러(스크린 공간 속도 벡터를 저장하는 버퍼로 블러 처리), DoF 블러(깊이 버퍼를 사용해 블러 처리), 비네트(화면의 모퉁이 부분의 명도 또는 채도를 감소시킴), 채색 효과(후처리 과정에서 스크린 색을 변경)

 


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

반응형