Login | Register 
Products Applications Downloads Features Wiki forum Store

Release Notes/077

From Derivative wiki

Jump to: navigation, search

Release Notes Archive
Versions: 067 - 068 - 069 - 071 - 077
Builds: 88 - 143 - 281 - 387 - 538 - 786 - 892 - 1144 - 1403 - 1440 - 2505 - 3700


The latest official build is TouchDesigner 077 Build 3712
The latest experimental build is here: Experimental



Contents

TouchDesigner 077 Release Notes

The Release Notes for all released builds of 077 are below.

NEW: Release Notes for the recent Experimental Builds.


Build 3700 - Sep 29, 2009

These are the release notes for the Sept 29, 2009 Official build 3700. The previous Official build was 2505 in May 2009.

Note: Build 3712 of October 13, 2009 fixes defects reported in 3700. See end section for detail.

Build 3700 contains many practical features that were added for those using TouchDesigner in production and art-making projects.

TouchDesigner 077 is "beta" although it's very solid and rich as a product. Our next official build will be the final, "gold" release of 077, so look for that in a few months.

As you scan through these improvements to 077, know that many of them are in response to the production you TouchDesigner users are doing, plus some things we anticipate you will find very useful as your TouchDesigner skills improve. Our goal is a for is a tool that can make "all things interactive".


Palette components

The Palette Browser holds a collection of components we've included with TouchDesigner. You can use the Palette as a learning tool by examining how these components are built. This release includes some new and updated components for you to try.

  • New Image Shaders - new GLSL TOP image effects are found in Palette > Shaders. It includes:
    • Twirl - Rotates pixels around a point.
    • LumaGlyph - replaces colors depending on their luminance level with color from a different texture.
    • Dent - stretches or collapses a region of the image as in a carnival mirror.
    • Dilate, Erode, ShredPixel, LightTunnel.
  • New Image Filters - Image filter components are TOP networks. New image filters are found in Palette > Video > Filters.
    • Pixellate - Makes the image appear blocky.
    • Pointillize - Renders the image in a pointillistic style.
    • RGBContrast - Adjust contrast of an image independent for red, green and blue.
  • Updated TUIK Gadget Library - The TouchDesigner User Interface Kit makes it easier than ever to build custom panels.
  • Equalizer - a 6-band parametric equalizer component. After you connect a CHOP audio stream to this component's input, you can adjust up to 6 frequencies. Multiple outputs give you separate channels for audio output and for RMS power for each selected frequency. You can find this in Palette > Tools > Equalizer.
  • Wallpaper Groups - There are 17 mathematical types of symmetric tiling. This component creates all 17 "wallpaper groups". See a movie of an example of the p6m tiling.

To make the browsing of components easier, in the parameter dialog, press the bulls-eye button to see only the non-default parameters.

The Palette can also hold components that you have built and wish to reuse often. Just drag your components into it.

New Keyframe Animation Pipeline

The animation pipeline in TouchDesigner has been completely re-designed. It is the first stage of a multi-stage animation system upgrade.

  • Check this new Keyframe Animation article explaining the parts of the pipeline and how to use them.
  • A new Keyframe Editor dialog is completely new user interface for animating.
  • A new Keyframe COMP component type used to hold channel and keyframe data.
  • Start animating from the parameters of your operators. Read Keyframe Animation for details.

Open Design

The keyframe system is DAT-based, making it fully open and flexible. In TouchDesigner, DATs are used for building UI, scripting, table management, variables, macros, HTML access, XML parsing, expression evaluation, ramps for the Ramp TOP and even for generating 3D in SOPs.

Keyframes are contained in DAT tables. The new Keyframe CHOP uses these DATs to interpolate keyframes and generate channels of samples. Being exposed means you can also generate keyframes procedurally or load keyframes from other software. So the Keyframe CHOP is now a converter from a DAT table of keyframes to a CHOP of multi-sample channels.

The editing of Keyframes is achieved through a new special-purpose Graph panel component type.

The new keyframe command can add, remove, set keyframes, as well as list channels. convert a CHOP into a keyframe table.

Alternate Panel Design

There is an alternative way to build control panels. You can now connect panel components in a hierarchy within one network by connecting their top/bottom node connectors, similar to how 3D object components are connected in a hierarchy. When connecting nodes this way, the top node in the hierarchy contains all the panels that are below it. (The "classic" way is to put panels inside other panels.) This allows the user to create an entire control panel in one network, and alleviates the problem of deep panel networks when building user interfaces.

For examples, look at any component in the Palette under Video -> Filter (left side of interface).

TUIK revamped

TUIK TouchDesigner's User Interface Kit now makes it easier to build custom interfaces by assembling its many gadgets components into an interface while working in a single network.

TUIK has been fully revamped to utilize the new panel parenting described above. TUIK was also simplified to allow gadgets to be created without first putting them into a container panel.

TUIK F10 shortcut - When you roll over a TUIK component node in the network editor, you can press F10 to cycle through (1) the control panel view, (2) the operator view of the out1 CHOP, and (3) the define DAT that allows you to edit the gadget's settings.

3D Geometry Instancing

There is now powerful instancing in Geometry components. By passing transforms and instance IDs to the shader via CHOPs, each instance can be rendered differently. This method of instancing uses GPU hardware-acceleration (requires a Geforce 8000 or later). One SOP in a Geometry object gets sent to the GPU, but it can be rendered many times, each with a different transform, and using GLSL shaders, each can have a separate shape, colors and textures.

The new Instance page on Geometry components -

  • Instances can be transformed using a CHOP's channels (one sample per instance).
  • A parameter determines the number of instances, or it can be controlled by the number of samples in the CHOP.
  • Instance ID (instance) is an attribute available to MAT shaders.
  • Any code in the vertex shader can customize the instance based upon the instance ID the uniform parameter.
  • the instance ID of a picked surface in a render is returned by the Render Pick CHOP.
  • Instances are only visible in a Render TOP or Render Pass TOP. Geometry viewers use a slower method to emulate the instancing.

