<?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>VEX - DIGITAL PRODUCTION</title>
	<atom:link href="https://digitalproduction.com/tag/vex/feed/" rel="self" type="application/rss+xml" />
	<link>https://digitalproduction.com</link>
	<description>Magazine for Digital Media Production</description>
	<lastBuildDate>Tue, 21 Apr 2026 06:45:14 +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>Natsura 0.6 adds effectors and Nanite export for Houdini Foliage</title>
		<link>https://digitalproduction.com/2026/04/21/natsura-0-6-adds-effectors-and-nanite-export-for-houdini-foliage/</link>
		
		<dc:creator><![CDATA[Bela Beier]]></dc:creator>
		<pubDate>Tue, 21 Apr 2026 04:00:00 +0000</pubDate>
				<category><![CDATA[News]]></category>
		<category><![CDATA[topnews]]></category>
		<category><![CDATA[foliage]]></category>
		<category><![CDATA[growth]]></category>
		<category><![CDATA[Houdini]]></category>
		<category><![CDATA[Nanite]]></category>
		<category><![CDATA[PostHog]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[SideFX]]></category>
		<category><![CDATA[Unreal]]></category>
		<category><![CDATA[USD]]></category>
		<category><![CDATA[Vegetation]]></category>
		<category><![CDATA[VEX]]></category>
		<guid isPermaLink="false">https://digitalproduction.com/?p=271030</guid>

					<description><![CDATA[<div style="margin: 5px 5% 10px 5%;"><img src="https://digitalproduction.com/wp-content/uploads/2026/04/tree_dark-1013x1080.avif" width="1013" height="1080" title="" alt="A majestic tree with a thick, textured trunk and lush, vibrant green foliage cascading down its branches. Swirling green mist envelops parts of the tree, creating an ethereal, mystical atmosphere. The sunlight filters through the leaves, highlighting the tree's grandeur." /></div><div><p>New growth controls, a new assembly workflow, and a long changelog full of speedups, warnings, and some very honest rough edges.</p>
<p>The post <a href="https://digitalproduction.com/2026/04/21/natsura-0-6-adds-effectors-and-nanite-export-for-houdini-foliage/">Natsura 0.6 adds effectors and Nanite export for Houdini Foliage</a> first appeared on <a href="https://digitalproduction.com">DIGITAL PRODUCTION</a> and was written by <a href="https://digitalproduction.com/author/qualityjellyfish45275761d0/">Bela Beier</a>. </p></div>]]></description>
										<content:encoded><![CDATA[<div style="margin: 5px 5% 10px 5%;"><img src="https://digitalproduction.com/wp-content/uploads/2026/04/tree_dark-1013x1080.avif" width="1013" height="1080" title="" alt="A majestic tree with a thick, textured trunk and lush, vibrant green foliage cascading down its branches. Swirling green mist envelops parts of the tree, creating an ethereal, mystical atmosphere. The sunlight filters through the leaves, highlighting the tree's grandeur." /></div><div><div class='__iawmlf-post-loop-links' style='display:none;' data-iawmlf-post-links='[{&quot;id&quot;:14126,&quot;href&quot;:&quot;https:\/\/www.natsura.com\/?&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20260421040545\/https:\/\/www.natsura.com\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-21 04:28:49&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-21 04:28:49&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:1018,&quot;href&quot;:&quot;https:\/\/www.sidefx.com&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20251204143154\/https:\/\/www.sidefx.com\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2025-12-27 16:49:59&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2025-12-30 19:13:28&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-02 22:28:13&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-06 08:10:53&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-12 14:20:10&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-15 15:27:19&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-18 21:23:53&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-23 17:31:41&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-27 05:49:09&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-30 19:43:31&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-03 08:00:07&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-06 17:16:13&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-09 22:17:08&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-13 21:44:39&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-17 05:01:52&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-20 07:14:40&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-23 12:07:04&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-26 14:03:20&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-02 11:22:10&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-06 02:41:44&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-09 10:03:57&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-12 11:24:26&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-16 08:14:24&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-19 15:14:12&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-22 15:31:58&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-26 07:19:45&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-29 11:44:56&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-02 04:08:18&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-07 01:21:48&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-10 09:57:58&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-13 10:38:40&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-16 11:11:32&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-19 16:00:42&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-23 01:01:05&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-23 01:01:05&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:111,&quot;href&quot;:&quot;https:\/\/www.unrealengine.com&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20151204232319\/https:\/\/www.unrealengine.com\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2025-12-27 12:26:48&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2025-12-30 15:25:07&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-01-02 20:30:37&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-01-06 15:03:35&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-01-10 04:35:10&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-01-13 06:58:45&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-01-16 19:02:02&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-01-19 19:09:16&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-01-23 03:22:56&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-01-26 10:01:27&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-01-29 11:03:40&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-01 18:36:23&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-05 05:48:52&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-08 15:13:49&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-11 17:43:59&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-14 18:34:30&quot;,&quot;http_code&quot;:503},{&quot;date&quot;:&quot;2026-02-17 20:27:22&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-22 05:04:54&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-02-25 22:07:00&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-01 11:10:11&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-04 12:22:44&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-07 12:49:52&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-10 15:51:24&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-13 19:39:29&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-16 20:28:09&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-20 04:51:34&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-23 11:07:48&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-26 17:41:34&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-03-29 18:33:16&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-02 05:00:23&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-05 10:16:49&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-08 14:32:15&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-11 18:22:44&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-14 18:48:25&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-17 19:30:42&quot;,&quot;http_code&quot;:403},{&quot;date&quot;:&quot;2026-04-21 04:01:48&quot;,&quot;http_code&quot;:403}],&quot;broken&quot;:true,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-21 04:01:48&quot;,&quot;http_code&quot;:403},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:14127,&quot;href&quot;:&quot;https:\/\/www.natsura.com\/?utm_source=chatgpt.com&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;}]'></div>
<p class="wp-block-paragraph"><em>For those who don&#8217;t know the tool: Natsura, the <a href="https://www.natsura.com/?" title=""> Houdini foliage toolkit</a> lives inside <a href="https://www.sidefx.com/">Houdini</a>, can push assets to <a href="https://www.unrealengine.com/">Unreal Engine</a> workflows, and now leans harder into assemblies, mapping, and export glue.</em></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 style="width: 640px;" class="wp-video"><video class="wp-video-shortcode" id="video-271030-1" width="640" height="360" preload="metadata" controls="controls"><source type="video/mp4" src="https://h734mnxlx8nxangb.public.blob.vercel-storage.com/output_bg_h264.mp4?_=1" /><a href="https://h734mnxlx8nxangb.public.blob.vercel-storage.com/output_bg_h264.mp4">https://h734mnxlx8nxangb.public.blob.vercel-storage.com/output_bg_h264.mp4</a></video></div>
</div></figure>



<h3 id="what-shipped-in-0-6" class="wp-block-heading">What shipped in 0.6</h3>



<p class="wp-block-paragraph">Version 0.6.0.0 landed on March 25, 2026, with support for Houdini 20.5 and Houdini 21.0. The release calls out modular effectors, Nanite assemblies, an assembly decorator, a revamped UI, analytics, scan extension, and Houdini 21 support. The update introduces an Assembly workflow aimed at quickly rigging twig and branch libraries and assembling canopies. There is also a set of tools for <a href="https://digitalproduction.com/tag/unreal/" title="Unreal">Unreal </a>Nanite skeletal assembly support, paired with wind authoring tools. Assembly-related nodes are flagged as experimental in the release notes, though. Be careful. </p>



<p class="wp-block-paragraph">On the shaping side, the release adds a modular effector system like a bolt on simulation modifiers with no VEX required. Effectors are an extendable stack, and the base effector node supports writing VEX to extend the simulation and respond to geometry and inputs.</p>



<figure class="wp-block-image"><img data-recalc-dims="1"  fetchpriority="high"  decoding="async"  width="682"  height="360"  sizes="(max-width: 1200px) 100vw, 1200px"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2026/04/image.gif?resize=682%2C360&#038;ssl=1"  alt="https://www.natsura.com/_vercel/image?url=%2Ffeatures%2Fgifs%2Fphototropism.gif&amp;w=1536&amp;q=80"  class="wp-image-271686" ></figure>



<h3 id="assemblies-decorators-and-unreal-export" class="wp-block-heading">Assemblies, decorators, and Unreal export</h3>



<p class="wp-block-paragraph">The release adds new nodes for an assembly pipeline, including an assembly resource node for mesh library import and auto rigging, an assembly decoration node for canopy decoration that can pick modules based on traits and transform instance hierarchies with rigid rotations, and a classify node for trait-based module classification.</p>



<p class="wp-block-paragraph">Export to Unreal related workflows gets multiple mentions. The export node for Unreal <a href="https://digitalproduction.com/tag/nanite/" title="Nanite">Nanite </a>assembly lists updates including material support, skeletal and static assembly, fixed instance naming, and removal of a transform on points that broke instancing. There is also a LOP node for USD workflows that creates a Nanite assembly for SOP based creation.</p>



<p class="wp-block-paragraph">Wind support is expanded through new nodes for wind initialisation and validation, wind class assignment for Unreal, a wind preview visualisation tool that is functional but not accurate or meant to look good, and a node that exports UE5 DynamicWindSkeletalData as JSON. If your environment team already has a wind data convention, this is the part to validate early, especially around naming, material binding, and what your in-engine tooling expects.</p>



<h3 id="effectors-guides-and-growth-controls" class="wp-block-heading">Effectors, guides, and growth controls</h3>



<p class="wp-block-paragraph">Several new effectors are listed: deflection, magnet attraction, gravitropism, gravity, and noise based growth perturbation. The grow node line gets a long set of updates in this release, including a new spiral parameter with absolute and relative modes, integration with the effector stack, and an updated decorator stack format to match the effector stack.</p>



<p class="wp-block-paragraph">One practical change is the way mapping and prim construction are described. Map prim construction is deferred to grow, which is described as reducing node count and compile time. There is also an instant colour preview mentioned, plus options for skeleton swapping and custom draw modules. Growth workflows appear to be treated as a family of versions, with backwards compatibility restored across multiple grow versions and various mapping and parameter warning cleanups.</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/Fm00WY8dCT4?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&#038;listType=playlist&#038;list=PLAENANEmRYZV2fi6HGp_1iOg_2ohOq446" allowfullscreen="true" style="border:0;" sandbox="allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox"></iframe>
</div></figure>



<h3 id="rig-simplification-and-reskinning" class="wp-block-heading">Rig simplification and reskinning</h3>



<p class="wp-block-paragraph">Rig simplification tooling shows up both as a new simplify rig node and as updates to a simplify rig reskin path, as well as multi stem tree support, chaining of simplify nodes, and added carve method and max joints count.  If your pipeline needs a predictable joint budget for game ready trees, this is where you will want to spend time. </p>



<h3 id="analytics-and-privacy-details" class="wp-block-heading">Analytics and privacy details</h3>



<p class="wp-block-paragraph">Analytics is &#8220;opt-in&#8221; and disabled by default, with no data collected without explicit user consent.  If you work in an environment with strict compliance rules, the opt in default and EU cloud note are helpful details, but you still need to run your own review. Make sure your team knows what is allowed, and that tool telemetry decisions match your facility policy.</p>



<p class="wp-block-paragraph">The notes also state that 0.7 will be a breaking release, and this 0.6 release includes precursor work such as a standardised mapping architecture, groundwork for decorator cook trigger decoupling, and a foundation for mappable decorator parameters. Read that as a warning to keep a rollback plan, and to budget time for update testing before you touch active porudction setups.</p>



<figure class="wp-block-image size-full"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2026/04/fm00wy8dct4-00-01-28-install-natsura-package-windows.png?quality=72&#038;ssl=1"><img data-recalc-dims="1"  decoding="async"  width="1200"  height="675"  sizes="(max-width: 1200px) 100vw, 1200px"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2026/04/fm00wy8dct4-00-01-28-install-natsura-package-windows.png?resize=1200%2C675&#038;quality=72&#038;ssl=1"  alt="A dark-themed user interface displaying an account overview for &#039;rFatsura&#039;. Sections include subscription status, billing information, and recent transactions. Below, available licenses are listed with their active statuses and details like license keys, devices, and created dates."  class="wp-image-271680" ></a></figure>



<h3 id="compatibility-notes-for-houdini-artists" class="wp-block-heading">Compatibility notes for Houdini artists</h3>



<p class="wp-block-paragraph">Houdini 21 support is obvious, including mention of an APEX graph schema enforcement fix. The release also claims continued full Houdini 20.5 support, plus compatibility work around Qt bindings.</p>



<p class="wp-block-paragraph">In practice, this release spans a lot of surface area: SOP level nodes, UI panels, export to Unreal, USD workflow hooks, analytics, and a mapping engine refactor. That is a lot of moving parts for a minor release number, even if the changelog is transparent about what is experimental. Treat the upgrade like you would any node library update: keep a copy of old scenes, validate the graphs, and test exports end to end before shipping anything client facing.</p>



<p class="wp-block-paragraph"><br /><a href="https://www.natsura.com/?utm_source=chatgpt.com">https://www.natsura.com/</a></p>



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



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



<p class="wp-block-paragraph"></p><p>The post <a href="https://digitalproduction.com/2026/04/21/natsura-0-6-adds-effectors-and-nanite-export-for-houdini-foliage/">Natsura 0.6 adds effectors and Nanite export for Houdini Foliage</a> first appeared on <a href="https://digitalproduction.com">DIGITAL PRODUCTION</a> and was written by <a href="https://digitalproduction.com/author/qualityjellyfish45275761d0/">Bela Beier</a>. </p></div>]]></content:encoded>
					
		
		<enclosure url="https://h734mnxlx8nxangb.public.blob.vercel-storage.com/output_bg_h264.mp4" length="20311194" type="video/mp4" />

		<enclosure url="https://digitalproduction.com/wp-content/uploads/2026/04/tree_dark.avif" length="391757" type="image/jpg" />
<media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://digitalproduction.com/wp-content/uploads/2026/04/tree_dark-1013x1080.avif" width="1013" height="1080" medium="image" type="image/jpeg">
	<media:copyright>DIGITAL PRODUCTION</media:copyright>
	<media:title></media:title>
	<media:description type="html"><![CDATA[A majestic tree with a thick, textured trunk and lush, vibrant green foliage cascading down its branches. Swirling green mist envelops parts of the tree, creating an ethereal, mystical atmosphere. The sunlight filters through the leaves, highlighting the tree's grandeur.]]></media:description>
</media:content>
<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://digitalproduction.com/wp-content/uploads/2026/04/tree_dark-1013x1080.avif" width="1013" height="1080" />
<post-id xmlns="com-wordpress:feed-additions:1">271030</post-id>	</item>
		<item>
		<title>Pawn to VEX: Chess Comes to Houdini&#8217;s Viewport</title>
		<link>https://digitalproduction.com/2025/05/28/pawn-to-vex-chess-comes-to-houdinis-viewport/</link>
		
		<dc:creator><![CDATA[Bela Beier]]></dc:creator>
		<pubDate>Wed, 28 May 2025 14:56:02 +0000</pubDate>
				<category><![CDATA[News]]></category>
		<category><![CDATA[topnews]]></category>
		<category><![CDATA[Animation]]></category>
		<category><![CDATA[chess]]></category>
		<category><![CDATA[game logic]]></category>
		<category><![CDATA[Houdini]]></category>
		<category><![CDATA[post-production]]></category>
		<category><![CDATA[procedural animation]]></category>
		<category><![CDATA[Realtime]]></category>
		<category><![CDATA[rigging]]></category>
		<category><![CDATA[VEX]]></category>
		<category><![CDATA[VFX]]></category>
		<category><![CDATA[viewport]]></category>
		<guid isPermaLink="false">https://digitalproduction.com/?p=184973</guid>

					<description><![CDATA[<div style="margin: 5px 5% 10px 5%;"><img src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/Chess.webp?fit=1200%2C675&quality=72&ssl=1" width="1200" height="675" title="#image_title" alt="A chessboard with pieces set up, CPU label, and a red game interface." /></div><div><p>Play chess in Houdini’s viewport using VEX-driven logic - no simulation needed, no rendering required.</p>
<p>The post <a href="https://digitalproduction.com/2025/05/28/pawn-to-vex-chess-comes-to-houdinis-viewport/">Pawn to VEX: Chess Comes to Houdini’s Viewport</a> first appeared on <a href="https://digitalproduction.com">DIGITAL PRODUCTION</a> and was written by <a href="https://digitalproduction.com/author/qualityjellyfish45275761d0/">Bela Beier</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/05/Chess.webp?fit=1200%2C675&quality=72&ssl=1" width="1200" height="675" title="#image_title" alt="A chessboard with pieces set up, CPU label, and a red game interface." /></div><div><div class='__iawmlf-post-loop-links' style='display:none;' data-iawmlf-post-links='[{&quot;id&quot;:1573,&quot;href&quot;:&quot;https:\/\/nodesofnature.gumroad.com\/l\/dwkyxr&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20250601065820\/https:\/\/nodesofnature.gumroad.com\/l\/dwkyxr&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2025-12-27 20:09:54&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-13 15:29:51&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-28 10:22:40&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-17 11:15:55&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-25 12:05:15&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-11 10:34:51&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-11 10:34:51&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;}]'></div>
<p class="wp-block-paragraph">Houdini users can now play chess directly in the viewport, <a href="https://nodesofnature.gumroad.com/l/dwkyxr" title="">courtesy of technical artist Mohamad Salame. </a>The interactive chess tool relies entirely on VEX scripting for move logic and game state tracking. That means no simulation nodes, no rendering pipelines, and certainly no Python backdoors. It’s all handled inside Houdini’s SOP (Surface Operator) context, with every rule of chess implemented as raw VEX code. If you lose, don’t blame your renderer.</p>



<h4 id="learning-tool-or-just-fun-yes" class="wp-block-heading">Learning Tool or Just Fun? Yes.</h4>



<p class="wp-block-paragraph">While not meant for production (unless your project is a very confusing FX-heavy Queen’s Gambit remake), the project highlights how logic systems and user interaction can be prototyped in Houdini using just VEX. Think of it as a conceptual playground rather than a feature request for SideFX. </p>



<h4 id="where-to-download" class="wp-block-heading">Where to Download</h4>



<p class="wp-block-paragraph">The Houdini chess tool is available for free on<a href="https://nodesofnature.gumroad.com/l/dwkyxr" title=""> Gumroad</a>. No license fees, no royalties – just 64 squares of procedural decision-making. If you’re wondering whether chess belongs in your postproduction pipeline, the answer is: probably not. But if you&#8217;re curious how far VEX can be pushed for interactive logic and UI inside Houdini, this checkered curiosity might be worth a look. Or at least a quick match between caching sessions. Check before use, especially if your studio’s pipeline doesn’t include en passant.</p>



<p class="wp-block-paragraph"></p><p>The post <a href="https://digitalproduction.com/2025/05/28/pawn-to-vex-chess-comes-to-houdinis-viewport/">Pawn to VEX: Chess Comes to Houdini’s Viewport</a> first appeared on <a href="https://digitalproduction.com">DIGITAL PRODUCTION</a> and was written by <a href="https://digitalproduction.com/author/qualityjellyfish45275761d0/">Bela Beier</a>. </p></div>]]></content:encoded>
					
		
		
		<enclosure url="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/Chess.webp?fit=1280%2C720&#038;quality=72&#038;ssl=1" length="46532" type="image/jpg" />
<media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/Chess.webp?fit=1200%2C675&#038;quality=72&#038;ssl=1" width="1200" height="675" medium="image" type="image/jpeg">
	<media:copyright>DIGITAL PRODUCTION</media:copyright>
	<media:title>#image_title</media:title>
	<media:description type="html"><![CDATA[#image_title]]></media:description>
</media:content>
<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/Chess.webp?fit=1200%2C675&#038;quality=72&#038;ssl=1" width="1200" height="675" />
<post-id xmlns="com-wordpress:feed-additions:1">184973</post-id>	</item>
		<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;date&quot;:&quot;2026-04-23 11:53:51&quot;,&quot;http_code&quot;:404}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-23 11:53:51&quot;,&quot;http_code&quot;:404},&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;date&quot;:&quot;2026-04-23 11:54:02&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-23 11:54:02&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"  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>
		<item>
		<title>Blergh! Word Art! In Houdini?</title>
		<link>https://digitalproduction.com/2019/12/14/blergh-word-art-in-houdini/</link>
		
		<dc:creator><![CDATA[Olaf Finkbeiner]]></dc:creator>
		<pubDate>Sat, 14 Dec 2019 09:57:00 +0000</pubDate>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[CSV]]></category>
		<category><![CDATA[dp2001]]></category>
		<category><![CDATA[Extrusion]]></category>
		<category><![CDATA[Fonts]]></category>
		<category><![CDATA[Geometry]]></category>
		<category><![CDATA[Google Sheets CSV Houdini]]></category>
		<category><![CDATA[Houdini]]></category>
		<category><![CDATA[Houdini Word Cloud tutorial]]></category>
		<category><![CDATA[layout]]></category>
		<category><![CDATA[packed geometry Houdini workflow]]></category>
		<category><![CDATA[polyextrude Houdini typography]]></category>
		<category><![CDATA[procedural Word Art Houdini]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[SideFX]]></category>
		<category><![CDATA[subscribers]]></category>
		<category><![CDATA[Table Import Node Houdini]]></category>
		<category><![CDATA[Text]]></category>
		<category><![CDATA[UV layout]]></category>
		<category><![CDATA[UVs]]></category>
		<category><![CDATA[VEX]]></category>
		<category><![CDATA[VEXpressions Houdini text]]></category>
		<guid isPermaLink="false">https://digitalproduction.com/?p=167902</guid>

					<description><![CDATA[<div style="margin: 5px 5% 10px 5%;"><img src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_word_cloud_on_grey.jpg?fit=1200%2C858&quality=80&ssl=1" width="1200" height="858" title="" alt="Word cloud with topics related to digital production and Houdini software" /></div><div><p>Houdini is certainly not known for classic graphics and especially not for typography and fonts. And word clouds are certainly nothing new either, but somehow always chic when used correctly.</p>
<p>The post <a href="https://digitalproduction.com/2019/12/14/blergh-word-art-in-houdini/">Blergh! Word Art! In Houdini?</a> first appeared on <a href="https://digitalproduction.com">DIGITAL PRODUCTION</a> and was written by <a href="https://digitalproduction.com/author/olaffinkbeiner/">Olaf Finkbeiner</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/05/small_word_cloud_on_grey.jpg?fit=1200%2C858&quality=80&ssl=1" width="1200" height="858" title="" alt="Word cloud with topics related to digital production and Houdini software" /></div><div><div class="wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-8f761849 wp-block-group-is-layout-flex">

<p class="wp-block-paragraph">These clouds can be created quite easily in Houdini, and that&#8217;s what this article is about &#8211; a &#8220;click-along tutorial&#8221;. In particular, reading in external data from a table in order to process it procedurally, as described here, makes sense not only for Word Art.</p>

</div>





<figure class="wp-block-gallery has-nested-images columns-8 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">

<figure class="wp-block-image size-thumbnail"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_90_grad_rotation.jpg?quality=80&#038;ssl=1" target="_blank"><img data-recalc-dims="1" height="150" width="150"  decoding="async"  data-id="167913"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_90_grad_rotation-150x150.jpg?resize=150%2C150&#038;ssl=1"  alt=""  class="wp-image-167913" ></a></figure>





<figure class="wp-block-image size-thumbnail"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_Add_spare_Input.jpg?quality=80&#038;ssl=1" target="_blank"><img data-recalc-dims="1" height="150" width="150"  decoding="async"  data-id="167910"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_Add_spare_Input-150x150.jpg?resize=150%2C150&#038;ssl=1"  alt=""  class="wp-image-167910" ></a></figure>





<figure class="wp-block-image size-thumbnail"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_attribute_copy.jpg?quality=80&#038;ssl=1" target="_blank"><img data-recalc-dims="1" height="150" width="150"  decoding="async"  data-id="167908"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_attribute_copy-150x150.jpg?resize=150%2C150&#038;ssl=1"  alt=""  class="wp-image-167908" ></a></figure>





<figure class="wp-block-image size-thumbnail"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_attribute_speadsheet_.jpg?quality=80&#038;ssl=1" target="_blank"><img data-recalc-dims="1" height="150" width="150"  decoding="async"  data-id="167920"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_attribute_speadsheet_-150x150.jpg?resize=150%2C150&#038;ssl=1"  alt=""  class="wp-image-167920" ></a></figure>





<figure class="wp-block-image size-thumbnail"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_attribute_wrangle.jpg?quality=80&#038;ssl=1" target="_blank"><img data-recalc-dims="1" height="150" width="150"  decoding="async"  data-id="167911"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_attribute_wrangle-150x150.jpg?resize=150%2C150&#038;ssl=1"  alt=""  class="wp-image-167911" ></a></figure>





<figure class="wp-block-image size-thumbnail"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_Clipboard_Image.jpg?quality=80&#038;ssl=1" target="_blank"><img data-recalc-dims="1" height="150" width="150"  decoding="async"  data-id="167929"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_Clipboard_Image-150x150.jpg?resize=150%2C150&#038;ssl=1"  alt=""  class="wp-image-167929" ></a></figure>





<figure class="wp-block-image size-thumbnail"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_copy_to_points.jpg?quality=80&#038;ssl=1" target="_blank"><img data-recalc-dims="1" height="150" width="150"  decoding="async"  data-id="167912"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_copy_to_points-150x150.jpg?resize=150%2C150&#038;ssl=1"  alt=""  class="wp-image-167912" ></a></figure>





<figure class="wp-block-image size-thumbnail"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_die_fertige_wordcloud.jpg?quality=80&#038;ssl=1" target="_blank"><img data-recalc-dims="1" height="150" width="150"  decoding="async"  data-id="167927"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_die_fertige_wordcloud-150x150.jpg?resize=150%2C150&#038;ssl=1"  alt=""  class="wp-image-167927" ></a></figure>





<figure class="wp-block-image size-thumbnail"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_die_woerter_uebereinander.jpg?quality=80&#038;ssl=1" target="_blank"><img data-recalc-dims="1" height="150" width="150"  decoding="async"  data-id="167923"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_die_woerter_uebereinander-150x150.jpg?resize=150%2C150&#038;ssl=1"  alt=""  class="wp-image-167923" ></a></figure>





<figure class="wp-block-image size-thumbnail"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_edit_parameter_interface_spare_input.jpg?quality=80&#038;ssl=1" target="_blank"><img data-recalc-dims="1" height="150" width="150"  decoding="async"  data-id="167915"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_edit_parameter_interface_spare_input-150x150.jpg?resize=150%2C150&#038;ssl=1"  alt=""  class="wp-image-167915" ></a></figure>





<figure class="wp-block-image size-thumbnail"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_font_node.jpg?quality=80&#038;ssl=1" target="_blank"><img data-recalc-dims="1" height="150" width="150"  decoding="async"  data-id="167914"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_font_node-150x150.jpg?resize=150%2C150&#038;ssl=1"  alt=""  class="wp-image-167914" ></a></figure>





<figure class="wp-block-image size-thumbnail"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_for_each_1.jpg?quality=80&#038;ssl=1" target="_blank"><img data-recalc-dims="1" height="150" width="150"  decoding="async"  data-id="167926"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_for_each_1-150x150.jpg?resize=150%2C150&#038;ssl=1"  alt=""  class="wp-image-167926" ></a></figure>





<figure class="wp-block-image size-thumbnail"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_google_sheets.jpg?quality=80&#038;ssl=1" target="_blank"><img data-recalc-dims="1" height="150" width="150"  decoding="async"  data-id="167917"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_google_sheets-150x150.jpg?resize=150%2C150&#038;ssl=1"  alt=""  class="wp-image-167917" ></a></figure>





<figure class="wp-block-image size-thumbnail"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_hindie_2019_09_15_19_42_48.jpg?quality=80&#038;ssl=1" target="_blank"><img data-recalc-dims="1" height="150" width="150"  decoding="async"  data-id="167909"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_hindie_2019_09_15_19_42_48-150x150.jpg?resize=150%2C150&#038;ssl=1"  alt=""  class="wp-image-167909" ></a></figure>





<figure class="wp-block-image size-thumbnail"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_hindie_2019_09_15_23_34_01.jpg?quality=80&#038;ssl=1" target="_blank"><img data-recalc-dims="1" height="150" width="150"  decoding="async"  data-id="167930"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_hindie_2019_09_15_23_34_01-150x150.jpg?resize=150%2C150&#038;ssl=1"  alt=""  class="wp-image-167930" ></a></figure>





<figure class="wp-block-image size-thumbnail"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_last_loop_end.jpg?quality=80&#038;ssl=1" target="_blank"><img data-recalc-dims="1" height="150" width="150"  decoding="async"  data-id="167918"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_last_loop_end-150x150.jpg?resize=150%2C150&#038;ssl=1"  alt=""  class="wp-image-167918" ></a></figure>





<figure class="wp-block-image size-thumbnail"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_layout_shape.jpg?quality=80&#038;ssl=1" target="_blank"><img data-recalc-dims="1" height="150" width="150"  decoding="async"  data-id="167931"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_layout_shape-150x150.jpg?resize=150%2C150&#038;ssl=1"  alt=""  class="wp-image-167931" ></a></figure>





<figure class="wp-block-image size-thumbnail"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_node_1table_import.jpg?quality=80&#038;ssl=1" target="_blank"><img data-recalc-dims="1" height="150" width="150"  decoding="async"  data-id="167928"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_node_1table_import-150x150.jpg?resize=150%2C150&#038;ssl=1"  alt=""  class="wp-image-167928" ></a></figure>





<figure class="wp-block-image size-thumbnail"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_node3_Attribute_expression.jpg?quality=80&#038;ssl=1" target="_blank"><img data-recalc-dims="1" height="150" width="150"  decoding="async"  data-id="167919"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_node3_Attribute_expression-150x150.jpg?resize=150%2C150&#038;ssl=1"  alt=""  class="wp-image-167919" ></a></figure>





<figure class="wp-block-image size-thumbnail"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_node4_attribute_randomize.jpg?quality=80&#038;ssl=1" target="_blank"><img data-recalc-dims="1" height="150" width="150"  decoding="async"  data-id="167921"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_node4_attribute_randomize-150x150.jpg?resize=150%2C150&#038;ssl=1"  alt=""  class="wp-image-167921" ></a></figure>





<figure class="wp-block-image size-thumbnail"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_polyextrude.jpg?quality=80&#038;ssl=1" target="_blank"><img data-recalc-dims="1" height="150" width="150"  decoding="async"  data-id="167925"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_polyextrude-150x150.jpg?resize=150%2C150&#038;ssl=1"  alt=""  class="wp-image-167925" ></a></figure>





<figure class="wp-block-image size-thumbnail"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_switch.jpg?quality=80&#038;ssl=1" target="_blank"><img data-recalc-dims="1" height="150" width="150"  decoding="async"  data-id="167922"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_switch-150x150.jpg?resize=150%2C150&#038;ssl=1"  alt=""  class="wp-image-167922" ></a></figure>





<figure class="wp-block-image size-thumbnail"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_uv_layout.jpg?quality=80&#038;ssl=1" target="_blank"><img data-recalc-dims="1" height="150" width="150"  decoding="async"  data-id="167924"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_uv_layout-150x150.jpg?resize=150%2C150&#038;ssl=1"  alt=""  class="wp-image-167924" ></a></figure>





<figure class="wp-block-image size-thumbnail"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_word_cloud_nodetree_highdpi.jpg?quality=80&#038;ssl=1" target="_blank"><img data-recalc-dims="1" height="150" width="150"  decoding="async"  data-id="167916"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_word_cloud_nodetree_highdpi-150x150.jpg?resize=150%2C150&#038;ssl=1"  alt=""  class="wp-image-167916" ></a></figure>

</figure>





<p class="wp-block-paragraph">Houdini can read in external data in various ways. The most comprehensive is certainly a self-written Python parser, but that is not necessary here, because Houdini comes with the Table Import Node as standard. This makes it possible to import tables in CSV format. If you look under the bonnet of the table import node, you will of course find a Python script there anyway. This is one of the reasons why I like Houdini so much: almost everything is open and can be studied or adapted to your own needs.</p>





<figure class="wp-block-image size-large is-resized"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_google_sheets.jpg?quality=80&#038;ssl=1"><img data-recalc-dims="1" height="1080" width="295"  decoding="async"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_google_sheets.jpg?resize=295%2C1080&#038;quality=80&#038;ssl=1"  alt=""  class="wp-image-167917"  style="width:142px;height:auto" ></a><figcaption class="wp-element-caption">In the table, I have entered the words for the Word Cloud in column A, the size in column B and the font to be used in column C.</figcaption></figure>





<figure class="wp-block-image size-large"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_node_1table_import.jpg?quality=80&#038;ssl=1"><img data-recalc-dims="1" height="1080" width="1093"  decoding="async"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_node_1table_import.jpg?resize=1093%2C1080&#038;quality=80&#038;ssl=1"  alt=""  class="wp-image-167928" ></a><figcaption class="wp-element-caption">The beginning of all evil or this setup: 
the table import node and the menu for it.</figcaption></figure>





<h2 class="wp-block-heading" id="h-import"><span id="import">Import</span></h2>





<p class="wp-block-paragraph">The CSV format contains values that are separated by commas (CSV = comma separated values). These can be words or numbers. Most spreadsheet programmes can save or export tables as CSV. I use Google Sheets here, and it works great: the table import node initially only creates points, which then contain these values in attributes. I use the attributes:</p>





<pre class="wp-block-code"><code>@word, @pscale, @font.</code></pre>





<p class="wp-block-paragraph">@word gets the values from column A, which is the first column. In Houdini, counting usually starts with zero, hence Column Number 0. The attribute type is a string.</p>





<p class="wp-block-paragraph">@pscale is a special attribute specified by Houdini. @pscale stands for Point Scale, i.e. the size of a point. This is Column Number 1, and the type in this case is a float, i.e. a floating point number. I could therefore also have entered 1.5 or 2.3 as values in the table. </p>





<p class="wp-block-paragraph">i have defined @font as type integer, i.e. as an integer. As I want to use three different fonts, I have entered 0, 1 or 2 as values in the table.</p>





<figure class="wp-block-image size-full"><img data-recalc-dims="1"  decoding="async"  width="1181"  height="978"  sizes="(max-width: 1200px) 100vw, 1200px"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_node3_Attribute_expression.jpg?resize=1181%2C978&#038;quality=80&#038;ssl=1"  alt=""  class="wp-image-167919" ><figcaption class="wp-element-caption">With an 
Randomise attribute to add a bit of randomness (see screenshot).</figcaption></figure>





<p class="wp-block-paragraph">The Table Import can also translate (e.g. Lat/Long to Sphere), but the Translator is not needed here.</p>





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





<figure class="wp-block-image size-large"><img data-recalc-dims="1" height="1080" width="1048"  decoding="async"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_node4_attribute_randomize-1.jpg?resize=1048%2C1080&#038;quality=80&#038;ssl=1"  alt=""  class="wp-image-167937" ></figure>





<p class="wp-block-paragraph"> The second node is Enumerate. This creates an @index attribute with which the points are counted in order to be able to assign them later. The group type must be changed from &#8220;Primitives&#8221; to &#8220;Points&#8221;. The next two nodes are not absolutely necessary, but as I wanted to create other sizes and these should be somewhat random, I first used Attribute Expression to convert the @pscale values 1,2,3 into 1.5, 2 and 2.5. To do this, &#8220;Custom&#8221; must be entered in the node attribute and &#8220;pscale&#8221; as the name and &#8220;Float&#8221; for the type. I use the VEXpression for this: &#8220;1 self * .5&#8221;.<br />And of course, I could have entered these values in the table straight away, but I didn&#8217;t. The zero named here as &#8220;OUT_points_with_attributes&#8221; is not necessary for the function, but is part of good style.</p>





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





<figure class="wp-block-image size-large"><img data-recalc-dims="1" height="1080" width="1125"  decoding="async"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_attribute_speadsheet_-1.jpg?resize=1125%2C1080&#038;quality=80&#038;ssl=1"  alt=""  class="wp-image-167939" ><figcaption class="wp-element-caption">It looks like this in the Geometry Spreadsheet.</figcaption></figure>





<h2 class="wp-block-heading" id="h-loop-it"><span id="loop-it">Loop it!</span></h2>





<figure class="wp-block-image size-full"><img data-recalc-dims="1"  decoding="async"  width="945"  height="164"  sizes="(max-width: 1200px) 100vw, 1200px"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_hindie_2019_09_15_19_42_48.jpg?resize=945%2C164&#038;quality=80&#038;ssl=1"  alt=""  class="wp-image-167909" ></figure>





<p class="wp-block-paragraph">Now the first loop comes into play. This is a For Each Point loop. It contains 3 font nodes, one for each font. Firstly, I created a font node for this and added the spare input required later. To do this, click on the cogwheel and select &#8220;Add Spare Input&#8221;.</p>





<figure class="wp-block-image size-large"><img data-recalc-dims="1" height="1044" width="1200"  decoding="async"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_for_each_1.jpg?resize=1200%2C1044&#038;quality=80&#038;ssl=1"  alt=""  class="wp-image-167926" ></figure>





<figure class="wp-block-image size-full"><img data-recalc-dims="1"  decoding="async"  width="945"  height="755"  sizes="(max-width: 1200px) 100vw, 1200px"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_Add_spare_Input.jpg?resize=945%2C755&#038;quality=80&#038;ssl=1"  alt=""  class="wp-image-167910" ></figure>





<p class="wp-block-paragraph">This font node was then referenced twice using drag-and-drop with the Shift, Ctrl and Alt keys held down. For the copies, I then held down the Shift and Ctrl keys and clicked on Font to remove the reference link. Alternatively, this can also be done with the right mouse button menu and &#8220;Delete Channels&#8221;.</p>





<h2 class="wp-block-heading" id="h-fonts"><span id="fonts">Fonts</span></h2>





<p class="wp-block-paragraph">The most important node when it comes to text is of course the font node. It can generate both polygons and Bezier curves or both at the same time. I use polygons here. I have set the level of detail to 4 so that the tessellation is nice and fine. </p>





<figure class="wp-block-image size-large"><img data-recalc-dims="1" height="1080" width="585"  decoding="async"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_font_node.jpg?resize=585%2C1080&#038;quality=80&#038;ssl=1"  alt=""  class="wp-image-167914" ><figcaption class="wp-element-caption">For the three font nodes, I have set Arial Narrow Bold, Arial Bold Italic and Arial Bold.</figcaption></figure>





<p class="wp-block-paragraph">Working with Bezier curves is also great, but unfortunately not useful here, as the UV layout node used later cannot process them. Now it gets a little more magical or technical. In the &#8220;Spare Input0&#8221; parameter, the &#8220;../foreach_begin1&#8221; node is referenced by drag-and-drop or, if you want and like typing, you can do that too. The text to be created is normally simply entered in the text field, but we want to read it in from the CSV table, which has already been converted into points. Backticks can be used here to execute code.</p>





<pre class="wp-block-code"><code></code></pre>





<p class="wp-block-paragraph">The command required here is &#8220;points&#8221;, whereby it is not about several points, but about string values from points. The &#8220;s&#8221; at the end stands for &#8220;string&#8221;. The first spare input is addressed with &#8220;-1&#8221;. The zero after it is the first point, here it is always just one point anyway, as we are looping over the points. Then &#8220;word&#8221;, because we want to read the @word attribute. Brackets around it and a backtick and that&#8217;s it.</p>





<figure class="wp-block-image size-full"><img data-recalc-dims="1"  decoding="async"  width="1181"  height="774"  sizes="(max-width: 1200px) 100vw, 1200px"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_switch.jpg?resize=1181%2C774&#038;quality=80&#038;ssl=1"  alt=""  class="wp-image-167922" ></figure>





<p class="wp-block-paragraph">As an aside and for the sake of completeness, &#8220;Add Text Attributes&#8221; should also be mentioned here. It is not needed here, but is very cool for other text gimmicks. If the box is ticked, the attributes @textindex, which indicates the number of letters in the word, and @textsymbol, which indicates which letter it is, are created for each letter or primitive. However, this is an ASCII value, i.e. a number. &#8220;f&#8221;, for example, is then 102.</p>





<p class="wp-block-paragraph">The three font nodes are then connected with a switch that reads the @font attribute. I have also created a spare input for this. This time it is the &#8220;point&#8221; command and not &#8220;points&#8221;, as only a number is read out here and not a string. So &#8220;point(-1,0, &#8220;font&#8221;,0)&#8221;. In this case, &#8220;-1&#8221; is again the spare input, &#8220;0&#8221; is the first point, &#8220;font&#8221; is the attribute and the last &#8220;0&#8221; is a necessary argument, which doesn&#8217;t really make sense here. However, if we wanted to read out a vector, &#8220;0&#8221; would be X, &#8220;1&#8221; would be Y and &#8220;2&#8221; would be Z. This is also only mentioned here for the sake of completeness.</p>





<figure class="wp-block-image size-full"><img data-recalc-dims="1"  decoding="async"  width="945"  height="715"  sizes="(max-width: 1200px) 100vw, 1200px"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_copy_to_points.jpg?resize=945%2C715&#038;quality=80&#038;ssl=1"  alt=""  class="wp-image-167912" ></figure>





<h2 class="wp-block-heading" id="h-copy-to-points"><span id="copy-to-points">Copy to points</span></h2>





<p class="wp-block-paragraph">Okay, Houdini! Now we come to the copy to points node. First of all, some information in passing: This node will change a lot in H18 and make actions like this easier. No matter. Pack and Instance is not needed here. Transform Using Point Orientation is also not required here, but can also be on. Copy Points Attributes is used because we still need @index. So enter &#8220;index&#8221; under Set/To Primitive. Delete everything else.</p>





<figure class="wp-block-image size-full"><img data-recalc-dims="1"  decoding="async"  width="1200"  height="318"  sizes="(max-width: 1200px) 100vw, 1200px"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_die_woerter_uebereinander.jpg?resize=1200%2C318&#038;quality=80&#038;ssl=1"  alt=""  class="wp-image-167923" ></figure>





<p class="wp-block-paragraph">Now you should be able to see a bunch of fonts on top of each other. Before, there was nothing to see in the viewport except a dot in the centre, at most. Tip: In the &#8220;foreach_end1&#8221; node you can set to &#8220;Single Pass&#8221; for debugging, then only one iteration of the loop is executed. And always keep an eye on the geometry spreadsheet, where you can see the values of attributes.<br />Now we come to the UV layout node, which is used here to distribute the words in a shape. In the picture, I have coloured the shape green. I have left space for the two logos of DP and DIGITAL PRODUCTION. Connecting this shape to the second input of the UV layout node should not be too complex. Of course, the words with the @index attribute go into the first one.</p>





<figure class="wp-block-image size-large"><img data-recalc-dims="1" height="718" width="1200"  decoding="async"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_layout_shape.jpg?resize=1200%2C718&#038;quality=80&#038;ssl=1"  alt=""  class="wp-image-167931" ></figure>





<h2 class="wp-block-heading" id="h-uvs"><span id="uvs">UVs</span></h2>





<p class="wp-block-paragraph">The UV layout node normally uses the @island attribute to delimit the UV parts from each other and the @uv attribute for the positions of the vertices on the UV map. Since there are no UV coordinates here at all, we replace &#8220;uv&#8221; twice with &#8220;P&#8221;.</p>





<figure class="wp-block-image size-large"><img data-recalc-dims="1" height="1080" width="618"  decoding="async"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_uv_layout.jpg?resize=618%2C1080&#038;quality=80&#038;ssl=1"  alt=""  class="wp-image-167924" ></figure>





<p class="wp-block-paragraph">in Houdini, @P is the position of the vertices. For Axis Alignment we select &#8220;none&#8221; and for Island Rotation Step we set &#8220;No Rotations&#8221;. If you want to create a Word Cloud with rotated words, they should either be rotated beforehand or you should select 90°, for example, so that no words are upside down.</p>





<figure class="wp-block-image size-full"><img data-recalc-dims="1"  decoding="async"  width="1200"  height="673"  sizes="(max-width: 1200px) 100vw, 1200px"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_90_grad_rotation.jpg?resize=1200%2C673&#038;quality=80&#038;ssl=1"  alt=""  class="wp-image-167913" ></figure>





<p class="wp-block-paragraph">Padding is the distance between the shapes to be distributed, in this case words, and Scale should be set to &#8220;Largest Packable&#8221;. The &#8220;Advan&#8230;&#8221; settings are also interesting. This must stand for Advanced. There are iterations here. Here the node randomly tries different layouts and then uses the layout with the best space utilisation. However, each iteration takes time, and 4 is sufficient for this purpose. Different layout versions can be generated with &#8220;Random Seed&#8221;.<br />That&#8217;s it as far as the layout is concerned, but now we want it in 3D. To switch to a so-called Packed Workflow, we need an @name attribute with a string, i.e. text content. At the moment, we only have an @index attribute, and these are numbers. We do this with an attribute wrangle node.</p>





<figure class="wp-block-image size-full"><img data-recalc-dims="1"  decoding="async"  width="1181"  height="473"  sizes="(max-width: 1200px) 100vw, 1200px"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_attribute_wrangle.jpg?resize=1181%2C473&#038;quality=80&#038;ssl=1"  alt=""  class="wp-image-167911" ></figure>





<p class="wp-block-paragraph">Select &#8220;Primitives&#8221; under Run Over and enter the following VEXpression: &#8220;s@name = sprintf(&#8220;%d&#8221;, i@index);&#8221;. This creates an @name attribute, which then contains the number as a string. For more details on this VEX function, please refer to the Houdini documentation, which would go beyond the scope of this article.</p>





<figure class="wp-block-image size-full"><img data-recalc-dims="1"  decoding="async"  width="945"  height="1067"  sizes="(max-width: 1200px) 100vw, 1200px"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_attribute_copy.jpg?resize=945%2C1067&#038;quality=80&#038;ssl=1"  alt=""  class="wp-image-167908" ></figure>





<p class="wp-block-paragraph">Now the whole thing is packed, i.e. each word is now represented by a point. This is practical because it is now easier to select the words, for example, in order to make manual corrections to the positions. Simply use an Edit Node to do this.</p>





<figure class="wp-block-image size-large"><img data-recalc-dims="1" height="1080" width="546"  decoding="async"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_last_loop_end.jpg?resize=546%2C1080&#038;quality=80&#038;ssl=1"  alt=""  class="wp-image-167918" ></figure>





<p class="wp-block-paragraph">Before or after the edit node, I used an attribute copy node to write the attributes from the beginning @font, @pscale, @word back to the points, which now contain the packed geometry. Again, @index is used to assign the source and target points (Attribute to Match). Only @pscale is actually needed, but never mind. If you want, you could customise this even more variably and select words more easily or, for example, extrude them differently depending on the font.<br />Now rotate another loop and extrude the words. To do this, create a For-Each Primtive Loop and place an Unpack followed by a Pack Node. A polyextrude is placed in between.</p>





<figure class="wp-block-image size-large"><img data-recalc-dims="1" height="1080" width="657"  decoding="async"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2019/12/small_polyextrude.jpg?resize=657%2C1080&#038;quality=80&#038;ssl=1"  alt=""  class="wp-image-167951" ><figcaption class="wp-element-caption">The polyextrude initially also needs a spare input, but also a new parameter, which I have called &#8220;distance_multiplier&#8221;. To do this, click on the cogwheel and select Edit Parameter Interface or Add Spare Input.</figcaption></figure>





<figure class="wp-block-image size-full"><img data-recalc-dims="1"  decoding="async"  width="945"  height="708"  sizes="(max-width: 1200px) 100vw, 1200px"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_edit_parameter_interface_spare_input.jpg?resize=945%2C708&#038;quality=80&#038;ssl=1"  alt=""  class="wp-image-167915" ></figure>





<p class="wp-block-paragraph">Then either drag and drop the &#8220;foreach_begin3&#8221; into the spare input created or enter &#8220;../foreach_begin3&#8221;. I have set the parameter &#8220;distance_multiplier&#8221; to 0.025.<br />The magic is in the Distance parameter; enter &#8220;point(-1,0, &#8220;pscale&#8221;,0)*ch(&#8220;distance_multiplier&#8221;)&#8221; enter. Now @pscale is used to control the thickness of the letters. Do not forget to tick the &#8220;Output Back&#8221; box, otherwise the letter will be open at the back. </p>





<figure class="wp-block-image size-large"><img data-recalc-dims="1" height="676" width="1200"  decoding="async"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_hindie_2019_09_15_23_34_01.jpg?resize=1200%2C676&#038;quality=80&#038;ssl=1"  alt=""  class="wp-image-167930" ></figure>





<p class="wp-block-paragraph">Finally, a file node to save the geometry. It can then be integrated into the rendering scene. The outline plate behind the words was also created procedurally, unfortunately no longer part of this article. But this much can be revealed: I converted a geo into a volume, more precisely into an SDF/VDB. Then enlarged it as an SDF or made it thicker. Then &#8220;vdbsmooth&#8221; and converted it into a mesh. An Intersection Aanalysis followed by Polypath, then Resample, then Fit and Resample again, and the outline is ready.</p>





<figure class="wp-block-image size-large"><img data-recalc-dims="1" height="925" width="1200"  decoding="async"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_Clipboard_Image.jpg?resize=1200%2C925&#038;quality=80&#038;ssl=1"  alt=""  class="wp-image-167929" ><figcaption class="wp-element-caption">The outline plate ..</figcaption></figure>





<figure class="wp-block-image size-large"><img data-recalc-dims="1" height="812" width="1200"  decoding="async"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_die_fertige_wordcloud.jpg?resize=1200%2C812&#038;quality=80&#038;ssl=1"  alt=""  class="wp-image-167927" ><figcaption class="wp-element-caption">This is roughly what it should look like now &#8211; the finished Word Cloud</figcaption></figure>





<h2 class="wp-block-heading" id="h-ausblick"><span id="outlook">Outlook</span></h2>





<p class="wp-block-paragraph">I would also have liked to have written something about splines, i.e. curve modelling and editing. This works very well in Houdini, even if it takes some getting used to. I would also have liked to discuss rounded edges. But I ran out of pages &#8211; we&#8217;ll just do that in one of the next issues.</p>





<figure class="wp-block-image size-large is-resized"><img data-recalc-dims="1" height="1080" width="355"  decoding="async"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_word_cloud_nodetree_highdpi.jpg?resize=355%2C1080&#038;quality=80&#038;ssl=1"  alt=""  class="wp-image-167916"  style="width:800px;height:auto" ><figcaption class="wp-element-caption">The entire Houdini node setup required to create the DP word cloud.</figcaption></figure>





<p class="wp-block-paragraph"></p><p>The post <a href="https://digitalproduction.com/2019/12/14/blergh-word-art-in-houdini/">Blergh! Word Art! In Houdini?</a> first appeared on <a href="https://digitalproduction.com">DIGITAL PRODUCTION</a> and was written by <a href="https://digitalproduction.com/author/olaffinkbeiner/">Olaf Finkbeiner</a>. </p></div>]]></content:encoded>
					
		
		
		<enclosure url="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_word_cloud_on_grey.jpg?fit=1791%2C1280&#038;quality=80&#038;ssl=1" length="67829" type="image/jpg" />
<media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2025/05/small_word_cloud_on_grey.jpg?fit=1200%2C858&#038;quality=80&#038;ssl=1" width="1200" height="858" 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/05/small_word_cloud_on_grey.jpg?fit=1200%2C858&#038;quality=80&#038;ssl=1" width="1200" height="858" />
<post-id xmlns="com-wordpress:feed-additions:1">167902</post-id>	</item>
	</channel>
</rss>
