mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-05-03 00:03:50 +00:00
Add WMO diagnostic logging and increase ambient light
Added detailed logging for WMO vertex data to diagnose pitch black areas: - Log MOCV (vertex colors) chunk presence and first color value - Log MONR (normals) chunk presence and first normal vector - Log WMO group flags to identify interior vs exterior groups Increased WMO ambient light from (0.4, 0.4, 0.5) to (0.55, 0.55, 0.6) to make shadowed/dark areas more visible. This addresses pitch black areas in Stormwind and other locations where diffuse lighting may be insufficient. The diagnostic output will help identify if black areas are caused by: - Missing or incorrect vertex color data (MOCV) - Missing or incorrect normal data (MONR) - Groups incorrectly flagged as interior (0x2000 flag)
This commit is contained in:
parent
673e8a7275
commit
7c8a9a4c68
2 changed files with 14 additions and 1 deletions
|
|
@ -428,6 +428,9 @@ bool WMOLoader::loadGroup(const std::vector<uint8_t>& groupData,
|
||||||
// Read MOGP header
|
// Read MOGP header
|
||||||
uint32_t mogpOffset = offset;
|
uint32_t mogpOffset = offset;
|
||||||
group.flags = read<uint32_t>(groupData, mogpOffset);
|
group.flags = read<uint32_t>(groupData, mogpOffset);
|
||||||
|
bool isInterior = (group.flags & 0x2000) != 0;
|
||||||
|
core::Logger::getInstance().info(" Group flags: 0x", std::hex, group.flags, std::dec,
|
||||||
|
(isInterior ? " (INTERIOR)" : " (exterior)"));
|
||||||
group.boundingBoxMin.x = read<float>(groupData, mogpOffset);
|
group.boundingBoxMin.x = read<float>(groupData, mogpOffset);
|
||||||
group.boundingBoxMin.y = read<float>(groupData, mogpOffset);
|
group.boundingBoxMin.y = read<float>(groupData, mogpOffset);
|
||||||
group.boundingBoxMin.z = read<float>(groupData, mogpOffset);
|
group.boundingBoxMin.z = read<float>(groupData, mogpOffset);
|
||||||
|
|
@ -490,11 +493,16 @@ bool WMOLoader::loadGroup(const std::vector<uint8_t>& groupData,
|
||||||
}
|
}
|
||||||
else if (subChunkId == 0x4D4F4E52) { // MONR - Normals
|
else if (subChunkId == 0x4D4F4E52) { // MONR - Normals
|
||||||
uint32_t normalCount = subChunkSize / 12;
|
uint32_t normalCount = subChunkSize / 12;
|
||||||
|
core::Logger::getInstance().info(" MONR: ", normalCount, " normals for ", group.vertices.size(), " vertices");
|
||||||
for (uint32_t i = 0; i < normalCount && i < group.vertices.size(); i++) {
|
for (uint32_t i = 0; i < normalCount && i < group.vertices.size(); i++) {
|
||||||
group.vertices[i].normal.x = read<float>(groupData, mogpOffset);
|
group.vertices[i].normal.x = read<float>(groupData, mogpOffset);
|
||||||
group.vertices[i].normal.y = read<float>(groupData, mogpOffset);
|
group.vertices[i].normal.y = read<float>(groupData, mogpOffset);
|
||||||
group.vertices[i].normal.z = read<float>(groupData, mogpOffset);
|
group.vertices[i].normal.z = read<float>(groupData, mogpOffset);
|
||||||
}
|
}
|
||||||
|
if (normalCount > 0 && !group.vertices.empty()) {
|
||||||
|
const auto& n = group.vertices[0].normal;
|
||||||
|
core::Logger::getInstance().debug(" First normal: (", n.x, ", ", n.y, ", ", n.z, ")");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (subChunkId == 0x4D4F5456) { // MOTV - Texture coords
|
else if (subChunkId == 0x4D4F5456) { // MOTV - Texture coords
|
||||||
// Update texture coords for existing vertices
|
// Update texture coords for existing vertices
|
||||||
|
|
@ -511,6 +519,7 @@ bool WMOLoader::loadGroup(const std::vector<uint8_t>& groupData,
|
||||||
else if (subChunkId == 0x4D4F4356) { // MOCV - Vertex colors
|
else if (subChunkId == 0x4D4F4356) { // MOCV - Vertex colors
|
||||||
// Update vertex colors
|
// Update vertex colors
|
||||||
uint32_t colorCount = subChunkSize / 4;
|
uint32_t colorCount = subChunkSize / 4;
|
||||||
|
core::Logger::getInstance().info(" MOCV: ", colorCount, " vertex colors for ", group.vertices.size(), " vertices");
|
||||||
for (uint32_t i = 0; i < colorCount && i < group.vertices.size(); i++) {
|
for (uint32_t i = 0; i < colorCount && i < group.vertices.size(); i++) {
|
||||||
uint8_t b = read<uint8_t>(groupData, mogpOffset);
|
uint8_t b = read<uint8_t>(groupData, mogpOffset);
|
||||||
uint8_t g = read<uint8_t>(groupData, mogpOffset);
|
uint8_t g = read<uint8_t>(groupData, mogpOffset);
|
||||||
|
|
@ -518,6 +527,10 @@ bool WMOLoader::loadGroup(const std::vector<uint8_t>& groupData,
|
||||||
uint8_t a = read<uint8_t>(groupData, mogpOffset);
|
uint8_t a = read<uint8_t>(groupData, mogpOffset);
|
||||||
group.vertices[i].color = glm::vec4(r/255.0f, g/255.0f, b/255.0f, a/255.0f);
|
group.vertices[i].color = glm::vec4(r/255.0f, g/255.0f, b/255.0f, a/255.0f);
|
||||||
}
|
}
|
||||||
|
if (colorCount > 0 && !group.vertices.empty()) {
|
||||||
|
const auto& c = group.vertices[0].color;
|
||||||
|
core::Logger::getInstance().debug(" First color: (", c.r, ", ", c.g, ", ", c.b, ", ", c.a, ")");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (subChunkId == 0x4D4F4241) { // MOBA - Batches
|
else if (subChunkId == 0x4D4F4241) { // MOBA - Batches
|
||||||
// SMOBatch structure (24 bytes):
|
// SMOBatch structure (24 bytes):
|
||||||
|
|
|
||||||
|
|
@ -803,7 +803,7 @@ void WMORenderer::render(const Camera& camera, const glm::mat4& view, const glm:
|
||||||
shader->setUniform("uLightDir", glm::vec3(-0.3f, -0.7f, -0.6f)); // Default sun direction
|
shader->setUniform("uLightDir", glm::vec3(-0.3f, -0.7f, -0.6f)); // Default sun direction
|
||||||
shader->setUniform("uLightColor", glm::vec3(1.5f, 1.4f, 1.3f));
|
shader->setUniform("uLightColor", glm::vec3(1.5f, 1.4f, 1.3f));
|
||||||
shader->setUniform("uSpecularIntensity", 0.5f);
|
shader->setUniform("uSpecularIntensity", 0.5f);
|
||||||
shader->setUniform("uAmbientColor", glm::vec3(0.4f, 0.4f, 0.5f));
|
shader->setUniform("uAmbientColor", glm::vec3(0.55f, 0.55f, 0.6f));
|
||||||
shader->setUniform("uFogColor", fogColor);
|
shader->setUniform("uFogColor", fogColor);
|
||||||
shader->setUniform("uFogStart", fogStart);
|
shader->setUniform("uFogStart", fogStart);
|
||||||
shader->setUniform("uFogEnd", fogEnd);
|
shader->setUniform("uFogEnd", fogEnd);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue