Journal of Standards and Standardization, Vol. 6, No. 3, 30 September 2016, pp. 45-54 ISSN 2234-0408 http://www.standards-standardization.org Copyright c 2016 SSS 1) 3D 가상환경언어바인딩표준개발 이민근 1, 정철희 2, 이명원 3 1 ( 주 ) 동아닷컴, adora98@naver.com 2 ( 주 ) 컴투스, whiskerfe@hanmail.net 3 수원대학교정보미디어학과, mwlee@suwon.ac.kr Development of a Language Binding Standard for 3D Virtual Environments Mingeun Lee 1, Chul-Hee Jung 2 and Myeong Won Lee 3 1 DongA.com Inc., adora98@naver.com 2 Comptus Inc., whiskerfe@hanmail.net 3 Dept. of Information Media, The University of Suwon, mwlee@suwon.ac.kr (2016-03-28 접수 ; 2016-09-26 수정 ; 2016-09-28 채택 ) 요약 3D 가상환경응용이증가하면서각응용에서의 3D 데이터의저장과전송이늘어나고응용간의 3D 데이터의호환성에대한요구도갈수록커지고있다. 이러한 3D 데이터전송과호환성을위한데이터형식으로대표적인국제표준으로 ISO/IEC 19775-1 X3D (Extensible 3D) 가있다. 이표준에의해응용간의호환성있는 3D 데이터전송문제는해결할수있으나각응용에서공통적으로필요한 3D 데이터처리기능을공통함수로서사용할수있도록인터페이스를제공해야한다. 이를위해각응용프로그램에서 3D 데이터처리에서요구되는변수, 클래스, 함수들을위한인터페이스를표준화해야할필요성이있으며이를위한프로그래밍언어바인딩방법을제공해야한다. 본논문에서는 X3D 기반의 3D 가상환경데이터를이용하여일반 C++ 와 C# 응용프로그램에서 3차원장면을구성하고장면과응용간의상호작용이가능하도록하는언어바인딩방법에대해기술한다. 키워드 : 3D 가상환경, 3D 데이터호환성, 3D 가상환경언어바인딩, 3D C++, 3D C# * Correspondence to: Myeong Won Lee, E-mail: mwlee@suwon.ac.kr
46 Mingeun Lee, Chul-Hee Jung and Myeong Won Lee ABSTRACT As applications that take advantage of 3D virtual environments have become more prevalent, the need for consistent storage and transfer of 3D data, including exchangeable 3D data between applications, has also increased. ISO/IEC 19775-1 X3D (Extensible 3D) is a representative international standard for the data format to be used for the transmission and exchangeability of 3D data. Although the standard provides a solution for the transmission of exchangeable 3D data between applications, it is also necessary to provide interfaces that can be used as common functions for 3D data processing through applications. This requires standardized interfaces for variables, classes, and functions for 3D data processing with programming language binding capabilities. In this paper, language binding methods that can organize 3D scenes using X3D based 3D virtual environment data in general C++ or C# programming applications, and that provide the capability for interaction between 3D scenes and applications, are described. Key words: 3D Virtual Environments, Extensible 3D Data, 3D Virtual Environments Language Binding, 3D C++, 3D C# 1. 서론 3D 가상환경응용개발이증가하면서생성된가상환경을서로다른시스템간이나응용프로그램간에전송하여사용할수있는호환성있는 3D 데이터에대한필요성이더욱커지고있다 [1]. 3D 가상환경데이터는 3D 스캐너, 3D 프린터, 모션캡처장치등주변장치의발전으로많은분야에서활용이증가하고있는추세이다 [2]. 3D 가상환경생성과수정방법으로는일반적인경우에 3D Max나 Maya 와같은그래픽스도구를사용하여프로그래밍작업없이대화형사용자인터페이스에서가상환경을생성하여각도구에서가상환경의모델링과렌더링결과를확인하고저장을하나각회사의고유형식으로저장되므로다른프로 그램이나다른응용에서공통으로사용하기는어렵다. 위의일반 3D 도구에서생성된가상환경을이용하여추가적인동적인기능을부여하려고하면 C++, C# 과같은범용의프로그래밍언어나자바스크립트언어와같은스크립트언어를이용하여야하는데 3D 데이터가볼수있는형태로오픈되어있지않아서일반프로그래밍환경으로들어오기가쉽지않다. 생성된가상환경에변화를주려고해도원래사용했던그래픽스도구를사용해야만해서 3D 데이터의재사용과공동사용에문제가발생한다. 이상의일반 3D 도구에서의문제를해결하고 3D 데이터를여러응용이나시스템에서공동으로사용하고재사용가능하도록한 3D 파일형식으로 X3D (Extensible 3D) 가있다 [3]. X3D는 VRML (Virtual Reality Modeling Language) [4] 의후속버전으로 3D 가상환경생성언어이며오픈된
3D 가상환경 언어 바인딩 표준 개발 47 ASCII 형식으로 되어 있어서 일반 범용 프로그래 language bindings: Java [9]의 두 종류 언어 바 밍 언어를 이용하여 가상환경을 프로그래밍 할 수 인딩 표준이 있다. 본 논문에서는 3D 가상환경 데 있다[5]. X3D 외에도 Khronos Group에서 추진 이터를 C++와 C# 프로그래밍 환경에서 여러 시 하고 있는 3D 데이터셋 교환 형식으로 COLLADA 스템 간에서 변수와 함수들을 정의하고 이들을 호환 가 있다. 이것은 OpenGL 그래픽스 라이브러리 기 성 있게 재사용할 수 있도록 해주는 언어 바인딩 표 반으로 되고 있어서 이에 따른 데이터 활용의 제한 준 개발에 대해서 기술한다. 을 갖는다. 이상과 같이 X3D 가상환경의 경우 일반 범용 프 로그래밍 언어로 3D 데이터 처리가 가능하지만 응 2. 가상환경 모델링 언어 표준 용 프로그램에 따라 가상환경을 구성하는 모든 오브 젝트 처리가 서로 다르게 구현될 것이므로 가상환 경 생성이나 업데이트에 있어서 개발 내용의 중복 본 연구에서의 가상환경 언어 바인딩을 위해 필요 성과 호환성 부재로 인한 부작용과 비효율성이 초 한 3D 가상환경 모델링은 X3D 데이터 형식을 기 래된다. X3D를 C++ 프로그래밍으로 처리하는 응 반으로 구성한다. 본 절에서는 3D 가상환경 모델링 용 개발도 있으나 응용 프로그램간 호환성을 고려 언어의 대표적인 국제표준인 X3D의 기본적인 기능 한 개발은 아직 이루어지고 있지는 않다[7]. 이러한 을 간단히 설명하며 언어 바인딩을 통해 가상환경 문제 해결을 위하여 X3D 언어 바인딩 방법으로 개발 모델링 데이터가 응용 프로그램으로 연결되는 시스 된 ISO/IEC 19777-1 X3D language bindings: 템 구성에 대해 기술한다(그림 1). 3D 가상환경 구 ECMAScript [8]와 ISO/IEC 19777-2 X3D 성을 위해 X3D 가 제공하는 기능은 다음과 같이 요 그림 1. X3D 시스템 구성
48 Mingeun Lee, Chul-Hee Jung and Myeong Won Lee 약된다 : 3차원가상공간의월드좌표계에표현할수있도록오브젝트의기하와속성데이터정의 다른파일이나응용으로의하이퍼링크지정 오브젝트의행동기술 외부다른응용프로그램과연결 X3D는폴리곤기하, 파라미터기하, 계층적변환, 조명, 재질, 다중단계의텍스처매핑기능을제공하는 3D 그래픽스를포함하며, 텍스트, 2D 벡터및 3D 변환계층내에서디스플레이되는텍스트, 2D 벡터및평면의형상을지원한다. 또한, 휴머노이드애니메이션이나모핑을위한연속적인애니메이션에필요한타이머와보간자 (interpolators) 를지원한다. 마우스기반의픽킹및드래깅과키보드입력과같은사용자상호작용기능을제공하며카메라, 3D 장면내에서의사용자의움직임, 충돌, 접근및가시성탐지등과관련된네비게이션기능을지원한다. 또한 X3D는사용자가정의하는자료형을생성하여내장된브라우저기능을확장할수있다. 프로그래밍및스크립트언어를사용하여장면을동적으로변화시킬수있으며네트워크상에있는다른장면이나데이터들을이용하여하나의 X3D 장면을구성할수도있다. 휴머노이드애니메이션, 지구공간데이터, 분산상호작용시뮬레이션프로토콜과통합하는물리적시뮬레이션기능도지원한다. 지구공간적으로 X3D 장면의객체들을정확하게위치시킬수있으며 CAD 시스템과매핑되도록 CAD 모델을나타낼수있다. 그리고, X3D 장면들을렌더링그룹들로구성하여각레이어의객체들이하위레이어들의객체들을겹칠수있도록하였다. 프로그래밍을지원하는쉐이더로 X3D 라이팅모델을주문형쉐이더프로그램으로교체할수있으며, 파티클시 스템에의해불과연기와같은파티클을생성할수가있다. X3D 데이터를처리하는시스템은 3D 파서, 장면그래프관리자, 장면그래프데이터구조, 프로그래밍엔진, 장면접근인터페이스등으로구성된다. 3D 파서는각파일포맷을입력하여장면그래프에필요한내부데이터구조로변환시킨다. 장면그래프관리자는파서를통해들어온오브젝트들을이용하여 3D 장면생성에필요한장면그래프구성을진행한다. 장면의변화를가져오는상호작용이나애니메이션등에의한이벤트는별도로관리된다. 외부응용에서장면에있는각오브젝트에접근하기위해서는장면접근인터페이스를통하며언어바인딩기능은장면접근인터페이스를각언어에서구현할수있도록한다. 3. 3D 장면접근인터페이스 가상환경언어바인딩은 3D 가상환경을구성하는각오브젝트들을제어하여장면의변화를가져오게할수있는장면접근인터페이스와밀접한관계가있다. 장면접근인터페이스는브라우저내부혹은외부의일반프로그래밍언어를이용한응용프로그램에서브라우저에서관리하는가상공간내모든오브젝트들의값에접근할수있도록한다. X3D 의장면접근인터페이스는프로그래밍언어에독립적인방법으로정의되어있으며특정프로그래밍언어로바인딩한것으로 ISO/IEC 19777-1 X3D language bindings: ECMAScript [8] 와 19777-2 X3D language binding: Java [9] 가있다. X3D 장면접근인페이스는다음방법으로 3D 장면에접근하여반응한다 :
3D 가상환경언어바인딩표준개발 49 브라우저기능으로서접근가능 브라우저행동으로나타나는결과 ( 잘못된 URL, 브라우저시작과종료등 ) 장면내노드의필드에입력할수있는이벤트를전송 장면내노드의필드가출력할수있는경우마지막값을읽음 이벤트가장면내노드필드의값을변경시켜서장면에변화가생김본연구에서는이상과같은 X3D 장면접근인터페이스의각노드와필드에접근하는방법을이용하여 C++ 과 C# 응용프로그램에서가상환경장면의각오브젝트에접근하도록하여장면의생성, 변화, 교환등을가능하게한다. X3D 장면접근인터페이스를통해서가상환경장면에변화를제공하는데사용되는데이터로는브라우저, 장면에대한메타데이터, 장면그래프내의노드, 노드내필드로구성된다. 노드는장면생성이나변화에필요한컴포넌트를구성하는 3D 데이터구조체이다. 필드는노드구성에필요한데이터속성들을나타내며외부프로그램에서값을얻거나값을내보내는저장소역할을갖는다. 4. 가상환경 C++ / C# 언어바인딩 가상환경 C++ 과 C# 언어바인딩을위해서는가상환경장면을구성하는오브젝트의데이터값들에변화를줄수있도록장면의내부혹은외부로부터장면의각오브젝트에접근할수있는인터페이스를제공한다. 이를위해서장면접근인터페이스를 C++ 혹은 C# 응용프로그램에서일관성있게사용할수있도록장면접근인터페이스가필요로 하는노드와필드들의데이터타입과데이터값을정의해야한다. C++ 과 C# 은자바스크립트언어와는달리컴파일을필요로하므로내부장면접근인터페이스구현은어려움이있으므로외부응용프로그램으로부터의장면접근인터페이스구현에초점을둔다. 4.1 절에서는 X3D에서정의된필드값을 C++ 과 C# 응용프로그램에서사용할필드값으로사용하기위해데이터타입을매핑시키고, 4.2 절에서는 C++ 과 C# 프로그램에서 X3D 오브젝트필드타입을사용할수있도록 C++ 과 C# 언어로데이터타입을매핑시킨다. 4.1 장면구성오브젝트필드값매핑 C++ 과 C# 응용에서장면접근인터페이스를이용하여가상환경장면을제어하기위해서는먼저장면을구성하는각오브젝트표현에사용되는 X3D 노드의필드값들의접근방법을정의해야한다. 외부 X3D 가상환경파일이 C++ 과 C# 응용프로그램에들어올때 X3D 노드를구성하는필드값의 C++ 과 C# 프로그램으로매핑될수있도록해주는언어바인딩인터페이스가필요하다. 이인터페이스에의해 C++ 과 C# 응용프로그램으로매핑된 3D 오브젝트의각필드데이터타입과데이터값은장면그래프관리자에의하여화면을구성하는장면그래프데이터구조로전달되게된다 ( 그림 2). 이벤트데이터의경우에도언어바인딩인터페이스를통하여 C++ 과 C# 응용프로그램으로들어와서장면에변화를주기위한이벤트그래프를형성한다. 장면그래프관리자는파서가해석한 X3D 파일의인코딩타입에따라장면그래프데이터구조를완성하고응용프로그램에서장면그래프데이터에접근할수있도록한다. 표 1은 X3D 가상환경장면접근인터페이스에
50 Mingeun Lee, Chul-Hee Jung and Myeong Won Lee 정의되어있는필드값의데이터타입을 C++ 데이터타입으로매핑시킨것을나타낸다. 이것은장면을구성하는오브젝트를생성하거나접근하여필드값을변화시킬때필드값을위한데이터타입을 C++ 프로그래밍에서제공하는데이터타입으로변경해줘야하는것을의미한다. 표 2는가상환경필드값의데이터타입을 C# 데이터타입으로매핑시킨것이다. 표 1. X3D 오브젝트필드값의데이터타입을 C++ 데이터타입으로매핑 X3D 필드데이터타입 C++ 데이터타입 Bool bool Int32 int Long long Float, Vec2f, Vec3f, Rotation float Double, Vec2d, Vec3d double Color float String w_char Time double Image int 표 2. X3D 오브젝트필드값의데이터타입을 C# 데이터타입으로매핑 X3D 필드데이터타입 C# 데이터타입 Bool bool Int32 int Long long Float, Vec2f, Vec3f, Rotation float Double, Vec2d, Vec3d double Color float String string Time double Image int 4.2 장면구성오브젝트필드타입매핑 X3D 오브젝트타입을 C++ 과 C# 응용프로그램에서사용할수있도록하기위해서 X3D 오브젝트타입을 C++ 과 C# 데이터타입으로변환하는것이필요하다. X3D 오브젝트타입을 C++ 프로그램에서그대로사용할수있도록함으로써 X3D 그림 2. C++/C# 언어바인딩시스템구조
3D 가상환경언어바인딩표준개발 51 데이터와응용프로그램간호환성및응용프로그램 간호환성을가질수있게된다. 표 3은 X3D 데이 터타입을 C++ 응용프로그램에서사용할수있 도록 C++ 데이터타입으로변환한것이다. 표 4 는 X3D 데이터타입을 C# 프로그램에서사용할수 있도록 C# 데이터타입으로변환한것이다. 표 3. X3D 필드데이터타입의 C++ 데이터타입으로변환 X3D Field type C++ representation Value SFBool static int SFBool 1 MFBool static int MFBool 2 MFColor static int MFColor 25 SFColor static int SFColor 26 MFColorRGBA static int MFColorRGBA 27 SFColorRGBA static int SFColorRGBA 28 SFDouble static int SFDouble 9 MFDouble static int MFDouble 10 SFFloat static int SFFloat 7 MFFloat static int MFFloat 8 SFImage static int SFImage 29 MFImage static int MFImage 30 SFInt32 static int SFInt32 4 MFInt32 static int MFInt32 3 SFLong static int SFLong 5 MFLong static int MFLong 6 SFNode static int SFNode 13 MFNode static int MFNode 14 SFRotation static int SFRotation 24 MFRotation static int MFRotation 23 SFString static int SFString 31 MFString static int MFString 32 SFTime static int SFTime 11 MFTime static int MFTime 12 SFVec2f static int SFVec2f 15 MFVec2f static int MFVec2f 16 SFVec2d static int SFVec2d 17 MFVec2d static int MFVec2d 18 SFVec3f static int SFVec3f 19 MFVec3f static int MFVec3f 20 SFVec3d static int SFVec3d 21 MFVec3d static int MFVec3d 22 표 4. X3D 필드데이터타입의 C# 데이터타입으로변환 X3D Field type C# representation Value SFBool static int SFBool 1 MFBool static int MFBool 2 MFColor static int MFColor 25 SFColor static int SFColor 26 MFColorRGBA static int MFColorRGBA 27 SFColorRGBA static int SFColorRGBA 28 SFDouble static int SFDouble 9 MFDouble static int MFDouble 10 SFFloat static int SFFloat 7 MFFloat static int MFFloat 8 SFImage static int SFImage 29 MFImage static int MFImage 30 SFInt32 static int SFInt32 4 MFInt32 static int MFInt32 3 SFLong static int SFLong 5 MFLong static int MFLong 6 SFNode static int SFNode 13 MFNode static int MFNode 14 SFRotation static int SFRotation 24 MFRotation static int MFRotation 23 SFString static int SFString 31 MFString static int MFString 32 SFTime static int SFTime 11 MFTime static int MFTime 12 SFVec2f static int SFVec2f 15 MFVec2f static int MFVec2f 16 SFVec2d static int SFVec2d 17 MFVec2d static int MFVec2d 18 SFVec3f static int SFVec3f 19 MFVec3f static int MFVec3f 20 SFVec3d static int SFVec3d 21 MFVec3d static int MFVec3d 22 5. X3D 장면접근인터페이스의 C++ 과 C# 언어바인딩응용예 본절에서는 X3D 데이터를이용하여응용프로
52 Mingeun Lee, Chul-Hee Jung and Myeong Won Lee 그램을 개발할 때 필요한 장면 접근 인터페이스 의 생성과 편집에 필요한 장면 접근 인터페이스 일부 C++과 C# 언어 바인딩 예를 보여준다. 장면 접근 (좌측)을 보여준다. 즉 일반 응용 프로그램에서 박 인터페이스가 호출될 때 필요한 필드 값이 사용될 스 오브젝트를 장면에 표현할 때 사용하는 장면 접 때 4 절에서 기술한 오브젝트 데이터 타입과 필드 근 인터페이스를 나타낸 것이다. 값의 데이터 타입이 매핑되어 들어간다. 그림 4는 장면 접근 인터페이스(좌)의 C++ 언어 그림 3은 3차원 장면 구성에서 박스 오브젝트가 바인딩 예이며 그림 5는 C# 언어 바인딩 예를 보여 저장된 X3D 파일의 내용(우측), 박스 오브젝트의 준다. 이 그림에서 보여주는 바와 같이 C++ 바인 그림 3. X3D 파일(좌)과 장면 접근 인터페이스(우) 그림 4. 장면 접근 인터페이스와 C++ 언어 바인딩 예
3D 가상환경언어바인딩표준개발 53 그림 5. 장면접근인터페이스와 C# 언어바인딩예 딩프로그램에서는각그래픽스객체의참조자를사용하고있으나 C# 에서는각그래픽스객체명을사용하여객체에접근한다. 6. 결론 본논문에서는 3D 가상환경데이터를 C++ 와 C# 프로그래밍환경에서여러시스템간에서변수와함수들을정의하고응용프로그램들간에서호환성있게재사용할수있도록해주는가상환경언어바인딩표준개발에대해서기술하였다. 본연구에서개발된표준화된변수와함수를이용하여 C++ 과 C# 프로그래밍환경에서 3차원가상환경을구성할수있으며개발된프로그램들은서로다른시스템간에서재사용과호환이가능하다. 가상훈련시스템, 가상현실응용서비스, 가상공간시뮬레이션등많은분야에서일반범용프로그래밍언어를이용한 3D 가상공간정보처리가필요 하다. 이를위해다양한분야에서의요구사항에따른시스템개발이요구되고있으며, 3D 가상공간을구성하고시뮬레이션하는데필요한데이터가범용의프로그래밍언어개발환경으로들어올수있어야한다. 본연구의언어바인딩은이러한목적으로국제표준개발을진행하고있으며 ISO/IEC JTC 1/SC 24 표준화그룹과 Web3D Consortium 이공동으로표준화를추진하고있다. 참고문헌 [1] Jose I. J. Rodrigues, Mauro J. G. Figueiredo, Celso P. Costa, Web3DGIS for City Models with CityGML and X3D, 2013 17 th International Conference on Information Visualization, 2013. [2] Sharad Sharma and Wenhao Chen, Multiuser Classroom with 3D Interaction and Real- Time Motion Detection, 2014 International Conference on Computational Science and
54 Mingeun Lee, Chul-Hee Jung and Myeong Won Lee Computational Intelligence, 2014. [3] Don Brutzman and Leonard Daly, Extensible 3D Graphics, Morgan Kaufmann Publishers, 2007. [4] ISO/IEC 14772-1: 1997 and ISO/IEC 14772-2: 2004, VRML 97 Functional and EAI, 2004. [5] ISO/IEC 19775-1: 2013 X3D Architecture and base components V3, 2013. [6] Khronos Group, COLLADA Overview, 2008. [7] Luciano P. Soares and Marcelo K. Zuffo, JINX: An X3D Browser for VR Immersive Simulation Based on Clusters of Commodity Computers, Proceedings of Web3D Conference, 2004. [8] ISO/IEC 19777-1: 2006 X3D language bindings: ECMAScript, 2006. [9] ISO/IEC 19777-2: 2006 X3D language bindings: Java, 2006.