UNITY开发VR从入门到放弃---VR自学手册

第一部分:了解VR

第一章:虚拟现实开发入门技术:了解什么是虚拟现实技术(VR )

UNITY开发VR从入门到放弃---VR自学手册_第1张图片

VR全称为Virtual Really,即虚拟现实:由计算机或独立计算单元生成虚拟环境,体验者通过封闭式的头部显示器(简称为头显)观看这些数字内容,虚拟现实设备通过传感器感知体验者的运动,将这些运动数据(例如头部的旋转,手部的移动等)传送给计算机,相应地改变数字环境内容,以符合体验者在现实世界的反应。体验者可以在虚拟环境中行走、观察,与物体进行交互,从而感受到与现实世界相似的体验。VR头显和耳机通过两种最突出的感官-视觉和听觉,实现了高品质的VR沉浸式体验。

随着vr/ar时代的来临,传统的交互方式已经远远不能瞒住人们的需求。因此,模仿人类本能的自然交互技术成为 虚拟现实技术的基础。虚拟现实要实现完美的沉浸感,需要用到以下几种技术:动捕、眼动追踪、语音交互、触觉交互、嗅觉及其他感觉交互技术、脑机接口。 脑机接口设备的短期目标是资料一些常见的脑部疾病,终极目标是让人类和人工智能技术相结合,实现人机交互;

制作一款游戏、应用大体流程

开发任何一款产品,无论是游戏还是应用,首先要做的事情不是直接打开开发工具,而是先进行产品的策划与设计;

1.游戏背景:在这里需要创建一个游戏背景,为什么要做这样一款游戏、应用。游戏的话,要有游戏故事情节。

2.游戏概述:是一款什么游戏、应用,玩家进入游戏、应用中可以干什么;

3.游戏场景:设计一个主场景,后续添加更多子场景。

4.游戏规则、交互:添加游戏玩法 规则,以及应用的交互设计;

VR技术应用案例

VR技术能够应用于各种行业,或者解决行业中存在的问题,从而提高使用体验。

游戏

相比传统的电子游戏形态,VR游戏能够带来更加沉浸式的游戏体验。在主机或智能手机的游戏体验中,玩家控制 游戏主角,完成拯救世界任务;而玩家戴上VR头显即可化身为游戏中的主角,体验惊险刺激的游戏内容。Unity引 擎能够帮助开发者快速、高效地制作出激动人心的VR游戏作品。

房地产

目前的房地产样板间受限于预算,只能对单一户型进行某一种风格的装修展示,对于潜在业主来说,很难迎合不同年龄段业主的喜好。借助VR技术,可以用相对低廉的成本构建出多种装修风格的VR样板间。同时,多数楼盘以期房为主,业主会对交房以后与样板间不符有所顾虑,从而降低成交率。在VR中,开发商可以将户型按照房型1:1的比例进行预展示,借助Unity预计算实时全局光照技术(Precomputed Realtime GI),可以模拟该户型在一天24小时、一年四季的采光,甚至是小区的园林绿化等室外场景也可以进行虚似展示,从而打消业主的成交顾虑。对开发商来说,快速成交有助于缩短回款周期,缓解资金链压力。

VR家装(展厅)

VR家装可以解决两个问题:一是展厅建造成本高,二是产品款式展示数量有限且不形象。瓷砖展厅装修华丽且造价不菲,几乎每个厂商都会建造一个这样的展厅,用来展示他们的畅销产品。使用VR技术,在虚拟现实提供的沉浸式数字环境里,利用Unity先进的全局光照系统和基于物理的模型渲染(PBR)材质制作技术,商家可以为业主提供一个虚拟的展厅环境。通过实时渲染和一键切换瓷砖铺贴方案,解决了产品款式展示不全的问题,可以保证商家所有瓷砖款式得到展示。

安全生产培训

在厂矿、电力、消防行业,越来越多的单位引入了VR技术,对员工进行职业培训,通过对相关操作设备进行建模,在VR技术下实现操作仪器设备,学员可以佩戴VR头显进入虚拟环境,观察设备的外观、结构、部件等,借助手柄等交互设备,实现设备的认知、抓取、拆装,对于关键操作流程进行模拟演练,从而熟练掌握设备的使用。比如在国家电网的安全生产培训中,“安全第一”始终是国家电网在生产过程中放在首要位置的运营理念,目前的安全生产培训大多基于言传身教和定期组织模拟演练,但是培训过程受限于培训人力及安全考虑,很难达到理想的培训效果,借助VR技术,能够使学员在培训中比较形象地了解到由于操作失误引起的事故,比如设备的融毁、电击、火灾等安全事故。使用VR技术一方面减少了实际培训的安全风险,另一方面降低了培训演练的成本,同时能够达到理想的培训效果。

医疗康复

VR技术已经在医学领域得到了广泛应用,随着技术的成熟,将产生更多的应用场景。医护人员可以使用VR技术模拟现实手术过程,从而提高现实手术的成功率;通过3D成像技术,在VR中可以更好地对患者的病情进行诊断。与2D呈现效果相比,沉浸式的虚拟现实视觉效果和交互功能,为医护人员提供了更多学习和实战的机会。除此之外,使用VR技术还可有效治疗各种精神疾病,如恐高、演讲恐惧、自闭症等,结合人工智能技术,为患者提供定制化的安全空间和互动场景,减少他们的防备心,并对行为含义进行分析,以进行针对性治疗。VR技术有朝一日可以取代传统的图表和复杂的培训流程。

公益组织

针对社会问题存在的非营利公益组织,使用VR技术可以帮助其建立品牌形象,并鼓励大众围绕关键问题进行更深入地参与。例如,一个公益组织想要向公众宣传气候变化的影响,他们可以通过开发相关VR应用程序供大家体验,如查看自己的家园在极端干旱或洪水中的样子。体验者能够“亲身”体验关键问题造成的实际影响,VR技术是非营利公益组织和其他有社会影响力组织增强其信息传递的有力工具。、

社交

社交是人类的基本需求,无论在PC平台还是在移动平台,社交应用程序一直是一个很大的主体。通过VR技术在人与人之间进行交互,在VR应用程序中与好友或陌生人联系、发送问候、观看赛事直播、协同完成任务等,能够显著提升现有形式的社交体验。受限于目前技术水平,VR社交尚处于初级阶段,但是未来具有巨大的发展潜力。Facebook未来的VR发展战略是在VR应用程序中连接所有用户。

教育

沉浸式的VR教学内容能够帮助学习者通过传统教学方式无法提供的虚拟现实体验对知识进行理解和记忆。VR技术能够将一些困难的概念可视化,如将过往历史中的遗迹重现,从而降低了传统课本知识的认知难度,激发学生的好奇心。

VR技术当前面临的挑战

VR技术虽然具有无限发展的潜力,但是作为一项新兴技术,在发展早期依然面临一些挑战。

硬件价格、运算及显示能力、交互、移动性、内容

主流的VR虚拟现实设备: Oculus Rift HTC VIVE

HTC VIVE 硬件简介

HTC VIVE是由HTC与Valve联合推出的一款设备,由Valve提供技术,HTC获得其授权,于2015年3月在MWC2015上发布。由于有Valve的SteamVR提供技术支持,因此在Steam平台上已经可以体验利用VIVE功能的虚拟现实游戏。在2016年6月,HTC推出了面向企业用户的VIVE虚拟现实头显套装一-VIVE BE(即商业版),硬件规格没有区别,包括专门的客户支持服务。

UNITY开发VR从入门到放弃---VR自学手册_第2张图片

头显前端面板遍布大量传感器,用于配合Lighthouse实现头显的位置追踪。前端顶部盖板可打开,内部连接用于数据传输的线缆,另外空余一个USB接口,用户可外接其他设备,如外接Leap Motion,实现手势输入。

UNITY开发VR从入门到放弃---VR自学手册_第3张图片

UNITY开发VR从入门到放弃---VR自学手册_第4张图片

  1. HTCvive设备安装配置

(一)运行环境

GPU:NVIDIA GeForce® GTX 970 / AMD Radeon™ R9 290 同等或更高配置

CPU:Intel® i5-4590 / AMD FX 8350 同等或更高配置

RAM:4GB+

Video 视频输出:HDMI 1.4或者DisplayPort 1.2或更高版本

USB 端口:1x USB 2.0或更高版本的端口

操作系统:Windows 10

VR眼镜:HTCVIVE

Steam平台:Steam VR

(二)软件安装

电脑下载steam平台,选择库,勾选工具栏。

UNITY开发VR从入门到放弃---VR自学手册_第5张图片

搜索 SteamVR,下载并安装。

UNITY开发VR从入门到放弃---VR自学手册_第6张图片

(三)设备安装(测试设备为HTC vive pro)

将两个定位支架放在房间的两个对角处,区域在4m2以上为佳。连接头戴显示设备,将头盔数据线连接到主机的独立显卡接口,并安装更新蓝牙驱动,如下图所示;

调整定位支架位置、朝向、高度;整个定位器的高度约在1.8M左右,将定位器像地面倾斜更有助于红外线定位。

房间定位,位置规划。点击软件

UNITY开发VR从入门到放弃---VR自学手册_第7张图片

选择仅站立,将头盔与电脑屏幕处于相对方向,点击下一步校准屏幕中心;

UNITY开发VR从入门到放弃---VR自学手册_第8张图片

UNITY开发VR从入门到放弃---VR自学手册_第9张图片

UNITY开发VR从入门到放弃---VR自学手册_第10张图片

软件设置完成,可以正常运行相关VR程序;


*认识手柄

UNITY开发VR从入门到放弃---VR自学手册_第11张图片

开发VR注意事项:

注意UI分辨率和画质:尽可能使用粗体。

考虑使用剧情型的UI:传统的项目中,UI元素通常是在显示器的顶部 包括:生命值‘得分的等,用户界面与游戏界面没有关联,但是对游戏玩家有一定的影响。这就是“非剧情型UI”但是这种UI界面对VR基本不适用,因为我们的眼镜无法聚焦在太近的物体上,因此我们需要考虑使用剧情型UI,具体形式坑内是墙上的闹钟、电视、计算机屏幕等或者全息展示

考虑UI元素的放置位置:将UI元素放在什么位置,让用户更容易观察,太靠近用户会导致眼部疲劳,离得太远会感觉聚焦在地平线上,这里需要考虑UI元素的比例大小:一般采用2的N倍大小,例如512 1024 2048;

提醒用户关注某一个特定的方向:虽然VR可以360°查看,但是有时候需要我们主动提醒用户某个特定的方向,在某些场景中我们可以用箭头来引起用户的注意,这些箭头会更据用户的朝向淡入淡出。


避免移动摄像机,因为在VR中移动 用户本身没有移动,这就会造成用户眩晕,我们可以为用户提供一个固定参考物,例如:驾驶室 ;一般传送位置 使用Teleport传送;

使用淡入 淡出或者闪烁渐变的运动效果,从而优化体验;

了解游戏引擎:unity和UE4

UE4:功能很强大,但是需要学习C++语言,学习曲线相对比较陡峭,所以入门相对较难;如果需要效果特别逼真、大场景,例如房地产项目,可以采用ue4;

unity:简单易上手,人人都能做游戏,支持C#,教程资源非常丰富,开发者可以轻松上手,不需要太高的成本、只要有好的创意就可以出好作品。


视觉渲染:在游戏引擎中,视觉渲染部分是最重要的组件,其中包括低阶渲染器、场景图、剔除优化、视觉效果(粒子特效、光照贴图、动态阴影、全屏后期处理效果、颜色校正)、前段:(HUD、游戏内置图形用户界面、游戏内置菜单、视频等)要学好渲染系统需要:3D数学、线性代数、数值计算、计算机图形学、OPENGL、引擎的工具管道架构及运行时的渲染API;初学者只需要了解通过基于现有的引擎如何实现所需要的的效果即可;

性能分析与调试:游戏的卡顿对于游戏来时是非常致命的,对于AR、VR游戏或应用来说,性能优化则显得尤为重要,特别是对于VR游戏来说,性能优化是影响玩家体验的最关键的罂粟。因为对于VR游戏来说,需要在90-120fps的帧速率现实画面才流畅,如果优化不给力,很有可能在5分钟内用户就会产生眩晕感。

多人在线:

音效:好的游戏背景音乐和音效可以大大提升游戏的吸引力,因此绝大数的引擎会提供音效系统。

第二部分:unity中的核心概念

工欲善其事必先利其器,在学习VR开发之前可以先掌握Unity的基本用法

场景:游戏场景中包括了所有的游戏对象,我们可以在场景中创建主菜单、不同的关卡等;

游戏对象:游戏中的每一个对象都是游戏对象,这就意味着游戏中所需要的考虑的一切都和对象有关。游戏对象也是一种容器,我们可以添加不同的组件,从而成为游戏角色。

组件:游戏对象中往往包含多个游戏组件,游戏组件可以为游戏对象提供不同的功能,常用的组件如下:

transform:游戏对象的基础组件,可以修改游戏对象在地图中的位置、旋转角度和缩放值、默认情况下,所有的对象都有一个transform组件。

mesh网格类型的组件:渲染器

particle sysytem:粒子系统,该组件可以模拟各种各样的特效例如:火焰、下雨等,功能强大;

physice(物理组件 ):为了让创建的场景更具有真实感,我们需要让物体在虚拟世界遵循现实世界的物理规则。模拟物理行为;

Scripts(脚本组件):该组件由用户自己编写,定制C#语言;

audio(音频组件):用于设置音效或者背景音乐的各种属性,从而更好的游戏氛围;

video(视频组件):用于天剑unity3d内置的视频播放器;

rendering(渲染)和视觉渲染相关的组件有很多,例如:摄像机、天空盒、灯光、遮挡剔除;

event(事件):用于设置和响应各种事件。

network(网络 ):用于设置游戏相关的网络属性;

UI(界面):和UI相关的组件;

AR(增强现实):增强现实相关的组件。

除了以上组件,还有很多,这里只是一些常用的组件。

预制体:(prefab)是一个游戏对象及其组件的集合,目的是是游戏对象可以重复使用,一个形象的比喻:预制体好比模板,我们可以使用预制体在场景中快速创建一个具有特定组件的属性值得游戏对象;

unity光照系统

unity的的灯光组件大概可以分为两个类别:光源组件和烘焙组件

常见的光源类型:

1.Directional Light:几乎每个场景都会有的光源对象,常用于模仿太阳光的效果,通过调整角度控制光照;

2.Point Light:点光源,点光源从中心向四周扩散,如火把、室内灯灯;

3.Spot Light:射灯,从中心呈扇形想某一个方向发出,收角度和范围影响。用于模拟 手电筒和车灯等效果;

4.Area Light:和上面不一样,这个为烘焙型灯光,只有在烘焙的情况下使用。场景需要设置为静态;

PS:场景中阴影越柔和开销越大,硬则,锯齿感强;

全局光照:

灯光相互作用,如灯光照射到物体A,物体A反射的光同样照到物体B,这种关系是通过全局光照处理的。这种方法非常耗费资源,通常我们使用烘焙。

烘焙:

设置游戏对象为 static状态,更改烘焙模式,了解光照探头,反射探头;
 

粒子系统(ParticleSystem):

例如:风雨雷电雾灯,这类对象都是通过粒子特效来进行完成的,游戏室炫酷的魔法效果;

着色器

计算机图形学中,着色器是指专门用于渲染着色的计算机程序看,作用是设置图像的光照阴暗、和色彩等。着色器通常以极高的灵活性在图形硬件上运行。在unity中,对游戏对象的渲染是通过材质、着色器和纹理贴图共同完成的。三者的关系非常紧密,共同作用于游戏对象,形成丰富的游戏世界。

unity中的标准着色器:

Standard Sharder:用来处理大多数真实世界中的材质,如石头、玻璃等还可以用来处理皮肤,毛发;

了解着色器的相关渲染设置:

1.Opaque:默认的设置,适合渲染不透明的物体

2.Cutout:允许渲染带有完全透明的或者完全不透明的物体。

3.Fade:允许通过透明度的等级实现物体的渐变现实。

4.Transparent:允许渲染一些纯透明的物体,例如:玻璃、透明塑料凳;

Main Maps(贴图):

标准着色器有6种贴图类型,具体如下:

1.Albedo:基础颜色贴图,用于定义材质的色彩和透明度;

2.Metallic:金属贴图,用于定义材质表面对光的反射量。

3.Normal Map:法线贴图,用于添加划痕凹凸效果。可以减少计算机性能开销;

4.Height Map:高度贴图,类似于法线贴图,但是视觉效果更强。配合法线贴图使用;

5.Occlusion Map:剔除贴图,用于定义物体特殊区间的间接进光量 ,例如:阴影块儿;

6.Emission:自发光贴图了,用来控制材质球表面发射的光线的色彩和强度。

*Seconday Maps:允许我么设置材质的第二个纹理,从而实现更为复杂的效果。

Skybox天空盒:

一种特殊的着色器,可以用到整个场景中。

Shader Graph:用一种可视化的方式来创建和链接节点,并达到最终的效果。

后期处理(Post Processing):用来产生类似照片处理的效果,可以轻松的给游戏场景添加震撼的视觉效果,无需做更多的美术方面工作。

游戏中的UI系统

UI(User Interface ,用户界面)是游戏中最常见和最直接的交互手段,他可以为玩家提供操作提示和指引,让玩家在游戏过程中和系统进行交互。

UGUI:Canvas、Image、Text等

渲染模式:

1.Screen Space-Overlay:屏幕空间 覆盖,此CanVas下面的所有游戏对象UI都会直接绘制在游戏窗口的平面上,简言之,优先显示游戏UI,不会被其他遮挡;

2.Screen Space -Vamera:屏幕空间 摄像机,显示效果基本和第一个一致,是指在Scene视图有区别,需要手动指定渲染摄像机Render Vamera

3.World Psace:世界空间 在VR项目开发中,所有的Canvas都要设置成World SPace。

了解UI系统的调用:引入UI命名空间:UsingUnityEngine.UI;

创建一个unity地形:

UNITY开发VR从入门到放弃---VR自学手册_第12张图片


1.如何安装terrain Tools


首先需要激活

UNITY开发VR从入门到放弃---VR自学手册_第13张图片

2.下载包里面的资源,

UNITY开发VR从入门到放弃---VR自学手册_第14张图片

UNITY开发VR从入门到放弃---VR自学手册_第15张图片


开始制作 选择笔刷 开始刷地形,按住shift 可以降低地形


1.绘制地形基本形状

UNITY开发VR从入门到放弃---VR自学手册_第16张图片


笔刷强度快捷键:A+鼠标左键

笔刷大小快捷键:S+鼠标左键

笔刷方向快捷键:D+鼠标左键

笔刷切换快捷键: , or 。 逗号或者句号

jitter:随机值

快捷键F: 鼠标在地形图内 聚焦到某点 在外 显示地形整个框架 按住F可以游览地形

UNITY开发VR从入门到放弃---VR自学手册_第17张图片

UNITY开发VR从入门到放弃---VR自学手册_第18张图片


2.填充颜色 纹理

UNITY开发VR从入门到放弃---VR自学手册_第19张图片

添加纹理

UNITY开发VR从入门到放弃---VR自学手册_第20张图片

法线值一般:1


导入自己的贴图:

1.复制一份 修改格式为法线贴图

UNITY开发VR从入门到放弃---VR自学手册_第21张图片

2.添加一个layer层级 添加图片 法线

3.设置贴图的大小

4.学会合理的使用贴图纹理 来制作地形

UNITY开发VR从入门到放弃---VR自学手册_第22张图片


桥: 连接两个点 作桥梁 或者山路的小路 台阶 等


克隆:复制相同的地形出来


噪声:让地形显得自然 快捷键:1


梯田:

UNITY开发VR从入门到放弃---VR自学手册_第23张图片


 

UNITY开发VR从入门到放弃---VR自学手册_第24张图片

:带有顶点的 可以让其更加尖锐

UNITY开发VR从入门到放弃---VR自学手册_第25张图片

:锐化山峰 让其平滑

UNITY开发VR从入门到放弃---VR自学手册_第26张图片

:让整个区域都平坦化 某一个区域平坦化

UNITY开发VR从入门到放弃---VR自学手册_第27张图片

UNITY开发VR从入门到放弃---VR自学手册_第28张图片

:水力 水压 效果 模拟流经过

UNITY开发VR从入门到放弃---VR自学手册_第29张图片

:热蚀 平滑的效果

:风 侵蚀的效果

UNITY开发VR从入门到放弃---VR自学手册_第30张图片

做笔刷凹陷 凸出

UNITY开发VR从入门到放弃---VR自学手册_第31张图片

定义的模型 当做笔刷来用

UNITY开发VR从入门到放弃---VR自学手册_第32张图片

:捏 把范围内的 捏到一个点 向内聚拢

UNITY开发VR从入门到放弃---VR自学手册_第33张图片

:让区域平坦化一点

UNITY开发VR从入门到放弃---VR自学手册_第34张图片

:拧出一个螺旋形状来

UNITY开发VR从入门到放弃---VR自学手册_第35张图片

:让地形平滑 建桥可以用这个让其平滑 调节一些觉得违和的地方

UNITY开发VR从入门到放弃---VR自学手册_第36张图片

:做一个洞 打洞工具 ctrl+鼠标左键 可以恢复 出现锯齿状的形状 用岩石 花草遮挡

UNITY开发VR从入门到放弃---VR自学手册_第37张图片

:资源商店下载树木

UNITY开发VR从入门到放弃---VR自学手册_第38张图片

在场景中添加树木模型 预制体

如果在场景中看不到树木了 在设置面板 里面的detaildistance 设置为大一点

tree distance

UNITY开发VR从入门到放弃---VR自学手册_第39张图片

:风

Mode:全局和球形两个格式

radius: 半径

Main:风的大小

UNITY开发VR从入门到放弃---VR自学手册_第40张图片

粒子系统;

UNITY开发VR从入门到放弃---VR自学手册_第41张图片

UNITY开发VR从入门到放弃---VR自学手册_第42张图片

UNITY开发VR从入门到放弃---VR自学手册_第43张图片

:可以导入导出 hightmap

UNITY开发VR从入门到放弃---VR自学手册_第44张图片

:可以设置热高度图

UNITY开发VR从入门到放弃---VR自学手册_第45张图片

UNITY开发VR从入门到放弃---VR自学手册_第46张图片

开放式地图 没有违和感加地图

UNITY开发VR从入门到放弃---VR自学手册_第47张图片

:自定义快捷键设置

浅谈VR开发

项目策划:

每个行业都有每个行业的工作流程,一个高效的工作流程能够有助于项目的顺利推进,虚拟现实项目也有特定的工作流程,我们以虚拟现实VR制作流程为例介绍,当然,每个项目都有自己的特殊存在,大家可根据实际的项目需求进行某个环节的调整。

UNITY开发VR从入门到放弃---VR自学手册_第48张图片

通过调研、分析各个模块的功能。在具体开发过程中虚拟场景中的模型和纹理贴图都是来源于真实场景,事先通过摄像机采集材质纹理贴图和真实场景的平面模型,通过Photo-shop和Maya(或者3ds Max)来处理纹理和构建真实场景的三维模型,然后导入Unity 3D构建虚拟平台,在Unity 3D平台通过音效,图形界面,插件,灯光设置渲染,编写交互代码,最后发布设置。

虚拟现实项目制作时间节点表

一般情况下,虚拟现实样板间项目制作周期为15-30天

UNITY开发VR从入门到放弃---VR自学手册_第49张图片

模型制作规范

当一个VR模型制作完成时,它所包含的基本内容包括场景尺寸、单位,模型归类塌陷、命名、节点编辑,纹理、坐标、纹理尺寸、纹理格式、材质球等必须是符合制作规范的。一个归类清晰、面数节省、制作规范的模型文件对于程序控制管理是十分必要的。

模型进入引擎前的制作流程简单概括如下:素材采集一模型制作一重拓扑一高模烘焙法线贴图一低模展UV一绘制贴图纹理一场景调整导出。

具体的模型(这里的建模以3ds Max为例)制作规范要求如下:

1.在建模型前先设置好单位,在同一场景中会用到的模型的单位设置必须一样,模型与模型之间的比例要正确,和程序的导入单位一致,即便到程序需要缩放也可以统一调整缩放比例。统一单位为米。

2.所有模型初始位置创建在原点,没有特定要求下,必须以物体对象中心为轴心。若有CAD作参照,制作人员必须以CAD底图的文件确定模型位置,并且不得对这个标准文件进行任何修改。导入3ds Max中的CAD底图最好在(0.0.0)位置,以便制作人员的初始模型在零点附近。

3.面数控制。对于手机移动端设备每个模型控制在300-1 500个多边形将会达到比较好的效果。而对于PC平台,理论范围1 500-4 000,如果游戏中任意时刻内屏幕上出现了大量的角色,那么就应该降低每个角色的面数。正常单个物体控制在1000个面以下,整个屏幕应控制在7 500个面以下。所有物体不超过20 000个三角面,否则导出时会出错。

4.整理模型文件,仔细检查模型文件,尽量做到最大优化,看不到的地方不需要的面要删除,合并断开的顶点,移除孤立的顶点,主要是为了提高贴图的利用率,降低整个场景的面数,以提高交互场景的运行速度,同时注意模型的命名规范。模型给绑定之前必须做一次重置变换。

5.保持模型面与面之间的距离推荐最小间距为当前场景最大尺度的1/2000,例如,在制作室内场景时,物体的面与面之间距离不要小于2mm;在制作场景长(或宽)为1km的室外场景时,物体的面与面之间距离不要小于20cm。如果物体的面与面之间贴得太近,会出现两个面交替出现的闪烁现象。模型与模型之间不允许出现共面、漏面和反面,看不见的面要删掉。在建模初期一定要注意检查共面、漏面和反面的情况;

6.可以复制的物体尽量复制。如果一个1000个面的物体,烘焙好之后复制出去100个,那么它所消耗的资源,基本上和一个物体所消耗的资源一样多。

7.建模时最好采用Editable Poly面片建模,这种建模方式在最后烘焙时不会出现三角面现象,如果采用Editable Mesh在最终烘焙时可能会出现三角面的情况。

8.塌陷模型。当一栋建筑模型经过建模、贴纹理之后,然后就是将模型塌陷,这一步工作也是为了下一步烘焙做准备。所以在塌陷时要注意以下一些问题:

(1)按照“一建筑一物体”的原则塌陷,体量特别大或连体建筑可分塌为2-3个物体,但导出前要按建筑再塌成一个物体,城中村要按照院落塌陷;

(2)用Box反塌物体,转成Poly模式,这时需检查贴图有无错乱;

(3)塌陷物体,按楼或者地块来塌陷,不要跨区域塌陷

(4)按项目对名称的要求进行严格的标准的命名;

(5)所有物体的质心要归于中心,检查物体位置无误后锁定物体。

9.模型不能使用中文命名,必须使用英文命名,不然在英文系统里会出问题。地块建筑模型不允许出现重名,必须按规范命名。

10.通过镜像复制创建的模型,需要修改器修正。

第一步:需要选中镜像后的物体,然后进入Utilities面板中单击Reset XForm.再单击Reset Selected

第二步:进入Modfiy面板选取Normal令,反转一下法线即可。

11.处理烘焙物体黑缝。烘焙时,如果图片不够大的时候,往往会边缘产生黑缝。

如果做比较复杂的鸟瞰楼体,可以把楼体合并成一个物体变成多重材质,然后对楼体进行整体完全烘焙,这样可节省很多资源。对于建筑及地形,须检查模型的贴图材料平铺的比例,对于较远的地表(或者草地),可以考虑用一张有真实感的图来平铺,平铺次数少一些。对于远端的地面材料,如果平铺次数大了,真实感比较差。

*模型导出时将烘焙材质改为标准材质球,通道为1,自发光100%;所有物体名、材质球名、贴图名保持一致;合并顶点,清除场景,删除没有用的一切物件;清材质球,删除多余的材质球(不重要的贴图要缩小);按要求导出bx(检查看是否要打组导出),导出bx后,再重新导入3ds Max中查看一遍tx的动画是否正确;根据验收表格对照文件是否正确,

材质贴图规范

1.Unity 3D引擎对模型的材质有一些特殊要求,3ds Max中不是所有材质都被Unity 3D软件所支持,只有Standard(标准材质)和Muti/Sub-Object(多维/子物体材质)被Unity3D软件所支持。注意:Multi/Sub-Objiect(多维/子物体材质)里面的子材质也必须为Standard(标准材质)才能被支持。

2.Unity 3D目前只支持Bitmap贴图类型,其他所有贴图类型均不支持。只支持Diffusecolor(漫反射)和Self-llumination(自发光,用来导出Lightmap)贴图通道。Self-lllumination(不透明)贴图通道在烘焙Lightmap后,需要将此贴图通道Channel设置为烘焙后的新Channel,同时将生成的Lightmap指向Self-lllumination

3,建筑的原始贴图不带通道的为JPG,带通道的为32位TGA,但最大别超过2 048:贴图文件尺寸必须是2的N次方(8,16,32.64,128,256,512),最大贴图尺寸不能超过(1024 x1024)。在烘培时将纹理贴图存为TGA格式。

验收表格

UNITY开发VR从入门到放弃---VR自学手册_第50张图片

UNITY开发VR从入门到放弃---VR自学手册_第51张图片

文件导出以及备份标准

最终的所有项目文件导出命名格式:“项目名/Model/存放OBJ ,FBX 模型等;其他类似;


第三部分:场景资源准备

创建unity之外的游戏资源

在此阶段,需要根据需求收集相关的资源素材。模型、音频、视频、材质、图片等资源都是组成VR应用程序的基本元素,通过导入到Unity编辑器中进行整合,继而进行VR交互开发。这些资源可使用专业工具进行制作,下表列出了Unity相关资源及其制作工具。

UNITY开发VR从入门到放弃---VR自学手册_第52张图片

unity支持导入多中外部资源:图片、3D模型、动画、音效、字体、视频等;

常见的3D美术资源的常见制作流程

3D建模==》重拓扑==》高模烘焙法线贴图==》低模展UV==》绘制贴图纹理

模型优化及重拓扑

通过3D扫描、照片建模、雕刻等方式获得的模型,通常存在大量多边形网格,面数众多且不规则(比如包含三角面),若直接放在VR环境中,将带来不必要的性能损耗,所以在一般情况下,使用低面数模型结合法线贴图的形式来呈现细节相对丰富的原始模型。其中低面数模型简称为低模,通过使用重拓扑技术从原始模型构建。重拓扑技术操作简单,在建模软件中使用简单、连续的多边形完全覆盖原始模型的表面,在各主流建模软件中均可完成此工作。

制作法线贴图

