makehuman结构

makehuman开源项目,项目源码在github上,相应的介绍在其主页makehumancommunity.com中

base.obj

.obj结构 v点信息 x,y,z

f 面信息

                                                                      Target结构 编号 点x,点y,点z                     

makehuman结构_第1张图片makehuman结构_第2张图片 

通过对基础base.obj的点的修改来进行调整模型(base.obj建立面,点信息)

data文件夹下包含了各种信息 年龄 大小,手臂长短相应的点的信息

在algos3d.py ->apply中

obj.coord[dstVerts] += self.data[srcVerts] * scale[None,:]

将base.obj中的点与.target中的点相加,进行对模型的变形,修改,

scale指示了修改的程序0-1之间 【0.5,0.5,0.5】只是取一半

对base.obj的读取

在mhmain.py的LoadHuman中加载base.obj 并将信息存储到human结构中,后期所有的改变都将通过human这个结构进行

对.target文件的读取

algos3d.py->_load的

_load_binary

_load_text

实现

有npz数据时读取npz

没有时用_load_text读取.target文件

_load_text

makehuman结构_第3张图片

verts中保存着要修改的点序列名

data中为修改的具体值

对模型的导出

对模型的pose的修改

target数据:更改基础模型的年龄,性别

base.obj:基础模型,面

alogs3d.py 加载使用npz或target模型和更新模型参数 年龄 大小 使用target的数据更改模型

algos3d.py _load

加截模型时,先尝试加载npz格式的模型(python结构的数据)或没有再加载.target格式的模型数据

mhmain.py

loadhuman

导入base.obj模型

导入骨骼 ; /data/rigs/default.mhske

使用的技术opencl

界面为 为 qt5

modifierslider.py 滑动调整年龄,高度等 为

events3d.py 事件函数

pose

动画

主函数makehuman.py

                  

主要结构:

1.通过对base.obj文件中的点的修改实现人物的成长,衰老,变化

2.数据在data 文件夹下的.target等文件中  (D:\makehuman-master\makehuman-master\makehuman\data\targets\macrodetails)

在algos3d.py中的,apply函数实现使用target的数据进行修改模型 

makehuman结构_第4张图片

alogos3d.py  _load_text(self, name):函数实现加载相应的target文件,加载点信息

makehuman结构_第5张图片

主流程介绍:

        vscode 加载项目makehuman

主函数为makehuman.py

通过wavefront.py加载base.obj文件

填充human结构

 mhmain.py loadHuman  加截模型信息到human中makehuman结构_第6张图片

通过wavefront.py writeobject 将human信息导出保存为obj

相应的模型与函数

modefierslider.py 滑动调整年龄,身高等参数时调用

为输出调试信息

注释:makehuman.py 

        def redirect_standard_streams()下的内容用pass代替

将模型导出为obj文件  wavefront.py

点信息f

面信息f

makehuman结构_第7张图片

makehuman 模型导入houdini进行成长

obj文件结构 v点信息 vt UV信息 f将点连成面信息 

makehuman 主函数 makehuman.py

滑动调整函数 modflierslider.py

导出obj结构函数

guiexport.py->9_export_obj.py->mh2obj.py->wavefront.py(writeobjfile实现点 f 写入文件)

onFileSelected->export->mh2obj.exportObj->wavefront.writeObjFile

human.py为整个核心

OBJ结构

makehuman结构_第8张图片

v为点信息

f为面信息

vt为uv信息

vn为法线信息

在houdini中引入makehuman

makehuman结构_第9张图片

FILE1导入base.obj

import numpy as np
node = hou.pwd()
geo = node.geometry()

# Add code to modify contents of geo.
# Use drop down menu to select examples.
TargetF = r'D:\makehuman-master\makehuman-master\makehuman\data\targets\macrodetails\african-female-old.target'

verts = geo.points()

#按.target修改base.obj
#读取.target文件
def _load_text( name):  
        data = []

        with open(name, 'r') as fd:
            for line in fd:
                line = line.strip()
                if line.startswith('#'):

                    continue
                translationData = line.split()
                if len(translationData) != 4:
                    continue
                vertIndex = int(translationData[0])
                translationVector = (float(translationData[1]), float(translationData[2]), float(translationData[3]))
                data.append((vertIndex, translationVector))

        raw = np.asarray(data,dtype = [('index','u4'),('vector','(3,)f4')])
        nverts = raw['index']
        ndata = raw['vector']


        #t1 = np.s_[...]
        #b = verts[t1]

       # [verts[idx].setPosition(verts[dt].position()+ndata[idx]) for idx , dt in enumerate(nverts)]
        u = 0;
        for i in nverts:
            verts[i].setPosition(verts[i].position() + ndata[u])
            u = u+1
            
    

_load_text(TargetF)

你可能感兴趣的:(前端,javascript,linux)