Release Notes for Katana 2.6v2

Release Date

21 July 2017

System Requirements

Qualified Operating Systems

  • Windows 7 64-bit
  • Linux CentOS/RHEL 6

Hardware Requirements

  • A graphics card which supports OpenGL shader model 4.0

Feature Enhancements

Viewer API

  • TP 263532 - Added a default implementation of a perspective camera.

  • TP 263533 - Added a default implementation of an orthographic camera.

  • TP 264576 - A camera that is controlled by a scene graph location can now edit the node parameters that generated that camera. The camera can be tumbled, panned, etc. This can be achieved on any viewer by appending the "CameraControlLayer" ViewportLayer to the Viewports. A location-controlled ViewportCamera plugin is shipped with Katana and can be created in Python:

    camera = viewport.addCamera('SceneGraphCamera', 'SOME_CAMERA_NAME')
    camera.setLocationPath(locationPath)
    

    Or in C++:

    // The 'viewport' variable can be a Viewport plugin or a ViewportWrapperPtr wrapper pointer
    FnViewportCamera camera  = viewport->addCamera("SceneGraphCamera", "SOME_CAMERA_NAME");
    camera->setLocationPath(locationPath);
    
  • TP 281253 - Source code for Translate, Rotate and Scale manipulators is now shipped.

Support for 64-bit Object IDs

Object IDs in the Catalog/Monitor can now be stored using 64 bits, rather than the previous limit of 24 bits.

Previous Behavior

In previous releases of Katana, objects IDs are stored in a single floating channel (the alpha channel). In theory, this would limit the number of unique IDs to 232 but, due to the integer to float conversion, the number is actually smaller (224).

One of the first tasks after the renderer plug-in connects with Katana was requesting the valid ID range. For example:

// request IDs
int64_t nextId, maxId;
m_objectIdState.idSender->getIds(&nextId, &maxId);
 
// copy ID values into atomics
m_objectIdState.nextId = nextId;
m_objectIdState.maxId  = maxId;

Katana would return 1 as the next ID, and 1000000 as the maximum ID. For each object, the plug-in will find a unique ID between nextId and maxId and send them to Katana:

// This will give us the next ID whilst it increments the
// nextId member for the next call.
int64_t id_value = getNextId();
 
// Send the ID and scene graph location path back to Katana
m_objectIdState.idSender->send(id_value, objectName.c_str());

The object's ID is also sent to the renderer, which will eventually construct the image with the object ID in every pixel. That image is then sent to Katana, along with the rendered scene. For example, in RfK 21.4, we can see:

dataMsg->setData(dataArray, (dataMsg->width() * dataMsg->height() * entrysize) );

The dataArray is an array of floats. Each entry consists of 5 floating channels (i.e. entrysize is 20 bytes). However, only the first of the 5 floating channels are processed; the other 4 channels are dropped on the Katana side. Once the data is received, the floating value is cast to an integer to convert to an object ID:

float alphaChannel = reinterpret_cast<float*>(data)[i];
int32_t objectId = static_cast<int32_t>(alphaChannel);

New Behavior

In Katana 2.6v2, Foundry::Katana::Render::idSendInterface::getIds() has been deprecated. This means that the renderer plug-ins are allowed to use any value in the range [1, 264 - 1]. The value 0 (zero) remains reserved and cannot be used. Katana will use this value to indicate that no object is present and, also, to determine whether the IDs have 32 or 64 bits. Katana will map the 64-bit value to the object location. For example, the following is now possible:

// Get a "unique" ID by generating a 64-bit hash
uint64_t objectId = hash64(objectName);
m_objectIdState.idSender->send(objectId, objectName.c_str());

After the renderer has constructed the image with the object IDs, it needs to be sent to Katana. Previously only the first channel was read, whilst the rest of the transmitted channels were discarded.

In Katana 2.6v2, there are two different options. For backwards compatibility, the renderer plug-in can still transmit a single channel and it will behave as it did in previous releases. Alternatively, the renderer plug-in can send 3 channels. If the first channel contains 0, the next two following channels should contain the high and low parts of the 64-bit object ID.

// Split the 64-bit object ID into two parts
uint32_t lo = static_cast<uint32_t>(objectId);
uint32_t hi = static_cast<uint32_t>(objectId >> 32);
 
