Release Notes

Feature Summary

Custom Parameters

Custom parameters let you create new parameters on Components, Script operators and C++ Operators. They appear on new Parameter Pages of the Parameter Dialog. This will radically improve the way you make things! You can export to custom parameters, put expressions in them, and link them to interactive controls inside customized Container components. You will be able to build things where users less-frequently need to go inside the component to figure out what they do. Where in the past you may have stored and states in tables or CHOPs, you may now choose custom parameters to hold some of that data/state info. They have the advantage also that they can be one of numerous data types - floats, integers, strings, OP paths, file paths, menus, binary on-offs and pulses.

Parameter CHOP (replaces the Fetch CHOP) - outputs the values of custom parameters. It supports multiple operators with patterns, and you can re-name the channels.

Rendering

Render TOP - There is a new option to render out Dual-Paraboloid or Fish-Eye renders. These are lower quality than CubeMap renders and require well-tessellated polygons for large objects, but are faster as they require less render passes to complete.

Projection TOP takes a Cube Map created with a Render TOP and converts that to a fisheye projection suitable for domes, and a “equirectangular" projection, u-v is latitude-longitude, suitable for spheres. This produces superior-quality as it's based on the cube maps.

Oculus Rift

Oculus Rift was upgraded use the SDK tversion 0.6.0.1, which now requires Runtime 0.6.0.1 or later. This SDK version makes setup much simpler and hides the concept of Direct To HMD or Extended Mode from the application.

Consequently the Oculus Rift Component has been removed and replaced with an Oculus Rift TOP since window management no longer needs to be done by TouchDesigner. The TOP talks to the Oculus directly.

Window Placement is at Dialogs -> Window Placement (Alt-w). Here you can see a list of Window Components, open/close them, choose which one opens in Perform Mode, open their Parameter dialogs (P button) or go to their networks.

It is harmonized with the parameters of the Window Component: What you see/control in Window Placement is a summary of what you see/control in all the Window Components of your project.

Note: The parameters of the Window Component related to opening/closing windows, which windows open in Perform Mode, etc. have been altered. It now uses separate on/off pulse buttons to open and close the window.

The Window Component has a new parameter (Redraw) to inform a window to not draw anything. It is useful when no output is needed on the main monitors, for example when you use the Oculus Rift, when your system only outputs data via the network operators, or via the Video Device Out TOP, or other processes that do not render, such as audio processing or driving LED strips that don't use the video outs.

Palette and Snippets

The Palette is completely replaced with new components, except for the legacy TUIK2, and is the start of a new-wave of useful tools made using custom parameters as the front-end. Some palette components are:

CamSchnappr – new improved version in palette as a specialized Camera component

stoner is vastly improved

probe is a visual cook analyzer in the palette under Tools. Read the readMe DAT inside it.

OP Snippets – There are 10% more new examples, but there is no easy way yet to see what’s new.

Operators

Pattern CHOP - Generates a sequence of samples in a channel. Unlike the Wave CHOP, its focus is generating arrays of samples and has no reference to time (seconds or frames).

Composite TOP – There are 30 new blend modes in the Operation menu! See also blendModes in the palette. The Composite TOP has an option to swap the operation order, and a Preview Grid mode to see all 47x2 possibilities at once.

new FFMPEG library - Movie File In TOP, Video Stream In TOP and Movie File Out TOP were upgraded to the newest FFMPEG Release/2.6 for reading image and video files, which includes support for video codecs: .gif playback and H.265 playback (H.265 has smaller files, longer CPU encode time and decode time).

new TIFF library - Movie File In TOP and Movie File Out TOP were upgraded to use the TIFF library version 4.0.3. Also saving .tif files from all TOPs via the right-click menu use the latest TIFF library.

Movie File Out TOP - New 'Encode Test Mode' parameter to allow testing encoding performance without writing anything to disk. Useful to check the CPU and GPU usage of encoding without the disk writing interfering with the measurements.

Touch Out TOP - Default video codec is now HAP Q instead of uncompressed.

CPlusPlus TOP - New mode that allows writing directly to CPU memory instead of working in OpenGL to output a texture. New example added for this usage mode. TOP_OutputFormatSpecs class now contains colorBufferRB and depthBufferRB members for the GL renderBuffer indices.

Sync Out CHOP - No longer needs to specify number of attached clients. Instead it keeps track of how reliable each one is before deciding to wait for it or not. Option to automatically ban clients. Detailed per-client info, including filename, ip, machinename, operator path.

Joystick CHOP - New Player 1-4 menu entries which use XInput compatible devices such as the Xbox Controller. This ties the node to a player number instead of a particular device, so the device that is used is based on the player number that gets assigned to it by the OS. This mode also gives better results for the trigger buttons on the Xbox controllers. Also added new parameters to invert Y axis of some channels. New optional 'Connected' channel can be output. New 'POV State Array' parameter which allows outputting descreet states based on the position of the POV pad. Range for all the Axii will now be [-1, 1] instead of [0, 1] by default.

Function CHOP - new options convert decibels (dB) to and from Power and Amplitude.

Filtering the Node Hierarchy with OP Find

The new OP Find DAT is very useful for scanning through node hierarchies and gathering / filtering information about OPs. For each node that meets your criteria, you can choose from built-in columns that are output in the table, or you can run a script to generate other data in the output table, or for that matter, alter anything in TouchDesigner. As Markus Heckmann says, “Using OP Find feels like you’re cheating”. See OP Snippets. You can filter based on operator types, parameter values or expressions. You can do pattern matching on OP names, paths, comments, DAT text, or OP type, with a python callback to further restrict your search.

Wiring Nodes

Wiring Nodes is easier: If an existing node A is wired to another node B and you want to replace A with another node C, click on the output of C and move the mouse to anywhere on the A-B wire and click on the wire. C is now wired to B, replacing A.

General

Added support for Hap Q with a compressed alpha component.

Tags - lets you add text strings to operators, which you can then search for using findChildren() or the OP Find DAT.

Internal Shortcut is a component parameter (like the Tscript Path Variable) that can be used inside components as ext.shortcut to identify the base node inside any component in a uniform way, making it useful for components that are copied, replicated or cloned.

List Component is a new generic component for building interactive lists of multi-column items - where each item is an array of gadgets. You have to customize it internally using python. It is under-documented now, but examples are in the Palette and OP Snippets, and more adaptable examples are coming soon.

Monitoring Startup Errors - TouchDesigner will show warnings, errors and other messages that occur during startup. You have to turn it on in Edit -> Preferences -> Startup Errors.

Panel Interaction via Python

interactMouse() and interactTouch() are a new way in Panel objects for virtual interaction with panels. The are new python methods of sending down, move, up, hover messages to panels.

Video Stream In TOP - Fixed issue which prevented some valid URLs from loading. It now checks all URL prefixes before suffixes, so e.g. rtsp://111.111.111.111/usermovie.mov is correctly identified as a streaming URL

Build 62160 - Jan 10, 2017

Bug Fixes and Improvements

Build 62070 - Dec 05, 2016

New Features

DMX In CHOP - Added Format option 'Packet per Channel (All)'. This will create a channel for each message received, instead of only the last. The number of channels created per cook will depend on dropped frames, etc.

Build 61700 - Oct 6, 2016

New Python

OP.selected.current.picked.expose flags now create proper dependencies. That means you can detect when the operator's node flags change using python expressions, which will always cook when the flag changes.

OP.cpuMemory reports approximate CPU memory required by the operator.

Palette

New components added: moviePlaylist, movieDemo, audioAnalysis, and sweetSpot. Minor improvements to numerous other components. If you are using gal, you can replace it with the current.

Build 61480 - Aug 31, 2016

New Features

New OpenColorIO TOP - can be used to apply 3D lookup tables to TOPs. OpenColorIO (OCIO) is a complete color management solution geared towards motion picture production with an emphasis on visual effects and computer animation. The TOP uses the OpenColorIO SDK. The lookup tables are generated externally and loaded into the TOP which applies further controls.

A new movies folder in Samples/Map (browse from a default Movie File In TOP) contains five short movie loops.

New Python

OP Class - Is now hashable allowing it to be used as dictionaries keys, etc.

tdu.Dependency() notifies its targets when deleted.

Palette

New component virtualFile.tox added to palette, which lets you embed files within a .tox or .toe file, and then lets you read them with a vfs: syntax in OPs like Movie File In TOP, Audio File In TOP, etc.

Build 60880 - Jun 23, 2016

New Features

Adaptive Homing is new in SOP and Geometry component viewers, and there are new grids for SOP and Geometry viewers when they are enabled in their Display Options. Adaptive Homing of 3D viewers will assure you always see your 3D geometry in full, well-framed view, no matter how they are transformed, scaled and animated.

You can turn on/off Adaptive Homing manually via the right-click menu on the SOP and Geometry component viewers.

As before, you can turn on/off Grids manually via the right-click menu on the SOP and Geometry component viewers -> Display Options.

You can turn these on en-mass. In Dialog Preferences under 'Geometry' page (both off by default):

Adaptive Home by Default - Turns on adaptive homing feature for all newly created OPs with a 3D Geometry viewer.

Grid Visible by Default - Turns on a new XY grid for all newly-created SOPs and Geometry viewers.

Clicking the Reset Viewers button goes through all you SOPs and Geometry components in your current process and sets their viewers to the values chosen by the above two options.

Camera COMP - New IPD Shift parameter to shift the camera for stereo rendering. This should be used for Cube Map renders instead of a simple translate in X on the Transform page.

Palette

New moviePlayer - usable in 4 modes, controlled through its parameters:

Drag-drop movie/still file onto it to preload and then crossfade to new media file.

Set the File parameter and other settings like speed, then press Play - this will pre-load without impact, and then crossfade to the new movie.

Give it a folder of movies/images and it will let you select any movie number and do a transition to that movie, or just play through them un-attended like a playlist.

Do the same with a DAT, one row per movie/still file, that can contain more controls like crossfade/fade-in times. Again play it right through, or it can wait for you to click Next, etc.

Clicking on image scrubs current the movie.

probe - In new version you put the component anywhere and it just does the rest (putting it in / is OK). It also has parameters on the component so you can place it in a better spot when in Perform Mode. A bug was fixed in TouchDesigner that made the prior version crash.

Vive OpenVRgeoControlPanel a Vive version of geoPanel - modernized some of the gadgets. The scene is a jumble of gadgets deliberately - no art intended.

oculusRiftSimple - accepts cube-map movie, equi-rectangular movie, or for proper stereo, any set of Geometry objects to render from two cameras.

arcBallGeometry and arcBallCamera have auto-rotate - switch it on via parameters on the Camera and Geometry object inside. Then click 'n flick on the viewer (like it was in PRISMS).

gestureCapture - new component that captures (records) multi-channel gestures and holds them per-gesture as keyframes, a SOP line or smoothed channels, the latter including derived information like distance-travelled, direction, velocity. Can be fed directly to other tools like particlesGpu.

particlesGpu - new version.

New feedbackEdge - soft or psychedelic image feedback.

multiMix - experimental component to help mix multi-layers, this will evolve over time.

Bug Fixes and Improvements

Fixed crash when dragging some components from the palette (For example Probe.tox)

Render Select TOP - Fixed bug where if this TOP was used on a MAT directly it wouldn't generate mipmaps, resulting in incorrect rendering unless mipmapping was disabled.

Build 59770 - Apr 01, 2016

New Features

Bug Fixes and Improvements

Fixed bug where tdu.Vector *= tdu.Matrix would treat the vector as a position and apply the translation to it incorrectly.

Fixed recent issue in build 59620 in which saving a component with 'Save Backup' disabled, would not save its contents. However, saving a parent container component will still examine this parameter for children.

Fix for nested external component saving.

Clip Blender CHOP - Triggering during Queued State will now begin the triggered clip as soon as the queue state returns to zero, instead of when the current clip is finished.

Build 59620 - Mar 24, 2016

New Features

new "preset" component in palette lets you save/recall presets for parameters in any of your components. You put the preset component into your component, press its Initialize button, and the controls appear on a new parameter page of your component where you can save and recall presets. The preset component was installed in the particlesGpu palette component.

camSchnappr can now be used with multiple projectors. You will need one camSchnappr per projector. Each CamSchnappr will output a blend mask.

Stoner now also outputs a uv displacement map which can be used in conjunction with the Remap TOP. The advantage here is that Stoner itself can be removed from the network or disabled to gain performance. Also Stoner project data can be stored in a separate Component and recalled.

Backwards Compatibility Issues

That means loading a previous tox file with this option turned off, and resaving the component, will result in loss of data if the external tox file the component refers to is no longer available. This has been fixed in the next build, and only applies to this build.

Build 58910 - Feb 08, 2016

New Features

New Environment variable TOUCH_MAX_PROCESSES now sets the maximum number of TouchDesigner processes that can run simultaneously.

Leuze ROD4 CHOP - New CHOP that connects to the Leuze ROD4 laser scanner via TCP/IP. Blob Tracking mode allows for turning the measured distances into blobs for use as an interaction surface.

Blob Track TOP - Now supports non-Nvidia GPUs for the mode where background detection isn't used.

Editing of cells restricted to left mouse button only to faciliate context menus.

New Python

Par.menuSource an expression that returns an object with .menuItems.menuNames members. This can be used to create a custom menu whose entries dynamically follow that of another menu for example. Example: p.menuSource = "op('audiodevin1').par.device". Note the outside quotes, as menuSource is an expression, not an object.

ui.clipboard to get/set the operating system clipboard contents as text.

getting Par.val now returns raw value for String parameter types, not its expression.

FPS counter in designer interface no longer cooks when in Perform Mode.

Fixed error when setting a promoted member on an Operator would always set or create it in the first attached extension object. Now the member must previously exist in a specfic extension object before it can be set.

Movie File Out TOP - Fix bug where 'Add Frame' button wouldn't work if pressed multiple times on the same frame (or within a script).

Bug Fixes and Improvements

Fix error when C++ version OPs lose their parameter values when saving and reloading in later versions.

Fixed some lost panel mouse failing, when the panel was displayed in a Window Component.

--

Build 58090 - Dec 09, 2015

New Features

Extensions now allow naming (a new Extension Name parameter per-extension), instead of relying on searching by class type. You can name an extension Player and refer to it as ext.Player. NOTE: This also allows you to have two instances of the same class in any component, like Player1 and Player2 instanced from a class Player.

Make sure that the default text editor is not TouchDesigner. This avoids opening python files with TouchDesigner if the user doesn't have python installed or a text editor set and TD is associated with python.

fcur and timecur tscript command no longer echo warnings to the textport.

Build 56020 - Oct 09, 2015

New Features

Multi Touch In DAT new columns: downu, downv, which hold the u and v values when the finger is first pressed. These new columns pass on to the Render Pick DAT with all the other columns, making them available to the Render Pick DAT callbacks.

TouchPlayer now hides built-in overlay menu when licensed with Commercial or Pro, and started with user toe file.

Bug Fixes and Improvements

Fixed source children deleting, when cutting+pastings components with Replicators.

Bug Fixes and Improvements

Backwards Compatibility Issues

BACKWARDS COMPATIBILITY WARNING - RealSense CHOP - The channels for the hands have been renamed. You may need to adjust networks for the new names. E.g wrist_l:tx -> hand_l/wrist:tx

---

Build 55460 - Sept 24, 2015

New Features

Render Pick DAT - new columns selectedpath, selectedu and selectedv will hold and update the attributes of the first geometry object you clicked on, even if you drag off the object. This applies to the new Always strategy, which intersects the rendered image for all active rows whether the select column is on or off.

.interactMouse() and .interactTouch() now update the Multi Touch In DAT and its callbacks when they point to the same panel.

An example will be in the palette next build, but you can get it here now: GeoPanel.toe, and its doc on wiki doc at geoPanel.

Build 55060 - Sept 15, 2015

New Features

Panel CHOP - For cases where on-off-on events occur quickly in succession: So nothing gets lost, it will make sure the parameter values are on and off for at least one frame. (Added a queue to Panel CHOP to catch events that happen within the same frame. Default queue size of 10. Queue size is needed so that CHOPs that are not cooking don't get bogged with old events when data is requested again. This new option is On for builds 55020+, Off for earlier builds.

Render Pick DAT - callback now passes a single list with multiple events. These are now called *after* any input DAT mergings. Callback also now includes event.select .selectOffToOn .selectOnToOff (works with Render Pick CHOP as well). See the multiTouch component in the palette for an example.

Backwards Compatibility Issues

Build 53040 - Aug 06, 2015

New Features

Joystick CHOP - New 'POV State Array' parameter which allows outputting decreet states based on the position of the POV pad. State order is center, up, down, left, right, upLeft, upRight, downLeft, upRight.

Joystick CHOP - Range for all the Axii will now be [-1, 1] instead of [0, 1] by default. Old files will load up with the previous old [0, 1] behavior though.

New Python

Position,Vector,Matrix repr functions now same as str, so values visible when printing list of them.

New global commands:

printErrors(Op=root, ...)

This function prints errors from the specified operator and all its children.
It passes any additional arguments to the OP.findChildren() method, which can be used to filter which children are examined.

Fixed crash when expanding all parameters on node with rebuilt custom parameters.

Fixed crash when certain parameters referenced themselves in loops.

Backwards Compatibility Issues

BACKWARDS COMPATIBILITY WARNING - Render TOP - The 'Transparency Passes' parameter was doing 1 more than requested. Existing files with constant values in that parameter should upgraded with the value changed automatically. Exports or expressions will need to be updated though (add one to the value).

Build 51780 - July 09, 2015

New Features

Multi Touch In DAT - callbacks now pass a single named tuple including all values found in the ID table, using new callback names. (backward compatible)

Text TOP - New 'Legacy Parsing' parameter, disabled by default, to control the old Text TOP's behavior of parsing \t, \t, [] and {} positioning, and \XXX character code specficication. New work should use the 'Specification DAT' to position strings and python to do \t,\n and character code creation.

RealSense TOP - new operator that gets image data from Intel’s RealSense sensor.

Touch In DAT, Touch Out DAT - Now supports TCP/IP streaming protocol. This allows for sending much larger amounts of data than the previous only Message (UDP) based protocols.

Transform TOP - New 'Limit Tiles' parameter can be turned off to allow for unlimited tiling. Old behavior would be to have this on.

Window COMP - 'FPS Is Half Monitor Refresh' parameter converted to 'V-Sync Mode' parameter. Original two modes are still there, with a new mode to disable vsync entirely. Useful for some case such as using Oculus Rift with a UI window still rendering (but with vsync off).

Fixed cases where references to parameters which contained references to storage, wouldn't re-cook on change.

Folder DAT - Now works correctly when using 'Limit Depth' with a very complex directory structure with many sub-folders.

Folder DAT - The cook times of this node when the target folder changes should be dramatically lower now.

Fixed issue where a new node's file dialogs would always open in the Samples foldereven if a different folder has been browsed to for other nodes of the same time.

Fixed some cases where File Save/Open dialog wouldn't open in the expected filesystem folder.

Movie File In TOP - Fix some playback issues that can occur when 'Use Latest On Timeout' is used and a frame read timeout occurs.

Movie File In TOP - Fix some movie seeking issues that were introduces in the 50000 series builds.

Backwards Compatibility Issues

BACKWARDS COMPATIBILITY WARNING - Transform TOP - The X and Y rotation parameters have been removed as they didn't get desirable results.

Build 50880 - June 22, 2015

New Features

Noise TOP - New Aspect Correct parameter to control squeeze/stretch of the noise for GPU noise, when using non-square aspect ratios.

Composite TOP, Add TOP etc - New Justify Horizontal and Vertical parameters to make positioning smaller images within larger ones easier. Active when using 'Native Resolution' overlay fitting only. This means you can easily place a smaller image to the left, center or right side of the larger image.

CHOP graph options changed to: All Channels in a Single Graph, 1,2,3,4,10,20,50 (With default of 10) Removed option to have unlimited number of graphs.

Leap Motion TOP now defaults to first camera, and prompts user to turn on 'Allow Images' in control panel when no cameras found.