Computer/WebDesign, Animation Updated: 2025. 6. 18. 11:12 hwaya.

AR.js 완전 정복: 웹 브라우저에서 증강현실 구현하기 🚀

반응형

AR.js 완전 정복: 웹 브라우저에서 증강현실 구현하기 🚀

웹에서 증강현실(AR)을 구현하고 싶으신가요? AR.js는 별도의 앱 설치 없이 웹 브라우저에서 바로 AR 경험을 제공할 수 있는 강력한 JavaScript 라이브러리입니다. 이 글에서는 AR.js의 기본 개념부터 실제 구현까지 단계별로 자세히 알아보겠습니다.

AR.js란 무엇인가? 🤔

AR.js는 웹 기반 증강현실을 구현하기 위해 설계된 무료 오픈소스 자바스크립트 라이브러리입니다. WebGL과 WebRTC 표준을 기반으로 구축되어 있으며, three.js, A-Frame, jsartoolkit5를 활용합니다. 이 라이브러리의 가장 큰 장점은 모바일을 포함한 대부분의 현대 웹 브라우저에서 별도의 설치 없이 AR 경험을 제공할 수 있다는 점입니다.

AR.js의 주요 특징

AR.js는 다음과 같은 강력한 특징들을 제공합니다:

  • 매우 빠른 성능: 2년 된 스마트폰에서도 최대 60fps로 실행 가능
  • 웹 기반: 순수 웹 솔루션으로 설치가 필요 없음
  • 오픈소스: 완전 무료이며 GitHub에서 소스코드 제공
  • 표준 준수: WebGL과 WebRTC를 지원하는 모든 디바이스에서 동작

AR.js가 지원하는 AR 유형 📱

AR.js는 세 가지 주요 AR 유형을 지원합니다:

1. 마커 기반 AR (Marker Tracking)

마커가 카메라에 감지되면 그 위에 콘텐츠를 표시하는 방식입니다. 마커는 매우 안정적이지만 모양, 색상, 크기에 제한이 있습니다.

2. 이미지 추적 AR (Image Tracking)

2D 이미지가 카메라에 감지되면 그 위에 또는 근처에 콘텐츠를 표시합니다. 증강 예술, 학습용 증강 도서, 광고 등에 활용됩니다.

3. 위치 기반 AR (Location-based AR)

실제 세계의 위치 정보를 사용하여 AR 콘텐츠를 표시합니다. 사용자의 실제 위치에 따라 콘텐츠가 표시되며, 관광 가이드, 도시 탐험, 박물관 안내 등에 활용할 수 있습니다.

개발 환경 설정 ⚙️

필수 요구사항

AR.js를 사용하기 위해서는 다음이 필요합니다:

  • WebGL과 WebRTC를 지원하는 웹 브라우저
  • HTTPS 프로토콜 (카메라 접근을 위해 필수)
  • 웹 서버 환경

기본 설정

AR.js를 사용하는 가장 간단한 방법은 CDN을 통해 라이브러리를 로드하는 것입니다:

 
<!-- A-Frame 라이브러리 -->
<script src="https://aframe.io/releases/0.9.0/aframe.min.js"></script>
<!-- AR.js 라이브러리 -->
<script src="https://jeromeetienne.github.io/AR.js/aframe/build/aframe-ar.js"></script>

첫 번째 AR 예제: Hiro 마커 📦

가장 기본적인 AR 예제를 만들어보겠습니다. 이 예제는 Hiro 마커를 인식하여 3D 박스를 표시합니다:

 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>AR.js 기본 예제</title>
<script src="https://aframe.io/releases/0.9.0/aframe.min.js"></script>
<script src="https://jeromeetienne.github.io/AR.js/aframe/build/aframe-ar.js"></script>
</head>
<body style='margin: 0px; overflow: hidden;'>
<a-scene embedded arjs>
<a-marker preset="hiro">
<a-box position='0 0.5 0' material='color: red;'></a-box>
</a-marker>
<a-entity camera></a-entity>
</a-scene>
</body>
</html>

이 코드의 핵심 구성 요소는 다음과 같습니다:

  • <a-scene embedded arjs>: AR.js가 활성화된 A-Frame 씬
  • <a-marker preset="hiro">: Hiro 마커를 감지하는 마커 엔터티
  • <a-box>: 마커 위에 표시될 3D 박스
  • <a-entity camera>: AR 카메라

