{"id":1028,"date":"2025-09-23T12:35:38","date_gmt":"2025-09-23T19:35:38","guid":{"rendered":"https:\/\/fx-td.com\/houdiniandchill\/?p=1028"},"modified":"2025-09-23T12:48:05","modified_gmt":"2025-09-23T19:48:05","slug":"archived-post-by-igor-elovikov","status":"publish","type":"post","link":"http:\/\/fx-td.com\/houdiniandchill\/2025\/09\/23\/archived-post-by-igor-elovikov\/","title":{"rendered":"Archived post by igor.elovikov"},"content":{"rendered":"<div class=\"postie-post\">\n<p class=\"\">here is the contact sheet packer inside native copernicus context very hacky and very fast though<\/p>\n<p class=\"\">relies on couple of hacks: * access to time dependent source inside &#8220;simulated&#8221; block &#8211; so packing is basically frame by frame sim * &#8220;custom&#8221; Time Shift COP based on h21 python snippet<br \/>\nso how is this reliable i&#8217;m not sure<\/p>\n<p class=\"\">here is the hip (i cleaned up it a bit)<\/p>\n<p class=\"\">i wonder now if i can remove time dependency on time shift (though may be it&#8217;s just not possible and I need a stash after that)<\/p>\n<p class=\"\">hm, the above just leads me to an interesting conclusion<br \/>\nlooks like `$F` (`hou.frame()` or `hou,time()`) are evaluated in simulated block context this is basically just one backdoor to inject dependency in block<br \/>\nit&#8217;s just one number but can be exploited already  for example a packing variations of any op like this example where sdf shape dependent on frame.  it&#8217;s still cumbersome but randomized contact sheet from *any* operator is quite possible<\/p>\n<p class=\"\">\n<p class=\"\">no, i think i got it wrong, here is what i got from analyzing evaluating path sorry if this is known, but i think it&#8217;s quite interesting for block programming<br \/>\n* Compiled block is baking block to apex graph. No expressions, all parameters are evaluated and baked &#8211; so no easy iteration and requires this hack of either layer with int or geometry with detail attribute (considering it has a feedback), parametrizing operators is very hard, at least for now, I guess in future sidefx adds additional evaluating context * Simulated block &#8211; _all_ expressions are evaluated, this is not an apex execution, it&#8217;s a live network. No need for iteration hack &#8211; iteration is `$F`. Way easier to parametrize (all expressions are &#8220;live&#8221;) but getting the result at X iteration is hacky, but easily solveable via Python COP and pulling layer at specific frame<\/p>\n<p>Attachments in this post: <br \/><a href=\"http:\/\/fx-td.com\/houdiniandchill\/wp-content\/uploads\/discord\/20253509\/23\/25\/sheet.gif\">http:\/\/fx-td.com\/houdiniandchill\/wp-content\/uploads\/discord\/20253509\/23\/25\/sheet.gif<\/a><br \/><a href=\"http:\/\/fx-td.com\/houdiniandchill\/wp-content\/uploads\/discord\/20253509\/23\/25\/sheet-as-sim.hip\">http:\/\/fx-td.com\/houdiniandchill\/wp-content\/uploads\/discord\/20253509\/23\/25\/sheet-as-sim.hip<\/a><br \/><a href=\"http:\/\/fx-td.com\/houdiniandchill\/wp-content\/uploads\/discord\/20253509\/23\/25\/image.png\">http:\/\/fx-td.com\/houdiniandchill\/wp-content\/uploads\/discord\/20253509\/23\/25\/image.png<\/a><br \/><a href=\"http:\/\/fx-td.com\/houdiniandchill\/wp-content\/uploads\/discord\/20253509\/23\/25\/cop-frame-expression.hip\">http:\/\/fx-td.com\/houdiniandchill\/wp-content\/uploads\/discord\/20253509\/23\/25\/cop-frame-expression.hip<\/a><\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>here is the contact sheet packer inside native copernicus context very hacky and very fast though relies on couple of hacks: * access to time dependent source inside &#8220;simulated&#8221; block &#8211; so packing is basically frame by frame sim * &#8220;custom&#8221; Time Shift COP based on h21 python snippet so how is this reliable i&#8217;m &hellip; <a href=\"http:\/\/fx-td.com\/houdiniandchill\/2025\/09\/23\/archived-post-by-igor-elovikov\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Archived post by igor.elovikov<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[16],"tags":[],"_links":{"self":[{"href":"http:\/\/fx-td.com\/houdiniandchill\/wp-json\/wp\/v2\/posts\/1028"}],"collection":[{"href":"http:\/\/fx-td.com\/houdiniandchill\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/fx-td.com\/houdiniandchill\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/fx-td.com\/houdiniandchill\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/fx-td.com\/houdiniandchill\/wp-json\/wp\/v2\/comments?post=1028"}],"version-history":[{"count":0,"href":"http:\/\/fx-td.com\/houdiniandchill\/wp-json\/wp\/v2\/posts\/1028\/revisions"}],"wp:attachment":[{"href":"http:\/\/fx-td.com\/houdiniandchill\/wp-json\/wp\/v2\/media?parent=1028"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/fx-td.com\/houdiniandchill\/wp-json\/wp\/v2\/categories?post=1028"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/fx-td.com\/houdiniandchill\/wp-json\/wp\/v2\/tags?post=1028"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}