MREA cooker fixes

This commit is contained in:
Jack Andersen 2016-08-12 09:42:18 -10:00
parent 42d39bf6b9
commit 4cdb93f980
6 changed files with 48 additions and 4 deletions

View File

@ -1656,7 +1656,30 @@ bool WriteHMDLMREASecs(std::vector<std::vector<uint8_t>>& secsOut, const hecl::P
const std::vector<Mesh>& meshes, zeus::CAABox& fullAABB, std::vector<zeus::CAABox>& meshAABBs) const std::vector<Mesh>& meshes, zeus::CAABox& fullAABB, std::vector<zeus::CAABox>& meshAABBs)
{ {
/* Build material set */ /* Build material set */
std::vector<size_t> surfToGlobalMats;
{ {
struct MaterialPool
{
std::vector<const Mesh::Material*> materials;
size_t addMaterial(const Mesh::Material& mat)
{
size_t ret = 0;
for (const Mesh::Material* testMat : materials)
{
if (mat == *testMat)
return ret;
++ret;
}
materials.push_back(&mat);
return ret;
}
} matPool;
size_t surfCount = 0;
for (const Mesh& mesh : meshes)
surfCount += mesh.surfaces.size();
surfToGlobalMats.reserve(surfCount);
MaterialSet matSet; MaterialSet matSet;
hecl::Frontend::Frontend FE; hecl::Frontend::Frontend FE;
size_t endOff = 0; size_t endOff = 0;
@ -1665,8 +1688,16 @@ bool WriteHMDLMREASecs(std::vector<std::vector<uint8_t>>& secsOut, const hecl::P
{ {
if (mesh.materialSets.size()) if (mesh.materialSets.size())
{ {
std::vector<size_t> meshToGlobalMats;
meshToGlobalMats.reserve(mesh.materialSets[0].size());
for (const Mesh::Material& mat : mesh.materialSets[0]) for (const Mesh::Material& mat : mesh.materialSets[0])
{ {
size_t idx = matPool.addMaterial(mat);
meshToGlobalMats.push_back(idx);
if (idx < matPool.materials.size() - 1)
continue;
for (const hecl::ProjectPath& path : mat.texs) for (const hecl::ProjectPath& path : mat.texs)
{ {
bool found = false; bool found = false;
@ -1687,6 +1718,9 @@ bool WriteHMDLMREASecs(std::vector<std::vector<uint8_t>>& secsOut, const hecl::P
endOff = matSet.materials.back().binarySize(endOff); endOff = matSet.materials.back().binarySize(endOff);
matSet.head.addMaterialEndOff(endOff); matSet.head.addMaterialEndOff(endOff);
} }
for (const Mesh::Surface& surf : mesh.surfaces)
surfToGlobalMats.push_back(meshToGlobalMats[surf.materialIdx]);
} }
} }
for (const hecl::ProjectPath& path : texPaths) for (const hecl::ProjectPath& path : texPaths)
@ -1698,6 +1732,7 @@ bool WriteHMDLMREASecs(std::vector<std::vector<uint8_t>>& secsOut, const hecl::P
} }
/* Iterate meshes */ /* Iterate meshes */
auto matIt = surfToGlobalMats.cbegin();
for (const Mesh& mesh : meshes) for (const Mesh& mesh : meshes)
{ {
zeus::CTransform meshXf(mesh.sceneXf.val); zeus::CTransform meshXf(mesh.sceneXf.val);
@ -1769,7 +1804,7 @@ bool WriteHMDLMREASecs(std::vector<std::vector<uint8_t>>& secsOut, const hecl::P
SurfaceHeader header; SurfaceHeader header;
header.centroid = meshXf * zeus::CVector3f(osurf.centroid); header.centroid = meshXf * zeus::CVector3f(osurf.centroid);
header.matIdx = osurf.materialIdx; header.matIdx = *matIt++;
header.reflectionNormal = (meshXf.basis * zeus::CVector3f(osurf.reflectionNormal)).normalized(); header.reflectionNormal = (meshXf.basis * zeus::CVector3f(osurf.reflectionNormal)).normalized();
header.idxStart = surf.m_start; header.idxStart = surf.m_start;
header.idxCount = surf.m_count; header.idxCount = surf.m_count;

View File

@ -114,6 +114,11 @@ bool ReadMAPAToBlender(hecl::BlenderConnection& conn,
"bpy.types.Object.retro_mappable_unk = bpy.props.IntProperty(name='Retro: MAPA object unk')\n" "bpy.types.Object.retro_mappable_unk = bpy.props.IntProperty(name='Retro: MAPA object unk')\n"
"bpy.types.Object.retro_mappable_sclyid = bpy.props.StringProperty(name='Retro: MAPA object SCLY ID')\n" "bpy.types.Object.retro_mappable_sclyid = bpy.props.StringProperty(name='Retro: MAPA object SCLY ID')\n"
"\n" "\n"
"for ar in bpy.context.screen.areas:\n"
" for sp in ar.spaces:\n"
" if sp.type == 'VIEW_3D':\n"
" sp.viewport_shade = 'SOLID'\n"
"\n"
"# Clear Scene\n" "# Clear Scene\n"
"for ob in bpy.data.objects:\n" "for ob in bpy.data.objects:\n"
" if ob.type != 'CAMERA':\n" " if ob.type != 'CAMERA':\n"

View File

@ -344,7 +344,7 @@ bool MREA::PCCook(const hecl::ProjectPath& outPath,
FILE* yamlFile = hecl::Fopen(layer.getAbsolutePath().c_str(), _S("r")); FILE* yamlFile = hecl::Fopen(layer.getAbsolutePath().c_str(), _S("r"));
if (!yamlFile) if (!yamlFile)
continue; continue;
if (!BigYAML::ValidateFromYAMLFile<DNAMP1::SCLY>(yamlFile)) if (!BigYAML::ValidateFromYAMLFile<DNAMP1::SCLY::ScriptLayer>(yamlFile))
{ {
fclose(yamlFile); fclose(yamlFile);
continue; continue;

View File

@ -27,6 +27,10 @@ URDE_DECL_SPECIALIZE_SHADER(CSpaceWarpFilter)
void ViewManager::BuildTestPART(urde::IObjectStore& objStore) void ViewManager::BuildTestPART(urde::IObjectStore& objStore)
{ {
SObjectTag areaTag = m_projManager.resourceFactoryMP1().ProjectResourceFactoryBase::TagFromPath(
_S("MP1/Metroid1/!1IntroLevel1027/01 Air Lock/!area.blend"));
auto areaData = m_projManager.resourceFactoryMP1().LoadResourceSync(areaTag);
//m_modelTest = objStore.GetObj("gun_cmdl"); //m_modelTest = objStore.GetObj("gun_cmdl");
m_modelTest = objStore.GetObj("MP1/Shared/CMDL_B2B41738.blend"); m_modelTest = objStore.GetObj("MP1/Shared/CMDL_B2B41738.blend");
//m_modelTest = objStore.GetObj("CMDL_GameCube"); //m_modelTest = objStore.GetObj("CMDL_GameCube");

View File

@ -60,7 +60,7 @@ struct Application : boo::IApplicationCallback
void initialize(boo::IApplication* /*app*/) void initialize(boo::IApplication* /*app*/)
{ {
zeus::detectCPU(); zeus::detectCPU();
//hecl::VerbosityLevel = 1; hecl::VerbosityLevel = 1;
const zeus::CPUInfo& cpuInf = zeus::cpuFeatures(); const zeus::CPUInfo& cpuInf = zeus::cpuFeatures();
Log.report(logvisor::Info, "CPU Name: %s", cpuInf.cpuBrand); Log.report(logvisor::Info, "CPU Name: %s", cpuInf.cpuBrand);

2
hecl

@ -1 +1 @@
Subproject commit 700b166efaf9d548f1fc9e92f65894a398efee42 Subproject commit 52b3ba6582d7b5e19be8ad01eb47c95c3c8e9039