Получилось избежать ошибки с текстурами пересборкой umodel
Включил принудительный поиск Bulk Offset в файле \Unreal\UnTexture3.cpp
/*if (Bulk->BulkDataOffsetInFile < 0)
{
#if DCU_ONLINE
if (Package->Game == GAME_DCUniverse)
{
int Offset = GetRealTextureOffset_DCU(this);
if (Offset < 0) return false;
Bulk->BulkDataOffsetInFile = Offset - Bulk->BulkDataOffsetInFile - 1;
// appPrintf("OFFS: %X\n", Bulk->BulkDataOffsetInFile);
}
#endif // DCU_ONLINE*/
#if MARVEL_HEROES
//if (Package->Game == GAME_MarvelHeroes)
//{
int Offset = GetRealTextureOffset_MH(this, MipIndex);
if (Offset < 0) return false;
Bulk->BulkDataOffsetInFile = Offset;
//}
#endif // MARVEL_HEROES
if (Bulk->BulkDataOffsetInFile < 0)
{
appPrintf("ERROR: BulkOffset = %d\n", (int)Bulk->BulkDataOffsetInFile);
return false;
}
//}
И обновил структуру файла манифеста
struct TFCManifest_MH
{
FString TFCLib;
FString TFCName;
FGuid Guid;
TArray<MHManifestMip> Mips;
friend FArchive& operator<<(FArchive &Ar, TFCManifest_MH &M)
{
return Ar << M.TFCLib << M.TFCName << M.Guid << M.Mips;
}
};
Некоторые текстуры дают ошибку, но большинство загружается из tfc файлов.
Заглушка от вылетов:
static int GetRealTextureOffset_MH(const UTexture2D *Obj, int MipIndex)
{
guard(GetRealTextureOffset_MH);
ReadMarvelHeroesTFCManifest();
appPrintf("LOOK %08X-%08X-%08X-%08X\n", Obj->TextureFileCacheGuid.A, Obj->TextureFileCacheGuid.B, Obj->TextureFileCacheGuid.C, Obj->TextureFileCacheGuid.D);
for (int i = 0; i < mhTFCmanifest.Num(); i++)
{
const TFCManifest_MH &M = mhTFCmanifest[i];
if (M.Guid == Obj->TextureFileCacheGuid)
{
const MHManifestMip &Mip = M.Mips[0];
if (Mip.Index != MipIndex) return -1;
assert(Mip.Index == MipIndex);
appPrintf("%s - %08X-%08X-%08X-%08X = %X %X\n", *M.TFCName, M.Guid.A, M.Guid.B, M.Guid.C, M.Guid.D, Mip.Offset, Mip.Size);
return Mip.Offset;
}
}
return -1; // not found
unguard;
}
Вот результат модель уже в 3dsMax