Unity 3D 개요

2011. 6. 27. 12:55게임 개발/OpenGL

http://unity3d.com/unity/ : 유니티 홈페이지

드디어... 우연치 않은 계기로 공부를 하게 되었습니다.
기본적으로 Unity 3D Engine은 모든 플랫폼을 지원하고, Javascript 와 C# 등을 이용하여 개발이 가능하네요..우선 Unity에 대해서 간략하게 정리 해놓은 글이 있어서..

특징!!!
첫 번째 멀티플렛폼 엔진
두 번째 통합 인터페이스
세 번째 저렴한 가격



참조글 : http://dustinlee.me/130110694303 에서 읽어 왔습니다.
극찬글 : http://blog.naver.com/fpdlwu2000?Redirect=Log&logNo=90116567963 

Unity3D의 역사

유니티는 2000년도 후반부터 가장 빠른 속도로 스포트라이트를 받고 있는 게임엔진이다.
실리콘 밸리도 아닌, 덴마크에서 시작한 이 회사의 기술력이 기존의 게임엔진들을 제치고 스포트라이트를 받는 원동력이 무엇일까? 

Unity의 역사를 살펴보면 지금과는 다르게 Mac만을 타겟으로 2001년부터 개발을 시작하여 2005년에 첫 버젼인 1.0을 출시한다. 그때 당시 쟁쟁하게 이름을 떨치던 다른 게임엔진들을 피해 맥에서 동작하는 3D게임개발 소프트웨어 제작을 목표로 집중하였고, 이런 노력을 인정받아 2006년 애플에서 Design Award 를 수상하게 된다.

처음에는 틈새시장인 애플에서 게임엔진을 만드는 것으로 목표로 하였지만 여기서 그치지 않고 확장성과 편의성, 그리고 빠른 처리 속도 모두를 잡을 수 있는 기술적인 방안에 대해서 중점적으로 고민하였고, 고민끝에 Mono를 기반 인프라로 채택한다.

Mono를 탑재한 2.0을 출시하면서 멀티플랫폼 기능으로 대중적으로 서서히 알려지게 되었으며, 모바일 바람이 불면서 이는 더욱 가속화되어  2009년도 탑 5 게임회사로 Gamasutra에 선정되면서 크게 주목받게 되었다.

이후 Unity는 전방에서 엔진 성능 및 게임제작에 필요한 기능들을 추가함으로서 게임엔진으로서 많은 발전을 하였고, 후방을 맡은 Mono도 제자리걸음을 하지 않고 PC, Linux, Mac, Smartphone에 이르는 멀티플랫폼을 안정적으로 지원해주면서, 쉽고, 빠르고, 멀티플랫폼지원이 되는 지금의 높은 생산성을 가진 솔루션이 탄생하게 되었다.
 
Unity3D과 기존엔진의 비교

 게임제작에 필요한 개발 소프트웨어를 크게 렌더링 엔진과 리소스와 렌더링 엔진을 연결하는 개발툴의 두가지로 나눈다면, 크게 2가지 게임엔진의 유형이 있을 것이다.
 
1. 에디터를 통해 모두 묶어서 제공하는 토털솔루션 유형.
2. 렌더링 엔진 중심으로 제공하되 보조툴을 별도로 제공하는 유형.

전자의 형태로 제공되는 게임엔진은 타겟이 어느정도 정해져 있어서, 이 타겟과 같은 장르의 게임을 제작한다면 빠른 기간에 퀄리티가 높은 결과물이 나올 수 있었으나 확장성이 매우 부족하여 다른 유형의 게임을 제작할 경우 소스코드를 뜯어서 재구성하는 경우가 많았다. 이런 엔진들은 주로 고가에 판매되어 다룰 수 있는 사람이 큰 규모의 게임회사인원으로 한정되어 있으며, 자유자재로 엔지니어링 하기 위해서 오랜기간의 노력과 리서치가 들어간다.

후자의 형태로 제공되는 게임엔진은, 엔진을 잘 이해한다면 다양한 장르의 괜찮은 퀄리티의 게임을 만들 수 있으나, 문제는 게임 제작에 필요한 개발툴의 제작기간이 오래걸리는 점이다. 게임이 완성되어질 쯤 엔진과 툴들은 전부 뜯어고쳐져서 원래의 모습은 흔적도 사라진 형태가 되는데, 게임브리오가 이런 유형의 대표적인 엔진이라고 볼 수 있다.
 
결국 양쪽 모두 개발기간이 오래걸리며, 주로 경험있는 개발자에 의해 프로젝트의 진행여부가 결정되는 경우가 많았다.

 
이런 구분에서 유니티를 평가한다면,
유니티는 토털솔루션이면서, 소스코드의 분석이 없이 다양한 게임의 제작이 가능한 매우 생산적인 게임제작도구라고 정의할 수 있다.

유니티가 기존의 다른 엔진을 뛰어넘는 만능 엔진이라는 맹목적인 찬사가 아니다. 
렌더링 엔진성능에 치중하는 기존 엔진회사들의 전략과는 다르게 게임제작의 생산성을 극대화하는쪽으로 치중하고, 이것이 아래에 설명하는 현재의 게임업계의 Trend와 부합되어 많은 고객들을 확보하고 있는 중이다.

게임업계의 Long-tail Trend

 SNS와 스마트폰의 발달은 단순한 유행이 아닌 하나의 큰 트렌드이고 향후 세상을 변화시킬 요소로 가장 주목받고 있음은 누구나 다 알고 있을 것이다.
 
Zynga, Rovio, Ngmoco  라는 회사들을 아는가?
 
기존의 EA와 같은 거대 공룡회사가 아닌 20여명내외의 작은 규모에서 출발하여 제각각 대박을 만든 신화적인 회사들이다. 불과 2-3년전에 갑작스럽게 벌어진 일들이다.
개발자의 관점에서 위 회사들의 게임 결과물을 보았을 때 관심을 가질만한 기술적인 장점이 그다지 안보인다. 최근에 나온 크라이시스2등의 그래픽과 비교한다면 너무 초라할 따름이다.
 
거품일수도 있지만 불과 20명 남짓한 웹 SNG(Social Network Game)전문 회사인 Zynga의 시가총액이 EA를 능가한다는 보도가 있으며, We Rule을 개발한 Ngmoco는 지난해 4500억원에 일본회사에 매각되었다. Rovio도 다르지 않다. 핀란드 벤쳐회사인 이 회사는 앵그리버드 하나로 핀란드의 삼성과 같은 존재인 노키아보다 더 많이 보도가 되고 있으며, 총 2억건 이상의 다운로드를 기록하고, 최근 4500만달러 투자를 유치하는 등 승승장구 중이다. 하지만 직원은 2011년 기준 이제 55명일 뿐이다.
 
이 회사들의 성공요인은 트렌드 붐이 일어나는 적절한 시점에 아이디어를 통해 시장을 선점하였다는 것이다.  독창적인 아이디어도 중요하지만 트렌드에 맞춘 시간적인 타이밍이 더욱 중요한 것이다.
 
최고의 MMORPG, FPS서비스를 위해 몇년동안 기존 엔진들의 소스를 분석하여 서버기술과 접목하여 재구성하는 노력이 메이저 게임 회사들이 지금까지 노력한 집중 포인트였다면, 이제는 아이디어를 바탕으로 가볍고 빠른 게임을 시장에 가장 먼저 내놓는 것이 트렌드인 것이다.
 
인터넷과 물류의 발달이 비인기상품들이 모여 틈새시장을 새롭게 형성하는 롱테일 현상을 가져다 주었다면, 모바일, SNS의 혁명은 대형 패키지 , 온라인 게임개발사가 차지했던 영역을 개인,소수 개발자들이 모여 새로운 게임의 장르를 형성하고 있다.

