Version: 2018.2
공간 매핑 콜라이더
공간 매핑 저수준 API

공간 매핑 렌더러

공간 매핑 렌더러(Spatial Mapping Renderer) 컴포넌트는 공간 매핑 표면을 시각적으로 보여줍니다. 표면을 시각적으로 디버깅하고 환경에 시각적 효과를 추가할 때 매우 유용합니다.

시스템은 물리 공간의 변화에 대해 공간 매핑 렌더러 컴포넌트에 주기적으로 데이터를 전송합니다. 컴포넌트는 공간 매핑 시스템으로부터 이러한 데이터를 받을 때마다 반환된 표면 데이터를 메시 필터(Mesh Filter)메시 렌더러(Mesh Renderer) 컴포넌트가 모두 포함된 게임 오브젝트로 베이크합니다. 공간 매핑 렌더러 컴포넌트는 이러한 표면 게임 오브젝트의 수명 주기를 관리합니다. 다시 말해, 씬 내에서 표면 게임 오브젝트 메시 렌더러의 생성, 업데이트 및 삭제를 처리합니다.

Unity 에디터에 나타나는 공간 매핑 렌더러 컴포넌트
Unity 에디터에 나타나는 공간 매핑 렌더러 컴포넌트

렌더 설정

아래 테이블에는 공간 매핑 렌더러 컴포넌트에 사용 가능한 모든 고유 렌더 설정이 나와 있습니다.

Setting Description
Render State 모든 표면 게임 오브젝트는 렌더 상태(Render State) 설정으로부터 머티리얼을 받습니다. 예를 들어 런타임 시점에서 스크립트가 렌더 상태(Render State) 설정을 변경하면 모든 표면 게임 오브젝트의 렌더 머티리얼이 선택한 렌더 상태(Render State) 설정으로 변경됩니다. 이렇게 하면 드로우 콜 수가 줄어들어 렌더링 성능이 향상됩니다. 또한 공유 머티리얼을 사용하여 렌더링 동안 애플리케이션에서 사용하는 메모리 사용량을 줄일 수도 있습니다. 세 가지 옵션 중 하나를 선택하여 표면을 렌더링하십시오.

자세한 내용은 아래의 렌더 상태를 참조하십시오.
오클루전(Occlusion) 오클루전 머티리얼(Occlusion Material) 에 정의된 머티리얼을 적용합니다. 이 투명 머티리얼은 게임 오브젝트를 현실 표면 뒤에 숨깁니다. 자세한 내용은 아래의 시각 및 오클루전 머티리얼을 참조하십시오.

참고: 표면의 메시 렌더러를 모두 활성화하여 다른 설정을 오버라이드합니다.
시각화(Visualisation) 시각화 머티리얼(Visualisation Material) 에 정의된 머티리얼을 적용하여 환경의 공간 매핑 표면(대개 와이어프레임 머티리얼)을 시각화합니다. 자세한 내용은 아래의 시각 및 오클루전 머티리얼을 참조하십시오.

참고: 표면의 메시 렌더러를 모두 활성화하여 다른 설정을 오버라이드합니다.
None 이 옵션을 선택하면 공간 매핑 표면에 할당된 모든 메시 렌더러를 비활성화합니다.
Occlusion Material 공간 매핑 렌더러의 렌더 상태(Render State)오클루전(Occlusion) 으로 설정하면 여기에서 선택하는 머티리얼이 적용됩니다. 기본 설정은 빌트인 SpatialMappingOcclusion 머티리얼입니다.
Visual Material 공간 매핑 렌더러의 렌더 상태(Render State)시각화(Visualisation) 로 설정하면 여기에서 선택하는 시각 머티리얼이 적용됩니다. 기본 설정은 빌트인 SpatialMappingWireframe 머티리얼입니다.

일반 설정

아래 설정은 공간 매핑 렌더러공간 매핑 콜라이더 컴포넌트 모두에 공통적으로 적용됩니다.

Setting Description
Surface Parent 공간 매핑 컴포넌트에서 생성한 표면 게임 오브젝트가 이어받을 표면 부모(Surface Parent) 게임 오브젝트를 선택합니다. 자동으로 표면 부모 게임 오브젝트를 생성하려면 없음(게임 오브젝트)(None(Game Object)) 으로 둡니다.
Freeze Updates 이 박스를 선택하면 컴포넌트가 시스템에 표면 변화에 대한 쿼리를 하지 않습니다.

