Poly Few 

A complete optimization solution for unity 

FAQ

Poly Few only supports unity 2017 and above so please make sure that you're on a supported unity version. Also make sure that the Scripting Runtime Version is set to .NET 4.6 Equivalent or Above. Go to PlayerSettings > Configuration > Scripting Runtime Version and change it to .NET 4.6 equivalent or above. This isn't required in newer versions of unity as it is already the default option.

If the above description doesn't apply, it's likely that this is not a bug with Poly Few but you might be hit with unity's old bug with the package manager and asset importer. The bug causes partial updates to an asset or not even showing updates at all. Try following these steps:

► Delete Poly Few from your projects completely. Do this by deleting the complete Poly Few folder.
► If you're using a windows machine go to
    C:\Users\[YOU_USER_NAME]\AppData\Roaming\Unity\Asset Store- 5.x\Brain Fail Productions\Editor ExtensionsUtilities.
    If you're using a mac machine then go to
    ~/Library/Unity/Asset Store-5.x/Brain Fail Productions/Editor ExtensionsUtilities
► Delete the file named "Poly Few Mesh Simplifier and Auto LOD Generator"
► Launch your project and go to the package manager and download the latest version of Poly Few and import it.

You shouldn't see any errors now. If you still see errors than it might be something else causing the problem. Maybe a conflict with some other asset or a bug with Poly Few itself. Contact me in this case with complete description of the problem and supporting media/images if possible.

In the "Requirements and Limitations" section on the home page of the asset in the asset store. It is stated clearly that:

"Material combiner can only combine materials that use the Standard Shader or its variants (Standard Specular etc) and it uses texture arrays to combine materials not texture atlases."

This in simple terms means that you won't be able to combine URP/HDRP or any other render pipeline materials that use shaders other than the unity standard shader or its variants. This in no way means that importing Poly Few in these render pipelines setups would cause errors. The material combiner function is the only thing that works only with the SRP. That's all. Every other feature works with any rendering pipeline. Also, using the material combiner functionality in anything other than SRP won't throw errors at all. It's just that it won't combine materials and give you an appropriate message for it. The reason for very limited support for the material combiner is that Batch Few combines materials based on texture arrays which requires almost complete rewrite of unity shaders for each render pipeline. In the future I might change from texture arrays to texture atlas based workflow which would support a wide range of materials for combining.

You can use your Poly Few optimized models in VRChat but you'll have to make sure that all custom components/scripts are removed from all of your GameObjects. When generating LODs Poly Few adds a component that you can't see on your GameObject. This is called the "LODBackupComponent". This component helps with reverting the changes. Without this component the "Destroy LODs" button won't work. Also when you combine materials another component "ObjectMaterialLinks" is added to your game objects which allows you to change the properties of individual materials even after merging them. The problem with VRchat is that it only allows a shortlist of unity components that can be used on an avatar/gameobject. You should remove all custom components from your avatar to make sure it works with VRchat this includes the LODBackupComponent and the ObjectMaterialLinks component. To remove these components from all GameObjects in all currently open scenes.
Go to Window > Brainfail Products > PolyFew and click "Remove All Hidden Scripts" wait for the process to finish and save the scene.

Tip: Some of the menu items can also be used directly from the Poly Few inspector window for quick access. Just click the gear icon in the top right corner of the Poly Few inspector window.

PS: This is not something specific with Poly Few but it's a restriction that VRchat imposes. Read here

The most common reason for this problem is that you might be trying to combine meshes for an object that is a child of a parent transform. In such cases you'll have to duplicate the child object and get it out from the parent's child hierarchy or simply move it out of the parent's child hierarchy without duplicating so that now it has no parent transform in the hierarchy. After doing so you should combine the meshes and it should all look good.

When you combine individual meshes into one big mesh it, depending on the complexity and the number of meshes you were trying to combine you might get a lot of vertices in the new combined mesh and unity cannot generate UV2s for meshes beyond a certain vertices limit. This is a limitation with unity's API. This would also cause the mesh to not combine properly. If you turn off "Generate UV2" option from the "Set Extra Options" in Batch Few then the mesh combiner would combine your gameobjects without any issues in such cases.

Other users have already reported this limitation to unity but they aren't doing anything about it. Just search for the error and you'll get an idea. Here are a few links as well.

▬ setperindexuvs-failed
▬ generating-uv2-with-unityeditor-dot-unwrapping

Anyways, there is nothing that can be done in this case, cause it's out of my control honestly and a limitation with unity itself and not Poly Few. You should just not generate uv2 while combining meshes for such GameObjects. Another solution is to reduce the Polygon count of the individual meshes to an extent safe enough for unity to handle the combined mesh and then combine meshes with the generate uv2 option checked.

