LinkVR 开发者手册

Stella981
• 阅读 686

详细版,以及LinkVR软件和unity插件

链接:https://pan.baidu.com/s/15xQ7ZGMkJftpJyj4AKeyCg
提取码:8k67

1 版本要求

Unity Pro 2017.3.0 及以上版本(目前暂支持 2017.3-2018.2 版本, 2018.3 及以上版本会尽快支持)

2 使用前须知

1. 打开 LinkVR Unity SDK -> MonoReplacer 文件夹

2. 运行 LinkVR 授权 mono 替换工具 .exe

图 2.1 Mono 替换工具

3. 替换当前 Unity 版本的 Mono 文件。

  1. 点击浏览,会出现浏览文件夹的提示框

  2. 选择 Unity.exe 所在的 Editor 文件夹

  3. 点击替换,直到完成替换

图 2.2 启动 Mono 替换工具 上海曼恒数字技术股份有限公司

图 2.3 选择 Unity 的 Editor 文件夹

图 2.4 点击替换

2 上海曼恒数字技术股份有限公司

3

4. 完成替换 Unity 的 Mono 后,在新建或打开当前版本 Unity 工程时,会提示需要授权码进行授权,

请联系客服索取或登录 https://www.gvrtalk.com/form\_linkvr.php 申请 60 天试用。

图 2.5 授权激活 上海曼恒数字技术股份有限公司

4

3 导入插件

1. 授权完成后,打开 Unity ,依次点击 Assets -> Import Package -> Custom Package... ,选择

LinkVRSystem_v2.2.0.unitypackage 文件,若您没有该插件,请联系客服索取。

图 3.1 导入 LinkVR 插件 上海曼恒数字技术股份有限公司

5

2. 弹出导入界面,勾选所有文件,点击“ Import ”按钮。

图 3.2 导入界面

3. 在项目资源文件夹中会出现 LinkVR 文件夹,其中 Examples 文件夹中的场景是 LinkVR 的案例场景,

Document 文件夹中的文档是 LinkVR 的 API 文档。

图 3.3 资源文件夹内容 上海曼恒数字技术股份有限公司

6

4 使用 LinkVR

注意:在工具栏中 Tools -> LinkVR 中可以进行项目设置, LinkVR 在插件导入时会自动进行一次项目设

置,若您有特殊需求,不希望项目设置被自动更改,请不勾选 Automatically Check And Set Project Settings ,

默是勾选状态。

 Automatically Check And Set Project Settings 表示自动检查并进行项目设置;

 Set Project Settings 表示手动设置一次项目设置。

图 4.1 修复项目设置

设置的内容如下(详情可查看 LinkVRSettings.cs 脚本):

  1. 将 PlayerSettings 中的显示分辨率对话框选项设置为 Disabled 。

  2. 将 PlayerSettings 中的捕获单屏设置为 false 。

  3. 将 PlayerSettings 中的 MTRendering (多线程渲染)设置为 false

  4. 将 PlayerSettings 中的 Windows 图形渲染 API 设置为 OpenGLCore 和 Direct3D 11 ,默认是将

OpenGLCore 放首位。

  1. 将 PlayerSettings 中的 VR 支持打开,并将设备设置为 Stereo Display (non head-mounted) 。

  2. 将 QualitySettings 中的抗锯齿属性设置为 Disabled 。

  3. 将 SyncUploadBufferSize 的值设置为 4 。

注:如果 Unity 工程在发布时选择的是采用 OpenGLCore 渲染,务必将 QualitySettings 中的抗

锯齿属性设置为不开启, LinkVR 的双目渲染方式与 Unity 的 MSAA 硬件抗锯齿不兼容,导致

应用程序在打开后黑屏。如果 Unity 工程在发布时选择的是采用 Direct3D 11 渲染,在颜色空

间设置项中务必选择 Gamma 选项, Linear 颜色空间会破坏立体渲染,这是 Direct3D 的一个

