• 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'.

Minyassa

Enthusiast
I love how versatile you're making these. I was observing that while it may look more realistic to have a lot of variation and wobble in stacks, as someone with OCD there is a more subtle variation in *my* stacks, since I actually take the care to line them up as perfectly as possible. But you've got that covered in book size variants and shear, swelling, etc. I love it.
 

3dcheapskate

Engaged
:) I love making stuff as versatile as I can. When I started making my own books I didn't really know what I wanted as I had no specific need for them. I just wanted to make them as flexible as possible. (I hadn't even considered stacks of books until somebody used one of the bookrows I'd released rotated through 90 °, and it was obvious that I needed some additional morphs that weren't necessary when I was just considering rows.)

A bit more regarding old worn books - I found this this post by philebus on the Book Covers thread at DAZ summarizing the book cover aging process, and this post later on the same page about compositing a cover design. I think I'd got the two combined in my mind.
 

3dcheapskate

Engaged
The geometry swapping, using separate OBJs for the alternate geometry for each of the four books, seems to works fine. The swapped in 8 vertex/4 face paperbacks rotate and scale correctly. So now I can mix and match different book meshes.

The sections I had to add to the CR2 (as per B.L.Render's book, mentioned previously) are highlighted below (only the Book 1 part shown - similar additions for each of the other three books)

0 altGeomSection.jpg


I also realized that if I load a second four book stack, move it up by 0.28 PNU so it sits on top of the first stack, and then parent it to Book 4 of the first stack, then it behaves as if it was sitting on the top of the first stack and moves appropriately when I twiddle dials on the first stack. Which is nice.
:)


0 GeomSwapTest1.jpg


