top of page

GEO STUDIO PRO 4.0 RELEASE NOTES

  • Andy Bushnell
  • 2 days ago
  • 12 min read

⦁ The application and Geo Format VERSION have increased to 4000 (4.0)


⦁ The exciting announcement is that Geo is now a native 64-bit application! This means that gone are the days when Geo could run out of memory while loading a large poly or heavily-textured file. Geo 3.6., being a 32-bit application, was restricted to ~2GB's of program memory. With the switch to a 64-bit architecture, it can now address up to 128 GB's of program memory.


We have upgraded the FLTK library (the underlying GUI toolkit used by Geo) from 1.1.11 to 1.3.11. This brings added functionality that we can bring to the user-interface and increased stability. Improvements include... The native Windows file chooser is back! (there were bugs in Fltk version 1.1.11 that caused us to use a non-native file chooser). Previously application menus (such as File, Edit etc.) would only open on the primary display of a multi-monitor configuration - even if the Geo desktop was actually on a secondary monitor. This now works as expected.


Picking performance (both hover-highlighting and picking for selection) have been significantly improved. This was accomplished using an OpenGL framebuffer technique and pick shader over the previous GL_SELECTION approach. Previously, if you had Hover Primitive Highlighting and/or Hover Show Node Names preferences set (which are set by default) this would cause Geo to do a pick render traversal which often took as much time as scene render traversal. Obviously that could seriously impact performance. The new modern OpenGL approach is like night and day in comparison!


We fixed many bugs associated with Lua/GeoScript's handling of user script functions beings passed during SceneGraph traversals - for example (a) having a user function called on Geo Nodes during a Scene Graph traversal and (b) having a user function called while traversing the contents of the selection list. There is a new Lua folder within the Scripts Folder. This folder contains lua files that implement this kind of functionality.


⦁ A good example of this is geoTraverseMultiFunc.lua that provides the geoTraverseMultiFunc lua function. This is a specialized traversal that calls different user functions prior to the scene graph traversal descending to a node's child list and after all children at that level have been visited - just prior to the traverser ascending (or popping) back to the parent level. Due to these fixes - calling GeoScripts prior to and post file import/export operations is fully functional once again.


⦁ Added a few nice features to the material palette - you can now dynamically switch the palette display between 2x2, 3x3 or 4x4 materials (meaning 2, 3 or 4 materials side-by-side). Useful, if you like larger material thumbnails or like to view more materials when your working with a material-heavy file.


⦁ The user interface has been significantly refreshed for this release. GeoSTUDIO now comes with 2 User Interface theme options - Light and Dark Mode. Both modes employ a fresh modern flat style. The theme is set/changed in the Edit->Preferences dialog. You must restart the app for the change to take effect - but there's an option for Geo to close and restart the application for you (this typically only takes a few seconds).


Geo Studio's new dark mode user interface - showing a KC10 panel
Geo Studio's new dark mode user interface - showing a KC10 panel
The Material Palette and Material Editor in the new Dark Mode theme
The Material Palette and Material Editor in the new Dark Mode theme
The Tree View and Mesh Attribute panel in the new Dark Mode theme
The Tree View and Mesh Attribute panel in the new Dark Mode theme

⦁ The MakeTriangleList plugin now converts all selected RenderGroups individually (the plugin converts RenderGroup Polygon and Mesh type children into a single Mesh Node of type GEO_TRIANGLE_LIST). Previously if more than one RenderGroup was selected it would create a new single RenderGroup that contained one Mesh (or type GEO_TRIANGLE_LIST) - built from all polys and meshes of the selection. In the revised approach the hierachy, and parent grouping influence is retained (i.e. Switch, LOD, DCS nodes etc). In addition the plugin now has an execute function which allows its functionality to be used as a Post load Execute step. for example, in the first image below - when the OpenFlight Loader is called, the MakeTriList plugin will be called on all RenderGroups within the file. The second image shows all RenderGroups with newly converted Mesh node children.



⦁ The MakeTriList plugin also batches RenderGroup children by their texture usage. If the auto conversion on-build doesn't give desirable results - it is undoable. Alternatively remove the MakeTriList plugin from the Post-Execute list in the Edit->Preferences dialog, re-import and manually select the RenderGroups that you want to convert to triangle-list Meshes. This conversion is a useful step if your intension is to convert legacy files to GLTF format. NOTE: if the MakeTriList Plugin encounters a Polygon with a Geo Behavior attached, it is ignored and will not be batched into the triangle list. Lastly, using the MakeTriList plugin as a post-load execution step (or applying it manually post load) makes a huge difference to in-app performance. For example when a particular .geo model was loaded normally it rendered at 18 fps, but when this plugin was added post-load for native Geo files - it rendered at 200 fps.


