Making a Medieval Book in ZBrush & Marmoset Toolbag

Piotr Zielinski talked about making an ancient book in ZBrush, explained the texturing method, and discussed the advantages of Marmoset Toolbag.


Hi, I’m Piotr Zieliński and I’m a Character Artist from Cracow. Generally, I’m self-taught and I know most of the modeling stuff from YouTube tutorials, but since August 2019 I’m a member of Georgian Avasilcutei’s mentorship program. Currently, I work in Flying Wild Hog as a Character Artist, before that I worked on a small indie VR project. 

The Danish Book Project

My Danish Book project started as a part of the whole character that I’m doing for my portfolio – a concept of a knight girl who holds a book. While I started working on a character, Georgian was doing his fantasy book set, and if I remember correctly I just saw the Danish one while he was looking for references. His work was a quality benchmark, but the main goal for me was to do something more complicated than him, so when the time came for doing my book, I already knew what I was looking for. I didn’t have to spend too much time on Pinterest before I found it.

It turned out Pinterest pictures lead to the whole album published by the National Library of Sweden on Flickr with great quality and multiple angles of the piece – that helped me a lot with all those patterns, the book has because I wouldn’t be able to just figure them out from one 3/4 shot.

Modeling the Asset and Creating the Ornaments

As I mentioned before, reference pictures were great and taken from different angles, so I was able to put them into 3ds Max and overlay them with my models later to place everything in the right places. Before that, I just had to make sure they are more or less scaled the same.


I started with some basic poly modeling and when I was happy with the proportions I took everything to ZBrush for further adjustments.

What I did in ZBrush was pretty straightforward first I DynaMeshed all pieces together then ZRemeshed, SubDivided, projected the first two SubDiv levels, and then SubDivided further to be able to add more details on the edges.

1 of 3

While detailing I used Trim Dynamic and Dam Standard brushes to create a bit of edgewear and variation.

Then I focused on making more unique details, some of them I found on the ref pictures:

1 of 2

The others I just added by myself to have more interesting spots that I knew were going to bake well and add more information to the Curvature Map.


First I did a BaseMesh utilizing splines in 3ds Max:

  • I traced the hinge's outline
  • I used Extrude to added thickness to it 
  • Symmetry to the other side
  • I Quadified the mesh and added a chamfer on the edges to make sure they stay in place after DynaMeshing in ZBrush.

After this, I took them to ZBrush and did the same process as on the covers in addition to breaking the symmetry I applied before.

There is one detail appearing on both the cover and the hinges – "scales like tubes" placed around the covers and on the bottom of hinges. When I started analyzing it I realized there was a spiral pattern appearing so what I did was:

1 of 4
  • I made and duplicated with some offset a few spirals in 3ds Max 
  • I placed subdivided box along them to fill all space pretty evenly
  • I took some small part with the repeating pattern 
  • I took this pattern and placed them around the cover using splines and spacing tool in 3ds Max
  • took everything to ZBrush, DynaMeshed together, and sculpted a bit on top to add some variation and lose seams from duplicating not ideally seamless mesh. 

I’m aware that what I got was not ideally identical to the reference pictures but I decided that it was good enough for me to move further.


Almost all pattern pieces are placed with splines in an orthographic view. I used Radial Mesh for all those snail-like ones and rectangular mesh for the rest.

To be honest, there was nothing too complicated, just tedious and boring actions. I PolyModeled the pieces and used them around the whole cover because they were appearing in some other places as well:

Because I placed all the patterns in the orthographic view, the spine pattern needed to be bend to fit into its place nicely. To do that, I detached faces from the back of the spine cover, you can use the By Angle option to make it fast if you have more divisions than I had. 

The next step was to straighten the piece and scale it up so it covers the whole pattern nicely.

Afterward, I utilized the combined power of Morpher and Skin Wrap Modifier to bend the whole pattern to the correct position, just remember to: 

  • put edit poly on top of the splines, otherwise, they will start taking the bending into consideration and will start twisting.
  • select face deformation instead of a vertex by default and select weight all points to get the best result.

