Best way to customize perform mode

Hello all.

I’m making an interface for a project that can take up different TV/projector outputs, both in number and resolution. My objective is to place an interface on monitor 0 which is the screen I’ll use to control the rest. Usually it is to connected to pairs of screens (for the sake of example, e.g., I have a 4k computer monitor and 2 TVs 1080p left and right that get a whole 3840x1080) and the thing would be for the TVs to start at monitor 1.

What is the best approach to do this? Make a new window object? Following the tutorials from MR I see this is not a good option and we should just use the perform window already contained in the project. One important thing to take into account is the different height from monitor 0 to monitor 1-n. I can’t just make a rectangle for all of them, it might have to be at least 2. I don’t really mind if the interface container not fullscreen but centered.

Thanks in advance.

Hi there, I’d probably render a single window output that spans all of your monitors and setup your PC to have a display layout such as this:

Here’s a quick example I made using my Artio component that shows a simple “previs” setup of the screens:
Artio.tox (70.2 KB)
(Update: most recent version can be found on our GitHub)

You could then take that renderTOP output, add it as the bg to a 7680 x 2160px containerCOMP, and plug that into a single windowCOMP (or even the perform windowCOMP in root) and use that as your perform window. Just make sure it’s aligned to your display output settings and it will draw itself across the entire display canvas. Like a video game, TouchDesigner performs best when it is full screen as a single window and taking up ALL pixels on screen. If you notice a slight black flash when entering and exiting perform mode, then you’re doing it right! And even if you don’t, the important thing is to always render out using a few windows as possible – ideally just one, and spanning the entire display array. If you’re really looking to improve your performance, you can rearrange your outputs like a game of Tetris:


I’ll leave that one to your imagination of how to implement :slight_smile: Cheers!

2 Likes

Thanks @dylanroscover.

This is a very interesting package, just checked your github. So the way to edit the Artio container to my own will is to add the display and its size to the table right? It just spans the replicator. I don’t really know the best way to put that in 2D without errors but I just changed the camera Xform to:

Translate 0 0 1
Rotate 0 0 0
Scale 1 1 1
Pivot 0 0 0
Uniform_Scale 1

So it seems to be splashed without curves. Then I play with the Ortho Width to fit the width of all of them that seems a bit by hand but works here. Now my question is how to I specify which one goes to which display? Can I have the TV2 going to monitor 1? I think I’m going to add in operators to send the texture from outside of the Artia container and don’t change the values too much!

Also, I don’t have a commercial license here so I don’t know why but it seems a bit impossible to test :frowning:

Other question that comes with this is, the perform mode only has the Bounds of All Monitors or Primary Monitor or Specify Monitor. It doesn’t really seem easy to work with an interface that is always monitor 0 independent of resolution (the interface may be w,h/3) but centered in monitor 0 and this logic starting in monitor 1.

Yeah, a commercial license will really help you out for resolutions exceeding 1280… I highly recommend it! Without it, Artio probably won’t be very helpful.

You should be able to simply adjust the resolution of the render1 TOP for your total width/height, and then use the table parameters to adjust width/height/offsets of each display. The bottom left of the render1 TOP is 0,0… the origin. So theoretically you shouldn’t ever have to touch the camera, plus it’s orthogonal anyway.

I think the camera/renderTOP config in Artio is set to a scale of 1 unit (meter) = 1000 pixels, so an offset of 1.92 in the table tx/ty columns yields 1920 pixels. That will give you your offsets with pixel perfect accuracy. It’s probably not the most intuitive at first with the whole 1:1000 ratio, but I find that smaller values for x/y coords is helpful for digesting and moving elements. Huge distances in 3d usually means more computation, although I’ve heard this doesn’t really matter in Touch (perhaps someone from Derivative can confirm). Either way, you can always adjust it to your preference.

The perform mode parameter you’re referencing, Justify and Offset To, is just a reference point for the origin. Touch will always try to display as much of the size of your window comp as it can, no matter how many monitors it spans.

For your setup, which sounds like interactivity on monitor 0 (control) and then just video output on monitors1/2, you may want to use a container approach instead:

Here’s the toe: OutputExample.toe (3.5 KB)

1 Like

Thank you very much for the information and projects.

I think because I am testing your system with the free license I have a bug (I am running only a 4k monitor and an external TV). When I press perform mode both screens are all red. I think this is because touchdesigner is trying to fill all the outputs by default with only 1280x1280 from the first container starting at the bottom left corner (0,0) which is in fact red. As it stretches you get two red screens. It seems that all makes sense to me now :slight_smile:

1 Like