使用Python从Blender 2.8导出每面纹理索引
我正试图修复我的旧型号出口商从前2.8搅拌机为目前的一个。 我已不再阅读“uv_纹理”,因此我的旧功能不起作用:使用Python从Blender 2.8导出每面纹理索引,python,blender,Python,Blender,我正试图修复我的旧型号出口商从前2.8搅拌机为目前的一个。 我已不再阅读“uv_纹理”,因此我的旧功能不起作用: def e_texfaceindex(out,o): # texture index per face (quad/tri) if len(o.uv_textures) == 0: return n = len(o.uv_textures[0].data.values()) out.write("\ntexindexnum " + str(n)
def e_texfaceindex(out,o): # texture index per face (quad/tri)
if len(o.uv_textures) == 0: return
n = len(o.uv_textures[0].data.values())
out.write("\ntexindexnum " + str(n) + "\n")
texarr = [] # textures' names
for t in bpy.data.images:
if t.type == 'IMAGE':
texarr.append(t.name)
ni = 0
for tf in o.uv_textures[0].data.values(): # find texture for every face
texindex = 0
for n in texarr:
# error, polygon has no texture
if(tf.image == None):
out.write("0 ") #ok?
break
else:
if(tf.image.name == n):
out.write(str(texindex) + " ")
break
texindex = texindex+1
ni=ni+1
if ni==32 : # make new line for every 32 elem
ni = 0
out.write("\n")
out.write("\n")
但我可以通过以下方法获得材料指数:
def e_materialndices(out,o): # per face mat indices
out.write("\nmaterialindexnum " + str(len(o.polygons)) + "\n")
c = 0
for face in o.polygons:
out.write(str(face.material_index) + " ")
c=c+1
if(c==32):
out.write("\n")
out.write("\n")
然后这个剧本给了我一些希望:
import bpy
ms = bpy.data.materials
for m in ms:
for n in m.node_tree.nodes:
print(n.name)
打印出“材质输出”、“原则BSDF”、“图像纹理”。所以我也许可以用“图像纹理”节点找到材质的纹理名称,但我被困在这里了,我不知道如何得到它
也许有更简单的方法可以获取每一张脸的纹理信息,如果有任何帮助,我们将不胜感激。此方法有效:[code]def e_texfaceindex(out,o):out.write(“\ntexindexnum”+str(len(o.polygons))+“\n”)c=0表示o.polygons中的面:mt=bpy.data.materials[face.material_index]#ze poly tn的材质=mt.node_tree.nodes.get('Image Texture')#magix texindex=bpy.data.images.find(tn.Image.name)#texindex如果texindex起作用,纹理索引:[code]def e_texfaceindex(out,o):out.write(“\ntexindexnum”+str(len(o.polygons))+“\n”)c=0表示o.polygons中的面:mt=bpy.data.materials[face.material#index]#ze poly的材质tn=mt.node#tree.nodes.get('Image Texture')#magix texindex=bpy.data.images.find(tn.Image.name)#纹理索引如果texindex