I’m Alejandro Echeverry. I live in Bogotá, Colombia and I am currently working as a Houdini FX TD running my own company, NetForce FX. We offer tool development and shot solving for movies, TV commercials and real time applications (VR and video games). Our clients are from around the world and include creative studios located in the U.S., Canada, Europe, Australia and of course Latin America.
​I began my career in the video game industry working as a technical artist for game company Immersion Games. We developed AAA games like Monster Madness, Cellfactor, Kung Fu Academy and technical demos for Ageia (now owned by Nvidia). Most of my time was spent building levels, writing shaders, rigging characters and doing FX development. Later on in my career I moved to the advertising and movie industry.
Unfortunately here in Colombia the film industry is still very small and as a consequence many talented people are forced to travel abroad to find opportunities in the industry. For me personally traveling doesn’t work: I prefer to work remotely from home. This way I have time for my family, I can manage my work hours and I can play video and tabletop games whenever I want. In short, working remotely is better for my health and my sanity! Frankly, remote work should be the norm in this industry. Companies often see remote work as the enemy and they fear that they will lose control of their projects if they choose to hire remote workers. I think it's the other way around: artists working remotely are often more relaxed and happy, and consequently more efficient and creative.
While I enjoy my work in the film industry, I am still a gamer at heart. My passion has always been participating in the real time world: I enjoy playing video games and now thanks to consumer VR tech, I can regularly visit the Metaverse (mostly playing “Elite Dangerous”). We are living exciting times right now: It’s easy to prototype real time applications using software such as UE4 or Unity. There is no need for armies of programmers to bring ideas and dreams to life in the Metaverse. Granted, the VR/AR development trend is still very young, but those techniques will be the future of our entertainment.
The main tool in my pipeline is Houdini, because I can easily prototype and solve complex shots. That being said, the main reason I prefer Houdini is flexibility and versatility. If Houdini doesn't have the specific tool I need, I can write it using just nodes or the amazing VEX language. I don't get stuck as is typical with the majority of 3d software solutions, where I would need droves of programmers at my disposal to achieve the same degree of freedom.
I really enjoy developing tools (assets) and workflow techniques to accelerate work and to gain better artistic control over production problems such as small scale and large scale sims, smoke and fire sims and procedural modeling and animation. A recent example is the tool I created to manage the Surface Tension behavior in the FLIP/PIC method inside Houdini. Here is a video that illustrates the tool’s capability with crowns shapes:
Surface Tension behavior is very complex, and to better manage it, I wrote a Surface Tension model from the ground up and named it “Micro Tension”. My tool computes a Free Surface mask from the fluid body (the Free Surface is the area of a fluid body that is in contact with another medium) and uses it as an influence zone to apply a surface decimation force aka Surface Tension. The Surface Tension model that I use is standard: It works by computing the curvature and gradient of the surface field to then construct a force that drives the particles in the direction of the gradient, using the curvature as a factor. This way you get push and pull forces that make the fluid behave as if there were some cohesion forces that minimize the surface area. The result: Fluid behaves more like round shapes (drops and tendrils).
​
Here I’ll explain how to implement a very basic standard surface tension force at volume stage for use with the Houdini FLIP Solver.
​
You can begin by placing a very basic setup in dops that uses a FLIP object and a FLIP solver node.
​
A sample file for you to work with can be found here . . . .
​
​First we need to fetch the surface field. There are many ways to accomplish this, but for this example we will use a pure DOP approach. First drop a gas match field node. With this we will create our first ad-hoc field, namely curvature: choose float type and use surface as our reference field. Drop another gas match field node, but this time name our new field gradient: choose vector type and use the vel field as reference field name.
Now that we have our field placeholders we can begin to compute our two main components of our Surface Tension force. Drop a gas analysis micro solver in our pipeline to compute the curvature out of our surface field; drop another one to compute the gradient out of our surface field as well. Now we need to implement a force with these two variables - to do this, drop a gas field VOP wrangle and use the screenshot code.
This VEX code means that we are fetching 2 fields, the curvature (f@curvature), and the gradient (v@gradient). We use the curvature as a factor for the gradient, to then add the result to the vel field as a force. We also do some fitting operations to the curvature, because the curvature range is between some negative and positive values (convex and concave zones). I ended up with the range shown, but you can experiment with that. Another important factor is to “normalize” ( sfForce * (@TimeInc * chi(“fps”)) ) or to take into account the time steps used by the system. Because this is an adaptive system, we should ensure that our force will not be adding more than it should.
One last recommendation is to blur or smooth your surface field a bit just before computing the curvature and gradient; this will make the shapes and behavior even more interesting.
ANCHOR PRODUCTION REPORT (MILK PYROCLASTIC CLOUD R&D)
​Anchor was a project that required a fluid evolving inside another fluid medium. Specifically milk had to develop inside a water-like medium in a pyroclastic like cloud, swirling and growing with each time step. To solve this complex problem, I developed a custom smoke solver with some modular forces and shape filtering. I implemented a surface decimation force to recursively make the level set grow and divide for each time step.
For this I did a surface tension implementation for the smoke solver. Because we need a signed distance field to better compute the necessary fields, I did convert the density field to a SDF representation, then I did the curvature and gradient computations like a standard Surface Tension implementation. You can compute a gradient out of a density field also, but because I needed a curvature computation, it was better to compute the new fields from a SDF representation.
​The resultant force is then combined with some turbulence. I also used some divergence controls to apply compression and expansion forces; this was to gain better control over shaping the whole pyroclastic cloud. Then this forces integrate with the vel field as a pyroclastic force to advect the density.
Finally I imported the SDF from DOPs to do the necessary filtering and retime which would then result in a jitter free mesh. The filtering was done using the amazing VDB library inside Houdini, so the resultant SDF from DOPs was passed through some level-set refinement to then output a polygonal model as the final result of the pyroclastic cloud.
Here are some old tests that better demonstrate the pyroclastic force. As you can see you can obtain more organic pyroclastic details without relying on a Vorticle/Particle solution. The nice thing about this technique is that it is very fast to simulate (assuming that your shot doesn't need re time or time warping effects). It's more natural and your simulation can iterate faster about the look dev. I’ll be posting some Vimeo videos very soon to show this functionality in some smoke sims.
PyroclasticForce R&D:
V001
​
V003
​
V004
I hope you learned something new from reading this! I want to say thanks to the Houdini community and particularly to the fantastic members of Odforce Forum who are always willing to help and support other members. Thanks to Side FX for this great piece of software and thanks to GridMarkets for helping with the publication of this piece. Thanks to Octavio, Ole and Ben; it was a very nice experience working with you guys on the Anchor project! Finally a very big thank you to my family for the constant support! Feel The Knowledge Kiss The Goat.
​
Alejandro Echeverry 2016
By: Patricia Cornet
GridMarkets marketing