将多个模型上传到Sketchfab

0 投票
1 回答
731 浏览
提问于 2025-04-20 04:11

下面是一段用Blender的Python写的代码

import bpy
import os
import subprocess
import time
bpy.data.materials["Material"].use_face_texture = True
customer_id = "john33"
image1 = "orangeskin.jpg" # define image 1 from folder
imagepath1 = "C:\\Users\\mrryan\\Desktop\\models\\materialsjpeg\\" 
image2 = "elec.jpg"
imagepath2 = "C:\\Users\\mrryan\\Desktop\\models\\materialsjpeg\\" 

#Step 1 go to Edit Mode
bpy.ops.object.editmode_toggle()

#step 2 insert image in the Image Editor
bpy.context.area.type = 'IMAGE_EDITOR'
bpy.ops.uv.smart_project()
bpy.ops.image.open(filepath = image1, directory= imagepath1 , 
files=[{"name":image1, "name":image1}])

#Step 3 back to Object Mode TRY AND CHANGE TITLE TO `CUSTOMER_ID AND FILE`
bpy.ops.object.editmode_toggle()
bpy.data.window_managers["WinMan"].sketchfab.title = "orangetube"



#Step 4 save new.blend   
filepath = os.path.join(r"C:\Users\mrryan\Desktop", customer_id + "orangytube.blend")
bpy.ops.wm.save_as_mainfile(filepath = filepath)
toggleedit = bpy.ops.object.editmode_toggle()
#here is the problem!!!!
subprocess.call(["bpy.ops.export.sketchfab()"], shell = True)



#new texture
#Step 1 go to Edit Mode


#step 2 insert image in the Image Editor
bpy.context.area.type = 'IMAGE_EDITOR'

bpy.ops.image.open(filepath= image2, directory= imagepath2, 
files= [{"name":image2,"name":image2}])    
bpy.ops.uv.smart_project()

#Step 3 back to Object Mode
bpy.ops.object.editmode_toggle()
bpy.data.window_managers["WinMan"].sketchfab.title = "elec-tube"
#Step 4 save new.blend
filepath = os.path.join(r"C:\Users\mrryan\Desktop", customer_id + "elec-tube.blend")
bpy.ops.wm.save_as_mainfile(filepath = filepath)
bpy.ops.export.sketchfab()

这个代码的目的是想通过编程的方式,改变当前选中的物体(这个物体是组合的,但还没有和其他物体合并),让它有不同的材质,改变形状等等。每一个单独的模型组合都会单独上传到Sketchfab,并保存为一个Blender文件。

目前我遇到的问题是,在上传的时候,脚本没有等到第一次上传完成就开始下一步。这就导致出现一个错误提示,让我等当前的上传完成,结果只上传了一个模型。我尝试过使用subprocess.Popen,但没有成功。可能是返回值不对?我该怎么让脚本先上传第一个模型,等上传完成后再继续调整,然后再上传第二个模型呢?

1 个回答

0

我在Sketchfab工作,但对Blender脚本不太熟悉。

现在的问题是,Sketchfab的Blender导出工具使用了一个线程来上传,这意味着在后台还有一个线程在运行,而子进程会返回。

我会尝试用一个新的线程来启动 bpy.ops.export.sketchfab(),然后使用 join(),而不是仅仅使用子进程。

以下资源可能会对你有帮助:

告诉我们结果如何!

撰写回答