制作法线贴图需要使用贴图烘焙技术,根据低模和原始模型提供的数据获得,除建模软件自带的烘焙功能外,还有专门针对烘焙的软件工具,如xNormal。一般烘焙过程需要提供重拓扑得到的低模和原始模型(高模),通过计算得到法线贴图。另外,材质贴图制作工具Substance Painter/Designer以及Marmoset Toolbag等也具有高效的贴图烘焙功能。

展UV的过程

UV是2D纹理映射到3D模型的桥梁。我们可以将3D模型想象为一个纸壳,展UV的过程便是设置裁剪纸壳的方案,将其展平的过程。或者可以将2D贴图想象为纸张,展UV的过程便是设置裁剪贴图的方案,将其包裹到模型的过程。如果没有UV,无论是将纸壳展平还是将纸张裁开,都将有无数种裁剪方案,所以对于UV的设置,便是确定唯一的裁剪方案,供计算机进行纹理映射。

UNITY开发VR从入门到放弃---VR自学手册_第53张图片

任何3D建模工具均具备展UV功能,可直接在软件中完成该项工作。另外,可选择专业软件更加高效地完成该项工作,比如UVLayout,Unfold 3D等。

在展UV的过程中,除了正确拆分UV区域,还需要注意UV区域的权重分配,相对较大的UV区域,其细节越丰富。对于3D模型重点展示的区域,对应的UV区域可适当放大。

材质贴图制作

在VR环境下,模型的材质细节将会被放大观察,所以真实的材质是影响沉浸感的关键,尤1其结合行业开发的VR应用,如机械制造、房产家装等。

Unity内建支持基于PBR(Physically Based Renderring)理论的PBS(Physically Based Shading)

着色器,即Standard Shader,可以呈现真实的物理材质。在材质贴图制作阶段,需要结合PBR理论考虑对象在真实世界中的物理属性,比如光滑度、颜色、凹凸等指标,为Unity材质通道准备相对应的贴图数据,或直接在诸如Substance Designer这样的软件中制作基于PBR的材质并导入Unity中。

将资源导入Unity

从外部导入的资源被存放在Unity项目的Assets目录下,在Unity编辑器的Project面板中进行管理。

UNITY开发VR从入门到放弃---VR自学手册_第54张图片

资源的导入操作:可通过将文件直接导入/复制到Unity项目下的Assets文件夹中,也可通过拖动的方式将其放置到Unity编辑器的Project面板中。

对于不同的资源类型,在Unity编辑器中均对应不同的导入设置,在导入资源后,可在Project面板中选择资源文件,在属性面板中对该资源进行设置。

常见的建模软件:3Ds Max,Maya、Blender、Cinema4D、ZBrush等。(了解恐怖谷效应)

重拓扑工具:在创建3D模型后,我们要根据产品需要从而缩减面数,把高模转换成低模。需要用到拓扑相关的工具:3Dsmax内置工具、3D-coat、topogun、zRemesher等,更据设备的性能来决定是否需要拓扑。

展UV以及绘制贴图:通常使用Maya、3DSmax 展开模型UV,绘制贴图使用:SubstanceDesigner 和Painter;

导入模型一般使用格式:FBX通用格式。

UnityVR写实材质(PBR)

Unity默认使用Standard Shader对材质进行着色,另外还有Standard(Specular setup)Shader,均是基于物理的材质着色器(PBS)。这两种着色器分别对应PBR的两种不同的工作流程;

UNITY开发VR从入门到放弃---VR自学手册_第55张图片

下图分别是四种不同的渲染模式的材质表现

UNITY开发VR从入门到放弃---VR自学手册_第56张图片

基于物理的渲染理论

PBR全称为基于物理的渲染(Physically Based Rendering),是一套先进的材质渲染方案,能使物体对光线做出准确的反应。以下摘自Allegorithmic PBR Guide:“基于物理的渲染(PBR)是一种着色和渲染的方式,能更精准地体现光线和介质表面的交互方式,因此称作基于物理的渲染(PBR)或者基于物理的着色(PBS)。从正在讨论的工作流程角度而言,PBS通常针对着色概念,PBR针对渲染和光线的概念,但PBS和PBR都是从物理的精确角度呈现物体的过程。”Unity在5.x版本中引入PBR材质作为默认材质(Standard),PBR理论是制作VR写实级别材质的理论支撑,在制作PBR材质的过程中,都是在这个理论的指导下进行材质构建的。

为了能够在Unity中更好地呈现PBR材质,一般需要将色彩空间设置为线性,因为在线性空间渲染模式下,光线能够呈线性衰减,而不会像Gamma一样出现色彩的大幅度变亮或变暗。

在Unity编辑器中开启线性色彩空间,执行Edit-Project Settings-Player命令,打开Player Settings面板,在Other Settings栏中,设置Color Space属性为Linear

UNITY开发VR从入门到放弃---VR自学手册_第57张图片

PBR材质的优势

PBR理论是基于物体的物理属性,通过特定的物理维度,描述物体材质对于光的准确反应。使用PBR材质,可以通过一次制作,适应多种不同的光照环境。在使用了PBR工作流程进行材质制作以后,物体可以在四种完全不同的光照环境下呈现出它应有的物理表现。

一个高品质且具备细节的场景往往决定了一个内容的第一印象,而模型是组成场景的基本元素。一个高品质模型,尤其是面向行业的VR内容中的模型,需要更加真实的材质表现。

UNITY开发VR从入门到放弃---VR自学手册_第58张图片

PBR材质主要的贴图类型

颜色贴图(Albedo/Basecolor Map):颜色贴图用于提供物体表面的基础颜色,即在不受任何光照条件影响下物体本来的颜色,在Albedo贴图中需要确保没有阴影、高光、反射等形式。

UNITY开发VR从入门到放弃---VR自学手册_第59张图片

金属贴图(Metallic Map):金属贴图用于定义材质的哪些区域是金属的,哪些区域是非金属的,该贴图提供非0即1的数据,以灰度图形式提供给PBR材质。下面右图为材质的Metallic通道视图,左图为材质的综合表现,由图中可见,材质绝大多数区域为金属,只有在Logo区域使用了喷漆材质。

UNITY开发VR从入门到放弃---VR自学手册_第60张图片

