Features (Frequently Asked Questions)

Tap a title to expand answer

TL;DR: Apple doesn't allow this yet.

I absolutely agree with you — I wish I could make it paid up front (it would save me a lot of time), but Apple wouldn't approve the app.

The situation is like this: a developer can restrict an app for devices that support certain features (i.e. a developer can make an app available only for devices that support ARKit). My original intent was to restrict the app only for devices with the TrueDepth camera (currently iPhone X, XR, XS, 11, 11 Pro, 12, 12 Pro, iPhone 13, iPhone 13 Pro, iPhone 14, iPhone 14 Pro, iPhone 15, iPhone 15 Pro & their Max / Plus / /mini variants and iPad Pro with FaceID) and without the useless camera part, but it turns out Apple won't let you do this (I've filled bug reports together with other developer and suggested that Apple let us, developers, restrict apps for TrueDepth camera-only devices).

So if you submit an app that is fully working only on the iPhone X and not on other devices, your app gets rejected. This is the reason why I made the app free with the useless camera part that's available on all devices and included the 3D Scanner part as an IAP that can be bought only on supported devices (i.e. on devices with the TrueDepth camera).

Because the app can be dowloaded on non-supported devices (again, no way to restrict it to supported devices), I thought it'd be silly to ask money for an app that just takes photos on devices other than iPhone X — i.e. I didn't want to disappoint non-iPhone X users.

  • You can use either the selfie FaceID camera or LiDAR for 3D scanning. Switch between LiDAR and FaceID by tapping the camera flip button.
  • The selfie FaceID camera provides high accuracy and is suitable for scanning smaller objects (e.g. a face, small toys, parts, statues, etc.).
  • LiDAR provides lower accuracy and is suitable for scanning larger areas (e.g. a house, hallway, room, etc.).
  • LiDAR is NOT suitable for scanning detailed surfaces – if you want detail, you must switch to the selfie FaceID camera and choose an appropriate Precision settings.
  • Don't move with the scanned object/scene — it absolutely needs to stay still during the whole time you're scanning.
  • Move your iPhone/iPad slowly while scanning. If the scan quality isn't sufficient, try moving even slower — try playing with it to see how slow/fast movement influences quality (try also moving very slowly — e.g. at 5mm per second).
  • [new in version 1.3] Heges can give you warning when it starts to have hard time scanning so that you can know when to slow down. Please read answer 14. My iPhone vibrates during a scanning session, why? to learn more.
  • If you experience sudden stop of scanning session while scanning, then try placing another objects in the scene so that the scanner sees multiple objects and is more confident knowing where it is. Example: say you are scanning a symmetric vase and the scanning session is interrupted. The interruption most likely happened because the vase was symmetrical. To fix this issue, try putting the vase nearby e.g. a wall or put another stuff next to the vase.
  • Use appropriate PRECISION settings — the 0.5, 0.8 and 1 mm Precisions are intended for very fine scanning of smaller objects and you need to scan very slowly when using them. The other Precisions (2, 3, and 4 mm) are intended to be used for scanning of larger objects.
  • If you cannot make a useful scan with higher Precisions (i.e. less than 2 mm), try using higher precisions and experiment.
  • Ensure that the scanned object is within the scanner range (depends on the selected Precision (0.5mm, 0.8mm, …)) all the time. I recommend looking at the screen of your iPhone continuously and ensuring the scanned objects are within the scanner range all the time.
  • Revisit already scanned areas — as if you were ironing your clothes. The more you scan a certain part of an object, the less noisy it gets.
  • Note that when you select the "NIGHT" option in the Precision slider, you will enable "Night mode". The purpose of the Night mode is to let you see in the dark, without artificially limiting the maximum depth. When you press the camera shutter button while in the Night mode, Heges will take a photo (the color of the shutter button will change from red to white after switching to the "NIGHT" mode). The Night mode is therefore a photo-taking mode, so Heges will not produce a 3D scan while in the Night mode (you would have to switch to a proper Precision setting like the 0.5MM or the 2MM Precision setting in order to start capturing a 3D scan).

