In this tutorial series I would like to show you how to convert your tabletop miniatures into a 3d model and load it into the Tabletop Simulator. And all this with completely free software.
This first part will cover the image creation and the 3d scanning. At the end of this part, you will have a readily textured, lowpoly 3d object. This part is the most important one but can be accomplished by anyone who can shoot some sharp images. Bear in mind, that the final 3d object will not be a hand modelled game asset. The scan software does an awesome job to fetch even the tiniest details, but it will create a triangulated mesh, which cannot be easily modified afterwards.
If you only want to digitalize an object, the first part of the tutorial is sufficient. The other two parts are only interesting if you want to bring the scanned object into the tabletop simulator as a game asset.
In the second part I will deal with minor adjustments on the model, especially the base part. If you don’t need that, you can simply skip these parts.
The third and last part covers the necessary steps of importing the 3d object into the Unity game engine. Here we will do the final touches, add a collider mesh and export it as an assetbundle. We will then load this file into the Table Top Simulator.
Ok, so that is the plan. Let’s get started 🙂
Part I: Preparation and scanning
I.I What do you need
First of all, let us have a brief look at the requirements:
An object to scan
This tutorial is about tabletop figures, so this should the object of choice. In general you can also scan bigger things, but in this tutorial i talk about simple 28mm scale figures.
I really recommend using an DSLR camera since they have a larger photo sensor which is good to produce noise free images. Another very big advantage is the possibility to adjust focus and exposure manually.
Miniatures are small objects and it can be hard get a sharp image from all parts of the miniature at once. Especially in situations where parts are pointing towards the camera. The automatic focus will adjust on the nearest part (like a weapon barrel or a stretched out arm) or the rest, switching to manual mode can help to ease it out a bit.
Finding the right exposure value can also be much easier with manual adjustments. After struggling with the programs of my Canon EOS 350D, i switched to full manual mode for the exposure and f-stop settings, and never looked back.
What settings should you use?
Camera settings always require a good balance of shutter speed, f-stop and ISO setting. Each one influences the others:
- A high aperture is important when shooting tiny miniatures. It significantly reduces blurring as it improves the depth of field.
However, it darkens the image and therefore requires the slowest possible shutter speed.
- A slow shutter speed, on the other hand, requires a tripod, as otherwise the image will inevitably be blurred again.
- Additionally, it helps to increase the ISO number, the light sensitivity. But higher ISO can produce noise in the image.
As you can see, the image to the right is much sharper than the one to the left, but requires heavy adjustments in terms of shutter speed and ISO to achieve the same brightness. You will need a tripod, too.
To be honest, i am not a photographer at all, i shot all my photos with the settings in the left image. Shame on me, but i achieved good results and all photos in this tutorial are taken with these settings.
But if you want to have perfect images, go the other route and set the f-stop as high as you can get with your equipment. (Thanks to Axel Castellan, a very talented photographer and miniature painter, who shared some insights with me)
Optional, but highly recommended: A turntable setup with a fixed light
To get consistent results in terms of equal lighting on your miniatures and in order to ease the process of taking the photos, i recommend you to use simple setup with a good lamp with high light temperature and some sort of turntable. A black backdrop behind your setup also helps a lot to avoid unwanted texture issues on your scanned object. This is my simple setup:
I built this simple turntable (20 cm in diameter) out of some polystyrene plates (Depron) and put it under a strong LED lamp. This way i can turn it the exact amount and keep an equal lighting.
I am using a cheap LED lamp with a light temperature of 5600 Kelvin and a brightness of 1200 Lumen. A color temperature of around 6000k is optimal, lower temperatures will produce a yellow tint on your models, higher ones will make everything blue. My lamp produces a slightly yellow tint, so i set a manual white point in my camera to counter that.
We will talk more about the process of the image creation later, for now let’s have a look at the required software.
3DF Zephyr scanning software (free version)
( https://www.3dflow.net/3df-zephyr-free )
The free version is limited to 50 photos per project. What that means is, that you load 50 images into Zephyr, which will build a 3d model baes on the image information. 50 images are absolutely sufficient for our needs.
Unity engine in version Unity 2019.1.14f1 from August 9, 2019 (free) and the TTS sample project file ( https://kb.tabletopsimulator.com/custom-content/custom-assetbundle/#install-unity )
This is needed if you plan to get your scanned model into the Tabletop Simulator (TTS).
Important: TTS received an update and is now utilizing a newer version of Unity . It is recommended to update to Unity 2019.1.14f1 if you already worked with the older 2019.1.0f2. However, content created using that older version should work as intended. At the time of writing, newer versions than 2019.1.14f1 are not supported by Tabletop Simulator.
3d application e.g. Blender (free)
I own a copy of 3ds max, but the shown things can also be down in a free app like blender.
I.II Before the photo shooting
Ok, i assume you have your equipment ready and all necessary software installed. Now, before we start doing things, let’s talk about the best way of creating the imagery.
The scanning software requires as much information about the object as it can get. That means we will have to shoot photos from all angles to cover all areas of the object. It also requires about 60% to 80% of overlapping between two photos so it can get an idea of the position and the shape of the object. (Check out the 3DF Zephyr homepage, there are very useful tutorials about that topic)
If we fail to do this, we will get untextured spots on the model, or even worse geometry errors. We do not want that.
To take the photos, you can move around the object and photograph everything freehand or take the photos from a static position and rotate the object itself by a fixed amount.
I would highly recommend the second option, as it provides a consistent lighting situation for the whole range and allows you to cover all of the object in a more systematic way.
The best way to take the required photos is to shoot two series of 25 photos each that form a circle around the object. Each series is shot from a different angle to avoid blind spots.
The first series should be taken from slightly above the object to cover the upper part, like this:
The second series should be taken at eye level to cover the lower parts of the object, e.g. the underside of raised arms, weapons at aim, etc., like this:
We will not be able to photograph places at the underside. At such places, Zephyr will mix the texture of the object with its surroundings. This will also occur in blurred image areas.
To make these issues less visible, i designed some templates, that you can cut out and glue on top of your turntable . If you use them, Zephyr will darken these problematic areas. So they will get much less noticeable later.
The templates will also help you to position your object just in the middle. With the scale on the edge you can rotate your turntable by exactly 14.4 degrees for each photo. This will give you a full rotation for 25 photos.
I made a version for round bases, optimized for Infinity and one for DBA, which requires rectangular bases. You can get them here.
When you print out the template using a normal inkjet printer and normal paper sheets, your blacks might appears a bit to bright.
I would recommend to print it on glossy paper, or paint it with gloss varnish (i used the latter one) to achieve less light scattering on the surface and a good black color. See the images below for comparison:
- As i mentioned earlier, the most important thing is to produce sharp and well lit images. If you get this right, all is good. If not, the scan software will produce blurred textures, or skip the images entirely.
- Your light setup should cover the front and top of your miniature. Try to avoid dark areas. Use a lamp with a high color temperature, around 6000K.
- Try to shoot the photos under reproducible conditions. Indoor shots and shots with covered windows help to avoid unwanted influences such as ambient lighting from sunlight or other sources that can change over time.
Especially if you want to scan a series of objects, you want to be able to recreate the very same setting each time.
For that reason i also measure the distance from my lamp to the tabletop (25 cm in my case) before starting to take photos.
- Use my provided templates or something similar for the underground. The software needs to create reference points in 3d space to measure distances and create the shape of the target object. So the little markings on a black underground are much better than a pure white tabletop. Zephyr will struggle there.
- NEVER move your object from its ground position during the photo shooting! It has to remain in the very same position, otherwise the scanning software will produce wierd results.
Okay, but enough theory. Let’s take some pictures and see how we can make a 3d object out of them!
I.III 3d Scanning in 3DF Zephyr
Ok, now we took our 50 photos, the hardest part is done now 🙂 . For this tutorial I chose a Zhanshi from the Infinity tabletop game.
The scanning process in 3DF Zephyr is done in several steps:
- Import the photos
- Create a sparse point cloud from the photos
- Build up a dense point cloud and from that a 3d mesh
- Clean the geometry and turn it into a low poly model
- Create the final textured mesh
- Export the model with its texture as an obj file
In the following I will now show every step of my workflow and all settings. I won’t explain every parameter, for that you better have a look at the documentation of 3DF Zephyr. Surely you can do one or the other better, but with these settings I got very good results.
1. Import the photos
1a. Start 3DF Zephyr and go to Workflow > New project:
1b. Click „Next“ and load the images into the project.
1c. 3DF Zephyr will now determine the camera in use and calibrate itself accordingly. Click on „Next“.
2. Create a sparse point cloud
2a. Now we will perform our first scanning step, the sparse point cloud creation. This will be the first representation of our model in 3d space. Switch the settings mode to advanced and enter the settings shown below. After that, click „Next“
Important Note: Setting the Keypoint density to high or very high will guarantee a good result. However, this also means long calculation times. As long as your images are of good quality you can also set it to low or even very low. This will greatly reduce the computing time. (Thanks go to WonderSlug, a tireless member of the 3D infinity miniatures team, for this info)
In case you get positioning errors, check the angle from which you shot your lower series. It might be too low. Also try to avoid shooting the rim of your turntable, Zepyhr might get confused by that.
2b. Hit „Run“ to start the processing.
Depending on your pc hardware, the calculation can take some time.
On the results screen, you can see if all images could be processed. If the software skipped an image, it might be too blurry or be shot from a too different position than the rest of the series.
Remember between two photos there should be a large overlap, so the
software can build a three dimensional network between the photos to get an idea of the space and the contained objects.
In this case everything went fine. If you got a image skipped here and there, it will not matter that much. But if a series of successive images could not be processed, areas of your miniature will not be captured properly. In this case, you should make new images and repeat this step.
Now you can see the first three dimensional representation of your object in the viewport. The blue markers around indicate the camera positions from which a shot was taken. If you click on it, the perspective jumps to the camera position and the photo source is highlighted. This is a good way to understand, where Zephyr got its information from and why it built the mesh like it did. You can clearly see how the camera positions form two circles around the object.
As i mentioned it earlier, in case you get camera positioning errors, check the angle from which you shot your lower series. In most cases, it will be too low. Also try to avoid shooting the rim of your turntable, Zepyhr might get confused by that.
(Updated content 05/20): After creating the sparse dense cloud, we can already reduce the area that will be computed in the next steps. As you can see, Zepyhr scanned parts of the tabletop as well. We can erase that to speed up the process. (Thanks to
2c. Choose the bounding box tool from the main tool bar:
A box gizmo will appear around your scanned object. Reduce the size of the box so that it just contains your area of interest.
Make sure not to cut away parts of your miniature. All content outside the box will be skipped in the next steps. If you are careful enough, you could even get rid off the floor completely by lifting the underside of the box a bit. But pay attention not to cut parts of the base away, it will be important for bringing the whole miniature to the right scale.
Close the bounding box tool menu and proceed with the next steps.
3. Create dense point cloud and 3d mesh
3a. Now we will proceed with the next step. Go to Workflow > 3D Model Generation
3b. On the Dense Point Cloud Generation Page switch to advanced mode again and enter these settings:
3c. Since the mesh is built directly after the dense cloud creation, we now enter these parameters.
After that, hit „Run“ and wait until it is finished.
The reconstruction is completed. We can now see our scanned model in the viewport.. As you can see, parts of the floor got scanned as well.
If you manipulated the size of the bounding box, it might look like that:
4. Clean the model
4a. In most cases you will need to get rid of the floor and maybe other unwanted meshes. To do that, we use the selection and delete tools we see on the right side. In the video I show my usual procedure. At first I choose a top view to roughly cut out the figure. Then I use the Plane tool to select and delete the rest of the floor.
You may have noticed, that i edited a copy of the scanned model. In the panel to the left, you can right click your mesh and clone it. This way you keep the original, in case something goes wrong or you want to experiment and with different settings. For the following steps i always clone the object before i proceed.
4b. First we will optimize the object. Right click the entry „Mesh 1“ on the left side and choose „Filters > Retopology“ Leave the settings at the default values and press „Clone and apply filter“
Now the filter will be applied on a copy of our original model. You can switch the visibility on and off in the 3d workspace by marking the little orange box. This way you can compare the changes to the original mesh. This will become very useful in the last step. But before that we need to change our high polygon mesh in a game friendly low ploy object.
4c. Choose the newly created Mesh 1 filtered1 and select „Filter > Decimation“
4d. The maximum vertex count for objects in TTS is 25000. So enter 25000 and hit „Clone and apply.“
5. Create the final textured mesh
4e. Now we want to create a textured mesh. This is the last step in 3DF Zephyr. It will create the final texture so we can finally export the 3d model.Go to Workspace and select „Textured mesh generation“
4d. Leave all cameras selected and hit „next“. Switch to advanced mode and enters the settings below.
You can play around a bit with the texture parameters, until you get your desired result. Too much sharpening will make your texture too crisp. The Blurriness weights option might be helpful, if parts get too much blurred.
I am quite satisfied with my scanned Zhanshi. Now we can export it as an obj file and close 3DF Zephyr.
6. Export the final model
13. Right click your Textured Mesh and choose „Export“
Enters these settings and hit „Export“. 3DF Zephyr will now create three files: The obj file that contains the pure 3d mesh, a JPEG file for the texture, and a mtl file, that contains the path reference and links the texture to the 3d model.
The end of part I
Now you have created a 3d model from a few pictures. This ends the first part of this tutorial.