0
$\begingroup$

I have a 3d small garden with 15 plants. Each plant have leaf objects. Formally they are just a leaf objects with different XYZ location/rotation/scale. Take a look

I want to get something similar to this image:

enter image description here

I need to make an RGB mask of my garden? How do I make it?

I'm thinking of creating a new materials and give them random coloring and then apply materials on my leaf objects, that would work too I suppose, but I believe there should be an easier and better way.

Here's my script:

for obj in [o for o in source_collection.objects if o.type == 'MESH']:
       for i in range(1):
           for obj in [o for o in source_collection.objects if o.type == 'MESH']:
               # get a copy of the object
               new_obj = duplicate( obj, destination_collection, False )
               # ** Make your random transforms here ** 
               RGBMask = bpy.data.materials.new("RGBMask")
               bpy.context.active_object.data.materials.append(RGBMask)
               bpy.data.materials["RGBMask"].diffuse_color = random(), random(), random(), random() 
               rotateX = round(uniform(-20,20), 2)
               rotateY = round(uniform(10,50), 2)
               rotateZ = randint(-760,760)
               scaleX = round(uniform(0.3,1), 2)
               scaleY = round(uniform(0.3,1), 2)
               scaleZ = round(uniform(0.3,1), 2)
               new_obj.scale = ( scaleX, scaleY, scaleZ )
               new_obj.rotation_euler = (radians(rotateX),radians(rotateY),radians(rotateZ))

It creates new material called RGBMask, but applies it for all of my objects, but I need to have each leaf have it's own color. I'm new to python and blender, so any help is highly appreciated

$\endgroup$
3
  • $\begingroup$ I believe cryptomatte is what you want: youtube.com/watch?v=Ml1Kic4VopA $\endgroup$ Commented Aug 9, 2019 at 12:03
  • $\begingroup$ @rjg it's very close to what I want, figuring out now how to use it. Thanks for the tip!!!! $\endgroup$
    – cxnt
    Commented Aug 9, 2019 at 12:42
  • $\begingroup$ You can use the vision_blender add-on for this. It crates segmentations masks for you when you render an image. $\endgroup$ Commented Sep 29, 2020 at 7:58

1 Answer 1

1
$\begingroup$

You can try with this solution: Create a segmentation picture with each object class rendered in different color ?. It worked for me.

Moreover, if you want sharp edges you can set render properties -> film -> filter size for eevee to 0.00.

$\endgroup$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .