We were asked to make a list of priorities to work on for this week, given that we are supposed to be at 98% done. The list we came up with was this:
- [Felipe] Dust continuity between shot 1 and 2
- [Elyssa] Addressing road texture striation and scale in shot 2 (current scale too large)
- [Bradley/Felipe] Additional layer of debris/dirt to shot 2, adding more size variation
- [Sarah] Remove excess purple from car in shot 2 (more red)
- [Elyssa] Addressing the harsh line in the back of shot 2 between the road, short grass, and tall grass
- [Bradley] Reducing the density of the dust in shot 1
- [Felipe] Filling empty space on screen right of shot 2
- [Felipe] Adding noise to the gravity to add variation in speed to the falling debris
- [Elyssa] Comping shadows under the debris and road chunks in the tractor beam volume
- [Sarah] Adjusting lighting in shot 1: beam on earlier with brighter exposure and lower streetlight exposure
Isolating my priorities the list looks like this:
- Dust continuity between shot 1 and 2
- Additional layer of debris/dirt to shot 2, adding more size variation (Bradley will add his dirt pass to my asphalt pass)
- Filling empty space on screen right of shot 2
- Adding noise to the gravity to add variation in speed to the falling debris
This is the process of how I addressed my list of priorities:
Continuity Between Shots
I started by analyzing the last frame of SH01 to get a feel of the overall behavior of the dust. I also asked Bradley for the last frame of his dust simulation to see if I could repurpose it for the continuity. But since SH01 is really tightly framed, his simulation is very dense and not efficient for the wide shot since it would kill my computer. So I decided to approximate its look from scratch, but using a POP simulation as well and using his as reference.
Last Frame of SH01
Bradley’s Particles at the Last Frame of SH01 in Relation to The Car
As I stated in the previous paragraph, Bradley’s setup is very particularly tailored for the first shot. Also the alignment with the car is different for the second shot.
I had to let my imagination fly to kind of get a result on the motion and distribution that would feel connected to the first shot. The first step I took was to scatter points on a circle and then scatter the circle around the car like this:
Given that the distribution was too uniform, I connected a Point Jitter SOP after to blend the circles adding a some randomness to the even distribution of the points.
Now, to randomize even more and scatter more points based on the previously scattered ones, I used a Point Replicate SOP. This I used as my source points for a POP simulation.
I simmed a good 20 frames or so of my DOP Network and wrote out the .sim file to use as initial state. Clearly, this is supposed to be the continuation of SH01, so it cannot start all settled down. It needs to start already going!
Initial State of This Continuity Simulation
After some tweaks and tests I got rid of the points that weren’t visible in the shot by culling them out. This, of course, to optimize file size and smooth out our very rough Houdini-to-Maya pipeline.
After this, I applied the same setup I had for the other dust. I converted the points to VDB using VDB from particles.
The out-of-the-box result, same as before, is too coarse. So using a VDB Smooth I smoothed away some of its roughness after tweaking the iterations to find the result best to my liking.
Since the density was too high, by using a Volume Mix node I post-multiplied the density until I felt it was closer to the look of the dust in SH01.
Now, it was ready to be cached out as a .vdb file to be passed along for lighting and rendering.
With the continuity between the shots addressed, it was time to move towards the second item on my priority list. This one was the easiest since I just forced the @active attribute to 1 on some of the asphalt pieces to the right of the car (from the camera perspective, of course. Not the actual right side of the car… ).
Once those pieces activate, the procedural system takes over and makes them fly upwards and rotate randomly. And since the debris depends on the active pieces, these will procedurally generate debris automatically later on. More on that in a bit.
Last thing to address on my 3 item priority list. The debris almost drove me crazy, if I spent 50% of the time I allocated to address items 1 and 2 on the priority list, I spent 400% on fixing the debris, maybe even 700%. The point is that I had to work on it a lot.
The way the debris works is well, by using a Debris Source node based on the asphalt chunks. That’s all happy work, since it’s so straight forward. The pieces separate, when they separate, the SOP makes points on the edges of the pieces. From that I made a particle simulation with some subtle POP Forces.
Now the interesting part is making the debris (particles) collide with the asphalt pieces. Making the pieces a VDB is something I tried. Since the pieces move, the combined pieces are evaluated as ONE deforming object, so the VDB voxels don’t stay in place and kind of change a little each frame. I tried this and it was a mess. First, because it took like 10 times longer to simulate. And second because the VDB voxels varying would make the fallen particles kind of drift on the surface. Fail.
The solution I’ve been using for the past weeks has been using the packed asphalt pieces as an animated RBD object and adding a bullet solver to the POP network. It was working kind of fine until last delivery. During our last meeting with our mentors I noticed that the pieces started going a little insane in behavior (It is totally different when you see your work on a big screen). And most of the time I spent working on addressing this for the next delivery was on trying to make them behave properly. This is where I tried the aforementioned VDB collision approach.
To be anticlimactic, the problem was that I was pushing the Collision Padding in the RBD Packed Object too hard towards a small number (to prevent the particles to be trapped inside the collision hulls). This, of course, I found out after running multiple sims with different settings that made me question my own existence. I put it back to default, and changed the Geometry Representation in the RBD Packed Object to Concave.
Now, the thing that made me pat myself on the back and say “good job!” was using a Primitive SOP to scale each asphalt pieces by a little bit to avoid the previously mentioned issue with the particles being trapped inside. I fed it back into the POP simulation.
With the simulation well behaved I tweaked some things from before and added a couple new ones to make them behave a little different to finally address the last item on my list.
First thing I added was a POP Wrangle with the following line of VEX to adjust the mass of the particles:
@mass = fit(rand(@id),0 ,1 , 1, 5);
Then I added this additional line to dampen the velocity a little bit by random particle ID:
@v *= fit(rand(@id),0,1,0.985,1);
And with this I addressed the top 3 priorities under my responsibility. With that being said, I’d like to mention that I addressed a couple of extra things as well. One that really stood out to me during our last presentation to our mentors was that the culling out of the debris was misaligned. I fixed this by adding some padding to the culling. Easy fix.
Another thing that was giving Sarah some problems in Maya was that the caches of effects I gave her were not aligning properly. She had no reference to force align them in the scene. So we came up with this super clever solution : Put some reference cubes under the origin plane (well hidden from the camera) and export them with all the geometry caches out of Houdini. This would provide a visual cue in order to make the placement easier when misaligned.
Ok, and with this I’ve made my part to present a super kick-ass project on Monday. At 98% done. At least. Maybe a 100%? Maybe.
With this super deep reflection I conclude this ridiculously long post about my latest push to wrestle this to completion. It will be the opening footage of my reel once it’s done, for sure. Until next post!