《基于Unity与SteamVR构建虚拟世界》 |
版本 |
作者 |
参与者 |
完成日期 |
备注 |
SteamVR_Unity_V01_1.0 |
严立钻 |
|
2019.04.08 |
|
|
|
|
|
|
++++“基于Unity与SteamVR构建虚拟世界”:是对“Unity+SteamVR构建虚拟世界”的入门指导;“云计算+5G+VR+AI”,这是我们以后的主线,前段时间已经整理了几篇5G和云计算博文,还差AI系列,后期会隆重推出,今天先重磅回归VR主题,以SteamVR为突破口。(2019年度的重点技术突破点确立为:“SteamVR”,“AI人工智能”是下一个风口)
++++“基于Unity与SteamVR构建虚拟世界”:定位在熟悉SteamVR框架;
++++Unity+SteamVR=>VR:https://blog.csdn.net/VRunSoftYanlz/article/details/88809370
++++Unity减少VR晕眩症:https://blog.csdn.net/VRunSoftYanlz/article/details/89115518
##A.1、基于Unity与SteamVR构建虚拟世界 |
++++立钻哥哥:Building Virtual Reality with Unity and SteamVR(基于Unity与SteamVR构建虚拟世界);虚拟世界不受限制,开放接纳新思想,它已经在为我们所有人快速发展打开新的视角和旅程;虚拟现实仍是一项发展中的技术,涉及的知识领域越来越多,越来越复杂,对开发人员的能力也有一定的要求;
++++[Unity]:是一款广泛使用的游戏开发工具,是集场景创建、脚本编写、三维动画等多种互动内容于一体的专业游戏引擎,可以说是虚拟现实的软件基础;
++++[SteamVR}:是一套功能完整的360度房间型空间虚拟体验系统,包含头戴式显示器、手持控制器、定位系统等硬件设施,是虚拟现实的硬件基础;
++++A.1.1、虚拟世界简介
++++A.1.2、VR的缺点
++++A.1.3、VR面临的困难和挑战
++++A.1.4、虚拟现实设计和发展
++++A.1.5、立钻哥哥带您走进虚拟世界
++++Unity+SteamVR=>VR:https://blog.csdn.net/VRunSoftYanlz/article/details/88809370
++++Unity减少VR晕眩症:https://blog.csdn.net/VRunSoftYanlz/article/details/89115518
##B.3、Unity中减少VR晕眩症的实用技术 |
++++立钻哥哥:“VR晕眩症”也称为“模拟晕眩症”或“网络晕眩症”;它可能会引起一系列的症状,如出汗、恶心、晕眩、头痛、嗜睡,以及其他类似晕车患者在汽车、船只或飞机上感受到的症状;
++++B.3.1、了解虚拟现实晕眩症
++++B.3.2、减缓VR晕眩症的技术
++++B.3.3、立钻哥哥对“VR晕眩症”其他拓展
###B.3.1、了解虚拟现实晕眩症 |
++++立钻哥哥:VR晕眩症可能会严重阻碍人们广泛使用VR;那么每个VR内容创建者都有责任去尝试减少或找到解决VR晕眩症的方法;
++++房间规模的VR体验不会受到像座式或自动移动式体验遭受模拟晕眩症那样的困扰;
++++立钻哥哥:“VR晕眩症”也称为“模拟晕眩症”或“网络晕眩症”;
++++[征兆冲突理论(Kolansinski, 1995)]: VR晕眩症是由于观众的实际体验与大脑的认知体验不匹配造成的;“征兆冲突理论”是大脑认为输入(视觉、声音等)不真实或不正确;
++++大脑通常能够分辨与身体相关的东西是否正确,然后试图纠正它并进行“安全检查”,以确保身体处在健康的状态;监测系统会寻找信号或异常征兆,例如将运动和视线捆绑在一起以建立一系列的信息,来确认我们正在体验的东西是否正确;当征兆不匹配时,则认为大脑切换到通常当身体受到攻击时可能会触发的防御模式;当大脑试图通过体液(分泌汗或呕吐,视严重程度而定)来清除体内的毒素时,排异反应系统就会启动;
++++立钻哥哥:与个人身体因素相结合来看,有很多潜在的征兆,其影响程度因人而异;
++++[1、相对运动错觉]:一个涉及大量运动的摄像机系统很可能会引发VR晕眩症;这可能与相对运动错觉有关;相对运动错觉是对周围的运动产生错觉,现在已经被发现是造成“VR晕眩症”的主要原因;(在房间模式的VR中,人们所经历的晕动症普遍较少;在VR中移动而不是被四处移动,就会减少VR晕眩症的产生)
++++[2、视野]:更广阔的视野会产生更多的相对运动错觉;即使在视觉相对运动错觉增加的情况下,减少视野也有助于减少不良影响;中央视野缩小是一个缓解晕动症的不错方法;
++++[3、IPD瞳孔间距]:头戴式显示器配置不正确的“IPD(瞳孔间距)”可能会引起眼疲劳,造成不好的体验;
++++[4、不适]:虚拟现实可能会加剧某些不适;内耳可能会受到许多医学条件的影响,包括感冒、流感或耳部感染;耳朵的任何问题都可能直接影响大脑对平衡的理解以及相对运动错觉对使用者的影响;疲劳和其他不适也会对其产生影响;
++++[5、运动]:使用者在虚拟世界中移动的方式会产生不同的体验;更快的移动速度可能产生更多的运动感,导致更多的晕眩感;
++++[6、年龄]:关于“VR晕眩症”将年龄和性别作为一个影响因素,没有实际证据支持这种说法;
++++[7、帧速]:为开发舒适的VR体验需要在整个体验过程中维持恒定的帧速;因此需要更高规格的硬件;帧速在40帧/秒时出现停顿现象意味着帧数的下降,并且会触发VR晕眩症的症状;使VR运行在90帧/秒的速率更好;
++++[8、深度感知]:拥有最好VR视野的人可能是最容易产生晕动症的人;具有良好深度感知的人在虚拟世界中会产生更多的相对运动错觉,这可能增加对晕眩症的易感性;
++++[9、线性加速度或旋转加速度]:运动类型以不同的方式影响使用者,减少其影响的最基本方法就是相对缓慢的移动;要尽量避免高速旋转;(一个更加突然的开始和停止可能不会使视觉有最好的效果,但在VR中,这是为了减少用户晕眩的一个妥协)
++++[10、位置追踪误差]:当追踪硬件失效或头戴式显示器移出基站的范围时,它会给用户带来一种不舒服的体验;因为:此时视野会随意地偏离预定的位置;
###B.3.2、减缓VR晕眩症的技术 |
++++立钻哥哥:介绍一些实用方法以及Unity实现以帮助易患晕眩症的人们创建更舒适的VR体验;通过分享和实施解决方案来创造更舒适的体验;
++++B.3.2.A、用UI覆盖来缩小视野
++++B.3.2.B、适用于VR的第三人称视角
++++B.3.2.C、假鼻子以及它如何闻味道
++++B.3.2.D、VR新技术应用
++++B.3.2.E、立钻哥哥对VR晕眩症拓展
####B.3.2.A、用UI覆盖来缩小视野 |
++++立钻哥哥:“视野”,更广泛的视野会产生更多的相对运动错觉,即使在视觉相对运动错觉增加的情况下,减少视野也有助于减少不良影响;
++++动态缩小视野可以减少晕眩感:用Unity来改造现有的VR显示:当使用者在场景中移动时,视野将被覆盖而缩小;使用者在虚拟世界中移动的时间越长,实际可见的虚拟世界越来越小;当使用者停下时,视野恢复正常;通过这种方式缩小视野,使我们能够在虚拟世界中停留更长的时间,有更好的体验;
++++立钻哥哥:哥伦比亚大学计算机图形和用户界面实验室的研究人员发现:根据用户在虚拟世界中的移动程序,控制可见范围可以减少VR晕眩症的影响;
++++在摄像机前使用一个蒙版,提供类似于透过一张卡片上的洞观看的视图;当使用者四处走动时,蒙版会缩小以缩小观察孔;当用户停止移动时,孔将回到原始尺寸,恢复视场;
++++[蒙版]:蒙版的任务时再视场中心提供一个可见区域并遮挡其余部分;根据追踪对象的移动速度来缩放对象,这将缩小或增大中心孔的尺寸,也就是使用者的可见区域;
++++立钻哥哥:这个脚本“YanlzXRMaskScaler.cs”派生自MonoBehaviour,因此可以使用Start(){}和FixedUpdate(){}函数,Unity将自动调用;
using UnityEngine; using System.Collections;
public class YanlzXRMaskScaler : MonoBehaviour{ public Transform objectToTrack;
public float maskOpenScale = 4.0f; public float maskClosedScale = 1.0f;
public float minSpeedForMovement = 2.0f; public float maskSpeed = 0.1f;
private float moveSpeed; private Vector3 lastPosition; private float theScale;
private Transform myTransform; private Vector3 myScale; public float multiplier = 100f;
void Start(){ //立钻哥哥:保存一些原始信息 myTransform = transform; myScale = transform.localScale;
//立钻哥哥:设置一个默认的缩放 theScale = maskOpenScale; }
void FixedUpdate(){ //立钻哥哥:计算出我们跟踪的物体的移动速度 moveSpeed = ((objectToTrack.position - lastPosition).magnitude * multiplier); lastPosition = objectToTrack.position;
//立钻哥哥:在这里,我们检查对象是否在移动,如果在移动,则缩小可见区域 if(moveSpeed > minSpeedForMovement && theScale > maskClosedScale){ theScale -= maskSpeed * Time.deltaTime; }
//立钻哥哥:在这里,我们检查对象是否没有移动,如果没有移动,则增大视野 if(moveSpeed <= minSpeedForMovement && theScale < maskOpenScale){ theScale += maskSpeed * Time.deltaTime; }
//立钻哥哥: 最后,我们将转换的localScale属性设置为新计算的大小 myTransform.localScale = myScale * theScale;
} //立钻哥哥:void FixedUpdate(){} } //立钻哥哥:public class YanlzXRMaskScaler:MonoBehaviour{}
|
|
++知识点01:[myTransform = transform;] ++++立钻哥哥:在这个游戏对象上的Transform组件引用保存在myTransform变量中;
|
|
++知识点02:[moveSpeed] ++++立钻哥哥:FixedUpdate()函数中指出了正在追踪的对象的当前速度;它通过追踪对象的当前对象,减去对象的最终位置来获取速度;这就提供了上次更新的位置与此次更新的位置之间的向量,并使用.magnitude来得出两个向量的大小;
++++[*multiplier]:multiplier的变量,是为了避免“四舍五入”引起的错误,使用一个乘数(*100)将速度提高到更易于控制的值;
|
|
++知识点03:[lastPosition = objectToTrack.position;] ++++立钻哥哥:在lastPosition中存储位置,以便可以在下次调用FixedUpdate()时使用它来计算位置差异;
|
|
++知识点04:[theScale -= maskSpeed * Time.deltaTime;] ++++立钻哥哥:将moveSpeed与minSpeedForMovement进行比较,以查看是否在minSpeedForMovement中设置的阀值以上移动;然后将theScale与maskClosedScale进行比较,以便在扩展尺寸时禁止它变得过小;如果满足以上两个条件,theScele则通过maskSpeed*Time.deltaTime递减;通过调整maskSpeed的值来调整蒙版改变尺寸的速度;
++++theScale += maskSpeed * Time.deltaTime;
|
|
++知识点05:[myTransform.localScale = myScale * theScale;] ++++立钻哥哥:通过计算出的theScale,可以乘以myScale中的原始尺寸;并在Transform组件中设置.localScale缩放比例;
|
|
|
++++立钻哥哥:通过上面的分析知道如何采用“UI覆盖来缩小视野”了,那我们就将其应用到场景中吧;
++++[视野将根据移动进行动态变化]:当我们停止移动时,视野将无限制打开;
++++[工作原理及操作]:在一个Canvas显示蒙版图像,用于摄像机前面的VR渲染;将“YanlzXRMaskScaler.cs”脚本组件附加到图像,MaskScaler将追踪场景中玩家的移动;根据玩家的移动状态动态修改蒙版图像的尺寸;玩家移动过程中,蒙版会变得很小,停止时还原原始尺寸,使整个视图可见;
++++[FOV蒙版]:把蒙版透明度降低到明显级别来进一步完善;
####B.3.2.B、适用于VR的第三人称视角 |
++++立钻哥哥:“第三人称视角VR的摄像机系统”,基于速度的线性跟随摄像机,固定位于玩家角色的后面;
++++[正确移动摄像机的重要性]:角色停止在适当的位置上而摄像机却持续移动,可能会触发一些“VR晕眩症”症状;如果摄像机没有出现在于玩家相同的环境中并以相同的方式移动,似乎会导致两者之间的脱节,从而导致使用者产生不适感;
++++立钻哥哥:“VRCamera”,摄像机如何移动和前进;摄像机的位置从“目标(一个虚拟的四处移动的角色)”上偏移;
++++[CameraParent]:摄像机本身的父对象的空游戏对象(也就是:空物体下放个摄像机);
//立钻哥哥:摄像机的移动 using UnityEngine; using System.Collection;
public class YanlzXR_VRCamera : MonoBehaviour{
} //立钻哥哥:public class YanlzXR_VRCamera:MonoBehaviour{} |
++++Unity+SteamVR=>VR:https://blog.csdn.net/VRunSoftYanlz/article/details/88809370
++++Unity减少VR晕眩症:https://blog.csdn.net/VRunSoftYanlz/article/details/89115518
【XR游戏开发QQ群:784477094】
++立钻哥哥推荐的拓展学习链接(Link_Url):
立钻哥哥推荐的拓展学习链接(Link_Url) |
++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/
++++HTC_VIVE开发基础:https://blog.csdn.net/VRunSoftYanlz/article/details/81989970
++++Oculus杂谈:https://blog.csdn.net/VRunSoftYanlz/article/details/82469850
++++Oculus安装使用:https://blog.csdn.net/VRunSoftYanlz/article/details/82718982
++++Unity+SteamVR=>VR:https://blog.csdn.net/VRunSoftYanlz/article/details/88809370
++++Unity减少VR晕眩症:https://blog.csdn.net/VRunSoftYanlz/article/details/89115518
++++SteamVR简介:https://blog.csdn.net/VRunSoftYanlz/article/details/86484254
++++SteamVR脚本功能分析:https://blog.csdn.net/VRunSoftYanlz/article/details/86531480
++++SteamVR2.0开发指南:https://blog.csdn.net/VRunSoftYanlz/article/details/86618187
++++SteamVR2.2.0开发指南:https://blog.csdn.net/VRunSoftYanlz/article/details/88784527
++++SteamVR2.2.0快速入门:https://blog.csdn.net/VRunSoftYanlz/article/details/88833579
++++SteamVR/Extras:https://blog.csdn.net/VRunSoftYanlz/article/details/86584108
++++SteamVR/Input:https://blog.csdn.net/VRunSoftYanlz/article/details/86601950
++++OpenXR简介:https://blog.csdn.net/VRunSoftYanlz/article/details/85726365
++++VRTK杂谈:https://blog.csdn.net/VRunSoftYanlz/article/details/82562993
++++VRTK快速入门(杂谈):https://blog.csdn.net/VRunSoftYanlz/article/details/82955267
++++VRTK官方示例(目录):https://blog.csdn.net/VRunSoftYanlz/article/details/82955410
++++VRTK代码结构(目录):https://blog.csdn.net/VRunSoftYanlz/article/details/82780085
++++VRTK(SceneResources):https://blog.csdn.net/VRunSoftYanlz/article/details/82795400
++++VRTK_ControllerEvents:https://blog.csdn.net/VRunSoftYanlz/article/details/83099512
++++VRTK_InteractTouch:https://blog.csdn.net/VRunSoftYanlz/article/details/83120220
++++虚拟现实行业应用:https://blog.csdn.net/VRunSoftYanlz/article/details/88360157
++++Steam平台上的VR:https://blog.csdn.net/VRunSoftYanlz/article/details/88960085
++++Steam平台热销VR:https://blog.csdn.net/VRunSoftYanlz/article/details/89007741
++++VR实验:以太网帧的构成:https://blog.csdn.net/VRunSoftYanlz/article/details/82598140
++++实验四:存储器扩展实验:https://blog.csdn.net/VRunSoftYanlz/article/details/87834434
++++FrameVR示例V0913:https://blog.csdn.net/VRunSoftYanlz/article/details/82808498
++++FrameVR示例V1003:https://blog.csdn.net/VRunSoftYanlz/article/details/83066516
++++SwitchMachineV1022:https://blog.csdn.net/VRunSoftYanlz/article/details/83280886
++++PlaySceneManagerV1022:https://blog.csdn.net/VRunSoftYanlz/article/details/83280886
++++Unity5.x用户手册:https://blog.csdn.net/VRunSoftYanlz/article/details/81712741
++++Unity面试题ABC:https://blog.csdn.net/vrunsoftyanlz/article/details/78630687
++++Unity面试题D:https://blog.csdn.net/VRunSoftYanlz/article/details/78630838
++++Unity面试题E:https://blog.csdn.net/vrunsoftyanlz/article/details/78630913
++++Unity面试题F:https://blog.csdn.net/VRunSoftYanlz/article/details/78630945
++++Cocos2dx面试题:https://blog.csdn.net/VRunSoftYanlz/article/details/78630967
++++禅道[zentao]:https://blog.csdn.net/VRunSoftYanlz/article/details/83964057
++++Lua快速入门篇(Xlua拓展):https://blog.csdn.net/VRunSoftYanlz/article/details/81173818
++++Lua快速入门篇(XLua教程):https://blog.csdn.net/VRunSoftYanlz/article/details/81141502
++++Lua快速入门篇(基础概述):https://blog.csdn.net/VRunSoftYanlz/article/details/81041359
++++框架知识点:https://blog.csdn.net/VRunSoftYanlz/article/details/80862879
++++游戏框架(UI框架夯实篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80781140
++++游戏框架(初探篇):https://blog.csdn.net/VRunSoftYanlz/article/details/80630325
++++.Net框架设计:https://blog.csdn.net/VRunSoftYanlz/article/details/87401225
++++从零开始学架构:https://blog.csdn.net/VRunSoftYanlz/article/details/88095895
++++设计模式简单整理:https://blog.csdn.net/vrunsoftyanlz/article/details/79839641
++++专题:设计模式(精华篇):https://blog.csdn.net/VRunSoftYanlz/article/details/81322678
++++U3D小项目参考:https://blog.csdn.net/vrunsoftyanlz/article/details/80141811
++++Unity小游戏算法分析:https://blog.csdn.net/VRunSoftYanlz/article/details/87908365
++++Unity案例(Vehicle):https://blog.csdn.net/VRunSoftYanlz/article/details/82355876
++++UML类图:https://blog.csdn.net/vrunsoftyanlz/article/details/80289461
++++PowerDesigner简介:https://blog.csdn.net/VRunSoftYanlz/article/details/86500084
++++Unity知识点0001:https://blog.csdn.net/vrunsoftyanlz/article/details/80302012
++++Unity知识点0008:https://blog.csdn.net/VRunSoftYanlz/article/details/81153606
++++U3D_Shader编程(第一篇:快速入门篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372071
++++U3D_Shader编程(第二篇:基础夯实篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372628
++++Unity引擎基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78881685
++++Unity面向组件开发:https://blog.csdn.net/vrunsoftyanlz/article/details/78881752
++++Unity物理系统:https://blog.csdn.net/vrunsoftyanlz/article/details/78881879
++++Unity2D平台开发:https://blog.csdn.net/vrunsoftyanlz/article/details/78882034
++++UGUI基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78884693
++++UGUI进阶:https://blog.csdn.net/vrunsoftyanlz/article/details/78884882
++++UGUI综合:https://blog.csdn.net/vrunsoftyanlz/article/details/78885013
++++Unity动画系统基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78886068
++++Unity动画系统进阶:https://blog.csdn.net/vrunsoftyanlz/article/details/78886198
++++Navigation导航系统:https://blog.csdn.net/vrunsoftyanlz/article/details/78886281
++++Unity特效渲染:https://blog.csdn.net/vrunsoftyanlz/article/details/78886403
++++Unity数据存储:https://blog.csdn.net/vrunsoftyanlz/article/details/79251273
++++Unity中Sqlite数据库:https://blog.csdn.net/vrunsoftyanlz/article/details/79254162
++++WWW类和协程:https://blog.csdn.net/vrunsoftyanlz/article/details/79254559
++++Unity网络:https://blog.csdn.net/vrunsoftyanlz/article/details/79254902
++++Unity资源加密:https://blog.csdn.net/VRunSoftYanlz/article/details/87644514
++++PhotonServer简介:https://blog.csdn.net/VRunSoftYanlz/article/details/86652770
++++编写Photon游戏服务器:https://blog.csdn.net/VRunSoftYanlz/article/details/86682935
++++C#事件:https://blog.csdn.net/vrunsoftyanlz/article/details/78631267
++++C#委托:https://blog.csdn.net/vrunsoftyanlz/article/details/78631183
++++C#集合:https://blog.csdn.net/vrunsoftyanlz/article/details/78631175
++++C#泛型:https://blog.csdn.net/vrunsoftyanlz/article/details/78631141
++++C#接口:https://blog.csdn.net/vrunsoftyanlz/article/details/78631122
++++C#静态类:https://blog.csdn.net/vrunsoftyanlz/article/details/78630979
++++C#中System.String类:https://blog.csdn.net/vrunsoftyanlz/article/details/78630945
++++C#数据类型:https://blog.csdn.net/vrunsoftyanlz/article/details/78630913
++++Unity3D默认的快捷键:https://blog.csdn.net/vrunsoftyanlz/article/details/78630838
++++游戏相关缩写:https://blog.csdn.net/vrunsoftyanlz/article/details/78630687
++++UnityAPI.Rigidbody刚体:https://blog.csdn.net/VRunSoftYanlz/article/details/81784053
++++UnityAPI.Material材质:https://blog.csdn.net/VRunSoftYanlz/article/details/81814303
++++UnityAPI.Android安卓:https://blog.csdn.net/VRunSoftYanlz/article/details/81843193
++++UnityAPI.AndroidJNI安卓JNI:https://blog.csdn.net/VRunSoftYanlz/article/details/81879345
++++UnityAPI.Transform变换:https://blog.csdn.net/VRunSoftYanlz/article/details/81916293
++++UnityAPI.WheelCollider轮碰撞器:https://blog.csdn.net/VRunSoftYanlz/article/details/82356217
++++UnityAPI.Resources资源:https://blog.csdn.net/VRunSoftYanlz/article/details/83155518
++++JSON数据结构:https://blog.csdn.net/VRunSoftYanlz/article/details/82026644
++++CocosStudio快速入门:https://blog.csdn.net/VRunSoftYanlz/article/details/82356839
++++Unity企业内训(目录):https://blog.csdn.net/VRunSoftYanlz/article/details/82634668
++++Unity企业内训(第1讲):https://blog.csdn.net/VRunSoftYanlz/article/details/82634733
++++Unity企业内训(第2讲):https://blog.csdn.net/VRunSoftYanlz/article/details/82861180
++++Unity企业内训(第3讲):https://blog.csdn.net/VRunSoftYanlz/article/details/82927699
++++Unity企业内训(第4讲):https://blog.csdn.net/VRunSoftYanlz/article/details/83479776
++++Unity企业内训(第5讲):https://blog.csdn.net/VRunSoftYanlz/article/details/83963811
++++Unity企业内训(第6讲):https://blog.csdn.net/VRunSoftYanlz/article/details/84207696
++++钻哥带您了解产品原型:https://blog.csdn.net/VRunSoftYanlz/article/details/87303828
++++插件
++++计算机组成原理(教材篇):https://blog.csdn.net/VRunSoftYanlz/article/details/82719129
++++5G接入:云计算和雾计算:https://blog.csdn.net/VRunSoftYanlz/article/details/88372718
++++云计算通俗讲义:https://blog.csdn.net/VRunSoftYanlz/article/details/88652803
++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/
--_--VRunSoft:lovezuanzuan--_--ww4ww--_--