限制。另外,在 Windows7 系统中,采用 Direct3D 11 渲染的应用程序不支持主动立体,在

Windows10 系统中,两种渲染方式都支持主动立体。 LinkVR Unity SDK 默认采用并推荐的渲染

方式是 OpenGLCore ,因为它在系统方面的兼容性更好。如果项目需要,您可以不勾选

Automatically Check And Set Project Settings ,并手动设置为采用 Direct3D 11 渲染,但需要知

晓其在主动立体方面的限制。 上海曼恒数字技术股份有限公司

7

4.1 LinkVR 系统主入口

1. 在 Hierarchy 面板中选中 FPSController -> LinkVRSystemRoot 物体,可见 LinkVRSystem 脚本,该脚

本主要有四个公有字段。

图 4.2 LinkVRSystem

  1. isDeveloperMode (是否是开发者模式)

它的作用是可以模拟沉浸式追踪环境,便于开发者进行开发和调试。详情参考 5.1 开发者模

  1. designatedConfigPath (指定的配置文件)

它的作用是案例内容在启动后针对指定的配置文件进行相应结构的生成和追踪系统的绑定,

是整个 LinkVR 系统中最核心的部分。

选择指定的配置文件有两种方式:

 点击 designatedConfigPath 字段后边的“ Choose ”按钮,选择配置文件(建议将配置文

件放到 StreamingAssets 文件夹中,否则请在打包之后将配置文件手动拷贝到对应的文件

夹内)。

 在 LinkVR 客户端软件内生成并选择对应的配置文件后直接启动项目案例,配置文件路径

作为命令行参数传递给项目案例,项目案例读取配置文件路径,生成相应的结构并绑定

追踪系统。 上海曼恒数字技术股份有限公司

8

  1. cameraTemplete (相机模板)

它的作用是可以设置案例内容运行时动态生成的相机的模板,方便使用相机特效和其他所需

的组件或脚本。

具体做法为:

 根据需要更改 FPSController 物体下的 FirstPersonCharacter 物体上的相机组件的参数设置。

 根据需要在 FirstPersonCharacter 物体上挂载所需的组件或脚本。

这样,在案例内容运行后, LinkVR 系统将根据此相机模板动态复制并生成 LinkVR 系统的相机。

当然,您也可以不将相机模板指定为 FirstPersonCharacter 物体,可以新建一个相机物体,根

据需要进行相机参数的设置和组件或脚本的挂载,将相机拖到资源文件夹中作为 prefab 预制

体,然后将该预制体拖到 LinkVRSystem 脚本的 cameraTemplate 属性上。

  1. rootTransform (根节点)

它是采取第一人称视角时的人物 Body ,需要挂载 CharacterController 组件和

LinkVR.Characters.FirstPersionController 脚本,默认的第一人称就是它的父物体。

2. 在 Assets –> StreamingAssets -> config.xml 文件中,有四个 LinkVR 相关的配置参数。

  1. argsConfig (案例内容启动时传入的配置文件路径参数),切勿随意修改。

  2. defaultLinkVRConfig (默认的配置文件路径),当指定的配置文件路径不存在时,使用默认的

配置文件路径。

  1. showCursor (是否显示鼠标指针),可以直接在 config.xml 文件中修改属性值来决定案例内

容是否显示鼠标指针。

  1. isFlyMode (漫游是否是飞行模式),可以直接在 config.xml 文件中修改属性值或在代码中使

用 LinkVRMoveManager.Instance.IsFlyMode = value 修改属性值来决定漫游是否采用飞行模式。

漫游模式,有两种方式:

 刚体模式,运用的是 LinkVR.Characters.FirstPersionController 脚本来控制漫游。

 飞行模式,运用的是 LinkVRMoveManager.TranslateFlyMode() 来控制漫游。 上海曼恒数字技术股份有限公司

9

4.2 实现漫游

