Future Xoliulshader support

I keep getting reports about XoliulShader 2 not work properly in max 2013 and Max 2014. This is a known issue. In short, this is the response:

Autodesk has completely broken shading in Max 2013 and 2014. I can not and will not fix this. You should go back to Max 2012 if you want the optimal XS2 experience.

Now some technical details for those who wonder.
Autodesk has been working on their own Viewport Display Driver to replace the (admittedly aging) DirectX9 renderer. This new Nitrous driver is their main focus, and has broken support for my custom shader.

Autodesk’s focus on Nitrous has resulted in bugs being introduced in DirectX9 for Max 2013 which are of yet unfixed for 2014. I have informed the Product Manager for 3DS Max, Frank Delise, he acknowledged my reply and would pass it on, yet no fix has happened.

The problem specifically is that tangent data is no longer passed to shaders by the application in DirectX9 mode. When displaying the tangent data as color, this image by Nico Ulbricht shows the problem (same debug shader in both versions of Max):

As is clearly visible, Tangent data is returned as a constant for the entire model. This results in incorrect shading.

Now, the worst part about all of this is that it does not just break external shader support; the problem is also visible when using the standard, built in “hardware display” shaders, a core feature of Max, created by Autodesk themselves. I can only guess that DirectX9 development has completely taken a backseat these days…

Custom shaders do seem to work to some degree in Max 2014, I will investigate this and see what is possible. For now, my shader does not work properly with it.

Cougar Realtime

Been spending a lot of time creating realtime images, this week (as always). I put my Cougar into UDK and set up some materials for it. I think it looks so good that I should just share it up on my blog here. This image was created at 6144 x 3456 pixels with Unreal’s “tiledshot” command. And that only took 2 seconds to render.Cougar_poster_01_1440

I’m looking forward to the day realtime rendering becomes the standard.

Vertex Blending Snow

Due to an ongoing thread at the Polycount boards about the snow and ice of Uncharted 2, I replicated Paul Greveson aka MoP’s vertex blending material in Unreal.

This is my result:

Snowblends

The tank tracks are another type of blend, this one’s about the snow on the ground.

I was asked to post my node layout on my blog, so here goes:

vertexsnow001

The base mask for snow coverage is calculated by using the Red vertex color channel (you can easily paint onto one channel only in UDK, great feature!) and a heightmap. These are combined together to create a transition effect with the heightmap, where the vertexcolors fade out. Clamped at the end to prevent extreme values, just for safety.

vertexsnow002

Using the Green vertex channel, we calculate a varying number for the mask’s hardness. 20 is the ceiling value, a 1 is added to prevent powering to 0 (bad). The invert on the vertex color is just to make sure the default value is hard (default vertex color is 1,1,1,1).

vertexsnow003

Both groups are combined by powering the raw mask to the hardness value, adjusting the contrast. Clamped for safety, though technically not necessary since we’re only powering a value of max 1to20,resulting in a  1 anyway.

vertexsnow004

The mask is used on 3 LinearInteroplate nodes, to blend between snow and non-snow diffuse, spec and normals. Since I had the heightmap anyway, I just used it for a quick parallax effect on the diffuse (I should apply it to normals as well…).

vertexsnow005

Total material. Nothing too complex, only 63 instructions which really isn’t expensive.

I recommend doing this in UDK only, since painting vertexcolors is incredibly easy there.