ManuelbastioniLAB 1.4.0, the open source character editor for Blender, released!

Yeah really exciting, Asymetry functions seems a really nice addition.

Any plan to make the generated characters skinned to a rigify/pitchipoy rig?

No, I prefer to use only my own rigging, in order to be sure that all is perfectly integrated with my system and license.

Does anyone have any good skin shader and texture to go with these?

I’m working on a better skin shader right now, with a new PBR core for reflections and Fresnel.
It will be included in next release. I will publish some WIP images very soon, perhaps today or max tomorrow.

I just started the gallery for the work in progress of next version (ManuelbastioniLAB 1.5).
I added two images to show the development of the new skin shader, that includes a PBR core for the correct reflection and fresnel.
I will add more images in next days.
The gallery: http://www.manuelbastioni.com/gallery.php

Awesomeness! :ba:

i wonder what kind of render times we’re looking at…

I think that the human alone in these images requires 15-20 min, using 24 square samples and an average GPU. I’ll do some experiments tomorrow and I will add more info.

Manuel, Your add-on is way better thatn what I’d hoped from Makehuman. The rigging piece is a tremendous bonus.

Couple of things I’ve tried but failed at-

I tried increasing mesh density. Which works and allows the mesh to stay rigged but destroys the facial expressions and posing. Is this a question of re=baking or something similar?

Also I brought in another head mesh obj as a target to do shrink wrap. Which worked. And The expressions ported over. Which was awesome. but When switching between the imported head and the selected body, the newly wrapped head suddenly “jumped” to either the rest pose or the standing symmetrical pose. Moreover, the head reset Only “partly” to the original mesh. Meaning it would retain some shrink wrapped customized verts but dump other changes
Not certain why.

Also I tried saving the newly tweaked mesh. The saved mesh as well only retained some mesh changes.

Also, regarding the skin - Your current skin is really good for hasty renders. A more refined one for final renders will be cool.

All in all, what you’ve created to date is spot on and very clean And a tremendous aid. I can’t express that enough. I already incorporated your meshes into my project.

So thanks for the labor and contribution.

I just deleted a double post. So disregard.

The only thing we need is better arm/hand controllers for the rig. Right now, animating things like first-person arms is a pain.

Have you finalized the mesh? http://www.manuelbastioni.com/guide_finalize_the_character.php

Perhaps it depends by the order of modifiers (assuming that you have finalized the mesh).

The skin that I’m developing for 1.5 is very good. I want to reach the state of the art, creating not only a powerful shader, but also a structure easy to understand and control with predictable results. This requires some steps that I’m developing version by version. I’m updating the gallery very often.
Some preview of the progress in the images below.

Of course, to have photorealistic results in closeup rendering a good shader is not enough: it’s matter of details.
The shader 1.5 is impressive when used on a high density head, but to have the same realism on a character generated via parametric way I have to add a system that provides high quality details.
This is planned for version 1.6: http://www.manuelbastioni.com/guide_features_planned_in_next_versions.php




Hi Guyz, am new here so dont doubt am out that thread :wink: hey I have a problem with my blender 2.78a It clash once I apply IK to the legs of the manuellab model so how can I fix that problem coz It dont even open that file anymore :frowning: though that same file can be opened by previous versions

Does the rig have IK controllers or do IK constraints have to be set manually? I didn’t see anything in the interface and failed miserably in trying to do it myself.

I am spoiled by the rig that I get from Makehuman, I guess.

Before the implementation of the IK-advanced rigging, I have to complete the support for motion capture files and the muscle engine system, in order to test the compatibility of these features with it.

I’m already working on the support for motion capture, some results are in this video:

Great! Thank for the quick answer. Very nice work here.

Why cant make a human less than 18 years old ?

Due to the big difference in proportions and growing factors it would require a new big database and different algorithms for the body transformations. So the software is designed to create realistic people from 18 to 80 y.o.

Hi Manuel, great work. THX

FYI: In master some of your used icons where removed recently: https://developer.blender.org/rBf86eccb1ca2388ae203df2a59285a2f2fb9b6aa8

I replaced them with TRIA_RIGHT and TRIA_DOWN respectively.

diff -up '/home/jensverwiebe/Downloads/manuelbastionilab/__init__.py' '/home/jensverwiebe/.config/blender/2.78/scripts/addons/manuelbastionilab/__init__.py' 
--- /home/jensverwiebe/Downloads/manuelbastionilab/__init__.py    2016-10-30 18:16:06.000000000 +0100
+++ /home/jensverwiebe/.config/blender/2.78/scripts/addons/manuelbastionilab/__init__.py    2016-12-28 19:51:35.844767903 +0100
@@ -1586,9 +1586,9 @@ class ManuelLabPanel(bpy.types.Panel):
                     box.operator("mbast_reset.allproperties", icon="LOAD_FACTORY")
 
                 if gui_active_panel != "library":
-                    self.layout.operator('mbast_button.library_on', icon="DISCLOSURE_TRI_RIGHT_VEC")
+                    self.layout.operator('mbast_button.library_on', icon="TRIA_RIGHT")
                 else:
-                    self.layout.operator('mbast_button.library_off', icon="DISCLOSURE_TRI_DOWN_VEC")
+                    self.layout.operator('mbast_button.library_off', icon="TRIA_DOWN")
                     box = self.layout.box()
 
                     box.label("Characters library")
@@ -1599,9 +1599,9 @@ class ManuelLabPanel(bpy.types.Panel):
                     box.prop(scn, 'mix_characters')
 
                 if gui_active_panel != "expressions":
-                    self.layout.operator('mbast_button.expressions_on', icon="DISCLOSURE_TRI_RIGHT_VEC")
+                    self.layout.operator('mbast_button.expressions_on', icon="TRIA_RIGHT")
                 else:
-                    self.layout.operator('mbast_button.expressions_off', icon="DISCLOSURE_TRI_DOWN_VEC")
+                    self.layout.operator('mbast_button.expressions_off', icon="TRIA_DOWN")
 
                     box = self.layout.box()
                     box.prop(obj, "expressions")
@@ -1609,9 +1609,9 @@ class ManuelLabPanel(bpy.types.Panel):
                     box.operator("mbast_reset.expression", icon="RECOVER_AUTO")
 
                 if gui_active_panel != "random":
-                    self.layout.operator('mbast_button.random_on', icon="DISCLOSURE_TRI_RIGHT_VEC")
+                    self.layout.operator('mbast_button.random_on', icon="TRIA_RIGHT")
                 else:
-                    self.layout.operator('mbast_button.random_off', icon="DISCLOSURE_TRI_DOWN_VEC")
+                    self.layout.operator('mbast_button.random_off', icon="TRIA_DOWN")
 
                     box = self.layout.box()
                     box.prop(scn, "random_engine")
@@ -1631,9 +1631,9 @@ class ManuelLabPanel(bpy.types.Panel):
                     box.operator('mbast_character.generator', icon="FILE_REFRESH")
 
                 if gui_active_panel != "parameters":
-                    self.layout.operator('mbast_button.parameters_on', icon="DISCLOSURE_TRI_RIGHT_VEC")
+                    self.layout.operator('mbast_button.parameters_on', icon="TRIA_RIGHT")
                 else:
-                    self.layout.operator('mbast_button.parameters_off', icon="DISCLOSURE_TRI_DOWN_VEC")
+                    self.layout.operator('mbast_button.parameters_off', icon="TRIA_DOWN")
 
                     box = self.layout.box()
                     the_humanoid.bodydata_realtime_activated = True
@@ -1676,9 +1676,9 @@ class ManuelLabPanel(bpy.types.Panel):
 
                 if the_humanoid.exists_measure_database():
                     if gui_active_panel != "automodelling":
-                        self.layout.operator('mbast_button.automodelling_on', icon="DISCLOSURE_TRI_RIGHT_VEC")
+                        self.layout.operator('mbast_button.automodelling_on', icon="TRIA_RIGHT")
                     else:
