Iuvenis_Scriptor opened this issue on Sep 30, 2009 · 17 posts
Iuvenis_Scriptor posted Wed, 30 September 2009 at 2:24 PM
I'm working on an M4 figure that uses a couple dozen spun dials from four or five different Daz morph packs, a few custom Joint Parameter values, and several custom morphs on each Collar body part. I've enslaved my multitude of dial spins to five Master Parameters for ease of use. Since nearing completion on the figure itself, I've been grappling with how to legally redistribute it. The following method looks promising, but my tester experienced some unexpected bugs with it.
As I hoped, testing shows that the Master Parameters and any third-party dials have absolutely no effect on the figure (which loads essentially as default M4) before INJecting the third-party morphs but have exactly the desired effect after doing so. The custom JPs are preserved, and all custom morphs work with or without the INJections. I'm only beginning to learn the technical side of Poser, but I think this works because the channels that the Master Parameters reference are not really gone, just empty and invisible. That's probably why the Master Parameters don't do anything before INJecting the dependent morphs (as would be expected) but seem to magically remember which morphs to enslave and at what rate once they are INJected. Therefore, unless the user has all the morph packs that I used (M4/V4 Morphs++, H4, M4 Enhanced, V4 Muscle Morphs), he/she's stuck with a blank M4 figure that has nothing more than a few custom JP values and a bunch of custom morphs in the Collars.
Problem solved, right? Wrong. My beta tester reported PMD calls, texture calls, and Master Parameter dials that did absolutely nothing even after the INJections. I soon fixed the PMD calls, but the texture calls persist even though I've made all material zones blank and even used the Find function in Notepad to eliminate any phantom texture references lurking in the guts of the CR2. The Master Parameters still aren't doing anything either. Does anyone have any idea why it works perfectly fine in my P8 Runtime but not for the tester? I would greatly appreciate your help!
markschum posted Wed, 30 September 2009 at 6:46 PM
You can use rtencoder to distribute your cr2 intact. It encrypts the file using another file as key so you need the key file to decode it. Use the base cr2 or m4 geometry file as the key and you are OK .
If you want another tester I can have a look at it for you . PM me if you want to do that .
Iuvenis_Scriptor posted Wed, 30 September 2009 at 7:04 PM
I thought of RTEncoding, but the product uses multiple third-party morph packs, resulting in a five- or six-layer encryption. Such a steep inconvenience might be too big of a turn-off for potential users.
Thanks for the offer for testing! I'll send you the files shortly.
markschum posted Fri, 02 October 2009 at 9:19 AM
I tried this and simply got an exploded figure above the hip. It may be a fault with my system so I am unable to do much with it sorry. I did a scan of the files and did not get any odd texture requests.
Iuvenis_Scriptor posted Fri, 02 October 2009 at 10:34 AM
The other tester experienced an exploded figure on a couple of attempts, too. Which software did you use?
markschum posted Fri, 02 October 2009 at 11:54 AM
I am on Poser 7.
lesbentley posted Fri, 02 October 2009 at 6:27 PM
@ Iuvenis_Scriptor,
There is a lot of information in your post (which is good), but I'm finding it hard to work out what question you are asking. Also, whilst you don't say it specifically, I get the impression that you are distributing a cr2. I wonder if this is wise, and why it can't be distributed as a pose file.
I think you need to break the problem down into individual parts/questions, and tackle one part at a time.
Iuvenis_Scriptor posted Fri, 02 October 2009 at 8:30 PM
Okay, let me see if I can break the issue down in a more comprehensive way.
I've created a feminized version of default Michael 4 using a few custom Joint Parameter values, body part rescalings, and a combination of M4/V4 Morphs++, M4 Enhanced, V4 Muscle Morphs, and Hiro 4. I then consolidated the two dozen or so dial spins by enslaving them to four Master Parameters: MichelleBody, MichelleFace, MichelleScaling, and MichelleDetails.
I also added about four or five completely original morphs to each Collar and combined them via enslavement to a Master Parameter. Together, they make the shoulder/armpit narrower and more square. There's also one more original collar morph that fixes an unnatural tricep bulge that arises when morphing Michael into Michelle.
I then REMoved all third-party morphs from the figure, leaving only the Joint Parameter adjustments, the full-body Master Parameter dials, and the dials for all of my custom collar morphs, both Slaves and Masters. This left all third-party morph channels at least empty if not invisible as well.
I then made all material zones blank, saved the resulting CR2, and reloaded it in an unrelated Poser scene. I found that after re-INJecting all necessary third-party morph packs, the Master Parameters worked as they did when first created even thought they expectedly had no effect whatsoever before re-INJection of the enslaved morphs. My Joint Parameter customizations and original collar morphs were also predictably preserved.
Finally, I created a custom INJection pose to automatically INJect all necessary third-party morphs with a single double-click. Testing of the pose showed perfect functionality, as did testing of the package as a whole.
My biggest question is why the end result works perfectly for me but not for my testers. As far as I can tell, I've removed everything from the files that refers to content that only I have. Yes, I am hoping to create a legally redistributable CR2.
The reason I'm not simply using a dial-spinning pose is because the figure is intended as a base for custom female characters, which means the user needs to be able to combine the Michelle morphs with other custom character poses without having to manually average out or add/subtract each parameter value involved.
RTEncoding is also impractical because the use of multiple third-party packs results in a four- or five-layer nested encryption, and such an inconvenience would probably be a turn-off to potential users.
The people at Daz keep advocating an ExP script, but based on what they've told me about what exactly ExP is, it seems more suited to a vendor who's created a suite of wholly original morphs than for someone like me.
lesbentley posted Sat, 03 October 2009 at 11:54 AM
As far as the texture maps go, if Poser is asking for a map, then there must be a reference to that map somewhere in one of your files (or in a third party file that one of your files is calling, though that seems unlikely). There are other types of map besides texture maps, so to be sure there are no map calls in your files, you need to search for any and all occurrences of these text strings:
textureMap
bumpMap
reflectionMap
transparencyMap
"Master Parameter dials that did absolutely nothing even after the INJections". It's hard to diagnose what is causing that problem without actually seeing the files in question. It's most likely one of two things. Either the deltas are missing from the slave channels, or the name of the master channel does not match the name pointed to in the slaving code. Another thing that can cause problems is if the 'figure number' (:#) in slaving code in a pz2 does not match the figure number in the cr2. The remedy for this is to leave the figure number out of any slaving code in a pz2 (but NOT in a cr2). Also to make your cr2 more compatible with DAZ pz2 files, you should insure the figure number in the cr2 is ":1".
Iuvenis_Scriptor posted Sat, 03 October 2009 at 12:25 PM
I'll do a search-and-destroy of those map-calling strings, but what code strings do I look for to evaluate the other possible issues you mentioned?
lesbentley posted Sat, 03 October 2009 at 2:31 PM
Searching the cr2 for the string "valueOpDeltaAdd" should find any slaving code in the individual morph channels. The string "valueParm" will find any FBM master channels. A slave channel can be slaved either to the internal name of the master channel "valueParm *" or to the dial name of the channel "name " (where "" represents any name), but it is usual to slave to the dial name. You can work from the BODY out, pick a valueParm channel in the BODY actor, eg:
valueParm PBMCC_27
{
name MyMorph
Then search for "MyMorph" to find any targetGeom (morph) channels slaved to it. First you should apply all the injections, then save the figure back to disk with a new name, then search that new cr2. The same search strings can be used in a pz2. You can also do a case sensitive search of a pz2 for the string "Figure ", if you find the string "Figure " to be followed by a number, eg:
Figure 1
BODY:1
Then I recommend that you edit these to become: Figure BODY
Only do that for a pz2, don't do it for a cr2.
As I said in my last post, it is best if figure number in the cr2 is ":1", If the figure number is for example ":3", then I recommend that you do a global Search & Replace of ":3" with ":1", and of "Figure 3" with "Figure 1". If you can't resolve your problems, I would be happy to take a look at the files for you. I don't have any morph packs, so would not be able to test everything, but I might be able to spot a mistake in the coding. I'm a bit pressed for time though, as I am going away for a few days on Monday morning.
Iuvenis_Scriptor posted Sat, 03 October 2009 at 4:56 PM
Okay, I've found out a couple of important things:
1) All "Map" strings are followed by "NO_MAP", and searching for "jpg" and "Textures" both returned nothing.
2) The slave morphs are keyed to the internal names of their masters rather than the dial names.
Also, I'm not sure why you're talking about PZ2s, because the only PZ2s are the INJ/REM poses for the third-party slave morphs. The figure itself is in the form of a CR2 and PMD sharing the same directory.
lesbentley posted Sun, 04 October 2009 at 5:42 PM
Quote - 1) All "Map" strings are followed by "NO_MAP", and searching for "jpg" and "Textures" both returned nothing.
Then it is hard to see how your tester could be getting texture calls. The only thing I can think of is that the texture calls must be in the third-party INJ files that you mention. There could well be nesting here, with the INJ files calling other files that call yet other files that might contain texture calls.
Quote - 2) The slave morphs are keyed to the internal names of their masters rather than the dial names.
That is not the most common way to do it, and not a good idea if we are talking about channels named PBMCC_## or PBMDC_##, but should not be causing any of the problems your tester is experiencing.
Quote - Also, I'm not sure why you're talking about PZ2s, because the only PZ2s are the INJ/REM poses for the third-party slave morphs. The figure itself is in the form of a CR2 and PMD sharing the same directory.
I mentioned pz2s because I was not sure if you were using them or not, but wanted to keep all options covered.
nruddock posted Sun, 04 October 2009 at 6:01 PM
Quote - > Quote - 1) All "Map" strings are followed by "NO_MAP", and searching for "jpg" and "Textures" both returned nothing.
Then it is hard to see how your tester could be getting texture calls.
It's possible that if the tester is using P7 or P7SR1 that if you've used either ":NO_MAP" or "NO_MAP" (with the quotes) rather than just NO_MAP (without quotes).
This was dealt with by P7SR2 (P7SR2.1 also fixed some other weird cases, but these don't appear relevant).
pennykay posted Tue, 13 October 2009 at 2:45 PM
I hope this is okay to post here.
I am trying to get my morphs to work with my V4++ Girl 4.
V4, there is no problem but the girl 4 will not work.
I was told that I need to save the girl4 with v4++ morphs as a cr2.
I don't know how to do this and I don't know where to save it.
Any help would be appreciated.
Kindly,
Penny
markschum posted Tue, 13 October 2009 at 3:52 PM
to save a figure as a new cr2 file simply select the figure in the scene and with the figures library open, click the + sign , you will be prompted for a name. The figure gets saved in whatever folder is open in the library panel.
pennykay posted Tue, 13 October 2009 at 7:17 PM
That worked, thanks so much!
Cheers,
Penny