Generate UV map from dupli on converted particles

Cycles can colorize particles from the UV texture of the emitter, but once you hit “Convert” to convert your particles to objects, they lose their color, which is normal since the converted objects share the same mesh data so they all have the same UV map.

But isn’t there a way to convert particles to single user objects and generate their UVs accordingly so that they keep the UVs they inherited from emitter ?

The only way I know will work (which doesn’t mean there isn’t an easier, better way!) is too join all of the converted duplis, unwrap them as one object (best if you marked seams on the single object before converting) adding an image texture to the joined object, then baking the combined texture from the original object onto the joined object. You can, if you want, separate by parts afterwards.

Good idea but the result is different from the original particle colors.
However I found a perfectly accurate technique to get back the colors and generate the most optimized texture (1 pixel per particle), but for now I just know how to optimize it on single-face particle instances:

  • Convert the particle system (but don’t remove the original afterwards)
  • make the generated objects and data single users
  • join them (if you skipped the previous step they will not keep their position)
  • UV unwrap in “Lightmap Pack” mode, set a big margin (like 0.4), a high quality
  • move and snap some UV faces until you have a perfect grid like this :

  • on the non converted particle system, change the particle object to a sphere
  • scale down the spheres so they don’t intersect
  • apply an emission shader on the sphere particles and plug only the color you want to bake to the emission node
  • duplicate the previously converted particles
  • on the copy, scale down individually the particles (single faces) so that they fit inside the spheres (depending on the original particle instance, you may have to move the sphere in edit mode to have the small faces fit in the center properly)
  • change the material of the small faces to a 100% glossy material with 0 roughness (the default color is 0.8, change it to 1)
  • add a Mask modifier to the particle emitter to mask out the emitter mesh and keep only its particles
  • Select the small faces and bake the glossy reflection with a big margin (like 32)
  • Your baked image should look like a tiny bitmap that you can scale down until each color takes only one pixel, like this one I just made :

  • use the baked image on the mesh you will use (the faces you didn’t scale down)
  • set the interpolation mode of the image to “Closest”
  • Scale down the UV faces of the mesh individually

I checked and the colors match the original particles perfectly.