This section covers the Texturing phase including how to unwrap & and create UVs and the texture production process.
Unwrap & Uvs
Unwrapping models and setting up UVs are crucial steps in the 3D asset creation process. Users should understand that the builder will manage lightmapping and UVs via Unity's standard Universal Render Pipeline (URP).
You can generate lightmaps directly in the SDK through Unity, or opt to bake textures into the model using your 3D software. Models will utilize the UVs you provide, but remember that you can regenerate UVs in Unity if needed, by selecting the appropriate option in the import panel.
The general guidelines for UV unwrapping can be summarized as follows:
No Overlapping Polys: Ensure that UV islands are flat and distinct, without any overlapping elements. Overlaps can lead to texture visualization errors and complicate lightmap calculations, potentially requiring UV regeneration.
Single UV Channel: Use a single UV channel for each object, unless you're working with custom lightmaps and shaders.
Clean, Smooth Islands: UV islands should be clean, smooth, and flat. Avoid detaching numerous polygons from the main island.
In terms of file formats, OBJ and FBX are most commonly used due to their wide feature support, including animation, weight painting, and textures. For workflow efficiency, aim to minimize file size and work modularly.
For example, consider importing textures separately into Unity rather than embedding them in the FBX file.
When it comes to trim sheets, advanced texturing, and build size:
V-BLDR is fully equipped to handle a variety of texturing techniques. However, it's crucial to manage your texture assets wisely, as they often contribute significantly to the overall build size.
To mitigate this impact, we highly recommend employing techniques that minimize texture load. For instance, consider reusing textures or adopting trim sheet techniques to optimize your project's performance.
One example could be to reuse the same textures, adopting trim sheet techniques etc.
Today's range of software options makes texture production highly accessible. Many 3D applications come with dedicated sections for this task. Industry-standard software like Substance Painter, Substance Designer, and Photoshop are often sufficient for creating a wide variety of surface textures for your application. After unwrapping your model, you can import it into your software of choice for texturing.
AOROME format, a quick win:
Users have the freedom to write or edit any shader that's compatible with Unity's Universal Render Pipeline. However, we recommend using the AO (Ambient Occlusion), Roughness, and Metalness texture system. This approach is particularly useful for reducing the number of textures in your project. The system is built around three core textures, as outlined below:
Example of 3 Core texture system
Diffuse Map: This texture defines surface colors and is a full RGBA image. The alpha channel can store either transparency data for your material or additional monochromatic channel information.
Normal Map: This RGB image dictates how light interacts with the surface, simulating depth, creases, and three-dimensional features.
AOROME Map: This composite map utilizes three monochrome maps, each assigned to a specific RGB channel. It can be easily generated in Substance Painter or Photoshop. The map includes:
Red channel: Ambient Occlusion map
Green channel: Roughness map
Blue channel: Metalness map
Quick Note on Texture Format: We recommend using PNG for its balance of versatility and compression efficiency.
If your asset requires multiple materials, you can effortlessly assign different materials to various geometric areas within your 3D software. When imported into Unity, these assignments will appear as multiple material slots. You can then populate these slots with the corresponding materials directly within Unity.
Note on materials and Draw Calls:
Draw calls are the drawing instructions sent by the CPU to the GPU, be aware that multi material objects have a big impact on the amount of calls during runtime. To avoid this don’t over use material slots.