Introduction

Gestaltor is a visual editor for glTF files. The desktop application is developed by UX3D and available for Linux, MacOS and Windows. More information can be found on the Gestaltor product page.

Gestaltor supports glTF 2.0 and following Khronos glTF extensions:

Gestaltor can load and save an asset using all available file extensions specified by glTF:

  • .glb

  • .gltf

Community vs. Professional

The Gestaltor Community version is for non-commercial usage. It fully supports all glTF 2.0 features plus all extensions. The main advantage of the Gestaltor Professional version are the semi-automated features e.g. cleaning up a glTF asset with unused elements.

Steam vs. gestaltor.io

The only difference between these versions is the shop and license system.

The gestaltor.io version allows up to 3 installations for the Professional version. When upgrading the operating system or switching the computer, resetting the count of used installations becomes necessary.

This can be done here: My Account

  1. After login to the shop, switch to “My Account”.

  2. Click “Serial Keys”. Here, you can view all your licenses.

  3. Click “Show details” to list the “Unique identifier”.

  4. Select one or more “Unique identifier” to delete.

  5. Press “Remove Unique Identifier”

After this step, one can utilize the Gestaltor Professional license key on another computer.

Installation

Steam

Gestaltor is installed like any game on Linux, MacOS and Windows.

gestaltor.io

Following files are downloaded depending on the operating system:

Linux

Gestaltor.AppImage

After downloading, please set the AppImage executable. Gestaltor can be executed like any other Linux program.

MacOS

Gestaltor.dmg

Open the DMG file and install Gestaltor like any other program for MacOS.

Windows

Gestaltor_installer.exe

Execute the installer. Gestaltor is installed like any other Windows program.

Graphical User Interface

After Gestaltor is launched, the following graphical user interface (GUI) is visible:

All widgets screenshot

The GUI consists of a menu bar and several widgets.

Widgets

The GUI consists of a main widget - the viewport - and several other widgets for editing and optimizing glTF assets. The widgets - except the main widget - can be hidden, rearranged and detached depending on the user’s needs.

Global Settings

These settings are editor specific properties which are not stored inside glTF - as it is not possible - but that do have an impact on the visual output. For instance, most glTF web viewers do have similar predefined settings. These parameters do help to adapt to e.g. change the environment light by defining a custom .hdr file.

Viewport

The viewport shows the rendered output of the current glTF. Property changes are updated automatically. The visual output is aligned with the official glTF Sample Viewer from Khronos. Hence, the viewport does allow a WYSIWYG editing of the glTF asset.

Shortcuts

Keyboard Conventions

Shortcut keys are shown in the way they are visible on the keyboard. For example:

G

This stands for the lower case “g”.

Shift, Ctrl, Alt

These are modifier keys.

Ctrl-W, Shift-Alt-A, …

This notation means you have to press these keys at the same time.

Mouse Conventions

We use the following schema to reference mouse buttons:

LMB Left mouse button

RMB Right mouse button

MMB Middle mouse button

Wheel Mouse wheel

Camera controls

General Camera Controls

LMB

Select

MMB

Pan

CTRL-LMB

Pan

ALT-LMB

Orbit

ALT-RMB or Wheel

Zoom

F

Focus selection

RMB

Look around

NUMPAD1

Top view

NUMPAD2

Bottom view

NUMPAD3

Right view

NUMPAD4

Left view

NUMPAD5

Front view

NUMPAD6

Back view

Perspective User Camera

RMB - W A S D or Arrow keys

Flight Mode

RMB - E Q

Flight Mode up and down

SHIFT

Sprint (in Flight Mode)

WHEEL

Change Speed (in Flight Mode)

Orthographic User Camera

RMB - Q E A D or Arrow keys

Panning Mode down, up, left and right

RMB - W S

Move Clipping Planes (forward, backward)

SHIFT

Fast panning (in Panning Mode)

WHEEL

Change Speed (in Panning Mode)

All other shortcuts are shown in their respective menus.

Command Line Interface

Note that the command line interface is only available in the Gestaltor Professional version.

Options

[-i, --input] - Specify the path to a glTF or glb file to open with Gestaltor or to create a rendering of.

[-o, --output] - Specify an output path for the rendered image(s). Control the file type by appending .png or .jpeg to the filename.

