{"id":126,"date":"2024-07-26T10:30:18","date_gmt":"2024-07-26T10:30:18","guid":{"rendered":"https:\/\/absurdinstruments.com\/?p=126"},"modified":"2024-08-01T10:11:03","modified_gmt":"2024-08-01T10:11:03","slug":"touchdesigner-optimisation","status":"publish","type":"post","link":"https:\/\/absurdinstruments.com\/index.php\/2024\/07\/26\/touchdesigner-optimisation\/","title":{"rendered":"Touchdesigner optimisation"},"content":{"rendered":"\n<p>I reviewed content on optimisation in Touchdesigner.   <\/p>\n\n\n\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=JpTv_aZam-I&amp;list=PLH6Y6o7cLK9h4zO98Ow6YiUwhjlOF0DcW\">TouchDesigner Vol.035 Cooking, Optimization, &amp; SceneChanger<\/a> by Ben Voigt is an approximatelyl 3 hour video playlist that covers methods for optimising touchdesigner.  Including an in-depth discussion on cooking &#8211; what it entails, the direction it flows and how to manage it. The video, recorded in 2020, may contain some outdated information. The video made reference to upcoming fixes for some issues mentioned. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Dirty Operators and Cooking<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Dirty Operator<\/h4>\n\n\n\n<p>A dirty operator is when there has been a change in the data state.<br>When an operator is dirty then all the ops after it in the chain are also dirty.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Cooking<\/h4>\n\n\n\n<p>Cooking is the processing of data and it uses memory, cpu\/gpu. The more cooking that happens, the more processing power is used.<\/p>\n\n\n\n<p>Cooking occurs when both these things are true: the op is dirty AND it has something requesting its data.<br>Cooking flows up the chain.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">TIPs<\/h3>\n\n\n\n<p><strong>Put things that always cook, further down the chain<\/strong><br>Some OPs, Noise OPs for example,  always cook.  If you are performing noise on something put it as late in the chain as it can be to still have the desired effect.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Optimise Expressions<\/h4>\n\n\n\n<p>Check your expressions are optimised &#8211; hover over the expression and look for the prompt<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">SOPS<\/h3>\n\n\n\n<p><strong>Where possible make SOP transformations in the Geometry parameters<\/strong><br>The transform SOP is a lot heavier than doing a transformation on a geo.<\/p>\n\n\n\n<p><strong>Where possible don&#8217;t use a MAT<\/strong><br>You can set material properties in the render tab of the Geometry.  For simple shading add materials in the render tab as it will use less computing power.<\/p>\n\n\n\n<p><strong>If you like particles, it is faster to Instance<\/strong><br>Where you can use instancing as a way to take less cooking time by having as few SOPs cooking as possible &#8211; Particles will take more cooking power.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">CHOPS<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Chops with Multiple Channels<\/h4>\n\n\n\n<p>When combining two channels with a math and one cooks and the other doesn&#8217;t they will both have to cook.<\/p>\n\n\n\n<p>**maybe now fixed** CHOPs with multiple channels will cook all channel inputs if at least one is cooking. If this is still true it can be better to separate channels into their own operators. Or use a chop execute dat.<\/p>\n\n\n\n<p>**also perhaps fixed** The same goes for cells in a table dat<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Lags and Filters always cook. <\/h4>\n\n\n\n<p>As do all time dependent operators. Because they need to store what the previous frames were in case they need them, they are always cooking (processing). Use them later in the chain where possible so they don&#8217;t make operators after them cook unnecessarily.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Tools<\/h3>\n\n\n\n<p>Here are some useful optimisation tools <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Probe <\/h4>\n\n\n\n<p>The probe is a tool in the palette (tools menu) that displays a visual representation of memory and processor usage for both GPU and CPU.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Selective cooking <\/h4>\n\n\n\n<p>with a null you can choose selective cooking. It will stop cooking downstream but will force it upstream.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Info Chop <\/h4>\n\n\n\n<p>The info chop provides information on cooking time  and other events and processes. It&#8217;s a good visual way to see if the changes you make are having an effect on the cooking time. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Troubleshooting Tips<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">GPU vs CPU bound<\/h4>\n\n\n\n<p>Discover whether your system is GPU bound or CPU bound is a good first step in identifying any issues with playback.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">GPU bound<\/h5>\n\n\n\n<p>To test whether your <\/p>\n","protected":false},"excerpt":{"rendered":"<p>I reviewed content on optimisation in Touchdesigner. TouchDesigner Vol.035 Cooking, Optimization, &amp; SceneChanger by Ben Voigt is an approximatelyl 3 hour video playlist that covers [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":81,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,15],"tags":[],"class_list":["post-126","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","category-touchdesigner"],"_links":{"self":[{"href":"https:\/\/absurdinstruments.com\/index.php\/wp-json\/wp\/v2\/posts\/126","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/absurdinstruments.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/absurdinstruments.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/absurdinstruments.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/absurdinstruments.com\/index.php\/wp-json\/wp\/v2\/comments?post=126"}],"version-history":[{"count":2,"href":"https:\/\/absurdinstruments.com\/index.php\/wp-json\/wp\/v2\/posts\/126\/revisions"}],"predecessor-version":[{"id":135,"href":"https:\/\/absurdinstruments.com\/index.php\/wp-json\/wp\/v2\/posts\/126\/revisions\/135"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/absurdinstruments.com\/index.php\/wp-json\/wp\/v2\/media\/81"}],"wp:attachment":[{"href":"https:\/\/absurdinstruments.com\/index.php\/wp-json\/wp\/v2\/media?parent=126"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/absurdinstruments.com\/index.php\/wp-json\/wp\/v2\/categories?post=126"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/absurdinstruments.com\/index.php\/wp-json\/wp\/v2\/tags?post=126"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}