{"id":9610,"date":"2025-03-16T23:25:07","date_gmt":"2025-03-17T03:25:07","guid":{"rendered":"https:\/\/www.getoffthisplanet.com\/blog\/?p=9610"},"modified":"2025-03-17T08:10:08","modified_gmt":"2025-03-17T12:10:08","slug":"noise","status":"publish","type":"post","link":"https:\/\/www.getoffthisplanet.com\/blog\/2025\/03\/16\/noise\/","title":{"rendered":"Noise"},"content":{"rendered":"<div class=\"boldgrid-section\">\n<div class=\"container\">\n<div class=\"row\" style=\"padding-top: 10px;\">\n<div class=\"col-lg-12 col-md-12 col-xs-12 col-sm-12\">\n<p class=\"\" style=\"font-family: 'Open Sans'; font-weight: 400;\" data-font-family=\"Open Sans\" data-font-weight=\"400\" data-font-style=\"\">So this is pretty neat.&nbsp;&nbsp;<\/p>\n<p class=\"\" style=\"font-family: 'Open Sans'; font-weight: 400;\" data-font-family=\"Open Sans\" data-font-weight=\"400\" data-font-style=\"\">I wanted to add clouds to this city scene using a static <a href=\"https:\/\/www.openvdb.org\/\" target=\"_blank\" rel=\"noopener\">VDB file<\/a>.&nbsp; Ok, no big deal but then I wanted to use an animated <a href=\"https:\/\/en.wikipedia.org\/wiki\/Procedural_texture\" target=\"_blank\" rel=\"noopener\">procedurally generated noise texture<\/a> to give the cloud a little pizazz.&nbsp;<\/p>\n<p class=\"\" style=\"font-family: 'Open Sans'; font-weight: 400;\" data-font-family=\"Open Sans\" data-font-weight=\"400\" data-font-style=\"\">That&#8217;s the problem.&nbsp;&nbsp;<\/p>\n<p class=\"\" style=\"font-family: 'Open Sans'; font-weight: 400;\" data-font-family=\"Open Sans\" data-font-weight=\"400\" data-font-style=\"\">3ds Max has never had a simple, nonconvoluted way to animate any types of procedural noise seamlessly over a given amount of time\/frames.&nbsp; I&#8217;m not sure any of the big 3D packages can do it and I&#8217;ve never been sure why.<\/p>\n<p class=\"\" style=\"font-family: 'Open Sans'; font-weight: 400;\" data-font-family=\"Open Sans\" data-font-weight=\"400\" data-font-style=\"\">Almost 25 years ago there was a Max plugin which added a <a href=\"https:\/\/maxplugins.de\/max9.php?search=Noise+Loop+v1.0&amp;sort=Author\" target=\"_blank\" rel=\"noopener\">Loopable Noise Controller<\/a> for some things, but that&#8217;s long gone and the last version out there is for 3ds Max r6 from 2001.&nbsp; So, as I&#8217;m sitting there playing with the clouds and wishing I didn&#8217;t have to load up After Effects to generate an entire 300 frame image sequence of a seamlessly looping animated noise texture, it occurs to me&#8230;get ChatGPT to write a noise <a href=\"https:\/\/en.wikipedia.org\/wiki\/Shader\" target=\"_blank\" rel=\"noopener\">shader<\/a> that loops.&nbsp;<\/p>\n<p class=\"\" style=\"font-family: 'Open Sans'; font-weight: 400;\" data-font-family=\"Open Sans\" data-font-weight=\"400\" data-font-style=\"\">Autodesk maintains a <a href=\"https:\/\/github.com\/ADN-DevTech\/3dsMax-OSL-Shaders\" target=\"_blank\" rel=\"noopener\">Github<\/a> of <a href=\"https:\/\/en.wikipedia.org\/wiki\/Open_Shading_Language\" target=\"_blank\" rel=\"noopener\">OSL shaders<\/a> which is where I grabbed the noise.osl file.&nbsp; I opened that file up in a text editor and copied the contents into a ChatGPT window.&nbsp; I then asked ChatGPT to modify it by adding the ability to, and UI options for, seamlessly looping the noise over time.<\/p>\n<p class=\"\" style=\"font-family: 'Open Sans'; font-weight: 400;\" data-font-family=\"Open Sans\" data-font-weight=\"400\" data-font-style=\"\">It fucking works.&nbsp;<\/p>\n<p class=\"\" style=\"font-family: 'Open Sans'; font-weight: 400;\" data-font-family=\"Open Sans\" data-font-weight=\"400\" data-font-style=\"\">The shader code that ChatGPT spat out freaking works.&nbsp; I loaded up the OSL in Max as normal and there it is.&nbsp; Everything after Amplitude is all ChatGPT&#8217;s code:<\/p>\n<p class=\"\" data-font-family=\"Open Sans\" data-font-weight=\"400\" data-font-style=\"\"><a href=\"https:\/\/www.getoffthisplanet.com\/blog\/wp-content\/uploads\/2025\/03\/20250316_A_noiselooper.osl_.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9615\" src=\"https:\/\/www.getoffthisplanet.com\/blog\/wp-content\/uploads\/2025\/03\/20250316_A_noiselooper.osl_.png\" alt=\"\" width=\"800\" height=\"450\" srcset=\"https:\/\/www.getoffthisplanet.com\/blog\/wp-content\/uploads\/2025\/03\/20250316_A_noiselooper.osl_.png 800w, https:\/\/www.getoffthisplanet.com\/blog\/wp-content\/uploads\/2025\/03\/20250316_A_noiselooper.osl_-300x169.png 300w, https:\/\/www.getoffthisplanet.com\/blog\/wp-content\/uploads\/2025\/03\/20250316_A_noiselooper.osl_-768x432.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<p class=\"\" style=\"font-family: 'Open Sans'; font-weight: 400;\" data-font-family=\"Open Sans\" data-font-weight=\"400\" data-font-style=\"\">Here are ChatGPT&#8217;s instructions on how to use the shader:<\/p>\n<p class=\"\" data-font-family=\"Open Sans\" data-font-weight=\"400\" data-font-style=\"\"><a href=\"https:\/\/www.getoffthisplanet.com\/blog\/wp-content\/uploads\/2025\/03\/20250316_B_noiselooper.osl_.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9616\" src=\"https:\/\/www.getoffthisplanet.com\/blog\/wp-content\/uploads\/2025\/03\/20250316_B_noiselooper.osl_.png\" alt=\"\" width=\"800\" height=\"450\" srcset=\"https:\/\/www.getoffthisplanet.com\/blog\/wp-content\/uploads\/2025\/03\/20250316_B_noiselooper.osl_.png 800w, https:\/\/www.getoffthisplanet.com\/blog\/wp-content\/uploads\/2025\/03\/20250316_B_noiselooper.osl_-300x169.png 300w, https:\/\/www.getoffthisplanet.com\/blog\/wp-content\/uploads\/2025\/03\/20250316_B_noiselooper.osl_-768x432.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<p class=\"\" style=\"font-family: 'Open Sans'; font-weight: 400;\" data-font-family=\"Open Sans\" data-font-weight=\"400\" data-font-style=\"\">Results for a 300 frame loop:<\/p>\n<p class=\"\" data-font-family=\"Open Sans\" data-font-weight=\"400\" data-font-style=\"\"><a href=\"https:\/\/www.getoffthisplanet.com\/blog\/wp-content\/uploads\/2025\/03\/20250316_A__250colors.gif\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9617\" src=\"https:\/\/www.getoffthisplanet.com\/blog\/wp-content\/uploads\/2025\/03\/20250316_A__250colors.gif\" alt=\"\" width=\"800\" height=\"450\"><\/a><\/p>\n<p class=\"\" style=\"font-family: 'Open Sans'; font-weight: 400;\" data-font-family=\"Open Sans\" data-font-weight=\"400\" data-font-style=\"\">See, I&#8217;ve been wanting to be able to do this, <em>like this<\/em>, for a good long while but do not have the math or coding skills required to create it.<\/p>\n<p class=\"\" style=\"font-family: 'Open Sans'; font-weight: 400;\" data-font-family=\"Open Sans\" data-font-weight=\"400\" data-font-style=\"\">The yellow box object has an <a href=\"https:\/\/help.autodesk.com\/view\/3DSMAX\/2025\/ENU\/?guid=arnold_for_3ds_max_ax_shapes_ax_properties_modifier_html\" target=\"_blank\" rel=\"noopener\">Arnold Properites modifier<\/a> in the stack which uses our new noiselooper.osl to drive a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Displacement_mapping\" target=\"_blank\" rel=\"noopener\">displacement map<\/a>.&nbsp; The black and white inset animation is the actual map the noiselooper created.<\/p>\n<p class=\"\" style=\"font-family: 'Open Sans'; font-weight: 400;\" data-font-family=\"Open Sans\" data-font-weight=\"400\" data-font-style=\"\">I looked at the code a little but haven&#8217;t started hacking away at it to see what it does yet.&nbsp; My concern is that the noise just kind of ping-pong&#8217;s back and forth to make a loop which could become noticeably distracting.&nbsp;<\/p>\n<p class=\"\" style=\"font-family: 'Open Sans'; font-weight: 400;\" data-font-family=\"Open Sans\" data-font-weight=\"400\" data-font-style=\"\">All in all though, this is excellent alternative to manually setting up and using blending techniques between two animated noise maps in Max or using After Effects to render out an image sequence.<\/p>\n<p class=\"\" style=\"font-family: 'Open Sans'; font-weight: 400;\" data-font-family=\"Open Sans\" data-font-weight=\"400\" data-font-style=\"\">Good going, ChatGPT.&nbsp; If I look at the code closer and it seems to be doing more than just ping-pong&#8217;ing and\/or if there are any improvements to it, I&#8217;ll post the .osl here.&nbsp; ChatGPT said it could achieve the noise loops a few different ways without relying on this exact same method.&nbsp; I dunno, I&#8217;m already flipping shocked this worked, so who knows.<\/p>\n<p class=\"\" data-font-family=\"Open Sans\" data-font-weight=\"400\" data-font-style=\"\"><a href=\"https:\/\/www.getoffthisplanet.com\/blog\/wp-content\/uploads\/2025\/03\/20250316_B__250colors.gif\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9618\" src=\"https:\/\/www.getoffthisplanet.com\/blog\/wp-content\/uploads\/2025\/03\/20250316_B__250colors.gif\" alt=\"\" width=\"800\" height=\"450\"><\/a><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>So this is pretty neat.&nbsp;&nbsp; I wanted to add clouds to this city scene using a static VDB file.&nbsp; Ok, no big deal but then I wanted to use an animated procedurally generated noise texture to give the cloud a little pizazz.&nbsp; That&#8217;s the problem.&nbsp;&nbsp; 3ds Max has never had a simple, nonconvoluted way to &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"\" href=\"https:\/\/www.getoffthisplanet.com\/blog\/2025\/03\/16\/noise\/\"> <span class=\"screen-reader-text\">Noise<\/span> Read More &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"default","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-9610","post","type-post","status-publish","format-standard","hentry","category-processing"],"_links":{"self":[{"href":"https:\/\/www.getoffthisplanet.com\/blog\/wp-json\/wp\/v2\/posts\/9610","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.getoffthisplanet.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.getoffthisplanet.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.getoffthisplanet.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.getoffthisplanet.com\/blog\/wp-json\/wp\/v2\/comments?post=9610"}],"version-history":[{"count":8,"href":"https:\/\/www.getoffthisplanet.com\/blog\/wp-json\/wp\/v2\/posts\/9610\/revisions"}],"predecessor-version":[{"id":9627,"href":"https:\/\/www.getoffthisplanet.com\/blog\/wp-json\/wp\/v2\/posts\/9610\/revisions\/9627"}],"wp:attachment":[{"href":"https:\/\/www.getoffthisplanet.com\/blog\/wp-json\/wp\/v2\/media?parent=9610"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.getoffthisplanet.com\/blog\/wp-json\/wp\/v2\/categories?post=9610"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.getoffthisplanet.com\/blog\/wp-json\/wp\/v2\/tags?post=9610"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}