Photogrammetry in Unity

To edit and create a photogrammetry mesh, read here.

When you're done creating your mesh and brought the polygons down to a reasonable size* for a game asset, you can export the mesh as an .fbx model from Blender and then import it into Unity. Create a folder called for example "Models", right click and choose "Import New Asset" and navigate to your saved fbx model. In Unity's import settings, you can set "Rig" and "Materials" to None. (Read below about how to export/import fbx from Blender to Unity.)

Import or drag in the texture that belongs to the mesh. Create a Material for your photogrammetry mesh and use the texture on the Albedo Map. Read the part "Use a mesh with modified UV" if you're having issues with the UV and the texture is spread over more than one. In Blender you can also bake a normal map from a more detailed version of your mesh onto a more decimated version. You can then use the more decimated version as the game asset and use the normal map image in the material. This process is found under Blender's Cycles render mode, then under Bake - Selective to Active. (More on this later.)

*What a "reasonable size" is depends on what platform you are targeting and what your mesh is going to be and how many other objects that are going to be in the scene at the same time. As a very, very rough estimate, for a simple PC game scene, a static background mesh with 10 000-50 000 tris could be ok. You can use the profiler in Unity to check.

To let other objects interact with the mesh, give it a mesh collider component. In the video example below, the rock wall photogrammetry mesh has around 40 000 tris. It has a mesh collider. The falling spheres are Unity's default Sphere Objects, with a Sphere Collider and a Rigidbody Component that uses Gravity. It has a Physic Material with a slight bounciness. The rock also have a Physics Material to better control the friction and bounciness.

The Stickman is an image animation composed of transparent images. They are tied to a game object that has a Character Controller component. This gameobject's transform is moved forward by script but the Character Controller is in control of the surface movement since it is using gravity.

How to export a fbx model from Blender to Unity with correct scale and rotation


Exporting from Blender


Example, use Blender's model Suzanne for an easy test to get it right:


Add the Monkey Suzanne in Blender. (Add - Mesh - Monkey)

View from the right

Rotate on x axis to -90 (nose pointing upwards, head pointing in green arrow direction).

Object - Apply - Rotation

Rotate to 90 (Head points up again. Do not apply now.)


File - Export - FBX

Check or mark this in Blender export window:

Selected Objects

Mesh


To get the scale right there are at least two options:

Alt 1: you can set the Scale in the Blender export window under "Transform" to Scale 0.01

Later in Unity you uncheck "Convert Units", under Model in Import Settings.


Or

Alt 2: in Blender, scale your model to 100 first before export. Press "S", write 100, confirm with enter or left mouse click.

Apply by go to Object - Apply - Scale

Then scale it down again to 0.01. Press "S", write 0.01, confirm with enter or left mouse click. Do not apply this.

Export model. Don't change scale settings in Export window, keep it at scale 1.


Later in Unity you don't need to uncheck "Convert Units".

But, notice that "1" will in this case show up in Unity's Transform Scale as 0.999999 which is a floating point thing, it is a correct depiction of "1" but if it bothers you (it bothers me) just change it to a clean 1.



Importing to Unity


In Unity

Right click the folder you'd like to import to, choose Import New Asset

In Unity Import Settings

Model (about Scale Factor, see above)

Rig - Animation Type - None

Animation - Uncheck Import Animation

Materials - None

Apply the settings