Getting objects from Blender to DS
millighost
Posts: 261
Often i want to do it the other way around: get objects from DS into blender. So i started to make an addon for this. However, it turned out to be rather complicated, mainly because it is hard to see what is important and what is not. So i got the idea to export objects from blender to DS instead, which is much easier, because i can leave something out and see if the missing parts do any harm. Since the question how to get objects from blender into pops up now and then in this forum i describe how i do things using a simple example, which covers most of the possibilities.
As an example i use small forest scene; Here is a ground i created in blender:
edp-ground.jpg
647 x 310 - 16K
Comments
This could be easily exported as wavefront-obj, and imported into DS. I use my own script, however. I select the ground, choose a filename in a ds-library-directory (i use test.duf for this example).
There are two options that are of interest:
This generates a DS scene-subset file containing the ground. I can import that in DS using the Content-Library. The image shows how it looks in DS.
Note that the object in DS's scene view is called "ground-3". Internally the export generates 3 things: a geometry entry, an object definition, and a scene-object. They are all mangled into one scene-subset file. Within the scene-subset file all things must have distinct identifiers, The export-script generates distinct identifiers by appending a number to the names (hence the "-3"). You have the same effect when loading multiple e.g. Genesis figures into one DS scene.
So far there is nothing that i could not have done with a wavefront-obj export/import.
In blender i populate the ground by attaching two particle systems. One containing some lumps of grass and one containing mushrooms. This is how it looks in blender; right of the plane the prototype objects can be seen which are used by the particle system.
I select everything in this scene and call my export-script. In the settings, i check the do-instances toggle. This will export the mushrooms and the grass by generating DS-instances.
The second image shows how it looks in DS, when i load the resulting scene-subset into it. Note that the instances of the grass and mushrooms are parented to the ground-plane. This is done to keep the scene-view readable, even if the instances are not necessarily children of the ground-plane. The instances keep the resulting scene-file relatively small. It is only 500k even though it contains rougly 200k polygons (mainly because of the grass).
I also create some rocks and place them on the ground. Because there are so few of them i do not use a particle system, but use duplifaces instead. When exporting duplis, the parent object must also be selected for exporting the duplis (and therefore it will be exported, too). This is how it looks in blender. The mesh that contains the duplis is colored red. Since this is usually not rendered, i need to make it invisible in DS later.
The rocks on the right of the plane are not really useful for the scene in blender. But in DS they are created as instances and in DS instances means always "instance of some master-object. And that "master-object" also needs to be present (and therefore exported). When assigning a material on the instances this is also done by using these master-objects. So i put them separated from the main-scene, to make them easier selectable.
Next i want to include a tree. Most forests have at least one tree. In blender, i used a subdivision modifier on the model to make it look smoother. The first image shows the tree how it looks in blender.
However, DS in contrast to blender, supports real subdivision surfaces (at least when using 3delight). So i find it always better to use DS's subdivision than blender's modifier. Since the exporter always uses the preview-setting of the modifiers i set the viewport-subdivision to 0 before exporting (by pressing Ctrl-0). It will look very lowpoly like in the second image (which it is), but DS's subdivision will make it smooth again.
To make the tree more interesting, i add some ivy to it, using blender's Ivy addon. The ivy addon generates leaves and the stem of the ivy. The leaves are a simple mesh, but the stem of the ivy is a blender-curve object. In order to export the curve, the to-mesh option needs to be checked on export. This is basically what the to-mesh option does; it allows for all kinds of blender objects that DS does not natively support (metaballs, nurbs, etc), to be exported as meshes (3. image).
Forever...well, maybe not forever, but you get the idea.
User generated content is still duf format (that does stand for Daz User File or something like that, after all). And we have been told many, many times in the long, tortuous threads about 4.9 that user generated content will NOT be encrypted. Besides, if the format can be encrypted and still read, it's a lot more work to make it able to reject the unencrypted version.
Killing the ability to do so would wipe out all content made before this past summer...so think about that when thinking the encryption scheme is really some covert 'evilness' and that the dev team is a pack of something lower than used car selling lawyers.
millghost...this is looking great.
Sure beats a bunch of individual exports/imports and instancing in Studio (placing them in Studio is not easy).
A couple of quick questions...
Are you going to make this available? I WAAAAAAAAAAANT!!!!
I have a bunch of scenes from Blendswap that this would be perfect for...and it takes forever doing the export/import of all the individual parts.
Last, i want to add a protagonist into the scene: Here i have created an animal which is some kind of mixture between an elephant and a kangaroo or a duck.It is made of two parts: an armature and a mesh. To export this to DS, i need to select both objects (the armature and the mesh). The exporter looks for a combination of mesh/armature it can convert into a DS-figure. Blender and DS have some differing representation of what a figure is; in blender it is a mesh with an armature modifier, whereas in DS it is more like an armature with a mesh. For simple cases like here, there is no big difference. In more complicated settings with multiple armatures manipulating a single figure or vice versa, there likely will be problems.
This is what i get after i load the resulting scene into DS;
The figure that is created in DS is based on the armature of blender (it is named after the armature, not the mesh).
Some bones have a different name than they have in blender (with a suffix, like "eye.l-1") for the same reason as above: because there are different entries generated in the resulting file, some with a conflicting name.
I rotated the trunk down, so the posing of the figure works. The exporter converts the vertex-groups, bones and such to modify the mesh according to the skinning mode. It does not actually convert a full rig. I.e. IK, constraints and so on are all ignored. These have to be done in DS. What i get is a simple FK-rig. The exporter supports the two skinning algorithms Linear-Blend and Dual-Quaternion (in blender the latter is selected by enabling Volume-Preserving in the armature-modifier). Triax skinning and geometric-parametric are not supported (there is no easy blender representation of these).
Weights for skinning are exported as they are needed by the skeleton, but there is no selection map. This means to select a specific bone, it has to be done in the scene-tree (or in the pose-menu). Simply clicking onto the head of the figure will just select the whole figure.
Nice work! Out of all of that I'm particularly interested in the fact that you successfully got Blender to export generated particles to obj. I don't think the normal wavefront exporter does that?
The figure that is exported does not need to be in the rest-position. It can actually be already posed. Here i have placed the animal on the ground-plane from above (but only the figure is selected). The generated scene-subset then contains the applied pose. The pose of the figure is adjusted so that it looks like it does in blender. The pose is not necessarily parameter-equivalent, because of the different coordinate systems and posing methods (e.g. blender supports axis-angle and quaternions, DS does only support Euler rotations).
Not without a lot of hair pulling, chicken sacrifices and general teeth grinding and wailing...it's not totally impossible, but not easy.
In order to make the figure reusable for other scenes and to create poses for it, putting everything into one scene-file gives some problems. This is mainly because of the automatic renaming of objects in the scene (i.e. the numbered suffixes this generates). To get rid of them i can create what is called a figure-asset from it. This is what the group-parameter is for. When setting that parameter to some value the exporter will create an additional directory in the DS-library which is used to store all the data the figure uses. The scene-file it exports then will only have references for the actual figure in it, not the actual data. This also makes DS cache the associated data, which can sometimes be tricky to work around. So i usually let the group be empty, until i do not want the to make any more changes.
Here i set the group to "millighost" and saved the posed figure to a separate file, which i can include into other scenes later. When simply loading the generated scene-file, the bones have exactly the same name like they have in blender.
By the way. Creating shared assets is possible from all objects, not just figures. The exporter actually tries to export meshes for instance only once, even if they belong to different objects, to save disk space.
Back to the scene. The last kind of object that can be exported is the camera. Since the version before the last version or so of DS, a camera can contain the dimensions and aspect ration of the image. This can be very useful when matching a scene in DS with a scene in blender. The exporter can export the camera with these local settings so that the point-of-view is the same in blender and DS. i simply select the camera with all the other objects (except the figure, since i have saved the figure as an asset in the previous post).
First image is the scene from blender when looking through the camera. Second image after loading the scene and the figure and looking through the exported camera.
Oops, i did not notice your response. This is all done without the wavefront obj exporter. This is an addon that writes duf/dsf files directly from blender and can be found here:
https://sites.google.com/site/millighostmix/home/export_dsf_prop
With a short reference manual (kind of), but not many examples. Try it out!
Hair particles (and halos) are actually not supported, only object and group-particles are.
Figured as much. Converting hair to a mesh is not a very automatable process...
Here is a quick ao-render of the example scene (for the fun of it). Completely setup in blender, rendered in DS. Feel free to try it yourself (see 3 posts above for location) and let me know of any problems with it. BTW i use almost always Linux (with wine), so this is probably where that addon works best. I have tried it once or twice with windows (never with mac), so it is quite possible that i overlooked something (backslashes in filenames or something like that).
Are you joking? ever hear of the Subdivision Modifier? what Cycles does not (like Iray and a ton of other render engines) is to support micropolygon displacement.
The whole idea of bringing stuff from Blender into Studio (and not vice versa) is perverse. Anyway, don't feel deterred in your efforts. I will watch, eating popcorn, while you bring into Studio a multi-billion poly particle system <sarcastic grin>.
Thanks millinghost for taking the time to put together this well done topic complete with screenshots. This type of post takes time and I as well as others I'm sure do appreciate you doing it. :)
+1 @Gedd
Indeed.
I would also like to add my thanks and appreciation.
I have not noticed this topic...,,, Thank you very much millghost.!!! It is really good new blender toy for me , as same as hard ops,,,.
I remember when I first import genesis from ds to blender just for making really silly morph,, I used ,your import add on !!
awesome stuff, thank for sharing millighost
I like your sense of humour.
Nice job
Thanks for your hard work. It will be a nice addtion to blender tool set. Keep up the great work.
I'm loving the look of, I guess it's a game you are making. Let us know in this thread when you publish it.
I don't use Studio and the few times I've tried ... well let's just say my head's a few hairs lighter, shall we? However, just for the record, you CAN export particles from Blender as a wavefront obj. I've done it from Blender to Poser. Blender will let you transform the particles to a mesh, and once you do that you can export as normal.
Great product! Thank you for the help, this is something I've been trying to get to work smoothly for a while now.
I'm having a problem with this script...I can't get to export lately.