将 LinkVR -> FPSController.prefab 拖到场景中,若有其他的 VRPlayer 请移除。(场景中要有地面)即可

实现漫游。正如 Assets -> LinkVR -> Examples -> 001 - SimpleExample 案例所示。

4.3 实现 UI 交互

在 Link VR 内,提供了 UGUI 的事件监听器。其中提供了两种方式,一种是直接实现事件接口,另一种

是利用 EventTrigger 添加事件: AddTriggerListener() 。详见 Assets -> LinkVR -> Scripts -> Event ->

EventTriggerListener 脚本。如下图所示:

图 4.3 EventTriggerListener

1. 将 LinkVR -> FPSController.prefab 拖到场景中,若有其他的 VRPlayer 请移除。

2. 新建脚本,绑定 UI 以及事件,并将脚本拖拽至场景物体上(具体的 UI 交互案例请查看 LinkVR ->

Examples -> 002 - UIExample )如下所示:

public Button button1; 上海曼恒数字技术股份有限公司

public Toggle toggle;

public Slider slider;

public Dropdown dropdown;

public ScrollRect scrollRect;

EventTriggerListener.Get(button1).onHover += (eventData, onHover) =>

{

Log(onHover ? "Button 1 is hovered" : "");

};

EventTriggerListener.Get(button1).onPress += (eventData, onPress) =>

{

if (eventData.button != PointerEventData.InputButton.Left) return;

Log(onPress ? "Button 1 is pressed" : "");

};

EventTriggerListener.Get(button1).onClick += (eventData) =>

{

if (eventData.button != PointerEventData.InputButton.Left) return;

Log("Button 1 is clicked");

};

toggle.onValueChanged.AddListener((bool isOn) =>

{

Log("The toggle state is " + (isOn ? "on" : "off"));

});

slider.onValueChanged.AddListener((float value) =>

{

Log("The value of slider is " + (int)value);

});

dropdown.onValueChanged.AddListener((int value) =>

{

string optionLetter = "";

switch (value)

{

case 0:

optionLetter = "A";

break;

10 上海曼恒数字技术股份有限公司

case 1:

optionLetter = "B";

break;

case 2:

optionLetter = "C";

break;

case 3:

optionLetter = "D";

break;

}

Log("The dropdown option selected is Option " + optionLetter);

});

EventTriggerListener.Get(scrollRect).onBeginOrEndDrag += (eventData, onBeginOrEndDrag) =>

{

if (eventData.button != PointerEventData.InputButton.Left) return;

Log(onBeginOrEndDrag ? "ScrollView is on drag" : "");

};

EventTriggerListener.Get(scrollRect.verticalScrollbar).onBeginOrEndDrag += (eventData,

onBeginOrEndDrag) =>

{

if (eventData.button != PointerEventData.InputButton.Left) return;

Log(onBeginOrEndDrag ? "Scrollbar is on drag" : "");

};

11 上海曼恒数字技术股份有限公司

12

4.4 实现手柄按键绑定

G-Motion 手柄在使用代码获取手柄输入时,对应按键的序号如下:

图 4.4 手柄按键序号

1. 将 LinkVR -> FPSController.prefab 拖到场景中,若有其他的 VRPlayer 请移除。

2. 新建脚本,绑定手柄按键( Joystick 中的 Buttons 数组即对应了 G-motion 手柄的按键,以下示例

是以手柄 0 键为例),并将脚本拖拽至场景物体上,如下所示:

方式一:

// 获取手柄实体

JoystickTracker t = LinkVRInput.Joystick;

if (t != null)

{

// 手柄 0 键

t.Buttons[0].onButtonDown = () =>

{

Debug.Log("ButtonDown");

};

t.Buttons[0].onButtonUp = () =>

{ 上海曼恒数字技术股份有限公司

Debug.Log(“ButtonUp”);

};

t.Buttons[0].onClick = () =>

{

Debug.Log(“Clicked”);

};

}

