Python: Wie speichere ich das UV-Layout mit einer bestimmten Hintergrundfarbe?
select_obj(some_obj)
bpy.ops.object.mode_set(mode="EDIT")
bpy.ops.mesh.select_all(action='TOGGLE')
bpy.ops.mesh.select_all(action='TOGGLE')
# how to set background color of this image?
bpy.ops.uv.export_layout(filepath='uv_layout.png', size=(1024, 1024), opacity=1)
bpy.ops.object.mode_set(mode="OBJECT")
bpy.ops.object.select_all(action='TOGGLE')
Das Bild sieht folgendermaßen aus (es hat einen transparenten Hintergrund):
Ich möchte jedoch einen farbigen Hintergrund wie diesen erzielen:
Ich habe versucht, PILdie Bildmanipulation mit diesem Modul zu importieren und durchzuführen, aber es scheint, als wäre es nicht in Blender enthalten.
Antworten
Es ist nicht so schwer, die vom Modul selbst bereitgestellte Funktion zu überschreiben ( sie befindet sich immer noch im Python-Bereich ):
import io_mesh_uv_layout
from io_mesh_uv_layout.export_uv_png import *
def new_export(filepath, face_data, colors, width, height, opacity):
offscreen = gpu.types.GPUOffScreen(width, height)
offscreen.bind()
try:
bgl.glClearColor(0.0, 1.0, 0.0, 0.9) # Here, a green, 0.9 alpha background
bgl.glClear(bgl.GL_COLOR_BUFFER_BIT)
draw_image(face_data, opacity)
pixel_data = get_pixel_data_from_current_back_buffer(width, height)
save_pixels(filepath, pixel_data, width, height)
finally:
offscreen.unbind()
offscreen.free()
io_mesh_uv_layout.export_uv_png.export = new_export # Directly overwrite it
In Ihrem Addon können Sie dem Benutzer einen Farbwähler (aus einer Color Float-Eigenschaft) bereitstellen. Und nachdem Sie den Wert aktualisiert haben, patchen Sie die ursprüngliche Exportfunktion im laufenden Betrieb. Es sollte keinen kniffligen Teil und überhaupt kein Leistungsproblem geben.
Eine komplexere Methode besteht darin, den UV-Layout-Export selbst zu ändern:
Was den Bediener selbst modifizieren muss, etwas knifflig, aber flexibler zu bedienen:
Wenn der schwarze Hintergrund gut genug ist, können Sie das erstellte Bild importieren und den Alphakanal entfernen.
select_obj(some_obj)
bpy.ops.object.mode_set(mode="EDIT")
bpy.ops.mesh.select_all(action='TOGGLE')
bpy.ops.mesh.select_all(action='TOGGLE')
# how to set background color of this image?
bpy.ops.uv.export_layout(filepath='uv_layout.png', size=(1024, 1024), opacity=1)
img = bpy.data.images.load("C:\\File\\Path\\Here\\uv_layout.png") #Import image. Remember to change filepath
img.alpha_mode = "NONE" #Ignore alpha channel
img.save() #Save the image
bpy.ops.object.mode_set(mode="OBJECT")
bpy.ops.object.select_all(action='TOGGLE')
Stellen Sie einfach sicher, dass Sie den Dateipfad so ändern, dass er auf Ihre Datei verweist.
Dies kann manuell im Bildeditor über das Dropdown-Menü Alpha erfolgen, indem Sie Keine auswählen. Das Alpha-Dropdown-Menü befindet sich auf der Registerkarte Bild. Die Sichtbarkeit der Bildregisterkarte kann durch Drücken von umgeschaltet werden n.