HoloLens의 기능은 크게 3가지 영역으로 나눌 수 있다.
1. HoloLens에서 HUD부분. 다른 VR과 달리 HUD에 영상을 투영하므로서 바깥 사물을 여전히 볼 수 있다. 이 기능 자체는 프로그래머가 컨트롤 할 수 없는 하드웨어의 고유영역.
2. 입체영상을 출력해주는 부분. 다른 VR과 원리가 별로 다르지 않음. API사용법도 크게 다르지 않음.
3. 가장 다른 부분이 Spatial Mapping이라는 실시간으로 주변 공간을 스캐닝해서 삼각형리스트를 만들어주는 기능. 대충 어케 쓰는진 알겠네.
이번에 엔진에서 Spatial Mapping을 처리할 수 있도록 작업했다.
Windows UWP 샘플에서 HolographicSpatialMapping프로젝트를 참고했다.
기본적인 방법은 다음과 같다.
- 최초 Windows::Perception::Spatial::Surfaces::SpatialSurfaceObserver 객체 생성.
- SpatialSurfaceObserver::GetObservedSurfaces()로 최초 한번 주변을 스캔해서 SurfaceMesh를 긁어옴.
- 이후에는 SpatialSurfaceObserver::ObservedSurfacesChanged 이벤트 핸들러를 세팅해서 특정 SurfaceMesh에 변화가 있을때마다 GUID와 mesh들 목록을 받음.
- SurfaceMesh로부터 Vertex Buffer, Index Buffer를 얻을 수 있고 여기서 시스템 메모리로 점 데이터와 삼각형 인덱스 데이터를 얻어온다. 이걸 렌더링할지 저장해두고 사용하든지 하면 된다.
- SurfaceMesh에 변경이 생겼다는 이벤트를 받을 경우 당연히 점 데이터와 인덱스 데이터도 갱신해줘야 한다.
P.S:
MS샘플에선 SurfaceMesh에서 얻은 Vertex Buffer와 Index Buffer를 그대로 사용해서 렌더링 한다. 나는 이 삼각형들을 트리에 넣고 충돌처리와 picking용으로 사용해야 하기 때문에 시스템 메모리에 삼각형 리스트 형태로 카피해두고 따로 렌더링했다. 그 와중에 에뮬레이터에선 Dynamic Buffer렌더링에 문제가 있다는 사실을 잊고 디버깅에 시간을 낭비했다.
나처럼 시스템 메모리에 있는 기하데이터를 Dynamic Buffer를 이용해서 렌더링 하는 이가 있다면 참고하기 바란다. 시간 낭비 하지 말고…
spatial mapping 자료 찾다가 들어왔습니다. 홀로렌즈 관련 앱 개발을 시작한 개발자입니다.
홀로렌즈 관련 게시물하고 ppt 자료가 큰 도움이 됐습니다. 정말 감사합니다.
여쭤볼게 많지만.. 길게 쓰면 초면에 좀 실례인 것 같네요.
한가지만 먼저 질문을 하자면요.
예를 들어, 내가 사과를 렌더링한 데이터를 가지고 있을 때..
테이블에 놓인 사과를 찾아서 그 둘레를 표시해 주거나, 테두리에 가상의 선을 긋거나 할 수 있는지 궁금합니다.
아무것도 모를 땐 당연히 될 거라고 쉽게 생각했는데, spatial mapping 해서 가져올 수 있는 데이터에서는 내가 가진 데이터(사과)를 찾기가 불가능할 것 같거든요.
뷰포리아 같은 AR 플랫폼을 따로 써야 하는 건지..
어떻게 생각하시는지 궁금해서 이렇게 답글을 남깁니다.
감사합니다.
좋아요좋아요
테이블은 주변환경이고 사과는 내가 띄운 모델인가요? 사과 테두리를 렌더링하는건 쉬운데요.
아니면 테이블 위에있는 사과도 지형지물이고 홀로렌즈를 통해서 사과를 인식해서 그 주변에 테두리를 그려주는걸 말씀하시는건가요?
후자라면 긁어온 삼각형 데이터를 가지고 사과라고 할만한 오브젝트를 추출해야할텐데요. 일단 홀로렌즈에서 스캔해주는 삼각형 정밀도로 보건데 쉽지 않을것 같습니다.
좋아요좋아요
테이블 위 사과도 지형지물이고, 내가 띄울 수 있는 사과 모델도 가지고 있는 상태에서..
홀로렌즈를 쓰고 이리저리보다가 사과를 detect 해서 지형지물의 사과 표면에 테두리를 그려준다던지.. 둘레를 표시해 준다던지.. 하는 것이죠.
말씀하신 것처럼 긁어온 삼각형 데이터를 가지고 그 중에서 사과 오브젝트를 추출하는 것이 홀로렌즈 API 만 가지고는 불가능해 보여서 질문을 드렸습니다.
vuforia 라는 AR 플랫폼을 쓰면 이미지 타겟으로 3D object 도 등록할 수 있더라고요. 제가 말씀드린 예에서는 사과를 등록해 두면 그걸 찾아내서 트래킹 할 수 있는 API 가 제공되는 것 같았습니다.
답변 감사합니다.
좋아요좋아요
안녕하세요, 개발자님.
아직 Hololens 개발을 하고 계신지는 모르겠지만 궁금한 사항이 있어서 댓글 남깁니다.
실물의 책상을 인식, 책상의 사이즈(높이, (책상면의)가로 길이, 세로 길이)를 얻을 수 있는 방법이 있을까요?
(MRTK에서 제공하는 라이브러리만 이용해서 가능한건지 아니면 AR 라이브러리를 혼합해야하는지)
사이즈를 얻어서 바운더리 박스 큐브를 겹쳐서 표시해보고 싶은데 홀로렌즈 관련 자료 찾다가 발견해서 반갑네요;;
좋아요좋아요
홀로렌즈 sdk쪽에서 삼각형 집합을 주잖아요. 그게 1이 1m였던가 그럴걸요. 제가 만든 데모에서 캐릭터가 165cm이구요. 원하시는건 충분히 구현 가능할겁니다.홀로렌즈는 완전히 손뗀지 3년쯤 되어서 지금은 기억이 잘 안나네요.
좋아요좋아요