[-x, --width] and [-y, --height] - Specify a resolution for the rendered image(s). These options will implicitely set the aspect ratio of the resulting image(s). If you are using a glTF camera with a defined aspect ratio for the rendering process, you might want to only specify height or width of the rendering. In this case, the other property will be deducted from the aspect ratio of the camera.

[-c, --camera] (optional) - Specify the index of a glTF camera. If this camera has an aspect ratio, only width or height of the resolution need to be specified.

[-s, --scene] (optional) - Specify the index of a glTF scene. If not specified, the default scene or, if not available, the first scene in the glTF will be used.

[--clearcolor] (optional) - Specify a color value in the format #RRGGBB (red, green, blue) or #AARRGGBB (alpha, red, green, blue) that is used as the background color. If not specified, the default environment map of the Gestaltor will be used as background.

[--alphaChannel] (optional) - Set this option to include the alpha channel in the rendered image(s).

[--ibl] (optional) - Specify a path to an .hdr file used for image-based lighting (ibl) and as a background. Use [--clearcolor] to overwrite this background image.

[-t, --tonemapping] (optional) - Add a tonemapping to the rendered image(s) by specifiying the desired algorithm via its index. None = 0, ACES Filmic (NARKOWICZ) = 1, ACES Filmic (HILL) = 2, ACES Filmic (HILL - Exposure Boost) = 3.

[-a, --animations] (optional) - Choose which animation clips to render by specifying their indices in this format: [0,3,4] or [2] or 2

[-f, --frames] (optional) - Specify the number of animated frames that should be rendered. Each frame will produce one output image.

[-r, --framerate] (optional) - Specify the framerate [frames per second] that is used when rendering multiple frames of animation. The default is 60 frames per second.

[--radius] (optional) - Specify the distance from the camera to the target. This option is used for orbit camera configuration and is ignored when a glTF camera is specified with [-c, --camera].

[--target] (optional) - Specify the target in world coordinates that the camera looks at in this format: [0.0,0.0,0.0]. This option is used for orbit camera configuration and is ignored when a glTF camera is specified with [-c, --camera].

[--theta] (optional) - Specify the horizontal camera angle [degrees]. 90 degress looks along the -X axis. This option is used for orbit camera configuration and is ignored when a glTF camera is specified with [-c, --camera].

[--phi] (optional) - Specify the vertical camera angle [degress]. 90 degress looks along the -Y axis. This option is used for orbit camera configuration and is ignored when a glTF camera is specified with [-c, --camera].

[--yfov] (optional) - Specify the vertical field of view [degrees]. Using this option forces perspective projection.

[-?, -h, --help] - Display help on command line options.

[--help-all] - Displays help including Qt specific options.

[-v, --version] - Displays version information.

How to …

… create material variants

  1. Select Material Variants in the Content widget.

  2. Create two variants using one of the following ways:

  • Right click in the empty space of the Content widget and click the Create popup.

  • Select Create > Create Material Variant in the Widget menu.

  • Select Content > Create Material Variant in the menu bar.

  1. Rename the variants to e.g. “Material Variant A” and “Material Variant B”:

_images/Variants_01.png
  1. Click on Materials and create (or duplicate) a new material. In this case, a red emissive effect is added to the duplicated material. Please note, that the effect is not visible, as this material is not assigned yet.

_images/Variants_02.png
  1. Select the “Hello Cube Mesh” in Meshes section. In the Inspector widget, select the only available primitive.

  2. Enable the variants extension at the bottom of the Inspector widget.

_images/Variants_03.png
  1. Assign the empty slots with the “Hello Cube Material” and the “Copy of Hello Cube Material”.

_images/Variants_04.png
  1. Now it is possible to select the currently visible variant in the Global Settings widget.

… export to USDZ

  1. Select File > Export to USDZ… in the menu bar.

  2. Enter a filename and save the asset to the file system.

_images/USDZ_01.png

USDZ is the 3D and AR format from Apple. It does have less features compared to glTF. Non-supported properties are automatically removed.

… use an imported animation

  1. Select File > Import … in the menu bar.

  2. Import a glTF having an animation e.g. Animated Cube

  3. Selecting the second scene in the Content widget, the Gestaltor should be in this state:

_images/Animation_01.png
  1. Switch back to the first scene and select the animation in the Content widget to assign to a new target node:

_images/Animation_02.png
  1. In the Inspector widget, change the TargetNode to “Hello Cube”.

  2. Please make sure to activate the animations in the Viewport widget.

