자욱한 안개가 걷히고 웅장한 숲이 모습을 보이기 시작한다. 수많은 나무들과 그앞에 수많은 건축물이 있다. 거대한 나무와 건물사이로 웅장한 풍경을 볼수 있을 것이다.

image.png

image.png

우리는 이런 풍경을 게임에서 종종 흔하게 볼수 있다. 이런장면은 표현 하는 패턴을 ‘경량’ 패턴이라고한다.

숲에 들어갈 나무들

구비구비 뻗어 있는 숲을 글로는 표현하기 어렵지만, 실시간 게임에서 구현하는 것은 전혀 다른 얘기다. 우리가 나무들이 화면을 빽빽하게 채워진 숲을 볼때, 그래픽스 프로그래머는 1초에 60번씩 GPU가 전달해야 하는 몇백만개의 폴리곤을 본다.

수천 그루가 넘는 나무마다 각각 수천개의 폴리곤 형태로 표현을 해야 할것이다. 메모리가 충분하다 해도 렌더링을 하다보면 CPU에서 GPU로 통해 전달해야 한다.

나무마다 필요한 데이터는 다음과 같다.

  1. 줄기, 가지, 잎사귀의 형태를 나타내는 폴리곤 메쉬
  2. 나무 껍질과 잎사귀의 텍스쳐
  3. 숲에서의 위치와 방향
  4. 각각의 나무마다 색, 크기 등등 다른 설정값

코드로 표현해보자면 다음과 같을 것이다.

class Tree
{
private:
  Mesh mesh_;
  Texture bark_;
  Texture leaves_;
  Vector position_;
  double height_;
  double thickness_;
  Color barkTint_;
  Color leafTint_;
};