[기고칼럼] 게임엔진, 빛을 정복하라! '언리얼'을 '리얼'하게 만드는 기술

칼럼 | 이득우 대표 기자 | 댓글: 17개 |



이득우 대표님은 유니티 테크놀로지스의 한국 지사에서 이사로 근무하였고, '유니티4 게임 개발의 정석'을 집필한 바 있습니다. 현재는 스킬트리랩 교육 센터에서 게임 개발에 관련된 교육 및 최신 기술 세미나와 함께 인디 게임 개발 행사를 진행하고 있습니다.

스킬트리랩은 동아닷컴 평생교육 아카데미에서 운영하는 지식공유 플랫폼으로, 개발자들의 역량 개발 지원 및 부트 캠프를 통한 프로젝트를 지원하고 있습니다. 또한, 결과물 마케팅에도 관여하여 보다 많은 부가가치를 만들어 내도록 노력하고 있습니다.


* 외부 필진의 기고 내용은 본지의 편집방향과 일치하지 않을 수도 있습니다.





지난 기고에서는 언리얼과 유니티, 두 엔진이 물체를 표현하는 방법에 대해서 살펴보았습니다. 이번 기고에서는 물체를 현실감 있게 만들어 주는 '빛의 표현 방법'에 대해 살펴보겠습니다.



레이트레이싱 기법에 의해 만들어진 컴퓨터 그래픽과 실제 사진의 비교
왼쪽이 그래픽, 오른쪽이 실사

※ 출처 : Zap Andersson, Autodesk Inc. “Everything You Always Wanted to Know About mia_material” 시그래프 2013 발표자료

* 레이트레이싱 (Ray Tracing) : 컴퓨터 그래픽 기술 용어의 하나. 표시할 물체와 광원을 설정하고, 광원에서 나온 빛 줄기가 물체에 반사할 때의 모습을 시뮬레이션해서 색의 짙고 옅음을 표현하는 기법.

위의 두 그림은 얼핏 보면 같은 사진이라고 생각할 수도 있지만, 왼쪽은 컴퓨터가 만든 가상 세계의 사진이고 오른쪽은 현실 세계의 사진입니다.

이렇게 컴퓨터 그래픽 기술은 가상과 현실의 경계가 모호해지는 단계로 발전하고 있는데, 이는 컴퓨터가 현실 세계의 빛이 움직이는 방식을 정확히 탐지하고 빠르게 계산하도록 기술이 점점 발전하고 있기 때문입니다.

게임은 기본적으로 컴퓨터가 만들어낸 언리얼한 가상의 세계입니다. 이 가상의 세계에 게이머들을 초대하여 리얼한 경험을 안겨주기 위해서는, 기술적으로 빛을 정복하는 것이 선행 과제라 할 수 있겠습니다.



게임 엔진에서의 빛의 표현과 활용


게임 엔진에서 빛을 정복하기 위한 첫 걸음은 빛의 근원인 광원을 설정하는 것으로부터 시작됩니다. 게임 엔진에서 일반적으로 사용하는 광원은 일반적으로 아래와 같이 세 가지가 제공됩니다.

- 방향광 (Directional Light) : 지정한 방향으로 일정한 세기로 물체에 내리쬐는 광원입니다. 태양을 생각하면 됩니다.

- 점광 (Point Light) : 전구와 같이 특정 지점을 기준으로 널리 퍼지면서 서서히 희미해지는 광원입니다. 천장에 달린 전구를 생각하면 됩니다.

- 스포트라이트 (Spot Light) : 지정한 방향으로 집중해서 보여지는 광원. 무대의 스포트라이트나 자동차의 헤드라이트를 생각하면 됩니다.




언리얼 엔진4에서 제공하는 방향광, 점광, 스포트라이트의 광원 효과 비교

아티스트들은 게임 엔진이 제공하는 에디터를 사용해 공간을 만들고 위의 광원을 배치하여 게이머들에게 전달할 분위기를 만들어냅니다. 이렇게 광원에서 물체로 직접 쏘는 빛을 직접광(Direct Lighting)이라고 합니다.

위에서 보는 것처럼 직접광을 사용하여 개별 물체를 표현할 때에는 그럴 듯해 보입니다. 하지만 조금 멀리서 공간을 전체적으로 바라보면 아래 그림과 같이 현실과는 조금 다른 분위기가 연출됩니다.



