Introduction: 3D Print Your Favorite Videogame Character
In this Instructable, I'm going to show you how to 3D print your favorite video game heroes. I chose Aloy from Horizon: Zero Dawn and Joel from The Last of Us to demonstrate how to do it.
I don't have a powerful gamer PC nor a 3D printer at home (that's why I play video games on my console), so I will also show you how you can work around these issues.
For this project, you will need the following hardware and software:
- A notebook or desktop computer with
- (optional) CUDA-Enabled GPU (with at least computing capability 2.0) I'm using a GeForce 840M with 2GB dedicated VRAM on my notebook
- Linux, Windows, or Mac OS (I'm using Ubuntu 16.04)
- at least 10 GB of free disk space
- 4 GB or more RAM (I have 4 GB in my notebook)
- Meshroom-2019.1 (free)
- Blender 2.78 or newer (After 2.80, the UI has changed) (free)
- Your favorite video game with "Photo mode" on any platform (eg. on PS4: The Last of Us, Horizon: Zero Dawn, etc)
- (optional) PuTTY and WinSCP (both are free) on windows to connect to a cloud computing instance, if your computer isn't powerful enough for photogrammetry
Step 1: About Photogrammetry
Photogrammetry is a procedure to reconstruct a 3D model from 2D pictures (photos, or in our case in-game screenshots) of a subject.
In order to do it, you have to take photos from many different angles of a subject standing still, without changing anything in the scene.
If the subject is an item or a sculpture, you can not move it between shots, because its pose and environment play a big part in the reconstruction. If you change the conditions, the photos won't describe the same 3D "snapshot" of the world anymore, and the software couldn't reconstruct it so well.
Step 2: Gear Up
Install the following software on your computer to work with:
You will need a photogrammetry tool to create your 3D model to work with. In this instructable, we will use Meshroom.
Choose the one for your operating system, download, and extract it.
Blender 2.79 or 2.80
You will need a 3D modeling tool which is compatible with the Wavefront .obj file format. If you are familiar with Maya, MeshLab, or 3DS Max, you can use them, but in this instructable, I'm using Blender 2.78c.
If you are new to 3D modeling, you should use Blender 2.79 for this Instructable, because it has the same UI as the version of Blender I'm using. Version 2.80 has an upgraded user interface, with a lot of new features, but different hotkeys then what I'm using.
Download the 2.79b version from the previous blender versions page, and extract or install it.
VLC video player
For getting snapshots out of a game video, I'm using the VLC player. You can use your own favorite player, but it should have a snapshot feature, to efficiently take snapshots from a video with a hotkey.
Step 3: Prepare the Scene
First, you have to design the scene, which will be reconstructed as a 3D model.
You have to think about which character you want to 3D print, in which pose, and in which environment (if any).
Your model has to be in a stable pose if you want your model to stand like a sculpture.
In order to reconstruct a 3D object from 2D images, the subject must conform to a list of criteria:
- The model couldn't be transparent, translucent, or shiny
- The model's surface must look the same from every direction (no color-changing surface, nacreous or metallic painting)
- The model shouldn't be in direct light, no shadows should be present on the model
Lighting should be non-glare, preferably cloudy, or ambient light
No glossy surfaces should be near (water, metal, any shining material, like metal armor or weapons)
- There should be enough space around the character for the virtual camera to go around
- Avoid fire, smoke, lightning, and other particle-rendered features (such as fire or lightning arrows)
Step 4: Take the Shots
To take the photos for photogrammetry, move your character into the photo-shoot position, and enter "Photo mode".
In video games, which provide this mode, you can turn it on from the "Pause" menu of the game. This mode freezes the game, and you can fly around with the in-game camera, change the lens settings, add some filters, pose your character, set the time of day, etc. to make the best possible photo of your videogame character.
Before starting to take photos, make sure to hide the HUD and all of the overlays, that are present on the pictures.
You can choose to take pictures directly from the game, or record a video, then take snapshots from the video. In the first case, you may have higher resolution images (because somehow some games tend to make higher resolution pictures if you take them as screenshots), in the second case, the process will be faster, and the images will be lower resolution. However, lower resolution causes the photogrammetry process to work faster on the images because it has to process fewer pixels.
The character should fill in as much space in the viewport as possible. You should go around the character in multiple vertical angles, and take pictures every 10-15 degrees or shoot one video stopping every 10-15 degrees.
Make sure to cover all the visible surfaces of the character from multiple angles if possible. In the sample video, you can see that the camera moves around up and down, to see most parts of Joel. Parts, which have not been seen by the camera will be less detailed on the final model.
Take close-up pictures of the more detailed parts of the character, which you want to be detailed on the result, too (the face of the character, accessories the character wear, etc.)
If you record a video, make sure to stop for a moment at every spot, where you want to take a snapshot. The video game may need some milliseconds to render the view in the best quality possible (see the fence in the sample video).
If you take screenshots, make sure that the feedback icon on label disappears from the screen, before shooting the next picture.
Take snapshots from VLC player
If you recorded a video, open it from VLC player, and play the video.
Press SHIFT + S to take a snapshot from the video (in VLC version 2.2.2).
You can decrease the video speed with the dash, or minus (NUM -) button to be easier to take snapshots or pause the video with the SPACEBAR.
You can find the path of the output directory of the snapshots in the tools > preferences menu "Video" tab.
I attached the input data I used for the Aloy and Joel models in two zip files. For Aloy, I took screenshots directly from the game, using its built-in "share button screenshot" feature, which takes higher-resolution pictures than the in-game resolution. For Joel, I recorded a video in photo mode and took snapshots from it with VLC player.
Step 5: Meshroom Iteration 1 Sparse Reconstruction
If you don't have the latest gamer PC with a huge amount of RAM, you should start the photogrammetry processing with a subset of your pictures and add more of them later to have more details on your model if needed.
I recommend choosing 40 pictures as a first iteration, which covers the subject well around. This way, the processing will be faster, and you will get a 3d model to work with sooner.
Start meshroom. You will see an empty project at first. Save it in a folder, where it could put its 5-10 GB temporary data for the processing. After that, add the first round of images to the project by drag-and-dropping them to the left panel of the viewport one by one, or as a folder.
After dropping the images, the selected one appears in the Image Viewer, the others are listed in the Images panel. The pictures now have a small red aperture icon in their top-left corner, which shows, that no image sensor found for these pictures. It is true, the pictures were taken with a virtual camera. You can continue with the reconstruction, this won't stop the process.
Now right click on the StructureFromMotion box in the Graph Editor, then select compute. On top of the screen, a progress bar appears, where the completed nodes are green, the node in progress is orange, and the submitted (waiting for execution) nodes are cyan colored.
Wait until the whole bar becomes green, then check the point cloud result in the 3D viewer. You can see points and little horizontal pyramids, which represent cameras in the scene. You can rotate the view by grabbing with the mouse and moving it around. You can pan the view by pressing shift while grabbing the view and moving around. You can center a specific point or camera by double-clicking it. If you select a camera, the Image View will show the matching picture.
Check if all the pictures are converted into cameras, if many are not found, add more pictures from the sides of the problematic ones, to make it easier to match with the found ones. You can find out if a picture couldn't be matched to a camera if it has a red, crossed camera in the top-right corner of the thumbnail.
If you need to add more pictures to this set, drag and drop the new images to the "Add images" field of the Images panel (it appears when you drag something over it), then start the computing of the StructureFromMotion node again.
If you are satisfied with the amount of found cameras, continue to the next step.
Step 6: Meshroom Iteration 1 Dense Reconstruction
The next step is called dense reconstruction. This is the part, where the details of the final model are calculated by cross-referencing the pictures to determine the depth of the pixels in the images.
Because of this, DepthMap and Texturing are the hardest nodes to compute, so it will take a while to finish these nodes. Make sure your computer does not try to sleep, shutdown, or stop the hard drive during the process. If you are working on a notebook, make sure it is running from a charger.
If your PC is slow or doesn't have an NVIDIA Cuda - enabled video card, you can see my instructable about running photogrammetry in the cloud.
For 3D printing, we don't actually need the model to be textured, so right-click on the MeshFiltering node, and select compute.
After the process is finished, double-click on the MeshFiltering node to show the result in the 3D viewer. You can switch the contents' visibility in the 3D viewer by clicking on the eye icon next to a content label.
If you are satisfied with the results, you can optionally run the "Texturing" node, to let Meshroom texture the output model, but it is not necessary for the 3D printing. I use 4-times downscaling instead of the default 2-times because the 4 GB of memory in my notebook is not enough for the texturing process. Left-click on the node to edit its settings, and set Texture downscale to 4 if you have a similar computer.
If you have less than 8 GB of RAM and having issues during the Meshing, you could set
- Max input points to 5000000
- and Max points to 500000
Step 7: Meshroom Iteration 2 - Refine Input Data If Necessary
If you found parts on your model, which look different than they should, then you could add close-up pictures of those parts to the project. The face of the character will probably need some more details.
In this case, you should choose some close-up pictures from the unused images, which cover the less-detailed part of your model.
Select all the new pictures at once, and drag-and-drop them to the Images panel, down to "Augment reconstruction".
This will create a new pipeline in the Graph Editor, which uses the point cloud result of the previous iteration.
Right-click on MeshFiltering_2 node, click compute and wait for the results.
You can repeat this until your model looks as good as it can be. Watch out though, every iteration becomes slower and slower, because of the increasing images count!
If you want to speed up the photogrammetry process, or your PC doesn't have an NVIDIA Cuda -enabled video card, you can run photogrammetry in the cloud .
If you are satisfied with the results, move on to the next step.
Step 8: Blender: Basic Usage
If you haven't used Blender yet, here is a quick guide to navigation and the most common tools we'll use:
If using a notebook with a touchpad and no middle mouse button, open settings (CTRL + ALT + U), select the input tab, and check "Emulate 3 button mouse" checkbox.
You can use the middle button of the mouse to turn, SHIFT + middle button to PAN the view.
You can right-click on a model, vertex, edge or face (depending on the editing mode) to select it.
If you are working on a laptop and selected to emulate a 3 button mouse, use ALT + Click to turn and ALT + SHIFT + Click to PAN the view, or use the CTRL + scroll or Shift + Scroll to PAN left/right or up/down the view without clicking.
You can use the mouse scroll to zoom in/out
You can press NUM 7 to set TOP view, NUM 1 to front view, NUM 3 to Right view, NUM 9 to flip between Top/bottom, front/back, or right/left views, and NUM 5 to switch between Orthographic/Perspective projections.
Press Z to switch between Wireframe/solid shading mode:
In solid shading mode, you can only select vertices (points of the objects) you see (not ones on the far side of the model). In wireframe, you can select vertices through your model.
To move \ rotate \ scale objects in your project, you can use the default 3D view mode called "Object mode". To edit the geometry of an object in your project, you have to select the object, then press TAB to change into "Edit mode". You can use the TAB button to switch between "Object mode" and "Edit mode".
In edit mode, you can switch between three selection modes: vertex select, edge select, and face select. In this instructable, make sure to always have vertex mode selected (the first of the three icons).
In edit mode, to select vertices, you can press CTRL and draw a path. This is called "Lasso select". Everything inside the path will be added to the selection. To deselect vertices, press SHIFT, too when drawing.
You can use "Circle selection" by pressing 'C'. With this tool, a circle appears around the mouse pointer. Using the mouse scroller, you can change the size of the circle. Every vertex inside the circle is selected when you click with the mouse. To deselect vertices, press shift when clicking. Press ESC when you are finished selecting vertices using "Circle selection".
You can use CTRL + Z to undo selection and any other operations, or CTRL + SHIFT + Z to redo them.
Press R to rotate, type in the number of degrees, or move the mouse around the pivot point, click or press enter to finish rotating. You can press minus to change the direction of rotation.
To scale an object, press S then type in the multiplier number or move the mouse to set the desired size.
With both tools, you can use x, y or z buttons to restrict the operation on a specific axis. You can press SHIFT + x, y or z to restrict the operation on all but the selected axis.
Step 9: Blender: Import the Scene
First, delete the default cube from the project.
Right-click on the cube to select it, press X or Delete then click on the confirmation popup to delete it.
Import the output of the Meshroom processing.
Click FIle > Import > Wavefront (.obj); and open /MeshroomCache/Texturing or MeshFiltering folder. In this folder, you will find folders with random names. If you have run multiple iterations on your project, you will have the same number of folders here.
To find the latest one, sort them by date, by clicking the small calendar icon on the top toolbar, and choose the first folder from the top.
From this folder, select the mesh.obj file.
On the import panel, set the orientation of the file you import by selecting -Y Up from the Up dropdown, then import the model.
Step 10: Blender: Level the Scene
While the scene is selected, press NUM 1, then NUM 5 to switch to the front view and orthographic projection mode.
Press R to rotate, type in the number of degrees, or move the mouse pointer around the pivot point, until it looks level, then click or press enter to finish rotating. You can press Shift while moving the mouse pointer around to make it rotate slower. You can see the actual degrees of rotation in the bottom-left corner of the viewport.
Press NUM 3 to switch to the right view, then repeat rotating the object on the other axis if needed.
Step 11: Blender: Remove the Surroundings
Now, that the scene is leveled, let's start removing the unnecessary parts.
Press NUM 7 to switch to the top view, and make sure if the view is in orthographic projection mode.
Zoom into the model to fill the viewport with the character as much as possible.
Right-click on the model the select it, then press TAB to change to edit mode.
Press Z to switch to Wireframe mode.
If the vertices of the model aren't selected, press button A to toggle selecting all or none of the vertices of the model. Select all the vertices of the model.
Now we will deselect the parts of the model we want to have, all the others will be deleted from the mesh.
Press C to use the "Circle selection" to deselect vertices from the mesh. Use the mouse scroll to scale the circle to the appropriate size, which will be the size of the platform the character will stand on, and SHIFT + left-click to deselect these vertices.
After that, resize the circle, and make sure that all the parts of the character are deselected, too.
SHIFT + Left click to deselect vertices from selection, and press ESC to finish working with Circle selection.
Press X or DELETE, then select "Vertex" from the context menu to remove the selected vertices from the mesh.
After we removed most of the unneeded surroundings, select the part of the floor, which is not needed for the platform, then switch to the front ortho view, and deselect the vertices, which are part of the character, and we don't want to delete.
Delete the excess floor by pressing X or DELETE, then select "Vertex".
Step 12: Blender: Fine Rotate the Model
To make sure our character is truly leveled, we need to fine-tune the leveling, by doing the same steps again.
Press TAB to change to Object mode
Press NUM 1 to front ortho view, press R and use the mouse or type in the degrees, and click or press Enter.
Press NUM 3 to right ortho view, and repeat the rotation.
Step 13: Blender: Joel - Remove Non-manifold Triangles
First, we will process a character having contact with the ground (Joel from The Last of Us).
As we can see, our model is hollow, and have big holes in its geometry, on the bottom of the part.
To 3D print a model, we have to make it "manifold". It basically means that it is a closed, "watertight" mesh, with no holes or discontinuity inside itself. This way we always know what is inside and what is outside of the model.
Technically it means that every edge of the model connects two faces together.
If we open the select menu on the bottom toolbar of the 3D view and choose "Select All by Trait" > "Non-manifold" (or press CTRL + SHIFT + ALT + M), we can select all the vertices of those edges, that doesn't conform to this rule.
These are the boundary vertices of our model. We want these to close in and make our model manifold in order to be 3D printable.
First, we have to go around and deselect the inner vertices of every non-manifold triangle of our mesh. To do so, after selecting non-manifold vertices, switch to face selection mode, then switch back to vertex selection mode. This way, just those vertices are selected, which form triangles. Deselect the vertices, which are closest to the center of the model.
Delete the remaining vertices.
Select again "All by Trait" > "Non-manifold", switch to faces selection mode, then back to vertex mode. If no vertices remain selected, this step is done.
Step 14: Blender: Joel - Extrude the Base
We will extrude the border vertices to make the wall of the base, then create the bottom of the base.
Select all the non-manifold vertices.
Press E to extrude vertices, press Z to move the extruded vertices vertically, and type in a (negative) number to move the extruded vertices with, or move the mouse pointer down, then click, or press enter.
With the new vertices selected, press S to size, Z to size along the vertical axis, 0 to make the extruded vertices arrange into the same plane.
Then press E to extrude again, and before finishing the extrude, press S for sizing, Shift + Z to size along the horizontal axes, then 0 to meet them at the center, and finally click with the mouse or press enter.
Press Alt + M to merge them and select "At the Center" option from the context menu.
Press Tab to switch back to object mode.
This sculpture is ready to export.
Before exporting it, we will process another model, which doesn't have direct contact with the ground.
Step 15: Blender: Aloy - Make the Base for a Floating Character
If the output of Meshroom is a character (Aloy from Horizon: Zero Dawn) whose feet don't have contact with the floor, the creation of the base is a little different.
When deleting the surroundings of the character, we have to remove the floor, too.
Now, we can create the base of the model.
Switch to Object mode by pressing TAB.
Set front ortho view with NUM 1, left-click right under the character, where the base will be created.
Now, set to right ortho view with NUM 3, left-click right under the character, to specify the cursor position in 3D space.
Select the create tab on the left toolbox, the click "Cylinder". This will create a cylinder at the 3D cursor.
We have to set the cylinder properties:
- Vertices: the number of points of the cylinder top and bottom
- Radius: the radius of the cylinder
- Cap fill type: Triangle fan
- Depth: the height of the cylinder
Step 16: Blender: Aloy - Matching a Base to a Floating Character
In this step, we're going to attach the feet of the character to the cylinder base we've just created.
In the first picture, we can see that the front foot of Aloy doesn't touch the top surface of the cylinder.
We have to level the character, so both of her feet touches the top of the cylinder.
To do so, go to Front ortho view with NUM 1 and NUM 5 (if in perspective projection), right-click the character, then press R to rotate the model. Type in the number of degrees, or use the mouse to rotate the character and press enter or left-click to finish it.
The character may be dislocated in case the pivot point is far away from the bottom of her feet. In this case, press G to grab and move the model, and position it to touch the top of the cylinder.
Now repeat it for the Right ortho view with NUM 3. Rotate and move the model to the center of the cylinder, having both her feet intersect a little the top surface of the cylinder.
Step 17: Blender: Aloy - Attaching a Floating Character to the Base
In this step, we will fuse together the base and the character.
Select Character model > Click Modifiers (Wrench) > Select Boolean.
Select wireframe display mode, by moving the pointer into the viewport and pressing Z if not in Wireframe mode.
On the modifier panel, select the cylinder. After selecting it, the viewport gets updated, and only the intersecting part of the Character model will be visible. This way, you can check if the character has intersecting part with the Base.
Set select mode: union. By doing so, the whole character and the platform will be shown fused together. This means that the result of the modifier will be one object, which contains both parts.
Press Apply. Now, the Character model is extended with the platform.
Select the cylinder from the top-right Outline editor.
Move the mouse pointer into the viewport, then press X or DEL to delete the platform object.
Then select the character model with a right-click on it, then switch to Edit mode with the TAB button.
If not the platform is selected, then select all the vertices of the platform, then press CTRL + T to split its faces into triangles in order to make it 3D printable.
Step 18: Blender: Scaling the Models
Set to Object Mode
Open Grease Pencil tab > Select Ruler/Protractor
Drag a line between the top and the bottom of your character
Divide the wanted size (in mm, cm, or inches) with the measured value,
eg.: 8 cm / 0.46 = 17.39 or 8 cm / 0.38 = 21.05
Press ESC to exit the Ruler tool
Select the model
Press S to scale, and type in the calculated sizing number, which was in our example: 17.39, then press ENTER
With the ruler, check if the base, which the character stands on isn't too thick. It should be around 1 mm, 0.1 cm, or 0.04 inches thick (depending on your used unit).
Eg.: the platform is 0.87 cm. The needed width is 0.1cm, so it needs to be decreased by 0.77 cm.
If it is too thick, select the bottom of it, and press G to grab it, press Z to move on Z axis, and type in the decrease in thickness (0.77), then press Enter.
If the top of the base is uneven, it could restrict the height of the base. In this case, make sure not to cross it with the bottom of the base when shrinking its height.
Step 19: Blender: Save and Export the Model
To save the model for further use in .blender format, select File > Save.
To export a model in a 3D printable format, select File > Export > Wavefront (.obj)
Select Up: Z up in the export panel before exporting the model.
Step 20: 3D Print the Model on Your Own 3D Printer
Congratulations, you have finished creating your favorite videogame character with photogrammetry.
If you own a 3D printer or have access to one, you will know how to slice and 3D print a model.
In the following steps, I'm going to show how to 3D print a model if you don't have access to a 3D printer.
Step 21: 3D Print in the Cloud
These websites are 3D manufacturing sites, which offer 3D printing service for a pre-calculated price. It will cost more than 3D printing with your own printer, plus shipping costs are added to the price, but if you don't have your own printer, this can be a good alternative.
You can get free quotes from both of these sites, without registration, and a nice preview of your uploaded model.
I always use 3dhubs first to double-check if my model is good for printing because it shows if there are printability issues with the model, but I check the price of the print on both pages.
Step 22: 3D Print Using 3DHubs.com
Open 3dhubs.com, select "Get instant quote".
On the next screen, upload your model.
After uploading, the system processes the model, then shows a small thumbnail image of it, and a price for the printing cost with the default selected material and process.
You can click on the image to preview your uploaded model on an interactive view, where you can turn it around, and place a reference object next to it (a banana).
If your uploaded model is not in millimeters, click on "Change units", and select the correct unit.
Select the PLA > Standard PLA material for a low-cost model, with fewer details.
Select Resin > Standard Resin > SLA/DLP for a much higher resolution print, with higher printing cost, too.
You can change the layer heights, too. Smaller layer heights cause better resolution on the print.
After selecting the desired material and process type, wait for the "manufacturability feedback" link. It will be found under the "change units" link.
If the link appears, you can click on it, and see the issues, which the system found with the model, such as:
- Thin walls (too small wall widths, which can't be printed),
- Intricate details (smaller details than the current layer height)
- Mesh integrity (if you have holes, wrong faces or edges in your model)
- Hard to remove supports (parts, which must be supported from bellow, but the supports are hard to get out after the print)
If your print costs less than 30 Euros (or whatever is the location-specific system-defined minimum price at your location), you have to pay that minimum price for the print.
In this case, you could team up with friends and buy more prints, size-up your model, choose a more expensive material, or just pay the surcharge.
If you're ready, and chose to print your model through 3DHubs.com, click the "Continue to submit request" button to continue, register, and place your order.
Step 23: 3D Print Using CraftCloud
Open print.all3dp.com in your web browser.
Upload your model, select the unit, and wait for the upload process.
Click "Configure selection".
Wait for the offers to process.
While they're loading, you can click on the small thumbnail image of the model, to open the preview view, where you can see your uploaded model.
You can turn around your model with the left mouse click grab and rotate, you can zoom in/out with the wheel, and pan the model with CTRL + grabbing.
You should scroll around all the materials because the list is not ordered by price.
After choosing the desired material, you can select a variation or finish for the product (for an extra fee).
Then you can select a color to print with (special colors for an extra fee).
In the next step, you can choose the shipping time and printing cost from a list which suits your budget the best, then place your order.
Participated in the