모바일에서도 게임은 전체 어플에서 차지하는 비중이 겨우 20%중반대이지만, 70%이상이 Top100안에 들정도로 매우 부가가치가 높은 장르다. 이 게임 앱들의 70%는 개인 혹은 소규모 게임 개발회사들이 제작하고 있다.
 
이들에게 필요한 것은 화려한 렌더링 기술, 많은 동접자를 처리하는 서버기술이 아닌 아이디어를 빠르게 시장에 선보이는 Time to Market을 단축시키는 기술이며, 이를 위한 게임엔진으로 유니티는 최고의 솔루션으로 자리매김 중에 있다.

유니티는 2005년도 1.0을 선보인 이래 2010년도에 25만명의 개발자가 등록했는데, 2011년도 초반에 벌써 50만 개발자가 등록하는 무서운 성장세를 보이고 있다.
 
유니티는 매년 3배씩 성장을 하고 있으며, 성장의 힘을 새로운 플랫폼을 안정적으로 지원하는 것과 개발자 고객을 지원하는데 사용하고 있다.  다른 게임엔진회사들이 고객에 대한 기술지원보다, 새로운 기술개발에 전념하는 것과는 180도 다른 전략이다. 

 Unity3D여야 하는 이유.
 
앞서서 말했듯이 Unity3D만의 차별화된 장점은 시대 Trend에 맞는 민첩한 생산성이다.
천재프로그래머인 당신이 어느날 멋진 아이디어가 떠올라 개인 혹은 소규모 회사를 창립한다 가정해보자.
OpenGL ES기반으로부터 직접 3D엔진을 만들고 게임까지 개발한다면 출시까지 얼마나 걸릴것인가? 이후 아이폰 및 안드로이드들의 고려한다면 당신의 천재성을 아이디어와 서비스 로직을 발전시키는데 활용할지, 각각의 기기들을 조율하는 엔지니어링에 활용할지 심각히 고민해볼 문제다. 또한 최종산출물 출시까지 걸린 시간과 노력의 댓가가 라이선스 값보다 과연 적게 들것인지 냉정하게 경제성 평가를 고민하여야 할것이다.
기술적으로 Unity3D를 사용함으로 얻게되는 생산성들을 정리해보면 다음과 같다.
  
- Mono VM 
  Mono를 한줄로 요약해본다면, 
 윈도우에서 만든 .NET 프로그램을 리눅스와 맥에서도 사용할 수 게 만들어주는 기반 인프라다.  '해킹이나 다른 비합법적인 방법을 통해 MS의 기밀을 빼내서 만든것이 아닌가?' 라는 생각이 들법도 한데
사실 .NET의 근간을 이루는 CLR이라는 체계는 MS만 사용했을 뿐이지, 표준기관인 ECMA를 통해 공개되어 있었고, Mono는 이 공개된 규약을 가지고 리눅스와 맥에서도 돌아가는 VM인프라를 제작한 것이다. 개발자 입장에서 보는 Mono의 큰 장점은 기존의 .NET 라이브러리 호환성이다.
 
.NET에서 제공하는 기본 라이브러리(List, Queue, Hashtable, Dictionary등등.)들을 사용하여 리눅스, 맥, 요즘 지원하는 안드로이드 및 iOS에서동작하는 어플리케이션의 제작이 가능하다는 것이다. VM레벨에서 명령어가 호환이 되므로 재사용을 위해 OS별로 다시 컴파일하는 과정도  필요없으며, 조금 더 생각해본다면 모듈을 의존성없이 잘 설계한다면 하나의 dll을 가지고 여러 OS에서 재활용 할 수 있다. 기존 C# 개발자들에 의해 만들어진 수많은 라이브러리도 같이.

그리고 .NET은 멈추지 않고 MS의 전폭적인 지원을 받으며 점점 성장하고 있다.
지난기간동안  .NET의 프로그래밍 기능에서의 큰 변화를 꼽으라면

