Is there a way to natively export an Obj Sequence from Daz Studio?

I'd like to export an animation not as fbx, but as an obj sequence from Daz Studio. Is that possible, I haven't found an answer on the forums or google or by scratching my own head clockwise, or counterclockwise or from going on long walks on long piers.
I've had luck with Mixamo using a default model, had it auto bone it, and apply animations, but I want some expressions on the face that I can't get from Mixamo.
For now, I'm rendering in Cinema 4D and Octane or Arnold¹, and the fbx, isn't properly attaching the skin all the time*. I assume I unclicked or clicked a setting that I shouldn't have², and then again, I saw and then forgot how to "rebind" the skeleton to the mesh, in a tutorial I saw...I have to refind that³. It may be that simple...and then I can just export like I have and have the fbx retain the animation, materials and I'm happy.
Right now, I'm uncertain.
So if anyone knows how to:
- Export an obj sequence from Daz Studio natively, or;
- Knows of a third party script that does so, or;
- Knows how to fix the skinning not being bound to the skeleton upon export to Cinema 4D (I think by reseting the binding parameter, idk, forgetting things is new to me);
I need to get passed my current level of skill as demonstrated by this (I'm two months in, back from 2 years away):
https://www.instagram.com/p/BqWgFBkHSkc/?utm_source=ig_web_copy_link
Thank you guys for any help you share!
¹After I learned iRay is NOT being supported anymore by nVidia...I assume their machine learning division makes so much money, they just don't care anymore? I'm sad about this but am praying for access to one of their 2 Peta Flop GPUs). https://www.nvidia.com/en-us/design-visualization/solutions/rendering/product-updates/
²https://www.creativebloq.com/how-to/how-to-move-between-daz-studio-and-cinema-4d
³Not in my watch history, nuts!
*Attached photo


Comments
Probably too late to be of any use to you, but I just wrote a script to do this. Maybe somebody else who needs it will find this thread someday.
This script will export a sequence of OBJ files, one for each frame in the timeline (actually for each frame in the play range).
When you run it, it opens the exporter dialog and lets you configure the settings. Then it opens a file browser and asks for a save filename. The name you give won't actually be used; the actual filename used will have the frame number appended, so if you say "myfile.obj" it will write "myfile_0.obj", "myfile_1.obj", "myfile_2.obj" etc.
I didn't want to create a custom dialog, so it just uses the play range of the timeline to determine which frames to export.
I've only used it a little, so there may be bugs.
HI! All right. Thanks!
Hi everyone, I have been looking for a native obj exporter and this is the only useful post I came across.
Unfotunatelly the file proveded by sean2_7606d08833 does not work for me. After activating it in Daz Studio, it seems to start, but then nothing happens, no output of any files.
I am still desperately looking for a way to directly export obj sequences from Daz Studio.
The Daz support team couldn't help, as they can only forward a "feature request" to the developers without any guarantee that it will every be considered.
Anyone who has the skills to somehow program this, please get in touch with me. I am also willing to pay to find a working solution.
Thank you!
Sorry for resurrecting a dead thread @sean2_7606d08833, I love your script but the selected folder path does not seem to resolve (all files placed at the drive root). I'm not familiar with DAZ's script language, any idea on a fix for this?
I recently updated Sagan to do this.
Any update to this, I tried the script and it doesn't seem to work.
I managed to fix the script. Its not perfect but it does the job for me atleast.
// DAZ Studio version 4.21.0.5 filetype DAZ Script(function(){ // Get the primary selection to use for the file name var oNode = Scene.getPrimarySelection(); // If something is selected if( oNode ){ // Get the node's skeleton var oSkeleton = oNode.getSkeleton(); // If it has a skeleton if( oSkeleton ) { // That is the node we want for the name oNode = oSkeleton; } } // Get the export manager var oExportMgr = App.getExportMgr(); // Define the class name the for Wavefront Object (*.obj) exporter var sClassName = "DzObjExporter"; // Find the exporter var oExporter = oExportMgr.findExporterByClassName( sClassName ); // If the exporter exists if( oExporter ){ // Create a settings object var oSettings = new DzFileIOSettings(); // Fill the settings object with the default options from the exporter //oExporter.getDefaultOptions( oSettings ); // Define whether or not to show options var bShowOptions = true; // Define whether or not to show options before prompting for a path; // requires 4.9.3.22 or later var bOptionsBeforeFile = (bShowOptions && App.version64 >= 0x0004000900030016); // Get the options for the exporter if( !oExporter.getOptions( oSettings, bShowOptions && bOptionsBeforeFile, "" ) ){ // We're done... return; } // Debug //print( oSettings.toJsonString() ); // Set the desired settings for the exporter //oSettings.setStringValue( "Preset", "Poser (1 unit = 8ft)" ); // Set the scale to write the data oSettings.setFloatValue( "Scale", 243.84 ); // Set the lateral axis to X oSettings.setStringValue( "LatAxis", "X" ); // Set the vertical axis to Y oSettings.setStringValue( "VertAxis", "Y" ); // Set the depth axis to Z oSettings.setStringValue( "DepthAxis", "Z" ); // Do not invert the lateral axis oSettings.setBoolValue( "InvertLat", false ); // Do not invert the vertical axis oSettings.setBoolValue( "InvertVert", false ); // Do not invert the depth axis oSettings.setBoolValue( "InvertDepth", false ); // Do not ignore the geometry of invisible nodes oSettings.setBoolValue( "IgnoreInvisible", false ); // Do not weld seams between parent and child bones on legacy figures - deprecated oSettings.setBoolValue( "WeldSeams", false ); // Do not remove vertices that are floating, connected to nothing - i.e. LOD oSettings.setBoolValue( "RemoveUnusedVerts", false ); // Write vertex textures - UVs oSettings.setBoolValue( "WriteVT", true ); // Do not write vertex normals oSettings.setBoolValue( "WriteVN", false ); // Do not write object statements for each root node - i.e. figures, props oSettings.setBoolValue( "WriteO", false ); // Write facet groups oSettings.setBoolValue( "WriteG", true ); // Write facet groups according to whatever the geometry already has oSettings.setBoolValue( "GroupGeom", true ); // Do not write facet groups according to the node it is associated with oSettings.setBoolValue( "GroupNodes", false ); // Do not write facet groups according to surface groups oSettings.setBoolValue( "GroupSurfaces", false ); // Do not write one facet group oSettings.setBoolValue( "GroupSingle", false ); // Write surface groups oSettings.setBoolValue( "WriteUsemtl", true ); // Do not write a material library oSettings.setBoolValue( "WriteMtllib", false ); // Do not collect texture maps oSettings.setBoolValue( "CollectMaps", false ); // Do not convert texture maps oSettings.setBoolValue( "ConvertMaps", false ); // If the version is 4.5.0.114 or newer if( App.version64 >= 0x0004000500000072 ){ // Do not limit export to selection oSettings.setBoolValue( "SelectedOnly", false ); // Do not limit export to the selected roots oSettings.setBoolValue( "SelectedRootsOnly", false ); // Do not limit export to the primary selected root; // this setting overrides SelectedRootsOnly oSettings.setBoolValue( "PrimaryRootOnly", false ); // Do not export items that are parented to the selection oSettings.setBoolValue( "IncludeParented", false ); // Do not triangulate n-gons oSettings.setBoolValue( "TriangulateNgons", false ); } // If the version is 4.9.3.22 or newer if( App.version64 >= 0x0004000900030016 ){ // Do not collapse UVs Tiles oSettings.setBoolValue( "CollapseUVTiles", false ); // Show individual settings in the dialog oSettings.setBoolValue( "ShowIndividualSettings", true ); } // If the version is 4.10.0.73 or newer if( App.version64 >= 0x0004000a00000049 ){ // Set floating point precision; default is 8 oSettings.setIntValue( "FloatPrecision", 6 ); } // Define whether or not to show the options after prompting for a file oSettings.setIntValue( "RunSilent", (bShowOptions && !bOptionsBeforeFile ? 0 : 1) ); // Debug //print( oSettings.toJsonString() ); // If we've got a node, construct the path using the // exporter's last path, the node's name, and the // exporter's extension... // Otherwise, just use the exporter's last path var sInitialPath = ( oNode ? String( "%1/%2.%3" ) .arg( oExportMgr.getExportPath() ) .arg( oNode.name ) .arg( oExporter.getExtension() ) : oExportMgr.getExportPath() ); // Prompt the user to choose a file, // use the exporter to build the title bar caption, // the initial path and the filter var sPath = FileDialog.doFileDialog( false, String( "Custom Export : %1 : %2" ) .arg( oExporter.getDescription() ) .arg( oSettings.getStringValue( "Preset" ) ), sInitialPath, String( "%1 (*.%2)" ) .arg( oExporter.getDescription() ) .arg( oExporter.getExtension() ) ); // If the user didn't cancel and the file doesn't already // exist, or the user wants to overwrite it if( sPath && MainWindow.checkExistingFile( sPath ) ){ const fileinfo = DzFileInfo(sPath); var timestep = Scene.getTimeStep(); var start = Scene.getPlayRange().start / timestep; var end = Scene.getPlayRange().end / timestep; var old_frame = Scene.getFrame; for (var i=start; i <= end; ++i) { var filename = sPath + "_f" + i + "." + fileinfo.suffix(); print("Exporting frame #" + i + " as " + filename) Scene.setFrame(i); oExporter.writeFile( filename, oSettings ); } Scene.setFrame(old_frame); } // Clean up; don't leak memory oExporter.deleteLater(); // We didn't find an exporter with the class name we wanted } else { // Inform the user MessageBox.critical( qsTr("An exporter with the class name \"%1\" " + "could not be found.").arg( sClassName ), qsTr("Critical Error"), qsTr("&OK") ); } // Finalize the function and invoke})();
Sagan does obj sequences too
oh bloody forum hiding new posts again
oh
different thread
Sorry to bring up again this old thread, but I need something like this, a script to export an OBJ sequence.
The codes here seems to not work, someone knows a similar system or a fix for the codes here?
https://www.versluis.com/2021/01/daz-obj-sequence-export/