<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="https://digitalproduction.com/wp-content/plugins/xslt/public/template.xsl"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:rssFeedStyles="http://www.wordpress.org/ns/xslt#"
>

<channel>
	<title>Thomas Schlick - DIGITAL PRODUCTION</title>
	<atom:link href="https://digitalproduction.com/author/thomasschlick/feed/" rel="self" type="application/rss+xml" />
	<link>https://digitalproduction.com</link>
	<description>Magazine for Digital Media Production</description>
	<lastBuildDate>Fri, 31 Oct 2025 08:18:46 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
<site xmlns="com-wordpress:feed-additions:1">236729828</site>	<item>
		<title>Marine-Snow-Simulation in Houdini</title>
		<link>https://digitalproduction.com/2025/05/02/houdini-marine-snow-workshop-particle-simulation/</link>
		
		<dc:creator><![CDATA[Thomas Schlick]]></dc:creator>
		<pubDate>Fri, 02 May 2025 10:00:00 +0000</pubDate>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[topnews]]></category>
		<category><![CDATA[deep sea VFX techniques]]></category>
		<category><![CDATA[Houdini]]></category>
		<category><![CDATA[Houdini marine life Simulation]]></category>
		<category><![CDATA[Houdini marine snow tutorial]]></category>
		<category><![CDATA[Houdini underwater particle effects]]></category>
		<category><![CDATA[marine detritus VFX]]></category>
		<category><![CDATA[marine ecosystem VFX]]></category>
		<category><![CDATA[marine snow]]></category>
		<category><![CDATA[marine snow simulation Houdini]]></category>
		<category><![CDATA[Ocean dandruff]]></category>
		<category><![CDATA[ocean FX workshop Houdini]]></category>
		<category><![CDATA[particle simulation]]></category>
		<category><![CDATA[procedural FX Houdini]]></category>
		<category><![CDATA[schlick]]></category>
		<category><![CDATA[SideFX]]></category>
		<category><![CDATA[simulating microfauna in Houdini]]></category>
		<category><![CDATA[subscribers]]></category>
		<category><![CDATA[underwater FX in Houdini]]></category>
		<category><![CDATA[VEX]]></category>
		<category><![CDATA[visualizing biological drift Houdini]]></category>
		<category><![CDATA[Workshop]]></category>
		<guid isPermaLink="false">https://digitalproduction.com/?p=165458</guid>

					<description><![CDATA[<div style="margin: 5px 5% 10px 5%;"><img src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/04/youtube-video-gif.gif?fit=720%2C270&ssl=1" width="720" height="270" title="" alt="" /></div><div><p>Join our workshop and discover how to simulate marine snow and oceanic particles for VFX - Master underwater simulations, ocean effects, and particle-based systems. Perfect for VFX artists and anybody who tripped over the phrase "Ocean dandruff".</p>
<p>The post <a href="https://digitalproduction.com/2025/05/02/houdini-marine-snow-workshop-particle-simulation/">Marine-Snow-Simulation in Houdini</a> first appeared on <a href="https://digitalproduction.com">DIGITAL PRODUCTION</a> and was written by <a href="https://digitalproduction.com/author/thomasschlick/">Thomas Schlick</a>. </p></div>]]></description>
										<content:encoded><![CDATA[<div style="margin: 5px 5% 10px 5%;"><img src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/04/youtube-video-gif.gif?fit=720%2C270&ssl=1" width="720" height="270" title="" alt="" /></div><div><div class='__iawmlf-post-loop-links' style='display:none;' data-iawmlf-post-links='[{&quot;id&quot;:1696,&quot;href&quot;:&quot;https:\/\/en.wikipedia.org\/wiki\/Marine_snow&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20251117025142\/https:\/\/en.wikipedia.org\/wiki\/Marine_snow&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2025-12-27 20:52:56&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-01 11:27:01&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-15 15:37:28&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-21 17:20:11&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-30 07:47:22&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-02 14:57:44&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-15 15:42:03&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-19 22:55:34&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-28 05:25:12&quot;,&quot;http_code&quot;:429},{&quot;date&quot;:&quot;2026-03-11 18:25:40&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-15 08:32:25&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-24 17:25:14&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-07 19:28:04&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-14 14:14:57&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-14 14:14:57&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:1697,&quot;href&quot;:&quot;https:\/\/fmx.de\/en\/about\/fmx-2024\/program\/detail\/event\/28820&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:1698,&quot;href&quot;:&quot;https:\/\/www.facebook.com\/OceanExplorationResearch\/videos\/marine-snow\/487998737099097&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:1699,&quot;href&quot;:&quot;https:\/\/oceanexplorer.noaa.gov\/news\/exploration-extras\/24-national-ocean-month\/welcome.html#water-column&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20250829121754\/https:\/\/oceanexplorer.noaa.gov\/news\/exploration-extras\/24-national-ocean-month\/welcome.html&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2025-12-27 20:53:00&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-15 15:37:32&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-02 14:57:57&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-15 15:42:08&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-19 22:55:37&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-28 05:25:15&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-11 18:25:56&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-15 08:32:35&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-24 17:25:28&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-14 14:15:13&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-14 14:15:13&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:1700,&quot;href&quot;:&quot;https:\/\/upload.wikimedia.org\/wikipedia\/commons\/thumb\/a\/ae\/Stokes_sphere.svg\/1920px-Stokes_sphere.svg.png&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:1701,&quot;href&quot;:&quot;https:\/\/en.wikipedia.org\/wiki\/Stokes%27_law&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20251101224842\/https:\/\/en.wikipedia.org\/wiki\/Stokes%27_law&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2025-12-27 20:53:02&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2025-12-27 20:53:02&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:1702,&quot;href&quot;:&quot;https:\/\/en.wikipedia.org\/wiki\/Inverse-square_law&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20251211215208\/https:\/\/en.wikipedia.org\/wiki\/Inverse-square_law&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2025-12-27 20:53:03&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2025-12-27 20:53:03&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:1703,&quot;href&quot;:&quot;https:\/\/en.wikipedia.org\/wiki\/Lennard-Jones_potential&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20251205002428\/https:\/\/en.wikipedia.org\/wiki\/Lennard-Jones_potential&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2025-12-27 20:53:04&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-13 08:03:40&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-01-13 08:03:40&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;}]'></div>
<p class="wp-block-paragraph">There is always a greater or lesser deposition of organic and inorganic substances in our oceans. This includes, for example, the calcium carbonate shells of diatoms, dead plankton and everything that marine life emits. This continuous shower of material is called <a href="https://en.wikipedia.org/wiki/Marine_snow">marine snow, or ocean dandruff.</a></p>


<div class="wp-block-image">
<figure class="alignleft size-large is-resized cnvs-block-core-image-1745411495353"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/04/image-17.png?quality=72&#038;ssl=1"><img data-recalc-dims="1" height="1080" width="906"  decoding="async"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/04/image-17.png?resize=906%2C1080&#038;quality=72&#038;ssl=1"  alt=""  class="wp-image-165538"  style="aspect-ratio:0.8388914794598202;object-fit:cover;width:250px" ></a></figure>
</div>


<p class="wp-block-paragraph">The idea of writing a VEX programme for Houdini that simulates the movement of marine snow in the ocean came to me during an <a href="https://fmx.de/en/about/fmx-2024/program/detail/event/28820">exciting presentation at FMX 2024 in Stuttgart</a>. Weta had presented just such a model there, but without going into details or even revealing anything about the code. In the end, it was only clear that the script runs in Houdini.</p>



<p class="wp-block-paragraph">I have programming experience, but hardly in the simulation area and mainly in Python. So far I had mainly written batch tools, i.e. programmes that execute repetitive processes, e.g. creating shaders, importing assets, etc. The Marine Snow project seemed manageable to me and a good start to do something in the simulation area. So, let&#8217;s dive in! </p>



<p class="wp-block-paragraph"></p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe class="youtube-player" width="1200" height="675" src="https://www.youtube.com/embed/ymdDz0A8E1c?version=3&#038;rel=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=en-US&#038;autohide=2&#038;wmode=transparent" allowfullscreen="true" style="border:0;" sandbox="allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox"></iframe>
</div></figure>



<h2 id="every-beginning-is-difficult" class="wp-block-heading"><strong>Every beginning is difficult</strong></h2>



<p class="wp-block-paragraph">Ultimately, the big question is always how and where do you start? Apart from the slowly fading memory of the Weta lecture, I had almost no clues as to how the movement of particles could be represented in a physically plausible way. The fact that the simulation was to run in Houdini&#8217;s POP solver was almost all I knew at that point. At least the POP system provides a number of ready-made nodes that can be used to transfer forces to particles. Probably the most common example of such a force is gravity, which can be represented with a POP Force DOP. This was once an idea, but it quickly became apparent that POP Force is not flexible enough. Some things can only be solved properly using a script.</p>



<p class="wp-block-paragraph">So I started by looking for references. What video material was available from which the basic features of the movement or patterns could possibly be derived? Research also involves reading scientific papers. Even if you don&#8217;t understand the maths or only have a rudimentary understanding of it, you can often find valuable approaches in the accompanying texts and descriptions. There was film footage of Marine Snow, but no papers that would have helped me. (<a href="https://www.facebook.com/OceanExplorationResearch/videos/marine-snow/487998737099097/">Here is a link to a video from NOAA</a>, showing a red squid on the ocean, in a &#8220;storm&#8221; of marine snow. <a href="https://oceanexplorer.noaa.gov/news/exploration-extras/24-national-ocean-month/welcome.html#water-column">Have a look at the other results from this Expedition, it is amazing and as usual with Deep Sea Science, quite alien.</a> ).</p>



<figure class="wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler"><div class="wp-block-embed__wrapper">
<div class="fb-video" data-allowfullscreen="true" data-href="https://www.facebook.com/OceanExplorationResearch/videos/487998737099097" style="background-color: #fff; display: inline-block;"></div>
</div></figure>



<p class="wp-block-paragraph">The number of hits for videos was manageable, but sufficient to formulate some assumptions.</p>



<ol start="1" class="wp-block-list">
<li>There are two determining forces: gravity and buoyancy.</li>



<li>The wave motion at the surface amplifies the cyclical up and down motion.</li>



<li>The particles have different sizes and densities, which influences the buoyancy.</li>



<li>New particles are constantly formed and enter the system. Other particles are deposited on the seabed and are thus removed from the system.</li>



<li>The particles are in a medium with a certain viscosity (water).</li>



<li>Turbulent currents cause swirls and sideways movements.</li>
</ol>



<p class="wp-block-paragraph"></p>



<figure class="wp-block-image size-full"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/04/marinesnow_basicforces-2.jpg?quality=80&#038;ssl=1"><img data-recalc-dims="1"  fetchpriority="high"  decoding="async"  width="1200"  height="552"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/04/marinesnow_basicforces-2.jpg?resize=1200%2C552&#038;quality=80&#038;ssl=1"  alt=""  class="wp-image-165633" ></a></figure>



<p class="wp-block-paragraph">So how do we get started? What factors should you take into account and what can you try to formulate later? I found it easiest to simulate the forces mentioned in point 1, i.e. the interplay between gravity and buoyancy. Many people will probably remember the formula below from their school days, as it is one of the fundamental equations of Newtonian physics:</p>



<pre class="wp-block-code"><code>F = m * a</code></pre>



<p class="wp-block-paragraph">The force acting on a particle is the product of its mass and acceleration. For the force of attraction (&#8220;gravitation&#8221;), acceleration is a constant that is characteristic of every body. Here, on Earth, the constant is not called a, but g and has a value of around 9.81 m/s<sup>2</sup>. In physics, the mass is given in [kg]. The force is therefore a compound unit and is called Newton [N].</p>



<pre class="wp-block-code"><code>(1) gravity = particle mass in kg * 9.81 m/s<sup>2</sup></code></pre>



<p class="wp-block-paragraph">The equation may seem trivial, but it is of great importance for a script because it already represents a calculation rule. For the buoyancy, however, I had to use the search engine I trust and it spit out Archimedes&#8217; law of buoyancy.</p>



<pre class="wp-block-code"><code>(2) buoyancy = density of water * particle volume * 9.81 m/s<sup>2</sup></code></pre>



<p class="wp-block-paragraph">The factor 9.81 again corresponds to g from the gravitational force. The particle volume can be approximated as a sphere. For a sphere, a collection of formulae says that the</p>



<pre class="wp-block-code"><code>(3) particle volume = 4/3 * PI * particle radius<sup>3</sup></code></pre>



<p class="wp-block-paragraph">The particle mass can now also be derived:</p>



<pre class="wp-block-code"><code>(4) particle mass = density of the particle * particle volume</code></pre>



<p class="wp-block-paragraph">Before we can start calculating the forces, we first need particles. This is done using a small standard mesh that generates points in a cuboid. These particles in turn are sent to a POP solver, inside which a POP Wrangle performs the necessary calculations. In addition to the POP Wrangle, the interior of the solver also contains a POP Kill Node. A complete description of the network can be found here.<a href="#pop">(→ see POP Up</a>)</p>



<p class="wp-block-paragraph">It is also important to define start values. Their size and dimension ultimately determine the behaviour of the particles just as much as the calculations themselves.</p>



<pre class="wp-block-code"><code>// Initial variables
float g = 9.81; // Gravitational acceleration in m/s^2
float radius_p = 0.005; // Particle radius in m
float rho_p = 1050.0; // Particle density in kg/m^3
float rho_f = 1030.0; // Fluid density in kg/m^3, e.g. water</code></pre>



<p class="wp-block-paragraph">To begin with, the script should determine the particle volume and mass, as these values are then used in the formulae. Equations (3) and (4) therefore result in</p>



<pre class="wp-block-code"><code>// Intitial calculations
float volume_p = (4.0 / 3.0) * M_PI * pow(radius_p, 3);
float mass_p = rho_p * volume_p;</code></pre>



<p class="wp-block-paragraph">The constant M_PI<strong> </strong>is the circle number, which is predefined in VEX with sufficient accuracy.</p>



<p class="wp-block-paragraph">Both forces, i.e. gravity (gravity_force) and buoyancy (buoyancy_force), are vectors, but they only act in the Y direction. Gravity always acts downwards towards the centre of mass, while buoyancy counteracts this force. A standard vector in VEX consists of three components, which here represent the XYZ coordinates.</p>



<pre class="wp-block-code"><code>// Calculate force components
vector gravity_force = mass_p * set(0, -g, 0);
vector bouyancy_force = set(0, (rho_f * volume_p - mass_p) * g, 0);</code></pre>



<p class="wp-block-paragraph">This corresponds to the formulae defined at the beginning with one small exception. With buoyancy_force, the mass is again subtracted in the brackets to obtain the net buoyancy force. This is particularly relevant if a particle&#8217;s density is greater than the density of the liquid. This simulates sinking, as the weight force is greater than the buoyancy.</p>



<p class="wp-block-paragraph"></p><p>The post <a href="https://digitalproduction.com/2025/05/02/houdini-marine-snow-workshop-particle-simulation/">Marine-Snow-Simulation in Houdini</a> first appeared on <a href="https://digitalproduction.com">DIGITAL PRODUCTION</a> and was written by <a href="https://digitalproduction.com/author/thomasschlick/">Thomas Schlick</a>. </p></div>]]></content:encoded>
					
		
		
		<enclosure url="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/04/youtube-video-gif.gif?fit=720%2C270&#038;ssl=1" length="409358" type="image/jpg" />
<media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/04/youtube-video-gif.gif?fit=720%2C270&#038;ssl=1" width="720" height="270" medium="image" type="image/jpeg">
	<media:copyright>DIGITAL PRODUCTION</media:copyright>
	<media:title></media:title>
	<media:description type="html"><![CDATA[]]></media:description>
</media:content>
<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/04/youtube-video-gif.gif?fit=720%2C270&#038;ssl=1" width="720" height="270" />
<post-id xmlns="com-wordpress:feed-additions:1">165458</post-id>	</item>
	</channel>
</rss>