- 2.0의 Delegate, Generic지원.
- 3.5의 Lambda expression을 통한 Linq.
- 4.0의 Parallel Programming지원
 
등이라 생각하는데, Mono는 현재 빠른속도로 업그레이드를 통해 MS가 만들어놓은 위의 기능들을 대부분 지원하고 있다. 
 
다만 상황이 글에서만큼 완벽한 것만은 아니다.

Mono가 Novell의 후원을 받고 있지만, 엄청난 두뇌와 자본이 모인 MS의 기술력을 따라잡기에는 많이 부족한것은 사실이다. MS는 C#이 cpp나 C와 견주어서 성능에서 큰 손색이 없도록 정말 많은 노력을 초창기에 쏟아부었고, Mono에서도 이러한 노하우와 퍼포먼스가 반영되기는 아직은 더 시간이 필요하다. 특히 스마트폰과 같은 Embedded 시스템에 .NET을 포팅하는 작업들은 이제 시작단계라 윈도우와 동일한 결과를 장담할 수 없고 기업차원에서 체계적인 기술지원이 없으면 이를 믿고 개발하는 사람들에게 위험한 상황이 발생할 수도 있다.

다행히 Mono의 전략이 Embedded시스템쪽으로 특화시키는 것으로 보여지며, Unity에서도 Mono와의 협력을 통해 각 OS별로 최적화된 작업을 추가적으로 진행하고 있다. 
 
예를 들면 안드로이드에 특화하여 Dalvik VM과 Mono CLR과 연동하는 기능의 제공이라던지,
.NET 기본 라이브러리 크기를 줄이는 Strip Byte Code기능등이 대표적인 예인데, 이를 통해 확장성있고 최적화된 앱들의 제작이 가능하다.
 
Java가 Oracle에 인수되고 Java아버지는 회사를 떠나고 없는 뒤숭숭한데, 노키아도 자사의 Java ME기반 OS를 버리고 윈도우폰을 사용하기로 협약한 이 상황에서 , Mono만큼의 좋은 결과를 보여주는 멀티플랫폼 솔루션은 없으며 이는 Unity와의 공조로 부족한 레퍼런스 및 최적화 기능들이 빠른 속도로 완성되가고 있다. 

 -  C#의 생산성
 
Unity는 C#과 Javascript의 사용이 가능한데, 개인적으로 선호하는 언어는 C#이다. 
개인적인 경험에 따른 이야기를 통해 C#의 생산성을 이야기하고자 한다. 
일전에 반년정도 기간동안 하나의 프로젝트를 한적이 있었다. php로 되어 있는 리눅스 웹 서비스를 6개월안에 윈도우즈 서버 플랫폼으로 변환하는 내용이었는데, 일이 언제나 그렇듯이 초기 3개월은 스펙하고 기획들을 협의하는데 시간을 소비하고, 시스템 구조 잡고, 하드웨어 세팅하다보니,시간이 훌쩍 흘러갔다.  설상가상으로 내정된 개발자가 중도에 퇴사를 하는 일이 발생하여 개발자가 없어졌고, C#에 과거에 경험이 있던 내가 직접할 수 밖에 없었다. 우리는 이 작업에 대해 3명, 3개월개발기간을 예상하였지만.. 
이 상황에서 적당한 해법을 찾기 위해 ASP.NET에 대해 좀 심도있게 살펴보았다. 이때가 ASP.NET MVC2버젼이 막 나왔을 무렵이었던거 같다. 프레임웍이 이해되고, LINQ 사용법에도 익숙해졌을 때, 기획이 어느정도 완성이 되자 ASP.NET MVC Framework 구조를 반영한 나름 최적화된 설계가 잡혔다. 이후 기획된 로직을 구현하면서 계속 리팩토링을 하다보니 어느순간 끝이 보이기 시작하면서 나머지는 비슷한 패턴들에 대한 반복작업이되었다. 시간을 보니 1개월 반정도 지난 시점에서 대부분의 기능들이 완료가 되어있었고, 남은 시간에 필드테스트를 거쳐 일정에 차질없이 서비스를 시작할 수 있었다.
 
  
이때 느낀점들은.
 
   - Java가 생산성 높은 구조를 위한 프로그래밍 환경제작에 많은 공헌을 하였다.
   - .NET이 Java가 만들어 놓은 좋은 것들을 다 소화하면서 따라오고 있다.
   - .NET은 새로운 개념을 도입하는데 전혀 주저하지 않으며 자신만의 장점도 계속 발전시키고 있다.
   - C#은 배를 조종하는 사공이 한사람만 있다. 사공이 정한 규칙을 잘 준수한다면 배를 타는 승객들은 누구보다 가장 빨리 목적지까지 갈 수 있다.
   - C#은 편하고 생산성 높은 언어다. 대신 잘쓰려면 공부를 많이 해야한다.
   - Visual Studio 2010의 단축키, 리팩토링, 고급기능을 적절히 활용하면 코딩시간의 큰 부분을 줄일 수 있다. 유니티는 Visual Studio 2010과 디버깅을 제외하고 완벽히 연동된다.
 

