I created a script to help with this:
import bpy
import bmesh
import random
def view_materials():
ob = bpy.context.object
assert ob is not None and ob.type == 'MESH', "active object invalid, select a mesh"
materials = ob.data.materials.items()
bpy.ops.object.mode_set(mode='EDIT')
mesh = bmesh.from_edit_mesh(ob.data)
indexes = [[face.index, face.material_index] for face in mesh.faces]
material_indexes = []
for index in indexes:
tuple = (index[0], materials[index[1]])
print(tuple)
material_indexes.append(tuple)
bpy.ops.object.mode_set(mode='OBJECT')
def make_random():
ob = bpy.context.object
assert ob is not None and ob.type == 'MESH', "active object invalid, select a mesh"
materials = ob.data.materials.items()
bpy.ops.object.mode_set(mode='EDIT')
mesh = bmesh.from_edit_mesh(ob.data)
for face in mesh.faces:
face.material_index = random.randrange (0, len(materials),1)
bpy.ops.object.mode_set(mode='OBJECT')
print('before')
view_materials()
print('making random')
make_random()
print('after')
view_materials()
Results:
before
(0, ('Material', bpy.data.materials['Material']))
(1, ('Material', bpy.data.materials['Material']))
(2, ('Material', bpy.data.materials['Material']))
(3, ('Material', bpy.data.materials['Material']))
(4, ('Material', bpy.data.materials['Material']))
(5, ('Material', bpy.data.materials['Material']))
making random
after
(0, ('Material.003', bpy.data.materials['Material.003']))
(1, ('Material', bpy.data.materials['Material']))
(2, ('Material.003', bpy.data.materials['Material.003']))
(3, ('Material', bpy.data.materials['Material']))
(4, ('Material.001', bpy.data.materials['Material.001']))
(5, ('Material.002', bpy.data.materials['Material.002']))
Instructions for use:
Create your color pallet by creating as many materials as you want in the materials.
Select your object, then run this script. It will randomly choose a selection from the color pallet and put it on your cube or whatever.