內容來源:2017年5月13日,ThoughtWorks AR/VR高級研發工程師陳成在「2017技術雷達峯會|洞察構建將來的技術和趨勢」進行《AR,離咱們並不遙遠》演講分享。IT大咖說做爲獨家視頻合做方,經主辦方和講者審閱受權發佈。html
閱讀字數: 2388 用時: 4分鐘前端
AR項目的頭腦風暴必定要在真實情境中去作,由於AR應用是基於現實基於情境的。程序員
只有在真實使用的情境中才能發掘信息,去進行需求收集、用戶訪談、用戶流程、創意產生等等的這一系列流程。網絡
根據場景需求,基於設備和設備所能提供的API選擇設備。app
咱們的應用能夠是2C,供消費者本身使用;能夠是2B,在商業環境中給工做人員用;也多是2B2C,須要工做人員指導消費者在商業場裏景使用。微服務
設備能夠大體分爲手機AR和頭戴式AR兩大類。工具
手機AR是用手機攝像頭捕捉到真實世界的景象,並在上面疊加虛擬的物品呈現出的AR。性能
頭戴式AR是一個穿戴設備。好比微軟推出的HoloLens設備,他們和各行業企業合做推出了不少AR範例應用。開發工具
內容要由合適的設備來承載和展示。測試
渲染能力:設備是否具有咱們須要的場景複雜度的需求;
續航時間:產品是短期的應用仍是長時間的應用,使用頻率是怎樣的;
網絡能力:是否須要聯網;
在室內仍是室外;
場景的規模有多大……
這些都是咱們須要考慮的方面,爲優化作準備。
咱們用一些紙盒、樂高或者是真實的物品代替,在真實的3D空間、實際場景中作實驗,檢測咱們的原型設計是否可用有效,用戶使用是否方便。
設計師與程序員合做,使用幾何模型(而不是高精度模型)進行開發實驗。
這個階段還要進行交互範式探索。
最後產出故事板,藉助故事板來描述3D的情景。
設定優化目標
爲場景和設備設定合適的優化目標和指標,要考慮的是幀率、內存消耗、耗電量和設備溫度等等。
高保真設計會用到一些設計工具,好比用3DS Max、Maya、Blender進行模型的製做和動畫,Substance用來作材質紋理,等等。
素材中在場景中渲染出來後看不見的面,能夠去掉,下降渲染的損耗。
控制點和麪的數量,超過限制性能會下降不少。
拆分大的素材,沒被看見的部分就不用渲染。
咱們的開發平臺選用Unity 3D引擎。它的出身是一個遊戲引擎,在當前AR、VR飛速發展的環境下,它已經一個通用的3D開發平臺,能夠適配到超過30個平臺作構建,在AR、VR方面,Unity佔的份額很是高。
開發是基於設備API去作的,利用開源工具庫豐富咱們能夠提供的其它功能。
輸入通常會用到注視和手勢。在手機VR上的視角中心有一個點,這個點會跟隨用戶頭部的移動而移動。從AR技術實現上,咱們會在用戶的視角中間打一個光束,和它交叉的點就是光標所在的位置。利用那個點去跟所選取到的虛擬物品進行交互,交互的方法就是用手勢,若是是基於手機上的AR app,咱們會用屏幕點擊來進行。
輸出方面物體的渲染交給Unity去作,構建虛擬場景,而後把虛擬的物品渲染出來。除了視覺上的物體渲染,還須要有聽覺上的感覺。空間聲音就是很重要的一方面。空間聲音就是聲音具備空間感,使用戶體驗感覺更加真實。
這是AR區別於VR的地方,它會和真實世界結合起來,把虛擬世界變爲現實世界。分爲空間建模、空間分析理解以及圖像和物體識別。
空間建模:如圖可見,用戶所在空間被掃描疊加了一層建模的樣子,是經過設備傳感器所作到的。建模能夠被渲染出來,它的渲染和物理部分是分開的。圖中渲染後用不一樣顏色表現出距離信息。建模包含了物理信息,它有一個碰撞機,能讓虛擬物品疊加上去。
空間分析理解:建模後拿到模型,通過空間分析理解能夠知道哪裏是地面、哪裏是牆、哪裏是天花板。
圖像和物體識別:圖像和物體識別能夠用第三方服務作到,好比Vuforia,開源的ARToolkit,等等。識別出來後再進行疊加處理。
AI:AI服務徹底能夠融入AR應用中,爲AR增添色彩。例如微軟、谷歌、IBM的服務,均可以經過接口的方式把數據傳輸給它們處理,再拿回來進行使用。這樣AR的服務就能夠作到語音識別和對話,UI再也不是一個對話列表,而是能夠真的有一個虛擬人在和用戶進行交流。
共享協做:根據場景需求,與相同或不一樣設備協同合做。能夠與其它設備作到同步的交互,也能夠頭戴設備與平板結合作演示,遠程控制用戶的體驗。
代碼管理與協做開發:Git是咱們經常使用的。Github for Unity是直接放在Unity裏的一個插件,進行圖形化的管理。Unity也推出了服務Collaborate。
Unity和代碼優化:首先要作Unity player settings和quality settings,不一樣設備須要不一樣的設置。根據應用內容設置攝像機的clipping plane,避免過多渲染。設置stabilization plane,添加spatial anchor,增長穩定性。放置物體在合適的位置,觀看溫馨度更高。把spatial mapping的精度下降到Low。寫着色器,或者使用HoloToolKit之中的着色器。使用draw call batching和instancing,一次性渲染多個對象。使用純GPU繪製大量的物體。
Unity Test Runner是Unity集成的工具。Edit mode用於作unit test,play mde可作integration test。要注意Undo或在新場景中測試。
能夠在Unity中直接進行預覽。在editor中有一些預設的空間模型能夠預覽,也能夠遠程連到你的設備。
幀率必定要保證在60幀或者以上,若是低於60幀可能會產生抖動或者不穩定,用戶會感到暈眩。
HoloLens上內存若是超過900兆會被直接關掉,也是咱們須要關注的問題。
耗電量取決於應用的強度和幀率。
設備溫度要關注的是環境處於室內仍是室外,還有使用時間等因素都和溫度有着密不可分的關係。這對用戶的溫馨度會有很大影響,尤爲是頭戴式AR設備,若是設備溫度太高,用戶體驗會不好。
部署到模擬器,再部署到設備上進行使用。
用Jenkins啓動Unity命令行工具,可直接使用Unity的接口。能夠用Unity的Unity Cloud Build服務,構建手機應用。
迭代循環的流程是頭腦風暴-原型設計-高保真設計-開發-測試-部署,最重要的是優化。
我今天的演講就到這裏,謝謝你們。