Unity 검색

Unity MARS 쿼리 시스템의 절차적 레이아웃

2020년 10월 14일 테크놀로지 | 9 분 소요
다루는 주제
공유

Unity MARS의 쿼리 시스템은 주변 실제 세계에 적응하는 증강 현실(AR) 경험 제작 절차를 간소화합니다. 쿼리 시스템은 사용자가 지정한 제한에 기반하여 주어진 환경에 씬을 배치합니다. 이번 포스팅에서는 쿼리 시스템의 작동 원리를 소개합니다.

Unity MARS는 크리에이터가 상황 적응형 AR을 쉽게 만들 수 있도록 설계되었습니다. 이를 통해 실제 세계와 관련된 콘텐츠를 정의하고, 환경 내에서의 반복 작업 및 테스트를 지원하며, 다양한 실제 세계 환경에 가상 콘텐츠가 배치되는 방식을 조정하는 등 AR 개발자가 주로 당면하는 문제를 해결하고자 했습니다. 유니티는 이를 적응형 콘텐츠 문제라고 부릅니다.

쿼리(Queries)는 Unity MARS가 적응형 콘텐츠 문제를 해결하는 방식을 말합니다. 실제 세계의 특정 장소에 통합되어야 하는 개별 또는 그룹화된 가상 콘텐츠에 대해, Unity MARS는 실제 세계의 일부를 설명하는 의미론적 태그가 지정된 데이터를 요청하는 쿼리를 생성합니다. 쿼리에는 다음과 같은 두 가지 고수준 요소가 있습니다. 

  • 어떤 데이터가 쿼리와 일치하는지 정의하는 하나 이상의 조건(conditions)
  • Unity MARS가 일치하는 쌍을 찾아냈을 때 어떤 작업을 수행할지 지정하는 하나 이상의 액션(actions)

각 쿼리는 가상 콘텐츠와 실제 세계 간의 연결 고리를 나타내는프록시에 의해 생성되거나프록시 그룹에 속한 여러 프록시에 의해 생성됩니다.

데이터 엔티티

Unity MARS 데이터베이스의 각 엔트리는 사용자 주변 실제 세계의 한 부분을 나타냅니다. 이러한 실제 세계는 다양한 형태를 취할 수 있으며 가장 일반적인 형태는 표면, 얼굴, 이미지 마커입니다.

각 엔트리는 데이터 ID라고 하는 숫자로 식별됩니다. 또한 주어진 데이터 유형의 명명된 프로퍼티인 속성(traits)을 원하는 개수만큼 가질 수 있습니다. 이 모델은 각 속성이 컴포넌트와 같다는 점에서 엔티티 컴포넌트 시스템과 개념이 유사합니다.

데이터 사용

각 프록시는 독점성(Exclusivity)이라는 프로퍼티를 가지고 있습니다. 이 프로퍼티는 일치하는 데이터의 사용법을 결정하고, 이미 사용 중인 데이터와 일치할 때 쿼리의 처리 방법을 제한합니다. 이미 사용된 데이터를 추적하면 사용자는 콘텐츠의 각 요소가 실제 세계의 서로 다른 부분에 배치되도록 할 수 있습니다. 독점성 설정에는 다음과 같이 세 가지가 있습니다.

  • Reserved: 해당 데이터에 대한 독점적인 액세스를 요청합니다. 데이터는 Shared 또는 Reserved 상태의 프록시가 사용하고 있지 않아야 하며, 일치한 후에는 다른 프록시가 읽기 전용으로만 사용할 수 있습니다.
  • Shared: 독점적이지 않은 방식으로 데이터 사용을 요청합니다. 다른 Shared 프록시가 이미 해당 데이터를 사용 중일 수 있으며, 일치된 후에도 사용할 수 있습니다.
  • Read Only: 독점성 상태에 변화를 주지 않으며 항상 모든 데이터에 액세스할 수 있습니다.

쿼리가 일치하면 쿼리 내의 모든 프록시는 지정된 독점성에 따라 해당 데이터를 “using(사용 중)”이라고 표시됩니다.

조건

모든 조건은 고려 중인 데이터의 단일 속성을 감안하여 기준에 맞는지 여부를 결정합니다. 표면이나 얼굴과 같은 추적 가능한 데이터에 따라 직접 저작하는 대신 위치나 크기 같은 속성에 따라 조건을 저작하게 되면 동일한 속성을 가진 모든 데이터에 해당 조건을 재사용할 수 있다는 장점이 있습니다.