틈새 사이로 직접광이 반영된 씬의 결과 화면.
직접광이 비추는 영역 외에는 명암이 전혀 없다.

이는 빛이 반사되어 공간 구석구석으로 퍼지면서 추가적인 조명 효과를 만들어주는 현상을 배제하였기 때문입니다. 현실 세계에서는 광원에서 나온 빛은 1차적으로 물체에 닿으면 다른 방향으로 튀면서 다른 물체를 밝히는데 사용됩니다. 이렇게 물체와 부딪혀 반사된 빛을 간접광(Indirect Lighting)이라고 합니다. 아래는 간접광만 계산하여 표현한 결과 화면입니다.



간접광에 의해 만들어지는 조명 효과

직접광이 만들어내는 효과와 간접광이 만들어내는 효과가 함께 어우러져야 우리는 현실과 같은 느낌을 받게 됩니다. 이렇게 직접광과 간접광을 함께 반영하는 기법을 컴퓨터 그래픽에서는 전역 조명(Global Illumination)이라고 합니다.



직접광과 간접광이 합쳐진 최종 전역 조명(Global Illumination) 효과

앞선 기고에서도 언급하였지만, 애니메이션이나 영화에 사용하는 컴퓨터 그래픽은 한 장 한 장씩 빛을 추적하여 사실적인 이미지를 만들어 낸 후, 이를 모아 관람객들에게 상영하면 됩니다.

하지만 게이머의 명령에 따라 실시간으로 변화하는 이미지를 만들어내야 하는 게임의 특성상 간접광까지 정교하게 계산하여 게이머의 눈 앞에 대령하는 것은 현재의 컴퓨터 성능을 고려한다면 무척 힘든 일입니다.



빛을 담는 기술들


움직이지 않는 물체의 조명 구현

한정된 컴퓨터 성능의 테두리 안에서 게이머들에게 현실적인 느낌을 전달하기 위해, 게임개발자들은 다양한 변칙적 기법을 고안하였는데, 오래 전부터 보편적으로 사용한 기법은 라이트매핑(Lightmapping)입니다.

라이트매핑은 충분한 시간을 가지고 빛의 정보를 미리 계산한 후, 결과를 라이트맵(Lightmap)이라는 이미지에 저장한 후 물체와 표면 정보와 함께 합성하는 기법입니다.

유니티는 현재 Autodesk사의 Beast 솔루션을 사용하여 라이트매핑 작업을 수행합니다. 그리고 만들어진 라이트맵 이미지를 여러 방법으로 활용하는데 이 중 하나가 듀얼 라이트맵 기법입니다.

듀얼 라이트맵 기법은 모든 빛의 정보를 담은 라이트맵과 간접 조명 정보만 담은 라이트맵, 두 종류의 라이트맵을 생성한 후 이를 시선과의 거리에 따라 차등 적용하는 방식입니다.



유니티의 듀얼 라이트매핑 시스템의 반영 전 후 비교

언리얼 엔진에서는 라이트매핑 기술을 라이트매스(Lightmass)라는 이름으로 부릅니다.

앞서서 간접광을 설명하면서 예시로 제공한 이미지들은 모두 언리얼 엔진 4에서 제작된 결과물입니다. 이 둘 간에는 큰 차이가 없다고 할 수 있겠습니다만, 유니티를 오랫동안 사용한 필자 입장에서 본 언리얼 엔진의 장점은 라이트맵 결과물이 반투명한 물체를 통과하는 빛이 표현될 정도로 섬세하다는 데 있습니다.



언리얼 엔진에서 반투명한 물체에 빛이 투과된 결과 화면

이러한 라이트맵 기법은 컴퓨터에 부담 없이 빠르게 현실적인 장면을 표현할 수 있다는 장점이 있습니다. 그러나 이 기법은 제작하는데에 시간이 오래 걸리고, 라이트맵이 반영된 물체가 움직이는 경우, 미리 만들어 둔 간접 조명 정보들이 모두 틀어지기 때문에 움직이지 않는 물체에만 사용 가능하다는 한계가 있습니다.


움직이는 물체의 조명 구현

라이트맵이 넓은 공간에 분포된 빛의 정보를 이미지에 저장하였다면, 특정 지역에서 빛의 정보를 간략히 담아 활용하는 방법도 있습니다.

이 기법은 게임 제작자가 게이머의 눈에는 보이지 않는 작은 물체를 공간에 조밀하게 배치한 후, 게임 엔진에게 명령을 내리면, 게임 엔진은 작은 물체가 위치한 지점에서 간접광이 만들어내는 조명 정보를 간략하게 담습니다.

