예전 개발한 게임에 오큘러스 리프트 적용하는중

간만에 개발 관련 썰.
예전 개발했던 게임에 오큘러스 리프트를 적용했다. 다른 프로젝트를 위해서 시험삼아 적용하고 문제점을 하나하나 해결해가고 있는 중이다.

오큘러스 리프트 SDK가 DX11만 지원하는데 내 게임 엔진은 처음부터 Direct X 11로 개발했으므로 적용하는데 큰 어려움은 없었다. 다만 오큘러스 SDK가 오른손 좌표계를 사용하므로 DX의 왼손좌표계로 바꾸느라 좀 애먹었다.

하여간 3D렌더링쪽은 대충 거의 문제를 해결했다.

그 다음이 2D UI렌더링 문제.
머리 위에 띄우는 3차원 좌표를 가지는 텍스트나 2차원 좌표로 바로 찍는 텍스트, 스프라이트나 다 문제 된다.
VR에선 양안의 카메라가 다르기 때문에 2차원 리소스도 3차원 공간에 띄워야 한다. 양안에 대해서 똑같은 좌표로 렌더링해서 보여주면 사람 눈이 촛점을 잡지 못한다.
해서 처음엔 2D UI를 렌더링 하지 않았으나 어쨌든 사용자에게 텍스트를 보여주는 UI가 아예 없을순 없으므로 이쪽도 살리기로 결정.

[3차원 텍스트의 경우]
원래 텍스트용 텍스쳐 버퍼에다 렌더링했었기 때문에 텍스트가 찍혀있는 텍스쳐와 u,v좌표는는 항상 들고 있다.
기존의 텍스트 렌더링 체계를 거의 그대로 사용하고 텍스트를 렌더링한 텍스쳐를 빌보드에 입혀서 렌더링했다.

[2차원 텍스트와 스프라이트의 경우]
엔진 내부에 2차원 리소스용 렌더타겟을 하나 만들었다. 기존 2D 리소스 렌더링 체계를 그대로 사용하되 렌더링은 2차원 리소스용 렌더타겟에 한다.
프로젝션된 이후의 화면 네 귀퉁이의 좌표 -1,1 ,z , 1,1,z , 1,-1,z , -1,-1,z을 언프로젝션해서 3차원 월드좌표로 변환.이걸로 사각형을 만든다.
이 사각형에 렌더타겟 텍스쳐를 맵핑해서 렌더링하면 화면에 딱 맞는 2D UI가 표시된다. 단 오큘러스 디바이스의 경우 좁은 시야각때문에 이렇게 하면 화면 모서리에 몰린 UI들은 거의 보이지 않는다. 따라서 적절한 스케일과 좌표이동을 적용해야한다.

하여간 이렇게 해서 렌더링 하니 기존 게임 코드 거의 안안치고 오큘러스에 다 출력이 되긴 하는데 실사용하기엔 문제가 많다.

[문제점]
현재 사용중인 오큘러스 디바이스 해상도가 너무 낮아서 글자출력은 알아볼수가 없을 정도인데 이게 DK2를 사용하면 나아지는지 궁금하다.
어차피 마우스로 2차원 리소스 클릭하는건 오큘러스 뒤집어쓰고선 무리니까 UI를 새로 만들긴 해야할듯.
안그래도 시야각이 좁은데 2D리소스를 모니터에 출력하듯이 오큘러스 출력하면 시야각 범위를 벗어나거나 저~~~~ 위와 저~~~ 아래에 글자가 출력되는 듯한 느낌을 받게 된다.

oculus_ProjectD_2015_1007_00 oculus_ProjectD_2015_1007_01


예전 개발한 게임에 오큘러스 리프트 적용하는중”에 대한 답글 1개

답글 남기기

댓글을 게시하려면 다음의 방법 중 하나를 사용하여 로그인 하세요:

WordPress.com 로고

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

Facebook 사진

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

%s에 연결하는 중