<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Nathan Ho (Posts about graphics)</title><link>https://nathan.ho.name/</link><description></description><atom:link href="https://nathan.ho.name/categories/graphics.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>© 2026</copyright><lastBuildDate>Thu, 07 May 2026 05:13:17 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>TopMod, Blender, and Curved Handles</title><link>https://nathan.ho.name/posts/topmod-and-blender/</link><dc:creator>Nathan Ho</dc:creator><description>&lt;div&gt;&lt;p&gt;I’ve been working on a big project using Blender. More on that in a future post, but &lt;a class="reference external" href="https://nathan.ho.name/pages/polytwisters/"&gt;here’s a preview&lt;/a&gt;. The project has gotten me into a 3D art headspace, and I took a detour recently from this major project to work on a small one.&lt;/p&gt;
&lt;p&gt;Blender isn’t my first exposure to 3D. When I was a kid, I played around a lot with POV-Ray – an outdated program even back when I was using it, but still a fun piece of history. I also found out about something called &lt;a class="reference external" href="http://people.tamu.edu/~ergun/research/topology/download.html"&gt;TopMod&lt;/a&gt;, which is an obscure research 3D modeling program. I was interested in it primarily because of &lt;a class="reference external" href="https://www.bathsheba.com/"&gt;Bathsheba Grossman&lt;/a&gt;, who used it in &lt;a class="reference external" href="https://www.bathsheba.com/sculpt/"&gt;a series of lovely steel sculptures&lt;/a&gt; based on regular polyhedra.&lt;/p&gt;
&lt;p&gt;The core idea of TopMod is that, unlike other 3D modeling programs, meshes are always valid 2-manifolds, lacking open edges and other anomalies like doubled faces. This is ensured with a data structure called the Doubly Linked Face List or DLFL. In practice, TopMod is really a quirky collection of miscellaneous modeling algorithms developed by Ergun Akleman’s grad students. These features give a distinctive look to the &lt;a class="reference external" href="http://people.tamu.edu/~ergun/research/topology/images.html"&gt;many sculptures and artworks made with TopMod&lt;/a&gt;. I identify the following as the most important:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Subdivision surfaces.&lt;/strong&gt; TopMod implements the well-known &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface"&gt;Catmull-Clark&lt;/a&gt; subdivision surface algorithm, which rounds off the edges of a mesh. However, it also has a lesser known subsurf algorithm called &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Doo%E2%80%93Sabin_subdivision_surface"&gt;Doo-Sabin&lt;/a&gt;. To my eyes, Doo-Sabin has a “mathematical” look compared to the more organic Catmull-Clark.&lt;/p&gt;
&lt;figure class="align-center"&gt;
&lt;img alt="Seven cubes joined together in a 3D + symbol." src="https://nathan.ho.name/images/topmod/subsurf_original.png"&gt;
&lt;figcaption&gt;
&lt;p&gt;Original mesh.&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class="align-center"&gt;
&lt;img alt="The above mesh smoothed out into an organic-looking figure comprising quadrilaterals." src="https://nathan.ho.name/images/topmod/subsurf_catmull_clark.png"&gt;
&lt;figcaption&gt;
&lt;p&gt;Catmull-Clark subdivision surface.&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class="align-center"&gt;
&lt;img alt="The above mesh smoothed out into a figure looking like an assembly of octagonal rods." src="https://nathan.ho.name/images/topmod/subsurf_doo_sabin.png"&gt;
&lt;figcaption&gt;
&lt;p&gt;Doo-Sabin subdivision surface.&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;Rind modeling.&lt;/strong&gt; This feature makes the mesh into a thin crust, and punches holes in that crust according to a selected set of faces.&lt;/p&gt;
&lt;figure class="align-center"&gt;
&lt;img alt="A cantellated truncated icosahedron with hexagonal and pentagonal faces highlighted in pink." src="https://nathan.ho.name/images/topmod/rind_modeling_original.png"&gt;
&lt;figcaption&gt;
&lt;p&gt;Original mesh with faces selected.&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class="align-center"&gt;
&lt;img alt="The same mesh but with holes punched into the hexagonal and pentagonal faces, revealing that it's a shell." src="https://nathan.ho.name/images/topmod/rind_modeling_rind.png"&gt;
&lt;figcaption&gt;
&lt;p&gt;After rind modeling.&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;Curved handles.&lt;/strong&gt; In this tool, the user selects two faces of the mesh, and TopMod interpolates between those two polygons while creating a loop-like trajectory that connects them. The user also picks a representative vertex from each of the two polygons. Selecting different vertices allows adding a “twist” to the handle.&lt;/p&gt;
&lt;figure class="align-center"&gt;
&lt;img alt="A cube." src="https://nathan.ho.name/images/topmod/curved_handle_original.png"&gt;
&lt;figcaption&gt;
&lt;p&gt;Original mesh.&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class="align-center"&gt;
&lt;img alt="The same cube with a twisted handle connecting two faces." src="https://nathan.ho.name/images/topmod/curved_handle.png"&gt;
&lt;figcaption&gt;
&lt;p&gt;Handle added.&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;The combination of these three features, &lt;a class="reference external" href="http://people.tamu.edu/~ergun/research/topology/papers/bridges06.pdf"&gt;as pointed out by Akleman et al.&lt;/a&gt;, allows creating a family of cool-looking sculptures in just a few steps:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;p&gt;Start with a base polyhedron, often a Platonic solid.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add various handles.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Perform one iteration of Doo-Sabin.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Apply rind modeling, removing contiguous loops of quadrilateral faces.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Perform one or more iterations of Catmull-Clark or Doo-Sabin.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;(I would like to highlight step 3 to point out that while Doo-Sabin and Catmull-Clark look similar to each other in a final, smooth mesh, they produce very different results if you start manipulating the individual polygons they produce, and the choice of Doo-Sabin is critical for the “TopMod look.”)&lt;/p&gt;
&lt;p&gt;TopMod has other features, but this workflow and variants thereof are pretty much &lt;em&gt;the&lt;/em&gt; reason people use TopMod. The program also has the benefit of being easy to learn and use.&lt;/p&gt;
&lt;p&gt;The catch to all this is that, unfortunately, TopMod doesn’t seem to have much of a future. The GitHub has gone dormant and new features haven’t been added in a long time. Plus, it only seems to support Windows, and experienced users know it crashes a lot. It would be a shame if the artistic processes that TopMod pioneered were to die with the software, so I looked into ways of emulating the TopMod workflow in Blender. Let’s go feature by feature.&lt;/p&gt;
&lt;p&gt;First we have subdivision surfaces. Blender’s Subdivision Surface modifier only supports Catmull-Clark (and a “Simple” mode that subdivides faces without actually smoothing out the mesh). However, &lt;a class="reference external" href="https://github.com/edzop/bpydoosabin"&gt;a Doo-Sabin implementation&lt;/a&gt; is out there, and I can confirm that it works in Blender 3.3. An issue is that this Doo-Sabin implementation seems to produce duplicated vertices, so you have to go to edit mode and hit Mesh -&amp;gt; Merge -&amp;gt; By Distance, or you’ll get wacky results doing operations downstream. This may be fixable in the Doo-Sabin code if someone wants to take a stab at it. Also worth noting is that this implementation of Doo-Sabin is an operator, not a modifier, so it is destructive.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;EDIT:&lt;/strong&gt; Turns out, Doo-Sabin can be done without an addon, using Geometry Nodes! &lt;a class="reference external" href="https://blender.stackexchange.com/a/277029/154615"&gt;This StackExchange answer&lt;/a&gt; shows how, using the setup in the image below: a Subdivide Mesh (not a Subdivision Surface) followed by a Dual Mesh. The Geometry Nodes modifier can then be applied to start manipulating the individual polygons in the mesh.&lt;/p&gt;
&lt;img alt="A image of Blender's Geometry Nodes editor showing a Group Input connected to a Subdivide Mesh connected to a Dual Mesh connected to a Group Output." class="align-center" src="https://nathan.ho.name/images/blender_doo_sabin_geometry_nodes.png"&gt;
&lt;p&gt;Rind modeling can be accomplished by adding a Solidify modifier, entering face select mode, and simply removing the faces where you want holes punched. An advantage over TopMod is that modifiers are nondestructive, so you can create holes in a piecemeal fashion and see the effects interactively. To actually select the faces for rind modeling, TopMod has a tool to speed up the process called “Select Face Loop;” the equivalent in Blender’s edit mode is entering face select mode and holding down Alt while clicking an edge.&lt;/p&gt;
&lt;p&gt;Curved handles have no equivalent in Blender. There is an &lt;a class="reference external" href="https://blender.stackexchange.com/questions/210078/how-do-i-do-topmod-style-loops-in-blender"&gt;unresolved question on the Blender StackExchange&lt;/a&gt; about it. To compensate for this, I spent the past few days making a new Blender addon called &lt;a class="reference external" href="https://github.com/nhthn/blender-handle"&gt;blender-handle&lt;/a&gt;. It’s a direct port of code in TopMod and is therefore under the same license as TopMod, GPL.&lt;/p&gt;
&lt;p&gt;My tool is a little awkward to use – it requires you to select two vertices and then two faces in that order. TopMod, by comparison, requires only two well-placed clicks to create a handle. I’m open to suggestions from more experienced Blender users on how to improve the workflow. That said, this tool also has an advantage over TopMod’s equivalent: parameters can be adjusted with real-time feedback in the 3D view, instead of having to set all the parameters prior to handle creation as TopMod requires. The more immediate the feedback, the more expressive an artistic tool is.&lt;/p&gt;
&lt;p&gt;Installation and usage instructions are available at the &lt;a class="reference external" href="https://github.com/nhthn/blender-handle"&gt;README&lt;/a&gt;. blender-handle is 100% robust software entirely devoid of bugs of any kind, and does not have a seemingly intermittent problem where sometimes face normals are inverted.&lt;/p&gt;
&lt;p&gt;The rest of this post will be a nerdy dive into the math of the handle algorithm, so I’ll put that after the break. Enjoy this thing I made in Blender with the above methods (dodecahedron base, six handles with 72-degree twists, Doo-Sabin, rind modeling, then Catmull-Clark):&lt;/p&gt;
&lt;img alt="A render of a strange striped object with six symmetrical loops." class="align-center" src="https://nathan.ho.name/images/blender_topmod_example.png"&gt;
&lt;p&gt;&lt;a href="https://nathan.ho.name/posts/topmod-and-blender/"&gt;Read more…&lt;/a&gt; (9 min remaining to read)&lt;/p&gt;&lt;/div&gt;</description><category>blender</category><category>geometry</category><category>graphics</category><category>visual art</category><guid>https://nathan.ho.name/posts/topmod-and-blender/</guid><pubDate>Wed, 07 Dec 2022 01:15:17 GMT</pubDate></item></channel></rss>