커스텀 마커 사용하기 🎨

기본 제공되는 Hiro 마커 외에 자신만의 이미지를 마커로 사용할 수 있습니다.

커스텀 마커 생성 과정

  1. 마커 이미지 준비: 원하는 패턴의 이미지를 준비합니다
  2. 마커 생성: AR.js Marker Trainer 웹사이트에서 이미지를 업로드합니다
  3. 파일 다운로드: .patt 파일과 .png 파일을 다운로드 받습니다

커스텀 마커 사용 예제

<a-scene embedded arjs> <a-assets> <a-asset-items id="my-model" src="path/to/model.gltf">
</a-asset-items> </a-assets> 
<a-marker preset="custom" type="pattern" url="path/to/marker.patt"> <a-entity gltf-model="#my-model" scale="0.5 0.5 0.5"></a-entity> </a-marker> 
<a-entity camera></a-entity>
</a-scene>

간편마커생성 바로가기

NFT(Natural Feature Tracking) 마커 🖼️

이미지 기반 AR을 위해 NFT 마커를 사용할 수 있습니다. NFT는 일반 이미지를 AR 마커로 사용할 수 있게 해주는 기술입니다.

NFT 마커 생성

NFT 마커를 생성하기 위해서는 NFT Marker Creator 도구를 사용합니다:

  1. 온라인 버전: https://carnaux.github.io/NFT-Marker-Creator/
  2. Node.js 버전: GitHub에서 다운로드 가능

생성 과정에서 .fset, .fset3, .iset 파일 세 개가 생성됩니다.

NFT 마커 사용 예제

 
<script> THREEx.ArToolkitContext.baseURL = '../' // Three.js 기본 설정 var renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true }); var scene = new THREE.Scene(); var camera = new THREE.Camera(); scene.add(camera); // AR 소스 설정 var arToolkitSource = new THREEx.ArToolkitSource({ sourceType: 'webcam' }); // NFT 마커 컨트롤러 var markerControls = new THREEx.ArMarkerControls( arToolkitContext, camera, { type: 'nft', descriptorsUrl: 'path/to/nft-marker' } ); </script>

위치 기반 AR 구현 🗺️

위치 기반 AR은 GPS 좌표를 사용하여 실제 세계 위치에 AR 콘텐츠를 배치합니다.

기본 위치 기반 AR 예제

 
<a-scene vr-mode-ui="enabled: false" arjs="sourceType: webcam; videoTexture: true; debugUIEnabled: false;" renderer="antialias: true; alpha: true"> <a-camera gps-new-camera="gpsMinDistance: 5" arjs-look-controls="smoothingFactor: 0.1"> </a-camera> <a-box material="color: red" gps-new-entity-place="latitude: 37.5665; longitude: 126.9780" scale="10 10 10"> </a-box> </a-scene>

동적 위치 기반 콘텐츠

JavaScript를 사용하여 동적으로 위치 기반 콘텐츠를 추가할 수 있습니다:

window.addEventListener('load', function() { const camera = document.querySelector('[gps-new-camera]'); camera.addEventListener('gps-camera-update-position', function(e) { const position = e.detail.position; console.log('현재 위치:', position.latitude, position.longitude); // 동적으로 새로운 엔터티 생성 const entity = document.createElement('a-box'); entity.setAttribute('material', 'color: blue'); entity.setAttribute('gps-new-entity-place', `latitude: ${position.latitude + 0.001}; longitude: ${position.longitude}`); document.querySelector('a-scene').appendChild(entity); }); });

고급 기능 구현 🔧

Three.js와 AR.js 연동

더 복잡한 3D 그래픽을 위해 Three.js를 직접 사용할 수 있습니다:

 
 
// WebGL 렌더러 설정 var renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true }); renderer.setClearColor(new THREE.Color('lightgrey'), 0); renderer.setSize(640, 480); document.body.appendChild(renderer.domElement); // 씬과 카메라 생성 var scene = new THREE.Scene(); var camera = new THREE.Camera(); scene.add(camera); // AR 툴킷 소스 생성 var arToolkitSource = new THREEx.ArToolkitSource({ sourceType: 'webcam' }); // AR 툴킷 컨텍스트 생성 var arToolkitContext = new THREEx.ArToolkitContext({ cameraParametersUrl: 'path/to/camera_para.dat', detectionMode: 'mono' });

3D 모델 로딩

GLTF 모델을 로드하여 AR에서 표시할 수 있습니다:

 
// GLTF 로더 var loader = new THREE.GLTFLoader(); loader.load('path/to/model.gltf', function(gltf) { var model = gltf.scene; model.scale.set(0.1, 0.1, 0.1); scene.add(model); });

성능 최적화 ⚡

렌더링 최적화

AR.js 애플리케이션의 성능을 향상시키기 위한 방법들입니다:

 
<a-scene arjs="sourceType: webcam; detectionMode: mono; matrixCodeType: 3x3;" renderer="precision: medium; antialias: false;" vr-mode-ui="enabled: false"> </a-scene>

메모리 관리

 
// 불필요한 객체 정리 function cleanup() { if (arToolkitSource) { arToolkitSource.dispose(); } if (renderer) { renderer.dispose(); } } // 페이지 언로드 시 정리 window.addEventListener('beforeunload', cleanup);

문제 해결 및 디버깅 🔍

일반적인 문제들

AR.js 개발 시 자주 발생하는 문제들과 해결 방법입니다:

  1. 카메라 권한 문제: HTTPS 환경에서만 카메라 접근이 가능합니다
  2. 마커 인식 불량: 조명 조건과 마커 품질을 확인해야 합니다
  3. 성능 문제: 렌더링 설정을 낮추고 불필요한 객체를 제거합니다

디버깅 도구

 
<a-scene arjs="debugUIEnabled: true;">

디버그 UI를 활성화하면 성능 모니터링과 마커 추적 상태를 확인할 수 있습니다.

브라우저 호환성

AR.js는 다음 브라우저에서 지원됩니다:

  • Chrome (Android/Desktop)
  • Firefox (Android/Desktop)
  • Safari (iOS 11+)
  • Samsung Internet

실제 활용 사례 💡

교육 콘텐츠

 
<a-scene embedded arjs> <a-marker preset="kanji"> <a-text value="안녕하세요!" position="0 1 0" align="center" color="blue"> </a-text> <a-entity gltf-model="url(earth.gltf)" animation="property: rotation; to: 0 360 0; loop: true; dur: 10000"> </a-entity> </a-marker> <a-entity camera></a-entity> </a-scene>

제품 프리뷰

 
<a-marker preset="custom" type="pattern" url="product-marker.patt"> <a-entity gltf-model="url(shoe-model.gltf)" scale="2 2 2" animation-mixer> </a-entity> <a-text value="신제품 스니커즈\n₩89,000" position="0 2 0" align="center"> </a-text> </a-marker>

배포 및 호스팅 🌐

웹 서버 설정

AR.js 애플리케이션을 배포할 때 주의사항입니다:

  1. HTTPS 필수: 카메라 접근을 위해 반드시 HTTPS 환경이 필요합니다
  2. MIME 타입 설정: .patt 파일에 대한 올바른 MIME 타입 설정
  3. CORS 설정: 외부 리소스 로딩을 위한 CORS 헤더 설정

모바일 최적화

 
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">

마무리 🎯

AR.js는 웹에서 증강현실을 구현할 수 있는 강력하고 접근성이 좋은 도구입니다. 기본적인 마커 기반 AR부터 복잡한 위치 기반 AR까지 다양한 형태의 AR 경험을 제공할 수 있습니다.

개발을 시작할 때는 간단한 예제부터 시작하여 점진적으로 복잡한 기능을 추가해나가는 것이 좋습니다. 또한 성능 최적화와 브라우저 호환성을 항상 고려하여 개발해야 합니다.

AR.js의 활발한 커뮤니티와 지속적인 업데이트를 통해 웹 AR의 미래는 매우 밝습니다. 여러분도 이 글을 통해 AR.js를 마스터하여 혁신적인 웹 AR 애플리케이션을 만들어보세요! 🚀

반응형

Table of Contents


EIGHTBOX
EIGHTBOX
hwaya.

programmer

🍋일상의 소소한 순간들부터 큰 꿈까지, 호기심을 만족시킬 다양한 카테고리를 담은 블로그 입니다. 그리고, 소소한 행동에 감동하며 기뻐하고 하루하루에 감사하는 사람🌵

Today Yesterday Total
최신글