diff --git a/data/shader/DeferredCombine.fsh b/data/shader/DeferredCombine.fsh index 8774a142ee7467eeff1d766eb97654513cdeefa8..f3ce3fc241719702f114c6f21ca09d7ac8222c7d 100644 --- a/data/shader/DeferredCombine.fsh +++ b/data/shader/DeferredCombine.fsh @@ -96,6 +96,7 @@ void main() vec3 lightDir = vec3(0); float lightDistance = 1; + float attenuation = 1; if(uLightIsDirectional) { lightDir = uLightDir; @@ -103,6 +104,7 @@ void main() lightDir = uLightPosition - worldPosition; lightDistance = length(lightDir); lightDir /= lightDistance; + attenuation = max(1, 1.0/pow(lightDistance, 2)); } vec3 viewDir = normalize(cameraPosition - worldPosition); @@ -115,5 +117,7 @@ void main() float ssao = ssaoFactor(); - oColor = vec4(lighting.rgb * ssao * shadowFactor(worldPosition) + emissive.rgb, uOneOverLightCount * albedo.a); + + + oColor = vec4(lighting.rgb * ssao * shadowFactor(worldPosition) * attenuation + emissive.rgb, uOneOverLightCount * albedo.a); } diff --git a/src/game/include/engine/scene/scenes/AtmosphereTestScene.hpp b/src/game/include/engine/scene/scenes/AtmosphereTestScene.hpp index a6d592afd9e9e06057f24b4d7b16fd3a40eb422d..974d0c617865546eac79ab2407e59eece63f814c 100644 --- a/src/game/include/engine/scene/scenes/AtmosphereTestScene.hpp +++ b/src/game/include/engine/scene/scenes/AtmosphereTestScene.hpp @@ -40,7 +40,7 @@ private: Entity planetViewCam; Material cockpitMaterial, sunMaterial, skyboxMaterial, windshieldMaterial; - Geometry cockpitGeometry, sunGeometry, skyboxGeometry, planetViewGeom; + Geometry cockpitGeometry, sunGeometry, skyboxGeometry, planetViewGeom, logoViewGeom; Geometry consoleGeom, consoleFrontLeftGeom, consoleFrontRightGeom, consoleBackLeftGeom, consoleBackRightGeom, consoleMiddleLeftGeom, consoleMiddleRightGeom, windShieldGeom; SharedTexture2D outOfOrderTexture; @@ -50,6 +50,9 @@ private: double planetRotationSpeed = 0; Transform::Handle planetViewTransform; + Transform::Handle logoViewTransform; + + std::shared_ptr soundTrackIntro, soundTrackMain; bool resourceLoadingFinished = false; diff --git a/src/game/src/engine/scene/scenes/AtmosphereTestScene.cpp b/src/game/src/engine/scene/scenes/AtmosphereTestScene.cpp index e2709027361ad62af41d4762b76c461dd7a15c87..fd7502091f13029d45e2b4f8193c0b14c520d835 100644 --- a/src/game/src/engine/scene/scenes/AtmosphereTestScene.cpp +++ b/src/game/src/engine/scene/scenes/AtmosphereTestScene.cpp @@ -91,6 +91,9 @@ bool AtmosphereTestScene::startup() { m_renderer->addRenderPass(planetViewCam, "PlanetView"_sh, ScreenSpaceSize::HALF); m_renderer->setRenderPassOnlyTexture("PlanetView"_sh, true); + m_renderer->addRenderPass(planetViewCam, "LogoView"_sh, ScreenSpaceSize::HALF); + m_renderer->setRenderPassOnlyTexture("LogoView"_sh, true); + m_console.m_events = m_events; m_console.m_renderer = m_renderer; m_console.m_sceneGraph = m_sceneGraph; @@ -177,6 +180,9 @@ bool AtmosphereTestScene::startup() { planetRotationSpeed -= planetRotationSpeed * e.dt * 0.3; planetViewTransform->rotation = glm::rotate(planetViewTransform->rotation, planetRotationSpeed * e.dt, glm::dvec3{ 0.0, 1.0, 0.0 }); + + logoViewTransform->rotation = glm::inverse(m_player->getShipRotation()); // glm::rotate(logoViewTransform->rotation, 1.0 * e.dt, glm::dvec3{ 0.0, 1.0, 0.0 }); + }); m_events->subscribe([this](const KeyboardEvent &e) { @@ -306,7 +312,7 @@ void AtmosphereTestScene::switchToMainScene() { cockpitTransform->position = glm::dvec3(0, 0, 0); cockpitDrawable->visible = true; auto cockpitLight = - cockpit.assign(glm::vec4(1, 1, 1, 0.2), glm::vec3(1, 0, 0), + cockpit.assign(glm::vec4(1, 1, 1, 0.0), glm::vec3(1, 0, 0), false, LightType::POINT, cockpitPassId); @@ -318,6 +324,15 @@ void AtmosphereTestScene::switchToMainScene() { cockpitSun.assign(glm::vec4(1, 1, 1, 3), glm::vec3(1, 0, 0), true, LightType::DIRECTIONAL, cockpitPassId); + + auto lightLeft = m_sceneGraph->create(); + lightLeft.assign()->position = { -0.6, 0.6, -2.34 }; + lightLeft.assign(glm::vec4(1.0, 0.5, 0.3, 0.5), glm::vec3(1, 0, 0), false, LightType::POINT, cockpitPassId); + + auto lightRight= m_sceneGraph->create(); + lightRight.assign()->position = { 0.6, 0.6, -2.34 }; + lightRight.assign(glm::vec4(0.3, 1.0, 0.4, 0.5), glm::vec3(1, 0, 0), false, LightType::POINT, cockpitPassId); + auto console = m_sceneGraph->create(); console.assign( consoleGeom, @@ -334,9 +349,9 @@ void AtmosphereTestScene::switchToMainScene() { auto consoleFrontLeft = m_sceneGraph->create(); consoleFrontLeft.assign( consoleFrontLeftGeom, - Material{ glm::vec4{ 1, 1, 1, 1 }, glm::vec4{ 1, 1, 1, 1 }, - outOfOrderTexture, nullptr, nullptr, nullptr, - skyboxMaterial.prog, true, RenderQueue::OPAQUE, GL_NONE }, + Material{ glm::vec4{ 0.2, 0.2, 0.2, 1 }, glm::vec4{ 1, 1, 1, 1 }, + nullptr, nullptr, nullptr, m_renderer->getRenderPassTarget("LogoView"_sh), + defaultPbrProg, true, RenderQueue::OPAQUE, GL_NONE }, 0, cockpitPassId); consoleFrontLeft.assign(); @@ -411,6 +426,23 @@ void AtmosphereTestScene::switchToMainScene() { false, LightType::POINT, planetViewPassId); } + { + auto logoViewPassId = m_renderer->getRenderPassId("LogoView"_sh); + auto logoView = m_sceneGraph->create(); + logoView.assign( + logoViewGeom, + Material{ glm::vec4{ 1, 1, 1, 1 }, glm::vec4{ 1.0, 0.5, 0.3, 1 }, + nullptr, nullptr, nullptr, nullptr, + defaultPbrProg, true, RenderQueue::OPAQUE, GL_NONE }, + 0, logoViewPassId); + logoViewTransform = logoView.assign(); + logoViewTransform->position = { 0.0, 0.0, -5.0 };; + logoViewTransform->scale = { 0.75, 0.75, 0.75 }; + + logoView.assign(glm::vec4(1, 1, 1, 0.2), glm::vec3(1, 0, 0), + false, LightType::POINT, logoViewPassId); + } + loadingText.component()->visible = false; loadingText.destroy(); } @@ -521,6 +553,7 @@ void AtmosphereTestScene::loadMainSceneResources() { { planetViewGeom = Geometry{ VertexArrayObjectCreator("planet_wireframe.obj").create() }; + logoViewGeom = Geometry{ VertexArrayObjectCreator("title_text.obj").create() }; } resourceLoadingFinished = true;