Then you need to scan (i.e. move the phone) more slowly, especially at the very high Precisions, such as 0.5mm, 0.8mm or 1mm. Try playing with the speed of scanning to see how it influences scanning quality. For example when scanning with 0.5mm Precision try moving your iPhone very slowly (e.g. 5mm per second) and then compare it with faster movement — you should see improved quality of scan.

There're 4 ways you can download your models and photos;

  • Click on the Share button — after exporting a scan into either PLY or STL, you can click on the Share button after which you can AirDrop the PLY or STL file or send it to another app via the system Share Sheet
  • via the iOS Files App — the exported .stl and .ply models will be located inside the "exported_models" folder and you can use e.g. Airdrop to send them to your Mac
  • via iTunes File Sharing — just open iTunes on your Mac and drag the "exported_models" folder
  • via built-in Wi-Fi server — instructions for successful Wi-Fi sharing:
    1. Ensure your iPhone is connected to the same Wi-Fi network as the computer you want to share with.
    2. Scan an object.
    3. Export the object to PLY and/or STL. (This needs to be done in order to have the models available.)
    4. In the Library (the list of images and scanned models) click on the sharing button that is at the top right corner a click on the "Start sharing" button (take a look here)
    5. Open a web browser on your PC and enter one of the addresses into it (for example in the image the address could be http://Tmp.local or http://192.168.1.189 — try more addresses, at least one should work.
    6. Now you should see a simple website on your PC where you can download the models.

Infinite Scanning is experimental feature that lets you scan (theoretically) infinitely large spaces — with this feature enabled, you're no longer limited to ~800MB scan sizes — the only limitation is your free storage on device!

To enable this feature, go to the iOS Settings app > Heges and turn on Infinite Scanning

Please note that this feature requires significant computational power, therefore it is advised that you scan slowly and if possible use the newer devices with Apple's A12 chip and newer (iPhone XS, XR and newer and iPad Pro 2018 with FaceID and newer). However, this feature works perfectly OK on older devices too (i.e. on iPhone X).

You'll need:

  • Device A: an iPhone/iPad Pro with the TrueDepth camera (FaceID) - this device will be sharing its screen while scanning
  • Device B: arbitrary (even old, no need to have TrueDepth camera on this device) iPhone/iPad that you're able to install Heges on (no need to buy the IAP here) - this device will receive the shared screen from Device A

How to share screen:

  1. Enable Wi-Fi on both devices. You do not need to be connected to the same Wi-Fi - no need to be connected at all, just enable Wi-Fi.
  2. Double-tap the live video preview on both devices and an overlay will show up.
  3. Tap the "Start Sharing Screen" button on Device A.
  4. Tap the "Receive Shared Screen" button on Device B.
  5. On Device B, select Device A from the list and tap on the Done button.
  6. Screen Sharing is in progress!

To disable Screen Sharing, double-tap the live video preview again and stop Screen Sharing (do it on both devices). You can also control the video-quality of Screen Sharing: go to the iOS Settigns app > Heges > [adjust the slider]. Screenshot here.

You can start/stop scanning session from the device you are sharing screen to. Example: you have an iPhone XS that you want to scan with and an iPad Air that you want to Share Screen with. After you enable Screen Sharing, you can tap the round toggle button on the iPad to start/stop scanning session on the iPhone.

It is possible to hold a small mirror in front of the TrueDepth camera to make scans, so that you're able to see what you're scanning. 3D Pete made this mirror holder for iPhone XS which can be used for this purpose.

A better-suited alternative (which works for multiple iPhone/iPad models) is this iPad / iPhone TrueDepth camera adapter made by Edu Altamirano.

When you're scanning using a mirror, the models are going to be horizontally flipped. To prevent this, please enable the Mirror-scanning toggle button. As models scanned using mirror are horizontally flipped, enabling this button will horizontally flip models that are being exported into STL/PLY. You don't need to have this option enabled when scanning with mirror — just when exporting scanned models.

I'd recommed first exporting your scanned model into PLY (contains colors) or STL (doesn't contain colors) and then using the non-AR viewer.

Use the Internal format AR viewer only when the exported PLY model is too big to be displayed.

The Heges app's 3D model viewers are meant just for a quick preview of the model — any editing of the scanned models should be done on PC or in another app (I recommend using MeshLab and Autodesk Meshmixer).