-                        self.layout.operator('mbast_button.automodelling_off', icon="DISCLOSURE_TRI_DOWN_VEC")
+                        self.layout.operator('mbast_button.automodelling_off', icon="TRIA_DOWN")
                         box = self.layout.box()
                         box.operator("mbast_auto.modelling")
                         box.operator("mbast_auto.modellingmix")
@@ -1689,9 +1689,9 @@ class ManuelLabPanel(bpy.types.Panel):
 
                 if the_humanoid.exists_poses_database():
                     if gui_active_panel != "pose":
-                        self.layout.operator('mbast_button.pose_on', icon="DISCLOSURE_TRI_RIGHT_VEC")
+                        self.layout.operator('mbast_button.pose_on', icon="TRIA_RIGHT")
                     else:
-                        self.layout.operator('mbast_button.pose_off', icon="DISCLOSURE_TRI_DOWN_VEC")
+                        self.layout.operator('mbast_button.pose_off', icon="TRIA_DOWN")
                         box = self.layout.box()
                         box.prop(obj, "static_pose")
                         box.operator("mbast_pose.reset", icon='ARMATURE_DATA')
@@ -1699,9 +1699,9 @@ class ManuelLabPanel(bpy.types.Panel):
                         box.operator("mbast_pose.save", icon='EXPORT')                
 
                 if gui_active_panel != "skin":
-                    self.layout.operator('mbast_button.skin_on', icon="DISCLOSURE_TRI_RIGHT_VEC")
+                    self.layout.operator('mbast_button.skin_on', icon="TRIA_RIGHT")
                 else:
-                    self.layout.operator('mbast_button.skin_off', icon="DISCLOSURE_TRI_DOWN_VEC")
+                    self.layout.operator('mbast_button.skin_off', icon="TRIA_DOWN")
 
                     box = self.layout.box()
                     box.enabled = True
@@ -1759,9 +1759,9 @@ class ManuelLabPanel(bpy.types.Panel):
                         sub.operator("mbast_export.allimages", icon='EXPORT')
 
                 if gui_active_panel != "proxy":
-                    self.layout.operator('mbast_button.proxy_on', icon="DISCLOSURE_TRI_RIGHT_VEC")
+                    self.layout.operator('mbast_button.proxy_on', icon="TRIA_RIGHT")
                 else:
-                    self.layout.operator('mbast_button.proxy_off', icon="DISCLOSURE_TRI_DOWN_VEC")
+                    self.layout.operator('mbast_button.proxy_off', icon="TRIA_DOWN")
                     box = self.layout.box()
                     proxy_status = the_humanoid.validate_proxy_for_selection()
 
@@ -1783,9 +1783,9 @@ class ManuelLabPanel(bpy.types.Panel):
 
 
                 if gui_active_panel != "file":
-                    self.layout.operator('mbast_button.file_on', icon="DISCLOSURE_TRI_RIGHT_VEC")
+                    self.layout.operator('mbast_button.file_on', icon="TRIA_RIGHT")
                 else:
-                    self.layout.operator('mbast_button.file_off', icon="DISCLOSURE_TRI_DOWN_VEC")
+                    self.layout.operator('mbast_button.file_off', icon="TRIA_DOWN")
                     box = self.layout.box()
                     box.prop(scn, 'export_proportions')
                     box.prop(scn, 'export_materials')
@@ -1794,9 +1794,9 @@ class ManuelLabPanel(bpy.types.Panel):
 
 
                 if gui_active_panel != "finalize":
-                    self.layout.operator('mbast_button.finalize_on', icon="DISCLOSURE_TRI_RIGHT_VEC")
+                    self.layout.operator('mbast_button.finalize_on', icon="TRIA_RIGHT")
                 else:
-                    self.layout.operator('mbast_button.finalize_off', icon="DISCLOSURE_TRI_DOWN_VEC")
+                    self.layout.operator('mbast_button.finalize_off', icon="TRIA_DOWN")
 
                     box = self.layout.box()
                     box.prop(scn, 'save_all_images')

Jens

Thank you. The version 1.5 (hopefully it will be ready for the end of january) will be compatible with new icons.