Just purchased the book and loving the it so far.
On page 85 of the book you describe the roughness map as:
These maps are greyscaled textures, Where the color black represents extremely rough surfaces, and the color white represents extremely smooth surfaces.
In most games engines and from my experience, the roughness map reads white (1.0) as rough and black (0) as smooth. Glossiness maps are the opposite, white (1.0) smooth and black (0) as rough. You invert one or the other depending on the application’s workflow.
Not sure if it’s a mistake but is SceneKit reading these maps differently where black (0) is rough and and white (1.0) smooth as described in the book?
Erwin