<p>I have a group of low polygon meshes, with associated normal maps. The normal maps were created by baking from high polygon meshes, which I no longer have access to. Is it possible to recreate anything approximating the original high polygon meshes from my inputs? </p>

<p>I wouldn't expect the output to have the same kind of mesh structure, but want any kind of mesh that would have the same shape / volume as the original high polygon meshes. I would prefer the output to be a mesh, but it could also work if I could get a point cloud or set of voxels that recreated the volume of the original high polygon mesh. </p>

<p>Further clarification: the low poly mesh was created manually from the high poly mesh by retopologising and deleting polygons. </p>

<p>I've also attached a screenshot showing what I mean (as well as the original mesh file in .obj format). It shows a close-up of two meshes of the handle of a sword. The left one is a high poly one (you can see the ridges in the handle), while the one on the right is the low poly version (it is flat instead of having ridges, because the ridges are captured by the normal map). In my use case, I have the low poly mesh (like the one on the right) and a normal map, and want to get the high poly version (like the one on the left). </p>

<p><a href="https://i.sstatic.net/bHFpf.jpg" rel="nofollow noreferrer">Sword handles image file</a></p>

<p><a href="https://drive.google.com/open?id=1MKwP8jGjLTU_4r-MoDWeRB6W99cO3JVe" rel="nofollow noreferrer">Swords mesh file</a></p>

CC BY-SA 4.0
2019-05-16T16:09:56.160Z
I'll just a comment until I can find the source paper/notes, but a while ago I had a similar problem where I wanted to recreate a height map from the normal map. I tried to use some work published by (I think) Nvidia. It wasn't perfect, but it sounds like you would need this as a first step.  I'll see if I can find the link
Simon F
CC BY-SA 4.0
2019-05-16T16:35:25.810Z
I'm not sure if these were the ones we looked at, but perhaps they may be of use:
Dave Eberly: https://geometrictools.com/Documentation/ReconstructHeightFromNormals.pdf 
Siggraph 2011: http://developer.download.nvidia.com/assets/gamedev/docs/nmap2displacement.pdf
Simon F
CC BY-SA 4.0
2019-05-16T17:55:55.033Z
What do you mean with normal map associated to the mesh? How did you generate the normal map? Also how did you generate the low poly mesh?
user8469759
CC BY-SA 4.0
2019-05-18T13:44:58.777Z
Thanks SimonF - very helpful. 
@user8469759 - I tried to provide additional clarification.
ganesha123
CC BY-SA 4.0
2019-05-20T14:59:26.777Z
Depending how much info you can share we can give an exact solution. It is also possible that your low poly mesh is already the best approximation of the original high poly one. If not you can try to minimize some cost function of the form $$ \int_{\mathcal{M}} \lVert n(p) - n_{map}(p) \rVert^2 \mu(dp) $$, you can minimize such integral by using gradient descent, the process is analogous to what @SimonF proposed, however gradient descent on the integral above will take into account arbitrary topology. But you'll need at least boundary conditions.
user8469759
CC BY-SA 4.0
2019-06-04T16:28:33.730Z
@user8469759 thanks. Is there any software you'd recommend that can do the gradient descent on a mesh as you described? In terms of the additional info, could you let me know what other information I can provide? I've updated the post to include a screenshot of two meshes that may provide additional clarification.
ganesha123
CC BY-SA 4.0
2019-06-04T17:54:26.330Z
Can you share two 3d models?
user8469759
CC BY-SA 4.0
2019-06-04T19:11:37.863Z
Also I don't know your background, but I would look up either CGAL or OpenMesh (two geometry libraries). I'm more familiar with the second one. The method I suggested is a variational method, if you have the normals of the original high poly mesh (normal per vertex) then the Euler-Lagrange equation should provide the iteration you need to implement to solve the problem. You can use openmesh to load your low poly mesh, adding more vertices and refine their position using the Euler-Lagrange equations. Let me know if you need help with that.
user8469759
CC BY-SA 4.0
2019-06-06T16:59:40.837Z
@user8469759 Thanks for the offer of help! This may take me a while but I will try. In the meantime I have included two 3d models as requested. They are the swords from the screenshot.
ganesha123
CC BY-SA 4.0
2019-06-06T20:19:15.907Z
That's ok. I'll probably learn new stuff as well.
user8469759
<mesh><normal-mapping>
Recreate geometry from normal map
ganesha123
# Recreate geometry from normal map

