Common Image Generator Interface (CIGI) protocol is a standard way for a host device to communicate with an image generator (IG). It is widely used in the simulation industry.
UNIGINE's implementation of CIGI supports its common functionality (versions 3.0, 3.1, 3.2, and 3.3).
The CigiClient plugin enables to use CIGI protocol in the UNIGINE engine and offers the following features:
- Communication with a CIGI Host: all packets are received and sent automatically.
- Automatic creation, modification and deletion of entities; manipulation of views and view group.
- Interaction with the Syncker plugin allows to use multi-IG configurations
- Processing of any type of Host packets (control, definition, request) can be customized via callbacks.
- C++/UnigineScript API
This plugin allows to use a single IG or a multi-channel IG setup.
For a multiple-IG setup the Synker plugin should be used, in this case one IG is initialized as a master, and all other as slaves.
The capabilities of this plugin are showcased in the CIGI demo project, available in the UNIGINE SDK (2.6 and later).
To run the demo from the Unigine SDK Browser, click the CIGI demo button on the Demos tab.
- The Interface Control Document for CIGI Version 3.3 for more details on the CIGI protocol, structure, packet types, etc..
- The Running CigiClient for a custom project article for more details on CigiClient initialization and processing Host packets via code.
- The Syncker Plugin article for more details on the Syncker plugin.
The basic workflow is as follows:
- Implement CIGI logic for your application.
Prepare your environment.
It is recommended to use a 100 Mb LAN. Otherwise, you may experience network lags (see Troubleshooting section).When using a Multi-IG configuration, all applications you use must have access to all Unigine files and project data. So, you should copy your project to all computers. If some nodes are missing in the world file on a local computer, they will not be rendered.
Run your CIGI Client application.
For a Single-IG setup you should launch the CigiClient plugin via the extern_plugin command-line option at the start-up of your application, e.g.:
<your_app_name> -extern_plugin "CigiClient" -sync_master 0
<your_app_name> -extern_plugin "Syncker,CigiClient" -sync_master 0 -sync_slave_name <slave_name> -sync_mesh <mesh_name>.mesh -sync_view_0 <mesh_surface_0> -sync_view_1 <mesh_surface_1>The order of plugins in the list matters: Syncker must be specified before CigiClient.
If the network latency is too large despite 1Gb bandwidth or higher, it can be caused by a 100 Mb or 10 Mb device connected to a network. Data exchange rate will drop down to the maximum rate supported by such device, slowing down the connection speed.
- Some 100 Mb or 10 Mb devices can have a working network interface when they are turned off.
- It is also possible that when turned off, 1 Gb devices have a network interface working at 100 Mb rate, which will slow down connection in LAN.
If you have a source SDK, you can use a simple and useful tool to monitor the network messages exchange speed. It is server.usc found in source/tools/Interpreter/scripts/network/.