AcademySoftwareFoundation / OpenPBR

Specification and reference implementation for the OpenPBR Surface shading model
Apache License 2.0
459 stars 18 forks source link

Give an explicit suggested formula for fuzz base-roughening #226

Open portsmouth opened 2 months ago

portsmouth commented 2 months ago

We describe in the spec a recommendation for implementing the roughening that a coat will generate in the underlying base lobes.

image

A similar effect should occur for fuzz also though. In a discussion with Tizian, the author of the fuzz model we use, he noted:

..as soon as you start comparing with proper volumetric layering you'll start to see all sorts of differences. I remember running some of these and the roughening of the base layer was very significant.

So physically this roughening should occur.

Lee Griggs has also noted that without this roughening, the look of fuzz on top of a glossy base is rather artificial.

image

Lee: I thought I would have a go at rendering a dusty car using fuzz but am struggling to get something convincing-looking. I was expecting the fuzz layer to sit on top of the coat layer but, to me, it looks like the dust is glossy. I was hoping to avoid extra shading tricks to add roughness to the dust layer. Am I using fuzz correctly here?

Jamie: That is admittedly a defect of the current fuzz model, which doesn’t explicitly account for the roughening of the base —I.e. the very glossy coat appearance under the fuzz is a bit unrealistic. We should probably develop an improved model that deals with that (and in the meantime come up with some heuristic roughening to suggest).

It would be reasonable, at least as an initial implementation, to use the same formula as the coat roughening. Except in this case, the roughening would be applied to the coat lobe as well as the specular lobes. (And in addition to the roughening of the specular lobes due to the coat).   We should ideally look into developing a more accurate model of the roughening specifically for the fuzz. This would require some Monte Carlo simulation using the microflake fuzz reference simulation from Zeltner et al. A similar investigation could be done for the coat case too (in that case simulating transmission through a rough microfacet coat).