Skyline Game Engine Store uses cookies to store certain information to make your site visit more enjoyable. By proceeding to use the store, you are agreeing to the use of cookies.

Skyline Release v1.0.2.0

Posted by SolarPortal 01/06/2018 3 Comment(s)

Hello Skyline Users,

Ok, ready for an update, well here goes:

Skyline has had quite an overhaul in places which has made things feel much smoother and has had some pretty cool additions too.
Such new and updated features include:

Eco System plugin :

The long awaited start to the vegetation system in skyline is here in the form of the ground coverage, which is great for grass, flowers, plants and any mesh that needs to be sprayed in a similar way.

There are some things to be aware of when using it:

  • This is considered a Beta feature as in the feature still has areas which need improved or added, but as shown below; it is very usable.
  • All custom meshes used must have only 1 submesh and less than 65535 indices. 
  • Currently only 10 layers can be used but this is planned in for advancement and unlocking of many more.
  • The plugin is only accessible from the Plugins menu > Skyline Editor Plugins > Skyline Eco System

Whats even more cool about this feature is that the panel for the ecosystem was created by skyline's plugin system and is all controlled from the lua scripts.To add to the icing though; we have also given you the source to that panel, so you can upgrade the eco system to do what you want or go make your own editors and use this as an example of how to make it happen.

If you want to read more on the development of the grass system so far, then please check out the forum thread:



Edit: Made a video tutorial / overview on how to use the grass system:



Skyline Plugin System Enhancement:

The custom editor plugin system now allows you to make your own dockable panels that sit inside the skyline editor which is great for small toolsets or simple features.

Of course you can still make full windows and apps from it too

Terrain GPU Shadowmapping:

As shown in a previous blog/news post, we showed you the GPU Based Terrain shadow mapping which allows an entire terrain all the way up to 4096 to render its lightmap softly all within 2ms of a single frame. Pretty fast!
Anyway, no point in repeating information, so check out the blog here:

Faster Per Frame GUI Rendering :

It was noted a few weeks ago, that the GUI rendering had a really bad performance if you updated elements every frame and and used such lua functions as gui.setText() etc...

This was because of a stall to the GPU when generating the new geometry for the GUI on that frame and only got exponentially slower the more thing were updated. The reason for the stall was due to the fact that when we needed to set the vertices to a buffer, we were actually grabbing empty data through the read only functions of the buffer instead of dicarding and filling it all again.We also made several new improvements that speed up the performance even further.

  • We have added a new GUi command called gui.setPlainText() which should be used in place of the gui.setText() command in cases where you are not passing any HTML tags through the string, for example, if you are updating a race timer or laps done, you probably will not be sending any html tags apart from text only. gui.setText() is a slower function since it destroys the element your calling and all its children which are then recreated. gui.setPlainText() only updates the Text element and does NO HTML code at all and of course is faster as it doesnt destroy the html element and children. Only the geometry is then updated to match the new letters and numbers from the font.
  • Rendering time has decreased from 6-7ms to 0.25ms of frame time on setText() being called 20 times with correct usage of the setPlainText function.
  • All lua gui commands cache the elements that are being set so the next time you call the function is doesnt have to look through the HTML document and every element to find the one you are wanting to eidt.
  • Frame rate on one level went from 48fps to 125+fps.


Well thats all from us this time and we hope you enjoy the update which is available as an auto-update( Pro or Studio Pro ) or full download

If you encounter any issues or major bugs that need fixing, then please post too the forum or in discord:

Do you want to know what else has changed, then check out the changelog below:


  • New: Terrain Editor: GPU Based Terrain Lightmapping which enables lightmaps for the terrain to be generated in realtime
  • New: Terrain: Terrain Lightmaps generated on the GPU are applied to the standard PBR Materials to give the scene the extra depth
  • New: Terrain: Lightmaps store a rudementary height data to the lightmap to allow models to pop out the top of the shadows and not shadow above the terrain, better realism
  • New: Vehicle Car File: New property "STEERING_WHEEL_GROUP" which takes a resource group path. however, space have to be put in with &# and then the path will be corrected on input.
  • New: Terrain Editor: Editing the height will store the height data and on release, the lightmap will be regenerated.
  • New: Roads: When deforming a road to the terrain surface, skyline will update the lightmap height data.
  • New: Terrain GPU lightmapping using compute shaders has been added into both DX11 and OpenGL
  • New: Plugin: Brand new Eco System plugin added. This has been set as a beta feature, but at the same time has opened the door to many other editors being made the same way by skyline developers or users.
  • New: Plugin: Eco System: The ground cover tab is now usable allowing up to 10 layers of grass(more to come) with full PBR rendering, lighting and shadows.
  • New: Plugin: Eco System: New brush system added to the eco system panel which hooks from the terrain but contains seperate data.
  • New: Game Lua library
    • New: game.overrideMouseTrap(1); -- Used in editor plugins to allow mouse wrap in the editor outside the runtime game.
  • New: DiskTools Lua library
    • New: diskTools.createDirectory("path/to/folder"); -- Used in editor plugins to allow mouse wrap in the editor outside the runtime game.
    • New: diskTools.removeDirectory("path/to/folder"); -- Used in editor plugins to allow mouse wrap in the editor outside the runtime game.
    • New: diskTools.emptyDirectory("path/to/folder"); -- Used in editor plugins to allow mouse wrap in the editor outside the runtime game.
  • New: Environment Lua library
    • New: env.setSkyboxMaterial("materialname");
  • New: Resource Lua library
    • New: folder, basename, ext = resource.splitFilename(filename)
  • New: GUI Lua library
    • New: gui.setPlainText() -- Sets text only... no HTML (Fast)
    • New: gui.getPlainText() -- Gets text only... no HTML (Fast)
    • New: gui.setText() -- Sets HTML Text ( SLOW )
    • New: gui.getText() -- Gets HTML Text ( SLOW )
  • New: EcoSystem Lua library
    • New: ecosystem.addGrassLayer()
    • New: ecosystem.removeGrassLayer()
    • New: ecosystem.removeAllGrassLayers()
    • New: ecosystem.regenerateGrassTiles()
    • New: ecosystem.reloadGrassGeometry()
    • New: ecosystem.setGrass_Name()
    • New: returnSuccess = ecosystem.setGrass_CustomMesh()
    • New: ecosystem.setGrass_MeshType()
    • New: ecosystem.setGrass_Material()
    • New: ecosystem.setGrass_Density()
    • New: ecosystem.setGrass_TileSize()
    • New: ecosystem.setGrass_FarDistance()
    • New: ecosystem.setGrass_WidthRange()
    • New: ecosystem.setGrass_HeightRange()
    • New: ecosystem.setGrass_CastShadows()
    • New: ecosystem.setGrass_Visible()
    • New: ecosystem.getGrass_Name()
    • New: ecosystem.getGrass_CustomMesh()
    • New: ecosystem.getGrass_MeshType()
    • New: ecosystem.getGrass_Material()
    • New: ecosystem.getGrass_Density()
    • New: ecosystem.getGrass_TileSize()
    • New: ecosystem.getGrass_FarDistance()
    • New: ecosystem.getGrass_WidthRange()
    • New: ecosystem.getGrass_HeightRange()
    • New: ecosystem.getGrass_CastShadows()
    • New: ecosystem.getGrass_Visible()
    • New: ecosystem.setBrushTexture()
    • New: ecosystem.getBrushTexture()
    • New: ecosystem.saveGrassMap()
    • New: ecosystem.loadGrassMap()
    • New: ecosystem.saveGrassMaps()
    • New: ecosystem.loadGrassMaps()
  • New: Qt Lua Library
    • New: returnVal = qt.msgError("title", "message1", "message2")
    • New: returnVal = qt.msgYesNo("title", "message1", "message2")
    • New: returnVal = qt.msgOkCancel("title", "message1", "message2")
    • New: returnVal = qt.msgOk("title", "message1", "message2")
    • New: qt.setWhatsThis(editor, object, whatsThisStr)
    • New: whatsThisStr = qt.getWhatsThis(editor, object)
    • New: qt.installSerializerHook(thisEditor) -- Used to force the plugin to save its files as the scene itself saves
    • New: qt.uninstallSerializerHook(thisEditor) -- Used to force the plugin to load its files as the scene itself saves
    • New: Lua Event for Qt system: onSceneSave(filename)
    • New: Lua Event for Qt system: onSceneLoad(filename)
    • New: setWindowTitle
    • New: qt.loadGeometry()
    • New: qt.saveGeometry()
  • New: Editor Plugins: Certain plugins can be stopped from being shown inside skyline, basically uninstalled. You can find this in the root of editor plugins folder and its called Plugins.cache
  • New: Editor Plugins: You can now create dockwidget plugins for the main editor, to do so you need an ini file named the same as the plugin in the plugin folder and then under general, add "type": "panel". See example plugins
  • New: Terrain Lua Library
    • New: terrain.setBrushVisible(state)
    • New: state = terrain.isBrushVisible()
    • New: terrain.setBrushTexture(name, group)
    • New: name, group = terrain.getBrushTexture();
    • New: terrain.setBrushColour(r,g,b, a(opt))
    • New: terrain.resetTerrainBrush() -- resets brush back to terrain
    • New: terrain.setBrushPosition(x,y,z, brushSize, brushModulus);
    • New: terrain.cancelEditingState();
    • New: terrain.restoreEditingState();
  • New: Terrain Editor: We can now change brush colours so the height editing is red and painting is blue. Green is for vegetation.
  • New: Lua entity.setConstantUpdate(1) - This enables the object to be set as Static which normally turns off Constant Update off.


  • Updated: Terrain Editor: Removed the refresh lightmap button as it is no longer required
  • Updated: Terrain Editor: Removed the refresh material button as it is no longer required.
  • Updated:: We are not using full precision float for position information in vertexs to remove some visual artefacts brought about by them. It does use double the memory for a mesh though as before we were using optimised half floating point precision. However, some models will look better.
  • Updated:: We are now using full precision for the UV coords instead of half precision which could have led to a few artefacts on models not looking correctly.
  • Updated: Qt Custom Editors: When using an event filter, it now passes an additional argument into the eventFilter(objectName, senderName, eventType) event function. This is the sender
  • Updated: Screenshots now save into the user library folder instead of the system library
  • Updated: GUI: If you do not need to set HTML text to an element, then use the new gui.setPlainText()
  • Updated: GUI: All Elements that are called through a GUI library command are cached for next time to keep up performance.
  • Updated: Graph - "Activate Item" can now respond to non GI action objects and spawned. This way you must set the entity description to your items.
  • Updated: Entity addScript can now pass an arg to the new script.


  • Fixed: (Major) Fixed a major fault in the engine relating to run and stop the game, where if any entities in the scene were changed at runtime, it would not restore them back to their editor settings correctly. This was making errors where saving and loading a scene would crash
  • Fixed: (Major) Fixed a major fault regarding having an entity with 2 actions like rigidbody that when the scene file was upgraded; the next load after would cause the engine to lockup on the scene load which needed a manual edit to the file to get it working again.
  • Fixed: Removing an action in the action editor while there is no action to remove would crash.
  • Fixed: GUI's that called setText() from lua often per frame were subject to extreme slowdown, basically to < 50 fps. Now with tweaks, the same scene and level runs are just under 130fps.
  • Fixed: GUI: Swapped the vertex buffers from being a read/write access which was halting the GPU to discard and upload all data which is what it was doing anyway.
  • Fixed: GUI: Cleaned up the element creation and render stage to speed up accessors as before we were grabbing material information and destroying and recreating the PSO's.
  • Fixed: (Major) If you have spawned entity at runtime that contains a script, skyline would crash on the second run as states were being lost on end the game.
  • Fixed: (Major) If you have dynamic properties and play the game, stop the game and then try to access the dynamic properties, it could crash.
  • Fixed: Graph - entity getBase module did not return values for spawned items.
  • Fixed: Scrpit External: Event postInit() was not being called. This would have been a problem if you shared a script with editor placed objects and spawned objects.
  • Fixed: PRB stops works on replay of game after dynamically setting the PRB to off.
  • Fixed: FPS PLayer - Now the editor side placement model is hidden to stop any weird artifacts when getting out of car

3 Comment(s)

Jayce Young:
02/06/2018, 08:37:23 PM

Added new video to the blog for how to use the new grass system

09/01/2022, 04:01:41 PM,


09/01/2022, 04:01:46 PM


09/01/2022, 04:50:06 PM,


09/01/2022, 04:50:15 PM


Leave a Comment