At the beginning of this project, I had intended to work fully inside Houdini's COP network since I wasn't familiar with it and thought it would be a good way to learn how it works. However, after a few tests, I realized that because the COP network takes so much time to compute, it would not be possible to rely solely on COPs for this project.
Additionally, I encountered other issues, such as the dot textures floating in animation instead of sticking to the geometry. It was also almost impossible to prevent the final result from looking like it was done in 3D software, which was a look I really wanted to avoid.
At first, I was using the "Mask by Feature" node to create a mask onto the geometry using an object to cast rays onto it. This was the closest way to create a mask similar to how light is cast onto an object, which was incredibly important to me since I wanted to add some version of lighting onto the asset without intending to use regular photorealistic lighting for rendering.
The first use of the mask I created was for the example shown above. I imported this mask into the COPs network and rasterized it so I could further use and manipulate the results. This was a really important milestone discovered during my testing phase.
Since I already had the solution for how the points would be scattered onto the geometry, the next step was determining what information I would need to bring from SOPs into COPs. I did this by analyzing different pieces of work by Soman—not just the single piece I was trying to recreate—and taking detailed notes.
Even though his artworks aren't all exactly the same, I noticed several consistent, crucial details:
How he drew his hand-drawn edges.
How lighting was translated through a higher density of dots.
How the size of the dots varied slightly, but remained consistent enough to feel cohesive.
How he utilized the darkness of the background alongside the points to create a sense of depth.
How his animations of cloth, water, and fireworks felt unique to one another.
After completing this visual analysis, the next pipeline steps came together fairly easily because I knew exactly what basic information I needed to import into COPs to layer together later.
While building the node network in SOPs, I also started adjusting the network I had previously created in COPs. The most important change was removing the network responsible for creating the dot and noise patterns; since I was now handling that scattering process directly inside SOPs, removing it from COPs was crucial to eliminate massive processing overhead.
From there, I knew I needed to rasterize more of the 3D information in different forms, so I took a deep dive into COPs to fully explore its capabilities for extracting different types of visual data. After extensive testing and building out a massive experimental node network, I tested the setup across several different geometries. This allowed me to pinpoint exactly which nodes were essential, eliminate redundancies, and identify the core processes that needed to be repeated, and also worked with every asset.
Once the base network was partially completed, I began testing it again with different geometries and started building the HDAs (Houdini Digital Assets) for the two-node networks. By building the HDAs concurrently with testing, I was able to identify which parameters were necessary to expose to the user and which could be omitted to avoid cluttering the tool with too much information. This was an iterative process that I repeated every time I wanted to add more control over the results or introduce additional sections to the tools.
Before
After
Geometry Before Monochromatic Dot Tool
Geometry and Effects Before Render
Like any tool or software, there are always areas that can be optimized to make the workflow faster and more efficient. Moving forward, I plan to implement several key updates to both tools in the toolkit. For the first tool, the "Point Generator", I intend to add a caching feature for the points scattered across the geometry; when working with animated or simulated meshes, caching these points will significantly reduce processing and rendering times within COPs. For the "Mono Dot COP" toolkit, I plan to further reduce computer processing by doing a thorough optimization pass on the network, evaluating every single node to ensure it is essential, removing any redundancies, and refining the HDA layout accordingly.
Additionally, I plan to develop individual HDAs for specific stylized effects to expand the toolkit. These will be separate, nodes to stylize effects such as water, fireworks, clouds, and simulated cloth like in the toolkit result example. Furthermore, I intend to continue research and develop procedural workflows to create similar stylized results for fire, smoke, and ocean simulations.