banner



Unity How To Reduce Draw Calls

Draw calls, broadly speaking, are similar to when a painter has to un-load their brush with one colour of paint, and load it up with another, before continuing to draw.

In GPU terms though, the different "paint colours" equates to different materials in your scene, and different models which can move independently.

Therefore, you can reduce these number of draw calls by designing the objects in your scene so that as much as possible can be drawn with each single "call".

Combining Meshes of the same material & texture.
If you have a number of scattered scenery objects in your scene which all use the same texture and material - for example, many buildings, rocks, fences, etc - which do not need to move independently, you can combine these objects together into a single large mesh which shares one single material even though the parts may be physically separate in space. This way, you incur one draw call for the whole set, rather than one per object.

You can automatically combine meshes in Unity using the CombineChildren script provided in the Standard Assets package.

Combining Meshes with different materials & textures.
If you have objects which use different textures and materials, it's still possible to combine them into a single mesh and thereby reduce draw calls, by creating what's known as a Texture Atlas. A texture atlas is a single large texture which contains each of the smaller textures used by a number of objects. Each object's UV coords is modified to fit the smaller area within the atlas. There are a couple of drawbacks to this technique, one of which is that all the objects must now use the same material, and therefore the same shader type (even though they keep their respective textures).

For example, if you had a building which uses different textures for the roof, doors, walls, beams, cornerstones, windows, etc, you might combine these into a single texture atlas. In doing this, you sacrifice the ability to use a different material for each item, but you gain the benefit of being able to collapse the various parts of the building into a single mesh with a single material, therefore enabling you to draw the entire building in 1 call, instead of many:

Example of a texture atlas

Typically though, the original "window" material might be transparent and reflective, and therefore wouldn't necessarily be suitable to be merged down into a single material with the other textures, so you might end up with two texture atlases for the final building. One for the opaque, non-reflective parts, and one for the transparent reflective parts.

If you then also have lots of buildings which use these same textures, you could combine these building meshes together too - so for example, you might end up with 10 buildings drawn with just two draw calls: one mesh (and one call) for the combined opaque parts of all 10 buildings, and another mesh & call for the combined transparent reflective parts of all 10 buildings.

This page on GamaSutra has an example of a tightly packed texture atlas which encompasses many objects into one texture: GamaSutra - Practical Texture Atlases

And here's a 3ds Max script which automatically generates texture atlases for you: Texture Atlas Generator. This is worth looking at even if you don't have 3ds Max, because the page has some good animated examples of how a texture atlas is formed.

Texture atlases are also commonly used in games which use 2D sprites for similar reasons, to avoid having to use different materials for each object, and to combine many frames of animation on to a single texture. In these cases they're sometimes referred to as Sprite Sheets.


Another point worth noting is that Unity iPhone supports an automatic batching feature, which automatically combines meshes which share the same material. This means that you can even reduce draw calls further by sharing materials between objects that are moving relative to each other in the scene! (Hopefully this feature will make it into the regular version of unity at some point, but that is just speculation for now!).

Unity How To Reduce Draw Calls

Source: https://answers.unity.com/questions/14578/whats-the-best-way-to-reduce-draw-calls.html

Posted by: mendelfroule.blogspot.com

0 Response to "Unity How To Reduce Draw Calls"

Post a Comment

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel