증강현실(Augmented Reality)/Vuforia 사용하기

V03. 원통형 대상(Cylinder Targets)

danmujicat 2023. 3. 18. 15:39

원기둥 대상(Cylinder Targets)를 사용하면 원통형 및 원추형 모양으로 래핑된 이미지를 감지하고 추적할 수 있습니다. Vuforia Engine은 실린더 타겟의 측면과 평평한 상단 및 하단을 추적할 수 있습니다. 소다 캔, 커피 컵, 머그잔, 드럼 용기 및 음료수 병은 모두 실린더 타겟에 적합합니다.

 

1. 원통형 타겟의 설계

1.1 권장 모양

1.2 실린더 타겟의 매개변수

  • 상단 지름
  • 측면 길이
  • 하단 지름

원통형의  치수는 미터 단위로 정의합니다.

 

2. 장치 데이터베이스 작업하기

CylinderTarget.zip
0.75MB

2.1 장치 데이터베이스에 원통형 대상 추가 

 Target Manager  데이터베이스 목록에서 장치 데이터베이스의 이름( 여기서는 VuforiaMars_Images)을 클릭합니다.

 세부 정보 창에서 Add Target을 클릭합니다 .Type을 Cylinder를 선택하고 Bottom Diameter, Top Diameter, Side Length(12.523, 12.523, 21.5)을 입력하고 Name은 RocketBooster을 입력하고 Add버튼을 클릭합니다.

③ Target Name 목록에서 RocketBooster을 클릭하여 나타나는 화면에서 옆면, 윗면, 아랫면의 이미지를 설정합니다.

 

2.2 장치 데이터베이스에서 대상을 다운로드하기

 Target Manager 탭바에 데이터베이스이름 VuforiaMars_Images을 선택하여 해당 웹페이지로 이동한 후  Download Database(All)버튼을 누릅니다. 

 Download Database창에서 Unity Editor를 선택하고 Download 버튼을 클릭하여 VuforiaMars_Images.unitypackage 파일을 다운로드 받습니다.

 

2.2 데이터베이스를 Unity로 Import하기

 메인 메뉴에서 Assets | Import Package | Custom Package…선택하여  다운받은 VuforiaMars_Images.unitypackage 파일을 임포트합니다.

 

 

3. 프로젝트에 장치 데이터베이스 작업 연동하기

3.1  원통형 대상 만들기

 GameObject 메뉴에서 Vuforia Engine |  ARCamera 메뉴를 선택하여 Hierachy 창에 ARCamera 추가합니다.

 GameObject 메뉴에서 Vuforia Engine  |   CylinderTarget 메뉴를 선택하여 Hierachy 창에 CylinderTarget 추가합니다.

 Hierachy 창에서 CylinderTarget 선택하고 Inspector에서  Cylinder Target Behaviour 컴포넌트의 Database 속성은  VuforiaMars_Images로, CylinderTarget 속성은 RocketBooster설정합니다.

④ Advanced 속성을 클릭하여 Slide Length 값을 0.11498로 변경합니다.

 Hierachy 창에서 CylinderTarget을 더블클릭하여 씬 창에서 이미지를 확인합니다.

 

3.2 오브젝트 만들기

 Project창에 Assets/SamplesResources/AugmentationAssets/Models/ 폴더에서 Drone.fbx 모델링을  Hierachy 창에서 CylinderTarget 하위에 추가합니다.

        Position(-0.0011498, 0.0206964,-0.1108407),  Scale(0.11498, 0.11498,0.11498)

 Project창에 Assets/SamplesResources/AugmentationAssets/Materials/Drone/ 폴더에서 Drone 머티리얼을 Hierachy 창에서 DroneTarget 하위의  Drone 모델링에 설정합니다.

 Project창에 Assets/SamplesResources/AugmentationAssets/Animation/Drone/ 폴더에서 Drone 애니메이션 컨트롤러를 Hierachy 창에서 CylinderTarget 하위의  Drone 모델링을 선택한 후 Inspector 창에서 Animator의 Controller에 설정합니다.

Hierachy 창에서 Drone 모델 하위의 drone_eye01 하위에 빈오브젝트 추가하고 이름을 Scanner로 변경하고 Transfrom은 초기화하고,  Scanner하위에 Cube 오브젝트 추가하고 이름을 ScannerPlane로 변경하고

            Position(-0.36, 0,0), Rotation(0,180,0), Scale(1,0,1)을 설정하고,

            Mesh Renderer->Materials는 DroneScan 설정,

            Box Collider는 해제합니다.

 

실행하기

 

3.4 원통형 탐색하며 회전하기

 Hierachy 창에서 CylinderTarget 선택한후 Inspector 창에서  Cylinder Target Behaviour 속성에서 Add Occulusion Object 버튼을 선택하면 Hierachy 창에 CylinderTarget 이름(여기서는 RocketBooster Occlusion Object)으로 오브젝트가 자동으로 추가됩니다. 

 Hierachy 창의 Drone오브젝트한후  Inspector 창의 Add Component 버튼을 클릭하여 새 스크립트 RotateAroundCylinder.cs를  추가합니다.

 

RotateAroundCylinder.cs

using UnityEngine;



public class RotateAroundCylinder : MonoBehaviour
{
    Animator mDroneAnimator;
    const float ROTATION_SPEED = -60;
    
    void Start()
    {
        mDroneAnimator = GetComponent<Animator>();

        if (mDroneAnimator)
        {
            mDroneAnimator.SetBool("IsFacingObject", true);
            mDroneAnimator.SetBool("IsShowingLaser", true);
            mDroneAnimator.SetBool("IsScanning", true);
        }
    }

    void Update()
    {
        var parentTransform = transform.parent;
        transform.RotateAround(parentTransform.position, parentTransform.up, ROTATION_SPEED * Time.deltaTime);
    }
}

 

실행하기 => 드론이 원통형을 회전합니다.