Buy+技術(shù)是首個購物+VR的結(jié)合,而這個結(jié)合自然會出現(xiàn)一些難題,那么到底有哪些難題呢。
1、圖片識別
作為技術(shù)人員,我們首先想到的是做圖片識別。有一個標定的圖片,然后跑算法,一幀一幀去算,看每張圖片里是不是有你想要的物品。
但是這個方案經(jīng)過討論以后很快就被否定,也沒有去嘗試,因為走到每個位置時看到的物品的面都不一樣,這給圖像識別帶來很大難度。
而且很多商品在場景中看上去并不是那么大,對圖像識別的要求實在太高,按照目前的技術(shù)無法實現(xiàn)。
2、顏色識別
于是我們想到了一個辦法,把整個全景視頻拍兩遍,第一遍正常拍,第二遍在有商品的位置用一個有特殊顏色的物品代替。
然后用顏色的識別來取出商品相應的位置;
這里有兩個難點,首先兩次拍攝的速度必須是一樣的,另外需要把場景中特殊顏色的位置全部用圖像算法摳出來。
我們真實嘗試時發(fā)現(xiàn)了兩個問題,一是如果代替物很小,在整個圖片中的像素表現(xiàn)是不夠的;二是很容易被其它顏色干擾。
比如燈光,每個商店的燈光不一樣,而且環(huán)境中可能會有與物體顏色一樣的東西。
經(jīng)過多次嘗試后發(fā)現(xiàn),這個方案也是不可行的。因為我們對現(xiàn)場的燈光跟環(huán)境基本沒有控制力。
3、轉(zhuǎn)換坐標系
這時我們又嘗試了另外一個方案,我們開始拍的時候把視頻的第一幀拿出來,所有物體離攝像頭的距離都測出來。
然后根據(jù)攝像頭的勻速運動判斷商品下一幀會在什么位置。
這個方案理論上蠻通的,但實現(xiàn)的時候也遇到很大技術(shù)困難,首先是勻速運動的問題,這個用軌道車可以解決。
第二點,整個坐標系轉(zhuǎn)化的問題,測量時一個很小的誤差會導致坐標系轉(zhuǎn)化(平面坐標轉(zhuǎn)化為三維坐標)產(chǎn)生很大的誤差。
還有,每個攝像頭的參數(shù)不一樣,這導致每次坐標系轉(zhuǎn)化的參數(shù)都要重新通過數(shù)據(jù)去訓練。
我們嘗試去訓練Insta 360的一個設(shè)備,最后訓練完拿到坐標系的參數(shù),誤差還可以。但是后來嘗試其它攝像頭,發(fā)現(xiàn)這個參數(shù)是完全不可用的。
到此我們的第三種方案也基本可以認為是不可行的。
4、空間移動方案
這次我們完成了兩個方向的全自由移動,原理也是蠻簡單的,我們把一個視頻拍完以后,轉(zhuǎn)成一個倒播的視頻。
只需要在正向走動的時候播正向的視頻。
5、3D商品的展示和交互體系
3D商品的展現(xiàn),我們選擇了一個蠻實用的方案,就是每個物品環(huán)拍一圈,然后每隔一定度數(shù)取一張照片,把它形成一個連播的文件。
用戶進來的時候,就默認先播一圈,但這里也有蠻坑的事情。如果商品和背景需要融合得很好的話,需要把背景摳成透明的。
我們做了幾百個商品,每個商品都有很多張圖片,基本上屬于不能完成的工作量。
我們通過綠幕的手段,結(jié)合一些圖片提取的方法讓效率變得很高,最終把這件事情完成。
剛才提到功能上線在手淘,像這種超級app對包的大小非常敏感,導致我們沒法用一些現(xiàn)成的游戲引擎。
里面所有UI和交互都是我們自己用Open GL研發(fā)的。
我們構(gòu)建了自己的坐標體驗,事件的調(diào)度體系,UI復用還有粒子系統(tǒng),動畫系統(tǒng)和事件檢測機制。