// Set the data for a single pixel
uint32_t data[] = { 0, lo, hi };
uint32_t entrysize = sizeof(data);  // i.e. sizeof(uint32_t) * 3 channels
dataMsg->setData(data, 1 * 1 * entrysize);

Shelf Item Scripts and Keyboard Shortcuts

  • TP 107685 / BZ 47981 - Support for keyboard shortcuts for running custom shelf item scripts has been added.

    • To allow users to enter a keyboard shortcut when creating a new shelf item, the Drop Types field in the New Shelf Item dialog has been replaced with a Keyboard Shortcut field.
    • To add a keyboard shortcut to existing shelf items, you can choose View Source from the context menu of the shelf item. This opens the shelf item's script in an editor. Replace the Drop Types with Keyboard Shortcut in the docstring, and add the desired shortcut. Save the file. Reload the shelves in the UI, and the shelf item could now be run using the shortcut.
    • It is NOT possible to override existing keyboard shortcuts in the UI, e.g. Ctrl+N, Ctrl+S, or Ctrl+C. If such keyboard shortcuts are used in shelf item scripts, their assignment will be ignored, and warned about in a log message (in UI mode only).
    • Tab- or widget-bound keyboard shortcuts would take precedence over main shelf actions.
    • All duplicate keyboard shortcut assignments will be flagged with a single warning log message during application startup.
  • TP 280065 - The keyboard shortcut for swapping buffers in the Monitor tab (default since Katana 2.6v1: S) can now be customized via the shortcuts.xml file.

  • TP 224458 - The keyboard shortcuts for the following commands in the Render main menu can now be customized using a shortcuts.xml file in a user's home directory:

    • Cancel Renders (default: Esc)
    • Preview Render View Node (default: Ctrl+P)
    • Live Render View Node (default: Ctrl+Shift+P)
    • Repeat Previous Render (default: Ctrl+\)

    Further information on Managing Keyboard Shortcuts is available in the Katana Developer Guide.

  • TP 117068 / BZ 49859 - Three API functions have been added to the UI4.App.KeyboardShortcutManager Python module:

    • GetKeyEventID(contextName, keyEventName) -- returns the ID of the key event corresponding to the given keyboard shortcuts context name and key event name, or None if no such key event is registered.
    • GetFullKeyEventName(keyEventID) -- returns the full name of the key event (including the context under which it was registered) which was registered for the given ID, or None if no registered key event could be found for the given ID.
    • GetShortcutForKeyEvent(keyEventID) -- returns a string representing the registered shortcut for the given key event ID, or None if no such shortcut could be found.

    The new functions complement the existing GetActionID(), GetFullActionName(), and GetShortcutForAction() functions.

  • TP 278508 - Adding or removing shelf scripts from one tab did not update the list of available shelf scripts in other tabs.

  • TP 278510 - Event handlers registered for shelves at the time of creating a tab were not unregistered when the tab is closed.

  • TP 280068 - Keyboard shortcuts for callbacks that are registered as key events through the UI4.App.KeyboardShortcutManager Python module could not be customized by modifying a user's shortcuts.xml configuration file.

  • TP 280191 - Keyboard shortcuts of custom Live Render actions that are placed in a submenu by defining a getMenuTitle() function did not work over floating panes.

Performance Improvements

  • TP 280347 - The performance of the Viewer has been improved when locations are removed from the Viewer Visibility Working Set.

  • TP 282528 - The performance of the Viewer has been improved when working with a large number of lights, and when locations are added to the Viewer Visibility Working Set.

  • TP 197816 - Katana 2.0+ utilised an unnecessary amount of CPU time while waiting for renders to complete. Two cases have been addressed:

    1. A loop with a minimum interval of 1ns (Linux) or 1ms (Windows). This now defaults to 25ms, and can be configured via the KATANA_RENDER_CONTROLLER_SLEEP_USECS environment variable.
    2. A loop with a minimum interval of 10ms. The interval is now 200ms.
  • TP 276020 - Katana 2.5+ utilised nearly 100% of CPU time while waiting for renders to complete. A loop that was previously a busy-wait now uses an interval of 200ms.

Other Feature Enhancements

  • TP 233998 - Graphical elements such as location type icons, Working Set and mute/solo checkboxes and linking indicators now scale with the application/fontSize preference.

  • TP 242413 - The source code for the ScenegraphXml Op is now shipped with Katana. This Op replaces the ScenegraphXml Scene Graph Generator that was shipped in Katana 2.1 and below.

  • TP 245241 - Support for custom vertex strides for curves locations has been added via a new geometry.vstep integer attribute convention.

Bug Fixes

Viewer API

  • TP 273909 - The Viewer API had a dependency on the OpenEXR library for some of its types, and was polluting the global namespace with them.

  • TP 275878 - When the view flag is removed from a node but not added to another (e.g. when the viewed node is deleted, or a new project is opened) the Example Viewer was not cleared.

  • TP 275930 - Keyboard shortcuts for manipulators were not functional until the Manipulators menu has been opened for the first time.

  • TP 276016 - Scale and rotation manipulators, when activated, were placed at the world space origin. After being modified they snapped to the object origin.

  • TP 277286 - (WIndows only) The Example Viewer failed to compile from source.

  • TP 277903 - Default Viewer API plug-ins, such as the grid and manipulator layers, caused crashes if used with a viewer using a different version of GLEW.

  • TP 278379 - Several getOption() and setOption() function implementation needlessly regenerated Option IDs when called.

  • TP 278644 - The Example Viewer tab could not be used if it was loaded from an implicit Katana resource path (i.e. not from a path in KATANA_RESOURCES).

  • TP 279810 - The GLManipulatorLayer class did not allow interaction with manipulators when the GL_BLEND flag was enabled.

  • TP 280228 - The EnterLeaveEventTranslator plug-in, used to notify viewer plug-ins that the pointer has entered of left the viewport, was not enabled by default.

  • TP 280803 - Katana crashed or emitted an error when closing ViewerAPI-based tabs.

  • TP 282616 - The ViewerDelegate classes leaked memory when calling getAttributes() after a location was re-cooked.

  • TP 284182 - The platform-dependent "long" datatype has been replaced with "int64_t" (or "uint64_t"). This affects manipulators' pickerDraw() method.

Other Bug Fixes

  • TP 196328 - Contents in attribute history and attribute inheritance popups in the Attributes tab was unnecessarily truncated.

  • TP 278148 - When editing geometry parameters of adopted lights in GafferThree nodes, the attribute types of corresponding geometry attributes, e.g. geometry.centerOfInterest, wrongly changed from DoubleAttr to FloatAttr.

Known Issues

  • TP 276024 - Example VIewer: objects recently shown in the scene graph sometimes fail to appear in the Example Viewer. This can be worked around by hiding and showing the Example Viewer tab.

  • TP 272409 - The File Browser's file sequence listings are populated according to a Foundry standard, rather than using the findSequence() method of the current File Sequence Plug-in. Files that are part of a sequence according to the File Sequence Plug-in, but not the Foundry standard, appear as individual files rather than a sequence.

  • TP 269449 - Choosing Edit Shader Parameters from the main wrench menu of Material nodes does not show wrench buttons next to shader parameters. This can be worked around by toggling the edit flag on the node.

  • TP 218742 - (Windows only) Katana must be installed to a path no longer than ~140 characters. Attempting to install to a longer path results in an unintuitive error: "The system cannot find the path specified."

  • TP 208802 - Closing the Histogram tab after use leaves the Monitor tab unable to display rendered images.

  • TP 207623 - When entering a single number only in a Backdrop node, that number is not preserved when saving a Katana project or when copying and pasting that node.

  • TP 199304 - The namespace parameter on Material nodes wrongly allows the insertion of Unicode codepoints outside the ASCII range.

  • TP 191052 - Katana does not have any support for the texture reference object workflows of V-Ray for Maya.

  • TP 188533 - Expressions linked to non-local parameters on not previously edited Material nodes can't be evaluated.

  • TP 176598 - Use of nodes that modify Graph State Variables in Interactive Render Filters is not currently supported.

  • TP 123558 / BZ 50911 - When changing an array parameter's tuple count/size, any corresponding attributes are not properly updated in the Attributes tab.

  • TP 114182 / BZ 49288 - When exporting a Catalog item you need to specify the export folder path to an existing folder. If the folder you're trying to export to does not exist on disk Katana will fail to export.

  • TP 112544 / BZ 49051 - The Viewer tab may lose sync with the Scene Graph tab when changes to expansion state are interrupted.

  • TP 107038 / BZ 47853 - Indication of attribute source nodes (such as the yellow 'glow' in the Node Graph tab) is unavailable as of Katana 2.0v1.

  • TP 105434 / BZ 47520 - Reference Expressions may not refer to dynamic parameters such as shader parameters.

  • TP 94052 / BZ 44199 - The Repeat Previous Render menu command only works on renders started from a 3D node's context menu.

  • TP 85118 / BZ 41152 - When editing parameters of a node that is part of a LiveGroup node and reloading the parent LiveGroup node, the UI state of the Parameters tab is reset. This includes scroll bar positions, selections of items, and selections of nested tabs (for example Object, Material and Linking tabs for a Gaffer node).

  • TP 84998 / BZ 41092 - When reloading a LiveGroup node's parameter interface and contents from its source, parameters of child nodes that are edited in floating panes disappear from those panes.

  • TP 84326 / BZ 40709 - The Alembic library does not support multiple process or thread access to an Alembic file. This means that a crash occurs when modifying an Alembic file outside Katana, while it's loaded in an open Katana scene. To avoid this, you must Flush Caches before attempting to update any modified Alembic files.

  • TP 84020 / BZ 40598 - Reverting a LiveGroup node does not revert its user parameters.

  • TP 84019 / BZ 40599 - Parameters that are added to LiveGroup nodes are wrongly discarded when performing a reload from source, leading to loss of data.

  • TP 84018 / BZ 40600 - Undoing a revert of an unpublished LiveGroup node does not restore the LiveGroup's editable and modified state.

  • TP 83061 / BZ 40237 - Nodes can be dragged into the Group bubble of a non-editable LiveGroup node.

  • TP 80738 / BZ 39261 - Operations that lock and unlock nodes do not currently create entries in the Undo History, which can lead to an incorrect node graph state when undoing and redoing operations.

  • TP 74799 / BZ 36926 - The rendererSettings > displayOptions parameter of a RenderOutputDefine node for the PRMan renderer, shown when its type parameter is set to raw, cannot be set using the Parameters tab.

    For a workaround, the UpdatePrmanSettingNodes shelf script can be used. The script, available in the PRMan17 shelf, creates an AttributeScript node that converts display options, set using string attributes, to group attributes.

  • TP 71965 / BZ 36691 - State badges are currently shown for attribute values of dynamic array child parameters, even though only their parent array parameter should appear with a state badge.

  • TP 71954 / BZ 36663 - It is not currently possible to sort notifications in the Notifications popup window.

  • TP 70217 / BZ 36176 - The 2D node Disk Render Upstream Render Outputs option does not use the batch render method, batchRender, for upstream render nodes, instead using diskRender.

  • TP 70196 / BZ 36170 - Control keys (notably arrow keys) do not function as expected in shell mode.

  • TP 65347 / BZ 34949 - Using Compiz can lead to text fields not receiving focus events correctly due to an incompatibility between Compiz and Qt. Depending on your configuration, disabling Compiz "desktop effects" may resolve the problem.

  • TP 65242 / BZ 34870 - Katana doesn't support render output directory creation for shadow, merge and script output types.

  • TP 60457 / BZ 31790 - Setting an array or group parameter to an expression results in an invalid expression. Upon setting a valid expression (for example, an evaluation of an equivalent parameter on another node using getParam), the parameter is not immediately updated. To workaround this issue, close and reopen the parameter, or flush caches while the node is not edited.

  • TP 56545 / BZ 28549 - Main menu commands that create nodes, notably File > Import..., File > Import LiveGroup..., and Help > I want a pony, do not create the nodes in a Group or LiveGroup node that has been entered in a Node Graph tab, instead they create the nodes in the root level of the node graph document.

  • TP 12517 / BZ 16168 - Only one Monitor tab may display the results of a Preview Render. The use of multiple Monitor tabs is not currently supported.

Save