- 확장성
 
Unity3D는 엔진뿐 아니라 에디터의 구성요소까지 많은 부분을 모듈화하였다.
이를 통해 어느정도 에디터를 자신에 맞게 커스터마이징도 가능하다. 
모듈화된 구성요소들은 스크립트를 통해 제어가 가능하며. 이를 위한 문서들은 온라인사이트를 통해 잘 정리되서 제공된다. 게다가 개발자 커뮤니티가 활발히 활성화되어 있어 문제 해결에 도움받기가 무척 수월하다.
스크립트로 제어할 수 있는 수준은 원시적인 레벨까지 가능하며, 실제로 에디터에 아무 설정이 없어도, 스크립트를 통해 하나의 점으로부터 게임레벨까지 모두 동적으로 생성하는 것도  가능하다.
 
개인적으로 Unity3D가 제공하는 인프라를 보면 게임제작에만 활용되는 부분이 아깝기까지 하다.

지금은 게임개발에 종사하지 않지만, 현재 종사하는 분야의 솔루션을 위해 Unity3D 인프라를 이용하여 저작도구 및 시뮬레이션 어플리케이션을 제작하고 있는데, 현재까지의 성과는 매우 만족스럽다.
현재 어플리케이션을 만들면서 느끼는 점은 2D UI에 대한 지원이 생각보다 미흡하다는 점인데, Asset Store 커뮤니티에서는 다른 개발자들이 만든 3rd Party 솔루션들을 구입하여 사용하여 이를 보완하고 있다.
 
결론
 
소규모 혹은 1인게임개발을 꿈꾸거나, 아이디어가 있는데 빨리 출시를 생각한다면 유니티를 도입해보는 것을 적극추천한다.
우선 무료인 일반 버젼을 받은 후에 기본 기능들을 충분히 스터디를 하고, 상황에 따라 적절한 라이센서를 구입하여 프로젝트를 진행한다면 빠른 시간에 경제적으로 최종 결과물을 볼 수 있다.
개발에 대한 문서 및 레퍼런스등은 유니티 웹페이지와 커뮤니티를 통해 충분히 지원받을 수 있으며, 영어가 부담된다면 아직 우리나라에는 유니티관련된 깊이 있는 전문 커뮤니티가 부족하지만 unity3dkorea.com과 같은 커뮤니티를 통해 점점 활성화되고 있으니 이를 참고하면서 진행하면 많은 도움을 받을 수 있다.

대학에서도 무료 유니티강좌들이 시도되고 있으니, 이들을 활용하는 것도 처음 시작에 대한 감을 잡는데 좋은 방법이 될 수 있다.



그러쿠낭~ 반가워용

Unity 3를 이용한 Image Effects
http://www.youtube.com/watch?v=wc1vJ-FixM8