從掃描到作品活起來,手機在這之間做了什麼。
QR code 打開的是一個普通的網頁。這個網頁會要求使用相機,之後便以每秒大約三十次的速度反覆執行一個迴圈:在畫面中找出有辨識度的點,與作品的指紋比對,算出印刷品在空間中的位置,再透過同一個變換繪製各個圖層。沒有任何伺服器看得到任何一格畫面。
四個步驟,每秒三十次。
-
1
找出值得追蹤的點
角點和高對比的紋理——也就是影像同時在兩個方向上發生變化的地方,因為只有這些點能在手機移動時被可靠地重新找到。平坦的區域和筆直的邊緣在這裡派不上用場。
-
2
與作品比對
作品在上傳時就分析過一次,並濃縮成由這些點構成的指紋。把即時畫面與它比對,就能知道眼前的哪些點對應到印刷品上的哪些點。
-
3
算出印刷品在哪裡
只要有足夠多的配對點,一道運算——單應性變換(homography)——就能還原這個平面矩形在相機畫面中的位置與傾斜角度。錯誤的配對會透過共識被剔除,而不是被照單全收。
-
4
透過它繪製圖層
同一個變換決定了你的影片和文字的位置,讓它們貼在印刷品上,而不是飄在螢幕上方。接著下一格畫面到來,一切再重來一次。
不談瀏覽器的概念版:影像追蹤的原理。
三個瀏覽器 API,不需要外掛。
標準的權限提示,和視訊通話用的是同一個。影像串流是一個普通的 video 元素,網頁可以從中讀取像素。這個權限按網站授予,觀眾也可以撤銷——這通常比已安裝的 App 所提供的還多。
特徵偵測與比對是密集的數值迴圈,而這恰恰是 JavaScript 最不擅長的。把這一半編譯成 WebAssembly,才讓中階手機也能達到每格約 30ms 的時間預算。
圖層在 GPU 上依照追蹤器算出的姿態繪製,而且就畫在算出這個姿態的同一格畫面上。如果用較舊畫面算出的姿態去合成當前畫面,疊加層就會飄移晃動。
這對你拿來對準的作品意味著什麼。
這些是方法本身的特性,而不是哪一個平台的特性——所有以影像追蹤為基礎的 AR 工具都適用。
細節豐富的插畫,追蹤效果非常好。有大片平坦色塊的極簡印刷品,幾乎讓追蹤器無處著力;而重複的圖案比什麼都沒有更糟,因為每個點看起來都和其他點一樣。
相機畫面在裝置上處理完就丟棄。真正透過網路傳輸的是設計——作品的指紋和你的圖層——而且只下載一次。這是在裝置上運算的本質特性,而不是一項可能悄悄改變的政策。
瀏覽器拿不到原生 App 能使用的深度感測器或持久的空間錨點。對固定在印刷矩形上的圖層來說,這毫無損失——矩形本身「就是」錨點,而且比起猜測地板在哪裡,它是更好的錨點。
打開範本,變成你的作品。
Interart 的 AR 範本都是完成好的可用設計——在瀏覽器編輯器中開啟,換上你自己的作品,它就是你的了。每個範本都自帶引導教學,教你一種技巧。
無需帳號——註冊後你的作品會自動保留。
拿手機對準某樣東西,看看吧。
在瀏覽器編輯器裡,從你自己的圖片開始——幾分鐘就能做出第一個揭幕效果。
有疑問,就有答案。
不會。畫面在手機上處理完就丟棄,不會傳送到任何地方。這取決於運算在哪裡進行,而不是一個承諾——追蹤在網頁裡、在裝置上執行,因為每一格畫面若都要來回傳一趟,就永遠不可能守住 30ms 的預算。
幾乎都是因為不規則的細節太少,或重複太多。追蹤需要彼此能區分的點;大片平坦區域一個都提供不了,重複的圖案則提供了許多無法區分的點。細節豐富、有紋理、不對稱的作品追蹤效果最好。
不需要。它是一個網頁,用 getUserMedia 取得相機、用 WebAssembly 做視覺運算、用 WebGL 繪圖——這些在 iOS Safari 和 Android Chrome 裡都是標準功能。觀眾掃描一個碼,它就開始執行。
無法穩定做到,而且那是另一種技術。在房間裡擺放物件需要深度感測和持久的世界錨點,而瀏覽器拿不到這些。影像追蹤則是錨定在印刷品上——一個已知的平面矩形,因此是精準得多的附著對象。