如何从零基础学习VR

转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究。

近期很多搞技术的朋友问我,如何步入VR的圈子?如何从零基础系统性的学习VR技术?

本人将于2017年1月1日开始,在《博客园》平台进行《VR零基础学习开发》系列文章连载,敬请关注。

在此呢,我写下此文,希望能够帮助那些有相同疑惑的朋友。

VR到底是什么。

VR是Virtual Reality的缩写,中文的意思就是虚拟现实。

虚拟现实(VR)是近几年来国内外科技界关注的一个热点,其发展也是日新月异。简单地说,VR技术就是借助于计算机技术及硬件设备,实现一种人们可以通过视听触嗅等手段所感受到的虚拟幻境,故VR技术又称幻境或灵境技术。

虚拟现实是一门集成了人与信息的科学。其核心是由一些三维的交互式计算机生成的环境组成。这些环境可以是真实的,也可以是想象的世界模型,其目的是通过人工合成的经历来表示信息。有了虚拟现实技术,复杂或抽象系统的概念的形成可以通过将系统的各子部件以某种方式表示成具有确切含义的符号而成为可能。虚拟现实是融合了许多人的因素,且放大了它对个人感觉影响的工程。虚拟现实技术是建立在集成诸多学科如心理学、控制学、计算机图形学、数据库设计、实时分布系统、电子学、机器人及多媒体技术等之上的。

虚拟现实应具有以下三个方面的含义。首先VR是通过计算机生成一个非常逼真的足以“迷惑”我们人类视觉的虚幻的世界。这种“迷惑”是多方面的,我们不仅可以看到而且可以听到、触到及嗅到这个虚拟世界中所发生的一切。这种感觉是如此的真实,以至于我们能全方位地浸没在这个虚幻的世界中,这就是VR的首要功能,即浸没感(Immersion)或临场参与感。一般来说,虚拟系统的输出设备应尽可能面向使用者的感觉器官以保证良好的浸没感,如头盔式显示器(HMD),它将使用者的听觉视觉功能完全置于虚拟的环境之中并切断了所有外界信息。使用者在虚拟的环境漫游可以通过跟踪使用者的头及身体的运动来完成,与虚拟物体的接触通过戴在手上的传感装置检测来实现。

虚拟现实与通常CAD系统所产生的模型是不一样的,它不是一个静态的世界,而是一个开放的环境,它可以对使用者的输入(如手势,语言命令)作出响应。比如你可以拿起一虚拟的火炬并打开其开关,你一推操纵杆,仿佛可以在里面漫游,你甚至可以用虚拟的手感触到虚拟物体存在,虚拟现实环境可以通过控制与监视装置影响或被使用者影响,这是VR的第二个特征,即交互性(Interaction)。

虚拟现实不仅仅是一个媒体,一个高级用户界面,它是为解决工程、医学、军事等方面的问题而由开发者设计出来的应用软件,它以夸大的形式反映了设计者的思想,比如当在盖一座现代化的大厦之前,你首先要做的事是对这座大厦的结构做细致的构思,为了使之定量化,你还需设计许多图纸,当然这些图纸只能内行人读懂。正如这些图纸反映的是设计者的构思,虚拟现实同样反映的是某个设计者的思想,只不过它的功能远比那些呆板的图纸生动,强大的多。所以国外有些学者称VR为放大人们心灵的工具,或人工现实(artifical reality)。这是VR所具有的第三类特征,即思想性(Imagation)。

综上所述,虚拟现实是人们可以通过视听触等信息通道感受到设计者思想的高级用户界面。

《VR零基础学习开发》学习大纲

注意:算法、计算机图形学及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的学习,是长久技术的积累,是知识的沉淀,并非一日之功,道阻且长!

 

上一篇:HashSet中的元素必须重写equals方法和hashCode方法


下一篇:Hibernate中为什么要重写equals方法和hashcode方法