AcademySoftwareFoundation / OpenPBR

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

Proposal: dual specular roughness sliders with mix #210

Open sharktacos opened 1 month ago

sharktacos commented 1 month ago

Throwing out for discussion the idea of having two specular roughness sliders mixed by a lerp (typically using a mask texture for the mix), similar to Megascans materials in Unreal.

This can of course be achieved for instance with a ND_mix_float in materialX, but it could be nice to have it built into the material since it is so commonly used by lookdev artists. Thought I'd bring it up for possible consideration.

portsmouth commented 1 month ago

Do you mean there should be two separate specular lobes with independent roughness, with a mix weight (called "dual-specular" sometimes)? If so that's being considered, but it would be for a later release as it alters the BSDF implementation somewhat.

Also, what about the anisotropy -- would that be separate or coupled?

sharktacos commented 1 month ago

Yes, that is what I was referring to. I was actually imagining a simple linear interpolation mix between two roughness values modulated by a mask that remaps black and white in the mask to the two roughness values, rather than an additional specular lobe. What would be the advantage of having a second specular lobe that changes the BSDF, as opposed to a simple mix for the roughness values within one specular lobe? How would this be differentiated from the coat?

In terms of GUI, one possibility is for it to work similarly to metalness so that the mix defaults to 0 meaning only roughness1 affects the material with roughness2 greyed out until the mix is raised above 0.

Regarding the anisotropy, my thinking is that the artistic purpose is to have subtle variation in the roughness, so I would expect the anisotropy to be coupled. If I wanted to get variation in the anisotropy I would use a tangent map.