And a bonus, it works in DAZ Studio too (I've just installed 4.15)

worksInDS too.jpg


Next thing to try is probably using a morph for the warpy-twist yRotate so that I can use the yRotate to rotate the whole book...

...ah! Remember that I said I didn't have two things that I wanted to use the zRotate or xRotate for ? That's not quite true - I want to be able to turn any book upside down, which would entail setting either xRotate or zRotate to 180°. I'll have to think about that.

Thinks: For a "rather infrequent" thread I'm posting quite frequently at present !
 

3dcheapskate

Engaged
Regarding turning a book upside down, morphs are no-go (I think) because such a morph won't play nicely with the twist/shear morphs that I want to do. But geometry swapping might be the answer here too: simply have alternateGeom 1 = paperback, alternateGeom 2 = upside down paperback, etc.

Texture mapping is another thing I need to think about. At the back of my mind I was planning to use the same texture maps I used before, as shown below. For the previously released bookrows/stacks each of the 64 books in my 'master mesh' was mapped to a different one of the 64 books on the texture map, which meant that the whole 64 book row/stack had a single material zone (or perhaps two - one for the shiny covers, another for the matte pages). But when I made the four book stack figure I made the material zones for each book different (simply for easy colour-coding - red, green, blue, yellow). Not a problem with four books, but if I have sixty-four ? So maybe I should stick to the single material zone for the whole figure, which would require me to redo the UVs for books 2, 3, and 4. Again , not a problem.

When I talked about geometry swapping before I noted that any swapped-in geometry will have whatever material zones are specified in the alternate geometry's OBJ. So I need to consider the geometry swapping and texture mapping together.

mats.jpg
 

3dcheapskate

Engaged
Hmmm...

I've run into some problems.

First one is if I try to use yRotate to rotate a whole book, as opposed to the warpy-twist rotation demonstrated earlier. Note that I need to have 'Bend' ticked for the body part in order for x/zRotate to do that warpy-tilt thing that was also demonstrated earlier - simply unticking 'Bend' will of course make yRotate rotate the whole book, but it will stop x/zRotate from doing that warpy-tilt thing. So I reasoned that with 'Bend' ticked, simply moving the yRotate's 'Twist End' down towards it's 'Twist Start' should do the job.
Here's the previously demonstrated warpy-twist setting for book 2 (green) with Twist Start = 0.007PNU (the bottom of the green book) and Twist End = 0.014 (the top of the green book). Note: the top half of the picture below is from the Setup room, and the bottom half from the Pose room:

7to14.jpg



With 'Twist Start' left at 0.007 and 'Twist End' reduced from 0.014 to 0.008, this is what happens, which is what I would expect - all vertices of the green book above the 'Twist End' value (which means everything except the vertices of the lower (back) cover) rotate the full amount of the dial :

7to8.jpg



So I, not unreasonably I think, expected that setting 'Twist End' to the same value as 'Twist Start', i.e. 0.007 would make the whole of book 2 rotate.

You can imagine my surprise then when this happened - when I twiddle the Book2 yRotate dial, books 1, 3 and 4 rotate, but book 2 remains still!

7to7.jpg



P.S. (and this is the main reason that I like doing my experimenting on a public thread) Having explained what I've done step by step above I realized that I hadn't tried setting Twist End to be not quite equal Twist Start. So I accidentally set 'Twist End' = 0.006999 (I meant to set 'Twist Start' and got exactly the same as above.

So I corrected my mistake, i.e. set Twist Start = 0.006999 and Twist End = 0.007 and it now seems to work correctly (although I don't know why the top vertices of book 1, the red book, don't rotate a bit):

6.999to7.jpg
 

3dcheapskate

Engaged
Second problem involves morphs and geometry swapping. B.L.Render's book mentions (second to last paragraph on p112) that "Each variant can have its own morphs, although it is not clear how Poser keeps track of which morphs belong to which variants", and I think (but wouldn't swear) that I confirmed this using PP2014. However, when I loaded the latest (not yet uploaded) version of my four book stack with the alternate paperback geometry for each book added, did 'Load Morph Target' with the default hardback variant selected, and loaded the warpy twist morph target (because morphs are linear I had to do two separate ones, one for +5°, another for -5°) it worked as intended on the the hardback, but when I swapped in the paperback it was all messed up.

However² I've just tried again and I can't reproduce the problem - it seems fine. Which makes me quite happy.


²that's not intended to indicate footnote 2, it's intended to be 'however squared', because I've already had a 'however'. :p
 

3dcheapskate

Engaged
Hmmmm... (again)

Just loaded my four back stack with the geometry swapping and set the yRotate twist parameters to make it rotate the whole book. With the default hardbacks it seems fine. But when I swap in the paperbacks with the alternate geometry dials...

hmmm.jpg


There are no morphs in the figure yet, so this is most likely something to do with the yRotate twist settings and my alternate geometries not playing nicely together.

(My twist settings, Start/End: book1 = -0.000999/0.0, book2 =0.006999/0.007, book3 = 0.013999/0.014, book4 = 0.020999/0.021)

Maybe I need to check the coordinates of the top/bottom vertices in each of the two meshes (hardback/paperback) for each of the four books. It seems that front of each paperback is getting 100% of the yRotate from the book above.

Enough for today, probably.
 
Last edited:

3dcheapskate

Engaged
...I couldn't resist a quick check. The bottoms of the books are at precisely 0.0PNU (red), 0.007 (green), 0.014 (blue), and 0.021 (yellow) as expected. The tops of the hardbacks are precisely 0.000027 below the bottom of the book above, whereas the tops of the paperbacks are at the exact same height as the bottom of the book above.

That explains it. :)

It's also possibly worth noting that the problem I thought I saw with morphs and swapping may simply have been this.
Fingers crossed.
Tomorrow perhaps.
 

3dcheapskate

Engaged
The basics of the geometry swapping and the morphs appear to be working, both in Poser (11) and DAZ Studio (4.15). I've attached a zipped runtime (I realized that my previous zip had some absolute paths in it, so it couldn't be unzipped to 'anywhere' as I'd stated) - I believe that all the paths are correct in this one. Simply unzip the Runtime to an appropriate location. Everything's in, or below, the following location

:Runtime:libraries:character:3Dcheapskate:TEST:BookStack4:

Each book has a variant dial (default 0 is the hardback, 1 is the paperback) plus a hardback shear and paperback shear morph. The shear morphs only apply if the corresponding geometry variant is selected.

I haven't hidden or set limits on any the transform dials for each book, so here's some guidance:
- xRotate and zRotate, being those warpy-tilts, should be kept small, say ±5°.
- yRotate can be set to anything as it rotates the whole book.
- all the scaling dials should work fine.
- yTranslate should not be used as it'll open gaps between books or sink them into the ones below.
-xTranslate and zTranslate can be set as you want, but bear in mind the physics of balancing books ! ;)

