City Import, Randomizer, UnigineEditor in Russian and VR Gloves Support
Big Changes Are Coming
In the meantime, we are working hard on the next version of the engine. Here is a preview of some upcoming features:
- Refactored renderer targeted towards DX11+ level.
- Improved terrain: more than 4 layers per pixel, seamless interconnection between landscape patches.
- Unified mesh format: static geometry, bone-based animation, blend shapes.
- Improved AA.
- Rendering performance optimizations.
- Completely revamped UnigineEditor.
- Geometric waves, better shorelines and other water improvements.
- Streamlined content pipeline.
- Completely new SDK browser.
- Easy projects management: creation, upgrading, deployment, publishing.
- City traffic simulation system.
- Improved developers portal with support helpdesk.
- Add-on store for engine plugins and content assets.
A lot of these changes are already implemented in the development branch, but they require some time for stabilization. Major rendering improvements will be available in about 2 months, others to follow. Very exciting time!
Introducing City Import Plugin
City Import is a new handy tool designed for easy and highly optimized management of huge amounts of objects. It allows baking groups of nodes into clusters/decals/meshes in respect with special auxiliary geometry and automatically place them in the scene on their correct positions. The tool primarily serves for convenient and effective creation of large populated areas.
As an input data obtained from the DCC tool we have a huge set of objects geometry divided by a spatial grid (in order not to run into float precision limitations of mesh format). Each cell of the grid is represented by an ObjectMesh object with multiple surfaces of different types:
- Placeholders (simple one-polygon triangle surfaces) for objects that will be baked into clusters: houses, trees, cars etc.
- Flat surfaces for objects that will be baked into decals: roads, fields.
- Surfaces, forming a static geometry that will be baked into meshes: fences, power lines.
In order to specify objects to be generated we need to create aCity Layer, which contains information about certain parts of the city (roads, rivers, houses etc). In the City Layer we specify a surface from a City geometry that will be baked into a cluster, decal or mesh (for clusters we also specify the node to be placed, for decals and meshes we specify the material to be applied). There are also additional City Layer parameters that can be specified for performance optimizing (LODs, maximum visible and fade distances etc.). A City can contain any amount of City Layers.
When City and City Layers hierarchy is built, all you need is just to press the generation button, and as a result you will get the same nodes hierarchy in UnigineEditor.
To load City Import tool, open the Tools -> Plugins tab in UnigineEditor, press the Core button and choose theimport/city.cpp.
Introducing Randomizer Plugin
Randomizer is a new handy tool used to make environment look more natural. It can perform the following operations with nodes selected in the Nodes panel of UnigineEditor:
- Replace selected nodes with other nodes taken randomly from the specified set in accordance with the normal law of distribution.
- Rotate selected nodes randomly within the angle limit in accordance with the normal law of distribution.
To load the Randomizer plugin, open the Tools -> Plugins tab in UnigineEditor, press the Core button and choose thetools/randomizer.cpp. Randomization will be applied to all of the selected nodes.
For example, at the picture below you can see vehicles set at the parking lot by means of the Randomizer plugin. The probability of the truck occurrence was lower than the probability for car occurrence; the probability of white and brown cars occurence was bigger than for maroon ones etc.
UnigineEditor in Russian
For the first time in UNIGINE history, we fully translated UnigineEditor and all plugins, so now Russian developers can enjoy using it in the native language. To change the language, press the Esc button, go to the Interface tab, in the Language field choose Russian option and pressApply. After that, reload UnigineEditor by using the editor_reload console command or by pressing the U button.
- Added a text-align parameter to the WidgetLabel class. It sets left, right or center horizontal alignment for the text.
- Added an engine.gui.hasTranslation() function. It returns a value indicating if there is translation for a given string in localization dictionary.
- Added a WIDGET_DIALOG variable to the Widget class. It represents a dialog window.
- Improved Direct3D11/OpenGL uniform buffers management:
- Added the global uniform buffers array for all shaders.
- Reduced number of allocated uniform buffers.
- Added a new srgb flag to the materials parameters element. It automatically converts the current color space into sRGB.
- Added a getParameterColorSRGB() function to the Material class. It returns a value indicating if a given parameter uses automatic conversion to sRGB inside the render (an srgb flag, mentioned above, is set to the material).
- Fixed conversion into the sRGB color mode.
- Added as_short/as_int/as_long/as_half/as_float/ as_double system functions. They interpret the input data types as 16-bit int/int/long/half float/float/double types respectively on the bit level.
- Added a run_threads() system function. It runs all threads from the waiting list.
- Added a type-testing operator is . It serves to check the type of the given variable.
- Added an extension() string function. It returns the file extension without the name.
- Added a memory() string function. It converts the given number of bytes to KB, MB or GB and represents them as a string.
- Added getButtonPressCallback() and getButtonReleaseCallback() engine controls functions. They return the name of the callback function, which is invoked when a mouse button is pressed/released. (Setter functions for them are also added.)
- Added getKeyPressCallback()/ getKeyReleaseCallback() controls functions. They return the name of the callback function, which is invoked when a key (standard QWERTY one: non-localized, lower-case) is pressed/released. (Setter functions for them are also added.)
- Updated open() function of the Dir class. If you specify "/" as an argument, the list of available disk drives will be returned (C:/, D:/ etc.).
- Added a PROPERTY_PARAMETER_MASK variable to the Property class. It allows specifying a mask as a property type.
- Added a get/setParameterMask() function to the Property class. It returns/sets the value for the given mask parameter.
class for AppProjection plugin:
- Added the following functions: getBorders() , getColorBias() , getColorScale() , getHandles() , getPoints() , clear() , saveState() and restoreState() .
- Added a new linearity parameter. It defines non-linear stretching ratio values for each side of the specified projection (left, right, top or bottom).
- Added support for Essential Reality P5 Gaming Glove (Windows SDK versions only).
- Added a double click support into AppQt samples.
- An Unigine::Syncker::Master::syncEnd() function is required at the end of frame synchronization code on master side.
- Added a Node::getNode() function returning the node pointer.
- Added a Node::isNode() function checking if the node identifier is valid.
- Added support for game path and game level parameters specification in the configuration file.
- Added a new field type calledmask. It allows you to set properties of the mask type. When you want to modify this kind of field in Editor, double click the field.
- Updated Scheduler. Tasks that have the call frequency more than 20 times in a second now work correctly.
- Child entities of the node reference are now processed on the initialization.
- Added a new Samples section. All of the Unigine script samples, located in the data/samples directory are being documented.
- Added a new Built-in Objects section. It contains descriptions on all of the built-in objects.
- Updated articles on the following plugins:
- Updated the Unigine::Syncker article.
- Added the orthographic camera mode, which uses orthographic projection with adjustable width and height of the projection box. It can be found in the Tools panel -> Camera tab.
- Improved clutter placement algorithm.
- Child clusters now can have minimum and maximum visible distances of their parent nodes.
PS: Can't wait until we unveil all the new cool stuff!