🧊
【threex-artoolkit】マーカーベースARで認識精度を調整する
株式会社palanのxR事業部で主にWebAR/VRの開発をしています、damiと申します。
この記事ではAR.js x Three.jsでマーカーベースARを開発する際に使用するthreex-artoolkitにて、
認識精度(オブジェクトの安定性)を調整する方法を備忘録的にまとめます。
前提: マーカー画像を選ぶ際の注意点
AR.js x Three.jsを扱う場合、QRコードをマーカーにするのは避けましょう!死にます。
(2022年2月現在)
▼こういうの
認識自体はできる(MarkerFoundのイベントは発火する)ので、認識を一瞬のトリガーとしてのみ用いるのはアリですが、上にオブジェクトを置きたい場合はとにかく安定しません…
この点AR.js x A-Frameだと安定するのでAR.js側の認識アルゴリズムが違うのか…
なにが原因なのかは不明です(この辺ご存知の方いたら教えてください…)
調整
オブジェクトの認識&レンダリング周りの調整は
ArToolkitContext
とArMarkerControls
のパラメーターの値をいじることで調整できます。
ArToolkitContextパラメータ
arToolkitContext = new THREEx.ArToolkitContext({
cameraParametersUrl: THREEx.ArToolkitContext.baseURL + "../data/data/camera_para.dat",
detectionMode: "mono",
// debug: 認識しているか、認識精度どうかのテストをしたい時はここをtrueにする
debug: false,
// patternRatio: ここはARマーカー作った時のフチの幅に合わせる
patternRatio: 0.65,
});
ArMarkerControlsパラメータ
const markerControls = new THREEx.ArMarkerControls(arToolkitContext, markerRoot, {
type: "pattern",
patternUrl: "hiro.patt",
// minConfidence: 認識の際の正確度に閾値を設けられる
// 小さい数字ほど visible = true になる可能性が上がるが、表示が安定しないリスクがある
minConfidence: 0.001,
});
smoothedControls
smoothedControls
はマーカー認識のブレなどを補間できるパラメーターで、基本つけたほうが安定する印象。
let smoothedRoot = new THREE.Group();
scene.add(smoothedRoot);
smoothedControls = new THREEx.ArSmoothedControls(smoothedRoot, {
lerpPosition: 0.4,
lerpQuaternion: 0.3,
lerpScale: 1,
});
arWorldRoot = smoothedRoot;
// マーカーの上に出すオブジェクトは全て
// scene.add()ではなくarWorldRoot.add()するとsmoothが適用される
// 以下を毎フレーム
smoothedControls.update(markerRoot);
参考
ArToolkitContext, ArMarkerControlsのパラメーター詳細
smoothedControlsの参考
Discussion