Simplify a very complex/detailed 3D model for mobile apps
tl;dr;
How a software developer who get's a very high detailed 3D model, quickly & easily optimize it for mobile apps, so he can focus his time & energy on developing the app logic?
I think it's a pretty common use case and there may be a tool for this already out somewhere.
Long story
I have a 3D model (collada) of a machine. This model being created by the machine's engineering team, contains a lot of minute details essential in creating the machine hardware.
Now, I am developing a mobile app with unity that needs to render this machine along with 10 other machines in a single scene. The thing I like about the available models is that they look exactly like the real stuff. At the same time, I am not interested in the internal stuff, the external shell is just enough for me. I have no interaction with the 3D modelling team (let's assume I downloaded the model from some archive), and hence can't ask them to make any changes for me. The model is all I have. I am on my own.
There are two problems I am facing
How to get rid of the interiors of the models?
How to get rid of the high resolutions details in the external shell which the human eye can't detect in a mobile phone?
To give a sense of the scale, the real equipment and hence the model can be as big as 100 ft. (30 m.) while these will never occupy more than a 5 inch HD display. The size of the models ranges from 50MB to 400MB. The entire scene hence can go up to 2GB. Each model has nearly 300k faces.
The other challenge I am facing is that I am a software developer familiar with code and my familiarity with 3D modelling tools is very limited and I would like it to be that way :) I can play around with these tools, but I don't want to start spending half my time with these tools.
I have tried blender's decimate modifier. But the result's aren't good, the amount of details lost is very uniform, instead of being targeted to the interiors. I don't want to spend time in going through each mesh and deleting them manually.
Also, for some reason when I import a model that is exported from blender into unity, they look horrible (some faces/polygons that I can see in Blender I don't see them in unity), even with 0 decimation.
I am unable to digest the fact that the manual process is the only way. I feel with today's technology this would be a simple automation. The steps as I see are
Detect polygons that aren't directly reachable from any exterior raycasts. If required, I can define the set (14 may be enough) of points for the raycast's origin, basically camera's locations.
Delete these polygons
Detect polygons with dimensions less than a threshold
Delete these polygons
Answer by Light997 · Sep 17, 2015 at 06:37 PM
Well, there's one thing I can definitely answer, and that's that the models look weird in Unity because the normals are facing inward.
Normals are basically the values that tell whether a face shows inwards or outwards. Blender is intelligent and displays normals facing in the wrong direction as well, while Unity only shows the normals facing the camera. You can recalculate the normals in Blender Edit Mode Ctrl-N.
As for the insides of your machine, I would just go in and delete it by hand. You'd be surprised how fast you can delete things. That's as far as I can help you.
I will surely give the recalculate normals a try.
Interestingly, if I directly import the coallada models into unity, all the faces looks perfect, so I assume the normals are correct in the original files. When I simply open this collada file and export it to say coallada or fbx, with or without decimation is see these missing faces. Any clues?
Answer by andyastro · Sep 17, 2015 at 06:54 PM
In what regards simplifying a mesh, take a look at the free service announced here: http://forum.unity3d.com/threads/we-provide-free-online-mesh-simplification-service-for-all-unity-users.228104/
As well as at the asset: https://www.assetstore.unity3d.com/en/#!/content/43658
Hope it helps.