[상용엔진] 언리얼 엔진 정보

출처 블로그 > 화니의 블로그
원본 http://blog.naver.com/hslson/20248493

언리얼 엔진은 처음 나왔을 때부터 특이하고도 매우 뛰어난 구조적 형태를 갖추고 있는 엔진으로 유명하다. 현재에도 가장 뛰어난 엔진으로 평가 받고 있으며 앞으로의 발전 전망도 매우 좋다고 평가 되고 있다.

1. Unreal Virtual Machine

언리얼 엔진의 가장 큰 특징이자 장점이라면 언리얼 가상 머신이라는 소프트웨어적인 가상의 유동적 환경을 만들어내고서 그 환경을 통해 엔진 내부 및 외부의 모든 것들을 역동적으로 이어준다는 점이다.

다른 엔진들도 가상 머신 개념을 채용한 엔진들이 존재하지만 언리얼 엔진의 언리얼 가상 머신 개념은 다른 엔진들에서 말하는 가상 머신과 기본 개념부터가 조금 다르다.

Unreal Virtual Machine은 일종의 소프트웨어 가상 머신으로 기계처럼 완전한 구조를 가지고 있으면서도 그 구조 자체도 유동적인 환경을 만들고 있는 가상 환경 상태이다. 이것은 그 자체로도 매우 유용한 쓰임새를 가지고 있으며 기본적으로도 매우 큰 이점을 제공하지만 프로그램의 덩치가 점점 더 커지면 커질수록 장점을 발하게 된다.

언리얼 엔진의 핵심인 언리얼 가상 머신을 이루는 구조는 다음과 같은 3가지로 구성 되어 있다.

Core : 코어는 UnrealScript의 핵심이며 모듈화 및 컴포넌트화와 자체 확장성의 기본이 되며 엔진과 에디터를 완벽하게 연동 시켜 완전한 가상 환경의 바탕을 만들어 준다.
Engine : 이 엔진은 Unreal Engine 자체를 칭하는 것이 아니다. 엔진은 내부 및 외부의 모듈 및 컴포넌트와 모든 기능적인 것들을 연동 시키는 작업을 해 준다.
Editor : 이 에디터는 UnrealEd를 칭하는 것이 아니다. 에디터는 내부적, 외부적, 자체적인 모든 변형 및 확장을 엔진 내/외부의 모든 것이 완벽히 연동 되면서 가능하게 해 준다.

Core, Engine, Editor 이렇게 3가지는 UnrealScript라는 순수한 객체지향적 프로그래밍 개발 언어 개념으로 3가지가 일체가 되어 Unreal Virtual Machine을 형성하고 있으며 특정 플랫폼, 특정 운영체제, 특정 프로그래밍 언어에 구속 받지 않는다. 개발 언어에 구속 받지 않기 때문에 어떠한 언어와도 함께 사용이 가능하다. C, C++, C#, Cobol, Fortlan, Visual Basic, Lua같은 컴파일 언어, Java같은 인터프리터 언어, Assembly나 기계어와 함께 사용해서 연동 시키는게 가능하다. Unreal Virtual Machine은 언리얼 엔진 자체이며 내부의 모든 기능들과 외부의 모든 모듈 및 컴포넌트 기능들은 Unreal Virtual Machine을 통해 서로 완벽하게 연동 된다. 그리고 이 언리얼 가상 머신 및 모든 구조적 형태 자체와 UnrealScript도 제한적이지 않고무한한 확장이 가능 한 형태로 만들어져 있다.
그리고 외부의 모듈은 UnrealScript Package로 Unreal Virtual Machine과 외부 언어의 모듈이나 프로그램이나 모든 어플리케이션을 연동 해주는 작업을 수행한다.
언리얼 가상 머신은 언리얼 엔진의 핵심이며 다른 모든 프로그램 구조는 임의적으로 변경하거나 완전히 새롭게 프로그래밍 설계가 가능하다.

2. 완전한 객체 지향 설계 구조

언리얼 엔진의 작동은 내부적으로 짜여진 설계 및 외부 어플리케이션이나 모듈 및 컴포넌트가 Unreal Virtual Machine에 연결되어 작동시에 잘 연동된다.
언리얼 엔진의 세부 구성 요소는 다음과 같다.

DLL : 윈도우용의 실질적인 외부 모듈이다. 컴포넌트도 별 다른 작업이 필요 없이 곧 바로 사용 가능하다.

INT : 유니코드로 정보를 가지고 있다. 다개국어의 유니코드를 지원하며 다중으로 지원 할 경우 임의적으로 확장명을 지정 할 수 있으며 기존의 유니코드 수정이나 새로운 유니코드를 추가가 가능 하다. 언리얼 엔진 2.5 이상의 기본 지원 유니코드와 확장명은 다음과 같다. English International(INT), French(FRT), German(DET), Italian(ITT), Spanish(SPT), Espanola(EST), Japanese(JPT), Chinese(CHT), Korean(KOT)

INI : 구성 설정 정보를 가지고 있다. 외부 모듈이나 컴포넌트나 자체 기능의 구성 설정을 저장한다.

기타 다른 형태의 DAT나 여러 종류의 데이터베이스나 자체 개발 데이터베이스도 연동 가능하다.

3. UnrealEd

Unreal Virtual Machine을 통해 엔진을 통한 모든 부분과 긴밀하게 연결되어 있다. UnrealEd는 그 자체만으로도 매우 강력하고도 방대한 실시간 3D 그래픽 디자인 통합 개발 툴이지만 여기서 정말 중요한 점은 이렇게 방대하고 복잡한 툴이 언리얼 엔진에 완벽하게 매칭되어 있어서 UnrealEd에서 디자인한 모습 그대로 Texture, Lighting, 지형적 구조, 객체 배치, 각종 특수 효과, 스크립트 시스템 등 UnrealEd에서 작업한 모든 모습 그대로 게임에서 보이는 환경과 디자인을 얻을 수 있으며 UnrealEd 내부에서 유동적으로 연결되어 있는 다양한 툴들은 외부 프로그래밍 추가 작업을 제외한 언리얼 엔진의 모든 작업들을 UnrealEd 내에서 실시간으로 구현 가능하게 해주며 실시간으로 구현하면서 추가나 수정 등의 여러 작업을 하는것이 가능하며 이 역시 Unreal Virtual Machine을 통해 엔진의 내부 기능 및 외부 모듈 기능들과 완벽하게 연동되며 기타 툴이나 어플리케이션을 직접 개발해서 UnrealEd 내부의 확장으로 활용하는 것도 가능하다는 점이 매우 놀랍고도 뛰어난 점이다. 개발자들의 성향에 따라서 UnrealEd와 연동되는 외부 어플리케이션이나 완전히 외부 어플리케이션으로 만들어서 Unreal Virtual Machine을 통해 직접 연동되게 만드는 것도 가능하다.
그리고 UnrealEd 자체도 다른 언어로 이식하거나 재작성 할 수 있으며 기타 툴이나 어플리케이션도 개발 언어에 상관 없이 연동 할 수 있다. 예로 UnrealEd 1.0은 Visual Basic으로 작성 되었으며 UnrealEd 2.0 및 3.0은 C++로 작성 되었으며 언리얼 엔진을 라이센스 하여 사용하는 제작사 중에서는 C#으로 재 작성 하거나 새로운 툴과 어플리케이션을 C++나 C# 또는 다른 언어로 개발하여 연동 하기도 한다.

언리얼 엔진 2.5의 기본적인 UnrealEd 툴들은 다음과 같이 구성되어 있다.

Actor Properties : Actor를 Visuc Basic Tool처럼 비주얼 기반의 GUI 기반의 에디터로 작성하는 것이 가능하다.
Surface Properties : Brush나 Static Meshes의 속성값을 직접 수정 할 수 있게 해 주는 툴이다.
Level Properties : Level 전체에 걸쳐서 속성값을 수정 할 수 있게 해 주는 툴이다.
2D Shape Editor : UnrealEd 내에서 Brush를 직접 만들 수 있는 툴이다. 2D 맵 형태로 간소화 해 용량을 최대로 줄인 후 파일을 저장 해뒀다가 불러와서 3D 폴리곤으로 변환 시킬 수 있다.
UnrealScript Editor : Actor Classes의 소스 코드를 작성하는 편집 기능과 함께 곧 바로 컴파일 할 수 있는 조건이 마련되어 있다.
Actor Browser : 언리얼 엔진의 모든 Actor Classes 목록을 GUI 베이스로 열람 할 수 있으며 사용자가 직접 제작하거나 외부의 Actor Classes를 불러와서 사용 할 수도 있다.
Group Browser : 개별 Actor를 하나의 그룹으로 관리할 수 있게 해준다. 복잡한 레벨을 제작할 때 그룹화를 통하여 각 Actor를 체계적으로 분류 할 수 있으며 목적에 따라서 간단하게 선택하여 수정할 수 있다.
Music Browser : 음악 파일을 불러와서 직접 들을 수 있고 리스트를 작성하거나 레벨의 어느 부분에서 어떤 음악이 쓰이고 어느 부분만큼 또는 특정 상황에서 음악이 어떻게 쓰일지에 대한 유동적인 음악 시스템을 관리할 수 있다. 언리얼 엔진 2.5의 기본 지원 파일은 모듈 음악 포맷인 UMX(mod, s3m, xsm등)을 지원하고 OGG 포맷을 지원하며 인터넷을 통한 실시간 디지털 믹스를 지원한다. MP3나 WAV 또는 기타 오디오 포맷, 각종 Midi 포맷, CD Audio나 DVD Audio등의 Digital Data Audio 포맷을 지원 가능하게 하려면 각 포맷에 대한 모듈이나 컴포넌트를 간단히 삽입하여 추가로 사용할 수 있다.
Sound Browser : 사운드를 불러와서 직접 들을 수 있고 자신만의 패키지를 만들어서 가져올 수도 있으며 bit rate, 주파수 설정, 채널 설정을 직접 변경하여 곧 바로 적용 할수 있다. 3D 위치와 거리, 스테레오, 도플러 효과, 서라운드 사운드 및 다채널 사운드등의 모든 기능들은 Unreal Audio System에 연결되어 Unreal Virtual Machine과 연동하며 UnrealScript로 설계자가 모든 부분을 쉽게 수정하거나 새롭게 만들 수 있다.
Texture Browser : Texture의 패키지를 불러오거나 편집할 수 있고 직접 패키지를 제작할 수도 있다. 각 Texture는 각각의 종류별로 구분되며 기본적인 구성은 Texture, Shader, Midflier, Combiner, Final Blend등으로 되어 있으며 Bump Map이나 Nomral Map, Mask Map, Phong Map, Displacement Map처럼 엔진의 렌더링 부분에서 추가 기능을 도입했을 경우 Texture Browser의 Texture 종류를 각 기능에 맞게 추가하거나 수정할 수 있다. 실시간으로 Shader나 기타 기능이 들어간 Texture를 Texture Browser 내에서 직접 확인 해 볼수 있으며 단순히 Texture를 선택하고 확인하는 기능이 아닌 편리하고 유용한 다양한 기능들을 지원한다.
Meshes Browser : 동적 메쉬들을 불러와서 직접 재생해볼 수 있다. 특정 프레임을 체크할 수 있으며 수정도 가능하다.
Prefabs Browser : Actor와 Brush 패키지를 만들고 제작에 활용할 수 있도록 해준다. Actor와 Brush와 기타 다른 몇 가지의 개발 파일이 조립되는 정보를 파일로 저장 해놓고 다른 레벨에서도 불러와서 쉽게 적용할 수 있다. 여기서 제작된 패키지는 개별 Actor로 제작한 것과 똑같은 효과를 얻게 되며 성능, 기능상으로 아무런 차이점이 없다. 차이점은 개별 Actor로 직접 모든 것을 제작하게 되는 것에 비해 많은 시간과 노력을 절감할 수 있다는 점이다.
Static Meshes Browser : 정적 메쉬들을 불러와서 직접 확인 가능하며 레벨의 특정 부분이나 움직이지 않는 부분의 모든 Brush를 정적 메쉬로 변환이 가능하다. 정적 메쉬는 언리얼 엔진이 2.0으로 업데이트 될 때 새롭게 추가 된 뛰어난 기능으로 메쉬 연산을 처리하는 부분인데 모양이 변하지 Brush들을 간략화 된 데이터 파일로 저장 가능하며 실시간으로 사용할 시에 정보를 간소화 한 함수 형태로 저장한 후에 동일 계열의 다각형들의 정보를 정리해서 최적화해서 메모리에 상주하는 용량과 실시간으로 그려지는 연산을 최소화하고서도 실제 다각형 모양이나 위치나 충돌 체크 정보 등, 메쉬의 모든 정보들을 그대로 가지고 있으며 기능적으로는 일반 Brush와 아무런 차이가 없다. 단지 실시간으로 사용되는 많은 폴리곤의 연산량을 줄이고 메모리를 절약하는 최적화 기술일 뿐이기 때문에 폴리곤이 적은 형태의 레벨에서는 쓰나 쓰지 않으나 별 차이가 없지만 많은 폴리곤을 사용해야 하는 세밀한 모습을 보여주는 레벨이거나 복잡한 구조물을 가지고 있어서 매우 많은 폴리곤의 연산이 필요하게 된 레벨들일 경우에 그 차이는 눈에 띄게 두드러진다. 요즘 같은 하드웨어에서도 폴리곤 연산을 최대한 줄이고 하드웨어의 성능을 Texture 기술과  Shader 기술 및 기타 특수효과에 투자하는 것이 중요한 만큼 이 기능의 뛰어남은 더욱 부각 될 것이다.  애니메이션에서도 직접 메쉬의 모양이 변하지 않는 애니메이션이라면 정적 메쉬를 이용하여 다수의 정적 메쉬를 연결 한 후에 애니메이션으로 사용할 수 있다.
Animation Browser : 애니메이션을 직접 불러와서 재생할 수 있으며 정점 애니메이션과 골격 구조 애니메이션, 스키닝 애니메이션 등의 다양한 애니메이션 속성들을 보여주며 애니메이션 정보나 키프레임 정보, 골격 구조 정보, 모션 캡춰 정보, 스키닝 정보등 다양한 정보들을 불러온 후에 수정하거나 직접 작성 할 수도 있다.
Terrain  Editing :하이트맵을 기반으로 Displacement Mapping을 이용해 지형을 생성하고 다양한 기능으로 지형을 수정하거나 지형에 관련된 여러가지 편집을 할 수 있다.
Matinee : 컷씬을 편리하게 제작할 수 있게 하기 위해 유용한 여러가지 기능들을 제공한다. 카메라, 객체 위치 이동, 씬 그래프 및 여러 기능들로 마치 영화를 제작하듯이 컷씬 장면들을 제작할 수 있다.
Particles : 불, 물, 폭포수, 먼지, 연기, 비, 눈, 연기 등의 다양한 파티클 효과를 2D 형태 또는 3D의 볼륨감 있는 파티클을 입체적으로 편리하게 구현하여 제작할 수 있는 기능들을 제공한다.

이 외에도 외부의 다른 툴이나 직접 제작한 툴을 연계 시키거나 UnrealEd 내부로 연동하거나 UnrealEd와 상관없이 언리얼 가상 머신으로만 연결할 수도 있다.
언리얼 엔진 3.0 부터는 이런 작업이 더욱 쉽게 가능하도록 구조적으로 더 강력한 모듈화가 되었다고 한다.
그 리고 언리얼 엔진 3.0에선 게임 프로그래밍이 거의 필요 없는 플로우챠트를 그리듯이 프로그래밍이 가능한 비주얼 프로그래밍 시스템과 비주얼 쉐이더 시스템등 비주얼 관련 기능 강화와 다른 부분도 업데이트 되고 실시간으로 레벨 플레이를 하면서 에디팅 할 수 있는 부분이 강화 되었다고 한다.

4. 구성 모듈

언리얼 엔진 2.5의 기본 플랫폼 및 운영체제 모듈은 다음과 같이 구성되어 있다.

WinDrv : 윈도우용 모듈과 엔진을 연동 해 주는 드라이버
LinuxDrv : 리눅스용 모듈과 엔진을 연동 해 주는 드라이버
MacDrv : 매킨토시용 모듈과 엔진을 연동 해 주는 드라이버
XboxDrv : Xbox용 모듈과 엔진을 연동 해 주는 드라이버
Ps2Drv : PlayStation2용 모듈과 엔진을 연동 해 주는 드라이버
GcDrv : GameCube용 모듈과 엔진을 연동 해 주는 드라이버

Window : 엔진의 다른 모든 모듈이 Unreal Virtual Machine을 통해 윈도우 환경에서 작동하게 해 주는 모듈
Linux : 엔진의 다른 모든 모듈이 Unreal Virtual Machine을 통해 리눅스 환경에서 작동하게 해 주는 모듈
Mac : 엔진의 다른 모든 모듈이 Unreal Virtual Machine을 통해 매킨토시 환경에서 작동하게 해 주는 모듈
Xbox : 엔진의 다른 모든 모듈이 Unreal Virtual Machine을 통해 Xbox 환경에서 작동하게 해 주는 모듈
Ps2 : 엔진의 다른 모든 모듈이 Unreal Virtual Machine을 통해 PlayStation2 환경에서 작동하게 해 주는 모듈
Gc : 엔진의 다른 모든 모듈이 Unreal Virtual Machine을 통해 GameCube 환경에서 작동하게 해 주는 모듈

언리얼 엔진 2.0까지는 32비트만 지원 했지만, 언리얼 엔진 2.5부터는 64비트 윈도우, 64비트 리눅스도 지원 가능하게 업데이트 되었다.
이 외에도 변경하거나 새로운 운영체제나 플랫폼을 위한 모듈을 추가로 개발하여 연동 할 수 있다. 차세대 콘솔이나 PSP 같은 모바일 게임기로 언리얼 엔진을 사용하는 업체들도 있다.

렌더링 : 언리얼 엔진 2.5의 기본 렌더링 드라이버 컴포넌트는 다음과 같이 구성되어 있다.

D3DDrv : Direct 3D의 기능을 엔진에 연동 해 주는 컴포넌트 드라이버
OpenGLDrv : OpenGL의 기능을 엔진에 연동 해 주는 컴포넌트 드라이버
PixoMaticDrv : PixoMatic 소프트웨어 렌더러를 엔진에 연동 해 주는 컴포넌트 드라이버

렌더링 드라이버는 Unreal Virtual Machine에 연동되어 UnrealScript에 의해 조정될 수 있게 되어 설계자가 특수 드라이버를 지원하기 위해서 자체 개발을 하여 엔진에 연동 시킬수 있다.
언 리얼 엔진 2.5의 기본적인 Direct3D 드라이버는 Direct3D 8 기반의 렌더러이며 OpenGL 드라이버도 Direct3D 8 기반과 동급의 기술만을 지원하지만 모든 부분에 모듈화가 잘 되어 있기 때문에 Direct3D 9 기반의 Direct3D 드라이버나 OpenGL 드라이버로 업그레이드 하거나 새로운 특징들을 가진 기술들의 추가가 쉽게 가능하다. Unreal Developer Network에는 노멀맵, 퍼픽셀 라이팅 같은 차세대 그래픽 기술들을 쉽게 추가 할 수 있는 기반들을 마련해주고 있다.
UDN을 통한 커스터마이징이나 기타 추가 개량 없이 기본적으로만 제공되는 언리얼 엔진 2.5의 렌더링 기술들로는 다음과 같다.

월드 렌더링
실내 지역을 구성하는 가장 기본적인 방법인 BSP를 지원하며 위의 에디터 기능중에 설명한 스태틱 메시를 지원해서 고정적인 물체에 사용한다. 움직이는 물체에는 정점 기반의 버텍스 애니메이션과 골격기반의 본 애니메이션을 지원하며 두 사이를 부드럽게 이어주는 스키닝 애니메이션도 지원한다. 지형에는 높이맵 기반으로 고도필드를 생성해내거나 UnrealEd에서 실시간으로 수정이 가능한 형태의 지형을 지원한다.
그리고 고급수준의 포탈 렌더링 시스템을 지원한다. 전면 반사 및 반면 반사되는 물질과 유사한 표면 구현과 기하학의 법칙을 무시한 한 공간안에 다른 지역을 보여주는 워프 포탈 효과등을 구현 가능하며 하늘과 배경을 함께 독립적으로 평행 이동과 회전이 가능한 시스템을 구현 가능하다.
실제 보이는 표면만 연산하고 안보이는 곳은 연산에서 제외하여 고성능을 내는 렌더링 시스템과 실내 환경과 야회 환경을 동시에 구현하면서 두가지 렌더링 방식의 경계가 없이 자연스럽게 연결해주며 이러한 기능들을 UnrealEd 내에서 실시간으로 에디팅 할 수 있게 해준다.

캐릭터 애니메이션
정점 단위로 4개의 골격과 폴리곤 수와 hard-coded에 제한이 없으며 골격 계층 구조 애니메이션과 게임 환경 안에서의 복잡한 애니메이션과 캐릭터 애니메이션의 연결 부위를 매끈하게 연결 해주는 기능을 가지고 있다. 그리고 다중 채널 애니메이션, 애니메이션과 함께 형체가 변할 수 있는 요소, 플레이어 컨트롤 입력 반응 애니메이션과 동시에 다중 애니메이션 허용이 가능하며 완전히 독립적인 유동체의 프레임 레이트를 위한 골격 키프레임 보간법, 관절의 연속적 애니메이션이 부드럽게 흐르도록 만들어주는 기법, 그리고 아티스트가 메모리 사용률, 압축률등을 확인하면서 실시간으로 작업할 수 있는 시스템을 제공한다.

라이팅
모든 기하학적 형태에 정점 광원으로 생성되는 동적 광원을 지원하며 투영 텍스처링을 지원한다. 모든 물체와 표면에 정적 광원이나 동적 광원을 효율적인 방법을 찾아서 적용할 수 있으며 필요에 따라서는 둘 다 적용도 가능하다. 미리 계산 된 RGB 컬러의 라이트맵과 정점 광원 채널의 임의적 선택을 이용한 고품질의 광원을 지원하며 지향성 광원, 점 광원, 반점 광원, 래디오시티 광원을 지원한다. 모든 표면에 대해 상황에 따른 복잡한 동적 광원과 그림자에 투영된 텍스쳐 허용, 그리고 플레이어 그림자와 플래시 라이트를 위한 광원을 지원하며 깜빡 거리거나 흔들리는 동적 광원 등의 효과를 다수로 지원한다.

특수 효과
파티클 효과로 2D 형태의 파티클과 3D 입체 형태의 볼륨 파티클로 불, 물방울, 폭포수, 먼지, 연기 등을 쉽게 구현 할 수 있는 코드가 기본적으로 제공되며 날씨효과를 위한 비, 눈, 우박 등의 구현을 위한 파티클의 효과 코드도 제공된다. 모든 파티클은 UnrealEd에서 실시간으로 편집할 수 있다.
안개효과는 소프트웨어로 구현 가능한 Vertex Fog와 하드웨어적으로 고품질의 안개구현을 위한 Distance Fog와 극적 환경 묘사를 위한 Volumetric Fog를 지원하며 수면효과를 위한 Fluid Surface를 지원한다.

지형
하이트맵 기반의 빠른 지형 시스템과 다중으로 복잡한 지형 렌더링과 끊어짐이 없는 블렌드 레이어로 알파-블렌딩 텍스처, 세밀한 초목을 표현하기 위한 장식층과 그 밖의 야외 장소 표현을 위한 장식 메시 절차등을 제공한다.
UnrealEd 상에서 지형을 실시간으로 세밀하게 조종을 할 수 있는 기능을 제공한다. 하이트맵기반으로 생성하거나 툴로 지형을 올리거나 내리거나 평평하거나 완만하게 또는 울툴불퉁하게 만들거나 특정 셀을 지우거나 만들거나 부드럽게 실내 지형과 이어서 동굴이나 빌딩이나 일반적인 인도어맵으로 연결할 수 있는 기능들을 실시간으로 직접 편집 가능하다.

텍스처
아티스트가 컨트롤 가능한 다양한 텍스처 층들과 알파블렌딩과 임의 블렌딩이 가능한 머테리얼 시스템과 사용하기 쉬운 메커니즘의 스크롤링, 회전, 스케일 텍스처링, 그리고 정적 또는 동적 방법으로 정교한 애니메이트 된 효과를 만들어서 사용할 수 있는 특징들을 가지고 있다.
그리고 표면을 가까이 봤을 때 디테일 텍스처의 스케일과 모든 텍스처의 스케일도 조정할 수 있으며 텍스처 애니메이션을 연속으로 변하기 쉬운 반향의 비율에 맞출 수 있다.

