At least 3 ways to approach this.
- fully procedural
- fully textured
- mix procedural and texture.
My interests lie mainly with procedural. An approach involves literally stacking piles of noise textures ontop of eachother and masking out parts using other noise textures with large scale to get the patchy-ness. Then if it's too cloudy and wishy washy use a contrast node to get sharper edges.
As a starter get your head around a small setup like this
Really analyse what you like about the real-life roof top, what makes it pop for you. Write down the keywords, think about why those features are there and are they related to the surrounding architectural features? like drainage, seepage, repair work, shelter from the elements..
You can use the Position socket of the Geometry node, to push the Noise Texture along in space by a given Vector until it matches up with something that appeals to you.
Step 2, patchier!
RGB Curves node allows you to weave in and out of a colour gradient. I'm leaving the colours visible to show where they come from.
Step 3 details
mixing and masking,
Here the Color Ramp node is also used to flip colour ranges, to give the effect of dried up puddles of gunk with residue on the edges.
more noise layers.. Using the Vector Combine node lets you cycle through the 3d space of the node texture, and you will see many crazy shapes but occasionally a few features that seem to somehow fit with the geometry. If you have a lot of distortion going on in one section of the noise texture, shift the x,y,z until it gives more appealing visuals. There's no science to this, just experimentation.
So far all 4 or 5 noise textures get piped into one node (the Difference node) before it hits the shader. From here on it gets complex and you might start to experiment with node groups to keep the various layers separate (conceptually), and mix them together using large scale Noise textures to allow for big sections of one texture and more abrupt transitions to the output of a different node group.
Here I've gone back to creating a mask using a Noise Texture node, it shows how one might mix two colours as a function of Noise. In the example I picked flat RGB colours to show what effect the mixing has on blanket colours, but if you stick elaborate grungy "color ends points" in there it will start to approach what you are looking for. Making the mask is arguably easier to do manually, but keeping it procedural avoids the headache of raster resolution.
And here the many layered noise (converted to a Node Group with a colour output) is inserted as one of the colour sources. The other is still blue, but you can probably imagine that another Node group could be created to do the colouring of that section.
It's possible to get very creative with masking, and various Texture types to arrive at local features which seem to be caused by the architecture.
Keep masking out Textural features until you feel you could be spending your time doing something more productive :)
Hopefully this gives some ideas, it wasn't intended to be a tutorial. And this doesn't even get into the 3d aspect of texturing.. the gritty-ness of the surface, the bumpyness of certain parts, the faint depressions, the interuptions in materials. If a roof is done with two different batches of roofing there can be big colour differences.