[vuforia] unity ar 프로젝트(1) - 이미지 타겟 여러 개, 이미지 브금 비디오 오브젝트

카초·2024년 3월 13일

AR/VR 프로젝트 3강


뷰포리아 AR 이미지 타겟 프로젝트 설정 순서

  1. 새 3D 프로젝트 시작할 때마다 뷰포리아 패키지 임포트해주기
  2. 메인 카메라 없애고 ar카메라 넣기 * api키 넣어주기
  3. 이미지 타겟 넣고, inspector에서 이미지 넣어주기 (미리 에셋에 import한 이미지)
    • 이때 advanced에서 크기 설정해야 이미지가 보임 ex) width: 5
    • 이미지 테두리를 검정색으로 다소 굵게 하면 더 깔끔하다고 하셨지만 난 그냥 해도 괜찮았다.
  4. 이미지 위에 올릴 오브젝트는 상속시키기

무료에셋

<3D 모델링 돼 있는 오브젝트 무료 다운>

  • Turbosquid.com
  • Free3D.com

<에셋스토어 무료 아이템>
https://assetstore.unity.com/?free=true&orderBy=1
=> free assets 무료 에셋들

https://assetstore.unity.com/packages/vfx/particles/cartoon-fx-remaster-free-109565
=> fx remaster free 효과

<무료 음원>
studio.youtube.com

Effect 에셋 적용법

unity 에셋스토어에서 fx remaster free를 다운받았다.
그리고 여러 효과들이 있어서 그중에서 불꽃놀이 같은 것을 쓰기로 했다.
그 효과를 이미지 타겟 위에 올라갈 오브젝트에 상속시켜준다.
위 사진처럼 해당 효과를 찾아서 오브젝트까지 드래그해주면 된다.

C# 스크립트 rotation

이때 난 케이크 오브젝트를 사용했는데, 케이크를 돌아가게 하기 위하여
Assets을 모아둔 폴더에 따로 또 Scripts폴더를 만들고 c# 스크립트를 써줬다.


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CakeRotation : MonoBehaviour
{
    public int x, y, z;
    // Start is called before the first frame update
    void Start()    //  처음 한번만 실행하는 것이 Start()
    {
        
    }

    // Update is called once per frame
    void Update()   // 매 프레임마다 실행하는 것이 Update()
    {
        Vector3 rot = new Vector3(x, y, z);
        transform.Rotate(rot * Time.deltaTime); // Time.deltaTime == 기계별 편차 없는 절대 시간
    }
}

Time.deltaTime은 내 컴퓨터든 네 컴퓨터든 기기 별 오차가 없는 절대 시간을 의미한다.

  • 이때 위와 같이 한글로 주석을 달면 오류가 나니, 실제론 지워야 한다.

이 스크립트도 케이크에 상속시켜준다.
난 inspector창에서 z = 25으로 설정하니 케이크가 돌아갔다. 각자 케이크 초기 rotate에 따라 원하는 방향으로 회전시키면 된다.


이미지타겟 여러개

이미지타켓을 여러 개 두고 싶다면, Hierachy에 이미지타켓을 하나 더 만들고 아까와 같은 방법으로 이미지를 선택 및 ar로 나타날 오브젝트를 지정하면 된다.

  • 이때 한 웹캠에 두 이미지가 한번에 인식되면, 1개만 처리된다고 한다. 즉 인식률이 더 좋은 이미지에 설정된 오브젝트 동작 하나만 실행될 것이다. => 개선 방법은 후술

Plane 오브젝트 안에 material로 이미지 삽입


SampleScene에 Plane 오브젝트 만들고, 거기에 import한 이미지를 가져다가 드래그하면 해당 이미지가 자동으로 materials로 만들어지면서 씌인다.


이미지 뿌연 느낌 개선법


이미지 사진 화질이 떨어져보이는 이유는 기본 shader 설정 때문이다.
Shader를 texture로 바꿔야 2번 이미지처럼 깨끗해보인다.


이미지 타겟 동시에 여러 개 가능하게 하기

window -> vuforia configuration에서 max simultaneous(최대 동시 트레킹 이미지 수)를 설정하면 됨.
근데 여러 개 넣으면 느려질 수 있음. 이미지 인식(찾기)를 잘 못하기도 함.

max simultaneous 2개로 설정했고, 이미지 타겟 2개가 정상적으로 인식되어 오브젝트들이 잘 나타났다.


이미지 타겟 치우면 오브젝트 (ar) 없어지게 하는 법


이미지 타겟을 치웠는데도 ar가 잔존하는 문제가 있다.....


inspector에서 Tracked or extended Tracked을 Tracked으로 바꾸면 된다. 딱 타겟팅 됐을 때만 오브젝트가 뜨게끔 하는 옵션이다.


비디오 영상 오브젝트 재생

오브젝트로 비디오도 넣을 수 있다.

이때 비디오는 미리 재생되지 않게 Play on Awake 옵션 끄기!

플레이를 해보니까 타겟 인식 전부터 비디오 소리가 나왔다. 그럼 비디오는 이미지 타겟이 인식되기 전부터 미리 실행되고 있는거고, 이미지 타켓이 인식되면 비로소 화면에 출력되는 것 같았다. 이러면 프로그램이 너무 헤비해질 텐데..?


의문을 품던 찰나, 강사님이 바로 알려주셨다. Play On Awake 옵션을 끄라고.
이로써 비디오를 메모리에 미리 상주시켜서 프로그램이 무거워지는 문제를 해결할 수 있다.


이미지 타켓 이벤트 설정

  1. mp3 오디오 브금 재생 시작, 중단 이벤트 설정

    bgm은 이미지타겟의 inspector 창에서 이벤트 설정을 통해 재생 및 끄기 설정이 가능하다.

  2. 비디오 시작, 중단 이벤트 설정

    마찬가지로 비디오도 이벤트 설정을 해줬다. 비디오는 stop(이미지 타겟 이탈 시 비디오 메모리에서 빼버리기) 말고 pause로 설정했다.



3D오브젝트 중 text로 이렇게 글자로 띄울 수 있다.
폰트도 다운받아서 임포트하고 설정하면 한글도 지원 가능하다는데 난 하다가 잘 안 되서 일단 패스했다.

쨘 !!


빌드는 다음 게시글에서 계속...

0개의 댓글