tisdag 6 november 2018

Blender 2.80

The development version now runs on Blender 2.80. Or at least it runs on the version of Blender 2.80 that I downloaded a few days ago. There are still some issues, but most features seems to work as they do in Blender 2.79.

The most obvious difference is that the DAZ tab has moved from the T-shelf on the left of the viewport to the N-shelf on the right side. Not sure why add-ons cannot define tabs in the Tools shelf anymore, but so it is. Here is the same character imported into Blender 2.79 and Blender 2.80:

Blender 2.79

Blender 2.80
The development version can be downloaded from https://bitbucket.org/Diffeomorphic/import-daz.

The same changes have also been implemented on two of my other add-ons:
MakeWalk: https://bitbucket.org/Diffeomorphic/makewalk
MHX 2 importer: https://bitbucket.org/Diffeomorphic/mhx2-makehuman-exchange
Those add-ons are not really supported anymore, but at least the basic features now work under Blender 2.80.

måndag 15 oktober 2018

Stable version 1.3.1

Originally I planned to wait with the next release until after Blender 2.80 was available. However, since the development version is so much better than version 1.3, especially when it comes to materials, I decided to make a new stable release, version 1.3.1. It can be downloaded from https://www.dropbox.com/s/0tfwk7v82116nt3/import-daz-v1.3.1-20181016.zip

The progress on materials, which I have already written about here, are due to many helpful bug reports by users engetudouiti and Alessandro Padovani. As I myself have a very limited understanding of Iray materials, and am not very good at Cycles either, these improvements could not have happened without their help.

The documentation has not been updated since version 1.3. The current user interface differs slightly from the one described in the documentation, but hopefully this should not cause serious problems. When you import a Daz file, the materials section in the import options now looks like this:
For opaque materials there are two options, depending on whether we want to use the principled node or not. For refractive materials there are three more options: the Guess option is good for eyes, and the Custom Shader is a quite complex node setup that should mimic refractive Iray materials very closely. Finally, the Environment checkbox allows us to import environment maps from Daz Studio. This is useful if you want to import complete Daz scenes, less so if you use Daz Studio as a character generator.

When the add-on is enabled, there is a warning message in the terminal: "Warning: This script was written Blender version 2.80.0 and might not function (correctly), though it is enabled". This is normal and nothing to worry about. The goal is that the future version 1.4 should run on both Blender 2.79 and 2.80, and as a first step in this direction the Blender version has been changed to 2.80.

torsdag 19 juli 2018


Bee reports about a new tool for arXiv users that she helped to create: Scimeter. Having been stuck for a decade and not really on speaking terms with the arXiv moderators, I haven't thought much about physics for the last decade, but here is the cloud that it produces for my arXiv papers:

 Couldn't have made it better myself.

måndag 16 juli 2018

Shells and Layered Images

In Daz Studio, a shell is a mesh with zero vertices that is used to add features to the materials of the base mesh. It can be used e.g. for makeup, tattoos and wounds. Shells are also used by Genesis 8 genitals to add color and effects without having to modify the torso material.

Importing the shells directly into Blender makes no sense, because they are empty meshes that don't show up in renders. Instead the Daz Importer uses the information in the shell materials to modify the materials of the base mesh. Here is an example where two bruises have been added to the face and one bruise has been added to the lips:
 The principled face material looks like this:
 The bruise textures are added to the face material inside the node group:
 This node group contains some redundant nodes, which hopefully will go away soon.

 A different way to add layers is to use the Layered Image Editor (LIE) in Daz Studio. Here we have added three small textures to the face texture.
After importing to Blender, the face looks like this. There was also added an extra texture to the lips material.
And here is the node group that computes the diffuse texture. The textures are placed using mapping nodes.

måndag 2 juli 2018

Stripped runtime system

In version 1.3 of the Daz importer the face bones drivers use Custom Driver Functions. This represents a major improvement compared to the methods used in earlier versions, because
  1. There no limit to the number of driving properties.
  2. Driver functions can be combined with other drivers.
  3. Performance is much better than with handlers.
However, there is a caveat. The add-on must always be enabled, because the drivers use the function evalMorph, which is defined by the add-on. This is not really a problem as long as you stay on the same computer, but if you send your blend file to another machine which does not have the Daz importer installed, the missing driver function will destroy the face pose completely. A typical situation where this problem may arise is if you send the blend files away to a render farm.

