轉載請聲明轉載地址:http://www.cnblogs.com/Rodolfo/,違者必究。html
近期不少搞技術的朋友問我,如何步入VR的圈子?如何從零基礎系統性的學習VR技術?算法
本人將於2017年1月1日開始,在《博客園》平臺進行《VR零基礎學習開發》系列文章連載,敬請關注。數據庫
在此呢,我寫下此文,但願可以幫助那些有相同疑惑的朋友。編程
VR是Virtual Reality的縮寫,中文的意思就是虛擬現實。安全
虛擬現實(VR)是近幾年來國內外科技界關注的一個熱點,其發展也是突飛猛進。簡單地說,VR技術就是藉助於計算機技術及硬件設備,實現一種人們能夠經過視聽觸嗅等手段所感覺到的虛擬幻境,故VR技術又稱幻境或靈境技術。網絡
虛擬現實是一門集成了人與信息的科學。其核心是由一些三維的交互式計算機生成的環境組成。這些環境能夠是真實的,也能夠是想象的世界模型,其目的是經過人工合成的經從來表示信息。有了虛擬現實技術,複雜或抽象系統的概念的造成能夠經過將系統的各子部件以某種方式表示成具備確切含義的符號而成爲可能。虛擬現實是融合了許多人的因素,且放大了它對我的感受影響的工程。虛擬現實技術是創建在集成諸多學科如心理學、控制學、計算機圖形學、數據庫設計、實時分佈系統、電子學、機器人及多媒體技術等之上的。數據結構
虛擬現實應具備如下三個方面的含義。首先VR是經過計算機生成一個很是逼真的足以「迷惑」咱們人類視覺的虛幻的世界。這種「迷惑」是多方面的,咱們不只能夠看到並且能夠聽到、觸到及嗅到這個虛擬世界中所發生的一切。這種感受是如此的真實,以致於咱們能全方位地浸沒在這個虛幻的世界中,這就是VR的首要功能,即浸沒感(Immersion)或臨場參與感。通常來講,虛擬系統的輸出設備應儘量面向使用者的感受器官以保證良好的浸沒感,如頭盔式顯示器(HMD),它將使用者的聽覺視覺功能徹底置於虛擬的環境之中並切斷了全部外界信息。使用者在虛擬的環境漫遊能夠經過跟蹤使用者的頭及身體的運動來完成,與虛擬物體的接觸經過戴在手上的傳感裝置檢測來實現。多線程
虛擬現實與一般CAD系統所產生的模型是不同的,它不是一個靜態的世界,而是一個開放的環境,它能夠對使用者的輸入(如手勢,語言命令)做出響應。好比你能夠拿起一虛擬的火炬並打開其開關,你一推操縱桿,彷彿能夠在裏面漫遊,你甚至能夠用虛擬的手感觸到虛擬物體存在,虛擬現實環境能夠經過控制與監視裝置影響或被使用者影響,這是VR的第二個特徵,即交互性(Interaction)。架構
虛擬現實不只僅是一個媒體,一個高級用戶界面,它是爲解決工程、醫學、軍事等方面的問題而由開發者設計出來的應用軟件,它以誇大的形式反映了設計者的思想,好比當在蓋一座現代化的大廈以前,你首先要作的事是對這座大廈的結構作細緻的構思,爲了使之定量化,你還需設計許多圖紙,固然這些圖紙只能內行人讀懂。正如這些圖紙反映的是設計者的構思,虛擬現實一樣反映的是某個設計者的思想,只不過它的功能遠比那些呆板的圖紙生動,強大的多。因此國外有些學者稱VR爲放大人們心靈的工具,或人工現實(artifical reality)。這是VR所具備的第三類特徵,即思想性(Imagation)。框架
綜上所述,虛擬現實是人們能夠經過視聽觸等信息通道感覺到設計者思想的高級用戶界面。
注意:算法、計算機圖形學及GPU優化和編程 的系統性學習 及 長期的知識積累,請關注本人單獨「算法」模塊。
Unity引擎基礎概述 行業知識彙總(引擎概念、遊戲發展、VR AR的應用領域) 需求分析「概念」(對於提出的需求能夠在邏輯上拆解成相應步驟); 開發工具介紹:VistualStudio IDE、MonoDevelop IDE C#腳本語言基礎:數據類型、數學運算、邏輯運算三大模塊基礎。 |
C#腳本語言模塊化開發 過程性模塊化封裝:方法定義,理解形參、實參和返回值的意義; 面向對象模塊化封裝:類對象申請與使用、類對象繼承、虛擬化類使用、結構體、枚舉、宏; |
C#腳本語言面向對象開發 C#語言OOP技術:類對象的建立和使用,理解構造和析構函數的申請與釋放過程、瞭解C#內存申請釋放的處理過程;成員變量屬性化操做、純虛類繼承設計方案、類抽象性變化、使用泛型完成任意類型對象、深度複製和淺複製的操做、Object基類的使用、集合應用; |
高級數據結構(C#版本) 類對象的抽象接口開發。 數據結構:單雙向鏈表的構建與實際應用,棧的構建與使用,隊列的構建與使用; 排序算法:冒泡排序、快速排序、插入排序; 設計模型:單列、工廠模式、有限狀態機; |
Unity3D C#腳本基礎API Unity引擎的界面、組件等介紹; 3D座標系、向量概念介紹; MonoBehaviour類瞭解Unity引擎的運做機制; 使用GameObject類構建基本的遊戲對象; 學習Transform類使咱們的3D世界動起來; 學習Vector2/3/4類使用; 學習Mathf數學類。 學習Input輔助類掌握Unity引擎對硬件控制的反饋處理。 學習Time類使用; |
基礎3D數學 向量數學計算、向量數學計算與幾何意義; 自定義設計向量計算類; 3X3矩陣線性計算、4X4齊次放射矩陣計算、矩陣求逆、四元數數學計算 ; 實現向量空間轉換計算器; 補充三角函數(Sin, Cos, Tan, ArcCos, ArcSin, ArcTan); |
Unity3D組件編程與應用 簡易多線程:協同。 基礎物理系統:剛體,碰撞體,射線。 攝像機組件與應用座標系以及各個座標系的轉化。 燈光與音效組件的使用; 渲染組合套件和網格過濾組件控制。 2D物理組件; 資源系統和組件系統:Resources,Component集合。 |
Unity3D動畫與粒子系統 使用Animation舊動畫系統實現簡單的重複性運動; 使用腳本實習舊動畫系統實現狀態機控制; MecAnim新動畫系統的學習和使用; 2D Animator動畫系統綜合應用; 利用新動畫系統採用圖示化的方式構建動做執行方案; 使用代碼控制動畫狀態機產生運動變化; 動畫系統結合粒子系統的綜合應用; Unity導航系統、場景烘焙、遮擋剔除 烘培使用技巧; |
Unity3D 文件系統與UI界面 C#文件內存數據流開發; XML文件讀寫; Jsone文件讀寫; UGUI佈局與適配; 使用NGUI插件實現遊戲UI製做; |
計算機基礎圖形學 渲染基礎概念理解(GPU工做流程簡介); 學習Unity3D引擎的 ShaderLab語法; Cg語言基礎學習; Cg語言與Unity3D引擎結合實現渲染; 基礎光照着色算法(Diffuse、Phong、BinPhong); 切線空間學習實現凹凸貼圖渲染; 引擎控制着色器代碼工做; |
Unity3D高級開發 C++語言基礎:指針,引用、函數和類定義 C++語言高級開發:重載函數與運算符、OOP技術、泛型、STL模板: C++文件數據流操做; C#調用C++動態庫; |
Unity3D 高級網絡應用開發 Linux、Windows、OSX多線程開發; 線程安全學習與應用; 網絡套接字(Socket)套接字基礎知識學習; 套接字基礎通信; 實現客戶端/服務端通信; 實現Unity引擎調用C++套接字實現引擎網絡化; |
Unity項目實訓 學習Editor自定義組件; 學習EditorWindow工具化開發,實現Unity引擎自定義工具製做; 實現地遍系統構建;AssetsBundle打包與讀取。 |
Unity項目實訓 程序構建戰鬥系統核心框架;策略類遊戲分析。 實現戰鬥系統中的控制系統;策略類遊戲實現(地圖編輯系統,角色技能系統、尋路系統、遊戲數據讀寫,網絡通訊); 實現戰鬥系統中的尋路技術; 實現戰鬥系統中的NPC的人工智能控制; |
Unity項目實訓 優化戰鬥系統; 對於計算密度高的算法向C++方式移植; 構建MVVM視圖架構,添加UI視圖; 實現數據系統,讓全部的角色擁有數指屬性; |
Unity項目實訓 優化數值系統; 優化美術資源的內存佔用; 優化程序的冗餘算法; 優化算法的精細度; 開始移植Android和IOS平臺; |
本人對學習VR開發及長期知識積累的一些建議(僅供參考)。
(1)計算機圖形學技術的學習及相關知識儲備。
(2)虛擬現實系統的交互設備。eg:三維跟蹤、人體運動、手部姿式、立體顯示、聲音輸出、觸覺力覺、三維掃描、三維打印等。
(3)虛擬現實系統的關鍵技術:立體顯示、環境建模、三維虛擬聲音、人體天然交互以及相關開發軟件及輔助軟件的學習。
(4)Vizard虛擬顯示開發平臺的使用。
該平臺下模型瀏覽、流程控制、人物角色、窗口界面、媒體素材、物理引擎、交互設備、網絡控制等技術。
(5)Python語言的學習及上述技術的語言輔助。
注:VR的學習,是長久技術的積累,是知識的沉澱,並不是一日之功,道阻且長!