지난 기고에서는 언리얼 엔진 4와 유니티 엔진에 대한 전반적인 비교를 진행해보았습니다. 이번 기고부터는 각 엔진이 제공하는 기술을 직접 파헤쳐보는 컨셉으로 두 엔진을 비교해 보겠습니다.
이번 GDC에서 유니티와 언리얼 엔진이 발표한 영상을 보면 흥미로운 점을 발견할 수 있습니다. 주요 기능들을 한눈에 보여주는 동영상 외에 별도로 다른 동영상들도 배포했는데, 유니티는 렌더링 기술을 강조한 영상을 선보였고, 언리얼 엔진 4는 툴을 강조한 영상을 선보였습니다.
유니티 5는 현실감 있는 영상을 보여주면서 마지막에 '하나의 표준 셰이더(Standard Shader)로 물체의 표현 방식을 통합할 수 있다'라는 메시지를 던집니다. 반면, 언리얼 엔진 4는 이와 대조적으로 준비된 데모를 직접 탐험하면서 '새로운 언리얼 에디터로 이들을 얼마나 쉽게 이러한 환경들을 구현할 수 있는지'에 중점을 두어 설명합니다.
동영상 중간에 매우 쉽다고 강조하지만, 필자가 보기엔 '아무 것도 모르는 일반인들도 과연 다루기에 쉬울지'는 사실 의문입니다.
아무튼 두 엔진 회사들의 동영상이 강조하는 공통 분모는 물리 기반 셰이딩(Physically Based Shading) 기술이 만드는 새로운 3D 그래픽 세상입니다. 과연 물리 기반 셰이딩 기술은 어떤 것이길래 두 엔진들이 이를 강조하는지, 이를 알아보기 위해 먼저 셰이더 기술에 대해 간략히 살펴보도록 합시다.
■ 셰이더(Shader) 기술 게임에서 만들어지는 3D 컴퓨터 그래픽은 우리가 극장에서 접하는 3D 컴퓨터 애니메이션 기술과 다르게 사용자의 입력에 반응하여 실시간으로 화면을 만들어내야 한다는 특징을 가지고 있습니다. 극장용 애니메이션은 시간이 얼마나 걸리든 상관 없이 이미지를 한 장 한 장씩 만든 후 나중에 동영상으로 취합하여 재생하면 되지만, 게임은 제작 과정이 다릅니다.
만약에 여러분이 1920 x 1024 해상도를 가지는 환경에서 60프레임으로 부드럽게 움직이는 게임을 돌린다면 여러분들의 컴퓨터는 1,966,080개의 색상정보를 0.017초마다 만들어내야 하는 것을 의미합니다. 이렇게 실시간으로 빠르게 렌더링을 수행해야 하는 3D 컴퓨터 그래픽 기술을 다른말로 실시간 렌더링(Realtime Rendering)이라고 합니다.
게임에서 사용하는 실시간 렌더링 기술은 2000년대 초반에 GPU라 불리는 그래픽 하드웨어와 함께 발표된 셰이더(Shader) 기술이 등장하면서 비약적으로 발전하게 됩니다. 이러한 셰이더 기술은 적극적으로 활용한 게임들은 이전과는 다른 속된 말로 '정말 쩌는' 3D 그래픽의 퀄리티를 보여주었는데, 셰이더 기술을 도입한 콘솔 기기들에게 큰 흥행까지 안겨주게 됩니다.
이렇게 한 차원 다른 게임 그래픽을 만들어주는 셰이더란, 물체의 질감을 표현하기 위한 수학적인 공식을 GPU 그래픽 카드가 이해하는 프로그램으로 만들어 놓는 것에 불과합니다. 하지만, 이 프로그램을 GPU에 전달하면 GPU는 이를 받아 모니터 해상도 수 만큼의 색상 정보를 고속으로 빠르게 계산하여 최종 화면을 만들어냅니다.
이러한 셰이더 기술의 발전은 게임의 그래픽을 담당하는 아티스트에게도 영향을 미치게 됩니다. 아티스트는 자신이 게임 엔진이 아닌 외부에서 제작한 아트웍이 게임 시스템에서도 동일하게 보여지기 위해서 이러한 셰이더 기술에 대해서 관심을 가지게 됩니다.
예를 들면, 아래는 유니티에서 물체에 기본적인 음영과 하이라이팅 효과를 부여하는 스페큘러 모델을 구현한 셰이더입니다. 이 스페큘러 모델은 반짝임(Shininess) 혹은 스페큘러 파워(Power)라고 불리는 수치를 조정해 물체가 반사되는 하이라이팅 영역을 조절하는 것이 특징입니다.
그러면 이를 작업하는 아티스트들은 당연하게도 자신들이 조절하는 수치가 도데체 어떤 것을 의미하는지 의문이 들 것입니다. 하지만 이에 대해 조사를 하다보면 이를 이해하기 위해서는 아래 그림의 셰이더 공식을 이해해야 한다는 것을 깨닫게 되고, 보통 '멘붕'에 빠지게 됩니다.
■ 물리 기반 셰이딩(Physically Based Shading) 기술이란? 물리 기반 셰이딩은 셰이더라는 기술에 대해 잘 모르더라도 누구나 물체의 질감을 현실감있게 표현할 수 있게 만들어주는 셰이더 기술입니다.
예를 들어, 분필은 투박하여 반사량이 희박한데 비해 매끈한 마루바닥은 주위 환경을 반사하는 성질이 있다는 것은 누가 알려주지 않았지만 우리가 살면서 몸으로 터득하는 상식입니다.
물리 기반 셰이딩은 이처럼 우리가 익히 아는 상식의 기준으로 물체를 표현합니다. 일반인들에게 생소한 설정을 제시했던 예전 셰이더 개발 방법과 달리 물리 기반 셰이딩은 좀더 상식적인 질문을 작업자에게 던집니다.
- 물체 표면이 거친지, 매끄러운지. - 물체가 금속성을 띄는지. - 물체의 반사 능력은 얼마나 되는지.
분필의 반사 능력이 약한 이유는 우리 눈에는 잘 보이지 않는 미세 표면(Microfacet)들이 불규칙하게 구성되어 있어서 빛을 방향으로 보내기 때문입니다.
반대로 매끈한 미세 표면을 가지는 물체들은 반사 능력이 뛰어납니다.
물리 기반 셰이딩에서는 이러한 특징을 반영하기 위해 거칠기(Roughness)라는 수치를 제공합니다. 아래 그림은 언리얼 엔진4 에서 거칠기 값에 따라 물체의 질감이 달라지는 예시입니다. (상단 언리얼 엔진4 동영상의 3분 20초 부분 참고 : 영상 바로가기)
두 번째인 금속 속성은 금속의 특수한 성질을 지정하는 기능입니다.
현실 세계의 금속은 앞서서 살펴본 분필이나 마루바닥과 다르게 아래 그림과 같이 빛의 입자가 표면에 들어오면 에너지를 흡수한 후, 자신의 고유한 색으로 주위 환경을 반사하는 성질이 있습니다.
물리 기반 셰이딩에서는 이러한 현상을 반영하도록 금속성(Metalic)이라는 수치를 제공합니다. 아래 그림은 언리얼 엔진4에서 금속성 값에 따라 물체의 질감이 다르게 표현되는 예시입니다. (상단 언리얼 엔진4 동영상의 3분 40초 부분 참고 : 영상 바로가기)
마지막으로 제공되는 반사도 수치를 통해 물체의 반사 능력을 세부적으로 조절할 수 있습니다.
이렇게 3가지 요소로 물체의 질감이 결정되면 현실적으로 자동으로 물체의 명암의 세기가 자동으로 조절됩니다. 이는 물리 기반의 셰이딩 기술이 에너지 보존 법칙에 따라 현실적으로 보이기 위해 들어온 빛의 양보다 더 많이 반사되지 않도록 자동 조절하기 때문입니다.
예전에는 맵의 환경이 변경될 때마다, 셰이더를 일일히 제작해야 했는데, 물리 기반 셰이딩을 사용하면 한번 물체의 질감을 표현하면 알아서 주위 환경을 반영하기 때문에, 이제 아티스트들은 편하게 아트 작업에만 전념할 수 있게 될 것으로 보입니다.
■ 아티스트를 위한 인터페이스 이러한 물리 기반의 셰이딩을 위해서는 각 엔진들은 아티스트들에게 편리한 인터페이스를 제공하고 있습니다.
언리얼 엔진은 예전부터 아티스트들에게 친숙한 블럭에 선을 연결하는 '노드 방식의 에디터'를 제공해왔었는데, 이번에도 물리 기반 셰이딩을 위해 동일한 인터페이스를 제공합니다. 아래 그림은 물체의 표면 색상을 노란색으로 설정한 후, 금속성과 거칠기 수치를 각각 1과 0.2로 조절한 화면입니다.
숫자 외에도 이미지를 사용할 수 있는데, 이미지 내 화소가 가지는 색상 정보를 사용하여 질감을 표현합니다. 예를 들어 이미지 내 화소의 색상이 검정색이면 0으로, 회색은 0.5, 흰색은 1로 사용됩니다.
유니티 5는 물리 기반의 셰이더를 '표준 셰이더(Standard Shader)'라는 이름으로 아래와 같은 인터페이스로 제공합니다.
위의 인터페이스만 보면 유니티 5는 이미지만을 사용하게 구성되어 있습니다. 하지만 유니티 5는 아직 정식 버전이 나온 것은 아니므로, 위의 인터페이스는 추후 변경될 가능성이 있습니다.
물리 기반 셰이딩의 또 다른 특징은 하나의 물체에 대해 영역별로 서로 다른 질감을 표현하는 것이 가능하다는 점입니다.
유니티 5는 이미지를 사용하여 질감의 영역을 구분합니다. 아래 그림은 이를 나타낸 예시인데, 왼쪽은 물체의 반사도를 표현하기 위해 보조적으로 제공되는 이미지입니다.
앞서서 설명했듯이 금속은 빛의 입자를 흡수하고 고유한 색상으로 반사시키는 성질이 있기 때문에 왼쪽 이미지에서 처럼 금속 영역에 색상을 설정하고, 금속이 아닌 부분은 무채색으로 설정한 것을 볼 수 있습니다.
언리얼 엔진 4의 경우에는 보조 이미지를 추가로 사용하여 물체의 영역을 구분하는 방법을 사용합니다. 물체의 영역이 구분되면 아티스트는 만들어진 물리적인 질감을 각 영역별로 설정할 수 있습니다.
아래 그림에서 왼쪽 이미지에서 보이는 붉은색, 녹색, 파란색은 보조 이미지로 구분된 영역을 나 타낸 예시입니다. 이 각 영역들에 다른 물리 기반 셰이딩을 적용하여 오른쪽 그림과 같은 효과가 나오게 됩니다.
언리얼 엔진 4에서는 특별히 이 기술에 레이어드 머티리얼(Layered Material)이라는 이름을 붙였습니다. 예전에는 이와 유사한 기능을 만들기 위해 복잡한 셰이더를 직접 만들어야 했는데 이제 누구나 간편하게 만들 수 있게 되었습니다.
현재 공개된 자료로 물리 기반 셰이더를 비교한다면 필자는 언리얼 엔진 4에 점수를 주고 싶습니다. 여러 장의 이미지를 사용하여 질감 영역을 다르게 설정하는 방식보다 한 장의 이미지로 영역을 먼저 구분한 후, 각각 질감을 설정하는 방식이 추후 확장하기 편하기 때문입니다.
언리얼 엔진 4에서는 이에 더 나아가 영역 구분에 사용하는 이미지를 게임 실행 중에 변경하는 것이 가능합니다.
아래 그림은 이미지로 물체를 투명한 영역과 불투명한 영역으로 나눈 후, 실행 중에 이미지를 변경하여 애니메이션을 구현한 예시입니다. 이 기술을 언리얼 엔진 4에서는 특별히 머티리얼 인스턴싱(Material Instancing)이라고 합니다.
이전에는 아래와 비슷한 효과를 내기 위해 부위별로 3차원 모델링 데이터를 일일히 만들어야하는 번거로움이 있었는데, 이제 한장의 이미지와 간단한 스크립팅으로 누구나 구현할 수 있는 시대가 되었습니다.
하지만 아직 유니티 5는 정식 버전 출시가 안 되었기 때문에, 필자의 이런 비교는 조금 성급할 수 있다는 점도 감안해주시기 바랍니다.
■ 결론 지금까지 유니티 5와 언리얼 엔진 4의 공통된 특징인 물리 기반 셰이딩에 대해서 살펴보았습니다.
게임 엔진 기술이 발전하고, 점점 사용하기 쉬운 인터페이스를 제공하면서, 이제 게임 제작은 컴퓨터 기술에 정통한 엔지니어들이 전체적인 것을 담당하는 시대에서 표현에 대한 부분은 아티스트가, 핵심 기술 구현에 대한 부분은 프로그래머가 양분하는 양상으로 변하고 있습니다.
개인적으로는 점점 더 아티스트에 친화적인 인터페이스를 제공하는 두 엔진을 활용하여, 앞으로 소규모 인디 개발팀들이 어디까지 그래픽 퀄리티를 올릴 수 있는지 많이 기대가 됩니다.