Toon Boom Harmony 10.3 Release Notes

Version 10.3

Here are the new features and improvements in Toon Boom Harmony 10.3.

New Effects
Changes up to 10.3.0.8663
Changes from 10.1.5.8623 to 10.3.0
Changes from 10.1.5.8596 to 10.1.5.8623
Changes from 10.1.5.8572 to 10.1.5.8596
Changes from 10.1.5.8540 to 10.1.5.8572
Changes from 10.1.5.8516 to 10.1.5.8540
Changes from 10.1.5.8508 to 10.1.5.8516
Changes from 10.1.5.8496 to 10.1.5.8508
Changes from 10.1.5.8483 to 10.1.5.8496
Changes from 10.1.5.8402 to 10.1.5.8483
Changes from 10.1.5.8275 to 10.1.5.8402
Changes from 10.1.5.8224 to 10.1.5.8275
Changes from 10.1.0.8185 to 10.1.5.8224

New Effects

These new effects were added to Harmony. For complete documentation on these effects, see Using Effects .

Box Blur: This effect is a quick and easy way to create a blurring effect. The Box blur changes the colour value of each pixel based on the pixels next to it in the vertical and horizontal directions.
Gaussian Blur: This effect softens the image, reducing the amount of noise and detail.
Radial Zoom Blur: This effect creates blurs around a centre point, simulating the look of a zooming or rotating camera. You can use a matte to isolate the area of the image from which you want the effect to radiate from.
Channel Swap: This effect lets you take the image information from one channel and use it in another channel to achieve interesting effects. You can extract the following: red, green, blue, alpha values, hue, saturation, lightness, and luminance, as well as turn the information on or off.
Hue-Saturation: This effect lets you adjust the hue, saturation and lightness values individually or by using the HLS picker or Hue Range picker. You can achieve effects over the entire image, such as a sepia tone. Changes made to the values are additive to the final image.
Image-Switch: This effect lets you use multiple effects, such as Colour Override, and choose which port will be sent to rendering if you want to apply different variations of an effect that cannot be changed over time. You then create multiple separate versions of the effect, connect them all to the Image Switch, and then if you want to change to a different version of the effect at different points in your scene, you would add a curve and animate the port number.
Lens Flare: This effect simulates the refraction caused by shining a bright light into a camera lens. The shape of the lens flare can be circular or hexagonal.
Turbulence: This effect generates noise over an entire image. You can modify a drawing and break it apart.
Turbulent Noise: This effect uses Perlin noise to create grayscale noise for organic-looking backgrounds, displacement maps, and textures, or to simulate things like clouds, fire, lava, steam, flowing water, or vapour. The Turbulent Noise effect models turbulent systems with smaller noise features moving more quickly than larger noise features.

Changes up to 10.3.0.8663

Features

New effects module called Turbulence.

Bug Fixes

Fix for rendering to QuickTime movies that failed when multiple Writes are active in a scene on Mac.
Fix for a crash when using Toggle Current Colour Protection.
Fix for Stage freezing when opening a scene with sound or importing a sound on Windows 8.1.

Changes from 10.1.5.8623 to 10.3.0

Features

New module called Z Buffer Smoothing can be used when you have a 3D model that has some white pixels appearing in the antialiasing done with other elements of the scene. Maya produces incorrect Z values for those pixels.

Changes from 10.1.5.8596 to 10.1.5.8623

Features

Dbserver: Added the command line option (-debug-connection) to the dbserver when a client connects or disconnects.
Dbserver: Log time of message.
Clients: Added traces for identifying all the steps when resolving a shortcut on Windows. This change is temporary, as too much information might be generated to be useful in a general case.

Changes from 10.1.5.8572 to 10.1.5.8596

Features

On Windows, you can add a shortcuts.conf file in the etc/ folder for a faster connection to a database. You can still have the /USA_DB.lnk and /usadata000.lnk mounts, but this file is read first if it's there.

Changes from 10.1.5.8540 to 10.1.5.8572

Features

Added a preference to control the behaviour of composite passthrough in conjunction with those effects that require a matte. This preference can be used in specific cases where certain modules interfere with the OpenGL display of elements in the Camera view. This preference is off by default.

Fixed Bugs

Enforced null handles when splitting a linear segment of a Bezier curve. This addresses a problem with keyframe handles when creating a keyframe between two existing keyframes.

Changes from 10.1.5.8516 to 10.1.5.8540

Features

Added more Photoshop Blending modes in the Composite-Generic and Blending modules.
New module called Image-Switch lets you select which drawing layer to use.
New module called Channel Swap lets you change the content of the Red, Green, Blue and Alpha channels. You can use the RGBA or the Luminance, Hue, Saturation and Lightness information as input.

Fixed Bugs