참고: 각 공간 매핑 컴포넌트는 주기적으로 물리 공간의 표면 변화에 대한 공간 매핑 데이터를 쿼리합니다. 표면 쿼리 및 베이킹은 메모리, 성능, 전력을 소비합니다. 거의 정적일 것으로 예상되는 환경에서는 표면 게임 오브젝트를 업데이트하는 대신 사용자가 일정 시간 동안 주위를 둘러볼 수 있도록 하는 것이 좋습니다.

시뮬레이션의 환경이 보드 게임처럼 거의 정적이고 변화가 없다고 예상되면 애플리케이션이 시작될 때 표면 데이터를 가능한 많이 스캔한 후 프리즈 업데이트(Freeze Updates) 프로퍼티를 true 로 설정하여 추가 업데이트를 막을 수 있습니다. 이렇게 하면 성능이 약간 향상되고 전력 소모가 감소합니다.
Time Between Updates 물리 공간의 표면 변화를 쿼리하는 시간 간격을 지정하는 10진수 포맷의 시간(단위: 초)(예: 3.7 또는 4.6)입니다. 기본 설정은 2.5초입니다. 쿼리가 규칙적일수록 메모리 사용량, 성능, 전력 소모가 더 높아집니다.
Removal Update Count 시스템이 표면 게임 오브젝트를 제거하기 전에 수행하는 업데이트 수입니다. 이 경우 업데이트를 프레임으로 간주해도 좋습니다. 기본 설정은 10업데이트입니다.

참고: 제거 업데이트 카운트 다운은 공간 매핑이 컴포넌트에 표면 게임 오브젝트가 더 이상 SurfaceObserver의 바운딩 볼륨에 없다는 것을 알렸을 때 시작합니다. 표면 게임 오브젝트가 시스템에서 보고하는 정의된 영역에 더 이상 존재하지 않을 때를 예로 들 수 있습니다. 이 설정을 이용하면 공간 매핑이 표면 게임 오브젝트를 제거하기 전에 이 이벤트 이후 발생해야 할 업데이트 수를 지정할 수 있습니다.
Level of Detail 컴포넌트가 생성하는 메시의 품질(낮음(Low), 중간(Medium), 높음(High))입니다. 기본 품질은 중간(Medium) 입니다. 품질이 높을수록 생성되는 콜라이더 또는 렌더링되는 메시의 정밀도와 정확도가 향상됩니다. 저품질 설정을 사용하면 성능 및 전력 소모가 줄어듭니다. 세 가지 디테일 수준(LOD) 모드에 대한 예제는 이 테이블 아래의 이미지를 참조하십시오.
Bounding Volume Type 컴포넌트의 바운딩 볼륨 영역 모양으로, 여기에서 애플리케이션이 공간 매핑 데이터를 받습니다. 구체(Sphere) 또는 축 정렬 상자(Axis Aligned Box) 중에서 선택할 수 있습니다. 기본 설정은 축 정렬 상자(Axis Aligned Box) 입니다.

참고: 바운딩 볼륨은 시스템이 물리 표면 변화를 보고하고 공간 매핑 메시의 범위를 제한하도록 정의된 영역입니다.
Size In Meters 컴포넌트에서 사용하는 바운딩 볼륨의 크기(단위: 미터)입니다. 반지름으로 구체(Sphere) 를 설정합니다. 기본 반지름은 2미터입니다. 축 정렬 상자(Axis Aligned Box) 를 해당 범위로 설정합니다. 기본 설정은 Vector3(4,4,4)입니다.

참고: 관찰자의 바운딩 볼륨은 공간 매핑이 물리 표면 변화를 보고하도록 정의된 영역입니다.

디테일 수준(LOD)

아래 이미지에서 설명된 것처럼 두 Spatial Mapping 컴포넌트 모두 각 컴포넌트의 생성 공간 메시에 대해 세 가지 디테일 수준(LOD)(낮음, 중간, 높음) 중 하나를 지정할 수 있습니다.

공간 매핑 메시를 위한 세 가지 디테일 수준(LOD) 모드
공간 매핑 메시를 위한 세 가지 디테일 수준(LOD) 모드

가능한 경우 Spatial Mapping Colliders 에 대한 디테일 수준(LOD) 설정을 Low로 설정하십시오. 이렇게 하면 충돌 교차를 계산할 때 성능이 향상되고 전력 소모가 감소합니다. 하지만 Level of DetailLow 로 설정하면 애플리케이션의 시각 효과가 저하될 수 있습니다.

공간 매핑 렌더러 사용

렌더 상태

이 컴포넌트를 이용하면 동적으로 생성된 모든 표면의 머티리얼을 쉽게 변경할 수 있습니다. Unity는 두 개의 미리 빌드된 머티리얼 타입을 제공합니다.

Occlusion Material

게임 오브젝트가 투명하게 표시되게 만들지만, 홀로그램이 게임 오브젝트를 통해 보이지 않습니다. 예를 들어 실제 책상이 그 아래에 배치된 게임 내 홀로그래픽 오브젝트를 가리도록 할 때 유용합니다.

Visual Material

Unity가 공간 매핑 렌더러 컴포넌트의 모든 표면에 적용하는 와이어프레임 머티리얼입니다. 기본 와이어프레임 셰이더를 사용하면 와이어프레임의 컬러가 실제 거리를 나타냅니다. 이 옵션은 디버깅 작업 시 매우 유용하지만, 시각 효과에도 사용할 수 있습니다. 셰이더는 컬러 매핑을 통해 거리를 표시합니다. 아래 테이블에는 컬러 매핑이 나와 있습니다.

HoloLens부터의 거리(Distance from HoloLens) Color
0–1미터 검은색
1–2미터 빨간색
2–3미터 초록색
3–4미터 파란색
4–5미터 노란색
5–6미터 시안색
6–7미터 자홍색
7–8미터 고동색
8–9미터 청록색
9–10미터 주황색
10미터 이상 흰색
Spatial Mapping Renderer 컴포넌트에서 시각화 머티리얼로 사용되는 기본 와이어프레임 셰이더(와이어프레임의 컬러는 거리를 나타냄)
Spatial Mapping Renderer 컴포넌트에서 시각화 머티리얼로 사용되는 기본 와이어프레임 셰이더(와이어프레임의 컬러는 거리를 나타냄)

새 머티리얼을 시각 머티리얼(Visual Material) 또는 오클루전 머티리얼(Occlusion Material) 에 할당해도 표면 게임 오브젝트는 자동으로 변경되지 않습니다. 새 머티리얼을 모든 표면에 적용하려면 렌더 상태(Render State) 를 변경한 머티리얼 즉, 시각 머티리얼(Visual Material) 또는 오클루전 머티리얼(Occlusion Material) 로 설정해야 합니다.

Unity 에디터의 렌더 상태(Render State) 에서 (씬 내 게임 오브젝트에 직접) 오클루전 머티리얼(Occlusion Material) 또는 시각 머티리얼(Visual Material) 프로퍼티를 할당하면 공간 매핑이 공간 매핑 렌더러 컴포넌트와 마찬가지로 머티리얼을 삭제합니다. 하지만 공간 매핑은 컴포넌트가 포함된 스크립트를 통해 할당되거나 변경된 오클루전(Occlusion) 또는 시각 머티리얼(Visual Material) 은 삭제하지 않기 때문에 수동으로 직접 삭제해야 합니다.

아래 코드 스니핏은 공간 매핑이 모든 표면 게임 오브젝트에 런타임 시점에 동적으로 적용하는 머티리얼을 변경합니다.


SpatialMappingRenderer renderer = spatialMappingGameObject.AddComponent<SpatialMappingRenderer>();
renderer.visualMaterial = new Material(Shader.Find("VR/SpatialMapping/Wireframe"));
renderer.renderState = SpatialMappingRenderer.RenderState.Visualization;

표면 게임 오브젝트

공간 매핑 렌더러 컴포넌트는 런타임 동안 별도의 표면 게임 오브젝트 세트를 생성합니다. 이 표면 게임 오브젝트는 표면 부모 게임 오브젝트에 연결된 씬에 나타납니다.

예제 표면 부모 게임 오브젝트 및 표면 게임 오브젝트 자식
예제 표면 부모 게임 오브젝트 및 표면 게임 오브젝트 자식

공간 매핑 렌더러 가 표면 게임 오브젝트를 생성하는 경우 다음의 컴포넌트가 포함됩니다.

공간 매핑 렌더러 에서 생성하는 표면 게임 오브젝트의 인스펙터 뷰
공간 매핑 렌더러 에서 생성하는 표면 게임 오브젝트의 인스펙터 뷰

여러 개의 공간 매핑 렌더러 컴포넌트를 씬에 추가하면 각 컴포넌트가 고유한 표면 게임 오브젝트 세트를 생성합니다. 예를 들어 공간 매핑 렌더러 컴포넌트가 포함된 두 개의 게임 오브젝트가 있는 경우 씬에 두 세트의 표면 게임 오브젝트가 포함됩니다. 각 세트는 런타임 시점에 각 컴포넌트에 의해 생성됩니다. 최적화를 위해 이 점을 잘 기억해두는 것이 좋습니다.


  • 2018–05–01 편집 리뷰를 거쳐 페이지 게시됨

  • Unity 2017.3에서 HoloLens 공간 매핑에 대한 설명이 업데이트됨

공간 매핑 콜라이더
공간 매핑 저수준 API