diff --git a/libraries/render-utils/src/DeferredBuffer.slh b/libraries/render-utils/src/DeferredBuffer.slh index 3a1cf7a881..e3d9593936 100755 --- a/libraries/render-utils/src/DeferredBuffer.slh +++ b/libraries/render-utils/src/DeferredBuffer.slh @@ -25,19 +25,11 @@ uniform sampler2D specularMap; uniform sampler2D depthMap; -struct DeferredTransform { - +struct DeferredTransform { mat4 projection; mat4 viewInverse; - // the distance to the near clip plane - // scale factor for depth: (far - near) / far - // stereoMode - vec4 nearVal_depthScale_stereoMode_spare0; - // offset for depth texture coordinates - // scale for depth texture coordinates - vec4 depthTexCoordOffset_scale; - + vec4 stereoSide_spareABC; }; layout(std140) uniform deferredTransformBuffer { @@ -48,10 +40,10 @@ DeferredTransform getDeferredTransform() { } bool getStereoMode(DeferredTransform deferredTransform) { - return (deferredTransform.nearVal_depthScale_stereoMode_spare0.z != 0.0); + return (deferredTransform.stereoSide_spareABC.x != 0.0); } float getStereoSide(DeferredTransform deferredTransform) { - return (deferredTransform.nearVal_depthScale_stereoMode_spare0.z); + return (deferredTransform.stereoSide_spareABC.x); } vec4 evalEyePositionFromZ(DeferredTransform deferredTransform, float depthVal, vec2 texcoord) { @@ -78,10 +70,7 @@ struct DeferredFragment { float gloss; }; -DeferredFragment unpackDeferredFragment( vec2 texcoord) { - - DeferredTransform deferredTransform = getDeferredTransform(); - +DeferredFragment unpackDeferredFragment(DeferredTransform deferredTransform, vec2 texcoord) { DeferredFragment frag; frag.depthVal = texture(depthMap, texcoord).r; frag.normalVal = texture(normalMap, texcoord); @@ -94,7 +83,6 @@ DeferredFragment unpackDeferredFragment( vec2 texcoord) { } texcoord.x *= 2.0; } - frag.position = evalEyePositionFromZ(deferredTransform, frag.depthVal, texcoord); // Unpack the normal from the map diff --git a/libraries/render-utils/src/DeferredLightingEffect.cpp b/libraries/render-utils/src/DeferredLightingEffect.cpp index 05649d883f..55fe4d9ca9 100644 --- a/libraries/render-utils/src/DeferredLightingEffect.cpp +++ b/libraries/render-utils/src/DeferredLightingEffect.cpp @@ -291,43 +291,31 @@ void DeferredLightingEffect::render(RenderArgs* args) { _copyFBO = framebufferCache->getFramebuffer(); batch.setFramebuffer(_copyFBO); + // Clearing it batch.setViewportTransform(args->_viewport); batch.setStateScissorRect(args->_viewport); - batch.clearColorFramebuffer(_copyFBO->getBufferMask(), glm::vec4(0.0f, 0.0f, 0.0f, 0.0f), true); - + + // BInd the G-Buffer surfaces batch.setResourceTexture(0, framebufferCache->getPrimaryColorTexture()); batch.setResourceTexture(1, framebufferCache->getPrimaryNormalTexture()); batch.setResourceTexture(2, framebufferCache->getPrimarySpecularTexture()); batch.setResourceTexture(3, framebufferCache->getPrimaryDepthTexture()); - - + // THe main viewport is assumed to be the mono viewport (or the 2 stereo faces side by side within that viewport) + auto monoViewport = args->_viewport; float sMin = args->_viewport.x / (float)framebufferSize.width(); float sWidth = args->_viewport.z / (float)framebufferSize.width(); float tMin = args->_viewport.y / (float)framebufferSize.height(); float tHeight = args->_viewport.w / (float)framebufferSize.height(); - auto monoViewport = args->_viewport; - - - // The view furstum is the mono frustum base + // The view frustum is the mono frustum base auto viewFrustum = args->_viewFrustum; - float left, right, bottom, top, nearVal, farVal; - glm::vec4 nearClipPlane, farClipPlane; - viewFrustum->computeOffAxisFrustum(left, right, bottom, top, nearVal, farVal, nearClipPlane, farClipPlane); - float depthScale = (farVal - nearVal) / farVal; - float nearScale = -1.0f / nearVal; - float depthTexCoordScaleS = (right - left) * nearScale / sWidth; - float depthTexCoordScaleT = (top - bottom) * nearScale / tHeight; - float depthTexCoordOffsetS = left * nearScale - sMin * depthTexCoordScaleS; - float depthTexCoordOffsetT = bottom * nearScale - tMin * depthTexCoordScaleT; - // Eval the mono projection mat4 monoProjMat; viewFrustum->evalProjectionMatrix(monoProjMat); - + // The mono view transform Transform monoViewTransform; viewFrustum->evalViewTransform(monoViewTransform); @@ -336,6 +324,7 @@ void DeferredLightingEffect::render(RenderArgs* args) { glm::mat4 monoViewMat; monoViewTransform.getMatrix(monoViewMat); + // Running in stero ? bool isStereo = args->_context->isStereo(); int numPasses = 1; @@ -347,6 +336,7 @@ void DeferredLightingEffect::render(RenderArgs* args) { vec4 fetchTexcoordRects[2]; DeferredTransform deferredTransforms[2]; + auto geometryCache = DependencyManager::get(); if (isStereo) { numPasses = 2; @@ -355,8 +345,6 @@ void DeferredLightingEffect::render(RenderArgs* args) { args->_context->getStereoProjections(projMats); args->_context->getStereoViews(eyeViews); - - float halfWidth = 0.5 * sWidth; for (int i = 0; i < numPasses; i++) { @@ -364,47 +352,28 @@ void DeferredLightingEffect::render(RenderArgs* args) { int sideWidth = monoViewport.z * 0.5; viewports[i] = ivec4(monoViewport.x + (i * sideWidth), monoViewport.y, sideWidth, monoViewport.w); - auto sideViewMat = eyeViews[i] * monoViewMat; - - - + // Combine the side projection with the side View offset (the view matrix is same for all side) projMats[i] = projMats[i] * eyeViews[i]; - deferredTransforms[i]._projection = projMats[i]; - - deferredTransforms[i]._viewInverse = monoViewMat; - - deferredTransforms[i].nearVal = nearVal; - deferredTransforms[i].depthScale = depthScale; - deferredTransforms[i].isStereo = (i == 0 ? -1.0f : 1.0f); - deferredTransforms[i].depthTexCoordOffset = glm::vec2(depthTexCoordOffsetS, depthTexCoordOffsetT); - deferredTransforms[i].depthTexCoordScale = glm::vec2(depthTexCoordScaleS, depthTexCoordScaleT); - + deferredTransforms[i].projection = projMats[i]; + deferredTransforms[i].viewInverse = monoViewMat; + deferredTransforms[i].stereoSide = (i == 0 ? -1.0f : 1.0f); clipQuad[i] = glm::vec4(sMin + i * halfWidth, tMin, halfWidth, tHeight); screenBottomLeftCorners[i] = glm::vec2(-1.0f + i * 1.0f, -1.0f); screenTopRightCorners[i] = glm::vec2(i * 1.0f, 1.0f); fetchTexcoordRects[i] = glm::vec4(sMin + i * halfWidth, tMin, halfWidth, tHeight); - } } else { viewports[0] = monoViewport; - projMats[0] = monoProjMat; - deferredTransforms[0]._projection = monoProjMat; + deferredTransforms[0].projection = monoProjMat; + deferredTransforms[0].viewInverse = monoViewMat; + deferredTransforms[0].stereoSide = 0.0f; - deferredTransforms[0]._viewInverse = monoViewMat; - - deferredTransforms[0].nearVal = nearVal; - deferredTransforms[0].depthScale = depthScale; - deferredTransforms[0].isStereo = 0.0f; - deferredTransforms[0].depthTexCoordOffset = glm::vec2(depthTexCoordOffsetS, depthTexCoordOffsetT); - deferredTransforms[0].depthTexCoordScale = glm::vec2(depthTexCoordScaleS, depthTexCoordScaleT); - - clipQuad[0] = glm::vec4(sMin, tMin, sWidth, tHeight); screenBottomLeftCorners[0] = glm::vec2(-1.0f, -1.0f); screenTopRightCorners[0] = glm::vec2(1.0f, 1.0f); @@ -425,126 +394,71 @@ void DeferredLightingEffect::render(RenderArgs* args) { _deferredTransformBuffer[side]._buffer->setSubData(0, sizeof(DeferredTransform), (const gpu::Byte*) &deferredTransforms[side]); batch.setUniformBuffer(_directionalLightLocations->deferredTransformBuffer, _deferredTransformBuffer[side]); - - glm::vec2 topLeft(-1.0f, -1.0f); glm::vec2 bottomRight(1.0f, 1.0f); - /* glm::vec2 texCoordTopLeft(sMin, tMin); - glm::vec2 texCoordBottomRight(sMin + sWidth, tMin + tHeight);*/ - /* glm::vec2 topLeft = screenBottomLeftCorners[side]; - glm::vec2 bottomRight = screenTopRightCorners[side];*/ glm::vec2 texCoordTopLeft(clipQuad[side].x, clipQuad[side].y); glm::vec2 texCoordBottomRight(clipQuad[side].x + clipQuad[side].z, clipQuad[side].y + clipQuad[side].w); - - // First Global directional light and ambient pass - bool useSkyboxCubemap = (_skybox) && (_skybox->getCubemap()); + { + bool useSkyboxCubemap = (_skybox) && (_skybox->getCubemap()); - auto& program = _directionalLight; - LightLocationsPtr locations = _directionalLightLocations; + auto& program = _directionalLight; + LightLocationsPtr locations = _directionalLightLocations; - // FIXME: Note: we've removed the menu items to enable shadows, so this will always be false for now. - // When we add back shadow support, this old approach may likely be removed and completely replaced - // but I've left it in for now. - /* bool shadowsEnabled = false; - bool cascadeShadowsEnabled = false; - - if (shadowsEnabled) { - batch.setResourceTexture(4, framebufferCache->getShadowFramebuffer()->getDepthStencilBuffer()); - - program = _directionalLightShadowMap; - locations = _directionalLightShadowMapLocations; - if (cascadeShadowsEnabled) { - program = _directionalLightCascadedShadowMap; - locations = _directionalLightCascadedShadowMapLocations; + // TODO: At some point bring back the shadows... + // Setup the global directional pass pipeline + { if (useSkyboxCubemap) { - program = _directionalSkyboxLightCascadedShadowMap; - locations = _directionalSkyboxLightCascadedShadowMapLocations; - } else if (_ambientLightMode > -1) { - program = _directionalAmbientSphereLightCascadedShadowMap; - locations = _directionalAmbientSphereLightCascadedShadowMapLocations; - } - batch.setPipeline(program); - batch._glUniform3fv(locations->shadowDistances, 1, (const float*) &_viewState->getShadowDistances()); - - } else { - if (useSkyboxCubemap) { - program = _directionalSkyboxLightShadowMap; - locations = _directionalSkyboxLightShadowMapLocations; - } else if (_ambientLightMode > -1) { - program = _directionalAmbientSphereLightShadowMap; - locations = _directionalAmbientSphereLightShadowMapLocations; - } - batch.setPipeline(program); - } - batch._glUniform1f(locations->shadowScale, 1.0f / framebufferCache->getShadowFramebuffer()->getWidth()); - - } else*/ { - if (useSkyboxCubemap) { program = _directionalSkyboxLight; locations = _directionalSkyboxLightLocations; - } else if (_ambientLightMode > -1) { - program = _directionalAmbientSphereLight; - locations = _directionalAmbientSphereLightLocations; - } - batch.setPipeline(program); - } - - { // Setup the global lighting - auto globalLight = _allocatedLights[_globalLights.front()]; - - if (locations->ambientSphere >= 0) { - gpu::SphericalHarmonics sh = globalLight->getAmbientSphere(); - if (useSkyboxCubemap && _skybox->getCubemap()->getIrradiance()) { - sh = (*_skybox->getCubemap()->getIrradiance()); + } else if (_ambientLightMode > -1) { + program = _directionalAmbientSphereLight; + locations = _directionalAmbientSphereLightLocations; } - for (int i =0; i ambientSphere + i, 1, (const float*) (&sh) + i * 4); - } - } - - if (useSkyboxCubemap) { - batch.setResourceTexture(5, _skybox->getCubemap()); + batch.setPipeline(program); } - if (locations->lightBufferUnit >= 0) { - batch.setUniformBuffer(locations->lightBufferUnit, globalLight->getSchemaBuffer()); - } + { // Setup the global lighting + auto globalLight = _allocatedLights[_globalLights.front()]; + + if (locations->ambientSphere >= 0) { + gpu::SphericalHarmonics sh = globalLight->getAmbientSphere(); + if (useSkyboxCubemap && _skybox->getCubemap()->getIrradiance()) { + sh = (*_skybox->getCubemap()->getIrradiance()); + } + for (int i =0; i ambientSphere + i, 1, (const float*) (&sh) + i * 4); + } + } + + if (useSkyboxCubemap) { + batch.setResourceTexture(5, _skybox->getCubemap()); + } + + if (locations->lightBufferUnit >= 0) { + batch.setUniformBuffer(locations->lightBufferUnit, globalLight->getSchemaBuffer()); + } - if (_atmosphere && (locations->atmosphereBufferUnit >= 0)) { - batch.setUniformBuffer(locations->atmosphereBufferUnit, _atmosphere->getDataBuffer()); + if (_atmosphere && (locations->atmosphereBufferUnit >= 0)) { + batch.setUniformBuffer(locations->atmosphereBufferUnit, _atmosphere->getDataBuffer()); + } + } + + { + batch.setModelTransform(Transform()); + batch.setProjectionTransform(glm::mat4()); + batch.setViewTransform(Transform()); + + glm::vec4 color(1.0f, 1.0f, 1.0f, 1.0f); + geometryCache->renderQuad(batch, topLeft, bottomRight, texCoordTopLeft, texCoordBottomRight, color); + } + + if (useSkyboxCubemap) { + batch.setResourceTexture(5, nullptr); } } - { - /* Transform model; - model.setTranslation(glm::vec3(sMin, tMin, 0.0)); - model.setScale(glm::vec3(sWidth, tHeight, 1.0)); - batch.setModelTransform(model); - */ - - batch.setModelTransform(Transform()); - batch.setProjectionTransform(glm::mat4()); - batch.setViewTransform(Transform()); - - glm::vec4 color(1.0f, 1.0f, 1.0f, 1.0f); - /* glm::vec2 topLeft = screenBottomLeftCorners[side]; // = glm::vec2(-1.0f, -1.0f); - glm::vec2 bottomRight = screenTopRightCorners[side]; //=(1.0f, 1.0f); - glm::vec2 texCoordTopLeft(sMin, tMin); - glm::vec2 texCoordBottomRight(sMin + sWidth, tMin + tHeight); - */ - DependencyManager::get()->renderQuad(batch, topLeft, bottomRight, texCoordTopLeft, texCoordBottomRight, color); - } - - if (useSkyboxCubemap) { - batch.setResourceTexture(5, nullptr); - } - - /* if (shadowsEnabled) { - batch.setResourceTexture(4, nullptr); - }*/ - auto texcoordMat = glm::mat4(); /* texcoordMat[0] = glm::vec4(sWidth / 2.0f, 0.0f, 0.0f, sMin + sWidth / 2.0f); texcoordMat[1] = glm::vec4(0.0f, tHeight / 2.0f, 0.0f, tMin + tHeight / 2.0f); @@ -556,11 +470,11 @@ void DeferredLightingEffect::render(RenderArgs* args) { // enlarge the scales slightly to account for tesselation const float SCALE_EXPANSION = 0.05f; - auto geometryCache = DependencyManager::get(); batch.setProjectionTransform(projMats[side]); batch.setViewTransform(monoViewTransform); + // Splat Point lights if (!_pointLights.empty()) { batch.setPipeline(_pointLight); @@ -584,11 +498,6 @@ void DeferredLightingEffect::render(RenderArgs* args) { batch.setProjectionTransform(glm::mat4()); glm::vec4 color(1.0f, 1.0f, 1.0f, 1.0f); - /* glm::vec2 topLeft(-1.0f, -1.0f); - glm::vec2 bottomRight(1.0f, 1.0f); - glm::vec2 texCoordTopLeft(sMin, tMin); - glm::vec2 texCoordBottomRight(sMin + sWidth, tMin + tHeight); -*/ DependencyManager::get()->renderQuad(batch, topLeft, bottomRight, texCoordTopLeft, texCoordBottomRight, color); batch.setProjectionTransform(projMats[side]); @@ -600,9 +509,9 @@ void DeferredLightingEffect::render(RenderArgs* args) { geometryCache->renderSphere(batch, expandedRadius, 32, 32, glm::vec4(1.0f, 1.0f, 1.0f, 1.0f)); } } - // _pointLights.clear(); } + // Splat spot lights if (!_spotLights.empty()) { batch.setPipeline(_spotLight); @@ -635,11 +544,6 @@ void DeferredLightingEffect::render(RenderArgs* args) { batch.setProjectionTransform(glm::mat4()); glm::vec4 color(1.0f, 1.0f, 1.0f, 1.0f); - /* glm::vec2 topLeft(-1.0f, -1.0f); - glm::vec2 bottomRight(1.0f, 1.0f); - glm::vec2 texCoordTopLeft(sMin, tMin); - glm::vec2 texCoordBottomRight(sMin + sWidth, tMin + tHeight); -*/ DependencyManager::get()->renderQuad(batch, topLeft, bottomRight, texCoordTopLeft, texCoordBottomRight, color); batch.setProjectionTransform( projMats[side]); @@ -665,7 +569,6 @@ void DeferredLightingEffect::render(RenderArgs* args) { batch.drawIndexed(model::Mesh::topologyToPrimitive(part._topology), part._numIndices, part._startIndex); } } - // _spotLights.clear(); } } diff --git a/libraries/render-utils/src/DeferredLightingEffect.h b/libraries/render-utils/src/DeferredLightingEffect.h index db02a4e771..ea6f2f0ce0 100644 --- a/libraries/render-utils/src/DeferredLightingEffect.h +++ b/libraries/render-utils/src/DeferredLightingEffect.h @@ -156,17 +156,10 @@ private: // Class describing the uniform buffer with all the parameters common to the deferred shaders class DeferredTransform { public: - - glm::mat4 _projection; - glm::mat4 _viewInverse; - - float nearVal{ 1.0f }; - float depthScale{ 1.0f }; - float isStereo{ 0.f }; - float spare0; // spare scalar here - glm::vec2 depthTexCoordOffset{ 0.0f }; - glm::vec2 depthTexCoordScale{ 1.0f }; - + glm::mat4 projection; + glm::mat4 viewInverse; + float stereoSide{ 0.f }; + float spareA, spareB, spareC; DeferredTransform() {} }; diff --git a/libraries/render-utils/src/directional_ambient_light.slf b/libraries/render-utils/src/directional_ambient_light.slf index 8dfd0488ac..52ecc71a14 100755 --- a/libraries/render-utils/src/directional_ambient_light.slf +++ b/libraries/render-utils/src/directional_ambient_light.slf @@ -25,8 +25,7 @@ out vec4 _fragColor; void main(void) { DeferredTransform deferredTransform = getDeferredTransform(); - DeferredFragment frag = unpackDeferredFragment(_texCoord0); - + DeferredFragment frag = unpackDeferredFragment(deferredTransform, _texCoord0); // Light mapped or not ? if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) { @@ -36,24 +35,16 @@ void main(void) { frag.normal, frag.diffuse, frag.specularVal.xyz); - _fragColor = vec4(color, 1.0); } else { vec3 color = evalAmbienSphereGlobalColor( - deferredTransform.viewInverse, - 1.0, - frag.position.xyz, - frag.normal, - frag.diffuse, - frag.specular, - frag.gloss); - + deferredTransform.viewInverse, + 1.0, + frag.position.xyz, + frag.normal, + frag.diffuse, + frag.specular, + frag.gloss); _fragColor = vec4(color, frag.normalVal.a); } - -/* if (getStereoMode(deferredTransform)) { - float side = getStereoSide(deferredTransform); - _fragColor = vec4(-side, 0.0, side, 1.0); - } -*/ } diff --git a/libraries/render-utils/src/directional_ambient_light_cascaded_shadow_map.slf b/libraries/render-utils/src/directional_ambient_light_cascaded_shadow_map.slf index 8ca272a9c3..8b0212636e 100755 --- a/libraries/render-utils/src/directional_ambient_light_cascaded_shadow_map.slf +++ b/libraries/render-utils/src/directional_ambient_light_cascaded_shadow_map.slf @@ -27,7 +27,8 @@ in vec2 _texCoord0; out vec4 _fragColor; void main(void) { - DeferredFragment frag = unpackDeferredFragment(_texCoord0); + DeferredTransform deferredTransform = getDeferredTransform(); + DeferredFragment frag = unpackDeferredFragment(deferredTransform, _texCoord0); // Eval shadow Texcoord and then Attenuation vec4 shadowTexcoord = evalCascadedShadowTexcoord(frag.position); @@ -35,23 +36,22 @@ void main(void) { // Light mapped or not ? if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) { - _fragColor = vec4(evalLightmappedColor( - getDeferredTransform().viewInverse, + vec3 color = evalLightmappedColor( + deferredTransform.viewInverse, shadowAttenuation, frag.normal, frag.diffuse, - frag.specularVal.xyz), - 1.0); + frag.specularVal.xyz); + _fragColor = vec4(color, 1.0); } else { vec3 color = evalAmbienSphereGlobalColor( - getDeferredTransform().viewInverse, + deferredTransform.viewInverse, shadowAttenuation, - frag.position.xyz, - frag.normal, - frag.diffuse, - frag.specular, - frag.gloss); - + frag.position.xyz, + frag.normal, + frag.diffuse, + frag.specular, + frag.gloss); _fragColor = vec4(color, frag.normalVal.a); } } diff --git a/libraries/render-utils/src/directional_ambient_light_shadow_map.slf b/libraries/render-utils/src/directional_ambient_light_shadow_map.slf index ef92e1d493..2dee8bf9b9 100755 --- a/libraries/render-utils/src/directional_ambient_light_shadow_map.slf +++ b/libraries/render-utils/src/directional_ambient_light_shadow_map.slf @@ -26,7 +26,8 @@ in vec2 _texCoord0; out vec4 _fragColor; void main(void) { - DeferredFragment frag = unpackDeferredFragment(_texCoord0); + DeferredTransform deferredTransform = getDeferredTransform(); + DeferredFragment frag = unpackDeferredFragment(deferredTransform, _texCoord0); // Eval shadow Texcoord and then Attenuation vec4 shadowTexcoord = evalShadowTexcoord(frag.position); @@ -34,23 +35,22 @@ void main(void) { // Light mapped or not ? if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) { - _fragColor = vec4(evalLightmappedColor( - getDeferredTransform().viewInverse, + vec3 color = evalLightmappedColor( + deferredTransform.viewInverse, shadowAttenuation, frag.normal, frag.diffuse, - frag.specularVal.xyz), - 1.0); + frag.specularVal.xyz); + _fragColor = vec4(color, 1.0); } else { vec3 color = evalAmbienSphereGlobalColor( - getDeferredTransform().viewInverse, + deferredTransform.viewInverse, shadowAttenuation, - frag.position.xyz, - frag.normal, - frag.diffuse, - frag.specular, - frag.gloss); - + frag.position.xyz, + frag.normal, + frag.diffuse, + frag.specular, + frag.gloss); _fragColor = vec4(color, frag.normalVal.a); } } diff --git a/libraries/render-utils/src/directional_light.slf b/libraries/render-utils/src/directional_light.slf index 07ee126bd6..22b0157762 100644 --- a/libraries/render-utils/src/directional_light.slf +++ b/libraries/render-utils/src/directional_light.slf @@ -24,27 +24,27 @@ in vec2 _texCoord0; out vec4 _fragColor; void main(void) { - DeferredFragment frag = unpackDeferredFragment(_texCoord0); + DeferredTransform deferredTransform = getDeferredTransform(); + DeferredFragment frag = unpackDeferredFragment(deferredTransform, _texCoord0); // Light mapped or not ? if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) { - _fragColor = vec4( evalLightmappedColor( - getDeferredTransform().viewInverse, + vec3 color = evalLightmappedColor( + deferredTransform.viewInverse, 1.0, frag.normal, frag.diffuse, - frag.specularVal.xyz), - 1.0); + frag.specularVal.xyz); + _fragColor = vec4(color, 1.0); } else { vec3 color = evalAmbienGlobalColor( - getDeferredTransform().viewInverse, - 1.0, - frag.position.xyz, - frag.normal, - frag.diffuse, - frag.specular, - frag.gloss); - + deferredTransform.viewInverse, + 1.0, + frag.position.xyz, + frag.normal, + frag.diffuse, + frag.specular, + frag.gloss); _fragColor = vec4(color, frag.normalVal.a); } } diff --git a/libraries/render-utils/src/directional_light_cascaded_shadow_map.slf b/libraries/render-utils/src/directional_light_cascaded_shadow_map.slf index a580653cb0..4abe8e2e9d 100644 --- a/libraries/render-utils/src/directional_light_cascaded_shadow_map.slf +++ b/libraries/render-utils/src/directional_light_cascaded_shadow_map.slf @@ -27,7 +27,9 @@ in vec2 _texCoord0; out vec4 _fragColor; void main(void) { - DeferredFragment frag = unpackDeferredFragment(_texCoord0); + DeferredTransform deferredTransform = getDeferredTransform(); + DeferredFragment frag = unpackDeferredFragment(deferredTransform, _texCoord0); + // Eval shadow Texcoord and then Attenuation vec4 shadowTexcoord = evalCascadedShadowTexcoord(frag.position); @@ -35,16 +37,16 @@ void main(void) { // Light mapped or not ? if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) { - _fragColor = vec4(evalLightmappedColor( - getDeferredTransform().viewInverse, + vec3 color = evalLightmappedColor( + deferredTransform.viewInverse, shadowAttenuation, frag.normal, frag.diffuse, - frag.specularVal.xyz), - 1.0); + frag.specularVal.xyz); + _fragColor = vec4(color, 1.0); } else { vec3 color = evalAmbienGlobalColor( - getDeferredTransform().viewInverse, + deferredTransform.viewInverse, shadowAttenuation, frag.position.xyz, frag.normal, diff --git a/libraries/render-utils/src/directional_light_shadow_map.slf b/libraries/render-utils/src/directional_light_shadow_map.slf index 4e0f9db360..b3362a2040 100644 --- a/libraries/render-utils/src/directional_light_shadow_map.slf +++ b/libraries/render-utils/src/directional_light_shadow_map.slf @@ -27,7 +27,8 @@ in vec2 _texCoord0; out vec4 _fragColor; void main(void) { - DeferredFragment frag = unpackDeferredFragment(_texCoord0); + DeferredTransform deferredTransform = getDeferredTransform(); + DeferredFragment frag = unpackDeferredFragment(deferredTransform, _texCoord0); // Eval shadow Texcoord and then Attenuation vec4 shadowTexcoord = evalShadowTexcoord(frag.position); @@ -35,22 +36,22 @@ void main(void) { // Light mapped or not ? if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) { - _fragColor = vec4(evalLightmappedColor( - getDeferredTransform().viewInverse, + vec3 color = evalLightmappedColor( + deferredTransform.viewInverse, shadowAttenuation, frag.normal, frag.diffuse, - frag.specularVal.xyz), - 1.0); + frag.specularVal.xyz); + _fragColor = vec4(color, 1.0); } else { - vec3 color = evalAmbienGlobalColor( - getDeferredTransform().viewInverse, - shadowAttenuation, - frag.position.xyz, - frag.normal, - frag.diffuse, - frag.specular, - frag.gloss); + vec3 color = evalAmbienGlobalColor( + deferredTransform.viewInverse, + shadowAttenuation, + frag.position.xyz, + frag.normal, + frag.diffuse, + frag.specular, + frag.gloss); _fragColor = vec4(color, frag.normalVal.a); } diff --git a/libraries/render-utils/src/directional_skybox_light.slf b/libraries/render-utils/src/directional_skybox_light.slf index 21ea28a681..ca3efef047 100755 --- a/libraries/render-utils/src/directional_skybox_light.slf +++ b/libraries/render-utils/src/directional_skybox_light.slf @@ -25,8 +25,7 @@ out vec4 _fragColor; void main(void) { DeferredTransform deferredTransform = getDeferredTransform(); - DeferredFragment frag = unpackDeferredFragment(_texCoord0); - + DeferredFragment frag = unpackDeferredFragment(deferredTransform, _texCoord0); // Light mapped or not ? if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) { @@ -36,27 +35,17 @@ void main(void) { frag.normal, frag.diffuse, frag.specularVal.xyz); - _fragColor = vec4(color, 1.0); } else { vec3 color = evalSkyboxGlobalColor( - deferredTransform.viewInverse, - 1.0, - frag.position.xyz, - frag.normal, - frag.diffuse, - frag.specular, - frag.gloss); + deferredTransform.viewInverse, + 1.0, + frag.position.xyz, + frag.normal, + frag.diffuse, + frag.specular, + frag.gloss); _fragColor = vec4(color, frag.normalVal.a); } - - // Debug Stereo - if (getStereoMode(deferredTransform)) { - float side = getStereoSide(deferredTransform); - // _fragColor = vec4(-side, 0.0, side, 1.0); - //_fragColor = vec4(_texCoord0, 0.0, 1.0); - // _fragColor = vec4(frag.position.xyz, 1.0); - - } } diff --git a/libraries/render-utils/src/directional_skybox_light_cascaded_shadow_map.slf b/libraries/render-utils/src/directional_skybox_light_cascaded_shadow_map.slf index c1fe501434..3c09bf62b6 100755 --- a/libraries/render-utils/src/directional_skybox_light_cascaded_shadow_map.slf +++ b/libraries/render-utils/src/directional_skybox_light_cascaded_shadow_map.slf @@ -27,7 +27,8 @@ in vec2 _texCoord0; out vec4 _fragColor; void main(void) { - DeferredFragment frag = unpackDeferredFragment(_texCoord0); + DeferredTransform deferredTransform = getDeferredTransform(); + DeferredFragment frag = unpackDeferredFragment(deferredTransform, _texCoord0); // Eval shadow Texcoord and then Attenuation vec4 shadowTexcoord = evalCascadedShadowTexcoord(frag.position); @@ -35,22 +36,23 @@ void main(void) { // Light mapped or not ? if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) { - _fragColor = vec4(evalLightmappedColor( - getDeferredTransform().viewInverse, - shadowAttenuation, - frag.normal, - frag.diffuse, - frag.specularVal.xyz), - 1.0); + vec3 color = evalLightmappedColor( + deferredTransform.viewInverse, + shadowAttenuation, + frag.normal, + frag.diffuse, + frag.specularVal.xyz); + + _fragColor = vec4(color, 1.0); } else { - vec3 color = evalSkyboxGlobalColor( - getDeferredTransform().viewInverse, - shadowAttenuation, - frag.position.xyz, - frag.normal, - frag.diffuse, - frag.specular, - frag.gloss); + vec3 color = evalSkyboxGlobalColor( + deferredTransform.viewInverse, + shadowAttenuation, + frag.position.xyz, + frag.normal, + frag.diffuse, + frag.specular, + frag.gloss); _fragColor = vec4(color, frag.normalVal.a); } diff --git a/libraries/render-utils/src/directional_skybox_light_shadow_map.slf b/libraries/render-utils/src/directional_skybox_light_shadow_map.slf index df3dbc64c4..632270476b 100755 --- a/libraries/render-utils/src/directional_skybox_light_shadow_map.slf +++ b/libraries/render-utils/src/directional_skybox_light_shadow_map.slf @@ -27,7 +27,8 @@ in vec2 _texCoord0; out vec4 _fragColor; void main(void) { - DeferredFragment frag = unpackDeferredFragment(_texCoord0); + DeferredTransform deferredTransform = getDeferredTransform(); + DeferredFragment frag = unpackDeferredFragment(deferredTransform, _texCoord0); // Eval shadow Texcoord and then Attenuation vec4 shadowTexcoord = evalShadowTexcoord(frag.position); @@ -35,22 +36,22 @@ void main(void) { // Light mapped or not ? if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) { - _fragColor = vec4(evalLightmappedColor( - getDeferredTransform().viewInverse, + vec3 color = evalLightmappedColor( + deferredTransform.viewInverse, shadowAttenuation, frag.normal, frag.diffuse, - frag.specularVal.xyz), - 1.0); + frag.specularVal.xyz); + _fragColor = vec4(color, 1.0); } else { vec3 color = evalSkyboxGlobalColor( - getDeferredTransform().viewInverse, - shadowAttenuation, - frag.position.xyz, - frag.normal, - frag.diffuse, - frag.specular, - frag.gloss); + deferredTransform.viewInverse, + shadowAttenuation, + frag.position.xyz, + frag.normal, + frag.diffuse, + frag.specular, + frag.gloss); _fragColor = vec4(color, frag.normalVal.a); } diff --git a/libraries/render-utils/src/point_light.slf b/libraries/render-utils/src/point_light.slf index 478b1982e5..e9045e18c5 100644 --- a/libraries/render-utils/src/point_light.slf +++ b/libraries/render-utils/src/point_light.slf @@ -30,7 +30,7 @@ void main(void) { // Grab the fragment data from the uv vec2 texCoord = _texCoord0.st / _texCoord0.q; - DeferredFragment frag = unpackDeferredFragment(texCoord); + DeferredFragment frag = unpackDeferredFragment(deferredTransform, texCoord); mat4 invViewMat = deferredTransform.viewInverse; @@ -77,12 +77,4 @@ void main(void) { _fragColor = vec4(edgeCoord * edgeCoord * getLightShowContour(light) * getLightColor(light), 0.0); } } - - // Debug Stereo - if (getStereoMode(deferredTransform)) { - float side = getStereoSide(deferredTransform); - // _fragColor = vec4(-side, 0.0, side, 1.0); - // _fragColor = vec4(texCoord, 0.0, 1.0); - // _fragColor = vec4(frag.position.xyz, 1.0); - } } diff --git a/libraries/render-utils/src/spot_light.slf b/libraries/render-utils/src/spot_light.slf index 46242d8e11..73b081260e 100644 --- a/libraries/render-utils/src/spot_light.slf +++ b/libraries/render-utils/src/spot_light.slf @@ -26,9 +26,10 @@ out vec4 _fragColor; void main(void) { DeferredTransform deferredTransform = getDeferredTransform(); + // Grab the fragment data from the uv vec2 texCoord = _texCoord0.st / _texCoord0.q; - DeferredFragment frag = unpackDeferredFragment(texCoord); + DeferredFragment frag = unpackDeferredFragment(deferredTransform, texCoord); mat4 invViewMat = deferredTransform.viewInverse; @@ -86,13 +87,5 @@ void main(void) { _fragColor = vec4(edgeCoord * edgeCoord * getLightColor(light), 0.0); } } - - // Debug Stereo - if (getStereoMode(deferredTransform)) { - float side = getStereoSide(deferredTransform); - // _fragColor = vec4(-side, 0.0, side, 1.0); - // _fragColor = vec4(texCoord, 0.0, 1.0); - // _fragColor = vec4(frag.position.xyz, 1.0); - } }