2 Perform Windows

Is it possible to have more then one performance window? For example for two different projectors?

I see there is now a “Set as Perform Window (F1)” option in the new window comp.

Usually I make one output window and then comp together the scene inside. There are some tuts up about the window comp here:

[url]http://matthewragan.com/2015/04/10/thp-494-598-the-window-comp-touchdesigner/[/url]

[url]http://matthewragan.com/2015/04/10/thp-494-598-simple-live-set-up-touchdesigner/[/url]

[url]http://matthewragan.com/2015/04/10/thp-494-598-large-display-arrangement-touchdesigner/[/url]

Yes those are great. I just was hoping I could select two separate window comps and have them both pop up on perform mode. Seemed like it would be easier to change where video is routed if something changes in connections.

You can do that, but you’ll probably see a performance hit. It’s also harder to predict if there will be tearing, and how to trouble shoot that process.
openTwoWindows.toe (4.11 KB)

Yes, as suggested above there is a huge performance hit in Windows OS when 2 or more windows are opened which is why perform mode is limited to 1 window. If you have tones of power and headroom on your system you are free to setup Window COMPs anyway you want and open them in non perform mode, but it’s bad practice and not recommended.

Once you get used to creating one large canvas and moving your sub windows around inside that, its not too hard, albeit a bit unintuitive.

I keep reading that you should only have one Window COMP for good performance, but I have yet to find any information about how to get visual output onto multiple screens in a way that is reliable and performant.

Creating one large canvas and moving your sub windows around inside that; how does that work exactly?

Hi @shortnotion,

our curriculum at learn.derivative.ca covers the basics of that:

In short, use a Panel Component which itself has 2 other Panel Components as children. These 2 can be aligned and receive their own bgs. The main Panel Component can then be used as the Window Operator of the Window COMP.

Hope this help
markus

Thanks @snaut for the link. However, this tutorial (like all tutorials I can find) doesn’t go into how to (reliably?) get each sub-section of the output canvas onto various (hardware) displays (with pixel-perfect alignment).

The page you link to just mentions:

The Window COMP has some parameters that can be especially useful in more complex multi-display arrangements

Am I understanding correctly that you’re gonna have to do all that alignment outside of TD, in the OS’s monitor arrangement configuration? That would seem like a tedious and fragile setup, especially with complex multi-display arrangements.

@shortnotion the video on that page goes into exactly that, aligning your content onto separate display outputs. Let me know if you have further questions after watching it.

Am I understanding correctly that you’re gonna have to do all that alignment outside of TD, in the OS’s monitor arrangement configuration?

That is an incorrect assumption. You do it in TD. TD is designed to output content reliably & pixelperfect to any number of display outputs your hardware can handle.

Thanks for the response @nettoyeur, good to hear that this CAN be arranged inside TD though I still don’t understand how. I’m not sure what I’m missing or if I’m not clearly expressing what information I need, but the video doesn’t really mention physical screens, it just vaguely touches on some of the Window COMP’s alignment options.

I literally just had a test session where I had pixels from one screen bleeding into the other, so I’d love to hear the right way to accurately map your visual content to individual displays in the most performant way.

Let me describe my situation to have a concrete case; I’ve got 8 full HD displays (my PC has two GPUs with 4 display ports each) and I’m arranging my visual content in a TOP that lays out the content of each screen in a 4x2 grid layout of portrait mode rectangles, so the resolution of that TOP is 4320x3840.

How do I get, for example, the top right “rectangle” of 1080x1920 pixels to go to display number 4, to completely fill that display, and to not have any pixels bleeding into other displays and vice versa?

My approach for now was configuring all screens (in the OS/Windows display settings) to have a resolution of 1080x1920 in portrait mode and arranging them in a 4x2 grid and having these settings on my perform Window COMP in TD:

But this is really doing all the alignment in the OS (Windows) not in TD (TD just throws the output to the bottom left and hardly seems to have any awareness about the presence of any the physical displays, aside from their collective bounding box). Though the Windows screen arrangement editor has snapping in place for proper alignment, I still had pixels bleeding into neighbouring screens.

Really hope you can help me figure out what I’m missing!

Hi @shortnotion,

to see why pixels end up bleeding onto other screens, would it be possible for you to share the file with simplified content? Also what videocard are you using and any other details like TouchDesigner build would be interesting.

For maximum performance, it is good practice to use a single Window COMP resulting in a single big canvas that is opened spanning all monitors. In this sense, yes - TouchDesigner only is interested in the bound of all monitors, not individual monitors.

If you want to show the content in portrait mode without setting the monitors to portrait mode, you’d have to prepare you content for that: Use a Flip TOP for each content element to get a final resolution of 7680x2160…

But yeah - the bleed is strange - haven’t seen that before. Your file would be interesting to see.

cheers
Markus
windowOutput.toe (4.8 KB)

Hi @snaut thanks for the feedback, so am I understanding correctly that my current approach is the way to go and there is not a more… “precise” way to control which part of the visual output ends up on which display? (taking as a given that performance has priority and I should render everything in a single TOP)?

For reference, here is the tox that we use when calibrating the screens. Note that the border wasn’t showing perfectly for each screen (it did for some of the screens but not all of them);
placeholder_renderer.tox (4.2 KB)

The TD build we were using during the test was 2023.12000 and the Video cards are 2x NVIDIA Quadro RTXA4000

I failed to mention in my previous message that we did eventually get proper “pixel-perfect” output when we switched from the 4x2 layout to a 8x1 layout (as bleeding seemed to mostly happen to vertically neighbouring screens, though also some of the left/right border weren’t showing properly on about half the screens in the 4x2 layout).

Finally, one last question regarding performance; Let’s say I’d setup my project to have a single perform window showing a TOP that combines the visuals for all displays (as I’m currently doing), but in addition, for each display, I’d add a crop TOP that crops a section from the combined TOP and hook those up to separate non-perform window COMPs that each output directly to an assigned display. Would that have serious impact on performance? Since all the visual content is already being rendered in for the perform window, and only the cropping needs to happen for the additional windows COMP? Or does opening an additional window immediately cause a performance hit?

Hi @shortnotion,

regarding the first paragraph: “more precise” is a difficult term - we are opening a canvas which should be pixel perfect - I can only imagine that there is something with your hardware (monitor) setup or perhaps quadro configuration (any mosaic settings?), DPI Settings, as I can’t right now imagine any way that TouchDesigner would apply extra scaling that would make a pixel perfect 4320 x 3840 texture not perfectly map onto your screen setup.

Regarding the “single TOP” this depends on your content. For example in the placeholder example you sent along, there is no need for the Layout TOP, the parent Container COMP’s size can be set to the 4320x3840 and is already configured to layout the children containers in 4x2 grid. Removing the Layout TOP here can safe quite a bit of resources.
In other cases you might be using a single texture (like a movie) that spans across all screens - in this case you would use this single texture plus an appropriately sized Container COMP as reference for the Window COMP.

Opening multiple Windows causes performance issues - it’s the windows themselves, hence our recommendation to always open a single canvas.
Your question though hints at a special use case as you want to crop from a large texture - happy to explore that more.

I’d like to get to the bottom of the bleeding though - this is something that I have not seen before and should never happen - do you have a Pro License this project is running under and perhaps could make use of our Pro Support?

cheers
Markus

@snaut we currently only have Commercial licenses, though working with the 8x1 layout does work for us so we have a way to fix the bleeding pixels, I’m just trying to get a sense of what the best approach would be.

Good point about the layout TOP inside the Container COMP though; I actually switched from container-based layout to TOP-based layout because I wanted to have the result in a TOP so I can use it for other purposes (I’m mapping the result onto a 3d model to get a virtual preview of the physical space with the screens). I never changed the root COMP from a Container to a Base though.

I actually have another performance-related question about layouts, but I’ll start a new topic for that. You can consider my questions on this topic answered, thanks for your help!