Fixing Tessellation Seams in UDK

Tessellation in UDK

Tessellation is a great way to add organic detail to a mesh.
However even with matching UVs and pixel perfect line-up in textures seams will occur across meshes.


And here’s why the problem occurs and how to fix it.

Expand the models and have the displacement map taper off towards the end. The tesselated geometry will intersect creating a more natural looking seam. CAUTION!!!The geometry will lightmap based on the un-tessellated geometry which will produce some lightmap errors on the tessellated geometry. But at least there’s no seams 🙂


Using Cloth Dynamics to Create Complex Meshes

I needed to fill up an area with large piles of garbage for the project I am currently working on.
My first impulse was to model a couple of different bags and start piling them up into larger piles.
It wasn’t before long that the triangle count shot up exponentially and the drawcalls went through the roof even with batching enabled. I had to find a way to make them all one shape and eliminate any excess geometry that wasn’t needed.

The Idea
I decided to try and use Mayas nCloth functionality to generate a low-poly mesh for the piles.
This technique should work for any organic form where you have a pileup of multiple shapes.
In this case its garbage piles but it could be a rock slide etc.
First I created the pile out of the individual meshes adding variation through differences in hue, scale and rotation. I even enabled soft selection and helped some areas conform to the shape I had in mind.
Then I created a fairly dense plane and positioned it above the area.
I converted the pile to a collider and the plane into a cloth object then ran the simulation until the cloth had covered the pile. From there I retopologized and reduced the cloth, then transferred the normal information from the high poly pile. In the end I transferred the diffuse information to a new texture and applied that to the low poly pile.

A problem I encountered when simulating the cloth was that the points that made contact first would stretch and slide across the object. You need a cloth preset that is flexible enough to deform and slide into the creases but not stretchy enough that it loses its shape again.
I ended up starting with the burlap preset and then tweaking its Friction to 1000, Stickiness to 10000 and the stretch resistance to 0.01.
That way the points that have made contact will stay fixed while anywhere that there still is a gap, the mesh will stretch to fill them out.

Bellow you can find a timelapse of the stages of the process.

Tutorial – FG for Animation

Recently I had to optimize rendering for a large project featuring several animated characters.
The project used final gather to create bounce lights.
Initially I thought that baking final gather at a set number of frames with the ‘Optimize for Animations’ option turned on would be sufficient.
Render Settings > mental ray > Indirect Lighting > Final Gathering Tracing > Optimize for Animations.

I couldn’t have been more wrong, the characters moved in and out of shadows and the flickering was awful.

Enter the solution: Animation Snapshots!
Animation Snapshots will create a duplicate of your model at set ranges, so if you have a sequence of a hundred frames and create an animation snapshot for frames 1-10-20 etc and bake final gather once, you will have successfully baked 11 out of 100 positions in one cycle.
Repeat the steps as necessary for 2-11-21 etc until you have all the positions of your character on you FG map.

The reason why I chose steps of ten for this example largely depends on the speed of your animation.
You will want the snapshot to not create interpenetrating models or even models that are too close because then FG would not catch bounce light and the character would still be dark for certain frames. This means if you’re animating the Flash go ahead and set your snapshot to single frames, but if your shot is a character monologue a bigger distance in key frames might be required.

Tutorial – mib_color_mix_node

In this tutorial I will introduce one of my favorite nodes in the Mental Ray tool set, the mib_color_mix node.
Often overlooked, this node will transform any material into a powerful multi-texture solution.

So let’s begin. You can find the mib_color_mix in the Mental Ray section under the Data Conversion sub-group.

You can use a mib_color_mix in any channel of any Mental Ray shader.

You will notice that the mib_color_mix is broken up into 4 sections.
From top to bottom these are, a field called Num, Mode 1-7, Weight 1-7 and Color 1-7 + Color Base.
The Color section is where you will plug in any visible maps you wish to use.
The Weight section will house your alpha maps.
Mode will determine how the layers will blend together and Num will tell the Shader how many channels to calculate.

Each layer that you add after the Color Base, will be a combination of its Color Layer, Weight and Mode settings.
So, Color 0, Weight 0 and Mode 0 will belong together and so on.

In the image below, I added a breakdown on how I used the mib_color_mix to create a multi-layered texture that
significantly reduced my memory consumption while at the same time increasing the available detail.

Click on image to view in full resolution.

Click on image to view in full resolution.

Now that we understand how the shader works, let’s take a look at how the settings affect the overall look of a texture.

Below, I added another example on how the node can be used.
The project called for a waterfall and a dynamic simulation was not a realistic option due to time constraints.
With a single texture and an mib_color_mix I was able to take a more game-engine like approach.
The same texture was overlayed four times with different UV repeat rates that were additionally animated.
Below, you can find the results of the waterfall effect.