This page has been translated automatically.
编程
Fundamentals
Setting Up Development Environment
UnigineScript
High-Level Systems
C++
C#
UUSL (Unified UNIGINE Shader Language)
File Formats
Rebuilding the Engine and Tools
GUI
Double Precision Coordinates
应用程序接口
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
Rendering-Related Classes
注意! 这个版本的文档是过时的,因为它描述了一个较老的SDK版本!请切换到最新SDK版本的文档。
注意! 这个版本的文档描述了一个不再受支持的旧SDK版本!请升级到最新的SDK版本。

Unigine::Syncker

Syncker是一种多节点渲染系统,此系统使得在计算机群集上创建沉浸式CAVE系统或大规模的可视化墙更容易且这些电脑集群与实时的网络同步。

仅需将数台电脑连接到使用LAN的高分辨率无缝显示器上。同时操作电脑时所使用的操作系统无关紧要,因为Syncker可跨平台工作。此外创建的虚拟环境可使用任意监控配置,因为所有的视口完全可配置。

Syncker

通过Syncker连接并使用LAN的计算机

也可参看

结构

Syncker可以让您使用固定FPS(默认为60 FPS)对世界对象进行渲染并跨同步使用的计算机。这些计算机有两种类型:

主站 主应用程序时主计算机。引擎的实例总是对主视窗进行渲染并且不包括在位CAVE渲染设置的监视器配置中。相反,其目的主要是执行计算:
  • 节点根据应用程序逻辑而被移动。
  • 在创建世界对象时在编辑器内移动节点。

其它的应用程序与主站同步。
从站 从占应用程序时其它所有连接到网络的应用程序。可有无数与主站连接的从站(只要网络带宽允许)。这种应用程序的目的是渲染所有在视窗中可见的节点。
  • 在从站GPU上直接完成所有的渲染。
  • 动画在主站计算机上完成更新,而从占仅获取计算的骨骼转换。
  • 粒子系统在从站内进行更新但会依据从主站发送出的参数来进行。
  • 从站应用程序中的物理应被禁用以免覆盖从主站发送到网络上节点位置和朝向。

从站的配置应被设为适合固定的监视器。

Syncker管线

要将计算机连接在一起并实现同步,需使用下列管线。

  1. 首先,主站会发送广播信息,此信息使用UDP协议有效。
  2. 所有LAN内的从站都听命于默认的UDP接口。一旦接受到此条消息,从站会通过TCP协议同主站连接起来。
  3. 建立连接后,UDP和TCP协议被用来在主站和从站之间进行数据交换。
    • 在UDP协议中,会发送非关键信息,包括渲染参数的信息(例如环境颜色或HDR曝光),相机的位置及所有同步的节点。还包括与帧相关的信息(如果激活游戏,当前帧的数量,帧的持续时间,时标甚至用于随机数发生器的游戏种子)。
    • 在TCP协议内发送关键信息,这些信息事关节点的创建及删除。

屏幕配置

有3种方法执行可被Syncker使用的屏幕配置:

  • 作为监控网格,在此网格内每个从站对对应监控器上的视窗进行渲染。

    4台监视器的网格
  • 作为在第三方3D编辑器内创建的网格。 当在3D编辑器内准备网格时,必须满足下列要求:
    • 网格的每个面必须有对应的监视器。
    • 网格面的名称应与对应从站的名称相匹配。
    • 网格的坐标系统必须在meters内表述。
    • 每台监视器的位置及朝向必须是按照相对于相机的方式进行设置。
    • 网格的中心点必须与相机的位置相对应。
    注意
    基于相机位置及从站的名称会自动计算投影和视图矩阵。

    使用网格(左图)代表的屏幕配置(右图)
  • CAVE (自动虚拟环境)是一种在第三方3D编辑器内(参看上段)创建的网格 的一种特殊情况。 这种网格的轴心点是用于头部位置坐标的原点。

  • 作为 曲面屏幕上的投影

    每个从站将其视口投影到投影屏幕上

环境准备工作

推荐使用至少为1 Gb 的LAN。否则可能会出现网络延迟的情况(参看Troubleshooting部分)。

所有将使用到的应用程序应能访问所有Unigine文件及项目数据,因此您需要将项目拷到所有计算机上。如果在本地计算机的世界对象文件中出现节点丢失情况,这些节点将不会被渲染。

运行Syncker

要运行Syncker并在LAN上同步基于Unigine的应用程序,可使用下列某种方法:

运行方式 可运行内容 益处 注释
在应用程序启动时 任意Unigine 项目 快速 这种高级方法可运行盒子外的Syncker。可加载任意示例,演示或项目而不用实施初始化动作或使用下列脚本将用于Syncker的逻辑进行同步:
  • data/core/systems/syncker/syncker_master.cpp - 用于主站的Suncker脚本。
  • data/core/systems/syncker/syncker_slave.cpp - 用于从站的Suncker脚本。
应使用这些脚本而不使用默认的编辑器脚本。然而这种方法并不具有执行效率,因为它将所有围绕相机指定半径内的节点和材质状态进行同步。

注意
UnigineEditor (其Unigine本机 GUI)的函数在主站和从站应用程序中无效。
通过脚本 SDK或编码项目内的Syncker示例 执行效率 此低级方法允许指定需要将哪种节点和材质进行同步。然而这种情况下,必须在自定义脚本内使用针对Syncker的初始化和同步化逻辑。为避免网络延迟特别是在大的项目中出现这种问题,其为首选变形。

可在<Unigine SDK>/data/samples/syncker/文件夹内找到相关实例。

启动时

注意
UnigineEditor (其Unigine本机 GUI)的函数在主站和从站应用程序中无效。

要在启动时直接运行Syncker高级变形:

  1. 运行所有会与主站同步的从站应用程序。

    要达到这样的目的,在启动从站应用程序时指定下列选项覆盖默认的使用了用于从站Syncker脚本编辑器脚本:

    命令行
    main_x64 -data_path "../" -editor_script "core/systems/syncker/syncker_slave.cpp" -console_command "script_editor_load"
    要求script_editor_load控制台命令来加载用于从站的Syncker脚本。
    注意
    记得添加其他所需start-up参数。
    如果打开控制台,将看到一个从站应用程序监听两个端口,这两个端口用于来自主站的数据包(默认值可不进行更改):
    输出
    ---- Syncker::Slave ----
    Name: unknown
    UDP: 8890
    TCP: 8891
  2. 使用默认被Syncker脚本覆盖用于主站的编辑器脚本,在主计算机上运行主要的Unigine应用程序。

    要达到这样的目的,在主应用程序启动时指定下列选项:

    命令行
    main_x64 -data_path "../" -editor_script "core/systems/syncker/syncker_master.cpp" -console_command "world_load unigine_project && script_editor_load"
    要求script_editor_load 控制台命令来加载用于主站的Syncker脚本。
    注意
    记得添加其他所需start-up 参数。
    在控制台中,将显示当前主机网络的广播地址:
    输出
    ---- Syncker::Master ----
    Address: 192.168.0.255
    UDP: 8890
    TCP: 8891
  3. 要更改主站网络广播地址,输入下列控制台命令:
    注意
    不要混淆主应用程序运行的计算机上的IP地址 。
    源代码
    master_address xxx.xxx.xxx.xxx
    接下来按下列方式重新加载用于主站的Syncker脚本:
    源代码
    script_editor_reload
    然后在控制台中,会看到从站已连接上的信息:
    输出
    Connection from "xxx.xxx.xxx.xxx" "unknown" accepted in 0.00 seconds
    在已连接从站的控制台中,会看到下列内容:
    输出
    Connection to "xxx.xxx.xxx.xxx" accepted in 0.00 seconds

如果在Syncker主站脚本被添加之后(或者更改了从站名称或地址名称),还添加了任意从站需要您再次使用 script_editor_reload 命令加载主站脚本。

可打开新的世界对象或退出主应用程序中的当前世界对象,从站将自动执行相同操作。

注意
控制台命令world_reloadworld_load使用了与当前加载上的相同世界对象,并不会在主站之后在从站上得到运行。

更改屏幕配置

默认情况下所有的计算机会像主机一样显示相同的屏幕。主视口无法被修改,因为其仅被用来控制世界对象。
要在用于渲染的从站计算机上设置屏幕配置,需要您做的就是指定用于主站及所有从站的监视器的搭建(需要为所有通过Syncker连接上的计算机设置相同的配置)。然后可选择每台从站计算机显示的视口和对监视器角度的补偿。

注意
可在应用程序启动时指定所需的屏幕配置。
  1. 首先,通过下列控制台命令在主应用程序上设置监视器培配置。第一个参数指定一行中监视器的数量,第二个参数指定列的数量。(请勿在主计算机上进行计数因为此计算机的屏幕不可配置!)
    源代码
    master_grid 5 1
    例如,此命令指定一行中有5台从站监视器。
  2. 对从站作出相同的配置。有两种方法进行同样的配置。从主应用程序对其指定立即用于从站:
    源代码
    master_run slave_grid 5 1
    这样可运行对应的在所有从站上的控制台命令。
    可通过同样方法运行这样的控制台命令——打开每台从站计算机上的控制台并输入如下内容:
    源代码
    slave_grid 5 1
  3. 现在通过将下列命令输入控制台,需指定每台从站计算机在监视器上显示的内容。例如此为行中第一个从站:
    源代码
    slave_view 0 0
    此为中间位置的监视器(行中的第三台监视器):
    源代码
    slave_view 2 0
    此为行中的第五个位置处的从站:
    源代码
    slave_view 4 0
    如果有两行监视器(网格为5x2),右方底部的计算机将是slave_view配置,并被设置为 4 1
  4. 通过在主计算机输入下列控制台命令,可检查所有从站的视口配置:
    源代码
    master_view
    将输出所有从站监视器的配置。
  5. 也可指定某台从站监视器是否与其它监视器成一定的角度。要立即为所有从站设置角度,需在主计算机上输入下列控制台命令:
    源代码
    master_angle 20
    可通过从站应用程序控制台为每个应用程序单独设置角度:
    源代码
    slave_angle 20
    用度数指定角度。
    无法对监测器的水平转动和垂直方向上的转动进行补偿。引擎会根据监视器数量自动设置对水平行和垂直列的补偿角度。如果一行中有更多的监视器(例如一行中有5台监视器,2个列),接下来此角度将被运用于水平方向上的补偿。如果列中有更多的监视器(例如一行中有2台,有6列),此时角度将被运用于垂直方向上的补偿。
  6. 除了监测器的转动角度外,也可以对围绕屏幕的监视器框架进行补偿(为了对象不在屏幕上传输)。为了立即对所有从站计算机上的聚光圈进行补偿,输入下列控制台命令:
    源代码
    master_bezel 0.2 0
    这样指定所有计算的屏幕渲染出的效果在水平方向上比真实尺寸小(在同一行中的计算机之间存在框架)。指定值的变化范围为[0;1],在此范围内:
    • 0 代表无聚光圈补偿
    • 1 代表屏幕尺寸一半的聚光圈
    对于处于同一列中计算机聚光圈的补偿(即仅使用垂直方向上的聚光圈补偿),使用下列语句:
    源代码
    master_bezel 0 0.2
    可通过从站应用程序控制台为每个从站应用程序单独设置聚光圈:
    源代码
    slave_bezel 0 0.2

世界对象中的同步节点

如果通过接口或在 启动时运行高级版本的Syncker,您会发现默认情况下仅相机位置被同步。要将节点及节点材质在指定半径内同步,在主应用程序中运行下列命令:

源代码
master_radius 10
master_materials 15
  • master_radius命令指定所有从 *.world文件中加载的节点将被同步处理,如果处于相机10个单位的半径范围。其位置和朝向都将被同步处理。
    注意
    通过脚本动态创建的节点无法进行同步处理或者在编辑器中添加。
  • master_materials命令指定相机15个单位半径范围内材质的状态和参数与主计算机同步。
    注意
    在运行时不可能把编辑器内创建的材质同步化,此材质也并非从磁盘的材质库中加载而来。

上述所提到的方法已足够好,完全可用来实现Syncker的特点。但性能表现不友好,因为此方法将每帧上的所有节点及所有材质进行同步处理。如果将Syncker用于项目的发布版本,可通过script运行并根据需求选择性地同步节点及材质。

处理问题

虽然为1Gb或更高的带宽但如果网络延迟更严重,其可能是由于与网络连接的 100 Mb或 10 Mb设备 所造成。数据交换率会降低到这种设备所支持的最小值,并减低Syncker的连接速度。

  • 某些100 Mb 或 10 Mb 的设备在关闭时可有工作的网格接口。
  • 在关闭设备后时也能出现1 Gb 的设备拥有的网络接口以100 Mb的速率进行工作,这样会降低LAN内的连接。

有用工具

如果您有源SDK,可使用简单有用工具来监测网络信息交换速度。可在source/tools/Interpreter/scripts/network/内找到 server.usc 。 .

最新更新: 2017-07-03
Build: ()