New Material For Shiny Objects

If anyone else wants to try and understand what they are asking for, it appears to be a very odd way to make things look shiny, and does not support PBR as it only works off the color map and diffuse lighting. It effectively shifts the midtones a couple times to get dark bands on a surface, which coincidentally look similar to a reflection. Here is my recreation of it on a smooth mesh:

Quite like velvet, I think. But this method seems very “hardcoded”, and a bunch of numbers are thrown around without any context. I think the features needed to recreate this effect should be broken down into multiple blocks, instead of it being one material that completely disobeys the laws of physics.

Effect re-creation

Here is the base shading model, a clamped Lambertian diffuse term multiplied with the texture color…

As the videos suggest, the diffuse term is a value ranging from 0 - 1 representing how much light is reaching a certain pixel.

In the first step, they say that 0.5 should be subtracted from the diffuse term, the absolute value should be taken, and then it should be multiplied by 2. This effectively makes the shading midpoint darker and the shading extremes brighter. Since the light source is somewhere off the top-right of the screen, the middle of the claw becomes darker and the sides facing further away and further toward the light are the brightest. At some angles, it’s actually a lot like the Fresnel effect where you get more light contribution at “grazing” angles.

They then say to put it through the formula twice more, doubling the banding pattern:

1 Iteration:

3 Iterations:

And then they bring up this curve:

Hmm, what do you think they are going to describe next? The function for it? It isn’t something easy like x^2 or x^3, so what is it?

No, of course they wouldn’t. They go on to explain how you can do the homework your teacher gave to try and find the Y-value for a given X-value by looking at a graph.

I think I got close enough at x^3.5, but I was actually going to post this without the final result because I thought it would need to be more precise. Raising the diffuse term to that power as video #3 at 26 seconds says, however, results in this:

Sure, [they’ve] won, but at what cost? It’s not physically-based. It’s in my opinion, a little hacky. In the way it’s described, there’s no artistic control over it. Why not just use SurfaceAppearance to make a surface shiny? You should already be able get this same “stretchy reflection” effect in the engine:

, which, to my eyes, seems a lot like what this is trying to imitate.

7 Likes