Image pixel, sélection par couleur des objets Pixels

Ici on parle des scripts

Modérateurs : frez, Yadoob, stilobique, Matpi, ModSquad

Image pixel, sélection par couleur des objets Pixels

Message par Albun » 29 Août 2018, 14:21

Bonjour,

c'est dans un contexte artistique que je tente de résoudre un pb à propos d'image-pixel.
J'ai trouvé deux script intéressant à ce propos, mais la méthode pour aboutir au résultat souhaité me manque.
L'utilisation se fait avec une image de 8x8 pixel, à éditer dans le panneau texture.

Dans le premier script, les pixel sont mis en objet avec chacun leur couleurs (par object.color), mais sous un Matériel unique.
>>> bpy.context.object.color[:]
(0.9529412388801575, 0.9529412388801575, 0.9529412388801575, 1.0)

L'utilisation se fait avec une image de 8x8 pixel, à éditer dans le panneau texture.
Code : Tout sélectionner
import bpy

D = bpy.data

# Specify your image here, open it inside Blender Image Editor texture panel
image_file = 'tiny_8x8.png'
img = D.images[image_file]
pixels = list(img.pixels)
grouped_list = [pixels[ipx:ipx+4] for ipx in range(0, len(pixels), 4)]

# Get width and height of image (in pixel)
w = width = img.size[0]
h = height = img.size[1]
print("------LENGTH------")
print( len(img.pixels)//4)
print("------PIXEL------")
print(pixels)
print("---GROUPED-PIXEL---")
print(len(grouped_list))

# Create LIST of GRID XY value
rowColList=[]
for i in range(height):
    for j in range(width):
      rowColList.append(i)
      rowColList.append(j)

# SPLIT the LIST of XY
origList = rowColList
splitList = [origList[i:i+2] for i in range(0,len(origList),2)]

# Create a single material that respect Object Color
mat = bpy.data.materials.new('PixelObjectColorMat')
mat.use_object_color = True

for number in range(len(grouped_list)):
    # Separate RGBA into each own variables
    r = grouped_list[number][0]
    g = grouped_list[number][1]
    b = grouped_list[number][2]
    a = grouped_list[number][3]
   
    # Separate XY coordinate
    x=splitList[number][0]
    y=splitList[number][1]
   
    # Create cube at location XY
    bpy.ops.mesh.primitive_cube_add(location=(x-width/2, y-width/2, 0))
   
    selectedObject = bpy.context.selected_objects
    mesh = selectedObject[0]
    mesh.name = 'pixelcube.%s' % number
    mesh.scale = 0.5, 0.5, 0.05
   
    # Keep list of our mesh for further processing, this is one big array
    #pixelCubeObjects.append(mesh)
    # bpy.data.objects[pixel'cube.1022']
   
    # Apply our special Material
    bpy.context.object.data.materials.append(mat)
   
    # Assign RGBA color to Object Color
    mesh.color = r,g,b,a
       
    # Print the chatter progress
    print ('PixelCube {number} created at:'.format(number=number), x, y, ', with RGB color', r, g, b)



Le second script est une méthode pour sélectionner les objets par matériel (par diffuse_color).

Code : Tout sélectionner

import bpy

col = bpy.context.object.data.materials[0].diffuse_color

mess = [o for o in bpy.context.scene.objects if o.type == 'MESH']

for obj in mess:
    list = []
    for mat in obj.data.materials:
        try: list.append(mat.diffuse_color)
        except: pass
    obj.select = col in list
   


Ce qui m'intéresse c'est de pouvoir sélectionner par couleur les objets Pixels, et les joindre, afin de changer leur matériel, ou leur couleur diffuse par exemple.
Ainsi je souhaiterais connaître votre approche pour arriver à mes fins sur ces bases de script, mon approche étant :

Insérer dans le premier script la création de couleur par objet, au lieu de matérial unique, mais comment ?


Merci pour votre intérêt porté à ce message

Albun
Albun
 
Message(s) : 2
Inscription : 29 Août 2018, 13:56

Re: Image pixel, sélection par couleur des objets Pixels

Message par pistiwique » 02 Sep 2018, 15:02

Yop.
En gros, si je capte bien, tu voudrais que les objets pixel ayants la même couleur partagent le même matériau de façon à ce que quand tu édites la couleur, ça l'édite pour tous c'est ça ?
Avatar de l’utilisateur
pistiwique
 
Message(s) : 590
Inscription : 10 Août 2014, 10:35
Localisation : le sud ou il fait trop chaud

Re: Image pixel, sélection par couleur des objets Pixels

Message par Albun » 02 Sep 2018, 22:23

Bonjour,

Oui, et en partant de ce principe, aussi pouvoir joindre les objets par script.
Albun
 
Message(s) : 2
Inscription : 29 Août 2018, 13:56


Retour vers Scripts - Python - OSL

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 3 invité(s)