Some of those attribs such as shininess could be passed as vertex attributes, then you don't need to split the mesh based upon changes.
But it should be enough to just add them to the hash function. I actually meant to add them, I just never got that far :p