Question for those who use both Poser and DAZ Studio
Having been a Mac Poser user from version 1 (omitting only v7 pro), I have many Runtimes worth of Poser content, and more recently, some DS only content (for figures not natively compatible with Poser) which I am keen to leverage in Poser. More specifically, poses for human figures.
Drawing inspiration from the late, lamented Ralf Sesseler (Dimension3D), I looked at his DSONLoader.py script for Poser, which relies on the DAZ supplied, but less than fully supported DSON Importer. Then I looked at the numerous .duf and .dsf files associated with the products I'd like to use directly in Poser and realised that (at least in the cases where they are not gzip compressed files), DSON appears to be DAZ's extensions of JSON text file format, which Python has bundled modules to read directly.
With these things in mind, and really looking for a way to avoid any need to use unsupported software, I have constructed a python script which will allow a user to apply a pose to the currently selected figure in Poser (in this initial example, V4) having selected the pose (a .duf file) with an os file browser window from within the DS Content folders. Now, admittedly the poses were originally intended for G3F, so I went looking for freely available DS scripts which do the opposite conversion, allowing DS users to leverage their V4 content collections on later figures. To my delight, I discovered DS scripts by DaveGB on ShareCG, who is still active there and in the DAZ forums. The scripts are able to be opened in a text editor, and though not python, were obvious enough in their function that I could determine reverse conversion factors to make a G3F pose place V4 in a similar attitude (though with caveats that extra torso, metacarpal, metatarsal and heel actor parameters either need to be incorporated into V4's existing actors or ignored and that there doesn't seem to be the same order of rotations in some actors like thumbs).
I have had some initial success in decoding DSON files, including discovering that my preferred text editor BBEdit was transparently opening gzipped .duf files and showing me their uncompressed content, causing confusion over why some .duf files would successfully apply in poser and others would crash the script with JSON decode errors. Thankfully, the python-bundled gzip module came to the rescue and allowed me to correctly decode those files and apply their pose information to the figure.
Feeling buoyed by that success, I wonder, now, whether I have been re-inventing the wheel, and whether there are other, possibly commercial products out there which already do the same thing for a much wider range of figures than just G3F->V4. The framework I have created is certainly amenable to conversions of other figure type poses, and my next step will be to add loading of props, which seem to have all the requisite vertex and polygon information accessible, though UV mapping is extracted to an external file.
I would appreciate any comments on whether to push ahead, or just pull my head in. I have some small experience as a secondary vendor (Faceoff's Real Skin Shaders) with support, but no network of reliable product testers for cross-platform evaluation. Does a forum exist for tester evaluation/references?
I'm not aware of any products that convert poses from any Genesis version to Victoria 4. But, that would be interesting.
I do know that a few people do not like using DSON Importer. So bypassing it would be worth while.
@willdial Thanks for that. I shall continue. I'm sure DSON will continue to have some advantages over anything that I write, since it builds on inside knowledge of DAZ Studio methods and mechanisms, while I'm having to reverse engineer and infer from what others have investigated and expanded on. I continue to be pleasantly surprised that both Poser and DS have been built on functionality that is straightforwardly accessible to Python scripts, like gzip compression of files, though I'm still struggling to find any reference to how Poser's PMD files are compressed/composed.
DSON, most obviously knows how to interrogate Studio's configuration for where Runtimes and data are stored, so I'm currently wading through .ini files to gather such information. I don't know whether DSON can deal with DAZ encrypted content, but I have no plans to even try to hack my way in to that potential hornet's nest.
Just for information, Dragoonstorm made a commercial product to convert .pz2 to .duf available on DAZ3D.
@barnardino Thanks. In the interest of preserving symmetry in the universe, I shall continue. :-)
@anomalaus assuming you have DS, could you load a G3 pose into V4 in DS and save that pose and export it that way?
I am also a Mac user. I recently decided to experiment with converting G3F poses to G2F and exporting them from DS to Poser. I find that Genesis 2 poses are sort of a rosetta stone for posing: you can apply them to almost any figure, including V4, and get close enough to work with. I discovered that someone had posted a nifty script in the DAZ forums to convert G3 poses to G2, though finger and toe conversion is imperfect (conversion dosa file. That's easy to fix. Moreover, for Windows users, he built a python script that opens an Explorer window and will batch convert all the poses in a folder. I tried running it on my Mac, and nothing happened. I don't know spit about scripting or python, but maybe you could adapt the script to work with Finder and V4. Otherwise, it is a tedious process because once you do the conversion, you have to export each pose to Poser using the Poser Format Exporter
I converted a set of G3F poses (Ilona's Beautiful and Bold).Here is one of those poses applied to, left to right, G2F, Dawn SE, Pauline, and V4 (all figures base, all with @Biscuits hair with--go Biscuits!--fits for all figures used).
So, until someone makes batch conversion possible on the Mac, you REALLY must want to convert G3F poses to make the trouble worthwhile using this approach.
@ghostship Yes, though many of the converters are commercial and all generate essentially duplicate pose files and complicate the workflow. Though, I will admit, the conversion only needs to happen once. Yet DS comes from a situation where they needed to directly support the huge back-catalogue of Poser format content. I think it's about time that the reverse was possible, at least in an initially limited sense, without resorting to running two applications in parallel or doing a batch conversion to duplicate potentially directly accessible content or using an unsupported black box plugin.
@RobZhena Indeed! G3F has a significantly different default T-Pose to V4 and G2F is much closer IIRC. Your experience on Mac with inoperable Windows python scripts is exactly the situation I wish to eliminate. It almost invariably happens that talented windows Poser Python scripters utterly neglect the Mac Poser users as they don't have access to a Mac for testing and/or no interest in acquiring the necessary cross platform compatibility skills to make their scripts work on the Mac too. (I understand, why would you want to give up all the lovely bells and whistles that Tkinter offers when you've spent so much time prettifying your script's GUI, just because the Mac implementation of Tkinter is terminally broken [Thanks Apple]). Yet that's not universally true. wxPython can do most of what Tkinter can and has cross-platform interoperability.
Finally, I admit it, I'm a snake-head. Python satisfies the creative, problem-solving aspects of my personality that I can't quite express fully through Poser and/or postwork artistry (at which I self-critically suck). Bringing windows-available tools to the Mac is my mission, having worked previously with Faceoff to create the Mac GUI for his Real Skin Shader products. I don't have easy access to Poser on Windows (though my iMac is dual boot with Windows 10, unless the latest MacOS Sierra update has broken that, yet again) as I'm not comfortable with having to de-register my Mac Poser license to re-register it on the Windows bootcamp installation every time I want to test something (never used to have to do that).
I use the DSON importer from Dimension3D to get props into Poser. Apart from the texture/materials puzzle it works reasonably well. There are some props which have problems, but those seem to have problems in all 3D software i tried.
I never thought of converting genesis poses to Poser for three reasons - 1) I have 10s of thousands v4 poses already and 2) importing them one by one is very time consuming, and 3) adapting the poses from g1/g2/g3/g8 takes can be tricky.
But if import and conversion could be automated, i would certainly be interested in having the ability to be able to use specialized poses (prop, job.action oriented poses)
@wimvdb Yes, that's where I started, but all D3D's script does is invoke DAZ's DSON Importer, so both components of that workflow are now unsupported by their respectively deceased and DS focused authors. I also have DSON Importer hang on me regularly, so it's got to be bypassed completely, if at all possible.
This whole project was conceived because I found a DS-only product consisting of props and poses I wanted to use in Poser (Slime Attack). And because improving my Python skills and Poser's ability to make use of content derived from external (non-Poser-supporting) sources is always a win for me. If it can help the wider, Poser-loving community, that's also a worthy goal.
The original D3D script would actually iterate over all the selected .duf/.dsf files in a given directory, and I have maintained that functionality in my script, as well. I may even add the capability to recurse directory trees. If one is importing a folder full of props, that's a simple matter. The script can currently load a sequence of poses onto the currently selected figure over subsequent frames (including multi-frame animations). It would be quite straightforward to have the poses converted and saved to the library without applying them to the figure, as I have already developed an extensive suite of scripts for saving and loading poses to and from the library.
I originally created the load and save scripts to form the basis of an ability to load and eventually save multi-figure poses with a single double click directly from the library. I.e. Load your clothed figure, or load the base figure and subsequently clothe it, then load a single, multi-figure library pose which can automatically apply a pose to the base figure and an appropriate, fitting pose to each pre-defined item of conforming clothing the figure is wearing. I will probably have to create a GUI for configuring and defining which clothing items will load with the base figure, and in what order to make this a commercial grade product, and GUIs are not my forté. Still, there are plenty of well-functioning wxPython examples around to poach/borrow/license ideas from. ;-)
I'd be happy to work on a GUI if you wanted some help.
@Snarlygribbly Absolutely, and I'm also happy to assist beta-testing EZDome, as I was pleased to be able to contribute to it's Mac GUI completion.
Non-virtual life will interrupt my forum overwatch over the next couple of days, and the more I research, the more I find the footsteps of those who have trodden a similar path before me. When I work out how, I will attempt to PM you my email.
Alright, another step forward. Painfully getting my head around DSON file formats and Content-Root-relative URLs that look like absolute paths.
Script can now determine when a URL references a separate DSON format asset file and successfully read it. Progress!
Once I have all the vertex, UV, polygon and material assets loaded I can start building a prop in the Poser scene. Soon!
OK. More progress. I have decided how I will proceed in the face of Poser Python API's inability to assign vertices to body part and material groups. And no, I can't make use of the grouping tool from within python. I shall have to resort to creating a temporary Wavefront .obj file (and possibly .mtl as well), write the vertex, uv, facet and grouping information to that, and then tell Poser to load it. What a kludge!
Though it might be simpler to just place the object definitions in a geomCustom block and create a prop file to be loaded from the library, I prefer to go with the instancing concept (although Poser has yet to support such a feature) and separate mesh objects into the Geometries hierarchy, so cloned props with common mesh but different materials don't bloat the library.
The script can currently load .duf poses intended for G3F and apply them to (separately DSON loaded) G3F figures or convert and apply them to V4 figures in the scene. The script will also correctly load any prop (well, all those I've tested) which has a single, default material group containing all the vertices, as well as the base unimesh of a G3F figure (all vertices in a single group, so far).
Once I implement the vertex body-part/material grouping, I can start on creating the bones and unweightmapped body parts for articulation. Still need to find reference material to translate dual quaternion weight mapping (one float per vertex per limb, with dummy limbs to separately weight map twisting from bending) into triax weight maps to suit Poser's available skinning algorithms .
I'm testing the script in both PPro2014 and Poser Pro 11.
One more hurdle surmounted.
Script can now create a grouped prop in the Poser scene. I have left the direct geometry creation code in for the cases where only a single polygon group and material exist for the prop, in the hope that, eventually, Poser will support assigning vertices to groups directly via the Python API.
When the DSON file specifies more than one polygon group, I have resorted to creating a temporary Wavefront OBJ file with the facet grouping and material information and wrangling the ImExporter to load the obj file into the Poser scene.
So far, the loaded prop is unrigged (I'm using Genesis 3 Female.duf as the DSON file being loaded), but opening the grouping tool shows me that all of the appropriate body part groups have been correctly created. Woo hoo!
Next step will be to wrestle with materials, and eventually rigging (shudder. Not looking forward to trying to work out how to translate dual quaternion weight maps into triax).
Another step forward (foot dragging due to the need to debug Poser Python API constant shenanigans during Wavefront OBJ import):
The script can now load and simply texture .duf/.dsf props and unrigged Genesis 3 Female figure meshes. Simply, in the sense of coping with diffuse, specular and transparency maps plugged into the Poser Surface root node, including automatically locating referenced image files within the Poser Runtime Libraries (or at least ask the user for help locating files external to the known libraries as Poser does normally).
I've decided that I should clarify, again, the issue with vertices and polygon/material groups in Python. The python methods DO exist to add vertices to an existing material or polygon group. What is inexplicably missing is the ability to create those groups in a newly created geometry directly from within python, in order to add vertices to them. As noted previously, ad nauseam, python scripts can't drive the Grouping Tool sufficiently to do this.
That's look very promising :)
Where are we going ? Will we able to load a rigged Genesis 3/8 ? (a part the Dual Quaternion weight map)
@barnardino Poser doesn't do dual quaternion.
@eclark1849 bad english sorry ( i mixed french w/ english) :) i wanted to say something like "minus the Dual Quaternion weight map"