Python: como salvar o layout UV com uma cor de fundo específica?
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')
A imagem tem esta aparência (tem um fundo transparente):
No entanto, desejo obter um fundo colorido como este:
Já tentei importar PILe fazer a manipulação de imagens com este módulo, mas parece que não está incluso no Blender.
Respostas
Não é tão difícil substituir a função fornecida pelo próprio módulo ( ela ainda está no escopo do Python ):
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
Em seu addon, você pode fornecer um seletor de cores (de uma propriedade de flutuação de cores) para o usuário. E depois de atualizar o valor, faça o patch da função de exportação original imediatamente. Não deve haver nenhuma parte complicada e nenhum problema de desempenho.
Um método mais complexo é modificar a própria exportação de layout uv:
Que precisa modificar o próprio operador, meio complicado, mas mais flexível de usar:
Se o fundo preto for bom o suficiente, você pode importar a imagem criada e remover o canal alfa.
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')
Apenas certifique-se de alterar o caminho do arquivo para apontar para o seu arquivo.
Isso pode ser feito manualmente no editor de imagens a partir do menu suspenso Alpha selecionando Nenhum. O menu suspenso Alpha está na guia Imagem. A visibilidade da guia de imagem pode ser alternada pressionando n.