| All posts |
  • Plane9 v2.3 released!

    published on 8/24/2015 7:03 PM

    So the time has finally come to release v2.3 of Plane9. A lot of effort has gone into this release because of the CgFX to GLSL conversion where all 260 scenes had to be manually updated. Mental note for next time is to not build software that relies on proprietary/closed source. Since when/if they stop supporting it you are on your own and will eventually have to convert the whole project to use something else. But I’m very happy that I finally managed to do this conversion since it’s been hanging over me for quite a while now.

    This conversion will however not be noticed since it’s an internal one. What however should be noticed in a major way is the addition of background loading of scenes. The problem before was that when a scene was loaded, and this could be a transition scene in addition to a layered scene for a total of 4 scenes at the same time, all the shaders in the scene had to be compiled. This process can be rather slow in OpenGL and a single shader can take 40ms to compile by the driver. Just compiling a single such shader would cause us to miss rendering a frame. This creates the potentially visible hickup or in other cases just a feeling that the visualiser isn’t as smooth as it should be. To work around this the loading and startup of the scenes are now done in the background. Threaded support in OpenGL isn’t the most robust but it has worked on all systems tested (Intel, AMD, Nvidia) with latest drivers. There is a switch to turn this off in the options window if it where to cause problems. To further reduce loading times so was a file texture cache added and also a system that only includes the needed functions into a shader.

    The other noticeable change is that since I had to go through all scenes I also took the time to update quite a few of them and add PBR (Physically based rendering) shading as well. This is the same techniques used by Unreal Engine, Unity, Frostbite, The Order 1886 and others.

    Some of the added/updated scenes updated for v2.3

    Lastly the oculus support has been updated to v0.6 to be compatible with the oculus SDK v0.7 release that should be out soon.

    Full change history


    • Preload scene on a background thread in screensaver and windowed mode to avoid hickups during scene changes. Can be turned off in options window if it causes issues.
    • Only inject shader functions we actually use. Cuts down shader compilation from 40ms to 15ms for a simple shader
    • Allow foreground scenes to use the PreviousLayer node for much better scene compositions for some scenes
    • New PBR shader including lightDirectional and lightPoint
    • Added fresnel functions, _perturbNormalTexture, _perturbNormal, _noisederiv, _rand(float)
    • Respect randomize setting during recorde mode
    • Mesh instancer will use point sprites if no mesh is connected
    • F2/Ctrl+A to toggle always on top in windowed mode
    • Prefix shader variables with "g" as in "gTime"
    • Added FormatVersion to scene files
    • Place log writer on it's own thread to avoid any hickups during log writing
    • rttscale command line option for a simple brute force form of antialiasing
    • Ignore extension when loading in textures
    • Add a 4th texture input into shader node
    • Load in normal and material textures along side diffuse texture
    • Cache any loaded file textures for future use


    • Updated to Qt 5.5.0
    • Updated to Oculus SDK 0.6
    • Updated a number of scene with PBR features
    • Changed all shaders in all scenes from CgFx to GLSL
    • Allow primary monitor to be on either side of secondary
    • Updated way to get program files folder to better handle non ascii folder names
    • Dont default to always on top in windowed mode
    • High resolution screenshots have the RB values mixed
    • If a scene fails to load then dont use a empty scene in it's place
    • Fixed normal on bevel node
    • Black screen on playlists that dont have any standalone scenes in them
    • Removed usage of depricated glTexEnvf for points. We should use gl_PointCoord
    • Fixed error in projection matrix and adjusted all scenes to match
    • FrameNr 0 should now always be the first frame rendered
    • Default Transition to scale is now at 100% instead of previous 50%. Looks better and most should have a machine that can handle it.


    • Lines node