There was a bug that rendered the 4 OpenGL views over the property panel if that was being shown as well as the tree view. This has ben fixed.


⦁ Added a new selection plugin - it finds all nodes which have per-node behaviors containing a particular user-selected action (i.e. either Discrete, Linear, Rotate, State Machine etc). Since the action could be on different selection type nodes, the plugin presents a dialog listing every node using that action - from which you can select (as seen in image below)



Added a new MaterialAction to the Behavior system. This Action can be used in Behaviors added to RenderGroup or Polygon-type nodes (as Materials can be defined at the RenderGroup or Polygon level). When Behavior Animation is active the input variable value is treated as an index into the material palette. If the index value is invalid (ie index < 0 or index >= NumPaletteMaterials) then the Node's actual material value is used. This means that if the Node has a material index of -1 then the behavior system will render the node as it appears when Behavior Animation is inactive. There is an option to use the material diffuse color if the indexed material is a Basic Material. NOTE: Extended or PBR Materials can be used but remember that if the material uses textures - then the Node using the MaterialAction must have the appropriate texture coordinates in order to render correctly.


⦁ We have improved the zoom and pan experience in 4.0. Previously, if you selected a very small section of a large database, for example: a few small polys (relative to the model size) or a collection of vertices, and either 'fitted' or 'isolated' the selection then zooming and panning could become slow and tedious. The easy work-around when that happens is to simply select a larger part of the model and re-"fit". Since this isn't ideal in many situations, we've now added a 'Turbo' mode to help this. Just hold down the SHIFT-Key while zooming or Panning to get a much more satisfying experience. Be aware that if you use the SHIFT-Key turbo-boost when the operation performance is perfectly fine - your model will likely fly-off and disappear. (If that happems, select something in the Tree view and "fit" on selection to reset the view.)


⦁ There is another addition to the Behavior System! We have added a TextureAction. This action can be used in behaviors attached to Polygon types. It works similiarly to the MaterialAction in that the Input Variable sets an index into the model's texture palette. In addition you can specify which texture unit to use. This behavior is suited to geometry found in formats which specify textures at the polygon level rather than being fully encapsulated in a PBR or similar material. Examples include: Wavefront (OBJ format), Designer's Workbench (DWB format) and older Creator (OpenFlight format) models.


The images show multi-texturing being driven dynamically with the Geo Behavior system. The override variables dialog allows you to inject data into the simulation variables driving the behaviors...


The Light Mode theme desktop showing behavior-driven multi-texturing. The variable Override window  lets you to set values for simulation variables, helping you test and debug behaviors.
The Light Mode theme desktop showing behavior-driven multi-texturing. The variable Override window lets you to set values for simulation variables, helping you test and debug behaviors.
The same content in the Dark Mode theme
The same content in the Dark Mode theme

⦁ Updated the Keyboard Shortcuts Dialog - with all the latest hot keys and mouse button binding combinations.


⦁ We have added a new Behavior ToolBar to the GUI. With this requested addition using Geo's Behavior System functionality no longer forces you to traverse the menu for every operation.


Updated the OpenFlight Exporter so that it now supports Geo STUDIO's Mesh Nodes of type GEO_MESH_TRIANGLES ( a packed array of triangles ). Mesh nodes are decomposed into triangles for OpenFlight export (without effecting the still in-memory Geo model. PrimSet nodes were already directly converted into OpenFlight "Mesh" nodes (its a direct conversion)


Updated the Aechelon HIE format Exporter so that it now supports Geo STUDIO's Mesh Nodes of type GEO_MESH_TRIANGLES. We also added support for the Geo STUDIO's PrimSet Node type. These are both decomposed to triangles before adding to a HIE PTO file.


⦁ Also updated the Designer's Workbench (DWB) Exporter. It previously only supported basic Polygon nodes but now handles all Geo Mesh types as well as PrimSet nodes (converting them into DWB Polygons).


⦁ These export enhancements are a good thing because, as mentioned previously, If you had applied the MakeTriList plugin as a Post-Load Execution step for any of the above file formats - you wouldn't have been able to re-export in formats that, at least under the hood, could hande batched primitive data.