光滑度贴图(Roughness Map):光滑度贴图用于描述材质表面粗糙程度。PBR理论引入了微表面理论。比较形象地理解为,任何物体在被放大观察时,表面均呈现不规则的凹凸感,这就决定了光线在物体表面反射的随机程度--微表面细节越单一,光线反射就越规则;微表面细节越丰富,光线反射越随机。

UNITY开发VR从入门到放弃---VR自学手册_第61张图片

光滑度贴图为灰度图,贴图中亮度越高的地方,表示该处数据值越高,表面越粗糙;相对亮度较低的地方,表示该处数据值越低,表面越光滑,物体表面的污渍由光滑度贴图塑造。

UNITY开发VR从入门到放弃---VR自学手册_第62张图片

光滑度贴图是塑造真实材质表现的关键,在现实世界中,几乎不存在表面粗糙程度一致的材质,金属表面的划痕、镜面的指纹、地面的污渍,都是粗糙程度不同所呈现出来的。作为导出到Unity中的光滑度贴图,一般附着在色彩或金属贴图中,以Alpha通道的形式提供信息,在标准材质中可选择该数据的来源。

UNITY开发VR从入门到放弃---VR自学手册_第63张图片

制作贴图相关软件:Substance Designer、Substance Painter、Quixel Suite、Marmoset Toolbag

导入资源及场景搭建

创建项目设置光照环境

在此工作流程中,需要对光照环境进行构建,包括单个灯光组件的渲染模式(Render Mode)

选择照明技术、布置反射探头(Reflection Probe)和灯光探头(Light Probe)等。在Unity 2018中,还需要预先选择渲染管线(Render Pipeline)

UNITY开发VR从入门到放弃---VR自学手册_第64张图片

这也是初学者常常容易忽视的一道工作流程,但是对应用程序品质至关重要。Unity提供了强大的全局光照(Global llumination,简称GI)技术,无论是实时全局照明还是烘焙光照贴图,均能满足VR环境对于光照环境的需求,再加上Post-Processing后处理栈工具,能够显著提高应用程序的画面品质。

导入开发工具包

Unity本地支持各大硬件平台,同时,目前各大主流VR硬件平台厂商均提供针对Unity的开发工具包,在这些工具包中,提供了更多可供使用的脚本、预制体、材质等,帮助开发者能够以最快的速度进行VR应用程序的开发,如下表所示。

UNITY开发VR从入门到放弃---VR自学手册_第65张图片

另外,空间音频的使用也是提高VR沉浸感的有效手段,Unity支持3D空间音频,同时支持多种空间音频开发插件,比如Oculus Audio SDK和Google Resonance Audio等。

音效创建工具:Adobe Audition、Adobe SoundBooth、sony sounforge、protools、studio one、sonar;网站有:爱给网

UNITY开发VR从入门到放弃---VR自学手册_第66张图片

场景搭建

在此阶段,开始布置应用程序所要呈现的各种表现形式,包括模型的摆放、材质的给予、关卡/地形的设计、灯光的布置等。用户在Unity编辑器的Scene面板中对游戏对象进行可视化的管理(如移动、旋转、缩放等),在Hierarchy面板中对游戏对象的从属关系进行设置,同时,属性面板(Inspector)列出了当前选定游戏对象上挂载的组件,用户可对这些组件的参数进行设置。场景中游戏对象的信息将被保存在场景文件里。

交互开发

VR平台与PC、移动平台的最大差别在于交互方式的不同。在PC平台,主要输入设备为键盘和鼠标;在移动平台,主要使用手指在触摸屏上进行交互:在VR平台,主要使用手柄控制器进行交互。VR平台的交互开发将是本书重点介绍的内容。

在Unity的VR交互开发过程中,不同的VR硬件平台会提供针对自有平台的插件给开发者使用,比如Valve的SteamVR插件,Oculus的Oculus Integration for Unity插件,Google的Google VR SDK for Unity插件等,开发者可以根据具体的硬件平台选择对应的Unity插件。

UNITY开发VR从入门到放弃---VR自学手册_第67张图片

测试优化

在此阶段主要对应用程序的性能进行分析,对帧率、内存等指标进行衡量,对占用资源较多的位置进行定位。Unity提供了多种分析工具,帮助开发者找到性能瓶颈。下图从左至右依次为Frame Debugger,Memory Profiler.Profiler

UNITY开发VR从入门到放弃---VR自学手册_第68张图片

发布应用程序

经过测试和优化的应用程序,最终可将其导出发布。在Unity编辑器中,执行File-Build Settings....,打开发布设置窗口,鉴于VR硬件基于不同的系统平台构建,在发布设置中需要选择对应的目标平台,如HTC VIVE应用程序发布在PC平台,Gear VR应用程序需要发布在Android平台,Google Cardboard应用程序可发布在Android平台也可发布在ios平台。

UNITY开发VR从入门到放弃---VR自学手册_第69张图片

unity官方文档

Unity的官方文档为开发者提供了详尽的使用说明,是开发过程中最有力的知识支撑。

第四部分:VR交互设计原则

VR是一种新兴的媒体形式,提供了基于屏幕的传统媒体无法提供的沉浸式体验。同时也意味着,在PC和移动平台上的交互设计经验在VR平台上多数将不再适用。鉴于当前硬件发展水平,VR中的交互设计应以体验舒适为前提,若忽视这一原则,容易使体验者感到不适,比如晕动症、眼疲劳等。同时,各平台之间最大的区别在于输入设备的不同,我们要结合VR平台的硬件特性,充分考虑到体验者在现实世界中的行为模式,以及与VR环境的互动方式,从而设计出更加符合用户使用习惯的交互;

设计必要的新手引导或者使用提示

虽然开发者对VR硬件设备已经了如指掌,但是对于目前的用户来说,VR仍然是一个新生事物,需要帮助用户上手熟悉设备的使用方式和应用程序的操作规则。

UNITY开发VR从入门到放弃---VR自学手册_第70张图片

避免界面深度引起的疲劳感:VR中的UI是有纵深属性的,在场景中,若体验者距离U1内容太近,比如0.5米,需要转动头部进行查看,容易引起疲劳感;如果距离太远,体验者会看不清呈现的内容,尤其是文字。Google认为在3米到5米之间是一个比较舒适的距离。在文本界面的呈现场景中,也要注意文字对体验者的影响;

使用恒定的速度:在VR中突然加速或者突然减速会给体验者一种不适的感觉,这是由人的生理结构所决定的:人眼获取视觉信息,反馈给前庭系统,当眼睛与前庭系统感受不一致时,体验者会感到不舒服。

保持用户在地面上:除非有特定的情景需求,否则需要让用户看到的场景符合其身高,否则容易让用户感到迷惑,从而影响沉浸感。在体验过程中,除非叙事要求爬升或坠落,否则尽量避免突然提升或降低体验者的位置高度,因为当人眼看到的运动与前庭系统不匹配时,容易引起晕动症的发生,当快速离开当前的平面时,会给用户带来不适感。为了能够实现用户高度的匹配,在进行设备校准时,建议以地面为高度原点,下图为使用Steam VR客户端校准地面。

保持头部跟踪:在交互设计中,尽量避免让用户下蹲或弯腰拾取物体,因为这样容易使用户身体遮挡用于追踪传感器的基站,从而使信号丢失,体现在头显中便是位置漂移或黑屏。

用光来引导用户的注意力:我们到一个陌生的环境里,如果出现光线的变化,注意力就容易被光线引导,就会本能地跟随光线。所以,在你的VR内容中,如果有叙事的需求,可以尝试使用这种手段。

场景比例把控:场景的缩放能够传达强大或脆弱的情绪,当场景变大以后,人容易产生一种渺小的感觉。类似电影《蚁人》,当主角变小时,玩具火车也成了其难以逾越的障碍,当他变大时,房间就像是玩具模型。

使用空间音频:VR中的音频不只是近处音量大,远处声音小,更主要的是在相同的音量下,你能知道声音在什么位置,即让体验者通过声音知道什么在他前面,什么在他身后。空间音频是容易被忽略的加强VR沉浸感的手段。

充分使用反馈:反馈包括触觉反馈、高亮反馈、空间音频反馈等。用户经常会从周围的虚拟环境中加载可视信息,可以考虑加载简短的音频或者视频摘要,以便为用户提供说明。如果你没有语音和视频资源,请考虑使用文本向用户介绍应用程序。不要仅依靠长音频来传达教学信息(如果用户无法访问它),还可以通过简短、热情的短音频提示来丰富现有的教学信息,与文字说明相似,简单很重要。对于触觉反馈,除单独配置特定外设(如触觉反馈手套等)外,多数VR硬件标配的手柄控制器具有振动功能,在体验者与虚拟环境交互的过程中,当用户触摸对象或与U控件交互时,可充分利用此特点加强沉浸式体验。比较优秀的范例是The Lab中关于射箭体验的设计,体验者在拉弓过程中,振动反馈会随着拉开距离的增加而加强。

VR中的UI

在非VR项目中,UI覆盖在用户设备的屏幕上,用于显示生命值、分数等信息。而在VR项目中,屏幕的概念便不存在了,并且基于VR交互的特性,UI应该像其他3D物体一样出现在体验者所能看到的位置,比如在控制器某个按键上引导用户使用,在道具上方展示对象信息,在用户移动到的位置点附近提供线索等。

UNITY开发VR从入门到放弃---VR自学手册_第71张图片

Eagle - 图片收集及管理必备工具(度娘可找到破解版)

在Unity中,Canvas游戏对象是UI元素(如Button,、Image等)的容器,挂载其上的Canvas组件提供了三种渲染模式。基于屏幕的渲染模式在VR中将不再适用,通常需要将渲染模式改为世界空间坐标,即World Space.

转换为空间坐标的U1元素可以像其他3D物体一样被放置在场景中的任意位置,并且可以作为它们的子物体随之移动。

UNITY开发VR从入门到放弃---VR自学手册_第72张图片

VR中的UI交互

Unity的UI系统主要由以下部分组成,它们互相配合,实现了从用户输入(例如点击、悬停等)到事件发送的过程。

Event System:事件系统。

Input Module:输入模块。

Raycaster:射线投射器。

Graphic Components:图形组件,如按钮、列表等。

在VR环境中与UI进行交互,不再像其他平台一样使用比如鼠标、键盘等设备,取而代之的是手柄控制器、激光指针、手势识别等。不同的VR硬件平台和SDK,与UI交互的实现机制不同,但它们都基于Unity UI的事件系统流程,或者继承前文介绍的组件,或者模拟相关的事件,例如在Oculus Uilities中,使用OVR Physics Raycaster类通过继承Unity的BaseRaycaster类来实现Physics Raycaster的角色。

UNITY开发VR从入门到放弃---VR自学手册_第73张图片

在unity中使用C#编程:

利用函数重载,提高耦合性;

类、对象、方法:C# 是一门面向对象的编程语言,类、对象、方法则是对象语言中的重要的概念,具有相同属性和功能的一组对象的集合就是一个类,比如认识一个类,貌似一个类,一个实体就是一个类。例如:男人(张三、李四、王五)

方法和函数的区别在于:方法通常是某个对象所持有的,换言之,函数是代码世界中独立的生命体,他不依赖与某个对象而存在。但是方法不同,任何一个方法都是某个对象的附属生命,同时,只有他的宿主对象才能调用这个方法;例如:RPG游戏中多种角色,如:刺客、法师、弓箭手等,以法师为例,他有一些基本属性:昵称、生命值、法术值,这些属性通常是用变量的形式保存的,同时还具有很多技能,而这些技能通常体现在特定的方法中。通常将这些变量和方法放在一起,我们就创建了一个法师的类,整个过程叫做“封装”。

在unity中,每个脚本文件都会对应一个对象,如果在游戏中想要初始化某个对象,需要将其添加到gameObject中,正如我们之前看到的,unity中的类似附加在游戏对象上的,每个组件都是一个对象,而对个杜建共同组建了一个gameObjcet。

调用类之前要先声明并实例化;

了解unity的事件函数:

Awake():初始化前调用 start():初始化方法 update():在游戏的没一帧调用 OnGUI():渲染并响应GUI控件

物理事件碰撞函数:OncollisonEnter() OncollisonStay() ONcollisionExit() 通过碰撞来判断;

触发器函数;OntriggerEnter() OntriggerStay() OntriggerExit()通过触发器判断;

以上内容为自学整理加上实践操作  如有侵权请联系删除  未完待续...........

 

你可能感兴趣的:(VR学习那些事,vr,虚拟现实,unity,学习)