_images/Animation_03.png
  1. Now the default sample asset is using the animation from the imported glTF.

… use a punctual light

When you open Gestaltor, the sample scene already contains two lights. In this case, we add one point light using the KHR_lights_punctual extension.

  1. Open any scene. In this case, we do have a sphere with a basic, metallic and rough material.

_images/Light_01.png
  1. In glTF, any transformation for a mesh, camera and punctual light is stored in a node.

  2. Create a node by e.g. right clicking in the Hierarchy widget. In this case, we renamed the node to “MyLight”.

_images/Light_02.png
  1. Create a light by pressing Ctrl+Alt+L. In this case, we change the point light’s color from the white default to blue.

_images/Light_03.png
  1. Select the “MyLight” node and assign the light “MyPointLight” in the Inspector widget.

_images/Light_04.png
  1. As the node and the light are inside the sphere, change the Translation value. The light and the effect becomes visible now.

_images/Light_05.png

… merge glTF files

One major feature of Gestaltor is to merge several glTF into a single file and to reuse their assets.

  1. Open a glTF File > Open… in the menu bar. e.g. Damaged Helmet

  2. Import a glTF File > Import… in the menu bar. e.g. Toy Car

  3. Toggling the two scenes in the Content widget should display the following:

_images/Merge_01.png _images/Merge_02.png
  1. Switch back to the first scene and add the “Fabric” node in the Hierarchy widget.

  2. Click on the “Fabric” node and adjust the scale in the Inspector widget.

_images/Merge_03.png
  1. Adjust the translation of the first node in the Inspector widget.

  2. Delete the unused second scene in the Content widget.

  3. Either delete unused elements manually or press Ctrl+Shif+C (Professional only) to remove them automatically.

_images/Merge_04.png

… assign a material

In this example, we assign a material to an imported Wavefront .OBJ file from here: Utah teapot

  1. Start Gestaltor and remove all elements from the Hierarchy widget:

_images/Material_01.png
  1. Import an .obj file using the menu bar Content > Import OBJ .

  2. In the Hierarchy widget, add the node “teapot.obj”. The Utah teapot is now visible:

_images/Material_02.png
  1. The Utah teapot contains the default glTF material. Let’s assign another material e.g. for the cap.

  2. In the Viewport widget, select the cup. In the Inspector widget, click the Mesh and then the Primitive icon.

  3. In the material drop down list, assign the material “Hello Cube Material”.

_images/Material_03.png
  1. Click on the Material icon and e.g. change the base color and add a clear coat effect:

_images/Material_04.png
  1. Either delete unused elements manually or press Ctrl+Shif+C (Professional only) to remove them automatically.

… decimate a primitive

There are two ways to decimate a primitive in Gestaltor:

  • Vertex Clustering

  • Reduce Triangle Count

Vertex Clustering is scanning a primitive for similar vertices, which do have the same data. The index buffer is rebuild and duplicate vertices are deleted.

Reduce Triangle Count is decimating the primitive vertices count while keeping the shape of the geometry. If the quality is not sufficient, press CTRL+Z to undo this optimization. Vertex Clustering is executed before this operation automatically, as this helpts to produce better results.

Both operations are only available in the Professional Gestaltor version.

These operations can be found in the Inspector widget when navigating from a mesh to a specific primitive:

_images/Decimate_01.png
  1. Open a glTF File > Open… in the menu bar. e.g. Sci Fi Helmet

  2. Navigate to the only mesh and primitive in the glTF scene

_images/Decimate_02.png
  1. Press the Reduce button in the Inspector widget and choose a target percentage and tolerance.

  2. In the Logger widget, feedback about this operation is displayed. If desired, the operation can be executed several times.

  3. In the Viewport widget, switch to Wireframe mode to see the result before and after the operation.

_images/Decimate_03.png

… rescale a texture

In some cases, the input images for a material are rectangular or even square e.g.

_images/Rescale_01.jpg

In general, procedural generated or scanned images do have this characteristic. In this example, the given material Fabric 026 is used. The tool pbr2gltf2 is used to generate the later imported material.

  1. Open a glTF File > Open… in the menu bar. e.g. Sheen Cloth

_images/Rescale_02.png
  1. Import a glTF having a material e.g. Fabric026 with rectangular images.

  2. Assign to the only Mesh and Primitive the Fabric026 material.

_images/Rescale_03.png
  1. In the material Fabric026, enable the KHR_texture_transform extensions.

  2. Set the Scale for the Texture Transform to e.g. 10.0 to match the original image.

_images/Rescale_04.png
  1. Either delete unused elements manually or press Ctrl+Shif+C (Professional only) to remove them automatically.

… create a screenshot

  1. In the Viewport widget, switch to the Render Mode in the drop down list.

  2. Select the node “Camera Node” in the Hierarchy widget and select the camera:

_images/Screenshot_01.png
  1. We want to render an image with a resolution of 1500 : 500, so change the Aspect Ratio to 3:

_images/Screenshot_02.png
  1. Press the Render button in the Viewport widget. Change the resolution to w = 1500 and h = 500:

_images/Screenshot_03.png
  1. After pressing Render now, the rendered image is stored in the folder defined in the previous dialog:

_images/Screenshot_04.png

… create a screenshot from the command line interface

Note that the command line interface is only available in the Gestaltor Professional version.

  1. Specify a glb or glTF file using the [-i, --input] option. E.g. VC

Gestaltor.exe -i "C:\VC.gltf"

  1. Add an output path for the rendered image.

Gestaltor.exe -i "C:\VC.gltf" -o "C:\output_image.png"

  1. Specify the resolution, in this case it is Full HD.

Gestaltor.exe -i "C:\VC.gltf" -o "C:\output_image.png" -x 1920 -y 1080

  1. This glTF has several camera objects. Pass a camera’s index to render the scene from the camera’s point of view. In this case camera 11 is used.

Gestaltor.exe -i "C:\VC.gltf" -o "C:\output_image.png" -x 1920 -y 1080 -c 11

  1. Execute the command and view the rendered image at the output path.

_images/Screenshot_CLI_01.png

… create a movie clip via the command line interface and Blender

Note that the command line interface is only available in the Gestaltor Professional version. You already have learned how to create a single image via the command line interface. E.g., with .\Gestaltor.exe -i "C:\Fox.glb" -o "C:\output\image.png" -x 800 -y 600 you get an image of the Fox.glb asset. This file also includes three animations which can be rendered as an image sequence. To do so, one needs to know the index of the animation that should be used. In the following, we identify the index of the animation using Gestaltor:

  1. Open the animation widget by clicking on the icon in the toolbar

_images/CLI_Movie_01.png
  1. Identify the animation you want to use and memorize the index. (Important: this index starts with 0, i.e., if you want to render the “Survey” animation, we need index 0)

  2. Switch back to the terminal and add the option --animations 0 to get a set of images resembling the animation:

.\Gestaltor.exe -i "C:\Fox.glb" -o "C:\output\image.png" -x 800 -y 600 --animations 0

Names of the images are automatically complemented by a progressive index.

  1. By default, the number of frames per second is set to 60. To reduce the number of frames per second, add the option --framerate 30:

.\Gestaltor.exe -i "C:\Fox.glb" -o "C:\output\image.png" -x 800 -y 600 --animations 0 --framerate 30

To convert the image sequence into a movie file format, you can use, e.g. Blender:

  1. Go to Blender and open the Video Editing panel

_images/CLI_Movie_02.png
  1. Go to Add > Image/Sequence in the Video Editing panel

_images/CLI_Movie_03.png
  1. Select all generated images and click Add Image Strip

_images/CLI_Movie_04.png
  1. Now, you have the movie clip in Blender

_images/CLI_Movie_05.png

… replace or add a new HDR

  1. In the Global Settings widget locate the ‘Add new HDR’ button under Environment Light

_images/Replace_or_add_a_new_HDR_1.png
  1. Click the ‘Add new HDR’ button and allow Gestaltor to access the files from the computer (only for Mac users). Select the HDR file of your choice.

_images/Replace_or_add_a_new_HDR_2.png
  1. When the HDR file was successfully loaded it will appear as an option in the HDR image dropdown above.

  2. Select the new file from the dropdown.

_images/Replace_or_add_a_new_HDR_3.png

… remove / delete a HDR file

  1. In the Global Settings widget locate the ‘Delete current HDR’ button under Environment Light.

_images/remove_or_delete_a_new_HDR_2.png
  1. The ‘Delete current HDR’ button will delete the currently selected HDR file (the one shown in the viewport / dropdown). Click the button to delete it.