The User Node & Private Data Editor has been enhanced so that user code snippets can be added to any of the generated node attribute changed functions. This user code is retained in the node plugin and rewritten if the plugin is regenerated (for example if an attribute is modified or added to the Node). The separation of auto-generated code files and user-modifiable code files has been significantly improved (ensuring code regeneration doesn't overwrite user enhancements. A new simple VisibilityGroup User Node has been added as an example (Its m_ShowChildren attribute turns on/off (i.e. controls the visibility) of all the group's children. Obviously the existing Geo Switch Node has more functionality - allowing visibility control on a per-child basis - but this is a nice plugin example which may still have some usefulness.


The Updated User Node & Private Data Window - shows 2 "User" Extension Nodes - a Visibility Group (derived from a Geo Group) and a Point node (derived from a Geo Polygon)
The Updated User Node & Private Data Window - shows 2 "User" Extension Nodes - a Visibility Group (derived from a Geo Group) and a Point node (derived from a Geo Polygon)
The Node fields for the VisibiltyGroup and Point node. The auto-generated plugin code as well as the "user code" files that tie the code snippets (as seen above) to the generated code are provided as source examples.
The Node fields for the Visibilty Group and Point node. The auto-generated plugin code as well as the "user code" files that tie the code snippets (as seen above) to the generated code are provided as source examples.

Added a new Visibility GroupAction to the Behavior System. If you add this action to the Visibility Group behavior (see above) you can drive its visibility with any internal/user or simulation variable. Unlike the existing Visibility Action - the node's children are visible if the input variable value is one and invisible if it is zero.


⦁ Fixed a number of tools that didn't reset the pickmode on tool termination. This could break picking and display the wrong mode as "active" in the desktop UI.


⦁ If you cancel any of the interactive Grid Tools (Move, Grid-to-Face, Grid-to-Plane etc.) - they now revert to their pre-tool position & orientation.


⦁ The long standing (present since Geo 1.0) animated Heartbeat Cursor is no more! The flashing hourglass cursor was shown when CPU-intensive operations were undertaken. Updating the heartbeat cursor actually prolonged the operation's duration. It has been replaced by a single standard hourglass cursor.


⦁ Removing a texture from the palette - either using Delete Current Image or Delete Unused did not update Polygon texture palette references or Extended Material texture palette references correctly under certain circumstances. This has now been fixed.


⦁ Added a new Behavior Tool - Delete Selected. This tool deletes all behaviors associated with the currently selected node (assuming it has behaviors). This is in addition to the existing Delete Empty (delete all behaviors that have no actions attached) and Delete All (delete all behaviors on all nodes in the file).


⦁ Added 2 new Internal Vars to the Behavior System - ZeroValue and OneValue. These vars have a fixed value of 0 and 1 respectively. They are immutable and cannot be overridden in the Exerciser or Override Dialog. These vars can be used in (for example) the LinearAction to allow user vars to be assigned or toggled in value. In the image below this action changes the "LowerWheels" variable from 1 to 0. This is especially useful in the State Machine Editor - allowing states and transitions to manage internal state variables.


Added a dedicated Add Var button to the top level Behavior Editor window. Previously the only way to do this was to create an Action and change one of the vars used in that Action - this would bring up the Variable Browser where you could select an existing var or add a new one. This was a bit cumbersome if you already knew what local variables you needed.


⦁ Added Copy functionality to the State Machine Editor. This means you can copy existing or pre-built State Machines from the editor Palette which is very useful if you use similar designs/approaches in your workflow.


You can now set a Raster Font for Text node's of type "Raster". The built-in Raster Fonts are DEFAULT_9_BY_15, DEFAULT_8_BY_13 (This was the Raster font used in previous versions), TIMES_ROMAN_10, TIMES_ROMAN_24, HELVETICA_10, HELVETICA_12 and HELVETICA_18


Geo Text Nodes now allow you you use Texture Fonts. This Text-type allows you to load and use any system TrueType (.ttf) font. Texture Fonts build a texture atlas for all printable glyphs in the TrueType font. The result in higher quality anti-aliased text rendering. You can specify the font pixel height. Texture fonts adhere to the Text Justification (i.e. Left / Middle / Right) property as well as the Text Direction (Left-to-Right and Top-To-Bottom) setting. (previously this was only supported if the Text was of type Vector). The Text expansion property can also be used to scale the glyph separation (in X, if the direction is Left-To-Right and Y, if the direction is Top-To-Bottom). In the image below The image on the right is a Text node using a Texture font (with string "0123456789") but with direction set to Top-To-Bottom...


Text Node texture font (the OFF value)
Text Node texture font (the OFF value)
Updated Text Node attribute page
Updated Text Node attribute page

The Text node property panel also has a new XY 3D Position adjust control that allows you to fine-tune/tweak the Text node position. The adjustment increment is the Grid major division distance / 10. There is a new Grid Tool to make setting this value easier. The Position Adjuster works for all Text node types. Alternatively the Position XYZ input fields let you directly set the Text Node origin.


⦁ Fixed a number of omissions and bugs associated with the Text Node Property Page - for example: previously, if the Modify All button was set (to apply a property change to all selected Text Nodes) this was ignored. You can now apply changes to any Text Node and have that change be updated for all selected text nodes. All operations are undoable.


⦁ The 64-bit GeoSTUDIO version 4.0 File Format is not backwards-compatible with earlier versions of the product. Geo 4.0 introduces various new 8 byte integer fields as well as breaking changes in the Private Data and User Node extensibility mechanism. This means that a ".geo" file written by this version cannot be loaded by earlier versions of Geo. To help in the situation where customers are running older (out of maintenance)versions alongside version 4.0 - we've added a new Geo File Format Preference - Save in Geo Format Version 3.6. If this is enabled (it is OFF by default) every Geo save will use the older format. NOTE: Version 4 additions/enhancements like Material and Texture Actions and User Node extensions will not be saved. If you are not making extensive use of Geo 4.0's upgrades to the Behavior System or building custom nodes then saving in Geo 3.6 format should mostly be lossless but I'd only recommend doing that if you have to share files with older versions of Geo.

⦁ A Geo Behavior variable (a geoVar) can be set as an active local variable when created (meaning it auto-updates its value every frame - by some step value and optionally with some user-defined constraints). However a bug in the read/write of active variables resulted in the active variable flag being switched off. This has now been fixed.


⦁ The Show BBox property in the Group Property page - actually showed a solid-filled BBox!. This has now been fixed.


We've added new Preferences related to Selection Highlight Color & Linewidth. If you don't like Geo's native green selection color or think the linewidth should be greater (or the opposite) well you're in luck ! :-) These can now be tweaked eaily within the editor. In addition there is a new Preference to set the color used by Tool's that generate temporary geometry (for example the Extrude, Bevel and Tube tools). We used a pretty harsh Navy Blue color for this in the past but with this release It's been changed it to a softer less-jarring color. However, with these new preferences you are free to experiment and make your sessions as productive and inspiring for you as possible.