If you look in the DOS/terminal window, you find a lot of error messages of the form

Error in Driver: The following Python expression failed:
        'evalMorphs(self, 2, "Rot")'

Traceback (most recent call last):
  File "<bpy driver>", line 1, in <module>
NameError: name 'evalMorphs' is not defined

Thus clearly the problem is that the drivers for the face bones call the function evalMorphs, which is missing because it defined by the non-available import-daz add-on.

To solve this problem, the definition of evalMorphs and some necessary supporting code has been duplicated in the file runtime_stripped.py, located in the folder with the same name under the import_daz directory. Since this addition is very recent, you need to download the latest development version of the add-on.

To use this file when the import-daz add-on is disabled, follow these steps:

In the Scripting context, select Open to open a text file.

Navigate to the file import-daz/runtime_stripped/runtime_stripped.py.

First enable the Register checkbox, and then press the Run Script button. Finally save the blend file.

Open the blend file again. Since it is the last file saved, it should be found at the top of the Open Recent... menu item.

And now the ugly face is replaced by a smile.

At least this works in this example. It is not clear to me if it will still work if you do batch rendering from a terminal, or if you have do some extra steps as well.

lördag 2 juni 2018

Material progress

With release 1.3 the Daz importer feels almost complete. I have started to use it for my own personal projects, and there is little that I want to change. However, there is one area that is still problematic: materials. This is not so surprising, because my understanding of Blender materials is poor and of Daz materials is almost non-existent.

Fortunately, recently Daz master Alessandro Padovani has stepped in with a number of bug reports that clarified a number of issues:
  • Daz textures are automatically multiplied with the color. In Blender, this multiplication has to be carried out explicitly.
  • Daz colors are sRGB whereas Blender uses a linear color space. This does not affect textures, which are automatically converted, but it changes pure colors.
  • Depending on the shader, specular maps are put in different channels: glossy color, glossy layered weight, specular color, etc.
However, the most important improvement is in the treatment of bump maps. The following picture illustrates the difference between stable 1.3 and the current development version for a Genesis 8 character, provided that the principled shader is used.

In Blender, the bump node depends on two parameters: strength and distance. In Iray, there is no distance parameter, so in 1.3 I assumed that it was 1 Daz unit, i.e. 1 cm. However, Alessandro figured out that the correct bump distance in Iray is 0.5 mm. In other Daz shaders such as 3Delight, the bump distance (or more exactly, bump max and min values) is explicitly available, and is typically 1 or 2 mm. To eliminate the worst artefacts, version 1.3 had two import options with which one could change the bump strength and subsurface distance, which also affects the bumpiness. Since bump maps are now imported correctly, these options have been removed.

In plain Cycles, without the principled shader, the situation was not so bad, as show in the picture below. However, this was really due to cheating. To avoid the extreme bumpiness, in version 1.3 the bump map only affected the diffuse channel, but not SSS or translucency. In the development version, the bump map affects all three channels, but the skin still looks ok due to the reduced bump distance. This trick was not possible with the principled shader, because it only has one Normal input which affects both base color and SSS.

Another difference is that the transparency option has disappeared in the development version. This was originally introduced for debug purposes, because I did not understand how to handle refraction correctly. In the current version, the refraction channel in Daz is mapped to a Refraction node in Cycles, and to the Transmission input in the principled node if that is enabled. There remains an option to mix the result with a Transparency node, because sometimes the pure result tends to be not so good.

Here is an eye rendered in plain Cycles with the Mix Transparancy Factor set to 0.0, 0.5 and 1.0, respectively.

And here is the same eye, but loaded with Principled Shader enabled.

fredag 27 april 2018

Stable version 1.3

Finally, stable version 1.3 has been released.

Documentation: https://diffeomorphic.blogspot.se/p/daz-importer-version-13.html
Download: https://www.dropbox.com/s/6q9gf2fw24p3ash/import-daz-v1.3-20180425.zip

Changes from previous version:

The add-on was developed on Windows 7. It has not been tested on Mac because I don't have access to any, but it does work under Linux. Hence earlier Mac problems due to case-sensitive file names should be solved.