Okay, here is what I would do:
Using node wrangler, I would preview a greater than node to figure out the distances (minimum should be just outside camera in case result of power curve becomes visible), then plug them in as shown.
Note that I have a stepfunctions node group that makes this easy for me to do without even having to think about the maths involved. But the values, subtract nodes, value driver and divide nodes are exactly what the linstep does; map the range 0.08 to 1.53 to a manageable 0-1 in s linear fashion. Think of it as a normalize but you have to feed it the limits. After divide I just apply a power curve to control the shape of the curve until you get the result you want. From there just assign the roughness values you want into the colors of an RGB mixer (we don’t have a builtin float mixer).
That’s distance based though. I think I would actually prefer facing angle instead to drive the roughness, and would require less mess, and probably produce kind of a similar result depending on how you shape the facing angle after reading it.