녹화 기능
일반적인 demo 레코딩 기능으로 엔진상의 시퀀스만으로 녹화되는 저용량 데모 파일을 지원하며 DivX 무비로 녹화가 가능하다. 그리고 id Software로부터 라이센스 받은 ROQ 동영상 기술을 지원한다. 게임 안 동영상 재생으로는 AVI, ROQ, BIK, MOV, WMV를 비롯한 다양한 동영상 포맷을 재생 가능하며 코덱 추가로 어떤 동영상 포맷도 사용 가능하다.

모든 렌더링 코드는 철저하게 모듈화가 되어서 언리얼 가상 머신에 연동되어 있으며 새로운 기술 추가나 렌더링의 특징을 바꾸고 싶을 경우에 그 부분만 쉽게 바꿔줄 수 있다. 예를 들어 텍스처 레이어를 완전히 새로운 것으로 교체하고 싶다면 모듈화가 제대로 되지 않은 엔진에서는 거의 모든 부분에 걸쳐서 렌더링 코드를 손보고 일일히 연결 해줘야 하지만 철저하게 모듈화가 된 엔진에서는 그럴 필요가 없이 텍스처 레이어를 재작성하고 바뀐 함수들만 손봐주면 되며  언리얼 엔진에선 철저한 모듈화와 함께 언리얼 가상 머신으로 연동이 되기 때문에 텍스처 레이어만 재작성 해주는 작업으로 끝이 난다.
언리얼 엔진에서는 각 게임에서 필요한 부분만 골라서 만들도록 한번에 모든 렌더링 기술들을 포함하고 있지 않는다. 이는 최적화와도 관련이 있다. 애초부터 게임에서 사용하지 않는 기술들로 필요 없는 연산을 하지 않기 위함과 동시에 언리얼 엔진을 사용하는 많은 게임들이 비슷한 특색을 내지 않게 하기 위함이다. 기본 렌더링 기술 이외에 새로운 기술들의 특징들을 추가하고 싶다면 UDN에서 노말매핑, 퍼픽셀 라이팅, 퍼픽셀 셰이딩등의 기술들을 추가로 지원 받을 수 있으며 UDN의 언리얼 엔진 2.5에 없는 가상 변위 매핑이나 HDR 렌더링 같은 기술들도 불가능한 것은 아니지만 직접 구현해야 한다. 엔진의 철저한 모듈화 구조와 확장성과 언리얼 가상 머신으로의 연결 덕분에 그러한 기술의 추가도 비교적 쉽게 가능한 편이다.
언리얼 엔진 3.0 이후로는 사용하지 않는 기술들을 엔진에 포함하고 있어도 필요 없는 연산을 하지 않도록 엔진의 기능적인 부분에서도 향상 되었으며 비슷한 특색을 내지 않게 하기 위한 게임마다 색다른 다양한 기술의 지원도 더욱 차별화 되게 하였으며 같은 기술이라도 표현방법이 여러가지로 나눠지게 해서 비슷한 특색을 나타내지 않게 엔진을 업그레이드 했다.

물리 : 언리얼 엔진 2.5는 MathEngine사의 Karma 1.3 물리엔진 시스템을 무상 번들로 제공한다. Karma 1.3 물리엔진 시스템은 랙돌 골격 캐릭터 애니메이션, 차량 물리, 게임상의 다양한 물체에 상호작용이 가능한 물리효과를 만들어 준다. 인터넷 멀티플레이시에 차량 물리의 효과적인 데이터 전송을 위한 최적화된 기능과 물리적으로 움직이는 애니메이션이 전송되어 네트워크 프로그래밍에 응답해서 반응하는 애니메이션을 지원한다. 그리고 디자이너가 정확성도 성능을 고려하면서 다양한 충돌과 물리적 움직임을 얼마나 사용할지에 대한 기능을 제공한다.

오디오 : 언리얼 엔진 2.5의 기본 오디오 컴포넌트는 업계의 표준인 OpenAL(ALAudio)을 탑재하고 있지만 다른 오디오 컴포넌트로 쉽게 교체가 가능하다. 보이스IP 기능으로 인터넷이나 네트워크 보이스 커뮤니케이션 지원과 텍스트를 음성으로 변환해 주는 기능, A.I.에게 음성으로 명령을 내리는 기능 등이 제공된다.

네트워크 : 언리얼 엔진 2.5의 기본 네트워크 모듈(IPDrv)은 매우 작은 수준의 LAN 게임과 큰 스케일의 서버에 기초한 인터넷 게임도 지원하며 동일 네트워크 엔진상의 인터넷상의 서버들을 쉽게 찾고 접속할 수 있으며 서버나 클라이언트의 새로운 컨텐츠들은 서로 쉽게 자동으로 주고 받아서 바로 게임에 적용될 수 있게 구성되어 있다. 자바 클라이언트 사이드 스크립트 언어로 작성되었으며 최소한 28.8K 모뎀으로도 게임을 무난하게 즐길 수 있다.

5. 프로그래밍

언리얼 엔진에서의 프로그래밍은 크게 외부 언어와 UnrealScript 프로그램으로 나누어진다. 모든 프로그래밍은 객체지향적 설계를 기반으로 모듈화가 되어있으며 Unreal Virtual Machine에 연결되어 프로그램 전체가 연동되어 작동한다. 외부 언어를 써서 연결 시켜도 부드럽게 연동된다. 프로그래밍은 외부 언어만 쓰거나 UnrealScript와 동시에 사용할 수도 있으며 UnrealScript로만 작성할 수도 있다. 게임 프로그래밍은 주로 UnrealScript를 쓰는것이 빠르게 작업 상황을 확인 가능하고 수정 및 재컴파일이 용이하고 시스템 리소스를 적게 차지하며 속도도 빠르다. UnrealScript는 엔진의 모든 부분이 모듈화된 구조의 코드를 가지고 있으며 특히 게임 프로그래밍 부분에선 Player, Monster, Inventory, Triggers, A.I. 등에 맞게 기초 설계된 모듈 구조를 기본적으로 가지고 있으며 state와 state 수준의 함수들과 시간에 기초한 latend 함수와 networking을 지원한다. 이 스크립트 언어에서 높은 수준의 A.I., 길찾기, 그리고 Navigation System을 프로그래밍 할수 있다. 이 부분은 게임의 특성이나 구현하고자 하는 특성에 따라 임의적 변경이 가능하며 완전히 새롭게 작성도 가능하다. 이 프로그래밍들은 UnrealEd내에서 즉시 컴파일해서 그 결과를 새롭게 별도의 게임 프로그램을 통한 실행 없이 UnrealEd 자체에서 직접 실행하여 진행상태를 확인하면서 실시간으로 작성 및 수정이 가능하다.

위에서 많이 설명 했던 것으로 언리얼 엔진의 가장 큰 특징이자 장점은 언리얼 가상 머신을 통한 엔진 전체의 유동적인 환경과 엔진의 확장 및 개선 개조, 개량 변형 등이 역동적으로 이루어지며 새로운 기능의 추가 등의 작업을 할 때 엔진에 쉽게 연동할 수 있다는 점이다. 이 장점은 엔진을 사용하는 프로그램의 덩치가 커지고 복잡해질수록, 그리고 유지보수가 매우 중요한 MMO 프로그램 타입, 그리고 회사 내부에서 여러 게임을 위해 멀티플 라이센스를 취득한 후에 장르나 게임의 특징도 모두 다른 게임들을 만들더라도 코어 엔진 개선 팀을 두거나 각 게임들에서 엔진을 개선한 부분들을 장점들이나 필요한 점만 서로 공유할 수 있는 부분에서도 여타 일반적인 엔진들에 비해 매우 용이하다.  이 점은 앞으로 게임 개발 비용 상승으로 인해 더욱 중요해지는 점이며 한 게임을 멀티 플랫폼으로 발매할 때도 유리하게 작용하므로 이 장점은 더욱 부각될 것으로 전망된다. 최신의 언리얼 엔진 3.0 이후로는 구조적 부분이 더욱 강화되었다고 한다.

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중