方式二:

// 手柄 0 键

if (LinkVRInput.GetButtonDown(0))

{

Debug.Log("ButtonDown");

}

if (LinkVRInput.GetButtonUp(0))

{

Debug.Log("ButtonUp");

}

if (LinkVRInput.GetButton(0))

{

Debug.Log("Button");

}

方式三:

// 结合 UI

public Button button1;

EventTriggerListener.Get(button1).onClick += (eventData) =>

{

// 手柄 0 键

if (eventData.button != PointerEventData.InputButton.Left) return;

Log("Button 1 is clicked");

};

注:在 LinkVR 系统中,有默认注册的手柄事件并开启了手柄射线,请务必先查阅 JoystickBehaviour 类,

该脚本挂载在 LinkVR -> Resources -> Joystick.prefab 上,当 LinkVR 系统初始化时,会默认加载该手柄。其中

Joystick.RaycastDistance 为射线长度; Joystick.LayerMask 为需要相应的层级; Joystick.IsRaycastOn 为 true ,

否则不发射射线。

13 上海曼恒数字技术股份有限公司

14

5 功能介绍

5.1 开发者模式

isDeveloperMode 表示是否是开发者模式,它利用键盘和鼠标对应追踪手柄的按键,作用是可以模拟

沉浸式追踪环境,便于开发者进行开发和调试。

 启用开发者模式

会自动添加 DeveloperMode 脚本,开发者可以利用鼠标、键盘进行操作测试,具体的鼠标键盘按键与

手柄对应关系在运行后 GUI 上会有提示。

控制状态可分为控制人物和控制手柄两种。控制状态切换键为 LeftAlt 。

 Control State 为 Player 时,控制人物移动以及旋转。

 Control State 为 Hand 时,控制手柄移动以及旋转。

图 5.1 启用开发者模式 上海曼恒数字技术股份有限公司

15

图 5.2 开发者模式的提示信息

 不启用开发者模式

会自动去除 DeveloperMode 脚本。

图 5.3 不启用开发者模式

若开发者想在该模式下进行测试,则需要进行以下步骤:

  1. 确保连接追踪外设(连接 Venomx 手柄和对应的接收器) 上海曼恒数字技术股份有限公司

16

图 5.4 Venomx 手柄 图 5.5 Venomx 手柄按键接收器

  1. 将 Assets -> StreamingAssets-> single_screen.xml (默认指定的配置文件)中,将设备地址段的设备

名称更改为“ Venomx ”,保存

图 5.6 配置文件设备地址段原内容

图 5.7 配置文件设备地址段更改后内容

  1. 启动 Assets -> StreamingAssets->VRPN-> VenomxListener.exe ,该程序会自动监听 Venomx 手柄的按

键事件和摇杆轴事件。

图 5.8 Venomx 监听程序 上海曼恒数字技术股份有限公司

17

  1. 此时,在 Unity 编辑器内当内容运行后,就可以接收到手柄的按键事件了。不过只能有按键的事

件,位置追踪和旋转是没有数据的,测试过程中需要在 Scene 视窗中手动拖拽和旋转手柄位置,

所以不能在编辑器中测试手柄按住按键拖拽 UI 或物体的操作,只能利用现场环境的追踪系统了。

注:因版本问题,有可能会出现版本不一致造成此监听程序获取不到手柄的输入。遇到此类问题,请

确认 Venomx 手柄和接收器是否可以匹配版本为 1.0.1 的 Venomx 监听程序。 LinkVR 只提供 1.0.1 版本的

Venomx 监听程序。 上海曼恒数字技术股份有限公司

5.2 抗锯齿

由于 LinkVR 的双目渲染方式与 Unity 的 MSAA 硬件抗锯齿不兼容,导致应用程序在打开后黑屏,因此

要想支持抗锯齿,可添加抗锯齿的脚本。当前在 FPSController -> FirstPersonCharacter 相机模板上已经添加