(Asked by: username_0 on 2019-05-16)

I have a group of low polygon meshes, with associated normal maps. The normal maps were created by baking from high polygon meshes, which I no longer have access to. Is it possible to recreate anything approximating the original high polygon meshes from my inputs?

I wouldn't expect the output to have the same kind of mesh structure, but want any kind of mesh that would have the same shape / volume as the original high polygon meshes. I would prefer the output to be a mesh, but it could also work if I could get a point cloud or set of voxels that recreated the volume of the original high polygon mesh.

Further clarification: the low poly mesh was created manually from the high poly mesh by retopologising and deleting polygons.

I've also attached a screenshot showing what I mean (as well as the original mesh file in .obj format). It shows a close-up of two meshes of the handle of a sword. The left one is a high poly one (you can see the ridges in the handle), while the one on the right is the low poly version (it is flat instead of having ridges, because the ridges are captured by the normal map). In my use case, I have the low poly mesh (like the one on the right) and a normal map, and want to get the high poly version (like the one on the left).

[Sword handles image file](https://i.sstatic.net/bHFpf.jpg)

[Swords mesh file](https://drive.google.com/open?id=1MKwP8jGjLTU_4r-MoDWeRB6W99cO3JVe)

**Tags:** mesh, normal-mapping

> **Comments:**
> **username_1**: I'll just a comment until I can find the source paper/notes, but a while ago I had a similar problem where I wanted to recreate a height map from the normal map. I tried to use some work published by (I think) Nvidia. It wasn't perfect, but it sounds like you would need this as a first step.  I'll see if I can find the link  
> **username_1**: I'm not sure if these were the ones we looked at, but perhaps they may be of use: Dave Eberly: https://geometrictools.com/Documentation/ReconstructHeightFromNormals.pdf  Siggraph 2011: http://developer.download.nvidia.com/assets/gamedev/docs/nmap2displacement.pdf  
> **username_2**: What do you mean with normal map associated to the mesh? How did you generate the normal map? Also how did you generate the low poly mesh?  
> **username_0**: Thanks username_1 - very helpful.  @username_2 - I tried to provide additional clarification.  
> **username_2**: Depending how much info you can share we can give an exact solution. It is also possible that your low poly mesh is already the best approximation of the original high poly one. If not you can try to minimize some cost function of the form $$ \int_{\mathcal{M}} \lVert n(p) - n_{map}(p) \rVert^2 \mu(dp) $$, you can minimize such integral by using gradient descent, the process is analogous to what @username_1 proposed, however gradient descent on the integral above will take into account arbitrary topology. But you'll need at least boundary conditions.  
> **username_0**: @username_2 thanks. Is there any software you'd recommend that can do the gradient descent on a mesh as you described? In terms of the additional info, could you let me know what other information I can provide? I've updated the post to include a screenshot of two meshes that may provide additional clarification.  
> **username_2**: Can you share two 3d models?  
> **username_2**: Also I don't know your background, but I would look up either CGAL or OpenMesh (two geometry libraries). I'm more familiar with the second one. The method I suggested is a variational method, if you have the normals of the original high poly mesh (normal per vertex) then the Euler-Lagrange equation should provide the iteration you need to implement to solve the problem. You can use openmesh to load your low poly mesh, adding more vertices and refine their position using the Euler-Lagrange equations. Let me know if you need help with that.  
> **username_0**: @username_2 Thanks for the offer of help! This may take me a while but I will try. In the meantime I have included two 3d models as requested. They are the swords from the screenshot.  
> **username_2**: That's ok. I'll probably learn new stuff as well.  

---

## 0 answers