이 때 빛의 정보를 정확하게 담지 않고 컴퓨터가 계산하기 편하도록 간략하게 담기 때문에, 컴퓨터는 작은 물체에 저장된 조명 정보를 아주 빠르게 처리할 수 있습니다. 다수의 작은 물체에 저장된 정보를 사용하면, 움직이는 물체에게도 그럴듯하게 간접광 효과를 줄 수 있게 됩니다.

유니티 엔진에서는 이를 작은 구체로 표현하고 라이트프로브(LightProbe)라고 부릅니다.

아래 그림은 유니티에서 게임 스테이지에 배치된 라이트프로브들과 이를 사용하는 캐릭터의 모습입니다. 장소에 따라 게임 스테이지의 어두운 부분과 밝은 부분을 반영한 프로브의 모습을 볼 수 있으며, 게임 엔진은 근처에 있는 프로브를 사용해 움직이는 캐릭터의 명암을 주위 환경에 맞게 처리합니다.



유니티 엔진의 라이트프로브 기술

언리얼 엔진 4에서는 작은 구체가 아닌 작은 상자로 표현하는데, 이를 간접광 캐시(Indirect Lighting Cache)라고 합니다. 언리얼 엔진 4도 앞서서 설명한 기술과 유사한 방식으로 움직이는 캐릭터에 간접광 캐시에 담긴 빛의 정보를 전달합니다.



언리얼 엔진 4의 간접광 캐시 기술

이번 유니티5의 발표의 특징 중 하나는 배틀필드 3와 4 제작에 사용된 인라이튼(Enlighten)이라는 새로운 솔루션입니다. 유니티5에서 인라이튼이 어떠한 방식으로 연동되는지는 아직 공개되지 않았지만, 인라이튼 솔루션에 대한 데모 영상은 아래에서 확인할 수 있습니다.

유니티 5에 탑재될 것으로 발표된 인라이튼 솔루션 데모

참고로 에픽 게임즈는 2012년에 라이트맵 없이도 실시간으로 전역 조명 효과를 구현한 SVOGI라는 기술 데모를 선보였습니다.

실시간 전역 조명 기법인 SVOGI에 대한 소개 동영상
※ 출처 : 게임 트레일러(GT)

많은 사람들이 이 차세대 전역 조명 기술이 언리얼 엔진 4에 탑재될 것으로 예상하고 큰 관심을 가졌는데, 현재의 하드웨어로는 모든 상황에서 이를 원활히 처리하는 것이 힘들다고 판단한 듯, 아쉽게도 이번에 발표한 언리얼 엔진 4에 위 기능은 들어가 있지 않습니다. (대신 크라이엔진에서 사용하는 전역 조명 기법인 Light Propagation Volumes 기술을 옵션으로 사용할 수 있도록 제공하고 있습니다.)



환경을 담는 기술


주위 환경을 반사하는 기술

물리 기반 셰이딩 시스템에서 거칠기 수치가 낮은 반들반들한 물체는 빛을 반사하는 성질이 강하기 때문에 물체 표면에 주위 환경이 반영됩니다.



물리 기반 셰이딩 시스템에서 거칠기에 따른 반사 효과의 차이.
왼쪽부터 거칠기 수치를0.1, 0.5, 0.9로 설정한 결과 화면

왼쪽 이미지처럼 주위 환경이 물체의 표면에 반사되어 보이기 위해서는 게이머가 바라보는 모든 방향에 맞춰 주위 풍경을 저장해 둔 특별한 이미지가 필요합니다.

이 특별한 이미지를 만드는 것은 상당히 번거로운 작업인데, 언리얼 엔진 4에서는 이를 위해 전문적인 반사 환경(Reflection Environment) 시스템을 제공합니다.

아래 그림과 같이 사용자가 반사를 반영할 환경 영역을 지정하고 캡쳐를 명령하면 반사할 환경이 만들어져 물체에 반사 효과가 바로 반영됩니다. 아티스트가 할 일은 영역에 따라 반사할 환경의 범위를 설정하고 캡쳐하라는 명령을 내리면 끝납니다.



구체 리플렉션 캡쳐 기능을 사용하여 반사 영역을 지정하여 물체에 바로 반영한 결과

위의 금색의 동그라미로 표시된 구체 리플렉션은 에디터에서 실시간으로 이동하면서 반사 효과를 눈으로 보면서 조절하는 것이 가능합니다.

이렇게 반사 정보를 캡쳐하면, 언리얼 엔진은 자동으로 선명한 이미지와 여러장의 뿌연 이미지를 생성하는데, 사용자가 설정한 표면의 거칠기(Roughness)에 따라 이 중 한 가지 이미지를 선택해 반사 표현에 사용합니다.

아래 그림은 거칠기가 0인 경우에 가장 선명한 이미지를, 거칠기가 0.3인 경우 뿌연 이미지를 선택하여 물체의 반사 효과에 반영한 결과 화면입니다.



물체 표면의 거칠기 설정에 따라 반사 능력이 다르게 적용된 결과 화면

새로 나올 유니티5 에서도 반사 프로브(Reflection Probe)라는 이름으로 언리얼의 반사 환경 시스템과 유사한 기능이 선보일 예정입니다.



유니티5의 반사 프로브 기능으로 반사 효과를 구현한 화면
※ 출처 : GDC2014 유니티 발표 자료


야외 환경의 반영

탁 트인 야외를 배경으로 제작되는 게임의 경우 가시거리가 넓기 때문에 그려야 할 물체가 많습니다. 그래서 아주 먼 거리에서 보이는 하늘과 산에 대한 표현은 계산량을 최소화하기 위해 6장의 이미지로 플레이어가 위치한 가상 공간을 둘러싸는 스카이박스(SkyBox)라는 기법을 오래 전부터 사용해왔습니다.



스카이박스를 표현하기 위해 일반적으로 사용하는 6장의 이미지
※ 출처 : Humus / 파노라마 체험 링크

그런데 먼 배경을 표현하는데 유용하게 사용하는 스카이박스 이미지는 물체에 광원 효과를 나타내는데에도 사용합니다. 이 기법을 이미지 기반 라이팅(Image Based Lighting)이라고 하는데, 이미지에 담긴 정보를 광원으로 변환한 후, 사용자의 시선과 물체 표면의 방향 정보를 토대로 물체에 조명 효과를 만들어줍니다. 이 기술은 야외에 별도의 광원을 설치하지 않아도 아래 그림과 같이 넓게 트인 야외에 다채롭게 퍼져 있는 빛의 효과를 물체에 반영할 수 있습니다.



이미지 기반 조명 기술을 구현한 예시
※ 출처 : Marmoset


언리얼 엔진 4에서는 이 기능이 내장되어 있습니다.



언리얼 엔진 4에서 이미지 기반 조명 기법을 사용한 화면

언리얼 엔진 4에서 제공하는 이미지 기반 조명 기법은 앞서서 설명한 반사기술과 동일하게 물체의 표면이 거칠어질 수록 희미하게 반영되는 현실 세계의 물리법칙을 따릅니다.

유니티는 아직 이 기능을 제공하지는 않지만, 유니티 5 부터는 언리얼 엔진 4와 유사하게 이미지 기반 조명 기술이 내장되어 물리 모델의 반사 효과와 함께 사용될 예정입니다.



유니티5의 이미지 기반 조명 기능 메뉴
※ 출처 : GDC2014 유니티 발표 자료



결론


지금까지 언리얼 엔진 4와 유니티 엔진 5에서 빛을 다루는 기술에 대해 살펴보았습니다.

한정된 지면상 언리얼 엔진 4에서 제공하는 다채로운 빛의 기술을 모두 소개하지 못했습니다만, 각 기술에 대한 평을 내리면 별도의 렌더링 소프트웨어가 필요 없을 것 같다는 말을 들을 정도로 언리얼 엔진의 빛의 표현 기술은 최고 수준에 와 있는 듯 합니다.

유니티 5에서 발표된 내용만으로 보면 언리얼 엔진과 비슷한 기능을 제공하긴 하지만 전체적인 메뉴 구성에서의 디테일이 조금 떨어진다는 느낌입니다. 하지만 모바일 플랫폼을 기반으로 오랜 기간동안 안정적으로 동작한 유니티 엔진의 특성을 감안한다면, 당분간 퀄리티보다는 실용성에 중점을 두면서 기술을 만들어나가지 않을까 유추해봅니다.

다음 기고에서는 언리얼을 리얼하게 만드는 또 다른 기술들에 대해 살펴보겠습니다.

댓글

새로고침
새로고침

기사 목록

1 2 3 4 5