Once I had everything in place I put a double TurboSmooth on top of all patterns and exported everything to ZBrush. Detailing the patterns was very subtle since they are once big detail in itself just a bit of edgewear with Trim Dynamic.

The last thing left about patterns is those thin "snail" details. The problem was they were just tubes and I needed this twisted detail – I used Displacement for that. For the Displacement to work, I first needed to have UVs. I used RizomUV to make them. Utilizing its strengths, it was a very fast process. What I did was:

  • I imported all wires to Rizom with a bridge for 3ds Max
  • I used Auto Select Edges with default settings to select all cut lines 
  • I unwrapped everything and used the Rectangularize Polygons Vertical button to make all of them straight 
  • I selected one cap and used TopoCopy to stack all caps on top of each other so I can move them away 
  • I inverted the selection and used align tools to place all wires in the same position 
  • At last, I went back to 3ds Max and scaled the UVs, so the pattern I prepared before was big enough.

Displacement texture was a simple stripes tileable pattern with a 50% grey color for the caps I stacked before so they didn’t deform.

Lastly, I imported wires to ZBrush (sending them as .fbx format will import the texture as well if you had it applied in your 3D application). Then just had to subdivide them a few times and apply the displacement, I also added a bit of Inflate afterward to get a better result.


I started with stacking on top of a lot of planes on top of each other with a shell modifier. Then I pushed the ref planes a bit inside them so I could see what I was doing and moved each by hand with a soft selection to match the silhouettes from the refs on both sides

1 of 3

Note that the thickness of the pages is a bit exaggerated. Because I was doing a real-time asset, I knew that I won’t be able to support that thin details to actually make pages with an accurate thickness. 

Then I took them to ZBrush for some sculpting. Pretty fast I realized that I can’t really subdivide as much as I want due to way too high a polycount. What I did to solve this was isolating the region inside the pages. I knew is not going to need any sculpting masked it out and on top of the mask subdivided – this way I had more resolution only around the pages exactly where I needed it.

First, I did all those non-uniform details, pages that stick out a bit some that got folded, and general non-uniformity on the surface. I used Move Topological for this so I could easily select and move particular pages not affecting the rest at the same time

By default, ZBrush doesn’t have viewport antialiasing and while working with objects similar to book pages it might be hard to see what is going on. I found a solution to this - what you need to do is:

  • Double the resolution of the viewport you work with. 
  • Use Anitailized half-size, it makes ZBrush blur the output you see a bit that makes it way easier to work with.
1 of 3

I did the floral pattern on the side of the pages by masking it out using the whole ZBrush window see-through, then I deflated and sculpted it on top.

Finally, I added those square-like details on top:

I wasn’t super accurate with them, but again I was aware they would not be visible without using too many texture sets, so I decided to exaggerate them a bit so they can show off a bit easier on the bakes.

I handled page opening with Bend Curve Deformer in ZBrush, an idea I peeked from Georgian’s books streams.


First, I gathered some references with old paper pages, I felt they would work well with my book – yellow-ish with some visible dirt and stain marks.

  • I started with overlaying Paper Old and Paper Vellum materials from the Marmoset Library to have a base
  • Then added Paper Stained layers to have some stain details here and there
  • On top of that, I added dirt layers.

For the text, I googled some close-up photos of some old books with nice colorful ink decorations that I liked and used them as a texture for my pages.

I plugged them into texture input in my layers, first positioning them by hand to fit the page space well:

  • For Albedo, I just used overlay blending mode and put a white multiplier because by default it took the average color from the texture and was yellow-ish.
  • For Roughness, I used Linear Burn blending mode and tweaked Roughness value and contrast to achieve the result I like.
  • For Metalness, I used standard blending but inverted the values to have a metallic finish on the text and adjusted the metalness value for my liking.


For the border:

  • I started with Bronze Rough material. 
  • I added some layers for color variation.
  • Then utilizing a Curvature Map, I tried to emphasize the depth a bit more.
  • Then I added some color correction and started painting manually areas that on the references were lighter.
  • Then I manually added some dirt to match the references better.
  • Finally, I added a layer to increase the saturation a bit and reduce the contrast so the pages won’t create too much noise from the distance.


