What's New in 099 2019.10000

Spring 2019 Official Update - Branch 2019.10000

See also our Spring 2019 Official Announcement.

Full Unicode Support

To enable text support for most of the world's languages and better support our global community's needs, we took on the massive job of adding unicode. This extends support beyond the standard 128 ASCII characters and allows for script languages like Arabic, Chinese, Hebrew, Japanese, Korean, and Russian.

TouchDesigner's unicode overhaul is deep and extensive, it doesn't stop with simply rendering unicode characters more easily. You can use unicode characters almost anywhere you can type a string; directly into DATs, in python code and comments, in parameters and expressions, with the Text SOP and Text TOP, and more. Be aware a few places in TouchDesigner will still require standard alphanumeric characters such as operator, channel, parameter and attribute names.

As well, everyone can rejoice that filenames and paths that contain unicode characters will load and save properly in TouchDesigner now! (sorry it took so long...)

Physics Simulations

Rigid-body dynamics has been brought to TouchDesigner though the addition of a new group of Dynamics operators. Using the Bullet real-time physics engine, you can now add physics to your 3D objects by putting them inside new Actor COMPs. The system can then be acted on by Force COMPs or Impulse Force COMPs and the Constraint COMP. All of these components in your project run in a simulation managed by the Bullet Solver COMP which controls initialization, simulation, and speed of the physics system.

A key part of this intergration is bringing the animation and interactivity of CHOPs, TouchDesigner's nervous system, into the physics simulations. The Bullet Solver CHOP will pull the data out of any simulation into CHOP channels. This allows you to add, subtract, constrain, overlay, blend, or override data from any CHOP source with the physics simulation data, and then finally feed this back into the simulation using the Bullet Solver COMP's Feedback CHOP parameter.

The best way to get an introduction to these features is to check out the new OP Snippets for the Bullet Solver COMP which can be found under the Help menu in TouchDesigner.

Widgets and Binding

Over the past 2 years we have been designing the replacement for the old TUIK UI toolkit and now have the first version of Widgets ready to share with you. The original TUIK toolkit was created in TouchDesigner 077/088 and is now out of date, using tscript under the hood it was often difficult to customize and integrate into today's modern TouchDesigner workflows.

Widgets are a new set of components for building control panels, performance interfaces, applications UIs and systems. Designed to be modular and updatable, this new architecture is fully customizable and will be TouchDesigner's primary UI toolkit going forward. Widgets use python under the hood and enable easy access to python workflows like callbacks and extensions. This first release of Basic Widgets can be found in the Palette under UI > Basic Widgets. In the future there will also be a more advanced widget set for system builders.

The Widget COMP panel component is the base for building Widget UI systems. At this point it is similar to the Container COMP, but additional features specific to Widgets will be added soon.

One new aspect of Widget's design is that each UI widget now has a value parameter. This works well with modern parameter-based workflows in TouchDesigner and offers a number of advantages such as ranging, clamping and parameter types.

Furthermore, to assist with this parameter-based approach, a new parameter mode called Binding has been introduced. Sometimes parameter adjustments will happen by using the custom widget UI you build, but other times you want to be able to adjust the operator parameters inside the project from their parameter dialog directly. This has been troublesome in the past as adjusting a parameter manually on the operator would disconnect your UI's expressions or exports, and there was no easy feedback to the UI. Binding solves this with a simple parameter-to-parameter link maintaining bi-direction sync between them, controlling it from either location will update the both.

C++ and Custom Operators

Extending TouchDesigner using C++ to build your own operators has always been a powerful way to extend TouchDesigner. With the addition of a C++ DAT there is now a way to create a custom operator plugin for any family, TOP, CHOP, SOP, or DAT.

We are also excited to announce that C++ operators now run on all license types including Non-Commercial. We hope this will reduce the barriers to trying TouchDesigner for any C++ programmers or those using openCV and openFrameworks, and let beginners and gurus alike try the fabulous C++ plugins people have shared.

When removing the license limitations for C++ plugins, we wanted to encourage their widespread use by everyone and asked, "How can this be better and easier to use?". In short order, Custom OPs were born! Custom OPs have a new API allowing them to act like regular built-in TouchDesigner operators. These OPs can have their own custom names and now show up in the OP Create Dialog under a new 'Custom' tab. Any Custom OP plugin now looks, feels, and behaves like a built-in operator making them easier to use and share.


NDI is a great way to transfer video accross ethernet to other computers and devices, we see many of you utilizing it in your projects in a variety of ways. To enable transfer of audio alongside a NDI video stream, there is an Audio NDI CHOP to receive audio from a NDI In TOP and the ability to send audio output via the NDI Out TOP.

To further improve NDI support, a new NDI DAT can list all NDI sources found on the network. It includes a callbacks DAT to trigger custom scripts on events such as NDI sources appearing and disappear or a stream starting and stopping.

The Web Render TOP and Web Brower component, which use CEF / Chromium browser engine internally, are now available on macOS and all TouchDesigner licenses including Non-Commercial. It also accepts input from DATs.

For high-end AJA capture cards, there is now support for external reference sync input and using the 'failsafe' features on AJA Corvid 24 devices. Support was also extended to include the new AJA Kona HDMI.

Those using Blackmagic Design cards will find a new GPU Direct option for higher bandwidth. This also enables support of the new Blackmagic 8K Pro.

Stereolabs' ZED 3D camera for depth sensing and motion tracking has been added to TouchDesigner through 3 new operators. The ZED TOP gives access to the camera's depth and color images and can output point cloud data. The ZED CHOP returns channels for camera position and plane orientation. The ZED SOP scans real world objects and creates geometry from it.

RealSense support was extended to the new D435i camera, and we updated the RealSense SDK/API to fixes a number of bugs.

Better multi-NIC support has been added to all operators that use the network by setting a specific IP to listen to using new 'Local Address' parameters.

FBX and USD Geometry Support

The new FBX COMP and USD COMP tackle importing FBX and USD (Universal Scene Description) geometry respectively. Both import geometry and create an internal network structure that is editable and customizable. You can make edits to your geometry network and update the assets without wiping out your customizations. Furthermore, the included callbacks DAT allows modification of the network structure and final scene at the time of import, giving the tools to fix buggy assets, swap textures, add attributes and more.

Animations are handled on the 'Play' page of parameters, presenting familiar playback controls similar to the Movie File In TOP and Timer CHOP. The new trio of Import Select TOP, Import Select CHOP, and Import Select SOP can select texture, animation, and geometry mesh assets out of the FBX or USD file for use anywhere in your networks.

3D and Rendering Features

Nvidia Flow is an exciting new addition to create explosive fire and smoke effects through a volumetric fluid based simulation of a burning gas system. Controlling the 3 main factors of temperature, fuel, and smoke you can create anything from a misty evaporation over water to a massive mushroom cloud overhead.

Nvidia Flow is supported through 2 new operators. The Nvidia Flow Emitter COMP is an emitter which controls the amount of fuel injected into the system and sets burn temperature and amount of smoke. It also contains the material settings for elements of the simulation such as burn, smoke, temp, and fuel. Running the simulation and rendering the result is the job of the new Nvidia Flow TOP. Settings for the simulation here include damping and fading, vorticity, and burn control for each step of the simulation.

The Line MAT is an exciting new material that provides constant shading of lines with depth rolloff and color controls. It can provide smooth crisp lines with fine controls over line width and color. Additionally it gives numerous options for drawing points and end points, drawing vectors and arrows, line joint types, cap options, and more.

Another great new feature in the Phong MAT and PBR MAT is true displacement mapping. A 'Displace Vertices' option will displace vertex positions using a Height Map that can be specified from any TOP. Speaking of PBR, the Substance TOP which loads materials from Substance Designer has been updated to the latest SDK which now supports 4K PBR textures.

A new rendering feature called Quad Reprojection has been added to the Camera COMP. This allows an arbitrary section of a render, as defined by 4 points from a SOP, to be reprojected to fill the final output resulting in a full-resolution render for that sub-region.

To help with all your projection and mapping needs, we've added the following features. The Light COMP can now project an equirectangular texture out in all directions from the light's position using a new 'Point (Equirectangular)' projection map type. The Render TOP can now be set to render only a few faces of a cube map reducing the rendering overhead when all 6 sides are not required. The Render TOP also gained a UV Unwrap mode to render 'unwrapped', letting you manipulate textures and then rewrap them onto your geometry for use in projection mapping setups.

TOPs and CHOPs and DATs

Nvidia GPUs now support hardware decoding for H.264/H.265 videos. There is a limit to the number of hardware decode streams possible based on the GPU model being used. The Movie File In TOP has a new 'Hardware Decode' parameter on the 'Tune' page which enables it.

The Movie File Out TOP has been improved and now has an output type for creating Stop-Frame Movies. The movie output option also lets you create .gif files now.

Blob Track TOP was overhauled and background subtraction was added via a 2nd input to speed up performance massively.

Finally the Speed CHOP, Spring CHOP, and Slope CHOP all got a Per Sample option to operate on samples instead of channels, the Shuffle CHOP is no longer needed to shuffle and then un-shuffle!

A couple of useful new DATs can be found in the OP Create Dialog. The Lookup DAT will lookup values between a DAT and a lookup table, we're sure this will become as handy as the Lookup CHOP and Lookup TOP have been. You will also find the Parameter DAT useful for getting parameter information from any OP, especially for parameters whose values are strings.

Workflow Features

Internal Operators (iop) and Internal Parameters (ipar) shortcut objects can be defined on the Common page of all components. Internal Operators provide a simple shortcut to a frequently-used operator within a component, from anywhere in that component. Internal Parameters provide a simple shortcut to parameter collections within a component, from anywhere in that component. They act like persistent local variables.

Offline documentation is now included with the TouchDesigner installation. When there is no internet connection available, help buttons will automatically use the offline help.

Parameter Rollover Help pops up on parameters by just holding down the 'alt' key (or 'option' on macOS) while you rollover a parameter's name!

Operator Snippets have dozens of new examples for you to explore, and you can get at them faster if you right-click on a node, or right-click on the OP Create dialog.

For better file management, CrashAutoSave.toe files are now suffixed with the project's filename and the default preference for filename incrementing is now On and Save to Backup Folder.

Content and Tool Updates

The Palette has had a number of new tools added and many improvements and updates made to some of your long time favorites.

  • Widgets are located in the Palette under UI > Basic Widgets.
  • Palette:treeLister added to the palette in the UI section.
  • Palette:moviePlayer has new mouse interaction options, imagee zooming, 'Go Back' to previous, and a new movie engine for better scrubbing and play/pause control.
  • Palette:presets recevied an update and now has a preset values inspeciton DAT, the ability to add/rename/remove parameters from presets, and numerous bugfixes.
  • Palette:probe has better GPU cook time reporting and you can now zoom around large networks.
  • Palette:kantanMapper has many bugs fixes and performance improvements, though the main feature set remains the same.
  • Palette:camSchnappr has new autoblend features, bug fixes and improvements.

New Python

Following are some of the major improvements to python support for this release.

Search External Python Path Last in the Preference Dialog gives control over the order custom python module paths are searched, either before or after TouchDesigner's builtin modules.

Python Custom Parameters and the ability to evaluate them as PyObjects.

For working with Custom Operators, they now have the ability to create Python paramemters using appendPython() and can evaluate a Python parameter directly into a PyObject for use with Python's C API using getParPython().

Page Class Page.appendPar(name, par=Par) Create a custom parameter matching the specified parameter as closely as possible. Following members are copied: size, style, label, default, defaultExpr, min, max, clampMin, clampMax, normMin, normMax, enable, readOnly, password, menuNames, menuLabels, menuSource These are *not* copied: value, expression, binding, order, styleCloneImmune, startSection

For Example p = op('geo1').par.tx ; op('base1').customPages[0].appendPar(p.tupletName, par=p)

DAT Class received some well-deserved love.

  • DAT.findCells() and DAT.findCell() python methods to search cells by value.
  • DAT.replaceRow / DAT.replaceCol replace a row/column in a table.
  • DAT.appendRows() / DAT.appendCols() append multiple rows/columns to a table.
  • DAT.deleteRows() / DAT.deleteCols() delete multiple rows/columns in a table.

Color Class - Added tdu.Color class which holds a single 4 component color (R, G, B, A).

Prim Class - Added Prim.direction returns a normalized vector pointing from the centroid of the SOP to the centroid of the primitive.

SOP Class - Added support for, reutrning the center of the SOP.

Wave CHOP - Added much requested support for .chanIndex and .sampleIndex

Release Notes

These highlights discussed here are just a fraction of the great additions to this new Official version. Please refer to the Release Notes for more details on everything that has changed.

Previous Builds

See What Was New in Official 099 Branch 2018.20000 last year.