Well, while you'd like to think that I'm 'assuming' this and that so 'obviously', it seems more like you're obviously assuming that I'm assuming.
Only you've got stuck somewhere.
What I try to point out is the nature of working in Lightwave.
Clones, and arrays are distinctly different from instancing.
But this apparently isn't going to sink in.
I was just using the analogy of 'appearances' to try to clear it up.
Oh, well.
As for material properties, Lightwave's Node editor has this real cool node called 'Instance Info' that tells the renderer which of the instances it is rendering, so any combination of nodes can be applied through the 'Gradient' node, to the instances. So long as you put enough keys in the gradient node. Very cool because each of the instances can look different.
It's too bad that the poser scene object doesn't have a method to return the display units it's set for.
Because if you want to support this, and the user is thinking in inches, and you just choose meters by default then all those huge differences that are lurking in the shadows are going to jump right out and bite you.
You should present a widget to ask the user for display units at the start.
At least you found where Poser's declaration of unit relations is.
But as I've said, almost all of the methods are working on the geometry numbers, and what a user sees is just calculated for the interace widgets.
So you can test this. Set the display units for PNU.
Use some simple geometry, like a primitive, or whatever, and move it one unit using the text input next to the parameter dial.
Then change the units to whatever, test them all.
Deselect and then reselect the actor, and the display will change to show you the value for that unit.
Ok, then with the units set to meters, then feet, etc use the simple python window to get the actor from the scene, and then set it's xTran, yTran and so on, and then look at what that does to the position in the scene. One display unit at a time.
Then save your scene, and open the scene file in a general code editor and find the actor by name.
Find the parameters section for each of the translations and go to the line that begins with
k 0 , and the next value is the internal value of the translation.
Doing this you can convince yourself that display units has no effect on the methods unless the method specifically states it takes or returns some other unit.
Display units are only for display. Just a comfort for people who can't think in OBJ.
But if you can get a handle on it you are way ahead, without the confusion of real world relations. You clearly have not been able to free your mind from this.
Poser is not going to be used to manufacture any actual physical thing for real world use.
It is a fantasy world that has it's own fantasy scale and a lot of what is found for sale as Poser props and figures varies radically.
Take a look at how Ken does his birds. Very smart.
He has a generalized scale and then provides presets for the many species which make them a size that is compatable with other popular figures.
Not many things you get make any sense at all.
Overall, what you are doing is pretty much modeling functions.
If you do ALL of the things you listed then it could be useful.
Only I wouldn't look to Poser for those functions, and other people who would think of doing those kinds of things might look instead to Blender.
Well, it's clear we're both frustrated. But I do appreciate you sharing your experience. Just so you know, I understood the difference between clones and instances perfectly from the start.
To be explicit and clear for anyone who comes across this conversation, Poser supports instancing, just like any instancing tool in any 3D app creates and controls. Cloning generates mesh. Instancing does not. No matter how many instances of a prop or figure you put in a Poser scene, they all just point to one mesh (in almost all cases). If you look in the scene file, you can see for yourself that there is only information about how to display the instance, not mesh data. The only time you'll see mesh data in a Poser file or preset is if it uses embedded geometry, which is discouraged precisely because it means that mesh data will be recreated with each duplicate and weigh down the scene.
It's also why you'd want to take the time to externalize your geometry if you're working with your own models.
Yeah, changing materials using instance information is cool. If you notice, I already described how to do that in Blender.
Unfortunately, it's a poor substitute for having instance specific materials for human(oid) figures, and those are Poser's primary purpose. So I can't really fault its programmers for designing materials to work the way they do. While it's inconvenient to have to manage scenery materials across instances, it would have been hell trying to make different characters out of multiple Posette instances that all shared the same materials per material zone.
Differences in units would bite me regardless of what unit I chose if I didn't label it. If someone like Bagginsbill is working in inches (as he explicitly does), and I give him an unlabeled interface, he's going to assume it's in inches like everything else. He'll tear into me just as hard whether I choose PNU or meters for my interface without labeling them.
Just to be clear, I don't care about units in my logic. That's all variables, no numbers. I just wanted to make sure Poser Python wasn't operating based on user choice, and was instead acting consistently. I actually had the Poser Python methods _twice_ operate in the units I had selected (as in multiple times during two separate sessions of Poser, using the Python shell to give a single command). No clue why that happened, but it did. I haven't seen that happen again, so I'm counting on Poser Python methods to consistently work in PNU, not variable user selected units. But because I saw it and double, triple, and quadruple checked it each time it happened, I wanted to make sure that I wasn't being lazy and ignoring a complication.
Since no one has mentioned a problem, all my model logic depends on Poser Python consistently operating in degrees and PNU. Everything you've said so far supports my perception that I must have seen some sort of weird fluke of a bug or something.
Just to be clear (again, pardon), I'm aware of how the interface works in terms of converting units for display. I've mucked in Poser files for much more than a decade now (that's why I'm _very_ familiar with Poser instances and their associated data), so I know how Poser presets store information. My goal is to make my interface consistent with the rest of Poser's UI. Array offset values should be the same units as your displacement and positions, or it's going to be a PITA. I really did expect there to be a method and some codes I could use to check for chosen units.
As it is, I've built a way to pull units from the preferences (yay!), but I don't trust it as much as I would specific API methods. The conversion factor is one line in the preferences file, and the unit labels are another. If I want to double check that the labels correctly match the factors, I'd have to do a whole bunch of testing that right now seems unwieldy. And would leave the script vulnerable to a future change in official PNU to real world ratios (they haven't changed it since P6 came out more than a decade ago, but still, you never know). But now it's vulnerable to the labeling system changing. It's something I'd only have to worry about between versions, but still. I wish I could just use something like poser.GetUnitPrefs() or some such, and not have to hard code so much. I know it makes my code a bit brittle, but it's the best solution I can find so far.
If you're more comfortable and satisfied eyeballing and scaling props and figures to fit what you think looks right depending on what figure you're using, that's truly great. More power to you, and to each their own
. But I already found modeling with that method problematic due to its imprecision, not because I was unclear on the arbitrary nature of choosing a native scale in a 3D app. I started modeling using PNU in Poser and ignoring real world conversion, and progressed to a more consistent standard a while ago. Going back would be a regression for me.
Setting my own scale wouldn't matter if I just worked on single scene projects with no outside content. But because I use content across projects and other people's content, I find consistent and specific scales and units key to realism and quality.
I don't need to "free my mind," though I understand if that's how you think of scaling standards. For me, it's about making models with consistent real world proportions and measurements. If someone wants to scale them after the fact, that works fine.
This is scene management, not modeling, though the two do overlap. While instances are the norm in Poser, it doesn't have any built in instance generation or management tools. Or any other scene management tools, for that matter. It doesn't even have multiple item selection. This tool will (hopefully) generate and manage instances of whole hierarchies of props and figures. Which you can only do in Blender (or Lightwave, or whatever) if you stay in that app (and, as I mentioned, there's not actually a tool to do this in Blender). You can't generate Poser instances from Blender, and Poser instances are not only hugely useful, a lot of very popular products depend on them.
I just used my tool to duplicate (40+) columns in a row in less than a minute. It took longer when I had subdiv on the preview, but turning it off for previewing cut duplication time in half, while of course not affecting the render subdiv. It would be nice to control that actor property via Python, but I'm not currently finding a way. They rendered just as fast as one column, though it did take a bit longer on the Superfly scene prep stage. That would not have been the case if those columns were a single mesh imported from Blender. That probably would have taken _ages_ to render.
Do you have Aslan Court? If so, load up the full scene. You'll see 16 instances of about 5 different figures. If Tomalin made that in Poser (which he probably didn't, he probably made it in DS, which has instance management tools _and_ multiple item selection), he would have had to convert those 5 items into Poser figures from his modeler of choice (Max), then for each one, duplicate it, then position it. That means he would have had to do that 75 times. If he found his materials had a problem during testing, he would have had to make the change to his materials, save a preset for the new material, then apply that new material collection 15 times, or maybe even apply a single material 75 times. If he found that he wanted to change the model a little, and therefore needed to change each instance's position a little, he would have had to go to each one and change its position by hand.
If I, as someone who owns Aslan Court, want to use it, I have to perform similar tasks. If I want to make all the lights into emitters to light my scene, I have to change each and every light material by hand. If I want to get rid of parts of the scene, again, I have to do that deleting by hand.
My goal for this tool is to make all of those tasks a menu choice and a few clicks. Want to build a 100 ft long wall out of a piece of wall you modeled yourself? Want to change that wall's material from concrete to marble? Want to put some stone lanterns from your runtime in a row on that wall? Want to light those lanterns? Want to put a row of baskets full of arrows along its base, with each arrow as a separate prop? I'm trying to make that whole process a matter of a couple of minutes of unique actions, rather than an hour or so of repetitive actions.
Ideally, I'll be able to sell this plugin when it's done, tested, and approved. But I personally need it so I can convert the scene I'm working on from Blender to Poser without having to copy and position 100+ instances by hand (one piece is 48 instances, a railing piece that's 50+, then there's at least 4 that are 16 instances each, etc.). I personally need it so I can have 4 props parented to each other and manage them as one item. I personally want it so I can get use out of a whole bunch of scenery I own that I avoid because it's such a PITA to do anything with all those instances of walls and windows and columns. And I personally want it so I can make scenes out of simple props I own or ones I make.
I'll also want a version in Blender just so I can make and manage orderly instances, especially radially. As I've said, Blender's array tool operates on the mesh, not generates instances. I could use particles, dupliverts, or duplifaces, but that's kind of using a hammer on screws. I know how to to make those tools give me the results I want, but it forces me to do stuff that's inconvenient, like make additional meshes and match their faces to exactly where I want things placed. I've had a couple of people in the Blender community tell me that it would be a useful plugin, but really, I just feel stupid making a bunch of duplicates and rotating them by hand when I know how to program in Python, Blender's API language.
So maybe you're completely right, and no one else who uses Poser minds building multi-instance scenes like Tomalin's Paltea by making and positioning 50 or more instances. And no one else who owns things like P.I.C.K., or any of the many sci fi or fantasy scene building kits, finds it tedious to try to work with them in a tool that supports instances but not instance management. I saw them stay at the top of store lists for ages, yet rarely see them used in galleries, but there could be tons of reasons for that. I'm _very_ sure that most people are just more patient and quicker than I am when it comes to building a scene in Poser. I follow many artists I'm in absolute awe of when it comes to building large and/or busy scenes with multiple instances of several items, while visually complex scenes have always been my kryptonite. And maybe no one else wants a simple material manager to copy a material to other zones on the same object and to copy material collections to other instances. There's certainly a few heavy duty material managing apps for Poser out there, and just because I mostly find they crash too often (I blame Poser, not the plugins) and are more complex than my basic material needs (which is mostly copying and pasting materials as one task rather than several) doesn't mean anyone else is looking for that kind of simple control. It is perfectly possible that no one else will be interested in this plugin at all.
But this tool will be well worth my time if I don't ever have to duplicate and position by hand the 100 or so instances I'll need to bring my current scene into Poser. And that's before I add furnishings, plants, and other items I have planned for the future. If it lets me build and test my materials on all my 48 wall/window pieces at once, I'll be a happy camper. And if at some point I get _really_ good and manage to figure out how to put instances on a surface, I'll be absolutely _ecstatic_ to have something that lets me manage all the grass instances in the courtyard I'm working on as if they were 1 piece. That alone would let me make lots of props I own _much_ more realistic. And make it easier for me to build natural scenes in Poser.
But first I have to wrestle this relative translation equation into submission. I've got the whole geometric progression from i = 1 to n scale issue down, I just have to a get the center point position worked in. I have an equation that _should_ be correct, that seems to give me the correct simplified equation when the center point is at 0 and 1, but it's not working. I've got an error somewhere, but I don't see it yet.
Once I get relative translation working with scaling, I'll have the fun of testing rotation, which includes rotation about a random point. Then I'll start making the builder interface (I have it designed). And I'll probably add a remove array from the delete interface before that. Right now it's just doing generic children and sibling deletes, and it would be much more convenient if it would "undo" an array when a main array actor or figure is selected. I might want to set some custom data for that just to make things easier.
Lots to do!