Scaling with ARFoundation

We wanted to make scale a first class citizen in ARFoundation, so I'd like to clarify how it works. A basic AR scene has an ARSession and an...

forum.unity.com

결론

 GameObject의 크기 및 방향을 변화시키려면 물체의 scale이나 rotate를 줄이거나 늘리는 것 보다 ARSessionOrigin을 이동시키거나 회전시키는 편이 좋다. 이걸 할 수 있도록 도와주는 메소드가 ARSessionOrigin.MakeContentAppearAt이다.

 

Scaling with ARFoundation 번역

기본 AR Scene에는 ARSession과 ARSessionOrigin이 있습니다. ARSessionOrigin의 작업은 "session space"를 "World Space"로 변환하는 것입니다. 

 * session sapce : 장치에서 사용하는 좌표계

 * world space : Unity에서 위치, 회전 및 스케일

 

AR Camera는 ARSessionOrigin의 자식이여 합니다. 그래서 만약 당신의 AR Camera가 Unity Scene에서 세밀하지 않은 위치에서 시작해도 된다면 단순히 session origin을 해당 위치로 이동시키면 됩니다. 그것은 충분히 간단해 보입니다.

 

하지만, 여러분은 이해하기 더 어렵다는 것을 발견할 수 있을지도 모릅니다. 우리는 어떻게 규모를 조정할까요? 그게 무슨 의미일까요? 만약 내 scene에 유니티 큐브가 하나 있고 scale은 (1, 1, 1)이 아닌 다른 것으로 설정한다면 무슨 일을 겪게 될까요?

 

내 큐브가 여기 저기 움직이는 이유는 무엇입니까? 왜 확장되지 않습니까?

 

큐브는 겉보기 사이즈를 변경하지만 겉보기 위치도 변경합니다. 두 개의 큐브가 있다고 상상해보세요.

무슨 일이 일어날 것 같나요? 만약 두 큐브가 움직임 없이 커진다면 두 개의 큐브는 겹치게 됩니다. 분명히 그들은 움직이는 것처럼 보여야 합니다.

 

나는 이유는 실제로는 큐브의 크기를 조정하지 않기 때문에 "나타난다"라고 말합니다. 추가 설명을 하자면 우리는 session origin의 크기를 조정하는 것입니다. 이것은 카메라의 position이랑 palne과 같은 모든 추적 가능한 크기를 조정할 수 있습니다. 최종 결과는 전체 씬이 scaling된 것 처럼 보입니다. 사실은 session origin이 반대 크기로 scaling된 것입니다. 

 

대신 Scene view를 보면 어떤 일이 일어나는지 실제로 확인할 수 있습니다. 큐브는 전혀 움직이지 않고 있습니다.

 

우리는 전체 Scene의 외형적인 크기를 조정하려고 합니다. 그래서 모든 것이 더 커지거나 작아지고어떤 원점에서 멀어지거나 원점으로 이동하게 될 것입니다. 사실 이게 session origin입니다.

 

그래서 어떻게 해야할까요? 크기를 조정하려는 씬의 중간에 session origin을 배치하고 hierachy에서(ARSessionOrigin과 AR Camera사이) 게임오브젝트를 추가하여 카메라에 추가 위치 오프셋을 추가합니다.

이것보다 편한방법이 있습니다.

 

ARSessionOrigin.MakeContentAppearAt 메소드는 정확히 이 작업을 수행합니다. 이 방법은 콘텐츠를 이동시키지 않습니다. 대신에 ARSessionOrigin을 이동하여 지정한 콘텐츠가 지정한 위치로 표시되도록 합니다.

 Example) 전체 Scene을 왼쪽으로 3미터 이동하는 대신 ARSessionOrigin을 오른쪽으로 3미터 이동합니다.

(그러면 콘텐츠가 왼쪽으로 3미터 이동한 효과를 보이겠지.)

 

실제로 이것은 ARSessionOrigin을 씬의 중간에 두고 카메라를 반대의 크기만큼 움직입니다. 그 결과 모든 스케일링이 수행되는 원점이 이제 잘 정의되고 제어가능해진다는 것입니다.

 

여기에서는 이 복잡한 장면의 중앙에 GameObject를 만들고, ARSessionOrigin에게 평면에서 선택한 어떤 지점에서 MakeContentAppearAt을 요청했습니다. 오른쪽에는 장치에서 볼 수있는 GameView가 있습니다. 비행기가 가만히있는 동안 장면이 움직이는 것처럼 보입니다. 그러나 왼쪽의 씬 뷰는 우리가 실제로 세션 원점을 움직이고 있음을 보여줍니다.

 

이 메소드를 사용하여 session origin을 확장하면 마침내 원하는 작업을 수행 할 수 있습니다.

콘텐츠는 내가 지정한 지점을 중심으로 "축척"됩니다. 회전에도 적용됩니다.

 

카메라가 장면을 효과적으로 선회하여 콘텐츠가 회전하는 것처럼 보이게하는 방법을 확인합니다.

 

그렇다면 처음에 골머리를 앓는 이유는 무엇입니까? 씬의 크기를 조정하고 세션 원점을 그대로 두지 않는 이유는 무엇입니까? 큐브와 같은 단순한 콘텐츠의 경우 콘텐츠 크기를 조정하는 것이 훨씬 쉬울 것입니다.

그러나이 마을과 같은 복잡한 장면의 경우 매우 비싸거나 불가능할 수도 있습니다. 입자 효과는 사소한 크기로 조정할 수 없습니다. 물리 또는 nav mesh를 매우 작게 조정하는 것은 나쁜 생각입니다. 모든 것이 세상을 통과하기 시작하고 내비 메시가 너무 작아 제대로 작동하지 않습니다. 지형은 런타임에 정적이며 이동, 회전 또는 크기 조정이 불가능합니다. 이러한 이유로 씬 콘텐츠가 아닌 카메라 + 추적 가능 항목의 크기를 조정하는 것이 훨씬 더 효과적입니다.

 

 

 

Class ARSessionOrigin | AR Foundation | 3.1.10

Class ARSessionOrigin An ARSessionOrigin is the parent for an AR setup. It contains a Camera and any GameObjects created from detected features, such as planes or point clouds. Inherited Members Assembly : solution.dll Syntax [DisallowMultipleComponent] [H

docs.unity3d.com