了 AntiAliasing 脚本来处理抗锯齿,此时 Camera 上的 MSAA 不要勾选。若开发者想用其他的抗锯齿方式,

可选择 Post Processing 插件或其他的抗锯齿插件。

图 5.9 抗锯齿

18 上海曼恒数字技术股份有限公司

5.3 UI 交互

在 002 – UIExample 案例中,有基本的 UI 交互示例。该案例中,在物体上添加了 UIInteraction 脚本,

该脚本是一个 UI 示例脚本,主要有以下功能:

1. Hover :手柄射线是否悬浮在 UI 按钮上

2. Button :手柄是否按下、抬起、长按

3. Slider :手柄控制滑动

4. Toggle :手柄控制切换键

5. Scrollview :手柄控制卷轴视图上下滑动

6. Dropdown :手柄控制下拉菜单并选择菜单中的内容

7. DragAndDrop :手柄控制拖放操作

图 5.10 UI 交互脚本示例

图 5.11 UI 交互视图

19 上海曼恒数字技术股份有限公司

5.4 瞬移功能

在 003 - TeleportExample 案例中,运行后可以进行瞬移操作。该案例中,在 FPSController ->

LinkVRSystemRoot 上添加了 LinkVRTeleport 脚本,该脚本主要有以下四个字段和三个委托:

1. enableTeleport (是否启用瞬移)

开发者可根据需要,来判断是否启用瞬移功能。

2. enableCameraFade (是否启用相机淡入淡出特效)

开发者可根据需要,来判断是否启用相机淡入淡出特效。

3. teleportButton (瞬移按键)

开发者可自定义用哪个按键来控制瞬移(默认是手柄上键),按下该按键,会出现瞬移射线。

4. confirmButton (瞬移确认按键)

开发者可自定义是否需要瞬移确认键,当该属性为 None 时,抬起瞬移按键,则可直接瞬移至圆圈

点位置;其他情况下,需要按下指定的瞬移确认键,即可瞬移。

5. onArcShow (瞬移曲线出现时的回调)

开发者可根据需要,在瞬移曲线出现时添加想实现的事件。

6. onTeleportComplete (瞬移完成时的回调)

开发者可根据需要,在瞬移完成时添加想实现的事件。

7. onTeleportPointComplete (瞬移至瞬移点完成时的回调)

与瞬移完成时的回调互斥,开发者可根据需要,在瞬移至瞬移点完成时添加想实现的事件。

LinkVR 提供了瞬移点预制体: LinkVR->Prefabs->TeleportPoint ,可在场景中放置实现瞬移点功能。

20 上海曼恒数字技术股份有限公司

图 5.12 瞬移脚本

图 5.13 TeleportPoint

21 上海曼恒数字技术股份有限公司

图 5.14 瞬移视图

22 上海曼恒数字技术股份有限公司

23

6 核心类

以下内容仅简要介绍,若想了解更多关于 LinkVR 在 Unity 中的脚本编程接口,请查阅插件包中 LinkVR

的 API 文档。

6.1 生成 LinkVR 结构

核心方法为 LinkVR.LinkVRDeserializer.Deserialize(Transform root, string path, GameObject

cameraTemplate) , LinkVR 系统会自动调用此方法,在指定的 Transform 下生成相应的节点。

