Poser Binary Morph Data .pmd file format documentation



  • @englishbob LOL, Life of Brian quotes too!! Thanks for that link. Again an .exe file I can't use directly (with old 32 bit windows plugins required too), but the doco definitely doesn't seem to refer to Poser .pmd files at all. Nerd3D's tutorial on .pmd binary morphs implies that a lot of people were afraid to use the format due to the number of bugs during development, though I never found the bugs to be an issue for me. It was more the obfuscation factor that frustrated me. Coming from a programming background, bugs in other people's software simply meant do-it-yourself, or do without.



  • @anomalaus As far as I know, the things that PLH used to help with can now be done more easily within Poser itself; it's not an area that I get involved with very much.

    I don't know if PMD morphs definitely gave me any trouble, but I felt I had enough anecdotal evidence to feel safer if I removed them from library items that used that format. I don't bother going that far any more, but I still run Poser 11 with binary morphs disabled, and the same with compressed file formats. I prefer files that I can hack in a text editor or spreadsheet. :)



  • @anomalaus
    I made a Python lib some years ago to read/write and deal with Poser PMD-files. Round about 1000 Lines and very little description :)

    Needs some more testing and description to become useful for others. If you are interested to do this, I can send you a copy.



  • @adp Absolutely!^! Send away! 8-D <Graham's number> Thanks!



  • @anomalaus
    What about an email address I can send this file to?



  • @anomalaus
    I made an upload to sharecg.
    https://www.sharecg.com/pf/full_uploads.php?pf_user_name=adp__

    Look at the end of the script (locate: if name == "main"), change the pathes/filenames to your needs and give it a try.

    For any questions, email to: os-coder@mailbox.org



  • @adp Cheers! I'm about to crash and burn, but I'll email you when I've had a chance to trawl through the python library. Excellent work on this from a single quick scan!



  • @englishbob said in Poser Binary Morph Data .pmd file format documentation:
    ...

    I have no recollection of it going the RDNA > DAZ route, but that doesn't mean it's not true. ;)

    IRRC, a version was available on RDNA. But, it was updated to Beta6 (I think that's the version I tracked down) by the creator and was hosted at a different site, for awhile. Previously hosted versions on other sites, again IIRC, weren't updated to the latest version.



  • As far as I'm aware the .pmd format is just the morph data extracted from the cr2 as standard text and then encoded by i think 'gzip' and placed in the .pmd file to make it more compact - the encoding is why we can't read it but the file needs to be decoded back to plane text to make any sense - it's just a list of morph data though similar to that created by Pozers little helper or one of the many other binary injection utilities



  • @adi
    No. PMD-Files do not contain just compressed text. It's a binary representation of morphdata in a special file-structure.



  • I completely forgot..

    I have Binarymorpheditor and have used it a bit. I'm having issues with it with Poser 11, though. I probably need to update it or something. (Won't write the poses appropriately, but I haven't fully figured out the problem yet. Not permissions, though.)

    Anyway, it's pretty nice and has some nice features. Not sure if that helps, but it's pretty informative and easy to use. (It's an external package. It'll read pmd files directly.)



  • After losing several projects to damaged PMD files, including situations when you copy or rename your PZZ/PZ3 files, I just gave up on them completely several years ago.

    So I just never, never, never, ever, in no situation, no matter what soothing things anyone can say, not in dream or in heaven, no shape or form, not by accident or forgetfulness, I'll just never use any PMD, nor will I ever buy any product that uses PMD.

    I lost more work due to PMDs than to computer viruses, so PMDs are worse than virus to me. And just to be safe, every 15 days or so I double-check to see if poser re-enabled PMDs while I was sleeping.

    No PMDs ever!



  • @adp I finally found the time to delve into your PMD python library. Brilliant stuff! Thank you!!

    Good to have exposure to others' styles of coding and use of language features I've not previously dealt with (had to look up @ decorators, heh).

    Successful test-run importing the module into a custom main replacement script to match my path structure (once I had all the module name prefixes on the library methods sorted). Yay!

    Now to boldly PMD where NVIATWAS has never PMD'd before! X-D



  • @anomalaus said in Poser Binary Morph Data .pmd file format documentation:

    @adp I finally found the time to delve into your PMD python library. Brilliant stuff! Thank you!!

    You are welcome. Nice to hear that it works for you.

    Good to have exposure to others' styles of coding and use of language features I've not previously dealt with (had to look up @ decorators, heh).

    If something is unclear to you, I'll be happy to answer your questions. Yes, my coding-style is very pythonic ;)

    Successful test-run importing the module into a custom main replacement script to match my path structure (once I had all the module name prefixes on the library methods sorted). Yay!

    Maybe some extensions could make handling easier for others. Any ideas?



  • @adp I'll send you a modified version with my comments when I get my thoughts in order.

    Here's my addition to the comment block: [AAARRRGGGHH, I can't stand these single punctuation character style formatters this %$#@ forum uses. Go away!][... Clicks on COMPOSE? ... With this blasted Markdown, I can't even see. How am I supposed to format? ...Use the backticks, Luke!]

    # v1.0  20170814     LIB_poser_pmd.py Initial version supplied by ADP
    # v1.1  20170826     Corrected afterBlend keyword to afterBend
    #                    Reduced list indent level in write() method
    #                    Removed extraneous newline following PoserObject and 
    #                    DELTA blocks.
    #############################################################################
    
    version = '1.1'
    

    So, as you see, I've just corrected the afterBlend => afterBend keyword typo (immediately after blendType, so understandable) and tidied the write() method to my OCD satisfaction ;-) (removing excessive indenting and extraneous newlines) so the output matches Poser's own formatting.

    I had a thought of making the written options conform to the supported features of whichever version of Poser the script is run under (since I was testing in PPro2014 while P11 was rendering), since I was running up against version feature discrepancies in another project, but that can get really onerous when trying to decide how many versions to support and how little detail there is in some of the release notes about newly implemented features. It's not like you can 'diff' the manuals, though maybe a 'diff' of a sorted 'strings' output from the applications themselves would be more helpful in determining new keywords each revision supports.



  • @anomalaus Thanks.

    Does Poser not ignore unknown keywords? So, parameters set and known only by version 11 should be ignored by Poser 9?



  • @adp Poser certainly ignores them. Poser 11 would also ignore a misspelt (No, forum compositor, that is not a typo!) keyword that it otherwise could support. The "feature discrepancies" only cause a problem for python scripts running under different versions of Poser, not files written to the library that will be loaded directly by Poser. Though newer version numbers can throw up warnings when loaded in older Poser versions.



  • @anomalaus Ah, yes, you are right. I'll try to support versions. May last a couple of days.