When you build a package/kit with AltSpace it creates asset bundles for your prefabs and then zips it. An asset bundle file not only includes just the mesh assets that Poly Few generates but also has to make sure that the materials and textures used by your prefabs stay intact and hence it packs those as well. The big size is caused by that. Although, you don't see the materials and textures they are there simply because there is no other way to refer to the materials and textures used by your models/prefabs. To test the truth in this statement try removing all the textures from your materials or maybe remove the materials themselves on your prefab(s) and then build using AltSpace and you'll notice a dramatic drop in file size.

When you combine individual meshes into one big mesh it, depending on the complexity and the number of meshes you were trying to combine you might get a lot of vertices in the new combined mesh. If you have checked the "Generate UV2" option from the "Set Extra Options" in Batch Few in such a case then the mesh combiner would take a lot of time and the editor will become unresponsive. The slow behavior is not caused by Poly Few but the culprit is the Unity's API method "Unwrapping.GenerateSecondaryUVSet" If you don't want the new combined GameObject/mesh to contribute to lightmapping then you should not uselessly generate lightmap uvs for it because not only it makes the mesh combining process slow but also causes a size increase in you new combined meshes. Just uncheck the generate uv2 option from the set extra options in Batch Few.

If you want the new combined mesh gameobject to contribute to lightmapping please check the "Generate UV2" option from the "Set Extra Options" in Batch Few before trying to combine any meshes. After combining meshes make sure to mark the new objects lightmap static and bake the lightmap again. Please note that generating secondary uv set for lightmaps can be time consuming depending on the number of vertices in the combined mesh. Also it increases the mesh asset size. So don't generate them uselessly!

In Unity 2017.2 and below, mesh combiner won't combine meshes if the combined mesh exceeds the maximum vertex count of 65534. This is a limitation in older versions of Unity and has nothing to do with Poly Few.

Yes, PolyFew supports both 16 bit and 32 bit mesh index formats.

Unity Trees (Tree editor) have a limitation that it cannot have wind zones affect it if it has LODs (LODGroup component) setup. This is not a bug in Poly Few but a limitation with Unity itself.

In the "Requirements and Limitations" section on the home page of the asset in the asset store. It is stated clearly that:

"Polygon reduction might not work best for every model, there is a limit that varies mesh to mesh for the number of polygons you can reduce to, without causing too much distortion in the mesh"

There are many methods of mesh simplification that are being used by many different tools out there. There is absolutely no mesh simplification algorithm/method that is universal and works best in every case. There are many cases in which Poly Few works better than other similar tools and there are cases as well in which others might work better. There are many options in Poly Few that allow fine control over the mesh simplification process. You will have to learn these options by experience. PolyFew also has tolerance spheres which become very useful in cases where you want to selectively give weightage to certain areas of the mesh while simplifying the rest normally. Watch this video on tolerance spheres to gain an idea of how they work

Poly Few tries to keep the texture mapping intact as much as possible. Obviously, as the mesh topology deteriorates the texture mapping also becomes poor. To visualize this play the associated online demo and see what happens to the texture mapping when you reduce the model more and more.


► Make sure that you are in the scene view. Poly Few only shows up when in the scene view.
► Make sure you enable the transform gizmo in the gizmos menu from the scene view.
► Go to "Window > Brainfail Product > PolyFew" and click "Enable Auto UI Attaching"

Tip: Some of the menu items can also be used directly from the Poly Few inspector window for quick access. Just click the gear icon in the top right corner of the Poly Few inspector window.

This is a common misconception about Poly Few. To answer this question you must understand "PolyFewHost" component and how it works. PolyFewHost component is required by Poly Few to render its interface, without it you won't be able to see Poly Few, hence it's an essential part of it. This component only gets added when you select a feasible GameObject or multiple GameObjects and then gets deleted from the same object(s) automatically when it loses focus. So don't worry about it because at the end of the day there won't be any PolyFewHosts on any GameObjects in your scene whatsoever. This means that it isn't attached to everything in your scene. It attaches instantaneously to the currently selected object and then gets automatically deleted from it as well upon losing focus. All of this happens so seamlessly that a lot of users get confused and think that it attaches itself to everything in the scene. Now if you don't like this automatic attaching stuff then do this go to
"Window > Brainfail Product > Poly Few > Disable Auto UI Attaching". (It will still get automatically removed when an object loses focus, but won't attach automatically and you'll have to manually add the component yourself). You can even open the PolyFewHost script and look at it's source code. You'll see that it is just an empty class with no code in it. Even if it attaches itself permanently to all of your scene GameObjects (Which is impossible as stated previously) it won't cause even a single frame drop. Please note that disabling auto UI attaching is not meant to be the default workflow with Poly Few. A lot of users are used to this new way of doing things and actually they appreciate this. There are people who have gotten used to the old school way of doing things manually by attaching stuff and then forgetting to delete them and mess up with a lot of settings. You can click on the "POLY FEW" label in the inspector a little bit right to the cat icon and it would appear collapsed.

Did you check optimize game object for the model in the model importer?. Please uncheck the "optimize game object" checkbox of the rig tab of the model importer. The "optimize game object" changes the bones hierarchy (the skeleton) to a predefined skeleton in Unity which unity thinks might be optimal for humanoid animations. This in some cases doesn't work correctly with Poly Few because unity doesn't reflect the changes it makes properly in the data structures of the mesh API. This causes data inconsistency and hence the problems.

Yes, Poly Few preserves animations on your models and meshes. It even supports blend shapes/morphs.

You might get animation problems after combining meshes in some cases where there is a problem with the way your model might be set up. If you have a static mesh attached to one of the bones. The mesh combination logic will not deal with this properly, since that would require it to modify the original game object hierarchy, which I have tried to avoid in order to prevent breaking anything in a worst-case scenario. In this case, you should just resort to combining only the skinned meshes i-e when you click the combine meshes button just select the option of "skinned only" and the animation would work fine.

As an example suppose that you have a warrior with a sword static mesh and an armor. Next suppose the armor is a child of a bone and the sword is the child of another bone. So when these bones are animated the sword and the armor get animated/transformed as well. The problem is both of them are attached to separate bones. So, there is nothing that can be done logically. Just think about it. If you combine the sword and the armor into one mesh. Then you'll have to attach it to one bone as well and if you attach the combined static mesh (armors and the sword) with one of the bones then a subsection of the combined static mesh (Either the sword or the armor in this case) would animate correctly but the rest won't. Your model should be structured properly. That's why it's a bad practice to attach a static mesh to your bone. It's a hackish way of dealing with things. If the sword and the armor were attached to one bone then you could have solved the problem by simply attaching the new combined mesh to the same bone found in "YOUR_GAMEOBJECT_NAME_bonesHierarchy" child object in the new combined mesh GameObject.

You can find the new bones hierarchy in "YOUR_GAMEOBJECT_NAME_bonesHierarchy" child object in the new combined mesh GameObject. You should assign appropriate root bones to you skinned meshes after combining them. Just dig deep into the "YOUR_GAMEOBJECT_NAME_bonesHierarchy" child object to find the correct bones. You have to do it manually at the moment.

You can either disable those GameObjects or disable their renderer components.

Poly Few duplicates the same original GameObjects(without any renderers) so that they can act as colliders for the new combined mesh GameObject.
You can use these placeholders colliders for the new combined mesh. Collision works that way. If you combine several meshes into one then you have a new mesh that is a combination of the previous meshes but is a one single entity now. You can add a mesh collider component and generate a mesh collider for the new combined mesh object as well. If that works. The old mesh colliders or any colliders for that matter are not lost you still have them with the newly combined GameObject and the collision would work fine.

Poly Few uses texture arrays to combine materials. Texture Arrays is a different concept than a texture atlas. It has its pros but also has some cons. The way texture arrays work is that they have to create multiple arrays of textures for each different type of textures (Metallic, Normal maps, Heights etc.). This has several benefits to it in terms of performance, flexibility and unlike texture atlases, it doesn't change the overall looks much and another benefit is that you can still adjust many of the individual material properties on objects even after combining the materials. Because they create multiple arrays of textures for each different type of textures, texture arrays consume quite a lot of space. Don't use very high resolution for texture arrays!. Please keep in mind that texture arrays are not like texture atlases. It's a very different concept and work differently. Read on texture arrays here.

The default skin is definitely not suitable for dark mode. You can change the skin by clicking the small paint brush icon in the top right corner of the Poly Few inspector window (Just left to the ? icon).

Please treat the alpha slider as a dummy control. The alpha doesn't sadly do anything. This has to do with a fact that the alpha channel is a reserved channel in Batch Few. In fact, it denotes the index in the texture array the material points to. So it can't be changed.

Feel free to contact me @kbawar555@gmail.com anytime if you ever face any problems or have any questions or even if you feel like talking for no reason :)
To save your time and help me better understand your problems please provide me with the following information when contacting me in case of a problem:

► A complete description of the problem and how to reproduce it. Any supporting images/media would be highly appreciated.
► Information about your runtime environment. Particularly your OS, the Unity Editor you're running, Poly Few version and the build target.
► Any supporting files like 3d model files or unity packages.

Site was started with Mobirise template