Randomizing rotation on Rivets

This is a bit of a peculiar problem here but i was hoping maybe someone could help me out. I’m modeling a PRR T1 locomotive, down to the frame and boiler as a highres model, and i was hoping to mix up the texture on the boiler’s rivets and staybolts. As you can see there’s a hell of a lot of them, and having them all have similar looking textures at first glance would look pretty crap

Anyway, i’ve got the rivets holding the sheets together down, by mapping two rivets and using Spin to duplicate them 104 times according to the blueprints but that means the tex coordinates are obviously identical

i tried fixing that by splitting to parts, origin to geometry for each piece and using randomize transformations to rotate randomly along Z axis, but the origin still has the world’s Z axis so instead of rotating the rivets nicely along their proper axis, it just turns into a wobbly mess and looks awful.

The only ways i can think of to get around it is to duplicate two rivets with proper transforms, duplicate and rotate around the boiler by 3.46 degrees 104 ties and then randomize transforms, but that’s a hell of a lot of work. The other way i can think of, which i don’t even know is possible is to somehow set up a group of rivet objects at origin and use an array/curve like system that samples from the pool of rivets and randomizes Z rotation to truely mix up the texture space, but like i said, i don’t even know if that’s possible and i can’t find anyone who’s done anything similar.

One way is to use a particle system and object/group duplication on that

From top:

  • Starting point and a rivet
  • Adding cuts, duplicating and separating added edge loops to their own object
  • Edge loops extruded to have faces, shrinkwrap modifier holds them on the surface of the main object. Particle hair added
  • Particles set to emit from faces, 1/face, use modifier stack, object duplication

Could also make multiple rivets with different offsets relative to their object origins and then group them. With particle system set to duplicate a group and have it pick random from the group, it should give slight offsets to each rivet. Won’t probably make much difference in a grand scale if the placement was eyeballed or not but might help if you use this on another occasion with close up shots.

The face strips could be rotated but if you use shrinkwrap to put them on the surface, would need to offset them. That is possible by using vertex groups and multiple shrinwrap modifiers. Another way is to have a separate face for each strip of rivets and scale the faces so small that the face between is close to the surface when all their vertices are snapped on it.