Jump to content

Conflict issue between "Poly Few" Assets


HappyDram

Recommended Posts

 

안녕하세요. 기존에 개발하던 프로젝트에 GTS를 추가했더니 이런 이슈가 생겼습니다.

“Poly Few” Asset 끼리의 충돌 이슈라고 판단됩니다.

Poly Few 에셋스토어 정보 :https://assetstore.unity.com/packages/tools/utilities/poly-few-mesh-simplifier-and-auto-lod-generator-160139

이슈가 생기고 나서 Poly few를 다시 임포트 했을때 생기는 이슈 창 입니다.

이후에 다시 GTS를 임포트 했을때 생기는 디버그 창 입니다.

정확한 원인파악을 해보려고 했지만 어려웠습니다.

Poly Few Asset은 LOD System 에 중요한 Asset 이라 제거하기 힘듭니다.

어떻게 이 이슈를 해결 할 수 있을까요?

현재 시스템 정보는

유니티 버전은 Unity 2021.3.6f LTS 입니다.

 

 

hello. This issue arose when I added GTS to the project I was developing.

It is judged to be a conflict issue between “Poly Few” Assets.

About Poly Few Asset Store: https://assetstore.unity.com/packages/tools/utilities/poly-few-mesh-simplifier-and-auto-lod-generator-160139


This is the debug window that appears when you re-import "Poly few" after an issue.

image.thumb.png.0464b3816bb72420305a67d4906ea104.png
This is the debug window that appears when GTS is imported again later.image.thumb.png.6138df8cf91aeef8405b36ba60c5a1c5.png

I tried to figure out the exact cause, but it was difficult.

Poly Few Asset is an important asset to the LOD System and it is difficult to remove.

How can we solve this issue?

 

 

Unity version is Unity 2021.3.6f LTS.

Link to comment
Share on other sites

Thats sadly the bad thing when it comes to name spacing. 
You would need to adjust one of the assets namespace in order for it to work correctly. 
In this case Poly Few helps reduce assets and then you are done using it. 

So I really see 3 options here: 
1. You can change the namespaces in Gts (which can kinda be a pain). 
2. Open a new project with Polyfew and then reduce the assets. Then take those reduced assets into the new project. 
3. Remove polyfew after you have gone through the project and reduced the assets. You would want to not add GTS until this process is completed. 
 

If I am not mistaken Polyfew doesnt need to stay in the project after you reduce your assets. 

 

Link to comment
Share on other sites

  • 2 months later...

I just signed up here because I'm experiencing this same problem. Uninstalling PolyFew is not an acceptable solution. 

 

Game development is an on-going process and PolyFew is a useful tool.  Plus, PolyFew can be used at runtime: "Supports mesh simplification on the fly with a powerful runtime API."  The main reason I obtained it is actually for use at runtime.  So PolyFew needs to stay.

 

Figuring out what was going wrong was a pain because Unity is a bit odd in how it imports code, deals with namespaces and breaks things up into assemblies.  I'm relatively new to Unity, but I've got 18+ years of professional C# architecture & development experience so I found the root cause.

 

Polyfew includes the Whinarn Unity Mesh Simplifier as part of its import and from what I can see its the unmodified source.


Procedural Worlds also imports this, BUT Procedural Worlds has modified the source.  In theory this is fine because the name spaces have also been changed, but somehow the GTS importer is telling Unity that this modified version is the same as the unmodified code which is causing the importer to really screw things up.  

 

With PolyFew already installed (and I've moved it into an assembly of asset packages) here is the screen shot of what the Procedural Worlds GTS import shows.  It wants to overwrite the previously imported (unmodified) copy of Whinarn Unity Mesh Simplifier:

spacer.png

 

And here is how I can tell that the culprit is that GTS is overwriting the original package source with modified code:

ProceduralWorlds-GTS-MeshSimplifier-Comp

 

In a normal C# project this would be a difficult problem to cause but would be fairly trivial to fix.  Unfortunately Unity is weird and not at all obvious on how it handles such things.  Maybe it has to do with the GUID reference identifiers it likes to use.  Maybe GTS modified the code (including the use of custom namespaces - which is good) but kept the same GUID so that unity believes this modified code is the same as the original?  I'm not yet familiar enough with Unity to know how to fix this, but it certainly seems to be related to how GTS performs its import.

 

I've been trying to import all of the purchased terrain assets to start some world building and I've lost about 2 days of effort so far due to this.  Now that I've found the root cause I can probably create a brute-force fix in my own project.  But you should really fix this so that the GTS importer doesn't overwrite the original Unity Mesh Simplifier with modified code.

Link to comment
Share on other sites

I found the work around and discovered the root cause.

 

First, the root cause.  

 

Within the GTS files there is an assembly definition file:

GTS\Scripts\Core\Dependencies\MeshSimplifier\Whinarn.UnityMeshSimplifier.Runtime

 

Turns out this is the exact same Assembly Definition that is included in PolyFew (which I'd imagine is the same one that is in the original unmodified asset).  Procedural Worlds changed the code and changed the name spaces, but they did not change the Assembly Definition so Unity thinks this modified code is the same as the unmodified original source.  Oops.

 

For anyone with this problem, here is how you work around it:

 

1. Create a brand new Unity project using the same version of Unity as the project you want to import GTS into.

2. Import Procedural Worlds GTS into this new (empty) project.

3. Modify the Assembly Definition to somehow be unique (see screen shot below)

4. Save and close the new project

5. Outside of Unity (using the file system or whatever) copy the Assets\Procedural Worlds\GTS directory and all of its contents from the new empty project to the same location in your main project.

6. Open your main project and you should have both PolyFew and GTS installed.

 

Here is a screen shot of how I modified the Assembly Definition in GTS.  I added "ProceduralWorlds." before the Name and the Root Namespace.  This makes the modified GTS code compatible by placing it into its own unique assembly.

GTS\Scripts\Core\Dependencies\MeshSimplifier\Whinarn.UnityMeshSimplifier.Runtime

ProceduralWorlds-GTS-MeshSimplifier-Asse

Link to comment
Share on other sites

  • 2 weeks later...
  • 6 months later...

Hi @Smugmushroom,

We have since updated the product to place this dependency in a unique namespace, which should be in the most recent version of GTS (1.0.14). 

What kind of errors are you experiencing? 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Tell a friend

    Love Canopy - Procedural Worlds? Tell a friend!
  • Need help?

    We work with some of the biggest brands in global gaming, automotive, technology, and government to create environments, games, simulations, and product launches for desktop, mobile, and VR.

    Our unique expertise and technology enable us to deliver solutions that look and run better at a fraction of the time and cost of a typical project.

    Check out some of our non-NDA work in the Gallery, and then Contact Us to accelerate your next project!

×
×
  • Create New...