UE4 license is incompatible with the AGPL (https://www.unrealengine.com/en-US/eula). All exported meshes from the lab plugin are now bound by the AGPL (that has a stronger copyleft than the GPL). The only exception made in the license (that is still on github) was for models exported by official versions released on www.manuelbastioni.com - The site is off now. I’m not sure about Unity but I think it’s the same (as this would pull their non AGPL source into AGPL).
I know in the past there was an addon to convert an MLAB model to rigify. Does that still work here? And is there any way to get the muscle rig working with Rigify? That would be a very useful feature to have.
Last time I tested Rigify Meta-Rig for MB-Lab [Addon for an Addon] was still working.
I can take a look into making the muscle rig working with Rigify. (no promises)
Seems there is a new bug in the BVH animation import, I think some changes to the API have happened… been out of the loop for a couple weeks due to other obligations but am updating now.
Just tested it with the latest add-on and it works no problems !
I found a bug with the rig. “toes_R” is not connected (use_conncet). (is reported on github)
This made me nuts while merging the muscle rig into the rigify rig.
Ack!
I will look into this. Oddly the same bone that caused another unrelated bug way back.
I got the muscle rig working with rigify rig - kind of. There are some issues I could not solve. The knee IK targets are crossed. The feet are rolled in. This makes the feet go unter the ground.
I’m posting here, so more people can see this. For bug reports etc. please post here to not spam this thread with half off-topic posts!
This code is for testing only! Don’t damage your work!
- Select the “MBlab_sk_” rig and run this to get the rigify rig:
This takes a long time.
import bpy
from mathutils import Vector
mblab_rig = None
rigify_rig = None
muscle_rig = None
muscle_parents = {}
subtargets = {}
bpy.ops.object.mode_set(mode='OBJECT')
# Duplicate MB-lab rig
bpy.ops.object.duplicate()
mblab_rig = bpy.context.active_object
# EDIT MODE
bpy.ops.object.mode_set(mode='EDIT')
# Fix disconnected toe
bpy.context.active_object.data.edit_bones['toes_R'].use_connect = True
# Disconnect upperarms
bpy.context.active_object.data.edit_bones['upperarm_L'].use_connect = False
bpy.context.active_object.data.edit_bones['upperarm_R'].use_connect = False
# re-parent thumbs
bpy.context.active_object.data.edit_bones['thumb01_L'].parent = bpy.context.active_object.data.edit_bones['index00_L']
bpy.context.active_object.data.edit_bones['thumb01_R'].parent = bpy.context.active_object.data.edit_bones['index00_R']
# Connect spine with neck
bpy.context.active_object.data.edit_bones['spine03'].tail = bpy.context.active_object.data.edit_bones[
'neck'].head.copy()
bpy.context.active_object.data.edit_bones['neck'].use_connect = True
# Create heels
for ext in ["_L", "_R"]:
bone_name = "heel" + ext
bone_heel = bpy.context.active_object.data.edit_bones.new(bone_name)
bone_heel.bbone_x = 0.01
bone_heel.bbone_z = 0.01
foot_bone = bpy.context.active_object.data.edit_bones["foot" + ext]
# heel x location relative to foot head
bone_heel.tail.x = 0.1 if ext == "_L" else -0.1
heel_head_x = (bone_heel.tail.x - foot_bone.head.x) / 2 + foot_bone.head.x
heel_tail_x = (foot_bone.head.x - bone_heel.tail.x) / 2 + foot_bone.head.x
bone_heel.head = Vector((heel_head_x, mblab_rig.location.y, mblab_rig.location.z))
bone_heel.tail = Vector((heel_tail_x, mblab_rig.location.y, mblab_rig.location.z))
# parent
bone_heel.use_connect = False
bone_heel.parent = foot_bone
# Rename muscle bones on layer 1
for name, bone in bpy.context.active_object.data.edit_bones.items():
if "rot_helper" in name:
bone.name = "MCH-" + name
bone.use_deform = False
if "muscle" in name:
if "_H" in name or "_T" in name:
bone.name = "MCH-" + name
bone.use_deform = False
else:
bone.name = "DEF-" + name
bpy.ops.object.mode_set(mode='POSE')
# Subtargets
for name, bone in bpy.context.active_object.pose.bones.items():
if "rot_helper" in name or "muscle" in name:
temp_constraints = {}
for c_name, constraint in bone.constraints.items():
sub_name = constraint.subtarget
if "MCH" not in constraint.subtarget:
sub_name = "DEF-" + sub_name
temp_constraints[c_name] = sub_name
subtargets[name] = temp_constraints
bpy.ops.object.mode_set(mode='EDIT')
# Save the parents
for name, bone in bpy.context.active_object.data.edit_bones.items():
if "rot_helper" in name or "muscle" in name:
if "MCH" not in bone.parent.name and "DEF" not in bone.parent.name:
parent_name = "DEF-" + bone.parent.name
else:
parent_name = bone.parent.name
muscle_parents[name] = parent_name
for name, bone in bpy.context.active_object.data.edit_bones.items():
if "rot_helper" in name or "muscle" in name:
bone.parent = None
bpy.ops.object.mode_set(mode='POSE')
# Unlock transforms
for name, bone in bpy.context.active_object.pose.bones.items():
bone.lock_location[0] = False
bone.lock_location[1] = False
bone.lock_location[2] = False
bone.lock_scale[0] = False
bone.lock_scale[1] = False
bone.lock_scale[2] = False
# set rigify types
bpy.context.object.pose.bones["pelvis"].rigify_type = "spines.super_spine"
bpy.context.object.pose.bones["pelvis"].rigify_parameters['neck_pos'] = 5
bpy.context.object.pose.bones["clavicle_L"].rigify_type = "basic.super_copy"
bpy.context.object.pose.bones["clavicle_R"].rigify_type = "basic.super_copy"
bpy.context.object.pose.bones["breast_L"].rigify_type = "basic.super_copy"
bpy.context.object.pose.bones["breast_R"].rigify_type = "basic.super_copy"
for ext in ["_L", "_R"]:
bone_name = 'thigh' + ext
bpy.context.object.pose.bones[bone_name].rigify_type = "limbs.super_limb"
bpy.context.object.pose.bones[bone_name].rigify_parameters.limb_type = 'leg'
bpy.context.object.pose.bones[bone_name].rigify_parameters.segments = 1
bpy.context.object.pose.bones[bone_name].rigify_parameters.rotation_axis = 'x'
bone_name = 'upperarm' + ext
bpy.context.object.pose.bones[bone_name].rigify_type = "limbs.super_limb"
bpy.context.object.pose.bones[bone_name].rigify_parameters.limb_type = 'arm'
bpy.context.object.pose.bones[bone_name].rigify_parameters.segments = 1
bpy.context.object.pose.bones["index00" + ext].rigify_type = "limbs.super_palm"
for name in ['thumb01', 'index01', 'middle01', 'ring01', 'pinky01']:
bone_name = name + ext
bpy.context.object.pose.bones[bone_name].rigify_type = "limbs.simple_tentacle"
bpy.context.object.data.bones["breast" + ext].hide = False
bpy.ops.object.mode_set(mode='OBJECT')
# Duplicate MB-lab rig
bpy.ops.object.duplicate()
muscle_rig = bpy.context.active_object
bpy.ops.object.select_all(action='DESELECT')
bpy.context.view_layer.objects.active = muscle_rig
# Delete bones on layer 1
bpy.ops.object.mode_set(mode='EDIT')
bpy.context.object.data.layers[0] = True
bpy.context.object.data.layers[1] = True
for name, bone in bpy.context.active_object.data.edit_bones.items():
if bone.layers[0]:
bone.select = True
else:
bone.select = False
bpy.ops.armature.delete()
# Move bones to layer 3
for name, bone in bpy.context.active_object.data.edit_bones.items():
bone.layers[2] = True
for name, bone in bpy.context.active_object.data.edit_bones.items():
bone.layers[1] = False
bpy.ops.object.mode_set(mode='OBJECT')
# generate rigify rig
bpy.ops.object.select_all(action='DESELECT')
bpy.context.view_layer.objects.active = mblab_rig
bpy.ops.pose.rigify_generate()
rigify_rig = bpy.context.active_object
# add copy rig to rigify rig
muscle_rig.select_set(True)
rigify_rig.select_set(True)
bpy.context.view_layer.objects.active = rigify_rig
bpy.ops.object.join()
bpy.ops.object.mode_set(mode='EDIT')
for bone_name, parent_name in muscle_parents.items():
# re-parent bones
bpy.context.active_object.data.edit_bones[bone_name].parent = bpy.context.active_object.data.edit_bones[parent_name]
# reconnect muscle bones
if "muscle" in bone_name:
if not ("_H" in bone_name or "_T" in bone_name):
bpy.context.active_object.data.edit_bones[bone_name].use_connect = True
bpy.ops.object.mode_set(mode='POSE')
# Subtargets
for bone_name, constraint in subtargets.items():
for c_name, sub_name in constraint.items():
bpy.context.object.pose.bones[bone_name].constraints[c_name].subtarget = sub_name
bpy.ops.object.mode_set(mode='OBJECT')
- Select the mesh “MBlab_bd_” and run this for renaming the vertex groups:
import bpy
for name, v_group in bpy.context.active_object.vertex_groups.items():
new_name = "DEF-" + name
v_group.name = new_name
- Replace rig in “mbastlab_armature” modifier.
The BVH import bug has been fixed, at least from initial testing after replacing
bpy.context.scene.update()
with
bpy.context.view_layer.update()
This fix has been committed to the ‘master’ branch of MB-Lab
It seems this bug in Blender has been resolved?? I have yet to test this but this SHOULD solve the following issue -
Cross-post:
- Discord: MB-Lab Release for Blender 2.80
- GitHub: https://discordapp.com/invite/FuJGcVN
Hello users of MB-Lab!
This add-on has come far since we as a community took over the development. We have 230 posts here and already 100+ users on the Discord channel (https://discordapp.com/invite/FuJGcVN)!
Many users have asked on how they can contribute, so I thought it would be nice if we can aggregate everyone’s view and usage of this add-on. With those insights, we can understand this community better and increase motivation ^-^
Therefore, I made a Google forms with brainstorm-like questions, please fill it out!:
Google forms link (click me )
Results will be shared here and on the Discord channel from 2019-06-02 (you can still fill it out later as well). The reason to not share it directly, is that seeing other people’s answers might influence your answers. That can reduce the variety of the answers given, the opposite of what we want to achieve here.
Today is the last day if you want your opinion / inspiration about the future of MB-Lab be included in the analysis!
Google forms link: https://forms.gle/CZmnHAJ8JxXFQgrA6
Here are the results of the survey (2019-06-02)!
- Full results (archived - prevent modification): https://docs.google.com/forms/d/e/1FAIpQLSdbNPtwosFh-kWdXHsTJNQ1ab0xNAazqSiixpeomNPvbGZu_g/viewanalytics
- New survey (always open): https://docs.google.com/forms/d/e/1FAIpQLSdMiy6ow2Mr6IzqLuHx1b63GaXtXSjj3cASn4btQMLz7q4AQg/viewform
It is very interesting to see that almost everyone of the 13 respondends had different use-cases.
Purpose
- Research / Human-Agent interaction
- Entertainment / movie making
- Illustration / comic book art / concept art
- Real human → 3D model
- Procedural character generation
- Facial expressions
- Anime characters
- Game characters
Longer summary of the results: https://github.com/animate1978/MB-Lab/wiki/Brainstorm
From the initial post I understand that there should be a collection of clothing that comes with MB-Lab. Is this true? How can I use it?
We added clothing in 1.7.1 but had to remove them just to save on the repo size, it grew to a couple hundred MB.
You can find them here though - https://github.com/animate1978/MB-Lab-DemoAssets
And documentation on how to use the clothing in MB-Lab is here - https://mb-lab.readthedocs.io/en/latest/proxy.html
Feel free to ask questions, I can try to answer them as best I can.
Fellow Blenderheads!
The developers of MB-Lab are asking for some help regarding a bug that has persisted since March. It has to do with registering of classes and we are stumped at what is causing this as well as fixing the issue.
The issue pops up when you disable MB-Lab in the Addon Preferences window, you will get an error like this -
Exception in module unregister(): '/home/*user*/.config/blender/2.80/scripts/addons/MB-Lab-master/__init__.py'
Traceback (most recent call last):
File "/home/*user*/Downloads/blender-2.80-a070815d127e-linux-glibc224-x86_64/2.80/scripts/modules/addon_utils.py", line 446, in disable
mod.unregister()
File "/home/*user*/.config/blender/2.80/scripts/addons/MB-Lab-master/__init__.py", line 2305, in unregister
addon_updater_ops.unregister()
File "/home/*user*/.config/blender/2.80/scripts/addons/MB-Lab-master/addon_updater_ops.py", line 1418, in unregister
bpy.utils.unregister_class(cls)
RuntimeError: unregister_class(...):, missing bl_rna attribute from 'RNAMeta' instance (may not be registered)
Error: Traceback (most recent call last):
File "/home/*user*/Downloads/blender-2.80-a070815d127e-linux-glibc224-x86_64/2.80/scripts/modules/addon_utils.py", line 446, in disable
mod.unregister()
File "/home/*user*/.config/blender/2.80/scripts/addons/MB-Lab-master/__init__.py", line 2305, in unregister
addon_updater_ops.unregister()
File "/home/*user*/.config/blender/2.80/scripts/addons/MB-Lab-master/addon_updater_ops.py", line 1418, in unregister
bpy.utils.unregister_class(cls)
RuntimeError: unregister_class(...):, missing bl_rna attribute from 'RNAMeta' instance (may not be registered)
At first it was assumed that this was due to the Auto-Updater code that was added around the same time, however upon testing of the removal of this code the bug still persists, so that indicates a problem elsewhere but we don’t know where.
While this only really poses a problem when disabling the addon, in testing and development of MB-Lab this bug has not interfered, it is still very annoying and could be a problem deeper in the code than we know.
We are asking for help, several people are looking at this but we are stumped. If anyone here can help it will be welcomed. I want to get this particular bug squashed for the next release we are working on.
Thank you for your time
Well THAT was fast, for a bug that has persisted for months got squashed in like 6 hours!!
The bug fix has been committed to the master branch so it is HIGHLY ADVISABLE to update your clone.
Here is a link to the master branch zip file
https://github.com/animate1978/MB-Lab/archive/master.zip
Thank you to https://github.com/mreloaded for the fix!
Character with inverse kinematic , can not use asset library? I download the assets on https://github.com/animate1978/MB-Lab-DemoAssets , and I can open them in asset library if I create character without inverse kinematic , but character with inverse kinematic , the asset can not be seen on asset library
Guys, can’t these models made with manuel bastioni lab be used in game engines like ue4 et.c or for commercial works anymore? I am trying to clarify because if I recall Make Human models are completely free for any use.