Opened 10 years ago

Closed 10 years ago

#2454 closed defect (fixed)

Hawk skeleton has duplicate "Head" bone/joint

Reported by: historic_bruno Owned by: leper
Priority: Release Blocker Milestone: Alpha 16
Component: Art & Animation Keywords: collada
Cc: wraitii Patch:

Description (last modified by historic_bruno)

This error was reported by IronNerd in IRC (2014-03-09 from 01:22-02:33).

Only debug builds of the game/FCollada will reveal an assertion failure when converting the hawk skeleton to PMD. The cache may need to be deleted to force this. There may be no visible errors, but it should be fixed since it violates the assumption of unique bone names within that array (and probably indicates a broken model or bug in Blender's exporter).

Change History (5)

comment:1 by historic_bruno, 10 years ago

Description: modified (diff)

comment:2 by historic_bruno, 10 years ago

Priority: Should HaveRelease Blocker

Just caused a crash in a release build w/ VC++ 2008 on Win XP.

 	FCollada.dll!35940660() 	
 	[Frames below may be incorrect and/or missing, no symbols loaded for FCollada.dll]	
 	FCollada.dll!3594e56e() 	
 	FCollada.dll!3594e7ed() 	
 	FCollada.dll!3594cb78() 	
 	FCollada.dll!3594f8c0() 	
 	FCollada.dll!3594c7e6() 	
 	FCollada.dll!35950c98() 	
 	FCollada.dll!3594ddcd() 	
 	FCollada.dll!35998bf1() 	
 	FCollada.dll!3594c6a0() 	
 	FCollada.dll!35998306() 	
 	FCollada.dll!35998b9c() 	
 	FCollada.dll!3594c6a0() 	
 	FCollada.dll!35998306() 	
 	FCollada.dll!35950c98() 	
 	FCollada.dll!35951c2d() 	
 	FCollada.dll!3595e237() 	
 	FCollada.dll!3595074d() 	
 	FCollada.dll!3595c7a6() 	
 	FCollada.dll!3598d26c() 	
 	FCollada.dll!35948890() 	
>	Collada.dll!FColladaDocument::~FColladaDocument()  + 0x54 bytes	C++
 	Collada.dll!CommonConvert::~CommonConvert()  Line 167 + 0xf bytes	C++
 	Collada.dll!PMDConvert::ColladaToPMD(const char * input=0x32530aa8, OutputCB & output={...}, std::basic_string<char,std::char_traits<char>,std::allocator<char> > & xmlErrors="")  Line 462 + 0x12 bytes	C++
 	Collada.dll!convert_dae_to_whatever(const char * dae=0x32530aa8, void (void *, const char *, unsigned int)* writer=0x005288f0, void * cb_data=0x0012f164, void (const char *, OutputCB &, std::basic_string<char,std::char_traits<char>,std::allocator<char> > &)* conv=0x0aebebb0)  Line 116 + 0x12 bytes	C++
 	Collada.dll!convert_dae_to_pmd(const char * dae=0x32530aa8, void (void *, const char *, unsigned int)* pmd_writer=0x005288f0, void * cb_data=0x0012f164)  Line 144 + 0x16 bytes	C++
 	pyrogenesis.exe!CColladaManagerImpl::Convert(const Path & daeFilename={...}, const Path & pmdFilename={...}, CColladaManager::FileType type=PMD)  Line 169 + 0x18 bytes	C++
 	pyrogenesis.exe!CColladaManager::GetLoadablePath(const Path & pathnameNoExtension={...}, CColladaManager::FileType type=PMD)  Line 412	C++
 	pyrogenesis.exe!CMeshManager::GetMesh(const Path & pathname={...})  Line 54	C++
 	pyrogenesis.exe!CObjectEntry::BuildVariation(const std::vector<std::set<CStr8,std::less<CStr8>,std::allocator<CStr8> >,std::allocator<std::set<CStr8,std::less<CStr8>,std::allocator<CStr8> > > > & selections=[1]([1]({...})), const std::vector<unsigned char,std::allocator<unsigned char> > & variationKey=[2](0,1 ''), CObjectManager & objectManager={...})  Line 120	C++
 	pyrogenesis.exe!CObjectManager::FindObjectVariation(CObjectBase * base=0x3252de48, const std::vector<std::set<CStr8,std::less<CStr8>,std::allocator<CStr8> >,std::allocator<std::set<CStr8,std::less<CStr8>,std::allocator<CStr8> > > > & selections=[1]([1]({...})))  Line 148 + 0x14 bytes	C++
 	pyrogenesis.exe!CUnit::Create(const CStrW & actorName={...}, unsigned int seed=4743, const std::set<CStr8,std::less<CStr8>,std::allocator<CStr8> > & selections=[0](), CObjectManager & objectManager={...})  Line 59 + 0xc bytes	C++
 	pyrogenesis.exe!CUnitManager::CreateUnit(const CStrW & actorName={...}, unsigned int seed=4743, const std::set<CStr8,std::less<CStr8>,std::allocator<CStr8> > & selections=[0]())  Line 95 + 0x13 bytes	C++
 	pyrogenesis.exe!CCmpVisualActor::InitModel(const CParamNode & paramNode={...})  Line 522 + 0x37 bytes	C++
 	pyrogenesis.exe!CCmpVisualActor::Init(const CParamNode & paramNode={...})  Line 202	C++
 	pyrogenesis.exe!CComponentManager::AddEntity(const std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > & templateName="gaia/fauna_hawk", unsigned int ent=4743)  Line 743 + 0x25 bytes	C++
 	pyrogenesis.exe!CSimulation2::AddEntity(const std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> > & templateName="gaia/fauna_hawk", unsigned int preferredId=4743)  Line 599 + 0x20 bytes	C++
 	pyrogenesis.exe!CXMLReader::ReadEntities(XMBElement parent={...}, double end_time=371.90803998832257)  Line 1025	C++
 	pyrogenesis.exe!CXMLReader::ProgressiveRead()  Line 1109 + 0x14 bytes	C++
 	pyrogenesis.exe!CMapReader::ReadXML()  Line 1179 + 0xb bytes	C++
 	pyrogenesis.exe!MemFunThunk<WaterManager>(void * param=0x0cf116a8, double __formal=0.010000000000000000)  Line 60 + 0xa bytes	C++
 	pyrogenesis.exe!LDR_ProgressiveLoad(double time_budget=0.010000000000000000, wchar_t * description=0x0012fb8c, unsigned int max_chars=100, int * progress_percent=0x0012fb70)  Line 228 + 0x11 bytes	C++
 	pyrogenesis.exe!ProgressiveLoad()  Line 207 + 0x25 bytes	C++
 	pyrogenesis.exe!Frame()  Line 314	C++
 	pyrogenesis.exe!RunGameOrAtlas(int argc=1, const char * * argv=0x00ebd9c0)  Line 473 + 0x5 bytes	C++
 	pyrogenesis.exe!main(int argc=1, char * * argv=0x00ebd9c0)  Line 515 + 0xd bytes	C++
 	pyrogenesis.exe!wmain(int argc=1, wchar_t * * argv=0x00eb5718)  Line 380 + 0xa bytes	C++
 	pyrogenesis.exe!__tmainCRTStartup()  Line 583 + 0x17 bytes	C
 	pyrogenesis.exe!CallStartupWithinTryBlock()  Line 397	C++
 	kernel32.dll!_BaseProcessStart@4()  + 0x23 bytes	
Last edited 10 years ago by historic_bruno (previous) (diff)

comment:3 by wraitii, 10 years ago

What's the issue exactly? Because neither hawk collada files have duplicate head joints.

comment:4 by historic_bruno, 10 years ago

If you look at line 428 in meshes/skeletal/hawk.dae, you can see the definition of Armature_Hawk-skin-joints-array:

<Name_array id="Armature_Hawk-skin-joints-array" count="10">Body Head Head Humerus_R Ulna_R Digit_R Humerus_L Ulna_L Digit_L Tail</Name_array>

Head is repeated, but those names have to be unique keys. Note also that their order and count is important, and they are all used in the weights array (lines 443-460).

We have had this problem before, it's something to do with the export process and/or skeleton representation in Blender, but I don't remember how to fix it. Contacting Zagg1024 might help, I'm pretty sure he encountered this.

Last edited 10 years ago by historic_bruno (previous) (diff)

comment:5 by leper, 10 years ago

Owner: set to leper
Resolution: fixed
Status: newclosed

In 14904:

Replace hawk with duplicated head bone with fixed version by stanislas69. Fixes #2454.

Note: See TracTickets for help on using tickets.