⦁ For consistency we also added an Outline Color Perference. This is the color used to draw the outline of Polys, Meshes & PrimSets when the Global Drawstyle Override is WIRE_OVER_SOLID. Pressing the D-Key repeatedly cycles through the three overrides (WIRE, WIRE_OVER_SOLID & SOLID).


⦁ Added a Select As Verts button to the desktop UI - this acts like the existing Select As Polys button but converts a selection of RenderGroups or Poly-types into a selection of Vertices. This makes it easy to set a particular Vertex property across many verts (i.e. the Vertex Freeze Normal flag) using the Property Panel's Modify All capability.


⦁ Speaking of the Freeze Normal flag - this is now honored across geometry type conversions - i.e. Polygons to Meshes, Polygons or Meshes to PrimSets and vice-versa. This can be useful to retain existing vertex normals rather than have the conversion plugins recalculate them (which can generate different or less ideal results sometimes)


⦁ With this release the Geo STUDIO version (a less capable version) is no longer offered as a separate stand-alone product. Since all sales to date have been the Geo STUDIO PRO version we've decided to simplify the product lineup to just the PRO version.


⦁ Previously the Grid manipulation tools (i.e. the MoveGrid, GridToFace, GridOrientationByPlane, GridAlongNormal & the GridDivisions tools) had no undo. This has been fixed.


Comments


Featured Posts
Recent Posts
Archive
Search By Tags
Follow Us
  • Facebook Basic Square
  • Twitter Basic Square
  • Google+ Basic Square

Send a message to Carbon Graphics using this form...

Success! Message received.

bottom of page