diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 6b41d921de..89bd19cb48 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -4874,12 +4874,6 @@ QRect Application::getDesirableApplicationGeometry() const { return applicationGeometry; } -glm::vec3 Application::getSunDirection() const { - // Sun direction is in fact just the location of the sun relative to the origin - auto skyStage = DependencyManager::get()->getSkyStage(); - return skyStage->getSunLight()->getDirection(); -} - // FIXME, preprocessor guard this check to occur only in DEBUG builds static QThread * activeRenderingThread = nullptr; @@ -4946,90 +4940,6 @@ namespace render { } } -// Background Render Data & rendering functions -class BackgroundRenderData { -public: - typedef render::Payload Payload; - typedef Payload::DataPointer Pointer; - - static render::ItemID _item; // unique WorldBoxRenderData -}; - -render::ItemID BackgroundRenderData::_item = 0; - -namespace render { - template <> const ItemKey payloadGetKey(const BackgroundRenderData::Pointer& stuff) { - return ItemKey::Builder::background(); - } - - template <> const Item::Bound payloadGetBound(const BackgroundRenderData::Pointer& stuff) { - return Item::Bound(); - } - - template <> void payloadRender(const BackgroundRenderData::Pointer& background, RenderArgs* args) { - Q_ASSERT(args->_batch); - gpu::Batch& batch = *args->_batch; - - // Background rendering decision - auto skyStage = DependencyManager::get()->getSkyStage(); - auto backgroundMode = skyStage->getBackgroundMode(); - - switch (backgroundMode) { - case model::SunSkyStage::SKY_DEFAULT: { - auto scene = DependencyManager::get()->getStage(); - auto sceneKeyLight = scene->getKeyLight(); - - scene->setSunModelEnable(false); - sceneKeyLight->setColor(ColorUtils::toVec3(KeyLightPropertyGroup::DEFAULT_KEYLIGHT_COLOR)); - sceneKeyLight->setIntensity(KeyLightPropertyGroup::DEFAULT_KEYLIGHT_INTENSITY); - sceneKeyLight->setAmbientIntensity(KeyLightPropertyGroup::DEFAULT_KEYLIGHT_AMBIENT_INTENSITY); - sceneKeyLight->setDirection(KeyLightPropertyGroup::DEFAULT_KEYLIGHT_DIRECTION); - // fall through: render a skybox (if available), or the defaults (if requested) - } - - case model::SunSkyStage::SKY_BOX: { - auto skybox = skyStage->getSkybox(); - if (!skybox->empty()) { - PerformanceTimer perfTimer("skybox"); - skybox->render(batch, args->getViewFrustum()); - break; - } - // fall through: render defaults (if requested) - } - - case model::SunSkyStage::SKY_DEFAULT_AMBIENT_TEXTURE: { - if (Menu::getInstance()->isOptionChecked(MenuOption::DefaultSkybox)) { - auto scene = DependencyManager::get()->getStage(); - auto sceneKeyLight = scene->getKeyLight(); - auto defaultSkyboxAmbientTexture = qApp->getDefaultSkyboxAmbientTexture(); - if (defaultSkyboxAmbientTexture) { - sceneKeyLight->setAmbientSphere(defaultSkyboxAmbientTexture->getIrradiance()); - sceneKeyLight->setAmbientMap(defaultSkyboxAmbientTexture); - } else { - static QString repeatedMessage = LogHandler::getInstance().addRepeatedMessageRegex( - "Failed to get a valid Default Skybox Ambient Texture ? probably because it couldn't be find during initialization step"); - } - // fall through: render defaults skybox - } else { - break; - } - } - - case model::SunSkyStage::SKY_DEFAULT_TEXTURE: - if (Menu::getInstance()->isOptionChecked(MenuOption::DefaultSkybox)) { - qApp->getDefaultSkybox()->render(batch, args->getViewFrustum()); - } - break; - - // Any other cases require no extra rendering - case model::SunSkyStage::NO_BACKGROUND: - default: - break; - } - } -} - - void Application::displaySide(RenderArgs* renderArgs, Camera& theCamera, bool selfAvatarOnly) { // FIXME: This preDisplayRender call is temporary until we create a separate render::scene for the mirror rendering. @@ -5053,15 +4963,6 @@ void Application::displaySide(RenderArgs* renderArgs, Camera& theCamera, bool se // The pending changes collecting the changes here render::Transaction transaction; - // FIXME: Move this out of here!, Background / skybox should be driven by the enityt content just like the other entities - // Background rendering decision - if (!render::Item::isValidID(BackgroundRenderData::_item)) { - auto backgroundRenderData = make_shared(); - auto backgroundRenderPayload = make_shared(backgroundRenderData); - BackgroundRenderData::_item = _main3DScene->allocateID(); - transaction.resetItem(BackgroundRenderData::_item, backgroundRenderPayload); - } - // Assuming nothing gets rendered through that if (!selfAvatarOnly) { if (DependencyManager::get()->shouldRenderEntities()) { diff --git a/interface/src/Application.h b/interface/src/Application.h index e8507c39e8..9cf03f1cef 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -460,8 +460,6 @@ private: void queryOctree(NodeType_t serverType, PacketType packetType, NodeToJurisdictionMap& jurisdictions, bool forceResend = false); - glm::vec3 getSunDirection() const; - void renderRearViewMirror(RenderArgs* renderArgs, const QRect& region, bool isZoomed); int sendNackPackets(); diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index 94e0db60f9..be8f1db31a 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -23,7 +23,6 @@ #include #include #include -#include #include "EntityTreeRenderer.h" @@ -141,7 +140,6 @@ void EntityTreeRenderer::clear() { // reset the zone to the default (while we load the next scene) _layeredZones.clear(); - // applyZoneAndHasSkybox(nullptr); OctreeRenderer::clear(); } @@ -196,14 +194,6 @@ void EntityTreeRenderer::update() { // Handle enter/leave entity logic bool updated = checkEnterLeaveEntities(); - // If we haven't already updated and previously attempted to load a texture, - // check if the texture loaded and apply it - /* if (!updated && - ((_pendingAmbientTexture && (!_ambientTexture || _ambientTexture->isLoaded())) || - (_pendingSkyboxTexture && (!_skyboxTexture || _skyboxTexture->isLoaded())))) { - applySkyboxAndHasAmbient(); - }*/ - // Even if we're not moving the mouse, if we started clicking on an entity and we have // not yet released the hold then this is still considered a holdingClickOnEntity event // and we want to simulate this message here as well as in mouse move @@ -371,176 +361,6 @@ bool EntityTreeRenderer::applyLayeredZones() { return true; } -/* -bool EntityTreeRenderer::applyZoneAndHasSkybox(const std::shared_ptr& zone) { - auto textureCache = DependencyManager::get(); - auto scene = DependencyManager::get(); - auto sceneStage = scene->getStage(); - auto skyStage = scene->getSkyStage(); - auto sceneKeyLight = sceneStage->getKeyLight(); - - // If there is no zone, use the default background - if (!zone) { - _zoneUserData = QString(); - skyStage->getSkybox()->clear(); - - _pendingSkyboxTexture = false; - _skyboxTexture.clear(); - - _pendingAmbientTexture = false; - _ambientTexture.clear(); - - sceneKeyLight->resetAmbientSphere(); - sceneKeyLight->setAmbientMap(nullptr); - - skyStage->setBackgroundMode(model::SunSkyStage::SKY_DEFAULT); - return false; - } - - // Set the keylight - sceneKeyLight->setColor(ColorUtils::toVec3(zone->getKeyLightProperties().getColor())); - sceneKeyLight->setIntensity(zone->getKeyLightProperties().getIntensity()); - sceneKeyLight->setAmbientIntensity(zone->getKeyLightProperties().getAmbientIntensity()); - sceneKeyLight->setDirection(zone->getKeyLightProperties().getDirection()); - - // Set the stage - bool isSunModelEnabled = zone->getStageProperties().getSunModelEnabled(); - sceneStage->setSunModelEnable(isSunModelEnabled); - if (isSunModelEnabled) { - sceneStage->setLocation(zone->getStageProperties().getLongitude(), - zone->getStageProperties().getLatitude(), - zone->getStageProperties().getAltitude()); - - auto sceneTime = sceneStage->getTime(); - sceneTime->setHour(zone->getStageProperties().calculateHour()); - sceneTime->setDay(zone->getStageProperties().calculateDay()); - } - - // Set the ambient texture - _ambientTextureURL = zone->getKeyLightProperties().getAmbientURL(); - if (_ambientTextureURL.isEmpty()) { - _pendingAmbientTexture = false; - _ambientTexture.clear(); - } else { - _pendingAmbientTexture = true; - } - - // Set the skybox texture - return layerZoneAndHasSkybox(zone); -}*/ -/* -bool EntityTreeRenderer::layerZoneAndHasSkybox(const std::shared_ptr& zone) { - assert(zone); - - auto textureCache = DependencyManager::get(); - auto scene = DependencyManager::get(); - auto skyStage = scene->getSkyStage(); - auto skybox = skyStage->getSkybox(); - - bool hasSkybox = false; - - switch (zone->getBackgroundMode()) { - case BACKGROUND_MODE_SKYBOX: - hasSkybox = true; - - skybox->setColor(zone->getSkyboxProperties().getColorVec3()); - - if (_zoneUserData != zone->getUserData()) { - _zoneUserData = zone->getUserData(); - std::dynamic_pointer_cast(skybox)->parse(_zoneUserData); - } - - _skyboxTextureURL = zone->getSkyboxProperties().getURL(); - if (_skyboxTextureURL.isEmpty()) { - _pendingSkyboxTexture = false; - _skyboxTexture.clear(); - } else { - _pendingSkyboxTexture = true; - } - - applySkyboxAndHasAmbient(); - skyStage->setBackgroundMode(model::SunSkyStage::SKY_BOX); - - break; - - case BACKGROUND_MODE_INHERIT: - default: - // Clear the skybox to release its textures - skybox->clear(); - _zoneUserData = QString(); - - _pendingSkyboxTexture = false; - _skyboxTexture.clear(); - - // Let the application background through - if (applySkyboxAndHasAmbient()) { - skyStage->setBackgroundMode(model::SunSkyStage::SKY_DEFAULT_TEXTURE); - } else { - skyStage->setBackgroundMode(model::SunSkyStage::SKY_DEFAULT_AMBIENT_TEXTURE); - } - - break; - } - - return hasSkybox; -}*/ -/* -bool EntityTreeRenderer::applySkyboxAndHasAmbient() { - auto textureCache = DependencyManager::get(); - auto scene = DependencyManager::get(); - auto sceneStage = scene->getStage(); - auto skyStage = scene->getSkyStage(); - auto sceneKeyLight = sceneStage->getKeyLight(); - auto skybox = skyStage->getSkybox(); - - bool isAmbientSet = false; - if (_pendingAmbientTexture && !_ambientTexture) { - _ambientTexture = textureCache->getTexture(_ambientTextureURL, image::TextureUsage::CUBE_TEXTURE); - } - if (_ambientTexture && _ambientTexture->isLoaded()) { - _pendingAmbientTexture = false; - - auto texture = _ambientTexture->getGPUTexture(); - if (texture) { - isAmbientSet = true; - sceneKeyLight->setAmbientSphere(texture->getIrradiance()); - sceneKeyLight->setAmbientMap(texture); - } else { - qCDebug(entitiesrenderer) << "Failed to load ambient texture:" << _ambientTexture->getURL(); - } - } - - if (_pendingSkyboxTexture && - (!_skyboxTexture || (_skyboxTexture->getURL() != _skyboxTextureURL))) { - _skyboxTexture = textureCache->getTexture(_skyboxTextureURL, image::TextureUsage::CUBE_TEXTURE); - } - if (_skyboxTexture && _skyboxTexture->isLoaded()) { - _pendingSkyboxTexture = false; - - auto texture = _skyboxTexture->getGPUTexture(); - if (texture) { - skybox->setCubemap(texture); - if (!isAmbientSet) { - sceneKeyLight->setAmbientSphere(texture->getIrradiance()); - sceneKeyLight->setAmbientMap(texture); - isAmbientSet = true; - } - } else { - qCDebug(entitiesrenderer) << "Failed to load skybox texture:" << _skyboxTexture->getURL(); - skybox->setCubemap(nullptr); - } - } else { - skybox->setCubemap(nullptr); - } - - if (!isAmbientSet) { - sceneKeyLight->resetAmbientSphere(); - sceneKeyLight->setAmbientMap(nullptr); - } - - return isAmbientSet; -}*/ - const FBXGeometry* EntityTreeRenderer::getGeometryForEntity(EntityItemPointer entityItem) { const FBXGeometry* result = NULL; @@ -1168,8 +988,6 @@ std::pair EntityTreeRenderer:: void EntityTreeRenderer::LayeredZones::apply() { assert(_entityTreeRenderer); - - // applyPartial(begin()); } void EntityTreeRenderer::LayeredZones::update(std::shared_ptr zone) { @@ -1184,12 +1002,6 @@ void EntityTreeRenderer::LayeredZones::update(std::shared_ptr zo } else { LayeredZone zoneLayer(zone); - // should we update? only if this zone is tighter than the current skybox zone - bool shouldUpdate = false; - if (_skyboxLayer == end() || zoneLayer <= *_skyboxLayer) { - shouldUpdate = true; - } - // find this zone's layer, if it exists iterator layer = end(); auto it = _map.find(zoneLayer.id); @@ -1209,41 +1021,9 @@ void EntityTreeRenderer::LayeredZones::update(std::shared_ptr zo std::tie(layer, std::ignore) = insert(zoneLayer); _map.emplace(layer->id, layer); } - - if (shouldUpdate) { - // applyPartial(layer); - } } } -/* -void EntityTreeRenderer::LayeredZones::applyPartial(iterator layer) { - bool hasSkybox = false; - _skyboxLayer = end(); - if (layer == end()) { - if (empty()) { - _entityTreeRenderer->applyZoneAndHasSkybox(nullptr); - return; - } else { // a layer was removed - reapply from beginning - layer = begin(); - } - } - - if (layer == begin()) { - hasSkybox = _entityTreeRenderer->applyZoneAndHasSkybox(layer->zone); - } else { - hasSkybox = _entityTreeRenderer->layerZoneAndHasSkybox(layer->zone); - } - - if (layer != end()) { - while (!hasSkybox && ++layer != end()) { - hasSkybox = _entityTreeRenderer->layerZoneAndHasSkybox(layer->zone); - } - } - - _skyboxLayer = layer; -} -*/ bool EntityTreeRenderer::LayeredZones::contains(const LayeredZones& other) { bool result = std::equal(other.begin(), other._skyboxLayer, begin()); if (result) { diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.h b/libraries/entities-renderer/src/EntityTreeRenderer.h index 92235b1a00..bf4148212b 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.h +++ b/libraries/entities-renderer/src/EntityTreeRenderer.h @@ -147,9 +147,6 @@ private: void addEntityToScene(EntityItemPointer entity); bool findBestZoneAndMaybeContainingEntities(QVector* entitiesContainingAvatar = nullptr); - // bool applyZoneAndHasSkybox(const std::shared_ptr& zone); - // bool layerZoneAndHasSkybox(const std::shared_ptr& zone); - // bool applySkyboxAndHasAmbient(); bool applyLayeredZones(); void checkAndCallPreload(const EntityItemID& entityID, bool reload = false, bool unloadFirst = false); @@ -223,7 +220,7 @@ private: std::shared_ptr getZone() { return empty() ? nullptr : begin()->zone; } private: - // void applyPartial(iterator layer); + void applyPartial(iterator layer); std::map _map; iterator _skyboxLayer{ end() }; diff --git a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp index 7825a50f25..c4960f0cfa 100644 --- a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp @@ -245,28 +245,6 @@ void RenderableZoneEntityItem::render(RenderArgs* args) { _model->removeFromScene(scene, transaction); scene->enqueueTransaction(transaction); } - - /* - { - // Set the keylight - sceneKeyLight->setColor(ColorUtils::toVec3(this->getKeyLightProperties().getColor())); - sceneKeyLight->setIntensity(this->getKeyLightProperties().getIntensity()); - sceneKeyLight->setAmbientIntensity(this->getKeyLightProperties().getAmbientIntensity()); - sceneKeyLight->setDirection(this->getKeyLightProperties().getDirection()); - - // Set the stage - bool isSunModelEnabled = this->getStageProperties().getSunModelEnabled(); - sceneStage->setSunModelEnable(isSunModelEnabled); - if (isSunModelEnabled) { - sceneStage->setLocation(this->getStageProperties().getLongitude(), - this->getStageProperties().getLatitude(), - this->getStageProperties().getAltitude()); - - auto sceneTime = sceneStage->getTime(); - sceneTime->setHour(this->getStageProperties().calculateHour()); - sceneTime->setDay(this->getStageProperties().calculateDay()); - } - }*/ } bool RenderableZoneEntityItem::contains(const glm::vec3& point) const { @@ -289,6 +267,9 @@ bool RenderableZoneEntityItem::addToScene(EntityItemPointer self, const render:: auto renderData = std::make_shared(self); auto renderPayload = std::make_shared(renderData); updateKeyZoneItemFromEntity((*renderData)); + updateKeySunFromEntity((*renderData)); + updateKeyAmbientFromEntity((*renderData)); + updateKeyBackgroundFromEntity((*renderData)); render::Item::Status::Getters statusGetters; makeEntityItemStatusGetters(getThisPointer(), statusGetters); @@ -373,6 +354,22 @@ void RenderableZoneEntityItem::updateKeyZoneItemFromEntity(RenderableZoneEntityI if (!success) { keyZonePayload.editBound() = render::Item::Bound(); } + + /* TODO: Implement the sun model behavior / Keep this code here for reference, this is how we + { + // Set the stage + bool isSunModelEnabled = this->getStageProperties().getSunModelEnabled(); + sceneStage->setSunModelEnable(isSunModelEnabled); + if (isSunModelEnabled) { + sceneStage->setLocation(this->getStageProperties().getLongitude(), + this->getStageProperties().getLatitude(), + this->getStageProperties().getAltitude()); + + auto sceneTime = sceneStage->getTime(); + sceneTime->setHour(this->getStageProperties().calculateHour()); + sceneTime->setDay(this->getStageProperties().calculateDay()); + } + }*/ } diff --git a/scripts/developer/utilities/render/deferredLighting.qml b/scripts/developer/utilities/render/deferredLighting.qml index 730aa547e7..ff4621a87a 100644 --- a/scripts/developer/utilities/render/deferredLighting.qml +++ b/scripts/developer/utilities/render/deferredLighting.qml @@ -64,6 +64,7 @@ Column { "Point:LightingModel:enablePointLight", "Spot:LightingModel:enableSpotLight", "Light Contour:LightingModel:showLightContour", + "Zone Stack:DrawZoneStack:enabled", "Shadow:RenderShadowTask:enabled" ] CheckBox {