我正在为自定义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上进行测试,但是我希望脚本在此之前完成。
谢谢。