1. 과제개발의 개요 졸업 작품 결과 보고서 1. 개발 목적 사람들은 예로부터 하늘에 보이는 별에 대해 끊임 없이 호기심을 가지고 그 별들을 자세히 관찰하기 위해 망원경을 사용하여 천체관측을 하는 등 우주에 대한 많은 흥미를 느껴왔다. 하지만 일반 사람들에게 천체망원경의 사용방법과 별 자리에 대한 기본지식 없이는 천체망원경을 통해 별을 보기란 쉽지가 않다. 또한 기상악화, 환경오염과 같은 원인으로 요즘 시대에 별을 보기란 쉽지 않은데 우리는 이를 해결하기 위해 VR 이라는 도구를 이용하여 사용자가 시간과 장소에 따른 제약 없이 별들을 쉽게 관측 할 수 있도록 3D 별자리 시스템을 구현하려고 한다. 졸 업 예 정 월 2016년 2 월 제 출 일 2015. 11. 20 과 제 명 삼성VR을 이용한 별자리 관측 시스템 지 도 교 수 길 준 민 (인) 팀 명 별 헤는 밤 팀 장 이 우 창(인) 그림 1 과제 개요도 메시에 천체 목록(Messier Catalogue)에 있는 천체들을 Unity 3D로 가상으로 재 현하여 사용자가 기어 VR을 통해 생동감 있는 3D 화면으로 시간과 장소에 제약 없이 아름다운 은하를 감상할 수 있도록 한다. 사용자는 별자리에 관한 특별한 지 식 없이도 음성명령과 기어 VR에 내장되어 있는 터치패드를 이용하여 별자리와 행성들을 검색, 추적 할 수 있고 별과 행성들에 관한 정보로 얻을 수 있다. 2. 개발 목표 팀 원 - 그림 2 목적
2. 개발내용 1. 천체 데이터 파싱 및 천문 알고리즘 Bright Star Catalog(BSC) 와 Messier Catalogue(MES) 그리고 태양계를 구면좌표계에 표현 하기 위해서 적경,적위로 가지고 있는 별들과 주기(Orbit)으로 가지고 있는 태양계 행성들 을 천문알고리즘에 의하여 계산을 하여 궁극적으로 구면좌표계에 표현하는 과정이 필요했 다. 그림 5 좌표계 변환과정 좌표계는 위와 그림과 같이 크게 세가지로 변환이 되는데 먼저 처음에 우리가 텍스트로 가 진 별의 위치 정보는 적도좌표에서 사용되는 적경, 적위 데이터다. 이 데이터는 천문학자들 이 위도 경도와 시간에 의한 별의 관측 시기들을 적도 좌표를 기준으로 기록 한 것인데, 우 리는 이를 지평을 중심으로 나타내는 지평좌표로 나타내고, 마지막으로 구면좌표로 변환하 게 된다. 이때, 이 별들은 모두 지구 중심으로 발견된 위치를 나타냄으로 태양계와 달리 원의 중심 에서 변환된 Vector 데이터를 그대로 쓰면 된다. 그림 3 BSC 와 MES의 정보를 가진 txt 파일 그림 6 행성들의 주기(Orbit) 위의 그림은 BSC와 MES의 정보를 가지고 있는 각각의 파일이다. BSC의 경우 별의 실시등급 이나 적경, 적위, 이름 등의 정보를 가지고 있는데, 우리는 이 적경, 적위 데이터를 파싱하 여 우리가 나타내고자 하는 구면좌표계의 Vector 데이터로 변환하기로 하였다. MES같은 경 우도 마찬가지로 적경, 적위 데이터를 토대로 변환하여 구면좌표계에 나타내기로 하였다. 위의 그림은 행성들의 주기이다. 그림 7 행성들의 위치계산 과정 그림 4 별 들의 위치계산 과정 별 들의 위치를 계산하기 위해서는 크게 위의 그림과 같이 세 가지의 과정으로 이루어진 다. 순수 데이터인 적경, 적위 데이터를 천문 알고리즘을 토대로 계산을 한 뒤 삼각함수를 통해 구면좌표에 나타낼 수 있는 Vector 데이터로 변환하는 과정을 거친다. 행성들의 위치를 계산 하기 위에서는 위의 그림과 같이 크게 3가지 과정으로 이루어 진다. 먼저 우리가 가지고 있는 행성들의 주기(Orbit)데이터를 가지고 천문 알고리즘에 의해 계산 을 한다. 이 때 계산하는 값은 황경, 황위 데이터이다. 황경, 황위 데이터는 태양을 중심으 로 나타내는 황도 좌표에서 쓰는 값이므로 황경, 황위 데이터를 삼각함수를 통해 다시 구면 좌표에 표현할 수 있는 Vector 데이터로 나타내게 되는데, 이 때, 지구 중심으로 변환하기 위해서 현재 구한 Vector 데이터에서 지구 Orbit을 통해 구한 Vector 값을 빼주게 되면 궁 극적으로 지구 중심의 행성들의 위치를 구할 수 있다.
그림 10 별자리 선 그림 8 섭동 섭동은 행성의 궤도가 다른 천체의 힘에 의해 정상적인 타원을 벗어나는 현상을 말하는데, 달의 경우 섭동을 보정해주기 위해서 위의 그림과 같이 황경, 황위의 도값을 토대로 우리가 가지고 있는 원래의 값에 더해 줌으로써 보정을 하여 보다 정확한 값을 얻을 수 있다. 위의 그림은 Linelenderer 라는 컴포넌트를 통해 각 별자리의 시작점 끝점을 그어서 나타 낸 모습이다. 사용자가 보다 직관적으로 별 자리를 관측할 수 있고, 또한 별자리에 해당하 는 이름도 텍스트로 출력을 하여서 알아 보기 쉽게 구현하였다. 이 별자리 위치에 대한 인 덱스 값은 따로 Hashtable에 저장을 하여서 별 자리 검색을 할 때, 보다 빠르게 계산이 되 도록 구현하였다. 2. 기어VR 그림 11 기어VR 조작 그림 9 별자리 선 데이터 기어VR을 제어하는 방법은 이전버튼, 터치패드, 센서, 음량버튼 4가지를 이용한다. 본 프 로젝트에서는 이전버튼, 터치패드를 사용하여 메뉴를 제어하도록 하였다. 사용자로 하여금 보다 직관적으로 별 자리를 구분 할 수 있게 별 에다가 선을 긋기로 하였 는데, 이 선들은 위의 그림과 같이 각 별자리 마다 시작점, 끝점을 데이터로 파싱한 다음에 Unity의 Linelenderer라는 컴포넌트를 통해 선을 긋기로 하였다.
3. Android Google STT/TTS 그림 14 STT/TTS 사용 메뉴 그림 12 메뉴 특정 메뉴를 선택하는 것은 시선으로 바라보면 선택되어 지도록 구현하였는데 기어VR 앱 개발이기 때문에 유니티에서는 카메라를 2개를 사용하도록 되어 있다. 이 때 왼쪽, 오른쪽 카메라를 두고 그 가운데 임의의 오브젝트(CenterEyeObject)를 두고 Raycast와 RaycastHit 을 이용하여 CenterEyeObject와 충돌하는 메뉴에 대해 선택되어진 것으로 구현하였다. 어플리키이션 내에서는 음성을 이용하여 검색, 시간, 위치 등을 제어하도록 하고, 사용자 의 조작에 대한 피드백 또한 음성으로 통지하도록 되어 있다. 이 때 Android SpeechRecognizer/TextToSpeech를 이용하였는데 이 두 가지 모두 Android API로 포함되어 있어 Unity에서 사용하기 위해서 jar 플러그인으로 개발하여 사용해야한다. 그런데 Unity에 서도 OVR_SDK를 사용하였기 때문에 UnityPlayerNativeActivity에 STT/TTS 기능을 추가 구현 하여 사용하였다. 4. Unity3D 1) 검색 그림 13 유니티에서 기어VR용 카메라 그림 15 검색 이펙트 사용자는 검색 메뉴를 선택 후 음성을 통해 별자리 또는 행성을 말하면 카메라가 해당 별 자리, 행성을 찾아 바라본 후 검색 대상이 되는 별들은 광원효과가 적용되어 초록빛으로 발 광한다.
2) 지형 6. VR-Unity 간 Video View 제작 별자리나 행성을 검색 시 관련 정보나 영상이 나와 효과적인 교육이 가능하게 된다. 이 때 사용 되는 영상을 띄우기 위해서 영상 데이터를 여러 장의 이미지와 소리로 나눈 뒤 각각 화면에 이미지를 띄우고, 소리를 재생시킨 후 이미지가 일정 프레임마다 변환되며 영상의 효과를 낸다. 그림 16 다양한 지형 별자리를 바라 보기 위해 시간/위치를 조정할 때 마다 시간 위치에 따라 알맞게 지형이 달 라 진다. 낮/밤/해질녘/동틀녘/산/호수 등 다양한 지형에서 별을 관측함으로써 사용자의 흥 미를 높이도록 하였다 각 지형은 Terrain을 이용하였고 물, 바람, 불 등 다양한 효과를 적 용하였으며 다양한 Skybox와 light를 통해 시간에 따라 알맞은 화면을 구성하였다. 3. 개발일정 그림 18 특정 천체에 대한 영상 및 정보의 표현 5. 후방카메라를 이용한 증강현실 기능 안드로이드 플러그인을 통해 안드로이드 기기에서 현재의 GPS의 위도, 경도 값과 시간 값, 자기장 센서를 이용한 방향 값을 얻어오고, 그 정보들을 바탕으로 현재 후방카메라에 보여 야 할 천체들의 위치를 계산한다. 안드로이드 기기의 후방카메라를 통해 얻어온 실 영상 위 에 천체들의 모습을 겹쳐서 실제 하늘에 떠 있어야 할 천체들의 위치를 표현하였다. 추진 내용 천문학 알고리즘 안드로이드 플러그인 제작 UI 제작 VR-Unity Video View 제작 책임자 이우창 수행기간(월) 7월 8월 9월 10월 비 고 후방카메라 제작 코드 최적화 그림 17 후방카메라를 이용한 증강현실 기능이 구현된 화면
4. 완료과제의 결과물 가. 별자리를 기어VR을 통하여 관측할 수 있다. 나. 현재 위치에 대한 별자리에 대한 정보를 얻을 수 있다. 다. 별자리를 음성인식을 통해서 찾을 수 있다. 라. 대륙 간( 아메리카, 아프리카 등 ) 이동하여, 그 위치에 대한 별자리 정보를 얻을 수 있다. 마. 후면카메라를 통해 현재 위치의 별자리를 증강현실로 볼 수 있다. 라. 별자리에 대한 어원을 동영상을 통해서 습득할 수 있다. 5. 기대효과 및 개선방향 가. 기대효과 - 별자리에 관한 지식이 부족한 일반 사람들도 별자리에 대하나 정보를 얻을 수 있음 - 시간과 장소에 따른 제약없이 별자리 관측이 가능함 - 실시간 3D화면으로 생동감 있게 별자리를 관측할 수 있음 나. 개선방향 - 모바일 전용 오큘러스 SDK를 커스텀하여 최적화 작업 필요 - 서버를 따로 구현하여, 별자리 계산 부분을 서버에 넣어 효율을 올릴 필요가 있음( 현재는 모바일에서 작업을 진행함 ) - 별자리 정보를 더 추가하여, 더 많은 정보를 얻을 수 있게 개선 6. 건의사항(애로사항) 가. 건의사항 - 모바일 하드웨어 스펙의 한계가 존재함( 하드웨어 스펙이 올라갈수록 속도는 더 올랄 갈 것 ) 7. 참고문헌 등 :
- practical astronomy with your calculator : Duffett-Smith, PETER 저 - Astronomical algorithms : Meeus, Jean H. 저 대구가톨릭대학교 IT공학부 작품 결과물 결과물 삼성VR을 이용한 별자리 관측 시스템
결과물 삼성VR을 이용한 별자리 관측 시스템 대구가톨릭대학교 IT공학부 작품 후기 팀명 별 헤는 밤 작성자 이우창 마지막 프로젝트인 졸업작품이 끝이 났습니다. 전 4학년 1학기를 마치고, 1년 휴학을 하여 기존의 졸업작품팀에서 나오게 되었습니다. 그리고 마지막 학기를 복학 후, 현장실습으로 인해 창의공학설 계 수업을 수강하지 않았기 때문에, 혼자서 프로젝트를 진행했습니다. 하지만 삼성소프트웨어멤버 십이라는 단체에 가입되어 있어, 많은 프로젝트를 수행하였고, 가장 최근에 한 프로젝트를 졸업작 품을 위해 만들었습니다. 프로젝트를 시작할 때, 어떤 프로젝트를 할까 많은 고민을 했습니다. 그때 문득 하늘을 봤는데, 하늘에 있는 별자리가 안보였습니다. 그래서 요즘에 나온 기어VR을 이용해서 별자리 관측하면 어떨 까라는 생각을 하게 되어 이 프로젝트를 진행했습니다. 기어VR을 사용하기 위해선 다양한 방법이 있었는데, 그 중 요즘 핫한 3D엔진인 Unity를 사용하여 구현했습니다. 마지막 프로젝트인 만큼 많은 노력을 하였고, 결실을 맺었습니다. 처음엔 갤럭시노 트4을 이용해서 만들었습니다. 그리고 갤럭시s6엣지가 나왔고, 더 좋은 퀄리티를 올릴 수 있었습니 다. 하지만 Unity는 PC에서는 하드웨어 스펙이 좋기 때문에 별자리의 많은 오브젝트와 다양한 이펙트 가 있어도 아무런 문제는 없지만, 모바일의 하드웨어 스펙은 PC보다 떨어지기 때문에, 속도와 퀄리 티가 많이 떨어집니다. 이 문제를 해결하기 위해 다양한 방법을 사용했습니다. Unity의 최적화 작 업 중 가장 중요한 작업은 DrawCall을 줄여야 합니다. 그래서 별자리를 동일한 오브젝트와 크기로 통일하였고, Texture도 다 동일하게 하여, 최대한 DrawCall을 줄여, 실제 기어VR에서의 별자리 관 측의 프레임이 많이 올라갔습니다. 이렇게 마지막 프로젝트가 끝이나고, 이렇게 마지막 후기를 적으니 많은 생각이 듭니다. 대학교 생활은 4년이지만, 군대 2년, 휴학 2년하여, 총 8년만에 졸업을 하게 되는데, 신입생 때는 생각도 못한 기간인 것 같습니다. 대학교 생활 동안 다양한 수업을 들었고, 다양한 사람들을 만났고, 다양 한 활동을 했습니다. 이러한 경험들이 현재의 저를 만들어주는 것 같습니다. 현재의 나에게 만족하 는 것이 아니라 학교에서 배웠던 경험들을 이용하여 더 나은 저를 만들기 위해 계속 노력하겠습니 다.