Warning: Declaration of HSM_PageTitle::load($meta) should be compatible with HSM_Module::load($meta = '') in /homepages/22/d93554086/htdocs/ys/wp-content/plugins/headspace2/modules/page/page_title.php on line 201 landscapes » Yekaterina Satanina
I am applying to jobs. Looking for modeling/texturing positions, junior generalist positions, junior lighting, and runner openings. In the meantime, I’ve been updating this site (hey-oh!), working on personal projects, and enjoying not having homework ever again.
Most recent additions to my portfolio – watercolor paintings and figure studies from my Drawing for Animation and Figure Sculpture classes. There are a bunch on the Artwork page, go go look!
I discovered the wonderful pleasure of taking my sketchbook on a date to a coffee shop. (Pour Coffee Parlor, Rochester, is my happy place.)
I’ve been swimming and running a bunch.
I’ve been hiking to pretty places. (Lake Ontario, Chimney Bluffs, central New York.)
And I’ve been making supreme loaded waffles (that’s a waffle with: butter, runny egg, bacon, onion, red bell pepper, spinach, feta, and maple syrup) with good friends.
This is the last post of the semester long Houdini independent study project. But hey – it ain’t done! It ain’t done, it ain’t done. And I’m not done. There is way too much I want to do with this program. Many more projects will come.
For now, here are the last things I did.
This is what the bonfire looks like. I’ve varied the proportions, amount of deformity, twist, taper, and bend of the logs, as well as added more branches to flesh it out. The hope was to mask most of it with the fire effect on top, but that didn’t happen, and I’ll get to why later.
Underneath and around the fire I scattered a bunch of ashes. Made in a similar way to the big rocks.
I wanted to put a layer of snow on the flattest areas of the landscape using metaballs. It would be unrealistic for computation times to scatter thousands of metaballs all over the entire landscape, so I only picked one area, and used the super handy slope attribute calculated earlier to scatter points just on the flat planes.
Then copied metaballs onto those points. It looked pretty much like what I wanted from up here…
…but not from up close. This just won’t cut it. This is mostly a problem of my scene scale. I’ve made the terrain a lot smaller than it normally would be, thinking this would decrease computation times, but it made any effect difficult to bring to realism. Everything I tried adding looked slightly miniature: the metaballs, the particles, the fire, etc. – even when scaled down.
So I tried scaling the metaballs way down, increasing the number of scattered points way up, increasing the resolution of the resulting polygon mesh…
And then Houdini crashed several times, leading me to believe that I overdid it with the metaballs. So instead, I focused on just that focal area, and made some nicer-lookin snow around there.
And then added the shaders to everything. Shading is something I’m just beginning to get into inside Houdini, so these shaders are fairly basic for now. Here are the final renders.
I tried fiddling with fog: filling a volume with metaballs, making them render as fog, manipulating them with various noises to give pleasant variation and clumps.. and it worked to an extent. I also tried adding fire and smoke to the bonfire. It.. did not work.
And here’s my big mistake. Scale.
I haven’t figured out how to adjust the global scale of everything, haven’t found where/how to do that. As I mentioned earlier, my terrain is about 100x smaller than it should be. This, in turn, means that anything I add needs to be scaled way down – and effects such as fire and smoke just don’t work that way. You can’t scale down a fire effect and expect it to behave the exact same realistic way that it would when normally sized.
So that’s the result of my semester. Some successes, nothing great, nothing too pretty, but a lot of lessons. Here’s what I would do differently in the future:
1) Appropriate scope. This project was trying to achieve too much in too little time with too little knowledge. I already know what I want to do next – a bonfire. Just a medium shot of a nighttime bonfire. But I want to make it good, really really good. This environment was just.. too big. Too much.
2) Appropriate scale. Figure out the scale of the scene before starting.
3) Focus on what Houdini is best at. I personally really wanted to do procedural modeling and set dressing – and honestly, got a kick out of it! Loved it. But Houdini’s forte is effects, destruction, explosions, water, fire, realism. I should really learn that.
And that is that. I graduate in two days. And I have tons of things I want to do, this being just one of them.
I like making the seal joke. “If I’m a seal in college, what’s my major? – Art art art art art!” And I clap like a seal, making that “ar ar ar” sound that seals make.
I thought it was dang clever.
But anyway, art!
Among my other projects this semester, I am taking a Drawing for Animation class and a Watercolor class. (I had to drop the Figure Sculpture class, for shame, because I just had too much on my plate.) Here’s a little glimpse on what I’ve been working on. These are not my very first attempts at watercolor, but it’s safe to say my first time learning it:
I got very excited when my professor, Luvon Sheppard, showed me the little simple way of mixing Prussian blue and Alizarin crimson for a gray underpainting. That coffee shop portrait was my first experiment with that technique. Such simple things. But they get me excited. Here’s a work in progress using that method, too:
Three weeks till graduation. I just want to paint all the time.
I spent my spring break in Utah this year. Came back last week. It was warm and beautiful, and a wonderful chance to get away and clear my head. However, everything there seemed to have been generated in Houdini:
So I was, of course, inspired. Would take me years to produce results that look anything remotely like these landscapes, but we’ll get there eventually.
All the locations we went to (Slot Canyon, Arches, Bryce, Zion) looked so different! Different rock formations, different textures. Very cool Stuff. I was taking mental notes on what different rocks look like out there in the real world.
I went with what I knew: scattered boxes copied onto the terrain mesh and displaced with a mountain SOP. The spread of good, size variation was nice, but the geometry did not look like rocks. This would work well enough for the midground and background, but for the foreground I would need a much better solution.
So instead, I found that example file and dove into it. Looks effective, but upon close inspection, not that difficult. Box, mountain SOP to shape it, subdivisions, then an attribute VOP with parameters changeable by the artist to displace the rock. Inside the VOP, a network of three different noises added on top of one another for a layered effect: Worley noise gives the rock its shape, turbulent noise adds texture, and veins (an option from the “patterns” menu) give the rock some cracks. Makes perfect sense!
The parameters outside the VOP, which allow the artist to change the look of the rock, include the offset of the Worley noise, Worley scale, the amplitude of the additional (turbulent) noise, depth of cracks, and the spread/amplitude of the crack pattern.
So I started making my own!
I wanted to try a different noise pattern for the overall shape of the rock, but none worked quite as well as Worley did. After doing some research, I even came across an article that said that Worley noise is best for stone and water textures. I kept it in.
I also tried different kinds of noise for the secondary texture and other patters (crackle, oscillations, ripples, etc.) for cracks, but… did not find a more pleasant combination than the one in the example, yet! Although I believe if I spend more time and figure out how to make the ripples work, they might look nicer and more natural than the default “veins.”
When the rock was done, I tried plugging it into my prior setup, and realized that this technique won’t work anymore:
The solution for that is adding variables to the copy SOP and using a transform node to randomly rotate and scale the rocks. Later I’ll take this one step further and randomize the rocks’ noise displacement offset, amplitude, and crack values.
Looks better! Now I just need to figure out how to arrange the rocks according to the curvature of the land, and not just randomly everywhere. I found a measure SOP that measures curvature, but that alone did not do the trick. It began to clump the rocks in certain areas, but did not give me any control over the precision of the placement:
I could, I guess, just take these rocks, separate them into separate volumes/meshes, and simulate them falling…
But let’s try this first. After the measure SOP, I added several attribute VOPs and inside each one calculated the slope of the landmass and used the color channel to represent the slope/curvature values. This method allowed to determine the peaks, the valleys, the steepest slopes, and the flattest areas. In theory, all I need to do now is take this color information and apply it to the scatter SOP so that the big boulders would only be placed in certain areas, the trees in others, grass and small pebbles elsewhere…
And this is the missing link that I haven’t figured out yet. How to take that color channel and make it affect the scattering of the rocks.
Also, once I figure this out, the same color information would be very useful in assigning shaders – the snow shader will go on the flat areas, and the stone shader will do to the steeper slopes. Speaking of which – I have found zero tutorials on either snow or stone shaders.
But hopefully I can figure something out myself. The general idea for all this is sensible: layered noise. Unfortunately, it takes me hours to figure all of this out.
Yesterday and today, the temperature in Rochester is in the high 30s (almost 40!), and we all went nuts and brought out the shorts and dresses. It’s the little things in life.
Meanwhile, I began working on my project’s composition:
And I don’t like it!!
Let me clarify: I love the process and enjoy it immensely. I like trying to figure things out, try this node, that node, this technique I remember, etc. No – so far I don’t like the result. But I’ll keep working on that.
Big thing I realized: the nature of my process makes achieving my goal a bit tricky.
For each layer, I start with a 2D map – be that a topo map, a noise map, or anything else. Then, by assigning height attributes to the maps, I create the 3D landscape. THEN I see the resulting composition – not when I’m creating the 2D map. And when I see the result, it is not exactly what I want. So in this scenario, I must go back and forth to try to get the values to do what I want them to do.
Not the most efficient process.
I could sculpt on top, and I WILL sculpt on top, later, for details – but the goal here is to stay as procedural as I can. So I will be looking for more ways to create my landscape.
Later! For now, I’d like to catch up to speed with the rest of what Houdini has to offer: shading, particles, and lighting.
But in the meantime, let me explain what I did for the landscape so far.
For the mountains way in the background, I used the noise generation technique with some sculpting on top. For now, kept it low res. The forms are organic enough, and have the right amount of detail for the distance. All I do is tweak some settings and see if I like the result.
For middle ground mountains, the focus mountains, I used a height map. I want as much control as I can get for them, so a height map works well. This is a good base for a detail sculpt on top later. However, I’m not quite happy with the composition of these two mountains quite yet, so I’ll fix that before I sculpt.
That node tree is fun.
For the foreground land, I also used a height map, but a much simpler one. Just as a base. I then converted the foreground to a volume for adding details on top later: arches, towers, cliffs, rocks. And, of course, sculpting on top.
And this is me cheating the 3D space:
All this dense geometry – and no lag. Absolutely no lag. I am really enjoying being able to tumble around in 3D space without any lag or fear of crashing.
Time to explore more cool things! Time to make more 3D out of 2D. In this post I’ll explain more terrain-building methods: generation of terrain from a 2D noise pattern and the use of volumes to create interesting formations in the landscape.
This software is both magical and simple. Magical in the way it processes data so quickly and effortlessly, magical in the design of its interface, and magical in the limitless possibilities the node-based system allows.
On the other hand, however, it’s simple. It makes sense. If I want a circle extruded along a curve, I will connect those nodes (‘circle’, ‘curve’, ‘merge’) in the proper order and manipulate their attributes to get the result I want – something that, in Maya, can be done with a lot less clicks simply by choosing “extrude.” In that sense, Maya is way more magical than Houdini: its processes are hidden from sight, and it would take some digging to unearth and see exactly how something was done. Houdini has it all right there: this is what you did, this is the result.
And nothing is “out of the box.” Not even the math. Not even the simplest noise!
Which brings me to the meat of this post. (The protein of this post?) The last method of 2D-to-3D landscape generation offered by the Go Procedural tutorial is the noise-based terrain. The method goes like this:
Create a 2D noise pattern in the compositor
Use edge detection to add small details to the pattern to the Nth degree
Composite the pattern with custom shapes and other details
Convert to 3D by projecting onto a mesh
In this example, I used a VOP COP, which is a fancy way of saying “compositing operator in VEX language.” VOPs create VEX code through the user’s manual wiring of nodes together. They’re the “underbelly” of a node that artists generally don’t see. Inside the VOPCOP generator, you can wire together a pretty complex math scenario that would make you some neat and complicated.. noise, for example. Or some other pattern. Or a shader. Many things.
And that pattern inside the VOPCOP generator can be infinitely unique and complex! Just add more math.
With my example, the x and y positions of a grid are wired into the position values of a Voronoi noise generator. Anti-aliasing is multiplied with the noise, a clamp is tacked on. Several multipliers allow the user to increase values, amplify attributes, and adjust the global scale of the noise. In Houdini, parameters are “promoted” to be visible to the artist on top, not inside the generator, so that the artist can control things like frequency, amplitude, roughness, scale, etc.
After creating the basic noise, an “edge detect” node, composited on top and blended with the original noise, adds little details.
The final composite has adjusted levels and a blurred mask on its transparency.
The geometry (grid) gets an “attribute from map” node, which takes the 2D composite and applies the chosen image parameter (in this case, luminance) to an attribute of the mesh. Another VOP, an attribute VOP, lets you go inside the mapper and wire the luminance of the black-and-white noise image to the Y-position of the points of the grid. A promoted multiplier value allows changing the elevation scale later.
The output? A detailed and easily editable polygonal mesh that can be exported as is, sculpted on, or converted to volumes for further work! Work like arches and caves, which is what I did next.
* Quick caveat: I’m figuring this out as I go. My explanations of Houdini inner workings might not be the most accurate. I still get confused between CHOPs and SOPs and DOPs. *
For arches and caves, a grid would no longer do. Instead, we use VDBs. And to my chagrin, VDB is “just a name,” according to the OpenVDB website. (They offer several very meaningful interpretations, such as “Voxel Data Base”, “Volumetric Data Blocks”, and “Volumetric Dynamic B+tree”.) What all this means: volumes in the form of voxels. A VDB node fills the space taken up by objects with voxels. In Houdini, because VDB support is added in addition to all the original stuff, VDBs require their own processes. For instance, instead of a regular “merge” node, a “VDB combine” node would be used for a Boolean-type operation between volumes.
So! We have a grid, we convert it to a volume. We make an arch from a simple torus with a mountain SOP on it (similar to Maya’s deformers), convert that to a volume, and combine the two with a “union” operation. Booleans, except smarter, because the voxels filling up the volume get recalculated once two or more objects are combined. Therefore, instead of an ugly “Boolean-type” result like this:
We get something more organic and sensible, like this:
For a cave, similar stuff. Circle extruded along a curve, a deformer node to make it look nice, and then a “difference” operation on the VDB combine.
Here’s what it looks like at the end:
What about a more detailed cave, though? What if the camera had to fly inside?
Well, friends, here’s just that.
1. Intersecting NURBS curves create the basic shape of the cave passageways.
2. Through some Houdini “magic,” or rather non-magic, a lofting/extruding operation on a circle gives the curves cave proportions.
3. Conversion of the NURBS surface to polygons.
4. Distortion of the surface with a mountain SOP to give an organic feel.
Next, more vocabulary lessons. Caves have different kinds of speleothems inside, or cave formations, made from mineral deposits. Stalagmites are the formations rising from the floor, and stalactites are the icicle-shaped pointy teeth from the ceilings. Here they are:
5. Selecting just the points of the cave whose normals are facing directly down and scattering some cone objects copied onto those points.
6. Doing the same thing for up-facing normal, and varying the cone dimensions with coded expressions.
7. After a VDB conversion and combining, here’s the result from inside the cave.
And, because this example just asks for a fly-through, here’s a fly-through!
Of course, this is nowhere near final, and needs a lot of cleanup – like clamping away those pieces of speleothems that seems to be “floating” in the air. However, for a simple concept, I think this is a pretty cool result.
But Kat, this is all great, but where’s YOUR project? How is that doing?
Well, I am sculpting the background and midground mountains this week, and will populate the scene with rocks and make the foreground land next week! And in the meantime, watch more tutorials on modeling and start some on shading. It’ll happen.
And here’s a test showing a big chunk of land created, similar to the size of what I’m hoping to make:
I conclude that it’s all doable.
When I looked into methods of building terrain in Houdini, I found several different approaches, ranging in technical level and amount of proceduralism. Go Procedural, Side Effects’ own Vimeo page of demos and tutorials, gives a very thorough outline of how to go about it:
According to this workflow, straight from he software specials, terrain building can be broken down into several simple steps:
Generate procedural base terrain
Customize it with masses, details, and set dressing
Convert the entire scene to polygons for rendering.
The first two steps, in turn, can be done in a variety of ways. Generating the base terrain can start straight from 3D, in the cases of:
Sculpting the geometry
Creating custom masses (for separate rocks)
Or you can start off with 2D data and convert it to 3D mesh, such as with:
2D topographical curves (height map)
2D DEM maps
2D fractals and other patterns
I tried sculpting first. Sculpting is fun, always. And in Houdini, sculpting is easy. Reminded me of Mudbox. Nondestructive, easily modified on any level, just add a new subdivision node and a new sculpt node on top and keep going.
Houdini also did a good job of reducing the mesh while maintaining detail.
But this can barely count as “procedural.” However, sculpting on top of a preexisting base mesh would be a good way to add custom detail with precision and a lot of control. Note to self.
Next I tried the height map method, which also turned out to be very customizable. Sure, you can go find a real height map online and use that, but you can also draw you own:
I like this idea, because this way I can create my landscape exactly how I want it. Control over everything. The only drawback – it would be fairly time consuming. After converting the 2D curves into a 3D mesh with some attribute coding, this is what I ended up with:
It doesn’t look very detailed because I didn’t have a lot of curves to start with. Still, I liked the results. With some tweaking, extra details, and sculpting on top, this method would work for my project.
One more thing the tutorial I used talked about: the topology curves method separates the input data from the geometry generators. Generators – groups of nodes doing one function in a scene – can become digital assets. Houdini makes good use of “digital assets,” and makes it easy to save them, export them, customize them, and reuse them. Much like your own presets. Digital assets increase productivity through such reuse. Modularity!
The next approach I tried used DEM maps – digital elevation models. They are similar to height maps, but instead of curves, there are gradients. And gradients can be powerful when they drive the right things. Using Houdini’s compositor, which behaves very similar to Nuke, I took a DEM image I found online and made its luminosity drive the height of a grid:
The results of this are most realistic, but least customizable.
Also, better watch the pure white and pure black areas – those will need some exposure adjustments on the 2D composite, or 3D detailing on top.
However, there is a way to change this to a degree. The 2D map can be turned into a composite image with other details on top. For example, this screenshot shows two areas of elevation that were added with curves and assigned heights, and integrated into the rest of the terrain:
In addition to all the terrain building, I tried some procedural set dressing, and learned a new word. “Scree” is a mass of small loose stones that cover the slope of a mountain. And I’ve generated some scree on my landscape.
These points are being driven by a snippet of code that determines the slope of the geometry and places points within a certain range. In other words, the points are being generated where the landmass is the flattest. They are then randomized (scattered) a bit, and assigned a piece of geometry – in this case, just a box.
If the red boxes were rocks, and then if a different slope range controlled bigger (or smaller) rocks, and another slope range controlled more rocks – I’d have a nice, natural-looking rocky landscape. Also, this method would work great for trees, when I need to place them just on the flat areas of a landmass.
In conclusion of this part of terrain building, I have a pretty good idea of how I’ll model my mountains later this week. I’ll use a combination of all three methods – a DEM map with some adjustments for the background mountains, a unique height map for the foreground mountains, and sculpting on top for close up details and camera details. Plus, rocks and trees.
To be continued with more terrain-building methods, soon…
Having given it a bit more thought and time, here’s what I actually plan to accomplish this semester.
My design challenge is to create a procedurally modeled and shaded landscape with several different effect simulations. It will be a mountain scene: terrain, snow, rocks, and evergreen trees. There will be a bonfire with smoke rising into the sky, and snow – all of this affected by gusts of wind.
To break that down, there will be elements of:
– Procedural modeling: terrain, rocks;
– Procedural set dressing: trees, rocks;
– Shading: snow, ground; and
– Effects: fire, smoke, wind, snow.
All of this will be done in Houdini, which I will learn in the process. In other words, by the end of the semester I would like to be proficient in Houdini modeling, shading, and several different types of effects – in the form of a presentable (hopefully) project. We’ll see how far I can get! Here are some composition ideas I’m playing around with:
The fire in the second concept piece will definitely make its way into the final project. Ideally I would have multiple shots, but I’ll focus on just making one good 10-30 second shot.
Right now we are beginning week 4 out of 15 in our spring semester, and here is my plan of attack for the next three-something months:
I don’t think I remembered to eat dinner today, I was too excited about lights and colors and more lights. I’m working on a lighting project for my class, and it is turning into a modeling/texturing/lighting experiment.
The hard lines of the environment model are intentional. Different lights in the scene affect different geometry groups and sometimes individual meshes. The final scene will be a combination of multiple passes and render layers, but today I was working on the toon shader/outline layer. It has the bright, flat colors that I wanted, harsh shadows, and prominent outlines.
Original concept art:
Toon shader and outline layer rendered with Maya software:
Of course, I would love to achieve the “brush stroke” look of the original painting, and, more importantly, the splattered shadows. I plan on using flat image planes with a painted texture and alpha for the trees in the background.
Other than that, I’m fairly happy with how my colors are turning out, especially considering I’m not picking them directly from the concept painting.