예시로는 평면 크기 조건을 들 수 있습니다.

여기는 “bounds2d 속성이 포함되어 있습니다. 이 속성은 프록시가 찾는 데이터 세그먼트의 2차원 지향 바운딩 박스의 허용 가능한 크기를 설명하고, 두 개의 부동 소수점 수로 이루어진 Vector2의 데이터 유형을 갖습니다. 이 조건은 “평면” 태그와 “bounds2d” 속성을 가진 모든 데이터를 상대로 평가될 수 있으며, 후자는 이미지 마커에도 존재합니다.

먼저 Unity MARS는 bounds2d 속성을 가진 옵션들을 고려하여 최소 크기와 최대 크기에 맞지 않는 옵션을 제외합니다.

지정된 범위에 맞는 모든 옵션에는 평점이 부여됩니다. 평점은 일치도를 나타내는 0에서 1까지의 숫자로, 1은 완전한 일치를 나타내고 0은 전혀 일치하지 않음을 나타냅니다. 평면 크기(Plane Size) 조건의 경우 범위 중간에 가까운 경계 값은 가장자리에 가까운 경계 값보다 높은 평점을 받습니다.

하나의 프록시에 여러 조건이 있는 경우 쿼리가 일치하려면 동일한 데이터가 각각의 조건을 모두 충족해야 합니다. 또한 각 조건의 평점은 합산되어 프록시가 주어진 데이터 옵션에 얼마나 정확하게 일치하는지 설명하는 평점을 형성합니다.

예를 들어 표면이 수평인 동시에 위를 향해야 한다고 지정하는 얼라인먼트(Alignment) 조건을 추가하는 경우, 일치된 표면은 이전의 평면 크기 조건을 충족함과 동시에 얼라인먼트 조건도 충족해야 합니다.

쿼리 시스템은 모든 조건을 고려했을 때 항상 가장 높은 평점을 갖는 일치 쌍을 제공합니다.

그룹 및 관계

프록시 그룹에 포함된 모든 프록시는 동시에 서로 다른 데이터 요소와 일치해야 하며, 그룹 내에 있는 두 프록시 간의 관계를 정의할 수도 있습니다.

예를 들어 높이(Elevation) 관계는 실제 세계 높이에서 허용 가능한 차이의 범위를 정의합니다. Unity에서 높이는 월드의 Y축 상의 거리에 해당합니다. 아래 예시에서는 큰 평면을 찾는 프록시와 작은 평면을 찾는 그 위의 프록시 간의 높이 관계가 두 프록시 간의 거리로 정의됩니다.

관계는 조건과 많은 부분에서 유사하지만, 관계 구성원 양측 모두의 데이터를 감안한다는 점에서 다릅니다.

높이 관계는 pose 속성을 감안하여 각 옵션의 공간에서 위치를 찾고, 허용 가능한 범위 안에 있는지 여부를 판단 후 0에서 1의 평점을 할당합니다. 평면 크기 조건과 마찬가지로 데이터 쌍은 범위 중간에 가까울수록 바람직합니다.

데이터가 그룹 내 모든 조건과 관계에 의해 형성된 전체 쿼리와 얼마나 일치하는지 판단하기 위해, 프록시에서의 조건과 마찬가지로 그룹의 모든 관계 점수를 결합하여 각 그룹의 평균 점수를 계산합니다.

액션

액션은 Unity MARS가 일치 쌍을 찾았을 경우 취하는 행동을 지정합니다. 조건과 마찬가지로 액션은 일치하는 속성 데이터에 의존하지만 조건과는 달리 필수 속성을 여러 개 지정할 수 있습니다.

가장 단순한 액션은 모든 프록시가 기본적으로 가지고 있는 Set Pose 액션입니다. 이 액션은 월드 공간 내에서의 위치와 회전을 의미하는 포즈 유형의 pose 속성에 의존합니다. 조건과 마찬가지로 이 액션은 해당 속성이 없는 모든 데이터 옵션을 제외합니다.

쿼리가 일치하면 Set Pose 액션은 포즈 값을 받아서 가상 콘텐츠를 해당 위치로 이동시킵니다. 따라서 이 시뮬레이션에서 보듯 일치된 쿼리는 환경에서 자신의 위치를 알아낼 수 있습니다.

우선 순위와 충돌 해결

