THIS DOCUMENT IS INCOMPLETE. THE INFORMATION FOUND HERE IS BEING REVISED AND INCORPERATED INTO THIS DOCUMENT.
Also Known As:
Authored By: © 2000, 2006 Rob Whisenant
ERC consists of a number of methods for remotely controlling various channels within Poser (4+) content. Previously referred to as Enhanced Morph Control (EMC), it has since taken a more fitting name… given that the “Morph” moniker implies a limit to the scope of what is actually possible. ERC, as does its predecessor (EMC), boils down to an exploitation (otherwise known as a 'hack') of the internal data found in Full Body Morphs (FBM); a feature implemented in Poser 4. The “channels” that can be influenced by ERC span the gamut of those within Poser's content files, with a few exceptions…
ERC's predecessor, EMC, was first brought to the attention of the masses in late June 2000 by Charles Taylor and myself; in a thread on the “Character Creators” forum of Renderosity (I was the moderator back then). The concept of linking a property to another wasn't new by any means, in fact higher level applications had been doing it for some time. Poser even had a simplistic means of doing it… it was getting Poser to use some form of expression, that was the challenge.
It all became public knowledge when Charles made a post looking for a way to “…make a morph channel affect more than one body part.” In answering his post, I first stated that it wasn't possible. I didn't want to elude to my findings yet, which were later labeled Partial Body Morphs (PBM), because I needed to pin down the specifics of how it worked before I tried to explain it to someone else; I was stalling. He replied with findings of his own on what later came to be known as Joint Controlled Morphs (JCM), forcing me to speak up. JCM had been something I'd been attempting in the months prior but failed to place the data in the correct location… I'd been trying to put the code in a controlling channel and point it at the slave, when it should've been the opposite (at least, to operate the way I intended it to).
At the point that Charles asked about the possibility of performing such a task in Poser, I'd been fiddling with it off and on for a couple months… but I had become frustrated with it and shelved my work (I was serving my country at the time, and my duty to country had higher priority). When I first began pursuing this, I was no stranger to the cryptic internals of Poser's files… but I didn't yet completely understand them. A lot has changed since then .
Focus at that point seemed to be on controlling morph targets, so naturally the next candidate was conforming figures (i.e. Clothing; this later came to be known as “crosstalk”). Eager to find a solution, Charles and I, independently, set after it. It wasn't long… we already had the basic concept nailed. Tutorials on how it was accomplished came within a matter of days and EMC was born (you're reading the evolution of mine, Charles' can be found at the link above). Aside from the initial thread, for whatever reason (or perhaps no reason at all), Charles and I headed our own directions. He seemed fixed on conquering the conforming issue on a grander scale, I was hungry for the specifics of “why?” and “how?” it worked… and if there was more.
Beginning a month or so later, having the information fairly fresh in my mind, I couldn't “leave well enough, alone”. The newness, and shock of actually getting it to work, began to wear a little thin and it occurred to me that what we discovered could quite possibly affect more than just morphs. So, I began testing; any and every channel I could find. I was ecstatic with what I found. Nulls (valueParm), morphs (targetGeom), rotation, translation, scaling, deformers, lights, cameras… they all worked! One factor that slowed research a bit was that this was all being explored in my “spare” time …again, I was still in the military at the time and obligations to my country consumed the majority of my day. I had also been developing content to broker via DAZ Productions (the Poser Division of Zygote, at the time)… so it took a bit longer than it could/should have to make publicly known. The first announcement I made, regarding my continued research and EMC's evolution into ERC, was in late March 2001. Since then, I don't think I could count the number of times I've tried to explain it… even to a few folks at Curious Labs (the previous owners of Poser). But, I digress, I'm far from done… (see DAZ|Studio).
Simply put? The automation of [multiple] parameters based on the manipulation of one (or many).
A method much like Full Body Morphs (FBM). The difference being, instead of the controlling channel being located in the “BODY” actor of the figure, it can be placed in any actor. This method of ERC has been used quite extensively in several figures to date, beginning with DAZ's 2nd generation Millennium figures. This method allows you to place the controlling channel in the body part you would logically want it. For instance, you have a morph for the breast size of Victoria (2), or pectoral size of Michael (2)… instead of having to adjust a morph for both the right and left collars, you place the control channel in the chest group and have it simultaneously control both of them.
A method in which joint rotation channels can be linked to adjust morph channels as the actor rotates (axis of rotation being at your discretion). This is useful because you can accomplish things like having the elbow of your figure bend, and a flex morph for the bicep is adjusted accordingly. This method, when used correctly can give your figures more realistic movement without the tedious work of adjusting morphs every time a joint is moved.
A method in which joint channels can be set up to control other joint channels. This could be useful in a number of ways. You can accomplish things like rotating a bicycle crank, and having the rear wheel follow in kind. Or, cascade like child joints of a figure to mimic that of the parent, for things like swimming fish where smooth transition across multiple groups is needed.
A method as useful as the others, imagine being able to adjust a morph for the flexing of a bicep and having the elbow bend depending on the amount of morph applied.
aka “Super Conforming”
A method used to compensate for problems such as body parts poking through clothing when they are placed in extreme poses. This method, when used in compound cr2s, can be set up to adjust morph channels in conforming clothing figures when the target figure is positioned, eliminating the peek-a-boo body parts.
A method used to accomplish things like adjusting a morph for, say a figure's face, that decreased the distance between the eyes… Well, you'd also need to translate the eyes to into position so that they fit into their sockets and still rotate about the centerpoint of the eyeball.
Useful for things like having a mechanical device, that has a track to follow, be able to do that as the base of said device rotates.
A method that can be used for things like the animating of a ball that compresses as it translates toward a wall or the ground to simulate the effect of inertia.
I've merely described a subset of relationships between joints, morphs and translation in the paragraphs above. There are, however, numerous correlations that can be created beyond these. If you are interested in a much more scientific look at the posibilities, take a look at the tutorial by “VK”, located at http://www.atlantis23.com/arc_download.html.
Every method of ERC follows the same structure, that is to say it uses the same 4 statements. There are actually 6 different forms of ERC, 5 of which are comprised of the first 4 statements, and 1 comprised of all 5. The statements are as follows:
In an effort to help you realize the potential of these statements, I've included a table below. Pick any item in column A, match it up with any item in column B, and with the exception of “FB” and “PB”, place the word “controlled” between them and you have a “method”. Keep in mind, because all methods are based on the same theory, all methods can be cascaded off of one another. This also makes them susceptible to loops, which in most cases would be undesirable because the effect would be exponential… and likely cause Poser to become unresponsive and/or crash.
|Figure Specific & General Overall|
|FB - Full Body|
|PB - Partial Body|
|N - Null (used in FB & PB)||N - Null (used in FB & PB)|
|M - Morphs||M - Morphs|
|J - Joints (XYZ)||J - Joints (XYZ)|
|T - Translation (XYZ)||T - Translation (XYZ)|
|S - Scale (XYZ)||S - Scale (XYZ)|
|PS - Propagating Scale (XYZ)||PS - Propagating Scale (XYZ)|
|Tpr - Taper||Tpr - Taper|
|TOff - Translation Offset (XYZ)||TOff - Translation Offset (XYZ)|
|Foc - Focal Length||Foc - Focal Length|
|H - Hither Distance||H - Hither Distance|
|D - Dolly (XYZ)||D - Dolly (XYZ)|
|Rll - Roll||Rll - Roll|
|Ptch - Pitch||Ptch - Pitch|
|Yw - Yaw||Yw - Yaw|
|CamAs - Camera Auto Scale||Camas - Camera Auto Scale|
|CamAc - Camera Auto Center (XYZ)||CamAc - Camera Auto Center (XYZ)|
|CamAf - Camera Auto Focus (XYZ)||CamAf - Camera Auto Focus (XYZ)|
|Ss - Shadow Strength||Ss - Shadow Strength|
|Dms - Depth Map Size/Strength||Dms - Depth Map Size/Strength|
|Kd [R/G/B] - Red/Green/Blue Value||Kd [R/G/B] - Red/Green/Blue Value|
|KdI - Color Intensity||KdI - Color Intensity|
|LfoS - Lite Fall Off Start Angle||LfoS - Lite Fall Off Start Angle|
|LfoE - Lite Fall Off End Angle||LfoE - Lite Fall Off End Angle|
|LaSD - Lite Atten Start Dist||LaSD - Lite Atten Start Dist|
|LaED - Lite Atten End Dist||LaED - Lite Atten End Dist|
|Mag - Magnet||Mag - Magnet|
|MagB - Magnet Base||MagB - Magnet Base|
|MagZ - Magnet Zone||MagZ - Magnet Zone|
|WvP - Wave Phase||WvP - Wave Phase|
|WvA - Wave Amplitude||WvA - Wave Amplitude|
|WvL - Wave Length||WvL - Wave Length|
|WvSt - Wave Stretch||WvSt - Wave Stretch|
|WvAN - Wave Amplitude Noise||WvAN - Wave Amplitude Noise|
|WvFN - Wave Frequency Noise||WvFN - Wave Frequency Noise|
|WvSin - Wave Sinusoidal||WvSin - Wave Sinusoidal|
|WvRect - Wave Rectangular||WvRect - Wave Rectangular|
|WvTri - Wave Triangular||WvTri - Wave Triangular|
|WvTurb - Wave Turbulence||WvTurb - Wave Turbulence|
|WvOff - Wave Offset||WvOff - Wave Offset|
As mentioned above, Poser provides 6 unique forms of ERC:
This form of ERC is used to add the value of the controlling parameter to the value of the controlled parameter, applying the result to the controlled parameter.
This form of ERC is used to subtract the value of the controlling parameter from the value of the controlled parameter, applying the result to the controlled parameter.
This form of ERC is used to multiply the value of the controlling parameter by the value of the controlled parameter, applying the result to the controlled parameter.
This form of ERC is used to divide the value of the controlled parameter by the value of the controlling parameter, applying the result to the controlled parameter.
IMPORTANT: Care must be taken to prevent a divide by zero condition (whereby a value of 0 is specified for the controlling parameter), as it will cause Poser to crash.
This form of ERC is used to divide the value of the controlling parameter by the value of the controlled parameter, applying the result to the controlled parameter.
The most prolific and the first to be discovered, this form of ERC is used to control the value of the controlled parameter by the result of an expression (a ratio multiplied by the value of the controlling parameter), applying the result to the controlled parameter.
If you've made it this far, there will likely come a time where you'd like to have one channel affected when more than one other channel is adjusted. This is possible by way of the example below. As you can see, all your doing is simply using the same 4 statements stacked on top of one another… referencing different channels.
interpStyleLocked 0 // (for reference purposes) valueOpDeltaAdd // Identifies the following as the controller Figure 1 // Control Figure BODY // Control Actor FBMObese // Control Channel deltaAddDelta 1.0 // Control Ratio valueOpDeltaAdd // Identifies the following as the controller Figure 1 // Control Figure BODY // Control Actor FBMEmaciated // Control Channel deltaAddDelta -1.0 // Control Ratio
In contrast, you will also likely encounter situations where you want one channel affecting multiple others. The important thing to remember here is that in every case you aim to use this technology with your own work, you MUST place the ERC declarations in the slave channel. The slave being the channel where you want the effect to take place, and the master being where you want control to stem from.
One thing to keep in mind is, though you can place the master channel in an actor of the hierarchy and affect the actor(s) above it… due to a redraw issue in Poser, any link established beyond an actor that is greater than a single level higher (e.g. Grandparent; the parent's parent) may not redraw until something is done to force Poser to redraw the scene (like moving the camera).
This also brings up the topic of cascading control or dependency hierarchies. By placing ERC statements in a slave channel and then also placing ERC statements in that channel's master (to yet another master), you effectively cascade control from the topmost master in the chain down to the very last slave. It doesn't stop there either… because, you can branch control at any level and create subsequent hierarchies within. Complicated? Sure…
Some have asked whether ERC can be “injected” from an external file. The answer is yes, but [so far] it cannot be removed in the same manner. If multiple attempts at injecting ERC are conducted, what will happen is, Poser will stack each subsequent attempt on top of the previous attempt. Things can get pretty sticky, pretty quick…