Archive for July, 2008


SpaceNavigator qcData Source Plugin

Allows the use of a 3DConnexion SpaceNavigator 3D controller as a data source in VDMX.
Don’t know if there are any other VDMX users out there who actually have one of these devices, so no idea if this is going to be of any use to anyone else. If you do have both, though, try dropping this into the VDMX plugins folder (the one actually named ‘plugins’, not the qcFX one).
It should then appear in the Plugin Manager list.



Konstructivist qcFX

Just knocked together a quick experimental qcFX, based on a soviet print-style advert I saw for a Billy Idol concert. I’m not a Billy Idol fan, but I did like the graphic effect, so I thought I’d try to create something similar as a video effect in QC. This is just something I put together really quickly, a ‘throwaway effect’ if you like, so it’s probably not particularly efficient. I don’t plan to spend much more time on it, so you’re welcome to take it and do with it what you will.

And, yes, I know it’s another picture of me….
I don’t do it because I’m vain- it’s because I’m lazy, and can’t be bothered to stick anything more interesting than my laptop’s iSight through the effect.
Sorry about that.

In the Widget


Virtual Patches Annoying Bug/Oversight

So; I’ve discovered a great new feature. I’ve also discovered a great new bug to go with it!

If you use a virtual patch in a QTZ, then save a ‘flattened’ version of the file, the virtual patch will be converted into a ‘real’ macro patch. So far, so good- you get a portable file that works fine for someone who doesn’t have your virtual patches installed on their system. The problem is, the macros automatically created this way are not correctly named. In fact, they’re all called ‘Macro Patch’. Which isn’t helpful when it comes to readability. I’ve submitted an Enhancement Request to the Apple Bug Tracker asking for the macros to be automatically named the same as the original virtual patch. Hopefully this will be incorporated into a future version of the program.

The problem isn’t by any means insurmountable- if you give the virtual patch a custom name, then that name is reflected in the macro that’s created when the flattened file is saved, so I’m not put off too much. I’m still a bit worried that since Macros can be a different size from patches, things may not line up as I’d like in my flattened QTZs, but that’s just me being excessively anal, I think. I can tidy that up before release, anyway.

In terms of working on your own stuff, I think virtual patches are probably a real time-saver, and I wish I’d discovered them earlier. At some point in the future, I’m planning to release a set of QTZs to be used as virtual patches, so that everyone can get the dubious benefit of being able to drop tb patches straight into their compositions.


Virtual Patches!

OK, you’ve probably all beed using these for ages, but for me it’s a bit of a revelation. I’d vaguely heard of Virtual Patches from the QC 3 release-notes, but I’d never really thought about using them until recently. Now I think they’re going to be verrrry useful.

Here’s the Apple documentation for them. The basic idea is that you can drop a QTZ into
/Library/Graphics/Quartz Composer Patches
(a folder that will be familiar to Kineme plug-in users) and they’ll show up as patches in the Patch Creator. Any published in or out ports of the QTZ will appear as in or out ports in the patch when you create it in a composition. You can also add a description for the patch by adding it to the meta info for the virtual patch QTZ using the Edit Information item in the Editor menu.

To test out the system, I created a comp with just a number splitter, with a range set from 0 to 1 (which I use all the time), published in and out ports, added a description, and saved it into the correct folder. After restarting QC, it appeared in the Patch Creator panel, complete with description.

This is going to be very useful in the future, I think!
The only potential downside is that you have to save a ‘flattened’ version of any QTZ incorporating virtual patches, for portability. There’s a very good chance that I’m going to regularly forget to do this…


ASCII/String Fun With JavaScript

Prompted by a request to investigate animated text effects for VDMX, I decided to dust off a few little techniques from my mispent early 20s as a Director/Lingo enthusiast. Notice the word ‘enthusiast’; I never got particularly good at it, though I narrowly-missed getting a job as a fulltime Lingo coder, back when CDRom was still a novel idea.

I digress though: what we have here is a collection of basic string and ASCII effects, wrapped up in a simple demo QTZ. I’m not going to say too much about about how they work, because the code in each JavaScript module is pretty well-commented. It’s pretty simple stuff really, but might look nice combined with some animation.

Here’s some sample code. This is for a simple scroller, that moves the text along to the left, wrapping characters back to the end of the string when they fall ‘off the beginning’ (as it were).

Shifts string left according to Offset value and
wraps characters.
With thanks to Memo

function (__string outputString) main (__string inputString, __number Offset)
	// Initialise vars
	var result = new Object();
	var outString = "";
	if(!_testMode) {
		// Get length of input string
		var chars = inputString.length;
		// Get step size so that Offset values from 0 > 1 cycle through
		// all characters in string once
		var step = Offset * chars;
		step = (step == chars) ? 0 : step;
		// Loop through string
		for (i = 0; i < chars; i++) {
			// Variable for index to read from inputString
			var charIndex = i + step;
			// Wrap string index
			charIndex = (charIndex > chars) ? charIndex - chars : charIndex;
			// Accumulate outString by reading from inputString at charIndex
			outString += inputString.charAt(charIndex);
	// Set output string
	result.outputString = outString;
	// Output
	return result;

Only the FX in the second half of the list use both input strings.
The Mix Range control only works for the String Randomise Range and 2-String Wipe Range effects.

QTZ tb JS-ASCII Demo 1.0.3 ‘in the widget’.

New version uploaded. There are lots more things that could be done with this basic technique, but I’m going to leave it for the moment, so I can concentrate on other things. This final (for now) version (1.0.3) fixes a bug with the previous upload, and adds structure output ports to all the JS patches, which could be piped into an Iterator, if you wanted to individually animate the characters.



Just discovered a rather nasty error in my Spacenavigator macro.
Basically, this was causing it to output -1, rather than 0 for all values, if a SpaceNavigator wasn’t plugged-in. Not good.
I forgot that the raw value from the SpaceNavigator HID patch outputs values in the 0 > 1 range (with 0.5 obviously being at the centre of the range), so it should be defaulting to sending out 0.5 to all outputs, if a SpaceNavigator isn’t detected.

Anyway, I’ve fixed the problem, and posted a new version in the widget. Apologies to anyone who might have downloaded and been confused by the old one.


Mathematical Expression Ternary Operator

This is cool! Toby is right, you CAN use the ternary operator in a Mathematical Expression patch. You can even use it to, for example, invert a boolean input. For example:

(Bool == true) ? false : true

works as a a boolean invert. The input and output aren’t recognised as boolean types, so you’ll get orange cables if you attach, say, a bool splitter to the input, and patch the output into the Enable input of a Billboard, for example. It’ll work fine though, and in fact, I often mix number and boolean types in my compositions.

toby*spark pointed out that for the particular case of a boolean invert, an even quicker way of doing it is to simply use


In this case, ‘Bool’ will be the input port name (you can use any name you like), and the patch will output true/1 when the input is false, and false/0 when the input is true. Very handy.


tb VVVVCurve 1.1

OK, this spices it up a bit (albeit in a fairly predictable way, if you’ve seen my previous efforts).
Added tiling texture to the surface, with the usual controls.

The scaling on the texture is a bit screwed. I can’t be bothered to work out how to stop the surface pattern getting squashed, but if anyone else wants to have to go, I’d love to see how you get on.

Available in the widget.


tb VVVVCurve 1.0

This is an odd one:
I’ve been meaning to tackle converting this VVVV shader (‘Curve PhongDirectional’ by woei) for ages, but now I have, I can’t think of any immediate use for it.

The result is a little disappointing. Maybe someone out there will find a use for it though. If you do, let me know.

It’s basically a ribbon-type thing, with various controls for the way it gets from Point 1 to Point2.
As usual, I’ve stripped out all the lighting code and replaced it with simple fake shading, though I may put it back in again for a future version, or add the option to have lighting of not.

This version just uses standard QC patches, but a more intersting future version may make use of my ‘pseaudospreads’ technique. I tried this with the lit version, though, and it didn’t look great, partly because of glitches where the meshes intersected themselves or other mesh instances. The unlit version may work better, I think.


Controls Structures Demo QTZ

Just a really simple JavaScript patch and a macro showing how to combine multiple controls into a single structure, and then extract them back into discrete values again. I know I’ve banged on about this several times before, but the QTZ might just save someone some time.

You can probably get away with sticking the JS patch in a macro, and changing the names of the published ports for the input controls to something that makes more sense for your project, and it’ll still work. You could do the same for the published output ports of the ‘Controls From Struct’ macro. If you need more than 5 controls, you’ll have to edit the JS itself, but it’s pretty self-explanatory really. You’ll also need to add more Structure Key Member patches in Controls From Struct, and set the correct keys.

I’m sure it would be possible to eliminate the Structure Key Member patches and do the whole thing in another JavaScript patch, but the current method seems to work fine. Maybe I’ll tackle that at some point in the future.


July 2008


Blog Stats

  • 495,319 hits