{"id":1012,"date":"2025-08-30T18:31:49","date_gmt":"2025-08-31T01:31:49","guid":{"rendered":"http:\/\/fx-td.com\/houdiniandchill\/?p=1012"},"modified":"2025-08-30T18:44:47","modified_gmt":"2025-08-31T01:44:47","slug":"archived-post-by-ogvfx-3","status":"publish","type":"post","link":"http:\/\/fx-td.com\/houdiniandchill\/2025\/08\/30\/archived-post-by-ogvfx-3\/","title":{"rendered":"Archived post by ogvfx"},"content":{"rendered":"<div class=\"postie-post\">\n<p class=\"\">If the point counts are consistent with Id&#8217;s all you need to do is calculate the distance between the shapes to get the length and direction.<br \/>\nsops wrangle: vector targetPos = point(1,&#8221;P&#8221;,@ptnum); vector restPos = point(0,&#8221;P&#8221;,@ptnum);<br \/>\n<a href=\"mailto:v@splashP\" >v@splashP<\/a> = (targetPos &#8211; restPos) * ch(&#8220;splashPMult&#8221;); <a href=\"mailto:v@splashV\" >v@splashV<\/a> = (targetPos -restPos ) * ch(&#8220;splashVMult&#8221;);<br \/>\nYou can create something like a splashP and splashV attribute to control in flip, pops, etc.<br \/>\nI did something like that on the first badguys and some other shows.  <a href=\"https:\/\/zerply.com\/r\/29FebF6u\/badguys-fx\">zerply.com\/r\/29FebF6u\/badguys-fx<\/a><br \/>\nI animated sdf&#8217;s and controlled the ocean sim to match the shapes and timing.<br \/>\nYou&#8217;ll want to calculate a birthFrame in sops, then you can animate the force procedurally.<br \/>\nwrangle in dops: float tf = <a href=\"mailto:f@birthFrame\" >f@birthFrame<\/a> ; float offset = <a href=\"mailto:f@s\" >f@s<\/a>;<br \/>\nfloat tfOffset = tf + ch(&#8220;offset_mult&#8221;);<br \/>\nfloat timer = fit(@Frame,tf,tfOffset,1,0);<br \/>\n<a href=\"mailto:v@P\" >v@P<\/a> += (<a href=\"mailto:v@splashP\" >v@splashP<\/a> * timer)*ch(&#8220;amount_mult&#8221;);<br \/>\n<a href=\"mailto:v@v\" >v@v<\/a> += (<a href=\"mailto:v@splashV\" >v@splashV<\/a> * timer)*ch(&#8220;amount_mult&#8221;);<br \/>\nI did something a bit more technical on elemental using jakes optimal transport but the same idea.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>If the point counts are consistent with Id&#8217;s all you need to do is calculate the distance between the shapes to get the length and direction. sops wrangle: vector targetPos = point(1,&#8221;P&#8221;,@ptnum); vector restPos = point(0,&#8221;P&#8221;,@ptnum); v@splashP = (targetPos &#8211; restPos) * ch(&#8220;splashPMult&#8221;); v@splashV = (targetPos -restPos ) * ch(&#8220;splashVMult&#8221;); You can create something like &hellip; <a href=\"http:\/\/fx-td.com\/houdiniandchill\/2025\/08\/30\/archived-post-by-ogvfx-3\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Archived post by ogvfx<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3],"tags":[],"_links":{"self":[{"href":"http:\/\/fx-td.com\/houdiniandchill\/wp-json\/wp\/v2\/posts\/1012"}],"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=1012"}],"version-history":[{"count":0,"href":"http:\/\/fx-td.com\/houdiniandchill\/wp-json\/wp\/v2\/posts\/1012\/revisions"}],"wp:attachment":[{"href":"http:\/\/fx-td.com\/houdiniandchill\/wp-json\/wp\/v2\/media?parent=1012"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/fx-td.com\/houdiniandchill\/wp-json\/wp\/v2\/categories?post=1012"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/fx-td.com\/houdiniandchill\/wp-json\/wp\/v2\/tags?post=1012"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}