• Welcome to the Community Forums at HiveWire 3D! Please note that the user name you choose for our forum will be displayed to the public. Our store was closed as January 4, 2021. You can find HiveWire 3D and Lisa's Botanicals products, as well as many of our Contributing Artists, at Renderosity. This thread lists where many are now selling their products. Renderosity is generously putting products which were purchased at HiveWire 3D and are now sold at their store into customer accounts by gifting them. This is not an overnight process so please be patient, if you have already emailed them about this. If you have NOT emailed them, please see the 2nd post in this thread for instructions on what you need to do

My rather infrequent, and possibly apocryphal, 'books project'.

3dcheapskate

Busy Bee
...so what about that 'except'?

Well, everything seems to work nicely when you're just using the morphs...

plump+splayERC ok.JPG


...however, the translations for each book in this prop stack are along global axes, so if I try to move the yellow book to the right with xTran I get this
xT glob.JPG


For comparison here's the same morph setup in the figure version of the 4 book stack plus an xTran of the yellow book - the translations are along bodypart axes.
fig yel xT.JPG


Definitely not a showstopper - I could use some more ERC to drive yTran of BookN from xTran of BookN and the Splay morph of Book(N-1)... but what if the red and green books are also using the Splay morph... ?
 

KageRyu

Lost Mad Soul
Contributing Artist
Oh I misunderstood, you had this setup previously as a figure and not a single prop? The ERC code can be added to a figure easier than a compound prop for the movement and rotation settings. I was thinking about the ERC to allow for Y movement and slight rotation of the books for offset to help prevent intersection with certain morphs. By tying the ERC for those two values to the specific morph, it is just a matter of getting the right values.
 

3dcheapskate

Busy Bee
No worries, this whole topic was basically a "So where do I go from my multiple-books-in-one-prop?" and I'm open to any ideas, so your suggestion gave me a good reason to try something I hadn't thought of. :D

P.S. I was playing with the stack of four books as a figure mainly from post #13 to #33, after which I changed tack to morphs for a single book prop and a few textures, so unless you looked way back in this topic the figure thing was easily missed
 

3dcheapskate

Busy Bee

3dcheapskate

Busy Bee
Just uploading my current Blender file - not really any use to anybody else, more to make sure I don't lose it ! ;)
 

Attachments

  • BookStack4 test8 (4MTs x 4bks +Xaa+colocated).zip
    130.8 KB · Views: 98

3dcheapskate

Busy Bee
I thought that this might happen, and I think I know how to fix it. If I manually position a second 4BookStack on top of the first and parent it to the last book things almost work perfectly.

Plump and Splay morphs applied at 1 to all books except the top book of the lower stack - all looks good.
2stacks.JPG


Add Splay to the fourth book from bottom - that works correctly. The 'Splay' for any book simply sets the xRot and yScale of that book.
2stacks2.JPG


But add Plump to the fourth book from bottom and - oh dear!
This must be because the 'Plump' for any book sets the yTran for the book above, but since Book4 is the top of the 4BookStack there isn't any book above it. I think I need to add another bone after Book4 - name it 'TopOfStack' and don't give it any geometry*.
But it also looks as if the top cover of Book4 of the lower stack is now parallel to its bottom cover - no idea what that is.
2stacks3.JPG


*Talking of bones without geometry, here's the hierarchy of those two stacks - the 'Stack' bone between 'Body' and 'Book1' was just a workaround at some time point (it's in the screenshot in post #13 here, so right from the startish) for something that's no longer relevant, so I think I should delete it now.
hierarchy.JPG
 

3dcheapskate

Busy Bee
Removing the spurious 'Stack' bone, adding a new 'TopOfStack' bone, setting all the joint parms/zones fot 'TopOfStack', and adding ERC to slave TopOfStack-yTran to Book4Plump... well... it fixes the problem at hand but reminds me why the 'Stack' bone was there. Instead of the normal set of joint parms in the Setup room (as per Book2, second screenshot below) I get only two (first screenshot below)
bk1 JE.jpg
bk2 JE.jpg


This means that I can't set up the Z rotation (and other) zones for Book1, meaning that the whole of Book 1 Z rotates en masse.
Maybe I can edit thenm in the CR2 ?
Anyway, other than that the Plump and Splay morphs now work fine* across parented 4BookStack figures.
2stacks4.JPG