UI Changes

  • Double-click the network background to bring up OP Create dialog
  • OP Create dialog now has a help summary at the bottom for each OP type. Then press RMB to get more detailed wiki help for each node type.
  • fast switch to Perform mode and back to Designer Mode - Click the [^] icon on the left of the top Layout bar to switch to Perform mode (see Window Placement). Then press the Esc key over the perform window to flip back to designer mode.
  • Stop Playing when Minimized, found under Edit -> Preferences -> General, now functional. When this preference is set, audio does not play either.
  • info on connecting lines - Middle-click on a ----->---- connecting line to get useful info about the 2 nodes it connects (exports, node references etc).
  • Dialogs -> Console - It combines all startup errors with the console log, and is more informative than before.
  • When Viewer Active is ON, the input and output connectors are visible when you mouse near them, and you can now connect inputs/outputs.
  • DAT tables navigation
    • You can now use the Tab key to jump between cells of DAT tables.
    • Up and down arrow keys will move between rows in spreadsheet cells.
  • new Preference Background Color for Objects, SOPs and Materials that affect all Geometry/SOP/MAT viewers. The default is 10% grey.
  • 10-bit color support added to windowing - The results are very noticeable on new 10-Bit Color Displays. The one draw back is that 10-bit color means there is only 2-bit available for alpha. (This is unlikely to be an issue though since TouchDesigner does not use blending equations that use the Destinatation Alpha as a factor in the blending (remember that the visible window is the only thing that is 10,10,10,2. TOPs continue to be 8,8,8,8 or 16,16,16,16, etc. and any drawing done into the window starts off at at least 16-bit while its rendering.)
  • Function keys in the Application Shortcuts table each have a unique identifier for overriding with custom scripts.
  • Default timeline length is 50 sec - If you started with a .tox file, it was 10 seconds.

CUDA now in FTE

The NVIDIA CUDA TOP is now available for use in FTE (must turn on Expert Mode operators to see it). It is no longer a Pro-only feature.

TOPs

  • inspecting exact pixel values in TOP viewers - on TOP Viewer, RMB -> "Display Pixel Values" gives you the exact XY, UV, and RGBA values of the pixel under the cursor.
  • Render TOP - proper transparency through multi-pass depth-peeling - The Render TOP has a new feature for rendering transparent objects in proper depth order. It is multi-pass and, for every pixel, renders the closest surface in the first pass, then the second-closest surface in the second pass, up to the number of passes specified by the parameter. It can be enabled on the 'Advanced' parameter page.
  • smoother sampling in all TOPs with Mipmaps - When you shrink an image, one or more pixels are combined to get each new pixel. Previously you had the choice between Nearest Pixel and Interpolate Pixel sampling modes, which don't take into account all pixels when scaling down. Now all TOPs can sample their input as Mipmaps, which gives better averaging of pixels when images are made smaller, either by reducing the image resolution, or by shrinking via Corner Pin or Transform TOPs.
    • On the Common page, the Input Smoothness menu has Mipmap Pixels, which affects the image output from the TOP.
    • On the Common page, the Viewer Smoothness menu has Mipmap Pixels, which only affects how you see the image in the node viewers.
    • The Default has not changed - The sampling behavior is still the linear Interpolate Pixel mode.
    • See Texture Filtering.
  • Movie In TOP - asynchronous http opening over network - now uses the parameter 'Disk Open Timeout' for network files that are downloaded via http://.
  • new Cube Map TOP builds a texture map in the format needed for cubic reflection maps. It accepts a vertical cross image, or 1 input per side of the cube.
    • Phong MAT can now use the Cube Map TOP for reflections and support was added for per-pixel normal mapped reflections.
  • new 2D Texture Arrays in TOPs - Texture Arrays can be created in the Texture 3D and GLSL TOPs. 2D Texture arrays are much like 3d textures, except they are sampled using a non-normalized w texture coordinate. (i.e, 0 is the first slice, 1 is the 2nd slice, 2 is the 3rd slice etc.). Texture arrays also don't support blending between different slices when sampling at coordinate that falls between two slices. This a much faster alternative to 3d textures when you dont need the inter-slice blending. Also the non-normalized coordinate is much more intuitive to use. Requires Geforce 8000 series or later.
  • Render TOP - new GLSL page to the Render TOPs which allows users to pass TOPs (samplers) and uniforms into GLSL MATs in a global fashion, instead of having to bind them to each and every MAT in the system (useful for many multi pass techniques).
  • GLSL TOP and GLSL MAT shaders can now have int and bool (boolean) uniforms, the values from the parameters will be converted internally for bools, anything not equal to 0 is true. For int the parameter value will be rounded.
  • getting alpha in RGB-only codecs movies using the Movie In TOP - This is a way of encoding alpha into RGB-only formats like H.264. and several other QuickTime formats. You need to construct the movie with alpha in the bottom half of the image (RGB = AAA), and the movie is double the height resolution.
  • GLSL TOP now supports array uniforms (set using CHOPs).
  • Locking 3D Textures and 2D Texture Arrays now supported - However it can be very memory intensive and the file saving process may run out of memory when doing it.

CHOPs

  • Audio Out CHOP level clamping - new 'Clamp Output' clamps the output between -1 and 1 to avoid blown speaker effects.
    • Goes quiet when the input switches to 0 channels.
  • Select CHOP multi-CHOP merge - now merges channels from multi-CHOPs like the Merge CHOP, and renames channels like the Rename CHOP.
    • new Automatic Prefix option builds on the 'Multi Select' behavior of prefixing all fetched channel names with their parent node's names.
  • Rename CHOP behaves more like "rename" in the Select CHOP.
  • CHOP units include "Fraction" - added 'Fraction' to several more CHOP start/end/width unit parameters: Composite, Cycle, Delay, Envelope, Filter, Lag, Limit, Noise, Resample, Shift, Spectrum, Stretch, Trigger, Trim. It is expressed as 0-1 range.
  • Perform CHOP timeslice_step channel - The new channel, Timeslice Step is the number of frames that Touch stepped forward for the current cook. It will be 1 when running 1000/$FPS msec or less, etc. It is the length of the timeslice in frames. It is related to the cook channel.
  • TOP to CHOP delayed download - The new option enables a delayed download from the GPU, which is faster because it doesn't stall the rendering. By default, the TOP to CHOP is done immediately - the image is copied from the GPU to the CPU, which interrupts the pipeline on the GPU, forcing the GPU to be idle (there is a slight delay of up to 5 msec).
  • Object CHOP Output Range - The timeslice option now outputs a real timeslice. This can be used to process the transforms coming from CHOP-driven geometry objects with full continuity. The drawback is that it will cook the geometry hierarchy for every intermediate frame since the last cook.
    • new 'Smooth Rotation' outputs a smooth rotation curve (without graphical jumps at 0, 90, etc).
  • Merge CHOP - removed 'CHOP' parameter (uses wired inputs only).
  • Audio Play CHOP command - The audioplay command - index of -1 now specifies all samples as described in the help.
  • MIDI In Map CHOP is much faster - It doesn't cook unless relevant events are being processed.

SOPs

  • new DAT to SOP
    • takes a list of point values and creates a SOP.
    • To merge attributes use the parameter Points DAT for point attributes and Vertices DAT for primitive attributes.
    • it merges in existing attributes for points or primitives, and will also add standard ones (N, Cd, T, uv, v, mat, Cd, dist, lod, pCapt, pCaptPath, pCaptData, pCatSkelRoot).
    • outputs a warning for out-of-bounds and unknown attributes.
    • input is optional. If no input specified, the points DAT and a Vertices DAT is used to create points and polygons. index column will be ignored.
    • can match attributes back by point or primitive number
    • can have attributes in DAT that aren't in a SOP.
    • Float, Int and String attributes can be used. The attributes are used for both Points and Vertices DATs, and you can only choose non-standard attributes to add. Attributes are added in order. If an attribute is listed in more than one of the three types, only the first type will be added.
    • merging attributes use Points DAT for point attributes and Vertices DAT for primitive attributes.
    • the input is optional. If no input is specified, the points DAT and a vertices DAT is used to create points and polygons.
    • index is the column for point/primitive number. If there is no index column for a DAT to SOP that's merging attributes, row number (-1) is used instead.
  • Add SOP - Extended DAT "Points Table" to allow named attributes. Turn on new parameter 'Named Attributes'. Add any of the following as columns in the DAT:
    • P(0) P(1) P(2) P(3)
    • N(0) N(1) N(2)
    • Cd(0) Cd(1) Cd(2) Cd(3)
    • uv(0) uv(1) uv(2)
    • Any other columns are added as single-float attributes.
    • Remember to turn off 'Compute Normals' when supplying them in the DAT.
  • Cache SOP - works now, and had a parameter re-vamp so it looks and behaves like the Cache TOP and Texture 3D TOP. If you use a Cache SOP, you will have to re-setup its parameters.
  • Point SOP custom attributes - added ability to create custom attributes in the Point SOP
  • Primitive SOP -
    • you can now create custom attributes (up to a vector with 4 values).
    • Added $GI (primitive group index), and $GCEX, $GCEY, $GCEZ (centroid of a primitive group) variables to the Primitive SOP. If a primitive is in more than one group, it just uses the first group that primitive is a member of.
  • Object SOP - each parameter now accepts a list of patterns of node names, instead of just a path to a single SOP.

DATs

  • new Serial DAT
    • this DAT reads serial data from the COM ports.
    • It is implemented as a FIFO like the MIDI In DAT.
    • Data can be expressed as newline-delimited ASCII or individual binary bytes.
    • Each message (ASCII line or byte) appends one row to the DAT and calls an optional script, similar to the FIFO, MIDI In, TCP/IP In and OSC In DATs
    • Data can be written through this connection via the new serial command.
  • new serial command works with the Serial DAT
    • Usage: serial serial_path [-b] value1 value2
    • Description: This will output a string of bytes to a Serial DAT. The bytes can be either individual byte values, or a string of characters. Newlines are automatically appended in the latter case.
    • Example: serial /project1/serial1 -b 65 66 67
  • new TCP/IP In DAT - captures all the messages without any queuing or buffering, and allows you to send it any messages you want.
    • this DAT reads data from a TCP/IP connection, either originating or connecting to a connection.
    • Data can be expressed as newline-delimited ASCII or individual binary bytes.
    • Each message (ASCII line or byte) appends one row to the DAT and calls an optional script, similar to the FIFO, MIDI In, Serial In and OSC In DATs
    • Compatible with Pipe Out CHOPs.
  • new SOP to DAT
    • This takes a SOP and extracts its point or primitive (polygon/etc) data. Points will extract position as well as selected attributes.
    • The output table consist of 1 row of headers, follow by rows of data. The first column is always the point or primitive number.
    • outputs a list of polygon vertices and a flag indicating whether they are closed or not.
    • extracts point data or primitive data
    • first row = data/attribute name
    • first col = point/primitive number
    • list of attributes to extract, default all
    • will extract point or primitive attributes
    • index is the column for point/primitive number. If there is no index column for a DAT to SOP that's merging attributes, row number (-1) is used instead.
  • the family of Execute DATs - On Start, On Create are initialized in numbered alphanumeric order now, to assure a predictable execution order.
  • Text DAT - On Start and On Create refinement - When you (1) drag-drop a .tox to a network or (2) double-click a .tox in a folder, or (3) click a .tox on our the web site and open it with TouchDesigner, it will run all scripts in the .tox that have "On Create" turned on, and then run all scripts in the .tox that have "On Start" turned on.
  • new Output Table Size parameter in Evaluate DAT - This allows the formula table to be larger than the data table.
  • Evaluate DAT v() functions - The functions that get other cells in the Evaluate DAT - v(), vr(), vc(), vrc() functions now return floats only. A new family of functions vs(), vsr(), vsc(), vsrc() will return string values, similar to if() and ifs(). Not completely backwards compatible, but unlikely to affect anyone!
  • XML DAT filtering - added 'Parent Name' and 'Parent Value' to the filter criteria.

Materials

  • Texture Sampling Parameters in MATs have been overhauled. It is now a collapsible part of the parameter box instead of a popup dialog.

Control Panel Design

  • Window Component - new menu option to place the window relative to where the mouse is located.
  • new dragrollover panel value - This Panel Value switches from 0 to 1 when something that can be dropped is dragged over.

Commands

  • comparing two .toe files - You can now compare what has changed between two .toe files.
    • new toestats command outputs a summary of all the components of a .toe file, The -p option lets you refine the output using a pattern to match.
      • toestats -d file1 file2
    • new toediff command compares the components of two files.
      • toediff file1 file2
  • new Preference "Allow Scripts to run System Commands" - when set to "Always", TouchDesigner is allowed to run "system" commands. The preference is is "Never" by default.
  • system command now by default requires user-acceptance before it is run. There are now other commands that perform most of what the system command does: mf, ld.
  • new command to make new folder - mf - Make a folder inside the current working folder. Multiple nested folders can be specified at once. Usage:
mf path [path2 path3 ...]
Example:
mf totals1
mf pics1/january pics2/january
(existing folder commands are: cf (change to), lf (list), pf (print))
  • new ld command lists the disks and network drives attached to your system.
  • lf command - added -t option to output the time stamp of the file.
  • system command - removed the automatic 'cmd /c' prefix to every command. This is operating system-specific, and only works for scripts. Please add it manually if your calls require it. (i.e. they are command scripts).
  • opparm option to pulse a parameter - opparm -p oppath parmname (value) pulses the parameter values to the specified value(s), cooks the operator, then returns the parameters to their original values. This is useful for driving a parameter that uses the 0 to 1 transition to initiate an action, like the Reset parameter or Cue parameter in a Movie In TOP.
  • opparm command - The -c option is now gone, its now automatically clicked when you opparm the button-style parameter.
  • audioplay command - an index of -1 now specifies all samples as currently described in the help.
  • time command outputs the elapsed time the application has been running.
    • time [-d] will return the current calendar date + time.
  • new root variables OP_SELECT, OP_ROLLOVER - These are updated when you click/rollover a tile (These are similar to GADGET_SELECT, GADGET_ROLLOVER variables.)
  • exportmap command clears all export mappings from a CHOP with the new -C option.
  • new filechooser -b option to browse for folder

Expressions

  • expressions in double-precision - extended the expression library to use double precision (64-bits) instead of floats (32-bits) for higher precision in expressions.
  • tab(), tabr(), tabc(), tabrc() expressions cook better - they now create a node cooking dependency when they fail to resolve to any specific cells. (Keeps nodes properly dependent on tables even when the rows/columns they are looking for aren't present).
  • new expressions to test Variables
    • varexists("NAME") is 0 or 1.
    • vartype("NAME") returns types:
      • undefined
      • script
      • operator
      • path
      • component
      • root
      • builtin
      • system
    • varpath("NAME") is where the variable resides in the case of path, root and component variables.
  • New tabmr(), tabmc() expressions allow patterns matching in the name parameter - Examples:
    • tabmc("/dats/table1", 2, "product")
    • tabmc("/dats/table1", 2, "*")
    • tabmr("/dats/table1", "month", 3)
    • tabmr("/dats/table1", "*", 3)
  • chopts(path, index) (chop timeslice) Wherever you have: chop(path) to reference the value at the current time Use chopts(path, $I) to index the current timeslice.
  • ip(n) ipf(n) - new expressions that retrieve the wired input paths. Similar to opinput(), but recursive, and works through first input only:
    • Returns the (full) relative path to Nth wired parent of the currently evaluated node. For example owf(1) would return the node immediately wired to the first input. owf(2) would return the first input's input, etc. This expression should only exist within a parameter.
  • new monitor*() expression to query about the monitor.
    • new coordtomonitor() expression.

New or revised wiki pages

Bug Fixes and Improvements

  • Fixed zooming in the TOP viewer so it is relative to where you click the cursor.
  • Windows 7 - We are testing/using Win 7 with TouchDesigner. Not officially supported yet.
  • Fixed "Desktop", "Application Data" and "My Documents" paths to not be hard-coded (changes for Windows 7).
  • Movie playback updates for newer libavcodec, also fixing popping in some audio playback.
  • Fixed a case with the Video In TOP that caused long pauses if you tried to select one camera with both TOPs.
  • Changed the behavior of network clone immune a bit, it is no longer inherited down into a COMP, through a Clone. (i.e if a clone’s parent is network immune, the clones children won’t be come clone immune:
    • Network Clone Immunity isn't inherited into a clone from the clone's parent. That is to say, if you have the node container1 set to network clone immune, and inside it there is button1 and button2. If button2 is a clone of button1, its contents do not behave as if they are network clone immune.
  • Tile viewers can now correctly display the contents of 3D Textures and 2D Texture Arrays.
  • Fixed new Matte TOP having reversed inputs.
  • 3dGLSL.tox working again.
  • Fixed memory leak in NURBs code.
  • beat command: -t (tap) fixed.
  • Fix bug with inside panel value turning off after a mouse move despite still being inside components.
  • Fixed bug that broke the Pre-Fill feature of the Texture 3D TOP.
  • Feedback TOP will now load up in a better state.
  • Fixed a crash in the Add SOP for when there are too many columns and no named row.
  • Fixed out of bounds error in SOP to DAT.
  • OP Create menu comes up faster. faster expression parser. DAT exporting is much faster now also.
  • Movie In TOP no longer black out the image when Play is set to 0.
  • Fixed problem where 'controlpanel -o' would ignore most of its settings.
  • Fixed problem with parameter dialog not being shrinkable after it is toggled on and off.
  • Isolated cases of frame de-sycning, specifically when timeslice CHOPs wrap around.
  • Fixed bug in TCP/IP and OSC input DATs/CHOPs that were reversing each cooks worth of messages.
  • Fixed look-up crash in TOP (TOP to CHOP) when the CHOP has only 3 channels.
  • fixed bugs with looping audio files, and with libavcodec reading some .wav files.
  • Pipe Out CHOP should no longer trash CPU time when 'Originate' is off. Fixed Pipe In/Out so 'Send All Data' works with the Pipe In queuing turned on.

Known Bugs

  • Please report any issues you are having with TouchDesigner in the forum.

Changes to 3700 - Build 3710

  • Clip and Clipblender CHOPs are re-enabled
  • Order-independent transparency now works correctly with GLSL MATs.
  • Fixed crash in Render Pick CHOP.
  • Crash fix for uninitialized variables.
  • Fixed inside panel value update when mouse is dragged outside of another window.
  • You can now select the comparison function to use with the 'Discard Pixels Based on Alpha' feature in the Common pages of MATs.
  • DAT viewers were growing too large.
  • Primitive SOP was not able to reverse vertices.
  • The CHOP exporter was broken.
  • wire-drawing speedups.
  • Fixed bug with evaluating double variables in braces ( ${{A}_B} )
  • Fix a bug where the horizontal scrollbar in DAT viewers did not appear

Changes to 3700 - Build 3712

  • fixes to Keyframer
  • Fixed duplicate channel bug in Select CHOP when same CHOP was wired in and specified in the path parameter.


Build 2505 - May 5, 2009

Highlights of Build 2505 vs Previous Official Build 1440

  • new MIDI system - MIDI mappings set up through Dialogs -> MIDI dialog and accessed through /local/map/map1, map2 etc.
  • new Window component for managing windows on multiple displays.
  • new GPU affinity for managing TouchDesigner processes on multiple graphics cards.
  • Load on Demand and loading from External .tox files
  • OSC In DAT, MIDI In DAT, FIFO DAT new DATs for managing streams of messages from MIDI, OSC and internal sources.
  • new Exporting from DATs
  • FBX importer more complete
  • http:// file reading - Any place where a file is read into TouchDesigner can have the form http:// which will read it from the internet.
  • view Non-Default Parameters Only - Useful for learning other people's networks, a new global flag (the * at the top-right of parameter dialogs) lets you see only the parameters that are NOT set to their default value.
  • TUIK loads from External .tox making the gadgets update more as TUIK evolves.
  • component Palette updated

NOTE on recent graphics drivers from NVIDIA

  • Warning: NVIDIA driver 182.46 and 182.50 crashes when rendering geometry. Our temporary workaround is to fall back to slower rendering on these driver versions until they fix it. UPDATE: NVIDIA drivers 186.18 fix this issue.
  • Possible backwards compatibility issue - COMPs can now only clone COMPs of the same node type (Buttons can only clone Buttons etc.)

User Interface

  • 100+ minor UI improvements
  • view Non-Default Parameters Only - Useful for learning other people's networks, a new global flag (the * at the top-right of parameter dialogs) lets you see only the parameters that are NOT set to their default value. This is very useful when looking at other peoples' components and you want to know only what parameters were changed by the author.
    • Parameters that are exported-to are considered to be non-default always.
    • Parameters that have any expression in them are also considered non-default always.
  • autoscrolling in networks
    • when moving the network, hold the mouse near or pass the edge of the pane to have the network continue moving automatically
    • when moving tiles, the cursor needs to be inside the pane to for the network to scroll.
    • sensitivity is 30 pixels around the edge of the pane
  • Preferences->General->Enable Playbar Shortcuts (default to on)
  • Control Panels size/location are clamped to the monitor bounds when opening them
  • Zoom Boost in Network preferences separated to Middle Mouse Button Zoom Boost and Scroll Wheel Zoom Boost. Default is 1 for both.
  • Dropping a node onto a component will now give yu a choice of what to do, including assigning the node to a path parameter. (It no longer copies/moves nodes into component


MIDI

The old MIDI system is removed, overhauled and is now driven via DATs in a way that is much more user-controllable and extensible. See details near end of this page.


CHOPs

  • Optimization: On your existing TouchDesigner computers, change the preference Edit -> Preferences -> CHOPs -> Minimum Time Slice Size to be 6 frames. This prevents CHOPs from bogging down if the frame rate drops. 60 frames was the default, 6 is the default on new installs now.
  • All CHOPs now have the ability to turn off Automatic Exporting by channel name. Enable/disable this on the Common page of any CHOP.
  • Graph curve colors in CHOP node viewers - Graph colors for CHOPs now determined via settings in Edit -> Preferences -> CHOPs. removed the Graph Color & Graph Color Step from Common page of CHOP nodes.
  • CHOP channel names scale in size in their network node viewer. Edit -> Preferences -> CHOPs give range choices, default 5 pixels to 15 pixels.
  • Trail CHOP option to capture either "Changing Values" (only samples whose values are different than the previous value) or "Time Slice" (all samples, even if their alue is not changing). (Time Slice is the new default).
  • Merge CHOP can fetch its inputs using a path parameter to reach outside its network.
  • Lookup CHOP - added 'Interpolate' option (default on). When off, it rounds the indices to the nearest input sample.
  • OSC CHOP will output something meaningful on any number of numeric arguments of any type (midi, rgb, etc). For example an OSC message of: /color (rgb-value) will now create channels: color1 color2 color3 Previously it was restricted to messages containing a single float or a single int parameter. Also added 'Address Scope' to select messages.
  • The Touch Out CHOP can now accept multiple simultanous Touch In CHOPs connected to it on the same port.
  • Pipe Out CHOP can now connect to any number of Pipe In CHOPs.
  • new OP to Audio CHOP converts a SOP or TOP to oscilloscope-friendly audio waves. sounds crazy.
    • SOPs - Every point in a SOP creates a frame-buffered, stereo audio sample, where the SOP vertex X is placed on the left channel and Y is placed on the Y channel. If you send the audio channels directly to the X and Y deflector inputs of an oscilloscope, it will display voodoo. No more pixels, just razor sharp vectors.
    • TOPs - A pixel's X and Y location is converted again to an audio sample's left and right channel values. The luminance is controlled by how long the sample is "drawn" on the scope. Different ordering options available for minimizing or enhancing flicker.
    • A sample component found at: [1]
  • Clock CHOP streamlined and corrected
    • Implemented 'month' input. Its approximate in that it doesn't take into account leap years, so may be off by one day on leap year days when used.
    • month is 1-based, taht is month 1 is January.
    • mday renamed to day.
    • input now uses named channels, instead of channel position.
    • non-used channel name parameters are disabled.
    • when sending channels into the Clock CHOP to force it to think it's another day: renamed required input channels from "minute" and "second" to "min" and "sec" to match current defaults. added 'msec'. fixed day input to be 1-based
  • CHOP Channel exports will now be stashed if the number of channels in a node is reduced. If channels are later re-added, then exports will be revived and setup for those channels
  • OSC In CHOP and OSC In DAT
    • new Address Scope parameter lets you select or filter out some channels.
    • OSC In CHOP reworked to include queing and support general message types.
    • Expanded type support for OSC (including unknown types) - handles more varieties of channels.
    • OSC In CHOP and MIDI In DAT - better error reporting when port number is out of range, better performance log message.
    • Multiple OSC In CHOPs + OSC In DATs can now read from the same port.
  • Delay CHOP is very fast and works properly time-sliced - It was simplified so the echo parameters are not there, which means you need to do it with several Delay CHOPs added up, which is still faster than the original.
  • Audio playback better when movies loop
  • Timing CHOP now correctly resets when using 'Zero While Reset' with Shape set to 'Ramp' or 'Ramp+Count'
  • Noise CHOP Type menu 'Random' now uses individual seed per channel like other noise types.


TOPs

  • Movie In TOP read-ahead prediction is better for movies that a trimmed or use loop crossfade.
  • new libavcodec library integrated.
  • new shortcut resolutions on TOP resolution menu
  • GLSL TOP and GLSL MAT have a parameter that allows you to select which version of GLSL you want your shader compiled as. Only option is 1.20 for now.
  • Video In TOP is less strict about the info it gets from DirectShow, and should allow the BlackMagic Decklink to work.


DATs

  • Text DAT - Execute menu
    • On Start selected in a Text DAT causes the DAT script to execute when
      • the .toe starts
      • it is in an external .tox file that gets loaded
      • Load on Demand is set and it has been loaded
      • File -> Env Open loads a .toe with the Text DAT
      • the command toeread runs the Text DAT.
    • On Create causes the script to be run the first time the Text DAT comes into existence.
      • the component in which it is located is created, pasted, dragged-dropped, dragged in, cut+paste. It is run whenever the DAT is created and not in one of the above 'On Start' cases.
      • The loadcomponent command runs it, as does dragging/dropping it into a TouchDesigner session.
  • XML DAT - new Attribute per Column option - it parses attributes into separate columns or rows.
  • new Exporting from DATs - The Export flag is a new flag for all DATs, which causes its cells to be exported to parameters. This is a powerful new feature that parallels exporting from CHOPs, but also lets you export to strings, flags and menus.
    • It expects the DAT to be a table with two columns: a path to a parameter, and a value (which can be an expression). This will cause the value to be placed in the parameter.
    • a node can now be overridden by any combination of DATs and CHOPs (instead of a single DAT)
    • each row of a DAT can export to a multiple locations, and it uses pattern matching.
    • exporting is toggled with the Export flag.
    • Turning off the export now restores all the parameters to their previous values (except strings.. gonna fix that)
    • DATs can export to menus either by giving a numeric position (0, 1, 2, etc) or the actual token word (eg: srt, trs, rst, etc).
    • Expressions are automatically evaluated
  • v() expression gets at other cells in the Evaluate DAT - You can use $V to get the value at the current cell. The new expression is v(row,col), and you can use the local variables R and C for rows and columns.
    • Then you could address relative rows/columns with $C, $C-1, $C+1, and address the cell at the first column with v($R,0).
    • The expressions that let you get at cells by row/column names are:
      • vr(rowname,colnum)
      • vc(rownum,colname)
      • vrc(rowname,colname)
    • Example vrc("john","august")
    • The local variables NR and NC give the number of rows and columns of the table.
  • Select DAT new variables NR and NC - $NR and $NC in a Select DAT gives the number of rows and columns of the incoming DAT.
  • Convert DAT re-formatting options - option to remove blank lines when loading (Table DAT) or converting to (Convert DAT) tables. defaults to zero. Option to set which character de-limits cells (default is Tab).
  • New CHOP Execute DAT, DAT Execute DAT, Panel Execute DAT, Parm Execute DAT, OP execute DAT - These now supercede the similar features available in the Text DAT for execution on CHOP, DAT and Panel events. Eventually all Text DATs that are set for these types of executions will be automatically converted to the corresponding Execute DAT..
    • The Text DAT is split into several new DATs. because it was getting overloaded with functionality (Text DAT still behaves as before)
    • OP Execute and Parm Execute DATs can contain their own scripts or text data, like a Text DAT does, or accept an input.
  • new FIFO DAT - maintains a fixed number of rows in a DAT, processing each addition with an external script that gets run when a new item is added. See FIFO DAT
    • For each row you manually append to this DAT, it will execute a script on that row, and remove elements from the top, to maintain a fixed number of rows.
    • Use it to log events, and trigger a script on each addition.
    • The contents are preserved during save/copy/load.
  • new OSC In DAT - Each message (or bundle of messages) is logged as plain ASCII. Each row in the log calls an optional DAT script. You can filter on the address fields (*hello* shows only messages with 'hello' in them, ^*hello* excludes messages with 'hello' in them. It supports all the basic argument types, will be later extended to support all the secondary argument types that the other packages support. see also new MIDI In DAT.
    • see OSC In CHOP in CHOPs for more details on the new OSC In DAT
  • Text DAT is monitoring CHOPs - When the Text DAT is monitoring CHOPs for execution, it will now correctly catch new channels that show up, or channels that are removed. It still doesn't catch if channel names change though.
    • allow a limited number of recursive updates via Text DATs monitoring DAT changes. i.e. it is possible for a Text DAT to monitor a DAT that its script will change.

SOPs

  • SOP Compare flag displays its input in wireframe - The green SOP Compare flag is at the bottom right of the tile. When it's on, it will display all its inputs in green wireframe. It is useful for understanding the effect of a SOP compared to the data coming in.
    • Compare flag is currently available for SOPs, and turning it on will display input geometry in wireframe in the SOP viewer. Input geometry will also show up in the modeler.
    • fixed Template flag for geometry. If a template flag is on, then the geometry will appear in wireframe in the geometry modeler, if the geometry being modeled is in the same network as the templated geometry.
  • LSystem SOP
    • Pic and Color parameters now use TOPs
    • Rules are now defined in a separate DAT
  • Add SOP takes list of points from a DAT -
    • Points Table takes rows of points up to 4 columns for x, y, z and weight. No columns headings. x, y, z defaults to 0 and weight to 1 if a column is missing.
    • Polygons Table takes rows of polygons specified by point number in the first column. The second column indicates if the polygons are closed (1) or open (0).


Materials

  • Phong MAT can now create screen space aligned texture coordinates on a per-map basis. Avoids the need to use the Texture SOP's Perspect from Camera feature to do this (and avoids a skew that occurs with the Texture SOP's generated coordinates).
  • deforms with geometry shaders in the GLSL MAT supported better.


Clones and External .tox Files

  • Loading from External .tox files - on Common page of all components
    • Load-on-Demand and External .tox parameters - It will load a .tox from a file if it exists at the specified path. If the file does not exist, it will use the component network that was stored in the .toe file.
    • Sub-Component to Load - feature for External .tox file loading, which allows you to pull out a node from the .tox file, and make that the top level node to be loaded.
    • revamped the selective loading in the loadcomponent command.
  • New button on the Common page of all COMPs called 'Re-Init Network'. Pressing this button will cause the COMP to re-load itself from a external tox file (if specified in the parameter), and then re-initiailize itself from it's clone master (if it's a clone).
  • External .tox will evaluate Built-in variables like $DESKTOP and $MYDOCUMENTS when evaluating paths.
  • Evaluate DATs monitor changes in local variables.
  • Load-on-Demand - new load-on-demand feature is in all component types. This will cause a component's contents to not be created until someone tries to use it (the contents). It delays the de-compressing and expansion of components in the .toe file until it's needed.
    • new oploadondemand command - tells you which nodes are "load on demand" and haven't created their contents yet.
  • Load Component from External File - Components' Common page have "External .tox" which will source their content from a .tox file upon start of a .toe, allowing for COMPs to contain networks that can be updated independently of the .toe file. Paths used to locate .tox files shouldn't contain expressions or root variables, but built-ins and Environment variables (like $MYDOCUMENTS, $DESKTOP and $HOME) are OK.
  • Upgrades to Clone Behavior
    • A node that is network clone immune follows the same rules as a clone immune node for any changes that directly affect that node.
    • Nodes that are clone immune due to their master will now be renamed/deleted if their master node is renamed/deleted.
    • Nodes that are clone immune will give a prompt to ask if they should be renamed/deleted if a node in the master that matches them is deleted.
    • Network clone immunity is now correctly inherited from the master.
    • oprm and opname commands have -I option that states that clone immune nodes that match the master that is getting renamed/deleted will also get renamed/deleted. This feature will be expanded for other OP commands in the future.
    • Cook disabling behaves correctly with clones now. Setting the top level master to cook disabled has no affect on clones, since top level flags/parameters are never cloned.
    • You can now make a node cook disabled even if it's already cook disabled due to its parent.


Panels

  • Momentary Up button type - A button component that is set to Momentary Up will not go on when you click on the button and drag off the button before releasing. It will only go on when you release the mouse when the cursor is still in the button area. In that case, "state" will go Off to On, and it will go On to Off the next time you click on the button. You would only trigger upon Off to On for this button type.
  • values for u,v update when dragging over - dragrollu, dragrollv
  • Added an option for Field components to convert spaces to underscores.
  • Added the 'resize' panel value. True when panels are being resized.
  • Panel resizing by grabbing floating panel edges - Four parameters allow you to resize a panel by grabbing the corresponding edge or corner: Resize Left, Right, Bottom, Top
  • Border on Top parameter for all panels (default off).
  • new Panel Values
    • new screenwm and screenhm panel values - (Screen Width Margin, Screen Height Margin) panel values to get the screen coordinates of a panel after margins are taken into account.
    • new rollu and rollv panel values give the gadgets' u and v cursor position when rolling over a gadget.


3D Components

  • Cameras can blend between Perspective and Orthographic Projections - The Camera components' Projection menu has a new Perspective to Ortho Blend entry, which enables the Projection Blend slider parameter (0-1) to let users transition between orthographic and perspective camera projections.
    • backward compatible with the menus
    • Rectangle and Texture SOPs now support the new projection blending feature when using the Camera COMP in their cooking


Components

  • Void component changed to Base component - We didn't like Void enough. So Base is the raw component type that had no panel parameters and no 3D parameters. Fortunately, Void to Base auto-converts, but you may want to change the OP name if it was previously called void1 etc. as that would not be changed.
  • Composite parameter in panel components determines how one panel will be composited over another.
  • new Window component - The new Window component type allows you to create and maintain a separate floating window displaying the contents of any operator, exactly as the operator is drawn in its node viewer.
    • It is useful for setting up windows on multiple monitors or the main monitor. You can control its position and size when it is opened, and a parameter can be set to display the window or not.
    • The user can still re-size, re-position and close the window, and the Info CHOP can be used to get its actual state.
    • A button also causes its current state to be pushed back into the X and Y position and Size parameters. The window can be optionally opened when the .toe file re-starts or the .tox file is loaded into the TouchDesigner session.
    • The windows can be positioned relative to the bottom-left of the monitor, or conveniently relative to any of the other corners or center of the monitor.
    • The window can also be positioned relative to the full span of all the monitors as a whole.
    • It can pretend that the monitor starts above the task bar at the bottom of a monitor.


TUIK

  • new TUIK loads from External .tox making the gadgets update more as TUIK evolves.
  • NOTE - You will need to re-import your TUIK gadgets from the palette.


FBX and Importing

  • FBX Importer now allows you to specify which FPS the animation channels are created in
  • New File -> Import dialog
  • FBX importer now has the option to create networks that use GPU deforms (using MATs) instead of the Deform SOP to deform geometry. (It'll use MATs by default now).
  • fixed FBX importer where camera and light transforms had an incorrect rotation.
  • A few bug fixes for transforms errors in the FBX importer
  • FBX importer supports more features. also will create primitive groups for merged geometry, so the merged geometry can be split back out, also the DAT will list the group name + original node location to make it easier to know which group is which geometry.


Commands and Scripting

  • operators that read files can all read files from the internet using http://. A timeout download parameter for File OPs was added
  • Command line arguments to TouchDesigner now internally expanded to full path so importers like FBX will find them relibably.
  • tabinsertm DAT command for inserting multiple rows or columns.
    • new -a option will rename rows and columns if the names are already in the table.
    • command without arguments will output the names of the rows or columns added.
  • New built-in constant variable SYS_GFX_GLSL_MAX_UNIFORMS.
  • opparm -v does a more complete variable lookup
  • neteditor [-N network] to specify a network component, instead of [-p pane]. WARNING: This option may change in a future build.
  • F, T and FPS in Variables dialog - It now includes Built-in variables F (current frame), T (current time) and FPS (frames per second). They also appear in the bvar command.
  • new command opexprerror [path]
    • opexprerror [-l] [-v] [-e] [-p pattern] [path]
    • This command recursively evaluates every parameter starting at the specified path, echoing any evaluation errors to the textport. If no path is given, the search begins at the root component.
    • Options:
      • -l Only search the listed nodes.
      • -v Output the value of each parameter.
      • -e Output the expression of each parameter.
      • -p pattern Only search parameters matching the pattern.
  • each textport now keeps track of its own current component
  • opname and oprm commands now have -I option to control what to do if clone immune nodes that match this node are found.
  • oporder command removed


Expressions

  • new string expression strstr(string1, string2) - finds the last occurrence of a string within a string. It will return the offset in string1 of the first occurrence of string2. If no occurrence is found, it returns -1. Examples:
    • strstr("abcdefghi", "def") = 3
    • strstr("abcdefghi", "xyz") = -1
  • new oplegalname() expression determines if a name is legal.
  • collapse(), collapsewith() - These work with internal strings, as opposed to disk filenames which are handled by collapsepath(), collapsepathwith(). Example:
    • set A = "abc" ; set B = "abc/def"
    • echo `collapse("abc/def/ghi")`  ;would return "$B/ghi"
    • echo `collapsewith($B, A)`  ;would return "$A/def"
    • echo `collapse($A)`  ;would simply return "$A"
  • new timecodetoframe() and frametotimecode() expressions - Format is hh:mm:ss.ff (where hh and mm and .ff portions are optional). Supports negative values as well. Examples:
    • frametotimecode(12345, 30) returns "00:06:51.15"
    • timecodetoframe("00:06:51.15", 30) returns 12345
    • timecodetoframe("06:51.15", 30) returns 12345
  • Added expression expandpattern to expand strings such as "t[xyz]" into "tx ty tz"
  • tabr() and tabc() allows patterns
  • textstr(top, str, attribute) function
  • if() expressions over-evaluating - expressions are a tree based evaluation, so that it can now eliminate evaluating parts of expressions that are not used. The affected functions and operators are:
      • if(a,b,c) ... if a is true, skip evaluation c, else
      • ifs(a,b,c) ... skip evaluation of b
      • x || y ... if x true, then skip evaluation of y
      • x && y ... if x false, then skip evluation of y
    • Example to avoid errors: if(opexists("abc", par("abc/def"), 0))
  • Expressions now built as an expression tree in order to avoid evaluation of un-needed parameters.
  • textstr() expression that take 3 attributes: text(string TOP, string text, string attribute) and returns the width or height of text. wrapping and autosizing is ignored
  • tabfindincol() - switched r & c in tabfindincol() - NOT BACKWARD COMPATIBLE!


Modeler

  • Added a parameter to show a background TOP for geometry modeler & viewer, with a scaling parameter.
  • geometry viewer - fixed handle to geometry attachment so detaching lets you move the handle. toggling on/off when attached will turn the position of the handle back to the original
  • Modeler
    • ctrl right click will no longer clear selection in modeler
    • modeler and geometry viewer
    • handle updates of transform handles via radio states
    • preserve existing alignment & transform states
  • hierarchical picking - if the geometry viewer is at /object, then picking something like /object/A/B will result in all objects under /object/A to be picked, and rotate/translate/scale will change the transform for /object/A.
  • modeling fixes and appearance changes - render select foreground option for icon. ctrl+RMB menu to use standard menu handlers. save image dialog improved. no more settings menu, open save image dialog via RMB snapshot button. draw box and lasso for selection


High-Performance

  • support for NVIDIA GPU affinity OpenGL extension. Currently NVIDIA only supports this extension on Quadros. This is controlled by a new command line argument –gpu that is used when starting up TouchDesigner vial command line or in a .bat batch file. e.g: touchdesigner.exe –gpu 1 untitled.toe -- Will cause Touch to only run on the 2nd GPU. The argument can be listed multiple times for more than one GPU. touchdesigner.exe –gpu 1 –gpu 2 untitled.toe - will cause touch to run on both the 2nd and 3rd GPUs.
  • 10-bit color monitors - Touch now supports outputting 10-bit color to the visible Windows (it could always do stuff like 16-bit color off-screen). set and environment variable TOUCH_10_BIT_COLOR = 1 to turn this one. Refer to the wiki article about 10-Bit Color Displays for more information. You will need a high color LDC monitor with a DisplayPort connector to use this.
  • many speed improvements including
    • Evaluate DAT now uses compiled expressions for faster evaluation. only applies to Expressions and Command output.
    • fixed some node overcooking - Text TOPs in Field COMP in particular.
  • Fixed old filepath functions to be thread safer.

CUDA

  • upgraded CUDA lib to 2.1. To use the CUDA TOP you must have NVIDIA driver version 181.xx or later installed.
    • CUDA TOP is significantly faster now.
    • CUDA YUV to RGB feature added to Movie In TOP (only usable with libavcodec). Also 'Bottom Half of Image is Alpha (AAA)' feature added to Movie In TOP (also uses CUDA and libavcodec). Useful to supply alpha to codecs that don't support it.
  • overhaul of how TouchDesigner detects monitors. Multi monitor setups should work much better now. The only case that won't work quite right is 3 16:9 monitors (via a Matrox Triple Head to go). 6 16:9 monitors works fine though. Please report any Window Placement, control panel opening or other dialog opening issues.
  • viewfile command more tolerant - concatenates multiple arguments with spaces into one path.


New MIDI System

The MIDI system is fully replaced and is now driven via DATs in a way that is much more user-controllable and extensible.

Once properly set up, you can create a Select CHOP anywhere that generically selects from /local/maps/map1 and receive sliders as channels named s1, s2, etc and buttons as b1, b2, etc. Your second MIDI device will come in at /local/maps/map2.

Custom MIDI settings are stored in very accessible DAT tables, making it easier to maintain, trade, and setup custom configurations. There is now a layer between the hardware configuration tables and the slider/button values they provide through MIDI mapping tables. MIDI (and soon OSC) data is presented to the rest of the application in /local/maps/map1 etc., regardless of what MIDI devices are attached.

You can save your custom MIDI configurations using the RMB -> Save Component and load them into your other .toe files using the External .tox parameter on components.

It also provides for the output of MIDI data from your application channels to the MIDI hardware.

NOTE: The goal is to make your components and applications independent of the end-user's MIDI or OSC hardware that is driving them. If your applicatins or components assume that any MIDI device or OSC stream is coming in via /local/maps/map*, then it is most likely that it will hook to the user's devices.

  • MIDI Device Table /local/midi/device is a table DAT that defines what MIDI hardware is on your computer, one row per device.
    • The'definition' column of the 'device' table points to some common device definitions in /sys/devices/midi, and currently includes oxygen8, xsession, kaoss, bcr2000, bcf2000, motormix, peavey. You can take any of these and copy/edit them anywhere except /sys and /ui (we recommend you put it in /local/midi) to represent other devices you may have.
    • The device table is initialized once in the default TouchDesigner (setup.toe).
    • After you can go to /local/midi and run the script initialize_map_to_current_devices. It will replace the lines of the devices table except those that have the 'lock' column set to 1.
    • The 'channel' column is used to replace any occurance of ? in the device definitions (in the sliders or buttons tables). See /sys/devices/midi/bcr2000 as an example.
    • the device ID is determined by whatever is in the 'id' column (not the row order). That is, you can rearrange the rows and the id -> definition mapping remains the same.
  • MIDI In Map CHOP
    • It uses Device ID to refer to a row in /local/midi/device.
    • It produces a set of uniformly-named channels, based on the tables in the device definitions: See /sys/devices/midi/peavey/sliders and buttons.
    • Its output can be time sliced or simply at frame 1.
    • 'Include Velocity in Buttons' will scale the 0/1 button values by their velocity.
    • Queue Slider Events flag - When a burst of 100 messages comes in on one channel (controller), by default, the CHOP will skip messages and use the latest immediately. With the option on, it consumes one message per channel per cook, so the burst of 100 messages on one channel will take 100 frames to dequeue.
  • midi command - sends a MIDI message out. Type "help midi" in the textport for more details.
    • syntax: midi -d device_path -i id message
      • -d device_path  ;refers to a devices DAT table, defaults to /local/midi/device.
      • -i id  ;specify the device id for each command. defaults to id=1.
    • midi -n channel note value  ;send a note message to device id 1.
    • midi -t channel controller value
    • midi -l 0  ;list output devices
    • midi -l 1  ;list input devices
    • midi -l will return current list every time, not cached results.
  • MIDI In CHOP This goes raw to the device (outputs raw MIDI data as channels) and can be used anywhere you don't mind if your components are hardware-dependent or you don't intend your components be used by anyone else. It still uses the device table and id to fetch from the appropriate device.
  • MIDI Out CHOP It points to the device table (a DAT) and uses the integer id number. However we find using the 'midi' command in a script to send out MIDI data is easier.
  • Dialogs -> Beat panel holds MIDI timing controls now. has option to allow Start/Stop/Continue/Song Position via MIDI messages from a certain device id.
  • new MIDI In DAT logs all MIDI messages coming into TouchDesigner, It outputs columns - message, type, channel, index, value.
    • the Script DAT will execute once for each message coming in. The first argument is the message, the second argument is the line number (index starting at 0) in the DAT of the message.
    • The DAT is limited to 100 messages by default but with Clamp Output, this can be set to anything including unlimited.
    • Clear Output deletes all lines except the heading.
    • handles 14 bit, pitch, etc.
    • each column now has a corresponding pattern parameter to filter them on.
  • learning feature for new devices - Dialogs -> MIDI Device Mapper is used for this.
    • Copy-paste a component in /sys/devices/midi to, say, /local/midi. Rename it.
    • Refresh the devices table and put the path to the new component in the devices table for its corresponding device.
    • Put its path in the Component: line in the MIDI Device Mapper dialog. Press Load. You will see its current name and settings.
    • Change/learn. You can give it a new Name: here. Then press Save.
    • The device should be ready to operate. If its device id is 5, look at the channels of /local/maps/map5.


Bug Fixes

  • in build 1925+
    • fixed .aif and .aiff files not loading correctly in some cases
    • bug where Touch would freeze on startup, if an Info DAT was looking at a Joystick CHOP, and there were no joysticks connected.
    • fixed cook disabled still not quite working correctly with clones
    • Video In TOP will now query connected cameras when the node is created, instead of when the node cooks for the first time.
    • fix bug with filechooser variable option. when you select the same file in 2 consecutive filechoosers using the same variable, the 2nd result gets compressed to the variable you specify if there is no other path variable it can compress to.
    • Tracked down memory corruption that occurs in the Blend CHOP when the first input has 0 channels.
    • Tracked down bug in parameter evaluation where if you have a parameter dependent expression, like par(), refrencing a parm that had a data dependent expression, like chop(), it wouldn’t properly cause the node to cook the time.
    • fixed a crash bug when a Select COMP is pointing at a COMP and that COMP is deleted.
    • bookmark crash fix
  • component Children Scale and Children Offset now work correctly - and they are applied immediately and always after any other alignment.
  • fix crashes when invalid/empty polygons added
  • fix crash in Add SOP
  • the big one - fix problem with resetting a parameter while editing a parameter field when the playbar is running
  • fix a crash when canceling geometry save
  • fix inifite loop when the Bone Group SOP's maximum bones per group is set to 1.
  • cook disabled due to parent isn't inherited to a clone node from it's master
  • par() expression no longer cause overcooking in some cases. The Text TOPs in the wiki/forum/examples buttons are no longer cooking every frame thanks to this fix.
  • Fixed Switch SOP not cooking correctly when its inputs are changing.
  • removed old Math CHOP optimizations which truncated values to zero too quickly. eg: Remapping 75,000 (1 to 200,000) to (0 to 1) resulted in Zero instead of 0.375
  • fixed increment file name in geometry save pic
  • Constant CHOP - undercooking problem when referencing time-dependent node.
  • Pitch CHOP - fixed to output zeros and a warning instead of garbage values when its sample rate is set too low for the input. (Eventually caused crash when loading from toe).
  • Possible backwards compatiblity issue - Expressions that accept "Pw" as a attribute to fetch (vertex, point, pointavg, prim, primuv, primduv) behave differently when using "Pw". If you were using "Pw" with index 0, 1 or 2 to get the X,Y,Z, this will not longer work. "Pw" will now always return the point weight, regardless of which index was passed (before, you had to pass an index of 3 to get the point weight). Also you can now use the "P" attribute with an index of 3 to get the point weight (before, you couldn't get the point weight when using "P").
  • Movie In TOPs Info CHOP channels will now reset to default values when it fails to load a movie.
  • Fixed bug where nodes don't recook when they get wired sometimes (in particular, during a cut/paste operation).
  • Fixed a crash that can happen sometimes when a node is renamed/created and some other node has a reference to that newly created node.
  • fixed Constant TOP starting with a corrupted image.
  • a few array bug fixes for SOP geometries
  • fixed listen/tap
  • new /ui reduces startup errors
  • Fixed bug where TCP/IP pipes would sometimes connect to the wrong port.
  • Error Overhaul - Errors are no longer inherited down a node change (i.e A nodes input being in error won't make it go into error also with an 'Invalid Source' error). Nodes that are in error will behave as if they were bypassed. Report any bugs or inconsistent behavior you find.
  • Fixed panel tiles displaying black when 'Borders on Top' activated.
  • Fixed bug where dragging a component out to a folder in Windows to save it, and then dragging the saved component back into TouchDesigner, doesn't add a copy of the newly-saved component.
  • Node selection is no longer saved in the Undo list.
  • Select DAT to evaluate all rows and columns when output is set to expression or strings.
  • Geometry Modeler
    • Added a confirm dialog for New or Load Geo operation.
    • Remove confirm for saving untitled.geo for the Merge Geo operation
    • Fix render update for loading/merging geometry
    • Fix bug so selected geometry color is updated right away.
    • Fixed bug where Geometry Viewers stopped showing any geometry.
    • fixed broken curve drawing mode in modeler
  • Touch Out TOP no longer cooks its inputs when its not connected to anything.
  • Change to undo code that should remove large pauses that occur in large .toe files when doing an undo-able operation. Also fixed large 'Clear Undo Flags' entries in the Performance Monitor.
  • UI interaction should be snappier now.
  • Default grid spacing for modeler/viewer changed from 0.1 to 1.
  • Fixed a bug in Reorder DAT where not all rows/columns are added when reordering by name if the input has rows deleted and re-added.
  • Fixed crash that can occur in Shared Mem OPs.
  • Fixed issue where each Clock CHOP started a different offset from the system clock.
  • Fixed Text DAT "Execute on Start" to work in clone situations.
  • Movie In TOP, now uses 'Disk Open Timeout' for downloaded files.
  • Fixed crash in Reorder DAT when reordering via row/column and there are no columns/rows.
  • When editing a text DAT in the textport, adding vertical lines will now update the scrollbar if the text is too large to fit in. On a similar note, cursors should be visible when editing a DAT in node view.
  • File Load now uses opentimeout for download support.
  • fixed so points when drawing curves are drawn at the cursor
  • Verified clock CHOP working and properly documented again.
  • Added 'Border On Top' option to all panels to draw the border on top of its children (instead of below).
  • Added panelp, panelstrp, the passive (non-cooking) versions of panel, panelstr. Use to avoid infinite recursions in components which reference their own panel values.
  • Added new 'MIDI Event' DAT which will log all input or output MIDI messages going through Touch.
  • I was going to call it 'Midi OUT' DAT, but the functionality would imply it outputs messages, which it doesn't.
  • new MIDI Event DAT which will log all input or output MIDI messages going through TouchDesigner.
  • Fixed memory corruption that happens when rendering polygons with more than 4 vertices, that have an even number of vertices
  • panelp, panelstrp
  • passive (non-cooking) versions of panel, panelstr to deal with infinite recursion panels referencing their own values in some cases.
  • Some bugs fixed with clone behavior. Watch for clone immunity bugs (namely, files loading up with clone immunity information missing)
  • Fixed new bug that caused the synth to pause the first time a node is renamed.
  • time [-d] command fixed infinite recursion in nested loops
  • make geometry visible while creating it in the Circle, Tube, Sphere, etc states.

Release Notes Archive
Versions: 067 - 068 - 069 - 071 - 077
Builds: 88 - 143 - 281 - 387 - 538 - 786 - 892 - 1144 - 1403 - 1440 - 2505 - 3700


The latest official build is TouchDesigner 077 Build 3712
The latest experimental build is here: Experimental




Build 1440 - Jan 13, 2009

TUIK - TouchDesigner User Interface Kit

TUIK (pronounced "tweek") is a simplified way of building control panels in TouchDesigner. TUIK is a collection of user interface components located in the palette that enable the user to easily build customized controlpanels.

  • All the Palette is converted to use TUIK.
  • The new set of TUIK gadgets and panels are in the TUIK section of the palette.
  • There is a new wiki guide for TUIK.

New or revised wiki pages

Other New Features

  • closing parent panels - controlpanel -C path - This is similar to controlpanel -c path (close panel) except it climbs the networks looking for the topmost window. Example: controlpanel -C /x/y/z would be equivalent to: controlpanel -c /x if controlpanel x is open.

Fixes

  • many bug fixes reported by users.
  • crash fixes for opwire, and COMP inputs. Other misc crash fixes also.
  • fixed crash caused by a Transform SOP being wired to a COMP
  • Panel recursive stretch fix


Build 1403 - Dec 23, 2008

Some Highlights

  • active Wires - click on wires to get info, add operator, disconnect, select nodes.
  • viewers on component outputs - see what's coming out of components without creating a new node.
  • FBX - more support for importing 3D media into TouchDesigner

New or revised wiki pages

New Features

  • opgrid alphanumeric option - added -a to order by alpha numeric order. Without -a, two nodes hello23 and goodbye23 would be placed in the same location in the network. With -a, they would be placed in unique locations.
  • active Wires - When you mouse over a connecting Wire it will highlight in yellow. In this highlighted state, you can
    • MMB to get info for the incoming node
    • RMB to bring up a menu that allows you to
      • insert an operator via the OP Create Dialog
      • select the source node
      • select the destination node
      • disconnect the wire
  • viewers on component outputs - MMB and RMB on component output preview - If you move the cursor to the output of a component, a viewer appears. MMB on output preview to see info for out node. RMB on output preview brings up OP Create menu.
  • FBX internal merging - FBX files now merge static geometry if they share a material, reducing the number of SOPs and loading/running faster. It’ll now create a DAT in the Geo COMP that lists all of the geos that were merged with the current Geometry component (if any).
    • FBX importer will create primitive groups for merged geometry, so the merged geometry can be split back out, also the DAT will list the group name + original node location to make it easier to know which group is which Geometry.
  • Button components with new Up Anywhere choices - added 'Toggle Up Anywhere', 'Exclusive Up Anywhere', 'Radio Up Anywhere'. The 'Anywhere' means you can release the mouse either inside or outside the button area to change the state, to allow for sloppier, more certain selection:
    • Normally if you have a button set to Toggle Up, Radio Up or Exclusive Up, then you click on the button, drag out, the release the mouse outside the button area, nothing happens. This is normally the desired action. But if you don't care if the mouse slides off and the user releases, then you now have Toggle Up Anywhere, Radio Up Anywhere and Exclusive Up Anywhere.
    • If you want similar behavior for Momentary buttons, where you want to run a script only if the cursor is still inside the button, trigger the script On to Off, and in the script put in the first line: if ( `"panel("..","inside")` == 1 ). Put your script after that followed, by an endif.
    • Removed 'Inside Up' - un-necessary.
  • new clipboard command - set/get/clear the global text clipboard.
    • Usage: clipboard [-c] [string]
    • Description: This command will clear, set or list the contents of the system clipboard, (text data only). Example:
      • clipboard -c (clear the clipboard)
      • clipboard (list the contents)
      • clipboard "This is a test" (set the contents)

Known Bugs

  • If you use a Quadro, some recent Quadro drivers have a memory leak bug (the 178.xx series). Rolling back to the 176.xx series should fix the problem.

Changes

  • Generator TOPs now are creatd with their Aspect Ratio set to Resolution, instead of Input. For example, the Constant TOP's aspect ratio is its resolution ratio.
  • component inputs revamped -
    • to the uninitiated, they work the same as before. They are now more robust when cloning, immuning, and copy/pasting.
    • new opcompinput command - allows you to reorder the order that COMP inputs. COMP inputs are no longer ordered by alpha numeric order, they are in order of creation.
    • opwire command changed in non backwards compatible way when connecting COMP inputs/outputs. Use the new -i and -o parameters to connect to COMP input/outputs instead of directly connecting to the In and Out nodes.
    • opwire command now accepts wildcards.
  • changing window sizes - panels and other windows - Maximizing *any* window Touch, will make it borderless full screen. Pressing 'Escape' will restore it to regular size. This applies to perform windows, textports, viewers, etc. We might limit this if its too non-standard.
  • filling full screen - If you want to actually cover the entire physical screen, make sure your task bar property 'Keep the taskbar on top of other windows' is turned off.
  • verbose variable set - rvar, cvar, evar -v name=value (verbose). -v: outputs the name of the variable if succesfully set, blank otherwise. Examples of failure: Invalid or reserved variable names.
  • Override parameter of components - CHOP override assumes 'inside' requirement met, when clicking buttons.
  • Deform SOP and MATs don’t need Capture Region SOPs - not needed anymore, but still support them.
  • FBX importer no longer creates Capture Region SOPs - will result it faster deforms.
  • Better audio reading when the movies loop
  • Generator TOPs now are creatd with their Aspect Ratio set to Resolution, instead of Input.

Dialog Updates

  • The Bookmark, Macro, and Variables Dialogs have been updated with:
    • Add button changed to Add from +.
    • Add fields display their required input and include new error checking for invalid entries
    • selecting a name or value now high-lights the entire row in the list
  • right-click menu added, right-click on entry to bring up options menu to Delete, Edit, Load/Run, etc
  • Environment Variables tab added to Variables Dialog
  • Bookmark Menu bug fixes
  • File Import Dialog display fixes
  • Key Manager display fixes

Bug Fixes

  • OP Create (Tab key) dialog -
    • you can type the first few characters of the OP type name to find the node name in the menu. This was broken recently.
    • you now can slide off the name to cancel after clicking on it.
  • fix for bug where clicking in one panel will cause another panel's inside panel values (in another window) to activate
  • Cross TOP - when the Pre-Fit Overlay is set to Fill in a Cross TOP, the output resolution of the cross did not stay locked to the resolution of the Fixed Layer. For example, if you change the Cross parameter to be 0% not the fixed layer, then the resolution output switched to the other layer's resolution.
  • Movie Out TOP was crashing sometimes.
  • evaluations of $VARIABLENAME\ will no longer cause the \ to get lost.
  • table cell's string disappeared when editing a table
  • allows at least one redraw after scripts are done executing.
  • fixed File -> Open Env ... problem to not delete all /ui nodes.
  • fix crash in Add SOP
  • fix problem with resetting a paramether while editing a parameter field when the playbar is running.
  • fix bug with clone immnunes getting deleted, network clone immunity not working In CHOPs correctly timeslice now
  • Nodes that were illegally connected to nodes outside their network are now disconnected, and shouldn't be able to be illegally connected from now on.
  • The Movie Out TOP had a bug that could cause random crashes/slowdowns/bad behavior. This is now fixed.


Build 1191 - Nov 26, 2008

Build 1191 was the first official release since build 538. It encompasses all the release notes for builds 1191, 1144, 892 and 786. Please scan through all of these builds' release notes. The highlights of 1191 versus 538 are:

New Features

  • Function keys -
    • F1 key - it will switch to Perform mode. Esc takes you back.
    • F2 key - While a control panel is being displayed, if you put your cursor over a gadget, TouchDesigner will jump to the gadget in its network, centered on that gadget. This is good for exploring how gadgets are made.
  • default startup - The default startup of TouchDesigner has a moviein1 connected to out1, which shows /project1 and the default Perform mode with an image. Adding a panel from the Palette will show up in the Perform panel.
  • new opgrid command - for laying out operators in a grid if the nodes are numbered, like mv23, mv27 etc. Each node is placed based on its digits. They can be placed as a group "mv*" or individually. Either way, each node gets put in the same place based on its digits. There are options to set the inter-row and inter-column spacing, and arrange them by row or column. The -x and -y option sets the position of the node numbered 1, e.g. mv1. The rest ...
    • layout nodes in a grid according to their suffix
    • to place a node using the node center, now use -C instead of -c in oplocate.
  • FBX -
    • support for more complex files
    • support for alternate paths of textures if paths in the FBX file don't exist.
    • automatically sharing common textures - objects with the same texture image use the same texture in GPU memory.
  • new argf() and argfx() expressions - finds a word in a list
  • new explodematrix() and explodematrixp() expressions - takes the transfom matrix and extracts pitch, roll, yaw, x, y, z and scale.
  • opstats -d to report how many parameters exist, and how many are default.

Changes

  • Perform Mode windows - Perform mode now by default uses the window width and height as its dimensions, and centers the panel. Spec of its position and dimensions are now two new options.
    • Reminder: Any operator can be specified as the perform monitor viewer (SOPs, CHOPs, etc). The default width/height above can be calculated from both Panels and TOPs
  • uniform behavior of windows that contain panels and TOPs -
    • windows that are opened are:
      • Viewer Button (rectangle)
      • RMB -> Open Control Panel
      • RMB -> Viewer
      • Perform Mode
    • all now create windows that are fully shrinkable, all preserve aspect ratio when appropriate, and tbe contents resize appropriately.
  • window stretching - Window Placement: The floating Perform mode window now preserves its aspect ratio while resizing the window, as well as rescales its input.
    • Force Stretch is new name for ‘Follow Operator Fill Mode’ in Window Placement
    • Components in the monitor fields now listen to the ‘Force Stretch’
    • all other floating windows of panels resize and preserve their aspect according to the panel's Window and Tile File menu.

Bug Fixes

  • Performance Monitor crashed when user tried to save its output to a file.
  • bug fixes for multi-line text fields:
    • fix cursor selection on line > 1
    • cursor drawing skips X Kerning when last char on a line
    • fix active cursor position for line > 1


Release Notes Archive
Versions: 067 - 068 - 069 - 071 - 077
Builds: 88 - 143 - 281 - 387 - 538 - 786 - 892 - 1144 - 1403 - 1440 - 2505 - 3700


The latest official build is TouchDesigner 077 Build 3712
The latest experimental build is here: Experimental



Build 1144 - Nov 21, 2008

EXPERIMENTAL BUILD Release Notes

New or revised wiki pages

New Features

  • component output mini-viewer - putting your cursor near the outputs of a component will display the viewer of that output. a little tempermental until next release.
  • run FTE on Pro license - FTE and FTE-Commercial will now run on Pro licenses.
  • FBX importing - more features supported
    • folder structure - changed the directory structure that the FBX external files are saved in. It allows for several copies to be instanced once loaded.
    • importing materials with textures now supported, each with separate UVs and UV offset, scale and rotate.
    • many bug fixes and animation import fixes.
    • custom texture layer coordinates now supported in all maps in the Phong MAT.
    • custom texture offset/scale/rotations supported, swapped UV, clockwise and counterclockwise vertex winding (swapping the winding if it’s wrong).
    • more advanced texturing.
  • new Pane Layout bar lets you create and restore full TouchDesigner pane layouts. A layout is a set of panes, each with its own bookmark (a path to a component and the pane type), located below the top menu bar.
  • Palette on independent pane - click on far-left strip if it's not visible. Stow it by clicking in thin white bar above the "Browser" title bar.
  • Palette components cleaned up and better - a broader set of palette components is under development.
  • new uig.tox UI toolkit from gh now in palette and the .tox forum.
  • Kerning in Y in fonts of Text TOP - now changes line spacing (bugs in multi-line text still).
  • Evaluate DAT can run commands - The Output menu now has "Command" which treats each cell as a TouchDesigner scripting command and runs the commands when cooked. Example "lc $V" in Formula and Command set: it runs the "lc" command on the components named in the incoming DAT.
  • Evaluate DAT Convert Backslash Character options will convert things like \n to newlines, \t to tabs etc. note that \n,\t will be converted to spaces if the input DAT is a table.
  • TouchDesigner running on multi-cards, GPU Affinity - TouchDesigner can run on multi graphics cards with hardware limitations (space, mixing card types, power supplies), but you need to use the new -gpu startup option, which allows users to select which GPU this instance of Touch will run on. It only works on NVIDIA Quadro family cards.
    • e.g touchdesigner -gpu 1 myfile.toe will start touch and have it only run on the 2nd GPU.
  • backport warning when loading .toe - now shows a proceed/cancel warning when loading a future .toe file into an older build.
  • Limit SOP normals and attributes - Limit SOP now has ability to compute normals after it runs, and has the ability to create 2 custom named attributes (up to 4 float values each). Also the tubes it create are no longer facing the wrong way (reversed vertex order).

Changes

  • Movie In TOP Cue and Cue Index parameters - Reset parameter was renamed to Cue, Sequential Start Index renamed to Cue Start Index, and bug fixed so you can turn Cue on and scrub a movie using Cue Index.
  • Preferences - Tiles renamed to be Networks.
  • Select components can now select other Select components recursively. If select1 points to select2, it now includes whatever select2 points to (recursively), instead of the usually empty network of select2. It still uses select2's parameters.

Fixes

  • Audio Out CHOP silence - will silence during errors + bypass.
  • Spectrum CHOP problem fixed where it would not re-initialize properly when changing parameters, causing unreliable output.
  • parameter panel bug fixed which caused textures to zoom in and out when zooming the tiles. (involving some cases of screenw, screenh panel values)
  • appending rows to a table with 'exact dims' sometimes got lost.
  • systems that have heavy $variable usage - improved
  • large dead time fixed that occurred at the start of the performance monitor sometimes.
  • Kerning in Y in the Text TOP now changes the line spacing.
  • Evaluate DAT lost multi-spaces in the Formula. They are now passed through.
  • RMB -> Add Operator sometimes branched instead of inserting the node between 2 nodes.
  • Video In TOP was broken recently and fixed
  • Panel components' Display parameter going to 0, then 1 was displaying incorrectly.
  • Component panel stretch - Changed panel stretch option so it no longer applies recursively to the children, only the parent container.
  • Channel SOP created wrong type of attribute when trying to create a N[3] attribute, causing other SOPs to not recognize it as the normal.
  • dragging from Palette was losing Keyframe CHOP data.

Known Bugs

  • memory corruption we think related to DAT viewers, causing crashes.



Build 892 - Oct 27, 2008

EXPERIMENTAL BUILD Release Notes

New or Revised wiki Pages


New Features

  • Bookmarks - WARNING - Bookmarks are still a Work in Progress until next build
    • Added the Layout bar to the main application (under the top menu bar) which in future will be the one place to set and control the pane layouts.
  • Resetting parameters to their default values
    • "Reset Parameters to Default" is now on RMB tile menu and top-left menu of the parameter dialog.
    • "Reset Parameter" is on the RMB menu of parameters.
  • Network Clone Immune - The Immune flag on components is now tri-state. A component can be made entirely immune, where all its nodes inside are immune. Use this sparingly because the .toe and .tox file savings gained by making a component a clone is lost for components inside a clone that are Immune.
    • The states are:
      • Off
      • Node Immune (makes only the parameters and the component's panels immune)
      • Node+Network Immune, which also makes all nodes inside (recursively) immune.
    • The tri-state flag is on the tiles and also in the pane list "t" mode.
  • desk command - express in pixels - added -x to specify pixels
example: desk -x -h pane 300
instead of desk -h pane 0.2
  • faster playing of movies - libavcodec does its YUV to RGB conversion on the GPU now, making movie file reading faster.
  • CUDA documentation and its API for programmers has been improved.
  • GLSL MAT or TOP error shader - added an "error" shader (blue/red checkerboard) that is applied if the user's GLSL MAT or TOP has compile errors.
  • find command
    • -x option to not automatically extend search terms with pre and post *.
      • Example: -x -n moviein1 searches "moviein1" not "*moviein1*"
    • -q option for quieter output
  • Panel values screenw and screenh - they are the pixel values the component was last drawn at, whether it is stretched to fill a pane or a floating window, or a sub-area of another component (not including tile viewers).
    • Palette width on left of default TouchDesigner is set to 250 pixels.
  • Panes' top-left icon (Open Component Viewer) now opens viewers for 3D object components, not only panels as before.
  • Panel Align can now justify each child in a row individually, instead of as a left-bottom justified bounding box.


Fixes

  • many small memory leaks fixed
  • fix some errors that get outputed sometimes when clones are intializing.
  • fix tile input switching via clicks
  • fix disappearing path menu bug
  • fixed memory leaks in the UI code and in the rendering to viewers in node tiles.
  • fix popup help bug for input connections
  • Allowed panel() expressions to point to their owner nodes without causing infinite recursion warnings
  • Fixed memory corruption that occurs when our curve code runs (really old bug, Houdini 4 likely)
  • Fixed crash when a script deletes it’s current component (current component moves up to the parent).
  • Fixed undercooking that happened when a node was looking for another node and then it came into existence.
  • Fixed bug where opcp didn’t copy the aspect ratio of a locked TOP.
  • Panels were updating prematurely during a cloning update.
  • Allowed panel() expressions to point to their owner nodes without causing infinite recursion warnings.
  • fix problems with panels half-updating during cloning process
  • fixed problem with animating wire links
  • fixed bug where copying a locked TOP wouldn't copy the aspect ratio
  • fix input/output connection not changing when mousing over the ins/outs
  • fixed broken find command and crash fixes
  • DAT table check before render


Known Bugs

  • a memory corruption we think related to DAT viewers, causing crashes




Build 786 - Oct 17, 2008

EXPERIMENTAL BUILD Release Notes

New or revised wiki pages

CUDA

CUDA is likely the most far-reaching technology to be recently-introduced by NVIDIA and now integrated seamlessly in TouchDesigner Pro. Aside from powerful image processing, CUDA is capable of highly-parallel general computing, simulation, data crunching and analysis. Now TouchDesigner Pro allows you to hook in CUDA programs, feed it CHOPs, images and Objects transforms, and get results back in the form of multi-dimensional floating point data and images. CUDA applications are being written by many developers, so like GLSL shaders, Touch is able, with a little more legwork, to embed CUDA. It all centers around the CUDA TOP plus the wiki page Write a CUDA DLL which contains the instructions on how to get it going.

Features of TouchDesigner FTE and Pro

  • FTE is limited to 1280x1024, but it also accepts images of any horizontal resolution if it's 2 pixels or less vertically, which is good for making hi-res ramps (and capturing audio chunks into TOPs).
  • When you buy FTE for commercial use, the license allows you unlimited resolution in TOPs.
  • CHOP channels are now stored in one continuous memory block instead of one block for each channel. Will result in speedups for large CHOPs.
  • Warning appears if you run TouchDesigner on a non-NVIDIA and non-ATI card - it will inform you and exit. Further restrictions will be put in place for older NVIDIA and most ATI cards that TouchDesigner does not run on. Driver restrictions will also be put in place. The NVIDIA 7000 series and later with recent drivers will always run.
  • Warning appears if you try to use Dualview - New message box will pop up if the user is using Dualview, warning of the consequences (only works on one monitor in OpenGL)
  • Viewer Active improvements
    • Preference - Viewer Active on Click Select - When you click on a tile to make it current, normally it doesn't change Viewer Active. This Preference makes Viewer Active on.
    • lines drawn better
    • When Viewer Active, clicking on space containing the node name, it will select/move the tile, not edit its name.
  • To set all parameters back to their default values, click on the node RMB -> Reset to Defaults.
  • right-click menu on TOPs - Right-click on a TOP when it is active brings up a menu of its shortcuts. There are new shortcuts like "h" for homing an image that has been translated or zoomed with LMB and MMB.
  • Field components use a table to determine next Field gadget If you have several Fiewld components in a panel and you want to control which field to go to when you press Tab, make a 1-column table containing the names (paths) of the Field components in the order you want. Pressing Tab foes forward through the list, pressing Shift-Tab goes backward. "Focus" changes based on gadget order in table.
  • new Cooking Disable flag on components (the X flag on the left side of all components) will shut down all cooking inside the component. (On startup, it will thereafter cook once to get a valid output of the component).
    • "opset -c 0|1" is the scripting command.
    • The same flag is available on the tabular view of the network (press "t" on the network)
  • four browsers
    • Palette - updated, rearranged, amended (from Dialogs -> Palette Library and pane type)
    • Operators - preliminary (Dialogs -> Operator Browser, also via parameters that are paths via path parameters' "Arrow" button)
    • Channels (access to CHOPs and their channels)
    • File - file system browser now available
  • SYS_GFX_DRIVER_VERSION added to built-in Variables
  • audio output buffer size was increased by .15 seconds to avoid audio stuttering. If your synths run consistently at 30 frames per second, you can reduce the latency.
  • improved File -> Import File... - Import File Dialog can load any TouchDesigner-readable file into the Touch environment. Importing options for some file types. Dialog allows you to load the file into any specified target network. Replaces Import FBX... and Import RIB... dialogs.
  • improved Bookmark Menu - Bookmark Menu now prompts you to name the bookmark when creating a Bookmark. Bookmarks now save the pane layout as well. Recalling a bookmark can simply load the saved path into the current pane, or load the saved layout into all the panes, rearranging the environment back to the pane layout when the bookmark was saved.

NOTE: Old bookmarks will not work with new bookmark system. Please recreate your bookmarks!

  • streamlined Components - components look cleaner - panel gadget components no longer have the parameters of 3D objects, and 3D objects don't have the parameters of gadget components.
  • new Void component type - has virtually no parameters - has no 3D transform parameters, nor any panel gadget parameters - use for components with no panels and are not 3D objects.
  • opname -v -a (to mirror opcp -v -a)
    • The -v option will return the name of the renamed node.
    • The -a option will cause the node to be automatically renamed
    • if a node that matches the target name already exists.


Bug Fixes

  • Transform CHOP channels that are created when outputting a 4x4 matrix are renamed to match the column major order (m00, m10, m20, m30) instead of m00, m01, m02, m03
  • Movie In TOP bug fixed that caused single frame images to have incorrect aspects when manually adjusting their resolution
  • Ramp TOP's DAT - bug fixed where table was cleared accidentally
  • crash fixes - Fixed crash reported by Achim, fixed rendering crash reported by Achim, fixed texture coordinate import issue in FBX reported by jason




Build 538 - September 29, 2008

  • Changes that are not backward compatible
    • Clicking on a node no longer puts it in 'Operate Mode'.
    • opset -c was opset -a previously
      • opset -a on|off or -a 0|1 (default off) will now turn off|on the new Active Viewer.
      • opset -c on|off or -a 0|1 (default on) will now turn off|on the operator cooking flag.
    • Audio Play CHOP - The Sound File parameter is now ignored if a DAT List is specified. If you had a file in this parameter then you need to offset the index in your audioplay commands by -1. (Before this file would have been index 0).
  • Viewer Active - the new way to activate and operate panels in network tile viewers - "Viewer Active" means the tile is in a state where clicking on it will operate the panels or OP data in its viewer.
    • An active viewer fills the whole tile except for the name field, so it is now more apparent.
    • How to make Viewers Active:
      • While the Alt key is pressed, all tile viewers are temporarily in the Viewer Active state.
      • Alt+a toggles the global Viewers Always Active state. It makes all viewers in all networks session Active.
      • Viewers Always Active is also on the RMB network menu.
      • All nodes have their own Viewer Active flag on the bottom right of its tile. Setting the Viewer Active flag keeps the tile in an state where the viewer can always be operated.
      • The short cut key "a" will set/unset the Viewer Active flag of all selected nodes (yellow borders).
    • The Viewer Active cursor is ^.
    • A node's viewer is active when its viewer is shown (not the 3-letter icon) and any of these is true:
      • the global Viewers Always Active flag is on
      • the user is holding down the 'Alt' key
      • the tile's Viewer Active flag is on.
  • FBX improvements to reading files - Please try drag-dropping FBX files to TouchDesigner and report any problems you may have.
  • viewer on|off command - toggles the global Viewers Always Active state
  • commands output Table DATs - all commands have -T option that formats the output in a table-format. With -T, a redirect automatically creates a Table DAT. Example:
    • ls -l -T >nodetable
    • Appending -T to any command will cause the redirected output to create a Table DAT instead of a Text DAT. example that creates a table with two rows:
      • echo -T abc > dat1
      • echo -T def >> dat1
  • Align to Network Tiles - new menu choice in the Align parameter in Container components will automatically layout the gadgets in the same relative positions and sizes of the tiles in its network. It finds all displayed gadget components, gets their bounding box, and fits them to the panel's boundaries. Use this to quickly position panels according to where their tiles sit. NOTE: It doesn't affect the gadgets' X, Y, W or H parameters.
  • new tree browser accessible in Dialogs -> Palette Library
    • tree browser contains three tabs:
      • Palette - revised palette of pre-made components (palette library is un-polished now)
      • Operator - you can drag drop operators from browser in networks
      • Channels - (not implemented fully) channels can be exported to parameters by dragging the from the channel to the parameter.
    • new right mouse menu
  • new bookmarks dialog
  • Panel Alignment - Align Margin panel parameter shrinks gadgets in a panel. It applies to all children when the Align menu is set. This applies to both horizontal/vertical + grid alignments. This value is stretchy (i.e. relative to viewer size, not screen pixels).
  • Margin parameter sets the number of pixels to leave as margins on all four sides of a panel.
  • Wireframe rendering in Geometry, Camera and Light viewers now show correct connectivity now instead of mostly triangles and triangle strips. Connectivity of meshes is preserved - as Rows, Columns, Quads, Triangles, whatever is in the SOP.

Commands

  • new filetypes command lists the file suffixes that TouchDesigner currently supports, and its category (audio, movie, image, geometry, etc). filetypes -T >/filetab outputs it in a tabular format and redirects it into the Table DAT /filetab. rtf, xml are text file types.
  • opdepend -t shows time-dependent inputs and extra inputs only, handy for analyzing why things may be over-cooking.

Bugs Fixed

  • Text DAT fixes - removed a maximum line limit in the Text DAT. crash fix in text DAT. better text zooming for large Text DATs.
  • Fixed some DAT execution update problems when they contain wildcard patterns (eg: line*/name) and new components are added after they last cooked.
  • List view crash fix.
  • crashes with the Stamp feature in the Copy SOP fixed
  • fixed 'click command' pulsing to work when the playbar is stopped. (Previously it would just pulse-off in after 2 frame advancements).




Build 387 - September 16, 2008

See release notes for build 281 as well.

  • new DATs: Reorder DAT and Transpose DAT - useful on DATs that are tables of rows/columns of text strings.
  • updated 'Palette' pane type.
  • new panel values screenw screenh added
    • This gets updated with the *last* window size of the panel. Tile viewers do not affect this value. Use these values in expressions in TOPs to get them to render at a specific resolutions. Use with caution, as multiple viewers will conflict with each other.
  • setting a margin around gadgets - new set by parameters: 'marginl, marginr, marginb, margint'
  • 'Stuff From Window' parameter on all panel components - It will stuff new values into the panel Width and Panel Height parameters if you resize the panel as a floating window. (These should reflect panel values 'screenw' 'screenh')
  • FBOs (frame buffer objects) - not important for novices. implemented FBOs for offscreen rendering. Try this feature out via the Edit->Preferences->TOPs page. When enabled it adds support for for anti-aliased floating point buffers, as well as other formats (like a packed float RGB format that fits into 32-bits per pixel or single 32-bit channel buffers (for speed when doing effects like ambient occlusion)).
  • 32x anti-aliasing support added (when FBOs are enabled).
  • command to bring up a wiki page in a browser - help -o wiki_page_name, for example, help -o Movie_In_TOP
  • new filetypes command - lists the file suffixes that TouchDesigner supports, and the category of file it is, like movie, audio, channel, geometry, image and text.




Build 281 - September 6, 2008

Features

  • mouse roller wheel for going into and out of networks now works better and no longer sticks in the current network.
  • Space bar stops/starts - Pressing the space bar stops and starts the TouchDesigner play bar, except when the cursor is over an active panel.
  • Wireframe renders appear better now.
  • Panels in floating windows can now be proportionally re-sized. Use the new -p option to the "controlpanel" command: controlpanel -p -o panelpath
  • TouchDesigner Pro version OPs added -
    • for blending motion channels: Clip Blender CHOP, Clip CHOP, Clip DAT (these are provided but not supported)
    • for passing images between Touch processes: Shared Memory In TOP, Shared Memory Out TOP. (The existing Touch Out TOP and Touch In TOP pass images between Touch processes via TCP/IP.)
    • for passing transforms between Touch processes: Xform In, Xform Out component types
  • Privacy option in TouchDesigner Pro for starting non-editable in Perform Mode
    • In both FTE and Pro, under Dialogs -> Window Placement, you can set a flag to start TouchDesigner in what we call "Perform mode". After you write out the .toe, and anyone restarts the .toe, it will open only a control panel in a floating window, with no networks visible. When you press the Esc key over the window, it will then open the full network editing window where you can view and edit the networks.
    • The new Privacy option is available in Pro only. When set and a new .toe file is written, it will lock out anyone from opening a network on that .toe file, even the user who set it and other Pro users. Obviously you should save a non-Privacy version before you save a version with Privacy on.
  • implemented FBOs for offscreen rendering. Try this feature out, it's in the Edit->Preferences->TOPs page. When enabled it adds support for for anti-aliased floating point buffers, as well as other formats (like a packed float RGB format that fits into 32-bits per pixel or single 32-bit channel buffers (for speed when doing effects like ambient occlusion)). Speedups also occur.
    • Support for 32x Anti-aliasing added (when FBOs are enabled). for 32-bit float Alpha only pixel format, as well as R11B11G10 format, which is an RGB float format that fits into 32-bits per pixel. Can only represent values above 0. (These are only usable if FBOs are on, which are still experimental)

Bugs Fixed

  • In DAT disconnect - a bug was fixed where a deleted input causes the In DAT to keep its data.
  • Fixed memory corruption that occurs when undoing text entry in a Table DAT.
  • audioplay -v - Fixed –v option not working in audioplay.
  • "timeslice" command will no longer set the global Minimal Realtime Cook’s preference, instead it just sets a temporary setting. Minimal Realtime Cook is a preference that lowers the number of operators it cooks, but sometimes it doesn't cook some it should. It will eventually eliminated once cooking is correctly optimized.
  • CrashAutoSave.toe is now the filename that’s created when Touch crashes.
  • Object CHOP will now correctly cook when the transform of the objects it refers to changes.
  • "lc" command works more like UNIX:
    • lc component (lists children of component)
    • lc non-component (output just that operator)
    • lc -l -T (table format for long option), and added optype to output
    • fixed crashes for node names > 128 chars.
  • other reported crashes fixed
  • The dysfunctional soft locking feature of SOPs is removed.




Build 143 - August 19, 2008

Features

  • double-click a component to go into it - except on active viewers.
  • Sequential Start Index parameter added to Movie In TOP - This allows you to start anywhere in the movie when it is opened or the Reset parameter is toggled.
  • Cook Disable flag of any node assures it never cooks, even if it is part of a chain that is cooking. Find it as a column in the table view of a network (press "t" over a network.) It is useful for components that contain Record, Gesture or Audio Out CHOPs, which are difficult to assure they are not cooking.
  • new Render Pick CHOP option to not clear last picked values when using "Hold Last Picked" Strategy.
  • audioplay audioplay1 0 - will play the audioplay1 CHOP's first clip starting at the beginning. no need for "playstart" after it.
  • new panel values trueu and truev in all panels. By default they are the same as u and v. When in Relative UV mode, they continue to behave the same as they do when not in Relative UV mode (they don’t go into relative mode)
  • undo - new -s option to undo command for short version. to set undo on/off based on global flag use: undo `execute("undo -s -g")`


Unresolved Bug

  • Using middle roller wheel to get out of networks sometimes sticks in the current network. Use "u" to get up. Will be fixed in the next build.


Bug Fixes

  • locked TOP with cooking disabled and no image in the .toe caused a startup hang. Fixed bug that caused locked SOP TOP and CHOPs to not clone/opcp correctly.
  • Audio Play CHOP, when it had no inputs, was triggering unexpectedly.
  • FBX importer will prompt before overwriting existing components.
  • File Out DAT now won't cook unless rewrite is on.
  • when dropping a file, paths now use / instead of \.
  • crash fix when loading an empty invalid .midi file.




Build 88 - August 14, 2008

These are the last touch-ups before the first public build of TouchDesigner 077.

  • 2x2 filtering to the shadow mapping - softens the edge of shadows to help with aliasing.
  • FBX importer support of more data types, including Collada files and deforming jointed characters (to be tested further)
  • Fixed Metaball rendering - they showed up in viewers but not the Render TOP.
  • Override Material in Render TOP - This allows you to specific a material that will be applied to every Geometry that’s rendered in that TOP. Useful for pre-processing passes where you are outputting info about the geometry rather then lighting it.