The most important thing to achieve good looking and having nice depth patterns on the textures was parallax that utilized a Height Map baked into planes from the high poly. Without it, those are just flat surfaces with opacity that are not looking appealing at all.

1 of 4

Workflow in Marmoset Toolbag

Well, first of all, Texturing in Marmoset 4 is great, and I totally recommend it to everybody to at least try if they are skeptical for some reason. I could just stop right there but let me dig a bit dipper, I would like to point out a few Marmoset 4 features that I’m enjoying the most so far:

  • You are texturing in real-time, so what you see is what you get finally, there is no need for constant exporting from, for example, Substance to check how colors and roughness actually look in the engine.
  • Painting even in 4k is super fast and fluent and if you stack too many layers on top and it gets slower there is the fast viewport option that in exchange for a bit slower layer switching allows you to paint fluently in almost any case.
  • You can stack layers and, what is even cooler, layer masks on top of each other in a way that only affects one mask layer not the whole stack below them so you can have multiple paint layers affected by Grunge Maps dedicated to them and everything on just one mask stack.
  • Wand Select and Gradient Tool. These were kind of hard to show with the book, so I used a part of the armor for my upcoming character.
  • It is not really a software functionality, but guys from Marmoset have a Discord server where we can complain about whatever issues we find and they actually take some time and answer those questions. 

Obviously, nothing is perfect, and there a few things I would love to see implemented in future updates:

  • for now, there isn’t any function similar to the one from the Substance that allows you to reload the mesh with different UVs and that will keep all your brush strokes, so you just have to be certain that what you import for texturing won’t change or you will lose information from paint layers. 
  • there are not many materials in the library especially speaking about fabrics were compared to a Substance it is just a fracture of the size, but I’m sure this will change and I see they are adding some new materials from time to time so we just need to give them some time I guess.
  • it would be great to have autosave implemented, even though Marmoset is very stable it always hurts when you get your work lost because you forgot to save. 
  • and guys, we need that color picker, please.

Lighting and Rendering

I started by choosing the right sky for me, I wanted something with good contrast, so my metal ornaments would shine nicely. I also wanted to have light sources from different directions – I have chosen City Hall Balcony.

  • First I added directional lights in the places where the light sources are on the sky to enhance the sky. Just note that I increased the child-light brightness to 4.
  • Then added fill spotlight and the main source from the top to lighten the book better
  • The last thing I added was fog to match my background color with the burgundy table cloth I made for the presentation. 

I haven’t used any post-production settings except for the Hejl tone mapper on all cameras. I generally use this setup for everything I do in Marmoset because it makes my colors look better, and I have more contrast than with linear mapping. 


This project went relatively fast for me, compared to portfolio characters that usually take few months to finish. The whole thing took a week for high poly, about two weeks of after-hours retopology since there was a lot of tedious parts (such as open pages) and I was a bit lazy about it, to be honest, and about a week (full time) for texturing and the whole presentation. 

The main challenge during this project was to not get overwhelmed by all those pattern details on the covers and pages that you can see looking at the reference pictures for the first time. The solution was to take it slow, break it into smaller parts, and put everything together one by one. My advice for making such a prop would be to find one that has a lot of references because it makes life way easier and lets you focus on modeling/texturing. Once you have that, take it slow and make it as good as you can. Don’t rush it, there is no point in choosing a complicated asset and just failing to deliver because you were too impatient to finish it properly. The last thing, as Georgian once said: "If you want to make a portfolio piece choose something that people will be asking themselves, how the hell did he/she do it?, not another AK-47 or a radio station that even if done really well can get overlooked because it is just another copy of the same thing." I totally agree with that and I hope my book fulfills this rule. 

Piotr Zielinski, 3D Character Artist

Interview conducted by Arti Sergeev

Join discussion

Comments 0

    You might also like

    We need your consent

    We use cookies on this website to make your browsing experience better. By using the site you agree to our use of cookies.Learn more