*not 100% perfect, but good enough
 

3dcheapskate

Busy Bee
I've just asked about the lack of x/y/zRotate joint parameters for the first bone over on Resity's Poser Technical forum there -> Setup room, no zRotate for first bone ? | Renderosity. I know that I can get round it by inserting an extra bone between 'Body' and 'Book1' (must've been the reason for that seemingly spurious 'Stack' bone), but it'd be nicer if I could just get those joint parameters for the first bone too.
We shall see.
 

KageRyu

Lost Mad Soul
Contributing Artist
It id odd, most figures have rotation on the root BODY. Is this in Poser 13?
 

3dcheapskate

Busy Bee
Just to be clear I've not been talking about these rotations visible from the Pose room

b.JPG

h.JPG

w.JPG


but about these rotations (or lack of them) only visible in the Setup room's Joint Editor

bj.jpg

hj.jpg

wj.jpg


It's been like this in all versions of Poser I've had (6 onwards) as far as I know and makes perfect sense to me now after asking the question on Renderosity and answering it myself over there.
 
Last edited:

3dcheapskate

Busy Bee
Progress !

I've added the initial 'Stack' bone back and that, along with making sure that the Joint Parameters for the zRotates (jointz) were correct, resolves the problem I was having with the Book1 'Splay '.

So I just tried stacking four 'BookStack4 test12' figures one atop another, parenting each to the 'TopOfStack' of the previous one and tried twiddling all* the dials (syzRotates, xyzScales, xyzTranslates, Variant, Splay, Plump, Shear and Twist. As far as I can tell everything seems to work fine (bearing in mind the alternate paperback geometry has no morphs, which is something I'll need to add at some point). There are definitely small gaps opening up between books with some combinations of dial twiddles but I think we can live with them, or maybe tweak some of the ERC values.

One thing I hadn't considered is that setting a positive value for the yTranslate of any book opens up a gap in the stack below it - allowing you to insert something else there.

Here's a simple test with a single dial twiddled for each book

BookStack4 test12 x 4 stacked.JPG


Things I still need to do:
- Corresponding morphs for paperback alternate geometry
- Set/adjust limits on the dials.
- Make 'Splay' a morph channel (with no morph) so that the 'Figure > Zero Figure' will zero it (everything else except 'Variant' gets zeroed by this already) - as per B.L.Render's book (which I think suggested doing this so the setting would be saved in pose files).
- Make each of the four books have a different texture by default (currently using my 64-book map, but all are mapped to book1)
- Alternate UV mappings, e.g. for Jim Farris' (Xaa's) book textures? The only way I currently see to do this is via alternate geometries, where I keep the mesh the same but just have different UVs.
- 'Pseudo-randomize stack4' dials on the Body as per my book props - manually adjusting each book is tedious !

I've also attached a zip containing just BookStack4 test12.cr2 and BookStack4 test3.obj, no folder structure, if anybody wants to play... but mainly in case I accidentally delete it while tidying up ! :eek:
 

Attachments

  • BookStack4 test12.zip
    15.8 KB · Views: 96

3dcheapskate

Busy Bee
Just another reminder for myself. When the CR2 is loaded it's not selected (by default I currently have Ronk in my startup scene - when I load my book stack figure it's still Ronk who's selected). Checking Kuroyume's old CR2 spec cos I couldn't remember the parameter details it's 'defaultPick <part>' in the figure section. This is missing from the CR2 that was created when I took the OBJ I'd imported into the Setup room to make a new figure. Simply adding the line resolves this.
dp.JPG


(Note: this is something I want to change for most figures in my runtime. Most seem to have the Hip as the default pick, which I hate because I always expect the body.)

Another thing I mustn't forget to do - make the deault scale of the bookstack figure 500% so it's a similar size to the characters. 100%, which makes it standard paperback size, makes it tiny when it loads. (But I vaguely recall that any MTs loaded while the figure's scaled get screwed up...so maybe leave that till the last moment?)
 
Last edited:

KageRyu

Lost Mad Soul
Contributing Artist
... Kuroyume's old CR2 spec...
^ I had never heard of this before (despite all of my CR2, PP2, and PZ2 manual file editing) so I went to look it up. I was sad to find the sigte is no longer around, but I was able to locate it through the Wayback Machine and have archived the information within it and followed several of the mentioned links through the wayback machine and archived those as well by printing to PDF to preserve this information for posterity.

So many great tutorial sites and forums for Poser have been lost in the last 10 years.

With your permission, I may archive some of your threads on experiments as well?
 

3dcheapskate

Busy Bee
Wasn't there an old adage that digital data doesn't exist unless there are copies in at least three separate physical locations ? A lot of good information when RDNA was assimilated into the DAZ collective, and similarly when Poser was transferred from Smith Micro to Renderosity. I often come across links, often my own, to topics in those now non-existent forums and even Archive.org hasn't been able to help.

I wonder how long these HiveWire3D forums will stay around ?

I managed to take backups of many topics before they disappeared, but I didn't get everything. Luckily when I've been able to remember specific threads I've often found others who happen to have kept copies of them.

So yes, feel free to save copies of anything I've written on these forums.
 

3dcheapskate

Busy Bee
Regarding these books, a little bii of progress but also an annoying problem.
Progress first
- Set/adjust limits on the dials. Done - now everything doesn't go crazy if I accidentally drag-translate/pull. For the Stack and TopOfStack bones I've set and forced limits to prevent any changes at all, and hidden all the dials. x/zRotate are +-5, yRotate is +-180, all scales are 50%-150%, x/zTranslate are about a quarter of the book size in those dimensions, yTranslate is about twice default book size in the positive direction and in the negative matches the slaved value for a 'Plump' setting of the book below to -1, and the morphs and Splay are +-1
- Make each of the four books have a different texture by default Done - just one mat zone for the whole figure using my 64-book mapping

And then there's the problem - it's the rotation order, which is YXZ by default for the Body and all bones. Unfortunately this means that if you yRotate a book which has the Splay applied the yRot is done first and the zRot for the Splay is applied to the book in its already yRotated position as you can see below for 0, 90, 180, and -90 yRotations with a Splay=1

sprot.JPG


I thought "no problem, just change the order to have Y last" so I tried ZXY - but of course this makes zRot a Twist, not a Joint and that just won't work at all.

I then thought "no problem, make the Splay a morph instead" - but of course I still need to rotate the stack of books above the splayed one, so I have the same problem.

Next thought "no problem, limit the yRotate to say +-10degs like in the original bookstack prop freebies" - maybe use an alternate geometry for a 180 deg yRotated book?

Hmmm...
 

3dcheapskate

Busy Bee
Restricting the yRotation doesn't feel right, and the thought struck me that I should be able to bit a bit of simple maths in some 'valueOp' statements in the CR2 to calculate the combination of zRotation and/or xRotation that makes the book splay correctly for any given yRotation.

But my maths is very rusty - I recently had to double-check how to add and multiply fractions! So for each of the four yRotations in the picture in the previous post (0, 90, 180 and 270 (aka -90 ;o) )) I worked out in Poser what gave me the correct splay for the book. Obviously I didn't actually use the 'Splay' dial, but manually twiddled the xRot and zRot. I used 45 degrees instead of the 3 degs that the Splay gives because it's easier to check.
rots.JPG

That hints at a nice simple cos(yRot) multipler for zRot, and a nice simple sin(yRot) multiplier for xRot, so I tried an intermediate yRot value of 45degs with xRot and zRot set to 31.8degs (sin45 = cos45 = 0.707) and...
Capture.JPG


...well that didn't work. More twiddling the Poser dials seemed to confirm that I can't get the required position by simply adjusting the zRot and xRot... oh bugger...and my brains

...but...

...luckily with the small amount of z rotation created by slaving to the Splay dial the simple (but mathematically incorrect) sin and cos approach is good enough for me - I think. The easiest way to check is to give the valueOp approach a try. Handily I found a reminder of how to do this over at Renderosity in my Proof Of Principle - Poser ERC Opening Book topic.
I think that all I need to do is use my addDeltaAddDelta python script in Poser to add new cos(yRot) and sin(yRot) valueParms and slave zRot and xRot respectively to them with a value of 3, manually edit the new valueParms in the CR2 to make them valueOpKeys with key-value pairs as below,
sin+cos valueKeys.JPG


and then test it.

But it's getting late and I don't trust my editing when I'm tired...
 

3dcheapskate

Busy Bee
weeeelllll...

:applause: :D:cool:

...it works !

(The CR2, just the BookStack4 test22.cr2 file and nothing else, is in the attached zip if anybody wants a shufti - note: I've only done the fix for Book1 so far)

There was a little bit more work than I thought but now Book1 (and only Book1 for the time being) has 'Splay' (and a new 'Oblique') working correctly for the full 360° range of yRotate.

The "more work than I thought" was mainly because that which applies to zRotate also applies to xRotate. I've been using xRotate to do a sort of splay but along the length of the spine, and with this little glitch I realized that it will also have the same yRotation problem. So I added a "Book1 Oblique" adjustment (a slightly better name than "sort of splay but along the length of the spine" ;) ) which should drive xRotate in a similar way to that which 'Splay' drives zRotate and, of course, I had to do similar maths to control xRot and zRot dependant on the yRot value.

I also made 'Splay' and 'Oblique' targetGeoms instead of valueParms as per the suggestion at the end of the "ERC, The master dial " section of p101 of BL Render's book*. Having done this they now also get reset via Figure > Zero Figure.

I grouped all the intermediate maths valueParms into a collapsed node - they should all be hidden for any proper release.

As far as I can tell from my testing Splay and Oblique work correctly, both independently, together, and along with the other morphs

BookStack4 test22.JPG


More about the Intermediate maths and the corresponding valueParms in the next post

*"Secrets of figure creation with Poser 5", by BLRender** - ISBN 0-240-51929-9
**I've always assumed Mr/Mrs Renders first names were Bloody Long - but I spotted a comment somewhere in the book this time about their Songbird Remix... hmmm...
 

Attachments

  • BookStack4 test22.zip
    9.5 KB · Views: 72
Last edited:

3dcheapskate

Busy Bee
Expanding the Intermediate Calculations group we get this
IntMaths.JPG

The two calculations are as follows:
xRotate = ( 3×Splay × sin(yRot) ) + ( 2×Oblique × cos(yRot) )
zRotate = ( 3×Splay × cos(yRot) ) + ( 2×Oblique × -sin(yRot) )

The 3×Splay and 2×Oblique are because those two dials are limited to ±1 and I'd (arbitrarily) decided on a maximum 3° splay and 2° oblique

For any given yRotation the xRotate and zRotate components of Splay can be approximated as per post #78 above using sine and cosine of yRotation. As mentioned there this is not actually mathematically correct, but for the small 3° rotations we're dealing with it looks good enough to me.

Similarly the xRotate and zRotate components of Oblique also use sine and cosine but they're 90° out of phase with the Splay.

And here's how the maths is done in the CR2 with valueParms. First the sine and cosine of yRotation - I copied the spreadsheet-generated valueKey lines from post #78 and used them in a valueOpKey.
sin+cos.JPG


Next the values of the Oblique and Splay dials are multiplied by the sine and cosine values. Only two of the four calculations are shown below, on the left ( 3×Splay × cos(yRot) ) and on the right ( 2×Oblique × -sin(yRot). The constant multiplier (and the negative sign) form the last entry in the keys section while each of the variables, which is a valueParm or targetGeom, is in a separate valueOpTimes section.
(Note: I don't think the 'strength' on the left is necessary - overhang from cut-and-pasting I think)
SOxSinCos.JPG


Then I needed to add the xRotate components of Splay and Oblique, and also their zRotate components - simply a case of putting each value into a valueOpPlus section (and making sure that the last entry in the keys section is 0, as this is the default value to which the others are added.
xRotate components on the left, zRotate on the right.
(Note: I missed out the minus in the valueParm name on the right by accident, but it picks up the correct parameter in the valueOpPlus)
Obl+Spl.JPG


And finally use these to drive xRotate and zRotate. I used valueOpDeltaAdd here because that's the valueOp type that my addDeltaAddDelta script writes. I think it's the same as a valueOpPlus except that the driving value gets multiplied by the deltaAddDelta value first - but don't quote me on that and don't believe me without checking for yourself.
xr,zr.JPG


That's all there is to it.

Now to redo all that for book 2, book 3, and book 4... :whistling:
 
Top