-
실시간 3D 렌더링을 이용한 애니메이션 제작 환경 (스크랩)정리필요2 2008. 3. 11. 09:06실시간 3D 렌더링을 이용한 애니메이션 제작 환경
3D RENDERING 수원 애니메이션 툴 OGRE3D
본 프로그램은 실시간 렌더링을 통한 애니메이션을 생성하는 기능을 가진 프로그램이다.
[SW 주요기능]
- 실시간 렌더링을 통한 애니메이션의 구성, 편집
- 사운드 이벤트 삽입
- SMI 자막 추가
노기태 이승근 김재일
현대의 실시간 3D 기술은 그래픽 가속기의 발전과 Programmable Shader 를 통해 그래픽카드가 제공하던 Fixed Pipeline 을 벗어나 프로그래머가 GPU를 프로그래밍 함으로서 좀 더 다양한 연출을 빠르게 구현하여 그래픽 품질을 Pre-Rendered CG 의 수준에 근접하게 만들어가고 있다.
Pre-Rendered CG 의 경우 어느 경우보다 우수한 그래픽 품질과 다양한 연출을 보장하지만 한 프레임 한 프레임의 렌더링이 오래 걸리기 때문에 작업 시간이 오래 걸리고 연출에 대한 효과를 바로 확인할 수 없는 단점이 있다.
[실시간 동영상의 예]
하지만 실시간으로 애니메이션을 구현하게 되면 별도의 렌더링시간을 요구하지 않고 모든 연출을 곧바로 확인할 수 있어서 작업 시간이 획기적으로 줄어들게 되고 수정도 용이하여 전체적인 작업의 비용이 감소하는 효과를 얻을 수 있고, Pre-Rendered CG에서 얻을 수 없는 CG 영상의 실시간 반응도 쉽게 구현할 수 있으며 영상의 확대/축소에도 깨끗한 화질을 얻을 수 있다.
현대 기술의 발전에 따라 실시간 가속기의 능력도 분부시게 향상되어 실시간 3차원 그래픽의 수준이 예전 Pre-Rendered CG수준에 근접하는 상황까지 오게 되었다. 본 프로젝트에서는 3차원 가속기의 성능을 활용하여 높은 품질의 실시간 3차원 영상을 만들어 낼 수 있는 도구를 만드는 것으로서 간단한 방법으로 사람들이 3D 애니메이션을 만들 수 있도록 하는데 목표를 두었다.
본 프로젝트는 3차원 가속기의 성능을 활용하여, 사용자가 간단한 방법으로 3D 애니메이션을 만드는 것이 목표로써, 제일 중요한 것은 3D 표현 그 자체가 아니라 3차원 애니메이션을 어떻게 구현할 것인가에 대한 것이다.3차원은 그 자체로서 공간을 가지지만 물체가 원하는 방향대로 움직이기 위해서는 시간에 따라 물체에 이동 방향 및 속성을 지정 해 주어야 애니메이션이 생성되기 때문이다.
예전에 진행하였던 Project Aggressive 라는 게임에서 위와 같은 형식의 2차원 영상 제작 프로그램을 도구로서 제작하였다.
위 프로젝트의 장점은 2D 출력을 3D로 구현하여 충분한 가속효과를 누리면서 확대, 회전, 반투명, 이동등의 각종 효과를 낼 수 있었던 것이다.[그림1. 2차원 영상 제작 프로그램]
이번 프로젝트에서는 위 프로그램을 3차원으로 확장하여 3차원 영상을 만들 수 있는 도구를 구현하는데 그 중점을 두었으며 그 근간을 위 도구와 같이 시간에 기반한 키프레임을 두는 것으로 하였다.
실제 프로그램을 제작하는데 많은 시간이 들것으로 예상하여 본 프로젝트에서는 제작기간을 줄이고 불필요한 시행착오를 줄이기 위하여 공개 렌더링 엔진으로서 널리 쓰이고 있는 OGRE 3D 엔진을 이용하였다.
사운드 모듈역시 FMOD라는 널리 알려진 사운드라이브러리를 적용하여 빠르고 효율적인 개발 환경을 구축하였으며 검증된 라이브러리를 이용함에 따라 프로그램의 오류가능성을 줄이는데 큰 역할을 하였다.
1.1. 과제 목표본 프로젝트는 사용자가 3D 애니메이션을 쉽게 제작할 수 있는 환경을 제작하는 것이다. 이 도구는 다음과 같은 기술들을 포함하고, 본 프로젝트에서 이 기술들을 구현하는 것을 목표로 한다.
1.1.1. Map
Map 은 말 그대로 영상의 바탕이 될 바탕을 말한다. 간단한 지형이 세워지고, 그 위에 필요에 따라 오브젝트가 올려진다. 이들은 각자의 역할에 따른 재질과 간단한 애니메이션이 주어지지만 Track 과 Event에서 제어되지 않는 부분만을 포함한다.
아래 사진은 언리얼 엔진에서 제공하는 맵 툴이다. OGRE 3D 엔진에서는 맵을 구성할 수 있는 도구를 제공하지 않기 때문에 맵툴을 직접 만들어 써야 한다. 따라서 본 프로젝트에서는 맵 위에 오브젝트를 얹고, 그 위로 카메라를 이동시켜가며 볼 수 있는 기능을 갖춘 맵 툴을 제작하는 것을 하나의 목표로 삼았다.
[그림2. Unreal Engine 에서 제공하는 Unreal Editor]1.1.2. Track
트랙은 일종의 레이어 개념으로서 지정된 오브젝트가 이벤트를 발생시킬 시간 축이다. 트랙의 시간축 위에 이벤트가 지정되며 지정된 이벤트 사이의 공간은 Linear 하게 interpolation 된다. 트랙의 종류는 일반 오브젝트가 지정되는 트랙이 있고, 카메라가 위치하는 카메라 트랙, 조명이 존재하는 조명 트랙이 있다. 카메라와 조명 이외에 추후 추가될 수 있는 것들을 위하여 예약된 트랙도 존재하며, 트랙의 수는 제한을 두지 않기 때문에 가변적으로 필요한 만큼 할당하여 쓸 수 있다.
아래는 프로젝트에서 목표로한 Track의 리스트를 보여주는 부분의 예시로서 위의 형태로 Track을 사용자가 조절할 수 있는 기능을 추가하는 것을 목표로 삼았다.
[그림 3. Track List 예시]1.1.3. Event
이벤트는 특정 시간에서 트랙에 지정된 오브젝트가 어떻게 변화되는지를 지정하는 것이다. 발생할 수 있는 이벤트는 다양하고, 사용자가 지정해 줄 수 있는 애니메이션 종류들의 영향을 받게 된다.
발생가능한 이벤트는 다른 오브젝트로 변경, 이동, 회전, 애니메이션 지정, 피봇 지정등 다양하게 존재하며, 이 이벤트를 구성하고, 실제 애니메이션 작성시 반영할 수 있는 기능이 필요하며, 실시간으로 확인할 수 있어야 한다.
1.1.4. SMI Parser
애니메이션에서 자막 효과는 여러 가지 목적으로 활용이 가능하다. 영어로 음성을 입혔을 때, 한글로 번역을 알려주거나, 현재 상황을 알려주는 도우미로서의 역할로 자막을 활용할 수 있는데, 가장 많이 사용되는 자막의 방식이 바로 SMI 파일 형식의 자막이다. SMI 파일 형식은 여러가지 태그를 가지고, 내용, 텍스트 스타일, 테이블 등을 지정해 줄 수 있는 XML 파일 형식 중의 하나로서, 이를 활용하기 위해서는 SMI 파일을 분석할 수 있는 Parser를 포함해야 한다.
1.2. 실제 완성 결과
프로젝트 초기에는 OGRE3D 엔진의 기능을 테스트 하며 툴에서 제일 중요한 UI를 구성하는데 노력을 기울였는데, 초기에 테스트하였던 UI에서는 OGRE3D 엔진에서 제공하는 CEGUI 프레임워크를 이용하였는데, 실제 사람들이 익숙한 윈도 응용프로그램 UI 와 많이 차이가 나서 결국은 포기하고 일반적인 MFC 형식으로 이동하게 되었다.
프로젝트의 결과로 목표로 했던 Map, Event, Track 기능, SMI Parser 기능들은 모두 구현이 되었고, 다음은 그 결과를 보여준다.
1.2.1. 결과 스크린샷
다음 화면은 맵과 Track List, 그리고 현재 실시간 애니메이션의 각종 키프레임을 설정할 수 있는 결과 프로그램의 캡처 화면이다. Track 리스트에서 모델의 애니메이션을 만들기 위해 키를 설정해 줄 수 가 있고, 그 설정에 따라 아내 맵이 표현된 화면에서 애니메이션이 실시간으로 이루어 지게 된다.
[그림 4. 프로그램 실행 화면]다음 화면은 실제 비행기 모델을 가지고 실시간 애니메이션을 제작해 본 것이다. 비행기의 애니메이션을 키프레임 애니메이션 방식을 통하여 지정해 주었으며, 그에 따라 비행기가 실시간으로 움직이는 것을 확인할 수 있다. 또한 SMI Parser를 완성하여, 자막이 화면에 입혀진 것을 확인할 수 있다. 비행기를 따라 가상의 카메라도 함께 움직이도록 애니메이션을 설정함으로써 다양한 형태의 애니메이션을 제작할 수 있었다.
[그림 4. 프로그램을 통하여 간단한 동영상을 제작한 예제]
팀원 중 3D 모델링 툴(Maya, 3DS Max) 등을 활용하여 모델을 화려하게 만들 수 있는 기술을 가진 사람이 없어, 다양한 모델을 포함한 애니메이션을 제작해보지는 못하였다. 그러나 현재 구축된 실시간 애니메이션 제작 환경을 토대로 다양한 모델이 있다면, 실시간 애니메이션으로 제작하는 것이 충분히 가능하게 되었다.
1.1. 키프레임 애니메이션본 프로젝트의 핵심은 3차원 오브젝트의 시간에 따른 위치와 방향, 크기등의 파라미터를 가지고 보간을 통하여 애니메이션을 생성하는데 있다. 그를 위하여 Track 과 Event라는 개념을 만들어 프로젝트를 진행하였는데, Track은 흔히 포토샵등의 어플리케이션에서 볼 수 있는 Layer 와 같은 기능이고 Event 는 각 트랙에 할당된 오브젝트들이 시간에 따라 어떻게 행동하는지를 보여주는 파라미터이다.
[그림5. 이벤트 속성 편집창]각 트랙에는 3차원 오브젝트, 사운드 데이터가 담길 수 있도록 되어있으며 이벤트와 이벤트 사이의 동작은 선형 보간 (Linear Interpolation)을 통하여 자동 생성된다. (기타 보간 기술은 요구에 따라 넣을 수 있도록 되어있다.)
선형 보간은 위와 같은 식을 통하여 중간값 y를 구하게 되며 아래 그래프는 선형 보간으로 얻어진 x, y 의 예 이다.
[그림6. 선형보간의 결과를 알 수 있다.]1.2. XML Data Format
또 하나 본 프로젝트의 특징중 하나는 프로그램의 데이터에 XML 포멧을 적극적으로 이용하고 있다는 것이다.
[그림7. 애니메이션 데이터가 XML 포멧으로 저장된 예]사실 엔진과 UI는 어느정도 별개로 돌아가게 되어 있는데, 실제 툴의 UI가 완성되기 전까지 엔진의 정상적 가동 여부를 힘든 경우가 많이 있다. 데이터 파일 또한 TOOL을 통하여 생성하게 되어있어 데이터 파일만 가지고 작업을 하기에도 쉽지 않은 상황이기 때문이다.
하지만 이 프로젝트에서는 데이터 포멧에 XML을 이용하여 이 문제를 해결할 수 있었다. 미리 데이터 포멧을 정한 다음 간단하게 그 포멧을 따르도록 엔진을 구성하였고 XML 로더 부분을 구성하였다. XML 데이터는 텍스트 에디터를 통해 구성하고 그 이후 엔진을 테스트를 진행 하였다. 엔진과 데이터의 구조가 빠르게 나왔기 때문에 UI 작업도 정해진 설계에 맞춰 할 수 있는 장점이 있었다.
1.3. SMI 자막 지원
영상에 있어 필수적으로 필요한 것이 자막 기능이다. 본 프로그램에서는 PC 환경에서 동영상의 자막으로 많이 쓰이는 SMI 포멧을 자막으로 이용할 수 있도록 제작하였다. 자체적인 SMI Parser 를 제작하여 검증 후 이용하였고, 프로그램에서는 TrueType 폰트 출력 루틴을 통해 EUC-KR을 유니코드로 변환한 뒤 내부적으로 이용하도록 하였다.
- Software
[IDE] Visual Studio 2005
[SDK] DirectX SDK, OGRE 3D, FMOD
[SW] Programmer's Notepad, 그림판, Photoshop
[OS] Windows XP, Windows Vista
[추후 개발 사항]
- 좀 더 다양한 효과와 연출을 제공하여 고품질의 영상을 제작할 수 있는 도구로 발전
- Full-HD 를 지원할 수 있도록 프로그램의 질을 향상
- 사운드 이벤트의 Looping 및 3차원 효과 추가
팀원 대부분이 3D 애니메이션에 대한 개념이 명확하지 않아서 프로젝트 초기 틀을 잡는데 문제가 많았었다.
게다가 바쁜 학사일정 덕분에 회의시간 잡기도 쉽지 않았는데, 결국 3D 애니메이션에 관한 구조는 PL인 노기태가 잡기로 하고 전체적 툴 구조는 김재일 회원이, 그리고 데이터 구조 및 SMI 파서 부분은 이승근 회원이 각각 맡아서 진행하였었다.
바쁜 일정속에 프로그램 제작을 하느라 실제 얼굴을 맞대고 제작한 날보다는 온라인으로 제작을 한 날이 더 많았지만 여러가지 위험 속에서도 프로젝트는 꾸준히 진행되었다. 물론 제작 초기에 생각지도 못했던 문제가 발생하고, 그 문제를 다시 잡느라 밤을 지새고..
물론 나중에 밤을 덜샌 회원이 회식을 쏘는등의 이벤트를 가져서 충분히 보상이 되었지만 말이다. 이 프로젝트는 실제 기술을 어떻게 실용적인 기능으로 접목하는지, 프로그램의 설계는 어떻게 하는 것인지, 협업은 어떻게 해야 하는지 등등, 많은 것을 일깨워 준 소중한 기억이 될 것 같다.
3D 애니메이션을 쉽게 구현하도록 한 프로젝트로 참여 회원들이 게임 등에서 쌓았던 3D 관련 지식을 많이 활용하였다. 툴 사용이 쉽도록 제작되어 활용도가 높을 것으로 생각되나, 아직까지는 간단한 형태의 애니메이션 구현만 가능한 것이 아쉽다.