… compose a scene from multiple glTFs using the navigation cube

  1. Click on import in the file menu and select the glTF you want to import.

  2. Right click the hierachy and select “Add Node to Scene”. And select the imported node from the menu. (There can be big size differences between the models already in the scene and the newly imported one. In those cases they have to be scaled up manually.)

_images/Composing_01.png _images/Composing_02.png _images/Composing_03.png
  1. Select the movement tool from the navigation toolbar.

_images/Composing_04.png
  1. If your current view is not aligned with any axis you can use the navigation cube in the upper left corner of the render view to select an axis aligned view. You can also use the following shortcuts to achieve the same result.

NUMPAD 1

Top view

NUMPAD 2

Bottom view

NUMPAD 3

Right view

NUMPAD 4

Left view

NUMPAD 5

Front view

NUMPAD 6

Back view

  1. You can then press the perspective / orthographic view toggle at the top of the renderer (left of the “Render” button) to switch between perspective and orthographic mode.

_images/Composing_05.png

Perspective mode

_images/Composing_06.png

Orthographic mode

  1. Once you have entered orthographic mode you can then position the selected node.

_images/Composing_07.png

… create a 3D Commerce compliant environment

  1. Go to Edit > Preferences > Viewport and set ‘MSAA’ to ‘Disabled’, ‘IBL resolution limit’ to 256 and ‘Background color’ to white (#FFFFFF).

_images/3DCommerce_01.png
  1. If the MSAA setting was changed restart Gestaltor

  2. Download the Neutral.hdr file from here

  3. Load the downloaded HDR file into Gestaltor and select it

  4. In Global Settings disable the Show Background option

_images/3DCommerce_02.png

Once you have performed the steps outlined above, you are able to create certifcation screenshots. This can be done either in Gestaltor via the Render functionality or via CLI. The certification models can be downloaded from this repository.

To create a screenshot in Gestaltor, load a model select the Render Mode and the desired gltf camera. Now create a screenshot with the Render functionality and use 1024 pixel as width and height.

Professional feature: To create a screenshot via CLI use the following command:

Gestaltor.exe -i <path to model> -o <path to save location> --height 1024 --camera <camera to select> --ibl <path>/Neutral.hdr --clearcolor #FFFFFFFF

… cleanup glTF for NFT

Non-fungible token - in short NFT - does allow to certify a digital asset to be unique and therefore not interchangeable. This certification is also possible for glTF. Some platforms only allow 100% valid glTF plus no extensions. One can go through all glTF objects and remove the extensions manually. However Gestaltor Professional does allow to do this automatically.

  1. Execute Content > Remove Light Extensions… > KHR_lights_punctual to remove the light extension in the sample asset

_images/NFT_01.png
  1. Execute for any other extension. If an extension is not present in the asset, the menu is grayed out

  2. Execute Content > Cleanup to remove all non required data in the glTF

  3. Save the asset as glTF or glb

Gestaltor always saves a valid glTF.

… create a volume effect using a thickness map

  1. Open a glTF File > Open… in the menu bar. E.g. DragonAttenuation

  2. Navigate to the mesh, primitive and material in the glTF scene.

_images/create_a_thickness_map_and_volume_1.png
  1. Press the checkbox next to the Volume extension at the bottom.

  2. The Transmission extension is automatically enabled. Choose a Transmission Factor between 0 and 1.

Dependencies: The KHR_materials_volume extension needs to be combined with an extension which allows light to transmit through the surface, e.g. KHR_materials_transmission.

Exclusions: This extension must not be used on a material that also uses KHR_materials_pbrSpecularGlossiness or KHR_materials_unlit.

_images/create_a_thickness_map_and_volume_2.png
  1. Define the parameters to describe the transmission and volume effects.

  2. Use an existing texture or create one using the Bake Thickness Map Gestaltor Professional feature.

  3. To access the Bake Thickness Map feature, navigate to the primitive in the glTF scene.

_images/create_a_thickness_map_and_volume_3.png
  1. Press the Bake button in the primitive Inspector widget and set Resolution, TexCoord Set and Occluder Distance.

  2. The texture will be generated and stored in the Content panel. This process might take a while.

  3. Use the created texture as the Thickness Texture in the Volume extension. Adjust the Thickness Factor, Attenuation Distance and Colour accordingly.

_images/create_a_thickness_map_and_volume_4.png