We’re living in a very exciting time for both developers and designers alike. Technology like AR, VR, and everything in between is moving at lightning speeds and shows no signs of slowing down. We are no longer strangers to these types of technologies. In fact, the last few years have been groundbreaking for companies such as Google, Microsoft, and Samsung. But we are not here to explore what companies are breaking barriers in the tech industry, we are here to discuss the process of creating and optimizing assets for Microsoft’s Hololens
device. Hololens has guidelines similar to that of the games industry because they both have hardware limitations to adhere to. Because of these limitations, it’s important to navigate around them to avoid negatively affecting the user experience. There are several 3D packages out on the market, ranging from ridiculously expensive to free. Paid examples include Autodesk products
such as Maya and 3DS Max. Other software which are free to use software are Google Sketchup
. In addition, Hololens requires you to use one of the few supported 3D engines. As of now, Unity3D
is the preferred engine for Hololens and offers the most support. Other platforms, such as Unreal Engine
, are slowly gaining support but are not yet up to par.
Whichever 3D package you decide to use, you need to make sure you are building your assets properly. The limitations I mentioned earlier are very real and can ruin the experience for the user if they are not taken into consideration. While building your models, make sure to pay close attention to polycount, vertex count, and texture count. These counts can stack up very quickly and affect performance, causing unnatural delays.
Vertex count is a tricky subject. It not only pertains to the amount of vertices but the amount of edges going into a vertex. In some instances, a vertex will have more than 4 edges connected to them; this will be hard to avoid. Vertices with more than 5 edges connected to them need to be at a minimum as to not create artifacts on smoothed meshes at render time; these are called poles. Poles aren’t as much a problem unless you plan to animate your models.
Something else to watch for are the types and amount of polygons your model has. A high poly count can slow down render times and cause performance issues. Most 3D engines split quads (4-sided polygons) into 2 triangles automatically so modeling in quads or triangles is ideal. Under no circumstances are you to build your meshes with N-gons (polygons with more than 4 sides); it will produce unpredictable results.
Then there are textures. Keep original sizes at max resolution but upon import, make a smaller version; max resolutions are useful if you need to revisit your textures. It is also good practice to have textures in one image file. When creating textures, make use of as much space when setting up the UVs for your meshes. Having more than one texture file is fine but when a single mesh has close to a hundred textures, things can get messy. The games industry uses multiple textures to achieve high level detail on low poly models, which is extremely efficient. This in return can help reduce poly count as well.
In order to apply textures, your mesh must have a material. Most 3D packages have their own 3D engines; these engines include special editors which produce materials that cannot be exported into another engine. This is not the case for all materials. You should be able to create and export materials using the standard method for that specific application. Just make sure to compare material types and colors once you import assets into Unity. Upon import, Unity can sometimes change materials so it wouldn’t hurt to double check and compare them before continuing. It can get somewhat frustrating when you’ve spent a good amount of time perfecting materials only to notice they are not displaying as intended.
If your assets aren’t made properly, it will delay the work flow and cause problems for developers down the pipeline.
Some common issues are:
- Models not scaled correctly for the engine
- Rotations not set to 0
- High poly count
- High textures count
- Problems with faces such as reversed normals
- Transparency issues
- Models not facing the same front direction
This is not an exhaustive list. There could be many more issues that happen unexpectedly. Be sure to double check your models before and after importing to ensure they work as intended.
Unity supports 3D export formats and proprietary 3D files. Here is a list of supported file types.
3D formats .FBX .dae (Collada) .3DS .dxf .obj Proprietary 3D formats Max Maya Blender Cinema4D Modo Lightwave Cheetah3D
Although application files are supported, it would be wise to keep an eye out for issues that arise upon import. Unity automatically converts these files, and relying on an automatic process can produce unexpected results. The benefits of using source files is the iteration process. You can quickly make changes in-app, save, and Unity will reimport the file with the changes made. These file can however get quite large and can cause a decrease in performance. That is where 3D formats come in handy.
3D formats are smaller in sizes and generally let you choose what data you would like to import; whether it be meshes, animation, or materials. The trade off is that using 3D formats can somewhat slow down the modeling workflow. Every change you make to the asset will require you to export the changes then re-import into Unity. This process eats up some much needed time during deadlines. Both have their advantages and disadvantages; choose which works best for the task at hand.