"시저를 이해하기 위해서 시저가 될 필요는 없다." – Max Weber

2017/10/13

Physics.PhysX 관련 오류가 발생할 때

iOS 11이 나오고 기존에 발매했던 앱들이 실행이 안 돼서 업데이트하던 중에 다음과 같은 에러를 봤습니다.

이전(발매 당시인 2-3년 전)에는 본 적이 없으니 코드상 문제는 아닌 것 같고 유니티 버전이 올라가서 그런 것 같은데 어딘지 몰라 헤매다가 겨우 찾아서 다른 분들 헤매지 마시길 바라는 마음에 몇 자 적습니다 ;ㅁ;

[Physics.PhysX] Cooking::cook/createTriangleMesh: user-provided triangle mesh descriptor is invalid!
0x000000014098BB0B (Unity) StackWalker::GetCurrentCallstack
0x000000014098F03F (Unity) StackWalker::ShowCallstack
0x0000000140D37220 (Unity) GetStacktrace
0x000000014107C666 (Unity) DebugStringToFile
0x000000014107CE3C (Unity) DebugStringToFile
0x0000000140D81109 (Unity) ErrorStream::reportError
0x00000001429D2592 (Unity) physx::shdfnd::ErrorHandler::reportError
0x000000014293B18B (Unity) physx::shdfnd::Foundation::errorImpl
0x000000014293B34D (Unity) physx::shdfnd::Foundation::error
0x000000014291D8B0 (Unity) physx::Cooking::loadTriangleMeshDesc
0x000000014291DFC8 (Unity) physx::Cooking::cookTriangleMesh
0x0000000140D6B38E (Unity) CreatePxStreamFromUnityMesh
0x0000000140D6B5F5 (Unity) CreatePxMeshFromUnityMesh
0x0000000140D81727 (Unity) PhysicsModule::CreateNxMeshFromUnityMesh
0x00000001418EDFD9 (Unity) CollisionMeshData::GetSharedNxMesh
0x0000000140D6ACBF (Unity) MeshCollider::ExtractMeshGeometry
0x0000000140D6AE4E (Unity) MeshCollider::Create
0x0000000140D52360 (Unity) Collider::CreatePhysXObjIfNeeded
0x0000000140D5022E (Unity) Collider::SetEnabled
0x0000000032FAAC75 (Mono JIT Code) (wrapper managed-to-native) UnityEngine.Collider:set_enabled (bool)
0x00000000363CF6B6 (Mono JIT Code) [UIRound.cs:49] UIRound:UpdateIsButton ()
0x00000000363CF1C8 (Mono JIT Code) [UIRoundImage.cs:35] UIRoundImage:UpdateEntity (UIDirty)
0x00000000342581CB (Mono JIT Code) [UIEntity.cs:14] UIEntity:ForceUpdateEntity ()
0x000000003425801A (Mono JIT Code) [UIManager.cs:542] UIManager:Start ()
0x0000000000B26AC2 (Mono JIT Code) (wrapper runtime-invoke) object:runtime_invoke_void__this__ (object,intptr,intptr,intptr)
0x00007FF845845B67 (mono) [mini.c:4937] mono_jit_runtime_invoke
0x00007FF845798731 (mono) [object.c:2623] mono_runtime_invoke
0x000000014140C315 (Unity) scripting_method_invoke
0x00000001414044E1 (Unity) ScriptingInvocation::Invoke
0x000000014116F531 (Unity) MonoBehaviour::InvokeMethodOrCoroutineChecked
0x000000014116F694 (Unity) MonoBehaviour::InvokeMethodOrCoroutineChecked
0x0000000141173CE2 (Unity) MonoBehaviour::Start
0x00000001411745F9 (Unity) MonoBehaviour::DelayedStartCall
0x0000000140DD565A (Unity) DelayedCallManager::Update
0x00000001410B791C (Unity) `InitPlayerLoopCallbacks'::`34'::EarlyUpdateScriptRunDelayedStartupFrameRegistrator::Forward
0x00000001410B575E (Unity) PlayerLoop
0x0000000140109ECE (Unity) Application::UpdateScene
0x000000014010E32F (Unity) Application::UpdateSceneIfNeeded
0x00000001401322BF (Unity) Application::TickTimer
0x0000000141A8AD1D (Unity) MainMessageLoop
0x0000000141A8C6E7 (Unity) WinMain
0x0000000141CF010C (Unity) __tmainCRTStartup
0x00007FF86A222774 (KERNEL32) BaseThreadInitThunk
0x00007FF86CD50D51 (ntdll) RtlUserThreadStart

먼저 오류를 봅시다.

[Physics.PhysX] Cooking::cook/createTriangleMesh: user-provided triangle mesh descriptor is invalid!

피직스가 폴리곤을 생성하다가 보니까 유저가 제공한 폴리곤 설명자가 이상하다는 오류입니다. 유니티 2버전이었나부터 해서 지금껏 쓰면서 처음 보는 오류네요. 처음에는 당최 뭘 하라는 건지 몰라서 어브버 하다가 구글님 한테 물어보니 대충 답이 나오는군요.

문제는 컬라이더나 메시필터가 사용하는 메시의 모든 정점이 0,0,0에 있어서 그랬습니다. 크기가 없는 상태겠네요. 피직스 내부 동작은 잘 모르겠으나 이것 때문에 처리하는 데 문제가 생기는 것 같습니다. 여하튼 정점들이 값을 갖게끔 해주니 말끔히 사라집니다.


참조

http://answers.unity3d.com/questions/1072088/meshcollider-cookconvexmesh-user-provided-convex-m.html
https://answers.unrealengine.com/questions/536200/destructible-mesh-error.html

댓글이 2개 우앙 | cat > 타닥타닥 | tag > ,

  1. 혹시 정점들이 값을 갖게 해주는 방법에 대해서 조금 더 설명해 주실 수 있나요?
    저도 똑같은 오류에 정점이 (0,0,0)으로 맞춰져 버렸는데, 구성 요소들이 꽤나 많은 상황에서 이 구성요소들의 좌표값들을 일일히 맞춰줘야 하는건지 어떻게 해결 할수 있는지 궁금합니다. ㅜㅜ

  2. 값을 갖게 한다는 게 복잡한 내용은 아니고 초기화를 (1,1,1)처럼 한다는 이야기였습니다. 저의 경우 이전에는 메시를 직접 생성할 때 내부적으로 쓰는 크기 값을 (0,0,0)으로 놓고 메시를 생성해서 정점이 모두 한 점(0,0,0)에 모인 상태로 다른 걸 하다가 크기를 지정하고 정점을 조정하고 했었는데 유니티 버전업 이후에는 오류가 발생해서 초기 생성 시 크기 값을 (1,1,1)로 지정해서 정점들이 한 점이 모이지 않은 상태로 다음 작업을 진행해 문제를 해결했습니다.

    어떤 식으로 작업을 하고 계시는지는 모르겠지만 메시를 직접 생성하고 계신다면 메시 생성 시 모든 정점이 한 곳에 있는 건 아닌지 확인해 보시고 최소한 한 개라도 다른 곳으로 위치를 변경한 상태에서 메시를 생성하고 테스트해보시면 되지 않을까 합니다.

댓글 남기기

* 표시된 곳은 반드시 입력해주세요