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

2024-10-02 10:29:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为我的自定义OBJ变量编写一个Blender导出脚本。我有一个系统,其中我导出顶点颜色的方式非常类似于法线和UV。我突然想到,同样的系统也可以用于导出装备的骨骼ID和权重,只需将所有权重乘以0.5,这样它们就永远不会是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_对象,此处提供完整文件:https://github.com/gordonfreeman424/GeklminRender_OBJ_Exporter/blob/master/export_obj.py

^{pr2}$

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

在哪里可以找到顶点组列表?在哪里可以找到权重?我需要能把它分解成ID和重量。如果我能得到一个顶点组的列表和相应的权重,那么一切都会好的。

我做了一些研究,似乎顶点组的信息可能在其他地方bpy.数据等级制度。考虑到搅拌机已经在一定程度上改变了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上使用Blender2.79来测试一切。搅拌机2.79是我的目标。我最终将在Windows上进行测试,但我希望脚本在那之前完成。

谢谢。


Tags: 文件脚本idobjdata系统权重bpy

热门问题