6.2 LinkVRGmotion 类的属性

 Instance : LinkVR 的 Root 节点单例

 IsDeveloperMode :是否是开发者模式

 DeviceName :追踪设备的名称

 DeviceIP :追踪设备的 IPv4 地址

 ScreenType :屏幕属性 (弧幕 / 直幕)

 Head :头部追踪节点,对应 G-motion 设备中的眼镜

 Hands :手部追踪节点列表

 Cameras :跟随头部追踪点的相机节点列表

 IsServer :是否是主端

 ServerIP :配置文件中的主端 IP 地址,在多台渲染机环境下,作为转发人物位置信息的主端

 ClientIP :配置文件中的从端 IP 地址列表,在多台渲染机环境下,作为接收人物位置信息的从端

 EyeSeparation :开启主动立体时,双眼之间的间距 (注: 1.4 及以下版本有效, 1.5 及以上版本废

弃, 1.5 及以上版本的眼间距在解析配置文件时已赋值给相机)

 HeadIndex :眼镜标记体的序号

 HandIndex :手柄标记体的序号

 IsSingleClient :是否采用 1 拖 N 模式 (注: 1.4 及以下版本有效, 1.5 及以上版本废弃)

 Joystick :第一个手柄节点的实例 上海曼恒数字技术股份有限公司

24

6.3 LinkVRMoveManager 类的属性

 Instance : LinkVR 的 LinkVRMoveManager 单例

 rootTransform : LinkVRSystemRoot 节点的父级 Transform ,父级主要用于第一人称视角

 FlySpeed :飞行模式下的飞行速度

 FlyRotateSpeed :飞行模式下的旋转速度

 IsFlyMode :是否是飞行模式

6.4 LinkVRCamera 类的属性

 Tracker :头部结点(父级节点),对应 LinkVRGmotion 中的 Head

 IPAddress :相机所属渲染机的 IPv4 地址,当客户端的网络地址与此相同时,此相机节点被激活,

而其他相机节点则保持关闭状态。

 RefScreen :相机成像的屏幕物体,相机位置、屏幕位置、屏幕大小共同决定了相机的投影矩阵,

使相机永远朝向此屏幕。

 Near :相机的近裁剪面

 Far :相机的远裁剪面

 StereoSeparation :相机眼间距

 ResolutinWidth :屏幕分辨率 - 宽

 ResolutionHeight :屏幕分辨率 - 高

 ScreenMappingRowIndex : 1 拖 N 模式下,对应屏幕的行号 (注: 1.4 及以下版本有效, 1.5 及以上

版本废弃)

 ScreenMappingColumnIndex : 1 拖 N 模式下,对应屏幕的列号 (注: 1.4 及以下版本有效, 1.5 及

以上版本废弃)

 ViewportRectWidth :相机视口起始水平位置

 ViewportRectHeight :相机视口起始垂直位置

 ViewportRectX :相机视口宽度

 ViewportRectY :相机视口高度 上海曼恒数字技术股份有限公司

25

6.5 JoystickTracker 类的属性和方法

属性:

 Address : VRPN 追踪点的网络地址

 Channel : VRPN 追踪点的传输通道

 OnRefresh :刷新委托,可以将自定义的关于手柄刷新时的操作绑定到该委托上

 Axises :手柄所有摇杆轴

 Buttons :手柄所有按键

 IsRaycastOn :是否启用射线,启用则会触发 [onEnter] 、 [onExit] 、 [onHover] 事件以及 UI 事件

 RaycastDistance :射线长度

 LayerMask :响应射线的层级

 Ray :手柄发射的射线

 Hit :手柄射线所获取的信息

 UIEventCamera :接收 UI 事件的相机

 onEnter :手柄射线进入物体时触发的委托

 onExit :手柄射线离开物体时触发

 onHover :手柄射线悬停在物体上时触发

 Refresh :在 FixedUpdate 中刷新手柄物理状态,包括位置、旋转、 UI 响应事件的相机的焦点、

射线触发

 RefreshInput :在 Update 中刷新手柄输入状态,包括按键的点击、摇杆轴的偏移值

方法:

 GetButton(int index) :获取指定按键是否被持续按下

 GetButtonDown(int index) :获取指定按键是否被按下

 GetButtonUp(int index) :获取指定按键是否被抬起 上海曼恒数字技术股份有限公司

26

6.6 JoystickTracker.Button 类的属性和方法

属性:

 ClickInterval :规定当前按键的点击事件中按键按下和抬起的时间间隔,超过该值则不触发点击事

 IsDown :当前按键的状态

方法:

 onButtonDown :当前按键被按下时触发的委托

 onButtonUp :当前按键被抬起时触发的委托

 onButtonPress :当前按键被持续按下时触发的委托

 onClick :当前按键被点击时触发委托

 SetState :设置当前按键的状态

6.7 JoystickTracker. Axis 类的属性和方法

属性:

 Threshold :当前轴被判定为改变的阈值,小于该值被判定为偏移值没有改变

 Value :当前轴的偏移值

方法:

 onAxisChanged :当前轴被偏移时触发的委托

 SetAxis :设置当前轴的偏移值

6.8 LinkVRInput 类获取手柄输入

 Joystick :手柄实体

 JoystickTransform :手柄实体的 Transform

 GetButton(int index) :获取指定按键是否被持续按下

 GetButtonDown(int index) :获取指定按键是否被按下

 GetButtonUp(int index) :获取指定按键是否被抬起

 GetAxise(int index) :获取摇杆指定轴向的偏移值

 GetAxis(AxisType axis) :获取摇杆指定轴向的偏移值 上海曼恒数字技术股份有限公司

7 案例发布

7.1 设置 PlayerSettings

图 7.1 设置 PlayerSettings

27 上海曼恒数字技术股份有限公司

7.2 设置 QualitySettings

目前,如果 Unity 工程在发布时选择的是采用 OpenGLCore 渲染,由于 LinkVR 的双目渲染方式与 Unity

的 MSAA 硬件抗锯齿不兼容,导致应用程序在打开后黑屏,因此需要把抗锯齿选项设置为 Disabled 。同时,

确保 Async Upload Buffer Size = 4 ,否则会影响立体显示。

图 7.2 设置抗锯齿

28 上海曼恒数字技术股份有限公司

29

7.3 注意事项

1. 在多台渲染机电脑的环境下,动画系统和粒子系统的同步,需要关闭动画系统或粒子系统中的随

机变量,并保证案例内容同时启动。

2. Unity 发布设置情况

  1. 如果 Unity 工程在发布时选择的是采用 OpenGLCore 渲染,务必将 QualitySettings 中的抗锯齿

属性设置为不开启, LinkVR 的双目渲染方式与 Unity 的 MSAA 硬件抗锯齿不兼容,导致应用

程序在打开后黑屏。

  1. 如果 Unity 工程在发布时选择的是采用 Direct3D 11 渲染,在颜色空间设置项中务必选择

Gamma 选项, Linear 颜色空间会破坏立体渲染,这是 Direct3D 的一个限制。

  1. 另外,在 Windows7 系统中,采用 Direct3D 11 渲染的应用程序不支持主动立体,在 Windows10

系统中,两种渲染方式都支持主动立体。

  1. LinkVR Unity SDK 默认采用并推荐的渲染方式是 OpenGLCore ,因为它在系统方面的兼容性更

好。如果项目需要,您可以不勾选 Automatically Check And Set Project Settings ,并手动设置

为采用 Direct3D 11 渲染,但需要知晓其在主动立体方面的限制。

3. Unity Shader 支持情况:

  1. 水的 Shader 有限制。

a) 启用主动立体后造成的影响( OpenGL 环境):

 启动案例后能进入场景,但屏幕闪烁,带有 Unity 的 Logo 一起闪烁。

b) 规避方法:检查项目中是否有用到水,给水换一个材质或 Shader 。

  1. 某些 Direct3D 渲染使用的 shader 在 OpenGLCore 渲染环境下不支持。

4. Unity 视频支持情况:

  1. 支持 MovieTextrue 。

  2. 支持 VideoPlayer ,但是视频不宜过大或过多,否则会导致占用 GPU 过大,立体刷新帧率降

低,造成画面抖动。

  1. 可以选择其他视频插件。
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Karen110 Karen110
2年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这