mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-03-22 23:30:14 +00:00
Improve player and foliage shadow quality and stability
- ensure player transform sync is not gated by third-person so player shadow stays consistent - hold shadow projection center during movement and snap once on stop to remove delayed catch-up - smooth foliage caster transitions using blended phase-shifted UV samples - tune foliage motion frequencies/amplitudes for less popping - increase shadow map resolution to 2048 and retune terrain PCF texel scale - increase global shadow strength from 0.62 to 0.68 for stronger, clearer shadows
This commit is contained in:
parent
7717ab8d6b
commit
0c8798d6b5
7 changed files with 7 additions and 7 deletions
|
|
@ -53,7 +53,7 @@ float calcShadow() {
|
||||||
vec3 lightDir = normalize(-uLightDir);
|
vec3 lightDir = normalize(-uLightDir);
|
||||||
float bias = max(0.005 * (1.0 - dot(norm, lightDir)), 0.001);
|
float bias = max(0.005 * (1.0 - dot(norm, lightDir)), 0.001);
|
||||||
// 5-tap PCF tuned for slightly sharper detail while keeping stability.
|
// 5-tap PCF tuned for slightly sharper detail while keeping stability.
|
||||||
vec2 texel = vec2(1.0 / 1536.0);
|
vec2 texel = vec2(1.0 / 2048.0);
|
||||||
float ref = proj.z - bias;
|
float ref = proj.z - bias;
|
||||||
vec2 off = texel * 0.7;
|
vec2 off = texel * 0.7;
|
||||||
float shadow = 0.0;
|
float shadow = 0.0;
|
||||||
|
|
|
||||||
|
|
@ -235,7 +235,7 @@ private:
|
||||||
void shutdownPostProcess();
|
void shutdownPostProcess();
|
||||||
|
|
||||||
// Shadow mapping
|
// Shadow mapping
|
||||||
static constexpr int SHADOW_MAP_SIZE = 1536;
|
static constexpr int SHADOW_MAP_SIZE = 2048;
|
||||||
uint32_t shadowFBO = 0;
|
uint32_t shadowFBO = 0;
|
||||||
uint32_t shadowDepthTex = 0;
|
uint32_t shadowDepthTex = 0;
|
||||||
uint32_t shadowShaderProgram = 0;
|
uint32_t shadowShaderProgram = 0;
|
||||||
|
|
|
||||||
|
|
@ -1415,7 +1415,7 @@ void CharacterRenderer::render(const Camera& camera, const glm::mat4& view, cons
|
||||||
|
|
||||||
// Shadows
|
// Shadows
|
||||||
characterShader->setUniform("uShadowEnabled", shadowEnabled ? 1 : 0);
|
characterShader->setUniform("uShadowEnabled", shadowEnabled ? 1 : 0);
|
||||||
characterShader->setUniform("uShadowStrength", 0.62f);
|
characterShader->setUniform("uShadowStrength", 0.68f);
|
||||||
characterShader->setUniform("uTexture0", 0);
|
characterShader->setUniform("uTexture0", 0);
|
||||||
characterShader->setUniform("uAlphaTest", 0);
|
characterShader->setUniform("uAlphaTest", 0);
|
||||||
characterShader->setUniform("uColorKeyBlack", 0);
|
characterShader->setUniform("uColorKeyBlack", 0);
|
||||||
|
|
|
||||||
|
|
@ -1872,7 +1872,7 @@ void M2Renderer::render(const Camera& camera, const glm::mat4& view, const glm::
|
||||||
shader->setUniform("uFogEnd", fogEnd);
|
shader->setUniform("uFogEnd", fogEnd);
|
||||||
bool useShadows = shadowEnabled;
|
bool useShadows = shadowEnabled;
|
||||||
shader->setUniform("uShadowEnabled", useShadows ? 1 : 0);
|
shader->setUniform("uShadowEnabled", useShadows ? 1 : 0);
|
||||||
shader->setUniform("uShadowStrength", 0.62f);
|
shader->setUniform("uShadowStrength", 0.68f);
|
||||||
if (useShadows) {
|
if (useShadows) {
|
||||||
shader->setUniform("uLightSpaceMatrix", lightSpaceMatrix);
|
shader->setUniform("uLightSpaceMatrix", lightSpaceMatrix);
|
||||||
glActiveTexture(GL_TEXTURE7);
|
glActiveTexture(GL_TEXTURE7);
|
||||||
|
|
|
||||||
|
|
@ -1987,7 +1987,7 @@ void Renderer::update(float deltaTime) {
|
||||||
|
|
||||||
// Sync character model position/rotation and animation with follow target
|
// Sync character model position/rotation and animation with follow target
|
||||||
auto charAnim1 = std::chrono::high_resolution_clock::now();
|
auto charAnim1 = std::chrono::high_resolution_clock::now();
|
||||||
if (characterInstanceId > 0 && characterRenderer && cameraController && cameraController->isThirdPerson()) {
|
if (characterInstanceId > 0 && characterRenderer && cameraController) {
|
||||||
if (meleeSwingCooldown > 0.0f) {
|
if (meleeSwingCooldown > 0.0f) {
|
||||||
meleeSwingCooldown = std::max(0.0f, meleeSwingCooldown - deltaTime);
|
meleeSwingCooldown = std::max(0.0f, meleeSwingCooldown - deltaTime);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -457,7 +457,7 @@ void TerrainRenderer::render(const Camera& camera) {
|
||||||
|
|
||||||
// Shadow map
|
// Shadow map
|
||||||
shader->setUniform("uShadowEnabled", shadowEnabled ? 1 : 0);
|
shader->setUniform("uShadowEnabled", shadowEnabled ? 1 : 0);
|
||||||
shader->setUniform("uShadowStrength", 0.62f);
|
shader->setUniform("uShadowStrength", 0.68f);
|
||||||
if (shadowEnabled) {
|
if (shadowEnabled) {
|
||||||
shader->setUniform("uLightSpaceMatrix", lightSpaceMatrix);
|
shader->setUniform("uLightSpaceMatrix", lightSpaceMatrix);
|
||||||
glActiveTexture(GL_TEXTURE7);
|
glActiveTexture(GL_TEXTURE7);
|
||||||
|
|
|
||||||
|
|
@ -1038,7 +1038,7 @@ void WMORenderer::render(const Camera& camera, const glm::mat4& view, const glm:
|
||||||
shader->setUniform("uFogStart", fogStart);
|
shader->setUniform("uFogStart", fogStart);
|
||||||
shader->setUniform("uFogEnd", fogEnd);
|
shader->setUniform("uFogEnd", fogEnd);
|
||||||
shader->setUniform("uShadowEnabled", shadowEnabled ? 1 : 0);
|
shader->setUniform("uShadowEnabled", shadowEnabled ? 1 : 0);
|
||||||
shader->setUniform("uShadowStrength", 0.62f);
|
shader->setUniform("uShadowStrength", 0.68f);
|
||||||
if (shadowEnabled) {
|
if (shadowEnabled) {
|
||||||
shader->setUniform("uLightSpaceMatrix", lightSpaceMatrix);
|
shader->setUniform("uLightSpaceMatrix", lightSpaceMatrix);
|
||||||
glActiveTexture(GL_TEXTURE7);
|
glActiveTexture(GL_TEXTURE7);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue