HoudiniTag Archive -

Quick after-IBC update

Here’s just a quick update as I spent the last two days at IBC. Just before I left to Amsterdam I finished the linked render. I’ve started working on the shading a bit. Here’s the first results of that effort. I started with the frosted glass shader as I liked the look Finella Fan created in her project. I added a sub surface scattering much like she did to make it a bit nicer. From that point on its been mostly trying different combinations of settings to figure out how to make it look good. I quickly found out that the guys at Sony Image Works, were totally right about not being able to shade the complete wave in one go (who’d have thought they were on to something there). So I definitely will add zone’s to the wave which can then be shaded independently to create the right look for all area’s on the wave. This can be fairly easily done by adding some attributes to the geo and give them different values for each zone. You can import attribute values from your geo into shaders easily so these values can then be used to dial in different settings for the shading or just completely separate blocks of shader code. So this will be the next step coming week in combination with more particle work. Still really loads of fun to work on this.

Latest render here:

http://www.dutcheffe…/WaveSetup.mov

Cheers,
Erik

Post to Twitter

Refitting particles

Ok, I’ve reworked the particle system to fit into the new geo. In the process I also further optimized the entire solution by saving out prerendered geo-sequences of the wave surface. The source-surface for the particles is now carved into a narrow strip at the lip of the wave which further optimizes processing.
I’m now easily rendering around 400k particles with the pasted wave surface at 1024×576 in on average 2 minutes a frame. This particle count can go up a lot more before I get into any rendering progress as the particle render part of this isn’t the biggest chunk of the time. I must admit I’m not rendering deep shadows on the particles yet and the surface shader is very basic currently (no subsurface scattering and such).
But still its looking promising in terms of render times so far.
I encountered one little challenge during these changes (which were already visible in previous renders). The wave lip was moving so much between frames that the particles where coming up in strips with an empty space in between. This can be solved by increasing the oversampling on the particle system. However, this causes problems with the prerendered particle source geometry as that only contained geo per frame. I quickly found that by taking the increment on the geo render down to .25 I could actually render 4 steps per frame (I did have to use $FF to generate the ‘frame’ number in the file name in stead of $F, as this generated the fractional ‘frame’ numbers). The file sop that loads the geo again also set to $FF for the ‘frame’ numbers then reads the ‘sub’ frames when requested by the particle system and Bob was my uncle. So, this way I combined the performance advantage of pre-rendering the geo while still having higher oversampling to get the proper generation of particles.
You might note that the particles seem to be a lot more short lived than in previous renders… this is a preperation for the next step in the lip-spray system. I’m going to be instancing finer mist particles from the lipspray that further moves up and over the wave.

Render included:

WaveTest7
Cheers,
Erik

Post to Twitter

Another refactoring

After some technical discussions with one of the guys at SideFX, I’ve done some rework of the basic setup in order to facilitate ‘pasting’ my wave onto a ocean surface. The wave needs to be a NURBS surface and I had turned it into a polygon surface in order to get enough detail to spawn particles. So, I reworked the setup so it supports both needs.

One of the things that is important in a wave setup like this is that you create a unified texture space that uniformly spans both the ocean surface as the animated wave. This texture space also needs to warp and stretch with the wave surface in order to create realistic displacement and foam movement (so a simple projection is out). Luckily both these issues are fairly easily solved in Houdini. There is a Paste sop that is able to literally ‘paste’ the wave (the feature) onto the ocean surface (the base).

In order to get the UV space of both elements to line up and deform properly I’ve used the ‘ray’ sop. With this sop you can project rays from one surface (the wave) onto another (the ocean surf), you can then suck up attributes from the target surface (ocean surface), which in my case is the UV attribute. This way the wave inherits the UV space of the ocean surface regardless of the relative position of the wave on this surface. Really cool stuff…

this ‘only’ leaves the warping and stretching.. for this I have a non-distorted version of the wave (basically a flat surface) that has the same topology of the animated wave (in the surf’s up paper this is called the ‘pref’), this flat version is the one used in the ray sop. The UV attributes are then copied to the animated wave which is then pasted on the ocean surface. The attached file shows the result with a grid texture to show how the wave interacts with the ocean surface and UV space.

So far so good… of course this is without all the problems I encountered in different area’s before it actually worked. The nice thing about this is that by editing the ‘flat’ pref surface I can tune the stretching of the surface on the wave.

WavePrefTest

Cheers,
Erik

Post to Twitter

Forces and particle generation

I’ve solved a fairly hairy problem that was pestering me while the solution obviously was very simple. I couldn’t for some reason get my force attribute on the lip of the wave drive the amount and velocity of lip spray particles. In the end it was a matter of better distributing the value of the force attribute as it is applied to the ‘surface attribute’ distribution mode of the particle source (a big thanks to the really great support team at sidefx for helping here).
I’ve started using a lot more ramps to control the distribution of values of attributes in the setup as they give me a lot more control and also do this much easier.
In the mean time, I’ve added a custom VEX SOP that displaces the lip to create the shape of the water breaking up where it falls down with the most force. So the displacement is controlled by the force attribute. I created custom VEX SOP because I had problems with the displacement slipping as the surface morphed. Watching the fxPHD rnd101 class 6, gave me the solution to tacke this. I had to make sure the P(oint) locations in my ‘shader’ were locked to the unmorphed ‘texture’ (UV) coordinates…
I’ve added a subdivide that is also driven by the force attribute after the displacement which smooths out the details and brings birth locations of the particles closer to the ultimately subdivided (in the render) surface, so the particles match up with the full highres subdivided render results.
The turbulence that randomizes the displacement in turn gets fed back into a ‘force_mod’ attribute that adds texture to the force. This ‘force_mod’ attribute now drives both the amount of particles of the lip spray and the velocity of these particles.
All this adds a lot more natural look to the lipspray. I’ve also eliminated the ‘curtain like’ lip spray that fell straight down from the lip in the previous version. After looking at a lot of reference footage this turned about to be totally wrong. Looking at the current render, I notice that the camera angle kind of hides some of the randomness. Think I’ll render a version looking just straight out at the wave.
Lastly, I think I’ve found the right tools to combine this strip of wave geo onto a bigger water surface: the paste sop. This sop allows to add detail surfaces on a base surface while fully integrating texture space and only adding detail to the geo where needed. Looks promising (I actually think this is the exact tool they used in Surf’s Up to do this).

Any way, still lots of stuff to do, but making progress so I’m happy!

WaveTest6

Cheers,
Erik

Post to Twitter

Houdini: Surf’s Up

I’ve started working today on a wave system ala Surf’s Up: WaveTest1.

It’s virtually completely procedural. You just pass in a grid size, amount of columns and rows and animate the wave position and the big rollers (see WaveTest2) to animate the breaking of the wave. The only thing that’s not totally automatic right now is the generation of the rollers, there are now always 5 of them. I think I’ll need to add some Python to make that number flexible as well.

The lip-spray currently is based on upwards velocity of the water surface in combination with the height of the surface. I’m not sure if that’s the best recipe although it looks fairly ok as it is now.

If I wasn’t already very happy with Houdini, I am now.. I was able to create this from scratch in about 5 hours. As I’m only starting to learn Houdini in ernest I couldn’t be happier!

Next up:
- improve the curves for the deformation
- add the settling down of the wave
- adding the whitewater where the lip crashes into the water, and the spray that swirls around in the tube. – the probably much harder part.. shading.
- After that I might put a surfer on there and work on all the splashes and wake he/she generates.

In terms of fun, this is only a little notch below actually surfing yourself…

Cheers,

Erik

Post to Twitter

Page 6 of 6« First...«23456