The UV mapping is to (I think?) the bottom 4 books in the left column of the 2 column / 32 row texture maps I used for most of my book freebies so far. This is simply because I happened to import OBJ files with those mappings when I started working on this 4 book stack figure.

There are separate material zones for each book's cover and for each book's pages, simply because when I created the basic mesh in Blender from the imported OBJs from a previous book stack I wanted a different colour for each book and didn't want to faff around with texture maps.

uvs.jpg


So.

Here's a screenshot of the figure as it loads in Poser 11:

test3-Poser.jpg


And here it is loaded in DAZ Studio (via a Poser mapped runtime obviously since it's a CR2, not DS-native), after sliding some sliders and such to check that it works. I've combined a couple of screenshots of the Parameters tab to show where the alternate geometry selection and hardback/paperback shear morphs are.

test3ds.jpg


I'd definitely appreciate feedback, whether problems, suggestions, or anything else.
 

Attachments

  • Runtime (BookStack4 test3 ONLY).zip
    25.3 KB · Views: 150

3dcheapskate

Engaged
Regarding my earlier idea about using xRotate or zRotate set to 180° to turn a book upside down, I realized the problem with that. The origin of each book is at its bottom cover, so if I rotate it through 180° it disappears into the book below. Plus all the books on top of it follow the rotation.

I could move the joint centre of each book upward so it's halfway up the book. But this would mess up the scalings and the warpy-tilt x/zRotate.

I can't see any obvious way around that, so I think using xRotate or zRotate set to 180° to turn a book upside down is a non-starter. Which means that using another alternate geometry for an upside down book is probably the way forward.
 

3dcheapskate

Engaged
Just jotting down some thoughts...

Possible alternatives
---------------------
Each book, instead of being a single bone, could have two bones. The first affects that book and all others above it, the second affects the book in isolation.
-Stack
-Book1 + stack
-Book1 only
-Book2 + stack above
-Book2 only
-Book3 + stack above
-etc
The 'Book# only' bone could be used to turn the book upside down (xRotate=180) thus not requiring alternate geometry for that, and to yRotate the book WITHOUT affecting those above.
More effort/complication than it's worth ?

General notes
-------------
Scaling will change the cover thickness of the hardbook - will this be okay ? If not, could have a correction morph slaved to scale/yScale.
How many books should I have in the figure ?
Do I need different figures for different book counts (e,g, my 1/2/4/8/16/32/64) ? If I do, then start with the highest count CR2 and remove stuff to create the CR2s for the lesser ones.

Meshes, Alternate Geometries
----------------------------
Assuming I use my current mesh settings the bottom vertices of each book must be at 0.0, 0.007, 0.014 etc and the top vertices must be slightly below the bottom of the next book.
Which book for the base mesh, hardback or paperback ?
Upside-down versions of each geometry ?

UV Mapping / Material zones
---------------------------
UV mapping must be correct in the base mesh and the alternate geometry meshes (the morph targets don't require UVs when I create them).
UV mapping will be hardcode in the CR2 and the OBJs for the alternate geometries. So for alternate UVs I just modify the UVs in those and save as differnt CR2/OBJs.
One UV mapping variant will use my existing spine-focused textures with 64 books on a single image
With my existing spine-focused textures with 64 books on a single image it's best to have just 2 zones, covers (gloss) and pages (matte). Or just 1 zone if I use a mask to differentiate covers/pages.
The only other mapping/zones that make sense to me is one zone with a cover/page mask, or two zones, covers + pages, per book.

Morphs
------
Shear (single morph per book)
Warpy twist (two morphs per book +/-5degs)


Non-Morph Adjustments
---------------------
Book size - use scales
Book proportions - use x/zScale
Thickness - use yScale
Warpy-tilt - use x/zRotate (limit to about +/-5degs)
Offsets - use x/zTranslate

Presets / Poses
---------------
Use ERC. Create master dials 'Pseudo-Randomize 1', etc which set x/zTranslate, x/y/zRotate, scales, shears, warpy-twists, and variants for each book
Reset / zero pose - Since the standard 'Zero Figure' doesn't reset body part variants I need a pose to do this.
Multiple figures stacked one atop another. Multi-Figure CR2s, positional poses.

Textures
----------
A plain toonish texture, like the red, green, blue, yellow one I have. With and without titles.
Aged, tattered, worn textures. Maybe via masks and overlays that can be used with blend nodes ?
More classic book types - leatherbound books, half-leather with marbled covers, etc
Books with titles across the spine as opposed to up/down. My existing 64 books per image has spines just 32 pixels wide.
 

3dcheapskate

Engaged
More Notes
--------------

That bone list bit near the top of the last post was supposed to be a hierarchy but lost its formatting

hierarchy.jpg



Since I want to be able to do thick paperbacks that splay out like my photo in post #9 I think I'll need a slightly higher poly paperback mesh with some appropriate 'Splay' morphs.

Using yScale to make books thicker (spinewise) causes the spine texture to stretch, as pointed out by primorge over there. Nothing I can sensibly do about that for the 64 textures on one image UVs version. However, if I do a one texture map per book version of the CR2 then it might be practical to have textures designed for different spine thicknesses. Variable thickness books will inevitably cause a problem here, so maybe use different alternate geometries for different thicknesses and forget about using yScale?

I actually created some UV mappings for complete books with different spine thicknesses. These all included a part of the map being for the page ends. But I've noticed that are some generic book cover formats such as the Amazon Kindle Direct Publishing ones that obviously only have covers and spines, so it may be worth looking at those.

Also I should probably do a number of simple single book props/figures with a couple of morphs.
 
Last edited:

3dcheapskate

Engaged
Thanks again Chris ! :p

For the past few days I've been playing with a single book prop, which uses exactly the same mesh as the red book at the bottom of the stack of four. I've been messing around with UV mapping, textures and morphs because there's something in all that stuff that's intriguing me, but I can't quite put my finger on it. Here's a selection of recent renders:

1) One book plus seven duplicates, each with one or more of the hardback morphs I'm playing with, which are Shear (as before) and Warpy-Twist (I realized that one morph is fine for this as negative values work okay), 'Plump' which expands the pages but doesn't stretch the spine, and 'Open' which makes the page ends side of the book wider. The last two (Plump and Open) would require extra ERC if I wanted to use them in the book stack figure as they (yTranslate and zRotate+yTranslate respectively) the book stack above. I was thinking specifically of what Minyassa said back in post #22 here
Render 5.jpg



2) I created a new UV mapping from scratch, based on the one I did before over there, but not the same, modified one of those two textures to match, and applied that to all seven books:

Render 4.jpg



3) Did a bit of fiddling with the specular of the covers and the bump of the pages to try and make the books look a bit older:
Render 3.jpg


4) Since the spine on my new UV mapping is 80 pixels wide (as opposed to 32 pixels on my 64-books-in-a-single-image) I tried writing the spine text across the spine, as it's usually done on those classy-looking classics. Took the opportunity to try and create a classic-looking book texture from scratch. I think it needs something else to make the cover look more tactile - it looks like matte paper to me:
Render 1.jpg



5) Found a few real covers (including back, spine, and front cover running from left to right in a single image) and decided to try and cut-and-paste them into my template. Of course, none of the books had the same SpineWidth : CoverWidth : BookHeight ratios that my mesh has, so I had to stretch and squash them to fit my template. It was at this point that I realized what had been eluding me - In order to get the stretched+sqaushed texture to appear as it should in a render, I need to set the xScale, yScale and zScale of the book to compensate for the distortion. E.g For this test example the Spine:Width:Height ratio for the undistorted image (in pixels) was 153:441:726, whereas my UV template requires 82:472:811. Thus I need to set yScale = 153/82 = 187%, xScale = 441/472=93%, and zScale = 726/811=89%. The render below shows the unadjusted book below and the correctly scaled book on top.
Render 2.jpg
 

3dcheapskate

Engaged
Also happened to spot a photo showing a couple of paperback specific deformations...

MorePaperbackDeformations.jpg


The way the spine curls upwards when the stack above it is shifted sideways - telephoone directories always did that.
The four corners opposite the spine curling outwards if there's nothing directly above or below to prevent that.

Both of these, plus the deformation already noted in post #9, will require extra geometry. Luckily my basic 8 vertex / 6 face paperback is quite low poly so a bit more mesh should be fine. :D
 

3dcheapskate

Engaged
I've just increased the mesh of the paperback to 64 faces / 64 vertices in order to create a morphs for the distortions I've mentioned. Here's the mesh (not particularly brilliant, but I was trying to create a minimal mesh that would allow me to do the morphs I want):