각 프록시나 프록시 그룹에 Priority 설정을 추가하여 일부 콘텐츠를 다른 콘텐츠보다 우위에 설정할 수 있습니다. 우선 순위 수준에는 가장 낮은 수준인 Lowest부터 가장 높은 수준인 Highest 옵션까지 5가지가 있으며, 기본값은 Normal입니다.

우선 순위는 “충돌 해결” 단계 중에 가장 정확히 일치하는 데이터에 먼저 액세스할 수 있는 오브젝트를 결정하기 위한 첫 번째 요소로 사용됩니다. 여러 프록시가 가장 정확한 일치 쌍으로 동일한 데이터 ID를 요청하는 경우 Unity MARS는 어떤 프록시가 가장 높은 우선 순위를 가지고 있는지 살펴보고 해당 프록시에 ID를 할당합니다. 우선 순위가 동일한 경우 일치 평점이 더 높은 프록시에 데이터 ID가 할당됩니다.

그룹 그래프

단일 프록시 그룹이라도 복잡한 문제가 발생할 수 있습니다. 데이터에 무슨 일이 일어나고 있는지 판단할 수 있는 방법 중 하나는 그래프를 이용하는 것입니다.

다음은 높이와 거리 관계를 모두 갖는 그룹의 예시입니다. 각 꼭짓점은 프록시를 나타내며 각 변은 두 프록시 간의 관계를 나타냅니다.

그룹 일치 문제는 기술 용어로 서브그래프 동형사상 검색이라고 표현할 수 있습니다. 여기에서 시스템은 단순히 서브그래프와 일치하는 쌍을 찾는 것이 아니라 아래의 대형 그래프(“검색 공간”)에서 가장 높은 평점을 가진 최상의 인스턴스를 찾습니다. 이 대형 그래프는 시스템이 찾는 관계의 유효한 인스턴스 세트에서 파생됩니다.

상단 이미지에서는 모든 레이어가 결합되어 있으며, 하단 이미지에서는 각 관계마다 정의된 레이어를 보여줍니다.
각 꼭짓점은 데이터 엔티티를 나타내며 각 변은 두 데이터 엔티티 간의 거리 또는 높이 관계 중 하나의 유효한 인스턴스를 나타냅니다.

그룹에 관계나 구성원이 많을수록 일치 쌍을 찾는 서브그래프의 레이어 수가 많아지며, 시각화하기 더 까다로워집니다.

복잡도 문제 처리

프록시 그룹에서 가장 수학적으로 완벽한 일치 쌍을 찾는 경우 그룹 구성원이 늘어나고 데이터 크기가 증가함에 따라 조합이 폭발적으로 늘어납니다. 그룹화되지 않은 대규모 프록시의 경우 전체 씬이 한 번에 고려되기 때문에 이 문제가 비교적 약하게 나타납니다.

애플리케이션에 오류를 일으키지 않고 복잡한 쿼리를 수행할 수 있도록 하기 위해 시스템은 세 가지 작업을 수행합니다.

첫 번째로, 쿼리를 해결하기 위한 작업을 몇 가지 명명된 단계로 나눕니다. 각 단계에서는 시간의 흐름에 따라 분산된 작업을 수행합니다.

두 번째로, 시스템은 복잡도가 높아짐에 따라 근사 전략을 적용합니다. 즉, 매우 복잡한 그룹 쿼리에서 반환된 답변은 합리적인 양의 계산으로 찾을 수 있는 최고의 답변으로 취급됩니다.

세 번째로, 시스템은 가장 복잡하고 우선 순위가 높은 쿼리부터 해결하여 일치도가 높을 가능성을 극대화합니다. 쿼리의 복잡도가 높아질수록 동일한 평가에서 고려되는 다른 쿼리에 비해 가능한 일치 쌍에 더 큰 영향을 미칩니다.

Unity MARS의 쿼리 시스템 자세히 알아보기

Unity MARS에 대해 자세히 알아보고 AR 개발자가 Unity MARS를 이용하여 어떤 이점을 얻을 수 있는지 살펴보세요. Unity 포럼에서 Unity MARS의 쿼리 시스템과 절차적 레이아웃에 관련된 토론에 참여하실 수 있습니다.

지금 Unity MARS를 사용해 보세요. 45일간 무료로 체험할 수 있습니다.

 

무료 체험 시작하기

2020년 10월 14일 테크놀로지 | 9 분 소요
다루는 주제