In version 1.2 of Heges there was added a new underlying scanning technique (and it was made default) that enables you to more easily "rescan" parts of model that have already been scanned and that may contain geometry glitches; to "rescan" a part of model that appears glitchy, just point your iPhone/iPad to the place you want to rescan and stay still for a moment (you should see that the model readjusts). Generally, try experimenting to see for yourself.

If you don't like this new way of scanning (or if it causes scanning session interruptions for you), you can switch to the old scanning technique in the iOS Settings app -> Heges -> turn off "Use New Scanning Method".

The black edges are present due to the new Color Improvement feature. If there would be no Color Improvement, you would see color glitches more frequently (try for yourself how Color Improvement level changes color quality and size of black edges).

To get rid of the black edges, you can turn Color Improvement off in the iOS Settings app -> Heges -> Color Improvement -> Off, or you can change its intensity to either Low, Medium, High, Highest, OP or Über. With Low being the minimal Color Improvement and Über the maximal.

You can go into the "iOS Settings app -> Heges -> Exported Model Units" and then select whether the models should be exported in either meters, centimeters, millimeters, inches or feet.

You can mirror the scanning preview in the iOS Settings app: navigate to: the iOS Settings app > Heges and enable Mirroring preview around vertical axis. Force quit the app if it's open and now the preview is mirrored! Take a look at this screenshot.

Since version 1.3, Heges can inform you when it is having difficulties during scanning by displaying on-screen warning and on iPhones even by vibration feedback.

When you start to feel the vibrations (or see on-screen warning), it means you should start to be more careful — e.g. slow down your movement, get closer to the scanned object (but no more than 10 centimeters or 4 inches) or move back to the spot where you did not get the warning. You should see these warnings only as a suggestion to be more cautious — but it can happen that you will be able to continue scanning just fine even when you get the vibration feedback.

You may want to disable the vibration warning on older devices (e.g. iPhone X) as it can cause performance loss.

You can disable the vibration warning in iOS Settings app -> Heges -> Scanning Warning Vibration Feedback.

I would recommend 2 programs for mesh post-processing and cleaning: MeshLab and Autodesk Meshmixer. Both are free and available on macOS and Windows.

Those are basic post-processing steps that I recommend in MeshLab for STL and PLY files:

1. Remove duplicate vertices
  1. Open the STL or PLY file in Meshlab
  2. Go to "Filters > Cleaning and Repairing > Remove Duplicate Vertices"

2. Remove small noise
  1. Open the STL or PLY in Meshlab (if not open already)
  2. Go to "Filters > Cleaning and Repairing > Remove Isolated pieces (wrt Diameter)"
  3. A popup will show up — the default values should be OK, so just press the "Apply" button and wait till the noise is removed.

3. Remove black borders (PLY-only)
  1. Open the PLY in Meshlab (if not open already)
  2. Go to "Filters > Selection > Conditional Vertex Selection"
  3. A popup will show up with input filed called "boolean function". Enter this into the filed: r == 0 && g == 0 && b == 0 and click on the Apply button. Then click on the Close button. This will select all points that are black.
  4. Remove the selected points (selected points will appear red): "Filters > Selection > Delete Selected Vertices"

After you perform all the edits, you can export the post-processed model into a new STL or PLY file by clicking "File > Export Mesh As".

You can of course select faces and vertices in MeshLab and remove them by hand too. If you want to close holes in the model and prepare it for 3D printing in general, you can use Autodesk Meshmixer.

The LiDAR sensor produces lower-quality depth data than the selfie FaceID camera (at least in iOS 14). Using the 0.5 and 0.8 MM Precisions yielded results indistinguishable from the 1 MM Precision, hence 0.5 and 0.8 MM Precisions are disabled when using LiDAR.

The current version of Heges saves color information into the OBJ and PLY files in form of per-vertex colors. If you need to convert them into meshes with JPEG/PNG textures, follow this tutorial:

Scanned models can have a large amount of triangles. The goal is to arrive at an optimized mesh with a lower amount of of triangles with a better topology — this can be done by Instant Meshes. Once you'll have such optimized mesh ready, you can bake / transfer the vertex colors from the raw mesh ("cleaned.ply") into the texture of the optimized mesh ("retopo.ply"). Here is how to do it:

