<?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>Geometry - DIGITAL PRODUCTION</title>
	<atom:link href="https://digitalproduction.com/tag/geometry/feed/" rel="self" type="application/rss+xml" />
	<link>https://digitalproduction.com</link>
	<description>Magazine for Digital Media Production</description>
	<lastBuildDate>Tue, 17 Feb 2026 15:21:13 +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>Dynamic Flow makes water move without waiting</title>
		<link>https://digitalproduction.com/2026/01/29/dynamic-flow-makes-water-move-without-waiting/</link>
		
		<dc:creator><![CDATA[Bela Beier]]></dc:creator>
		<pubDate>Thu, 29 Jan 2026 09:00:00 +0000</pubDate>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Blender]]></category>
		<category><![CDATA[Blender Procedural]]></category>
		<category><![CDATA[Dynamic Flow]]></category>
		<category><![CDATA[Geometry]]></category>
		<category><![CDATA[geometry nodes]]></category>
		<category><![CDATA[real time water]]></category>
		<category><![CDATA[Realtime]]></category>
		<category><![CDATA[Simulation]]></category>
		<category><![CDATA[subscribers]]></category>
		<category><![CDATA[Superhive]]></category>
		<category><![CDATA[water]]></category>
		<category><![CDATA[water simulation]]></category>
		<guid isPermaLink="false">https://digitalproduction.com/?p=247338</guid>

					<description><![CDATA[<div style="margin: 5px 5% 10px 5%;"><img src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2026/01/image_processing20260114-2-qgdpw.jpg?fit=1200%2C600&quality=80&ssl=1" width="1200" height="600" title="" alt="A 3D rendering of a coastal landscape featuring rocky shores and turbulent waters, displayed on a computer screen. The right side shows the interface of a software tool named 'Dynamic Flow' for simulation." /></div><div><p>Dynamic Flow is a low cost Blender add-on that creates real time, terrain-aware water without baking or physics simulation.</p>
<p>The post <a href="https://digitalproduction.com/2026/01/29/dynamic-flow-makes-water-move-without-waiting/">Dynamic Flow makes water move without waiting</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/2026/01/image_processing20260114-2-qgdpw.jpg?fit=1200%2C600&quality=80&ssl=1" width="1200" height="600" title="" alt="A 3D rendering of a coastal landscape featuring rocky shores and turbulent waters, displayed on a computer screen. The right side shows the interface of a software tool named 'Dynamic Flow' for simulation." /></div><div><div class='__iawmlf-post-loop-links' style='display:none;' data-iawmlf-post-links='[{&quot;id&quot;:13212,&quot;href&quot;:&quot;https:\/\/superhivemarket.com\/products\/dynamic-flow-real-time-water-simulation&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;:13213,&quot;href&quot;:&quot;https:\/\/www.blenderprocedural.com&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20251211191332\/https:\/\/www.blenderprocedural.com\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-01-29 09:02:08&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-02 17:39:22&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-06 20:33:49&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-09 22:51:08&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-15 10:08:11&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-25 06:53:04&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-02 04:58:22&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-10 22:00:23&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-18 15:04:07&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-31 17:48:16&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-07 04:04:33&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-13 10:12:05&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-22 20:10:29&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-28 11:56:02&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-05-04 15:52:03&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-05-04 15:52:03&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:13214,&quot;href&quot;:&quot;https:\/\/superhivemarket.com\/products\/dynamic-flow-real-time-water-simulation?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’t now the tool: <a href="https://superhivemarket.com/products/dynamic-flow-real-time-water-simulation" title="">Dynamic Flow</a> is a Geometry Nodes based water add-on for <a href="https://digitalproduction.com/tag/blender/" title="Blender">Blender</a> by <a href="https://www.blenderprocedural.com/" title="">Blender Procedural</a>, aimed at fast environment lookdev rather than fluid accuracy. Rivers first, splashes later.</em></p>



<figure class="wp-block-image size-full"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2026/01/dynamic-gif-1.gif?ssl=1"><img data-recalc-dims="1"  fetchpriority="high"  decoding="async"  width="800"  height="450"  sizes="(max-width: 1200px) 100vw, 1200px"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2026/01/dynamic-gif-1.gif?resize=800%2C450&ssl=1"  alt=""  class="wp-image-249110" ></a></figure>



<h3 id="water-without-waiting" class="wp-block-heading">Water without waiting</h3>



<p class="wp-block-paragraph">Dynamic Flow is a real time water simulation add-on for Blender developed by Blender Procedural and distributed via the Superhive marketplace. The tool is designed as a lightweight alternative to traditional fluid simulation workflows, focusing on interactive feedback rather than physically accurate behaviour.</p>



<p class="wp-block-paragraph">The add-on generates flowing water surfaces that respond to terrain in real time. It does not use Blender’s Mantaflow solver or particle based simulation. Instead, it relies on Geometry Nodes to drive surface motion procedurally, allowing timelines to be scrubbed and parameters adjusted without baking caches.</p>



<p class="wp-block-paragraph">The stated goal is rapid iteration for environment scenes such as rivers, coastlines, lakes, and islands, where visual plausibility is sufficient and turnaround speed matters.</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/NEv5sU1qI9w?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&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>



<h3 id="geometry-nodes-not-physics" class="wp-block-heading">Geometry Nodes, not physics</h3>



<p class="wp-block-paragraph">Dynamic Flow is built entirely on Blender’s Geometry Nodes system. Flow direction and velocity are derived from the underlying terrain geometry, with the water surface adapting to slopes, banks, and obstacles.</p>



<p class="wp-block-paragraph">Because the system is procedural, changes to terrain or scene layout update immediately. There is no simulation cache to manage and no rebaking when assets move. This makes the add-on suitable for look development, layout, and concept work where scene elements are still in flux. The developer states that a lightweight grid is used internally to evaluate surface flow. </p>



<figure class="wp-block-image size-full"><a href="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2026/01/dygif2.gif?ssl=1"><img data-recalc-dims="1"  decoding="async"  width="800"  height="450"  sizes="(max-width: 1200px) 100vw, 1200px"  src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2026/01/dygif2.gif?resize=800%2C450&ssl=1"  alt=""  class="wp-image-249111" ></a></figure>



<h3 id="foam-collisions-and-interaction" class="wp-block-heading">Foam, collisions, and interaction</h3>



<p class="wp-block-paragraph">Dynamic Flow includes automatic shoreline foam generation driven by proximity to terrain and scene objects. Foam behaviour is controlled through exposed parameters inside the Geometry Nodes setup, allowing adjustments to width, intensity, and motion. The add-on supports collision with objects and collections. Objects intersecting the water surface can influence flow patterns and create visible disturbances. The precision of these interactions is not described in detail, and there is no indication that secondary effects such as splashes, spray, or droplets are simulated. The system is limited to surface motion and does not model volumetric water behaviour.</p>



<h3 id="rendering-and-compatibility" class="wp-block-heading">Rendering and compatibility</h3>



<p class="wp-block-paragraph">Dynamic Flow works with both Eevee and Cycles. The water surface is standard Blender geometry with animated attributes and uses regular materials and shaders. No custom rendering features are required. The add-on requires Blender 5.0 or later and installs as a standard Blender add-on through the Preferences panel.</p>



<h3 id="positioning-and-limitations" class="wp-block-heading">Positioning and limitations</h3>



<p class="wp-block-paragraph">Dynamic Flow is not intended to replace full fluid simulation tools. It does not simulate turbulence, buoyancy, pressure driven motion, or complex fluid interactions. It is positioned as an artist controlled, predictable system for surface water movement. </p>



<h3 id="pricing-and-availability" class="wp-block-heading">Pricing and availability</h3>



<p class="wp-block-paragraph"><a href="https://superhivemarket.com/products/dynamic-flow-real-time-water-simulation?utm_source=chatgpt.com" title="">Dynamic Flow is available via the Superhive marketplace for 6 Dollars</a>. No subscription is required. As with any new production tool, artists should test Dynamic Flow carefully before deploying it in active pipelines or client projects, particularly where determinism and render consistency are required. This remains advisable even if early results appear stable and behave exaclty as expected.</p>



<figure class="wp-block-image"><img data-recalc-dims="1"  decoding="async"  src="https://i0.wp.com/assets.superhivemarket.com/store/productimage/1162459/image/xlarge-b97fab50d7564eaa28a3764a04b105cc.jpg?w=1200&quality=80&ssl=1"  alt="https://assets.superhivemarket.com/store/productimage/1162459/image/xlarge-b97fab50d7564eaa28a3764a04b105cc.jpg" ></figure>



<p class="wp-block-paragraph"></p><p>The post <a href="https://digitalproduction.com/2026/01/29/dynamic-flow-makes-water-move-without-waiting/">Dynamic Flow makes water move without waiting</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/2026/01/image_processing20260114-2-qgdpw.jpg?fit=1200%2C600&#038;quality=80&#038;ssl=1" length="125003" type="image/jpg" />
<media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2026/01/image_processing20260114-2-qgdpw.jpg?fit=1200%2C600&#038;quality=80&#038;ssl=1" width="1200" height="600" medium="image" type="image/jpeg">
	<media:copyright>DIGITAL PRODUCTION</media:copyright>
	<media:title></media:title>
	<media:description type="html"><![CDATA[A 3D rendering of a coastal landscape featuring rocky shores and turbulent waters, displayed on a computer screen. The right side shows the interface of a software tool named 'Dynamic Flow' for simulation.]]></media:description>
</media:content>
<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2026/01/image_processing20260114-2-qgdpw.jpg?fit=1200%2C600&#038;quality=80&#038;ssl=1" width="1200" height="600" />
<post-id xmlns="com-wordpress:feed-additions:1">247338</post-id>	</item>
		<item>
		<title>CardCutter turns texture into Nanite meshes</title>
		<link>https://digitalproduction.com/2026/01/16/cardcutter-turns-texture-into-nanite-meshes/</link>
		
		<dc:creator><![CDATA[Bela Beier]]></dc:creator>
		<pubDate>Fri, 16 Jan 2026 06:00:00 +0000</pubDate>
				<category><![CDATA[News]]></category>
		<category><![CDATA[3D mesh]]></category>
		<category><![CDATA[Blender]]></category>
		<category><![CDATA[CardCutter]]></category>
		<category><![CDATA[decal]]></category>
		<category><![CDATA[Epic Games]]></category>
		<category><![CDATA[foliage]]></category>
		<category><![CDATA[game asset]]></category>
		<category><![CDATA[Geometry]]></category>
		<category><![CDATA[Nanite]]></category>
		<category><![CDATA[production pipeline]]></category>
		<category><![CDATA[realtime graphics]]></category>
		<category><![CDATA[The Triangle Forge]]></category>
		<category><![CDATA[Topology]]></category>
		<category><![CDATA[UE5]]></category>
		<category><![CDATA[Unreal]]></category>
		<category><![CDATA[Unreal Engine]]></category>
		<guid isPermaLink="false">https://digitalproduction.com/?p=246234</guid>

					<description><![CDATA[<div style="margin: 5px 5% 10px 5%;"><img src="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2026/01/cardcutterbanner.webp?fit=1200%2C675&quality=72&ssl=1" width="1200" height="675" title="" alt="A collection of green leaves arranged on a dark background, alongside their geometric wireframe representations. The leaves vary in shape and size, showcasing detailed textures and vibrant colors." /></div><div><p>CardCutter for Blender 4.0+ generates Nanite-optimised meshes from texture masks for Unreal Engine foliage and decal pipelines.</p>
<p>The post <a href="https://digitalproduction.com/2026/01/16/cardcutter-turns-texture-into-nanite-meshes/">CardCutter turns texture into Nanite meshes</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/2026/01/cardcutterbanner.webp?fit=1200%2C675&quality=72&ssl=1" width="1200" height="675" title="" alt="A collection of green leaves arranged on a dark background, alongside their geometric wireframe representations. The leaves vary in shape and size, showcasing detailed textures and vibrant colors." /></div><div><div class='__iawmlf-post-loop-links' style='display:none;' data-iawmlf-post-links='[{&quot;id&quot;:12782,&quot;href&quot;:&quot;https:\/\/ttfphilipp.gumroad.com\/l\/CardCutter&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20260113095640\/https:\/\/ttfphilipp.gumroad.com\/l\/CardCutter&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-01-16 06:01:51&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-20 09:20:38&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-23 19:45:24&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-29 16:33:49&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-02 13:49:46&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-06 10:52:23&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-10 17:49:50&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-16 09:39:47&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-19 14:39:59&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-24 07:41:42&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-01 06:49:01&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-06 17:09:39&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-12 08:57:31&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-16 22:46:54&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-03 06:43:37&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-07 03:33:16&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-10 12:09:39&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-16 09:22:30&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-20 07:14:57&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-29 19:22:08&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-05-04 09:41:06&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-05-04 09:41:06&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:12783,&quot;href&quot;:&quot;https:\/\/thetriangleforge.de&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20260113095650\/https:\/\/thetriangleforge.de\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-01-16 06:01:52&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-20 09:20:37&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-23 19:45:23&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-29 16:33:49&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-02 13:49:47&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-06 10:52:23&quot;,&quot;http_code&quot;:503},{&quot;date&quot;:&quot;2026-02-10 17:49:47&quot;,&quot;http_code&quot;:503},{&quot;date&quot;:&quot;2026-02-16 09:39:46&quot;,&quot;http_code&quot;:503},{&quot;date&quot;:&quot;2026-02-19 14:39:59&quot;,&quot;http_code&quot;:503},{&quot;date&quot;:&quot;2026-02-24 07:41:44&quot;,&quot;http_code&quot;:503},{&quot;date&quot;:&quot;2026-03-01 06:49:01&quot;,&quot;http_code&quot;:503},{&quot;date&quot;:&quot;2026-03-06 17:09:40&quot;,&quot;http_code&quot;:503},{&quot;date&quot;:&quot;2026-03-12 08:57:34&quot;,&quot;http_code&quot;:503},{&quot;date&quot;:&quot;2026-03-16 22:46:56&quot;,&quot;http_code&quot;:503},{&quot;date&quot;:&quot;2026-04-03 06:43:39&quot;,&quot;http_code&quot;:503},{&quot;date&quot;:&quot;2026-04-07 03:33:17&quot;,&quot;http_code&quot;:503},{&quot;date&quot;:&quot;2026-04-10 12:09:41&quot;,&quot;http_code&quot;:503},{&quot;date&quot;:&quot;2026-04-16 09:22:32&quot;,&quot;http_code&quot;:503},{&quot;date&quot;:&quot;2026-04-20 07:14:59&quot;,&quot;http_code&quot;:503},{&quot;date&quot;:&quot;2026-04-29 19:22:09&quot;,&quot;http_code&quot;:503},{&quot;date&quot;:&quot;2026-05-04 09:41:06&quot;,&quot;http_code&quot;:503}],&quot;broken&quot;:true,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-05-04 09:41:06&quot;,&quot;http_code&quot;:503},&quot;process&quot;:&quot;done&quot;}]'></div>
<p class="wp-block-paragraph">The new <a href="https://ttfphilipp.gumroad.com/l/CardCutter" title="">CardCutter</a> add-on for <a href="https://digitalproduction.com/tag/blender/" title="Blender">Blender</a> converts texture masks into usable 3D geometry for Nanite-based projects in <a href="https://digitalproduction.com/tag/unreal/" title="Unreal">Unreal Engine 5</a>. Created by developer <a href="https://thetriangleforge.de/" title="">Philipp Russo,</a> the tool simplifies building game-ready foliage and decals by generating optimised meshes directly from source textures.</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/ykCtEXZrGOc?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&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>



<p class="wp-block-paragraph">CardCutter operates as a geometry generation tool that converts 2D texture data, either alpha-masked colour images or greyscale masks, into fully triangulated 3D meshes suitable for Nanite rendering. The add-on functions within Blender’s Python API and supports Blender 4.0 or higher. According to the developer, the geometry output is designed to conform to Nanite’s mesh constraints, favouring dense, evenly distributed triangles over traditional quad-based topologies.</p>



<p class="wp-block-paragraph">Each processed mask is interpreted as a binary image, with the alpha threshold defining the polygon contour. The tool applies an internal vectorisation step to trace the boundary of the visible region, followed by a polygon simplification algorithm to remove redundant vertices. It then uses a relaxation solver to re-distribute triangle density uniformly across the surface, creating stable topology for Nanite’s internal micro-polygon clustering.</p>



<h3 id="automatic-atlas-splitting" class="wp-block-heading">Automatic atlas splitting</h3>



<p class="wp-block-paragraph">When the user provides a texture atlas (for example, a leaf sheet), CardCutter automatically detects discrete masked regions using connected-component labelling. Each detected region becomes a separate mesh object in Blender’s scene graph. This removes the need for manual cutting or polygon mask painting, which is typically required in foliage production. Each region retains its local UV coordinates, preserving the original texture mapping from the atlas. The output meshes can be exported directly as FBX or glTF, maintaining UV alignment and pivot orientation suitable for Unreal Engine import.</p>



<h3 id="geometry-presets-for-performance-tiers" class="wp-block-heading">Geometry presets for performance tiers</h3>



<p class="wp-block-paragraph">CardCutter offers several density presets: Low, Medium, and High, which define the target number of triangles per pixel area. The lower settings generate lightweight meshes for background vegetation, while the higher settings produce Nanite-ready geometry that benefits from Unreal’s automatic cluster streaming.</p>



<p class="wp-block-paragraph">The generated meshes are particularly intended for organic and irregular silhouettes like leaves, vines, ivy, ferns, but the developer also notes suitable use cases in flat debris, stickers, posters, and paper scraps, where alpha planes normally create overdraw problems.</p>



<p class="wp-block-paragraph">In Nanite rendering, alpha cutouts are computationally expensive since masked fragments are still rasterised. By converting them into actual geometry, CardCutter removes the transparency pass entirely, allowing the GPU to perform visibility culling at the triangle level. This is beneficial for scenes with dense foliage or decal overlays.</p>



<h3 id="export-workflow-and-integration" class="wp-block-heading">Export workflow and integration</h3>



<p class="wp-block-paragraph">Meshes generated by CardCutter can be exported directly from Blender using <a href="https://digitalproduction.com/tag/unreal/" title="Unreal">Unreal</a>’s standard FBX pipeline. The add-on does not alter material data; instead, it preserves UV maps for external shading setups. Unreal users can apply the same texture as an opacity mask or base colour without modification.</p>



<p class="wp-block-paragraph">CardCutter also supports consistent vertex orientation to avoid flipped normals during export. According to the developer, all geometry is manifold and suitable for Nanite import without further cleanup, though it may require triangulation if the user modifies topology post-generation.</p>



<h3 id="pricing-and-licensing" class="wp-block-heading">Pricing and licensing</h3>



<p class="wp-block-paragraph">CardCutter is distributed via <a>Gumroad</a>. The Individual/Freelance licence costs €12 and includes full functionality, updates, and one user seat. The Studio/Enterprise licence, priced at €50, allows unlimited installations within one facility and provides priority support for pipeline integration. Both include lifetime updates and are maintained by Philipp Russo under The Triangle Forge label.</p>



<h3 id="technical-limitations-and-notes" class="wp-block-heading">Technical limitations and notes</h3>



<p class="wp-block-paragraph">At the time of publication, CardCutter is compatible exclusively with Blender 4.0 or newer. The add-on does not currently support real-time texture-to-mesh previews or batch automation through the command line. </p>



<p class="wp-block-paragraph">Users should test export consistency when integrating the tool into complex Unreal foliage systems that depend on hierarchical instancing or runtime material overrides. The add-on outputs static geometry only, without procedural modifiers or animation rigs.</p><p>The post <a href="https://digitalproduction.com/2026/01/16/cardcutter-turns-texture-into-nanite-meshes/">CardCutter turns texture into Nanite meshes</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/2026/01/cardcutterbanner.webp?fit=1280%2C720&#038;quality=72&#038;ssl=1" length="50448" type="image/jpg" />
<media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2026/01/cardcutterbanner.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></media:title>
	<media:description type="html"><![CDATA[A collection of green leaves arranged on a dark background, alongside their geometric wireframe representations. The leaves vary in shape and size, showcasing detailed textures and vibrant colors.]]></media:description>
</media:content>
<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://i0.wp.com/digitalproduction.com/wp-content/uploads/2026/01/cardcutterbanner.webp?fit=1200%2C675&#038;quality=72&#038;ssl=1" width="1200" height="675" />
<post-id xmlns="com-wordpress:feed-additions:1">246234</post-id>	</item>
		<item>
		<title>Terrain Wrapping Made Easy: Kiri Engine’s Free Blender Add-on</title>
		<link>https://digitalproduction.com/2025/12/17/terrain-wrapping-made-easy-kiri-engines-free-blender-add-on/</link>
		
		<dc:creator><![CDATA[Bela Beier]]></dc:creator>
		<pubDate>Wed, 17 Dec 2025 07:59:00 +0000</pubDate>
				<category><![CDATA[News]]></category>
		<category><![CDATA[3Dscan]]></category>
		<category><![CDATA[addon]]></category>
		<category><![CDATA[Blender]]></category>
		<category><![CDATA[environment]]></category>
		<category><![CDATA[Geometry]]></category>
		<category><![CDATA[KiriEngine]]></category>
		<category><![CDATA[MeshWrap]]></category>
		<category><![CDATA[photogrammetry]]></category>
		<category><![CDATA[Scatter]]></category>
		<category><![CDATA[Terrain]]></category>
		<guid isPermaLink="false">https://digitalproduction.com/?p=238430</guid>

					<description><![CDATA[<div style="margin: 5px 5% 10px 5%;"><img src="https://digitalproduction.com/wp-content/uploads/2025/12/image_1.avif" width="1200" height="675" title="" alt="A split image showing contrasting landscapes: on the left, a snowy mountain terrain with a winding path, and on the right, a rocky, barren hillside under a soft gray sky." /></div><div><p>Kiri Engine releases Mesh Wrap, a free Blender add-on that makes projecting and scattering 3D-scanned terrain pieces onto base geometry fast, precise, and non-destructive.</p>
<p>The post <a href="https://digitalproduction.com/2025/12/17/terrain-wrapping-made-easy-kiri-engines-free-blender-add-on/">Terrain Wrapping Made Easy: Kiri Engine’s Free Blender Add-on</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/2025/12/image_1.avif" width="1200" height="675" title="" alt="A split image showing contrasting landscapes: on the left, a snowy mountain terrain with a winding path, and on the right, a rocky, barren hillside under a soft gray sky." /></div><div><div class='__iawmlf-post-loop-links' style='display:none;' data-iawmlf-post-links='[{&quot;id&quot;:30,&quot;href&quot;:&quot;https:\/\/www.kiriengine.app\/webapp\/login&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20251217103543\/https:\/\/www.kiriengine.app\/webapp\/login&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2025-12-30 07:14:10&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-01-02 20:20:24&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-01-05 22:17:13&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-01-12 03:16:51&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-01-15 17:48:24&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-01-19 22:20:49&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-01-30 00:31:19&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-02 08:01:32&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-05 23:26:34&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-09 03:21:06&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-12 18:47:41&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-18 09:17:03&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-25 23:17:04&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-13 20:44:50&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-19 09:54:11&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-22 15:32:32&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-30 09:35:34&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-04 07:54:10&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-14 05:54:29&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-28 13:08:14&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-05-02 11:34:44&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-05-05 14:02:18&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-05-05 14:02:18&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:31,&quot;href&quot;:&quot;https:\/\/www.kiriengine.app\/blender-addon\/mesh-wrap-by-kiri-engine&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20251217103850\/https:\/\/www.kiriengine.app\/blender-addon\/mesh-wrap-by-kiri-engine&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2025-12-27 11:55:22&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2025-12-31 00:42:27&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-01-03 14:33:28&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-01-06 15:55:33&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-01-12 03:16:51&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-01-30 00:31:19&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-02 18:18:35&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-05 23:26:34&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-09 03:21:06&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-02-25 23:17:04&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-13 20:44:50&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-24 10:59:15&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-03-30 09:35:34&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-04 10:04:06&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-04-14 05:54:29&quot;,&quot;http_code&quot;:206},{&quot;date&quot;:&quot;2026-05-03 12:12:36&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-05-03 12:12:36&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:32,&quot;href&quot;:&quot;https:\/\/www.youtube.com\/@BlenderAddon-fromKIRI&quot;,&quot;archived_href&quot;:&quot;http:\/\/web-wp.archive.org\/web\/20251217103540\/https:\/\/www.youtube.com\/@BlenderAddon-fromKIRI&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2025-12-27 11:55:23&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2025-12-31 00:43:40&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-03 21:58:43&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-07 12:54:56&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-12 03:18:13&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-24 08:58:26&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-01-30 00:31:43&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-05 23:26:39&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-10 08:33:12&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-02-25 23:17:20&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-24 10:59:18&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-03-31 23:06:34&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-04-14 05:55:49&quot;,&quot;http_code&quot;:200},{&quot;date&quot;:&quot;2026-05-03 12:13:12&quot;,&quot;http_code&quot;:200}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-05-03 12:13:12&quot;,&quot;http_code&quot;:200},&quot;process&quot;:&quot;done&quot;}]'></div>
<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/L_cJC8tQaMk?version=3&rel=1&showsearch=0&showinfo=1&iv_load_policy=1&fs=1&hl=en-US&autohide=2&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>



<p class="wp-block-paragraph"><em>For those who don’t know the tool: <a>Kiri Engine</a> is a photogrammetry app that turns real-world captures into 3D models, targeting artists in VFX, games, and visualisation. Its ecosystem now extends into <a>Blender</a> with a set of free add-ons designed for environment work. Mesh Wrap is the latest entry in this toolkit, joining other utility plug-ins for scan preparation and scene layout.</em></p>



<h3 id="a-free-add-on-for-wrapping-3d-terrain-scans" class="wp-block-heading">A Free Add-on for Wrapping 3D Terrain Scans</h3>



<p class="wp-block-paragraph"><a href="https://www.kiriengine.app/webapp/login" title="">Kiri </a>Engine has released <a href="https://www.kiriengine.app/blender-addon/mesh-wrap-by-kiri-engine" title=""><em>Mesh Wrap</em>,</a> a free add-on for Blender designed to simplify how artists integrate terrain scans into base meshes. Unlike Blender’s default shrinkwrap modifier, <em>Mesh Wrap</em> is built specifically for photogrammetry-based environments. It projects surface-scanned meshes, such as rock faces or terrain tiles, onto clean base geometry while preserving scan detail and alignment.</p>



<p class="wp-block-paragraph">The add-on supports Blender 4.5 and newer and is available for free download via a Kiri Engine account. It is intended for terrain and surface data, not for closed or solid meshes.</p>



<figure class="wp-block-image"><img data-recalc-dims="1"  decoding="async"  src="https://i0.wp.com/www.kiriengine.app/_ipx/w_2048%26f_avif/static/image/blender-addon/mesh-wrap-by-kiri-engine/image_%2816%29.png?w=1200&quality=72&ssl=1"  alt="https://www.kiriengine.app/_ipx/w_2048&f_avif/static/image/blender-addon/mesh-wrap-by-kiri-engine/image_(16).png" ></figure>



<h3 id="two-workflows-planar-and-scatter" class="wp-block-heading">Two Workflows: Planar and Scatter</h3>



<p class="wp-block-paragraph"><em>Mesh Wrap</em> provides two distinct workflows. <em>Planar Wrap</em> handles the projection of a single mesh onto a base surface. <em>Scatter Wrap</em> distributes and wraps multiple scan meshes across a terrain, enabling fast environment coverage without manual placement. Both tools rely on a ray-casting projection system, with direction controls for world or object axes. A visible gizmo helps users verify projection direction and adjust wrapping behaviour. Misaligned objects trigger a “surface not found” warning, an indicator of an incorrect projection axis or displaced origin.</p>



<figure class="wp-block-image"><img data-recalc-dims="1"  decoding="async"  src="https://i0.wp.com/www.kiriengine.app/_ipx/w_2048%26f_avif/static/image/blender-addon/mesh-wrap-by-kiri-engine/image_%2842%29.png?w=1200&quality=72&ssl=1"  alt="https://www.kiriengine.app/_ipx/w_2048&f_avif/static/image/blender-addon/mesh-wrap-by-kiri-engine/image_(42).png" ></figure>



<h3 id="mesh-preparation-tools" class="wp-block-heading">Mesh Preparation Tools</h3>



<p class="wp-block-paragraph">Before wrapping, the add-on offers mesh-preparation utilities to correct rotation, fix skewed origins, and align object pivots. The <em>Auto Rotate</em> feature attempts planar alignment, while origin controls allow setting to the lowest, highest, or median point of the mesh. These adjustments directly influence how accurately the scan conforms to the target surface. </p>



<figure class="wp-block-image"><img data-recalc-dims="1"  decoding="async"  src="https://i0.wp.com/www.kiriengine.app/_ipx/w_2048%26f_avif/static/image/blender-addon/mesh-wrap-by-kiri-engine/image_%2861%29.png?w=1200&quality=72&ssl=1"  alt="https://www.kiriengine.app/_ipx/w_2048&f_avif/static/image/blender-addon/mesh-wrap-by-kiri-engine/image_(61).png" ></figure>



<h3 id="precision-controls-and-cleanup" class="wp-block-heading">Precision Controls and Cleanup</h3>



<p class="wp-block-paragraph"><em>Mesh Wrap</em> introduces displacement-strength adjustments, overlap handling, and boundary-snap features. These tools refine how the wrapped scan adheres to the base terrain and resolve clipping or intersecting faces. The <em>Overlap Cleanup</em> menu includes modes to remove or smooth intersecting faces and distance-based masking to recover deleted geometry. The <em>Snap Boundary to Surface</em> option ensures that edge vertices align seamlessly with the target mesh, creating clean joins between tiles or blended terrain segments.</p>



<h3 id="scatter-workflows-and-performance" class="wp-block-heading">Scatter Workflows and Performance</h3>



<p class="wp-block-paragraph">For larger environments, the <em>Scatter Wrap</em> workflow distributes multiple terrain scans across a defined surface. Users can select a single mesh or a collection and enable automatic <em>Decimate</em> modifiers to lower polygon counts. Scatter methods include <em>Grid</em> (planar distribution) and <em>Normal-Aligned</em> (surface-conforming), both offering controls for density, scale, and scatter seed randomisation.</p>



<figure class="wp-block-image"><img data-recalc-dims="1"  decoding="async"  src="https://i0.wp.com/www.kiriengine.app/_ipx/w_2048%26f_avif/static/image/blender-addon/mesh-wrap-by-kiri-engine/image_%2879%29.png?w=1200&quality=72&ssl=1"  alt="https://www.kiriengine.app/_ipx/w_2048&f_avif/static/image/blender-addon/mesh-wrap-by-kiri-engine/image_(79).png" ></figure>



<p class="wp-block-paragraph">Performance optimisation is a recurring theme. Kiri advises scattering only within the camera’s field of view and applying modifiers once layouts are final. Since all scattered instances are “realised” geometry, high-poly scenes can quickly affect viewport responsiveness. Applying and cleaning geometry after wrapping is recommended.</p>



<h3 id="practical-notes" class="wp-block-heading">Practical Notes</h3>



<p class="wp-block-paragraph">The add-on’s defaults are tuned for planar, Z-axis-oriented wrapping. Artists can switch projection axes for vertical surfaces, such as cliffs or walls. Decimation ratios are adjustable per object, and modifiers can be baked for performance. A small “tick” icon applies modifiers directly from the panel.</p>



<h3 id="availability-and-requirements" class="wp-block-heading">Availability and Requirements</h3>



<p class="wp-block-paragraph"><em>Mesh Wrap</em> is free for all Blender users with a Kiri Engine account. It installs through Blender’s standard add-on interface. Documentation and video guides are available on Kiri Engine’s <a href="https://www.youtube.com/@BlenderAddon-fromKIRI" title="">YouTube channel</a>. As with any new production tool, artists should evaluate stability and compatibility before deploying it in critical pipelines.</p>



<p class="wp-block-paragraph"></p><p>The post <a href="https://digitalproduction.com/2025/12/17/terrain-wrapping-made-easy-kiri-engines-free-blender-add-on/">Terrain Wrapping Made Easy: Kiri Engine’s Free Blender Add-on</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://digitalproduction.com/wp-content/uploads/2025/12/image_1.avif" length="87047" type="image/jpg" />
<media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://digitalproduction.com/wp-content/uploads/2025/12/image_1.avif" width="1200" height="675" medium="image" type="image/jpeg">
	<media:copyright>DIGITAL PRODUCTION</media:copyright>
	<media:title></media:title>
	<media:description type="html"><![CDATA[A split image showing contrasting landscapes: on the left, a snowy mountain terrain with a winding path, and on the right, a rocky, barren hillside under a soft gray sky.]]></media:description>
</media:content>
<media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://digitalproduction.com/wp-content/uploads/2025/12/image_1.avif" width="1200" height="675" />
<post-id xmlns="com-wordpress:feed-additions:1">238430</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’s what this article is about – a “click-along tutorial”. 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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&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&quality=80&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&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&quality=80&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&quality=80&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&quality=80&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 “Primitives” to “Points”. 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, “Custom” must be entered in the node attribute and “pscale” as the name and “Float” for the type. I use the VEXpression for this: “1 self * .5”.<br />And of course, I could have entered these values in the table straight away, but I didn’t. The zero named here as “OUT_points_with_attributes” 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&quality=80&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&quality=80&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 “Add Spare Input”.</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&quality=80&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&quality=80&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 “Delete Channels”.</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&quality=80&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 “Spare Input0” parameter, the “../foreach_begin1” 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 “points”, whereby it is not about several points, but about string values from points. The “s” at the end stands for “string”. The first spare input is addressed with “-1”. The zero after it is the first point, here it is always just one point anyway, as we are looping over the points. Then “word”, because we want to read the @word attribute. Brackets around it and a backtick and that’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&quality=80&ssl=1"  alt=""  class="wp-image-167922" ></figure>





<p class="wp-block-paragraph">As an aside and for the sake of completeness, “Add Text Attributes” 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. “f”, 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 “point” command and not “points”, as only a number is read out here and not a string. So “point(-1,0, “font”,0)”. In this case, “-1” is again the spare input, “0” is the first point, “font” is the attribute and the last “0” is a necessary argument, which doesn’t really make sense here. However, if we wanted to read out a vector, “0” would be X, “1” would be Y and “2” 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&quality=80&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 “index” 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&quality=80&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 “foreach_end1” node you can set to “Single Pass” 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&quality=80&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 “uv” twice with “P”.</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&quality=80&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 “none” and for Island Rotation Step we set “No Rotations”. 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&quality=80&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 “Largest Packable”. The “Advan…” 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 “Random Seed”.<br />That’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&quality=80&ssl=1"  alt=""  class="wp-image-167911" ></figure>





<p class="wp-block-paragraph">Select “Primitives” under Run Over and enter the following VEXpression: “s@name = sprintf(“%d”, i@index);”. 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&quality=80&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&quality=80&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&quality=80&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 “distance_multiplier”. 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&quality=80&ssl=1"  alt=""  class="wp-image-167915" ></figure>





<p class="wp-block-paragraph">Then either drag and drop the “foreach_begin3” into the spare input created or enter “../foreach_begin3”. I have set the parameter “distance_multiplier” to 0.025.<br />The magic is in the Distance parameter; enter “point(-1,0, “pscale”,0)*ch(“distance_multiplier”)” enter. Now @pscale is used to control the thickness of the letters. Do not forget to tick the “Output Back” 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&quality=80&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 “vdbsmooth” 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&quality=80&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&quality=80&ssl=1"  alt=""  class="wp-image-167927" ><figcaption class="wp-element-caption">This is roughly what it should look like now – 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 – we’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&quality=80&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>
