mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-03-25 08:30:13 +00:00
Add zone-specific water filtering for Stormwind
- Filter terrain water in Stormwind area (tiles 28-35, 46-52) to 85-110 height range - Conservative global WMO water filter (only removes water above 300 or below -100) - Increase canal water opacity and add distance-based opacity - Prevents floating/underground water in Stormwind without affecting other zones
This commit is contained in:
parent
0c590ac952
commit
6523d99b91
1 changed files with 36 additions and 4 deletions
|
|
@ -139,10 +139,10 @@ bool WaterRenderer::initialize() {
|
|||
|
||||
// Distance-based opacity: distant water is more opaque to hide underwater objects
|
||||
float dist = length(viewPos - FragPos);
|
||||
float distFade = smoothstep(80.0, 400.0, dist); // Start at 80 units, full opaque at 400
|
||||
float distAlpha = mix(0.0, 0.5, distFade); // Add up to 50% opacity at distance
|
||||
float distFade = smoothstep(40.0, 300.0, dist); // Start at 40 units, full opaque at 300
|
||||
float distAlpha = mix(0.0, 0.75, distFade); // Add up to 75% opacity at distance
|
||||
|
||||
float alpha = clamp(waterAlpha * alphaScale * (0.68 + fresnel * 0.45) + distAlpha, 0.12, 0.95);
|
||||
float alpha = clamp(waterAlpha * alphaScale * (0.80 + fresnel * 0.45) + distAlpha, 0.20, 0.98);
|
||||
|
||||
// Apply distance fog
|
||||
float fogDist = length(viewPos - FragPos);
|
||||
|
|
@ -225,6 +225,25 @@ void WaterRenderer::loadFromTerrain(const pipeline::ADTTerrain& terrain, bool ap
|
|||
surface.maxHeight = layer.maxHeight;
|
||||
surface.liquidType = layer.liquidType;
|
||||
|
||||
// Stormwind-specific water height filtering (only apply in Stormwind area)
|
||||
// Stormwind is at tiles approximately (28-35, 46-52) on Azeroth
|
||||
bool isStormwindArea = (tileX >= 28 && tileX <= 35 && tileY >= 46 && tileY <= 52);
|
||||
if (isStormwindArea) {
|
||||
// Skip water in low-lying areas that shouldn't have water (basement/underground areas)
|
||||
// Stormwind canals are at ~95-100 height, filter out anything below 85
|
||||
if (layer.minHeight < 85.0f && layer.liquidType != 2) { // Allow magma (type 2) underground
|
||||
LOG_INFO(" -> FILTERED (too low, Stormwind)");
|
||||
continue;
|
||||
}
|
||||
|
||||
// Skip floating water surfaces that are too high (incorrect placements)
|
||||
// Park moonwell and canals are at 95-105, filter out anything above 110
|
||||
if (layer.minHeight > 110.0f) {
|
||||
LOG_INFO(" -> FILTERED (too high, Stormwind)");
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// Store dimensions
|
||||
surface.xOffset = layer.x;
|
||||
surface.yOffset = layer.y;
|
||||
|
|
@ -346,6 +365,19 @@ void WaterRenderer::loadFromWMO([[maybe_unused]] const pipeline::WMOLiquid& liqu
|
|||
surface.minHeight = surface.origin.z;
|
||||
surface.maxHeight = surface.origin.z;
|
||||
|
||||
// Skip WMO water that's clearly invalid (extremely high - above 300 units)
|
||||
// This is a conservative global filter that won't affect normal gameplay
|
||||
if (surface.origin.z > 300.0f) {
|
||||
LOG_INFO("WMO water filtered: height=", surface.origin.z, " wmoId=", wmoId, " (too high)");
|
||||
return;
|
||||
}
|
||||
|
||||
// Skip WMO water that's extremely low (deep underground where it shouldn't be)
|
||||
if (surface.origin.z < -100.0f) {
|
||||
LOG_INFO("WMO water filtered: height=", surface.origin.z, " wmoId=", wmoId, " (too low)");
|
||||
return;
|
||||
}
|
||||
|
||||
size_t tileCount = static_cast<size_t>(surface.width) * static_cast<size_t>(surface.height);
|
||||
size_t maskBytes = (tileCount + 7) / 8;
|
||||
// WMO liquid flags vary across files; for now treat all WMO liquid tiles as
|
||||
|
|
@ -431,7 +463,7 @@ void WaterRenderer::render(const Camera& camera, float time) {
|
|||
float waveFreq = canalProfile ? 0.30f : 0.22f; // Frequency maintained for visual
|
||||
float waveSpeed = canalProfile ? 1.20f : 2.00f; // Speed maintained for animation
|
||||
float shimmerStrength = canalProfile ? 0.95f : 0.50f;
|
||||
float alphaScale = canalProfile ? 0.72f : 1.00f;
|
||||
float alphaScale = canalProfile ? 0.90f : 1.00f; // Increased from 0.72 to make canal water less transparent
|
||||
|
||||
waterShader->setUniform("waterColor", color);
|
||||
waterShader->setUniform("waterAlpha", alpha);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue