From 440c77905a8aeff4269caabdcf87a9e65da528be Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Thu, 7 Jun 2018 11:48:15 -0700 Subject: [PATCH] Remove functionality for rendering collision meshes directly in the Model class --- .../src/RenderableModelEntityItem.cpp | 11 +- .../render-utils/src/CauterizedModel.cpp | 11 -- libraries/render-utils/src/CauterizedModel.h | 3 +- libraries/render-utils/src/Model.cpp | 178 +++--------------- libraries/render-utils/src/Model.h | 9 - 5 files changed, 34 insertions(+), 178 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index a91534668c..e0039082fa 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -1416,19 +1416,18 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce setCollisionMeshKey(entity->getCollisionMeshKey()); _needsCollisionGeometryUpdate = false; ShapeType type = entity->getShapeType(); - if (DependencyManager::get()->shouldRenderDebugHulls() && type != SHAPE_TYPE_STATIC_MESH && type != SHAPE_TYPE_NONE) { + if (DependencyManager::get()->shouldRenderDebugHulls() && type != SHAPE_TYPE_NONE) { // NOTE: it is OK if _collisionMeshKey is nullptr graphics::MeshPointer mesh = collisionMeshCache.getMesh(_collisionMeshKey); - // NOTE: the model will render the collisionGeometry if it has one - _model->setCollisionMesh(mesh); + // TODO: Start displaying collision model + } else { if (_collisionMeshKey) { // release mesh collisionMeshCache.releaseMesh(_collisionMeshKey); } - // clear model's collision geometry - graphics::MeshPointer mesh = nullptr; - _model->setCollisionMesh(mesh); + // TODO: Stop displaying collision model + } } diff --git a/libraries/render-utils/src/CauterizedModel.cpp b/libraries/render-utils/src/CauterizedModel.cpp index b03cc071d3..53dcc74d35 100644 --- a/libraries/render-utils/src/CauterizedModel.cpp +++ b/libraries/render-utils/src/CauterizedModel.cpp @@ -98,11 +98,6 @@ void CauterizedModel::createVisibleRenderItemSet() { } } -void CauterizedModel::createCollisionRenderItemSet() { - // Temporary HACK: use base class method for now - Model::createCollisionRenderItemSet(); -} - void CauterizedModel::updateClusterMatrices() { PerformanceTimer perfTimer("CauterizedModel::updateClusterMatrices"); @@ -186,12 +181,6 @@ void CauterizedModel::updateRenderItems() { if (!_addedToScene) { return; } - - glm::vec3 scale = getScale(); - if (_collisionGeometry) { - // _collisionGeometry is already scaled - scale = glm::vec3(1.0f); - } _needsUpdateClusterMatrices = true; _renderItemsNeedUpdate = false; diff --git a/libraries/render-utils/src/CauterizedModel.h b/libraries/render-utils/src/CauterizedModel.h index d16c928ba6..5abefb474f 100644 --- a/libraries/render-utils/src/CauterizedModel.h +++ b/libraries/render-utils/src/CauterizedModel.h @@ -32,8 +32,7 @@ public: bool updateGeometry() override; void createVisibleRenderItemSet() override; - void createCollisionRenderItemSet() override; - + virtual void updateClusterMatrices() override; void updateRenderItems() override; diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 7cfb1f6bc8..ca0bde9d6a 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -48,50 +48,10 @@ float Model::FAKE_DIMENSION_PLACEHOLDER = -1.0f; #define HTTP_INVALID_COM "http://invalid.com" const int NUM_COLLISION_HULL_COLORS = 24; -std::vector _collisionMaterials; - -void initCollisionMaterials() { - // generates bright colors in red, green, blue, yellow, magenta, and cyan spectrums - // (no browns, greys, or dark shades) - float component[NUM_COLLISION_HULL_COLORS] = { - 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, - 0.2f, 0.4f, 0.6f, 0.8f, - 1.0f, 1.0f, 1.0f, 1.0f, - 1.0f, 1.0f, 1.0f, 1.0f, - 0.8f, 0.6f, 0.4f, 0.2f - }; - _collisionMaterials.reserve(NUM_COLLISION_HULL_COLORS); - - // each component gets the same cuve - // but offset by a multiple of one third the full width - int numComponents = 3; - int sectionWidth = NUM_COLLISION_HULL_COLORS / numComponents; - int greenPhase = sectionWidth; - int bluePhase = 2 * sectionWidth; - - // we stride through the colors to scatter adjacent shades - // so they don't tend to group together for large models - for (int i = 0; i < sectionWidth; ++i) { - for (int j = 0; j < numComponents; ++j) { - graphics::MaterialPointer material; - material = std::make_shared(); - int index = j * sectionWidth + i; - float red = component[index % NUM_COLLISION_HULL_COLORS]; - float green = component[(index + greenPhase) % NUM_COLLISION_HULL_COLORS]; - float blue = component[(index + bluePhase) % NUM_COLLISION_HULL_COLORS]; - material->setAlbedo(glm::vec3(red, green, blue)); - material->setMetallic(0.02f); - material->setRoughness(0.5f); - _collisionMaterials.push_back(material); - } - } -} Model::Model(QObject* parent, SpatiallyNestable* spatiallyNestableOverride) : QObject(parent), _renderGeometry(), - _collisionGeometry(), _renderWatcher(_renderGeometry), _spatiallyNestableOverride(spatiallyNestableOverride), _translation(0.0f), @@ -310,16 +270,6 @@ void Model::updateRenderItems() { }); } - Transform collisionMeshOffset; - collisionMeshOffset.setIdentity(); - foreach(auto itemID, self->_collisionRenderItemsMap.keys()) { - transaction.updateItem(itemID, [renderItemKeyGlobalFlags, modelTransform, collisionMeshOffset](MeshPartPayload& data) { - // update the model transform for this render item. - data.updateKey(renderItemKeyGlobalFlags); - data.updateTransform(modelTransform, collisionMeshOffset); - }); - } - AbstractViewStateInterface::instance()->getMain3DScene()->enqueueTransaction(transaction); }); } @@ -777,11 +727,14 @@ void Model::updateRenderItemsKey(const render::ScenePointer& scene) { data.updateKey(renderItemsKey); }); } + //TODO: Remove +#ifdef RENDER_MODEL_BOUNDING_BOXES foreach(auto item, _collisionRenderItemsMap.keys()) { transaction.updateItem(item, [renderItemsKey](ModelMeshPartPayload& data) { data.updateKey(renderItemsKey); }); } +#endif scene->enqueueTransaction(transaction); } @@ -862,49 +815,37 @@ const render::ItemKey Model::getRenderItemKeyGlobalFlags() const { bool Model::addToScene(const render::ScenePointer& scene, render::Transaction& transaction, render::Item::Status::Getters& statusGetters) { - bool readyToRender = _collisionGeometry || isLoaded(); - if (!_addedToScene && readyToRender) { - createRenderItemSet(); + if (!_addedToScene && isLoaded()) { + updateClusterMatrices(); + if (_modelMeshRenderItems.empty()) { + createVisibleRenderItemSet(); + } } bool somethingAdded = false; - if (_collisionGeometry) { - if (_collisionRenderItemsMap.empty()) { - foreach (auto renderItem, _collisionRenderItems) { - auto item = scene->allocateID(); - auto renderPayload = std::make_shared(renderItem); - if (_collisionRenderItems.empty() && statusGetters.size()) { - renderPayload->addStatusGetters(statusGetters); - } - transaction.resetItem(item, renderPayload); - _collisionRenderItemsMap.insert(item, renderPayload); + + if (_modelMeshRenderItemsMap.empty()) { + + bool hasTransparent = false; + size_t verticesCount = 0; + foreach(auto renderItem, _modelMeshRenderItems) { + auto item = scene->allocateID(); + auto renderPayload = std::make_shared(renderItem); + if (_modelMeshRenderItemsMap.empty() && statusGetters.size()) { + renderPayload->addStatusGetters(statusGetters); } - somethingAdded = !_collisionRenderItemsMap.empty(); + transaction.resetItem(item, renderPayload); + + hasTransparent = hasTransparent || renderItem.get()->getShapeKey().isTranslucent(); + verticesCount += renderItem.get()->getVerticesCount(); + _modelMeshRenderItemsMap.insert(item, renderPayload); + _modelMeshRenderItemIDs.emplace_back(item); } - } else { - if (_modelMeshRenderItemsMap.empty()) { + somethingAdded = !_modelMeshRenderItemsMap.empty(); - bool hasTransparent = false; - size_t verticesCount = 0; - foreach(auto renderItem, _modelMeshRenderItems) { - auto item = scene->allocateID(); - auto renderPayload = std::make_shared(renderItem); - if (_modelMeshRenderItemsMap.empty() && statusGetters.size()) { - renderPayload->addStatusGetters(statusGetters); - } - transaction.resetItem(item, renderPayload); - - hasTransparent = hasTransparent || renderItem.get()->getShapeKey().isTranslucent(); - verticesCount += renderItem.get()->getVerticesCount(); - _modelMeshRenderItemsMap.insert(item, renderPayload); - _modelMeshRenderItemIDs.emplace_back(item); - } - somethingAdded = !_modelMeshRenderItemsMap.empty(); - - _renderInfoVertexCount = verticesCount; - _renderInfoDrawCalls = _modelMeshRenderItemsMap.count(); - _renderInfoHasTransparent = hasTransparent; - } + _renderInfoVertexCount = verticesCount; + _renderInfoDrawCalls = _modelMeshRenderItemsMap.count(); + _renderInfoHasTransparent = hasTransparent; } if (somethingAdded) { @@ -926,11 +867,6 @@ void Model::removeFromScene(const render::ScenePointer& scene, render::Transacti _modelMeshMaterialNames.clear(); _modelMeshRenderItemShapes.clear(); - foreach(auto item, _collisionRenderItemsMap.keys()) { - transaction.removeItem(item); - } - _collisionRenderItems.clear(); - _collisionRenderItemsMap.clear(); _addedToScene = false; _renderInfoVertexCount = 0; @@ -1505,7 +1441,6 @@ void Model::deleteGeometry() { _rig.destroyAnimGraph(); _blendedBlendshapeCoefficients.clear(); _renderGeometry.reset(); - _collisionGeometry.reset(); } void Model::overrideModelTransformAndOffset(const Transform& transform, const glm::vec3& offset) { @@ -1533,19 +1468,6 @@ const render::ItemIDs& Model::fetchRenderItemIDs() const { return _modelMeshRenderItemIDs; } -void Model::createRenderItemSet() { - updateClusterMatrices(); - if (_collisionGeometry) { - if (_collisionRenderItems.empty()) { - createCollisionRenderItemSet(); - } - } else { - if (_modelMeshRenderItems.empty()) { - createVisibleRenderItemSet(); - } - } -}; - void Model::createVisibleRenderItemSet() { assert(isLoaded()); const auto& meshes = _renderGeometry->getMeshes(); @@ -1592,41 +1514,6 @@ void Model::createVisibleRenderItemSet() { } } -void Model::createCollisionRenderItemSet() { - assert((bool)_collisionGeometry); - if (_collisionMaterials.empty()) { - initCollisionMaterials(); - } - - const auto& meshes = _collisionGeometry->getMeshes(); - - // We should not have any existing renderItems if we enter this section of code - Q_ASSERT(_collisionRenderItems.isEmpty()); - - Transform identity; - identity.setIdentity(); - Transform offset; - offset.postTranslate(_offset); - - // Run through all of the meshes, and place them into their segregated, but unsorted buckets - uint32_t numMeshes = (uint32_t)meshes.size(); - for (uint32_t i = 0; i < numMeshes; i++) { - const auto& mesh = meshes.at(i); - if (!mesh) { - continue; - } - - // Create the render payloads - int numParts = (int)mesh->getNumParts(); - for (int partIndex = 0; partIndex < numParts; partIndex++) { - graphics::MaterialPointer& material = _collisionMaterials[partIndex % NUM_COLLISION_HULL_COLORS]; - auto payload = std::make_shared(mesh, partIndex, material); - payload->updateTransform(identity, offset); - _collisionRenderItems << payload; - } - } -} - bool Model::isRenderable() const { return !_meshStates.empty() || (isLoaded() && _renderGeometry->getMeshes().empty()); } @@ -1710,15 +1597,6 @@ public: } }; -void Model::setCollisionMesh(graphics::MeshPointer mesh) { - if (mesh) { - _collisionGeometry = std::make_shared(mesh); - } else { - _collisionGeometry.reset(); - } - _needsFixupInScene = true; -} - ModelBlender::ModelBlender() : _pendingBlenders(0) { } diff --git a/libraries/render-utils/src/Model.h b/libraries/render-utils/src/Model.h index 4180288106..d15ea6f33b 100644 --- a/libraries/render-utils/src/Model.h +++ b/libraries/render-utils/src/Model.h @@ -153,8 +153,6 @@ public: /// Returns a reference to the shared geometry. const Geometry::Pointer& getGeometry() const { return _renderGeometry; } - /// Returns a reference to the shared collision geometry. - const Geometry::Pointer& getCollisionGeometry() const { return _collisionGeometry; } const QVariantMap getTextures() const { assert(isLoaded()); return _renderGeometry->getTextures(); } Q_INVOKABLE virtual void setTextures(const QVariantMap& textures); @@ -260,7 +258,6 @@ public: // returns 'true' if needs fullUpdate after geometry change virtual bool updateGeometry(); - void setCollisionMesh(graphics::MeshPointer mesh); void setLoadingPriority(float priority) { _loadingPriority = priority; } @@ -362,7 +359,6 @@ protected: bool getJointPosition(int jointIndex, glm::vec3& position) const; Geometry::Pointer _renderGeometry; // only ever set by its watcher - Geometry::Pointer _collisionGeometry; GeometryResourceWatcher _renderWatcher; @@ -430,9 +426,7 @@ protected: QVector _modelSpaceMeshTriangleSets; // model space triangles for all sub meshes - void createRenderItemSet(); virtual void createVisibleRenderItemSet(); - virtual void createCollisionRenderItemSet(); bool _isWireframe; bool _useDualQuaternionSkinning { false }; @@ -443,9 +437,6 @@ protected: static AbstractViewStateInterface* _viewState; - QVector> _collisionRenderItems; - QMap _collisionRenderItemsMap; - QVector> _modelMeshRenderItems; QMap _modelMeshRenderItemsMap; render::ItemIDs _modelMeshRenderItemIDs;