PaperbackMesh.jpg



And here's the OBJ imported into Poser, several morph targets loaded, the prop duplicated several times, and diffent morph settings applied:

Render 1.jpg


The morphs are Shear (as for hardback), Warpy-Twist (as for hardback), Concave Spine (which alsomakes the page ends convex), Curved Spine (that's not a very good name - it actually just moves the two spine-frontcover and spine-backcover edges inwards, thus sort of rounding them a bit), Spine Twist Up (I think I should have included some shear of the page ends with that MT), and Page Corners Out (does all four together, although they should probably be independent).

That does seem to provide a nice bit of subtle variation, although I think that some of the morphs may not work nicely together.

I want to do a bit more playing with these two single books, paperback and hardback, and then I'll upload them here for anybody who wants to play.
 

3dcheapskate

Engaged
I also just noticed another type of 'book' that I've overlooked, highlit* in sickly green below (and I've always thought that that sickly green colour was puce - it isn't ! It's amazing the unexpected things I'm learning on this 'project'...) It's the type without a spine, like the school exercise books held together with two staples.

MissedThis.jpg


It might also perhaps be worth thinking about ring binders and box files ?


*I don't care if it should be 'highlighted', highlit sounds better to me :D
 

3dcheapskate

Engaged
Very simple box file (36 vertex / 30 face) - no morphs necessary since I'm only doing closed books, and I'm not considering opening this box file. Plus a very basic spineless book (12 vertices / 10 faces) which'll need extra mesh for some morphs.

Box+Book.jpg


Poser 11 Firefly doesn't like the thinnest of the long triangles (which reminds me that I also need to check that the morphing single paperback and hardback both render okay in Firefly and DAZ Studio hardback)

FF.jpg
 

3dcheapskate

Engaged
Just for test purposes I've been playing with the real covers mentioned in part (5) of post #35 . The sidetrack I'm on here is trying to find an easy way to take real covers with known dimensions (cover height, cover width and spine thickness), map those on to my current UV template (height = 777 pixels, width = 457 pixels, spine = 81 pixels), and then provide dials for the prop to adjust the default mash (height= 0.06762PNU / 6.97" / 17.725cm, width = 0.04 PNU / 4.128" / 10.485 cm, spine = 0.006973 PNU / 0.719" /1.828cm) to match the original dimensions.

Since the example covers I found didn't specify any dimensions I could only note down ratios for each of the books, which I recorded on the texture maps (which I won't be able to upload as I don't think these particular cover images are public domain - as I said I'm using them simply to test this "getting-the-size-right" stuff. They're probably old enough to be public domain, but I can't recall which website I got the photos from so I can't check.).

Scaling the original images to fit my template was easy peasy lemon squeezy as the scans were well aligned. All I had to do was crop and scale to 1024 pixels wide, then in turn select each of the three parts, front cover, spine, and back cover, and scale each to my template. I only needed to use a perspective adjustment a couple of times for the whole batch.

Since I didn't have any dimensions for books I decided to create dials for setting the height:width and height:spine ratios (which I'd recorded on the texture maps), and also add an additional "height" dial to control the absolute size of the book. These three dials control the x, z, and y scales respectively, but since there's some simple maths involved I used intermediate x/y/zScaleMultiplier dials (doing maths with valueOp dials is great fun, as I found some time ago - Proof Of Principle - Poser ERC Opening Book ). My intention would probably be to hide the intermediate and z/y/zScale dials to avoid the user unintentionally twiddling them.

SingleHardbacksTest3.jpg


While creating that stack using eight single book props two things struck me:

1) Using dials for "Height (cm)", "Width (cm)" and "Thickness (cm)" might be better than dials for height and two ratios.

2) When I adjusted the yScale (or Height:Thickness ratio) the book expanded both upwards and downwards, into the ground. I forgot to change the origin in the PP2, so it's still where Poser put it, i.e. the wrong place.

That second point reminds me of a niggle about the origin for my books. If the book is intended to be in a stack then the middle of the back cover seems the most logical place. If it's intended to be in a row, then some point on the bottom, where it'll be stood on the shelf, seems more logical. But a single book can obviously be used in either way, so which makes most sense ?
 
Top