Fixed Export Layout from Selection.
Fixed a glitch where the input to a blur did not have a sufficient size.
Fixed crash when using Pass Through composite with Blur Radial
Fixed multiple modules with blurs (Blur Radial Legacy, Tone, Highlights, etc.) that made bad edges on bitmap images of a scene.

Changes from 10.1.5.8508 to 10.1.5.8516

Features

New module called Switch module lets you choose which input image to use over time.

Changes from 10.1.5.8496 to 10.1.5.8508

Fixed Bugs

Fixed crash when dragging an expression module in the Timeline view.
Fixed a problem with transparency when rendering to .png format.

Changes from 10.1.5.8483 to 10.1.5.8496

Fixed Bugs

Fixed sound playback with ShuttleXpress device when using the jog in analog mode.

Changes from 10.1.5.8402 to 10.1.5.8483

Features

Enabled the 3D layer option when importing a 3D model. This is now the default behaviour.
Added a preference for the Xsheet when playing back a scene and whether auto-centering is on or off. Auto-centering is to be used during sound breakdown with the ShuttleXpress device.
Keep the Import Image, 3d models, scanner or Link to Image settings from session to session. These are stored in the user’s preferences.
ControlCenter: Use the -env, -job and -scene command-line arguments to set a default selection in the UI.

Fixed Bugs

Fixed a problem with 2D path parameters not showing up in Timeline view.
Fixed shuttle and jog on Mac when using ShuttleXpress device. Optimized playback of Xsheet.
Fixed Export Soundtrack using the Process Soundtracks Individually that wouldn't export all the soundtracks.
Fixed the SWF export report that still printed false errors for Colour Override.
Fixed sound scrubbing on Mac when using ShuttleXpress device.
Fixed Tool presets that don't retain the Min/max and smoothing values from session to session.

Changes from 10.1.5.8275 to 10.1.5.8402

Plugins

Updated SampleMyModule with example on how to use the newly available MO_PortTransform class. See computeTransformation.

Fixed Bugs

D-13841 - Velocity Bezier ends up with "nan" as a value.
D-14460 - Watermark on exported .mov and Render and Play output.
D-14387 - Inserting keyframes in Bezier does not split them correcty.
D-13550 - composition.buildDefaultCompositionOrder() does not work in Display All mode.
SLB_SelectablePickAdaptor::reserveHandles now update the number of handles.
Directional Blur parameter now update correclty when its controls are moved.
MO_Module::getCompositeInputList now include modules that have a right image port that is not connected. This was preventing some module softRender method to be called.

SDK:

Removed one level of folder indirection for the SDK headers. CoreLib no longer exists.
Removed PR_CachedPreferences from the SDK headers. Use PR_Preference instead.
Removed FlashIOLib from SDK headers.
Calls to MO_Module::oglRenderControl are now made from world coordinates (they were previously made from model coordinates). Set the ogl context matrix manager’s model matrix to the module’s local matrix to emulate the previous behaviour.
MO_Module::oglControl is not virtual anymore. Re-implement oglRenderControl to render a module’s controls and iterateControl to change the order of the parent modules controls rendering.
Renamed MO_Module::computePositioning to computeTransformation.
Renamed TUPortRender to MO_PortTransform. This class enables modifying the local matrix of a module in a call to computeTransformation.
Added helper methods to MO_Module: getParentModelMatrix, getModelMatrix, getLocalMatrix.
MO_Module::_oglPickAdaptor has been renamed to _pickAdaptor and is now instantiated through a visitor. MO_Module::oglPickAdaptor has been renamed to pickAdaptor.
Renamed methods and types in SLB_PickAdaptor. oglScanHits has been replace with scanHits. GLint and GLuint parameters have been replaced with SLB_PickId_t.
Removed inconsistent methods from MO_Module:
localMatrix
getPivotForParent
getPivot
handleDepthBufferFromInput
Removed inconsistent methods from CELIO_Handler:
getPixmapInfo
read(CEL_Rep&, const QString &) const
write(CEL_Rep&, const QString &, const QString &options) const
Removed unnecessary parameter timestamp from CELIO_Handler functions. Replaced methods is3dFormat and isPixmapFormat with single method formatClass.
Removed inconsistent methods from CELIO_Manager:
write(CEL_Rep&, const QString &, const QString&, const QString&) const
Renamed VS_CgGLinterface to VS_ShaderManagerInterfaceCgGL.

Documentation:

Updated Doxygen documentation of SDK headers.
Added help topics on plugin implementation. The “Modules”, “Visitors”, “Pixmaps”, “Image IO” and “Manipulation” chapters were added to the documentation.

Changes from 10.1.5.8224 to 10.1.5.8275

Expression

Cache expressions’ results. Expressions’s script will no longer be evaluated multiple times, at every refresh.
Added the ability to reference any module in the scene using a relative path from the current group. In the expression function “node()” or “module()”, you can specify the referenced module using a relative path, similar to a folder. (e.g. ../parentGroup/group/module), instead of just a module name.
Changed “AT_ExprScriptEngine::setExpressionDirty()” to handle the recursion scoping to avoid the exponential number of calls to this method. This will heavily optimize the load and the operations in scenes with multiple interconnected expression columns and expression plugin modules.
Added a new global variable “globalFrame”. This variable returns the initial currentFrame, as requested by the system. The variable “currentFrame” may change when evaluating an expression that references other expressions, where “globalFrame” always refers to the original frame of the expression.

Application Scripting

When pasting a template or Clipboard data, added the ability to select the start frame and the number of frames to paste from the source data. The default behaviour remains to paste the entire source data.

Bugs

Fixed a crash when selecting with the Transform tool.
Fixed an issue with writing XML CDATA tags adding extra lines.
Fixed the resulting image's size of a Radial/Zoom Blur.
Fixed the result of a motion blur with Mirror Edges on.
Fixed a crash when applying a Turbulence effect on an image out of the viewing window.

SDK

Added MO_Port.h to the list of exposed headers. This does allow navigating the network. Visit the source or destination nodes by iterating on the connected ports (use dstPortsBegin/dstPortsEnd, realSrcPort and MO_Port::node() to get the corresponding node. This can be used with a MO_BoundingBox3dCollector to get the bounding box of child modules by example).

Changes from 10.1.0.8185 to 10.1.5.8224

Additional Changes Merged from 10.1.0

Fixed the import of templates that created public function columns instead of hidden functions in the Xsheet view.

Expression

Expressions are now based on a JavaScript program, and the Harmony SDK can be used to add to the API available to the expression scripting environment.
Project file format are backward compatible, with the exception of expression. Harmony 10.1 and earlier will not understand the newJavaScript expression column.
Old expression syntax will convert to a JavaScript program at about 90%.
There is a single example in the SDK that shows how to enhance the expression environment and how to design a new module that correctly invalidates the expression columns when one of its attribute has been changed.
Included a new SDK example : SampleExpressionScript.

Application scripting

The scripting editor was significantly improved:
The left panel of the script editor now displays the list of .js files, instead of the list of functions.
The script editor now saves the file automatically before running a script.
The scripting runtime now reloads a script from the file system before running a script.
The process of running a script has been changed. Previously, all .js files were loaded in the scripting environment and all functions were available to all scripts. Now, the script engine will reload a single .js file and will call a function defined in that script file from a freshly initialized scripting global environment. There are no longer any scripting global variables left over from previously executed scripts as the scripting global environment is reinitialized each run. Potential side effects of multiple execution of the same or different script have been reduced.
Multi-file scripts will need to be modified. There is a new include("file.js") directlive to merge multi-files programs into a single JavaScript environment.
Script bindings to toolbar have changed. You must specify the JavaScript file name and the function to call, instead of just the function.
Script bindings to view toolbar does not yet work. Only the global scripting toolbar is working.
The global scripting toolbar now rely on a buttonlist.xml file to define its toolbar. The old "buttonlist" file is no longer used.
The script debugger is only created when actively asking for the debugger. Scripts that fail with errors outside of a debugger run cannot be debugged.
Script now blocks the UI thread, unless the debugger has been enabled. There is still the process and file API that initialize a local event loop, which are not safe.
Script that runs in the UI thread can be interrupted by pressing the Escape key. This interrupt the available script is available for as long as the script did not prompt a modal dialog itself.
No change to the scripting API.

SDK

Added CC_Transformation to the exported classes.
CC_Transformation encapsulates a matrix transformation and optionally, a deformation transformation, and manages the computation of those transformations.
CC_Deformation objects are now identifiable by their dynamic type. Use hasQuadmap or hasDeformation functions to identify the type of deformation a transformation contains.
MO_BoundingBox3dCollector now takes a Math::CameraTransformChain and a CC_Transformation in its constructor, making it available through the SDK.
This class computes the bounding box of branch in the network. Pass it to the desired root module in its accept function to compute the corresponding bounding box.
Added a new sample to the SDK (SampleMyModule). This sample shows how to:
Implement an MO_Module.
Implement a control interface.

- Pick and move the control.

- Draw it in OpenGL.

- Associate a Position2DAttr to the control.

- Use a surrogate when dragging a control to have temporary values.

- Create a command that will create undo/redo actions.

Implement a softRender

- Use a CEL_PixmapAreaRGBA16 and edit its value.

Ask for a larger input drawing window in softRender (in order to use values outside the Drawing view to proccess an effect. For example, a rising sun whose light enters an image before the sun enters the Drawing view.
Have a dynamically loaded attribute layout through an .xml.
Compute resolution independent values for attributes.
Compute the bounding box of the associated Read (Element, Drawing) module in Open GL.