1. [Optional] First, perform basic cleanup of the raw mesh (let's say the raw scan file is called "raw.ply"). This step will produce a new (cleaned) PLY file with vertex colors.
  1. Open "raw.ply" in Meshlab https://www.meshlab.net/#download
  2. In Meshlab: "Filters > Cleaning and Repairing > Remove Duplicate Vertices"
  3. [Optional] you can do more cleaning; tips are mentioned in the answer 15 of this FAQ
  4. Save the cleaned mesh as a new PLY file (let's call the new PLY file "cleaned.ply"): "File > Export mesh as...". You will see a saving dialog: make sure the "Color" checkbox is checked and click on "OK"
  5. Close Meshlab

2. Use "Instant Meshes" to create a new, retopologized mesh out of "cleaned.ply" with significantly reduced amount of triangles.
  1. Download Instant Meshes from here (there are pre-compiled binaries for macOS, Windows and Linux): https://github.com/wjakob/instant-meshes#pre-compiled-binaries
  2. Open Instant Meshes and import "cleaned.ply": from the menu, select "Open mesh" and locate the "cleaned.ply" file.
  3. Once the mesh will get loaded, look at the "Remesh as" section in the menu and choose "Triangles (6-RoSy, 6-PoSy)".
  4. Click on "Solve" in the "Orientation field" section of the menu, wait and then click on "Solve" in the "Position field" menu.
  5. Click on "Export mesh" > "Save ..." and save it as "retopo.ply".

3. Now the important part: creating UV mapping + texture for "retopo.ply" and transfering vertex colors from "cleaned.ply" to "retopo.ply"'s texture.
  1. Open a new, blank window of Meshlab.
  2. File > Import mesh > "retopo.ply" (should be WITHOUT colors, that's OK).
  3. File > Import mesh > "cleaned.ply".
  4. In the right panel of Meshlab, you will see "retopo" and "cleaned". Select "retopo" by clicking on it.
  5. Now we create UV mapping for "retopo": Filters > Texture > Parametrization: Trivial Per-Triangle. A pop-up will show up; click on "Apply". If you'll see an error, then increase Texture Dimension (e.g. to 2048 or more). Then click on "Apply" again. If you won't see any new errors, click on "Close".
  6. Now "retopo" has an UV map, so we can transfer vertex colors from "cleaned": Filters > Texture > Transfer: Vertex Attributes to Texture (1 or 2 meshes).
  7. A pop-up will show up. For "Source Mesh", select "cleaned" (because it has vertex colors). For "Target Mesh", select "retopo". "Fill Texture" and "Assign Texture" should be checked. If you'll see any errors, then you should change "Texture width" and "Texture height" (e.g. to the same value as you chose in step 3.5 for "Texture Dimension"). Then click on "Apply" and wait. Once the proces is done, click on "Close".
  8. Select "retopo" in the right panel of Meshlab (as you did in step 3.4) and save the mesh: File > Export Mesh As... > PLY.
  9. Now you have an optimized, textured mesh with optimal topology and low amount of triangles.

TL;DR: Just enable vertex color rendering in Blender and you will see the per-vertex colors of your scan. See the video at the bottom of this text.

Full answer: the reason why you don't see colors in Blender by default is that Heges stores color per-vertex in the PLY and OBJ files and Blender does not display vertex colors by default. You have to enable vertex colors in Blender to see the color of your scans. Follow this guide to enable vertex colors in Blender:

  1. Import your PLY or OBJ file into Blender.
  2. Select the imported 3D model.
  3. In the Properties panel (the panel on the right side), open the "Material Properties" tab (usually the second tab from the bottom — it looks like a red circle).
  4. In the "Material Properties" tab, create a new material for your 3D scan by pressing the "New" button.
  5. A new material will be made; under "Surface", you will see the property called "Base Color" with a yellow-green dot next to it. Tap the dot, and a context menu will pop-up.
  6. Select "Color Attribute" (under the "Input" column). This step will assign vertex colors to the mesh, now you just have to display them (in the next step).
  7. In the top right corner of the 3D Viewport, change "Viewport Shading" to the value "Material Preview". Now you should see a colored model in the 3D Viewport.