如何获取每个顶点的网格的顶点组和权重(Blender导出脚本)?

时间:2019-05-06 00:42:42

标签: python blender

我正在为自定义OBJ变体编写Blender Export脚本。我有一个系统,可以以与法线和UV非常相似的方式导出“顶点颜色”。令我吃惊的是,只需将所有权重乘以0.5,就可以将其导出为骨骼,并使用相同的系统导出骨骼ID和权重,从而永远不会为1。

在我编写BVH文件解析器之后,将骨骼动画添加到渲染引擎变得非常简单。

#New line type:
#Red:
vc 1 0 0 
#Green
vc 0 1 0

#Extension to f lines:
f v/vt/vn/vc
f v//vn/vc
f v/vt//vc
f v///vc

#Proposal
vc BoneID1 + (BoneWeight1*0.5) BoneID2 + (BoneWeight2*0.5) BoneID3 + (BoneWeight3*0.5)

#This vertex is 80% weighted by bone 2 and 20% weighted by bone 1
vc 1.1 2.4 0.0

这是我导出vc行的方式(上下文:从默认的Blender OBJ Exporter修改,export_obj.py,完整文件位于此处:https://github.com/gordonfreeman424/GeklminRender_OBJ_Exporter/blob/master/export_obj.py

                        if hascolors:
                            co_key = co_val = None
                            colors_to_idx = {}
                            co_get = colors_to_idx.get
                            loops_to_colors = [0] * len(loops)
                            for f, f_index in face_index_pairs:
                                for l_idx in f.loop_indices:
                                    co_key = colveckey3d(me_vertcolors[l_idx].color)
                                    co_val = co_get(co_key)
                                    if co_val is None:
                                        co_val = colors_to_idx[co_key] = vc_unique_count
                                        fw('vc %.4f %.4f %.4f\n' % co_key)
                                        vc_unique_count += 1
                                    loops_to_colors[l_idx] = co_val
                            del colors_to_idx, co_get, co_key, co_val

但是,当我查看dir(bpy.data.meshes ['object_name'])时,找不到与顶点组有关的任何东西。

在哪里可以找到顶点组列表,在哪里可以找到权重?我需要能够将其分解为ID和权重。如果我可以获得顶点组列表和相应的权重,那么一切都会很好。

我已经做过一些研究,看来顶点组信息可能在bpy.data层次结构中的其他位置。考虑到Blender在某种程度上已经转换了我在脚本中使用的bpy.data.meshes []网格,因此这可能会更加困难。

我希望bpy.data.meshes []网格具有某些属性,该属性可以为我提供每个顶点的顶点组权重信息。

(我已经显示了代码)

我希望最终生成的文件看起来像这样:

#GKBONE "Head" 1
#GKBONE "My Leg" 2
#GKBONE "Foot" 3

#[...]
vc 1.1 2.3 3.1
vc 1.5 0.0 0.0
vc 0.0 1.5 0.0
#[...]
f 1/2/5/1 2/3/1/2 8/9/7/3

我正在Debian上使用Blender 2.79来测试所有内容。 Blender 2.79是我的目标。我最终将在Windows上进行测试,但是我希望脚本在此之前完成。

谢谢。

0 个答案:

没有答案