Files
o3de/Code/Tools/SceneAPI/SceneData/Groups/MeshGroup.h
T
Chris Burel ef1f95f1d0 [MeshOptimizer] Determine the original vertex index based on the position (#1562)
* Determine the original vertex index based on the position

The Assimp library does not expose the FBX control point indices. This
change causes vertices that are close enough in their position to be
considered as coming from the same control point. This allows the mesh
optimizer to consider vertices with the same control point index (or
"original vertex index" as it is called in the code) for deduplication.

Signed-off-by: Chris Burel <burelc@amazon.com>

* Use a filter view instead of reimplementing a filter view

Signed-off-by: Chris Burel <burelc@amazon.com>

* Don't attempt to weld similar vertices if there's blendshapes

Signed-off-by: Chris Burel <burelc@amazon.com>

* Add test for the mesh optimizer's ability to weld nearby vertices

Signed-off-by: Chris Burel <burelc@amazon.com>

* Add logging call to show mesh optimizer effect on vertex count

Signed-off-by: Chris Burel <burelc@amazon.com>

* Use a bunch of temporaries in order to make `position` `const`

Signed-off-by: Chris Burel <burelc@amazon.com>
2021-07-07 11:21:09 +02:00

65 lines
2.3 KiB
C++

/*
* Copyright (c) Contributors to the Open 3D Engine Project. For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#pragma once
#include <AzCore/Memory/Memory.h>
#include <AzCore/Memory/SystemAllocator.h>
#include <AzCore/std/containers/vector.h>
#include <AzCore/std/smart_ptr/shared_ptr.h>
#include <SceneAPI/SceneCore/Containers/RuleContainer.h>
#include <SceneAPI/SceneCore/DataTypes/Groups/IMeshGroup.h>
#include <SceneAPI/SceneData/ManifestBase/SceneNodeSelectionList.h>
namespace AZ
{
class ReflectContext;
namespace SceneAPI
{
namespace Containers
{
class Scene;
}
namespace SceneData
{
class SCENE_DATA_CLASS MeshGroup
: public DataTypes::IMeshGroup
{
public:
AZ_RTTI(MeshGroup, "{07B356B7-3635-40B5-878A-FAC4EFD5AD86}", DataTypes::IMeshGroup);
AZ_CLASS_ALLOCATOR(MeshGroup, SystemAllocator, 0)
SCENE_DATA_API MeshGroup();
SCENE_DATA_API ~MeshGroup() override = default;
SCENE_DATA_API const AZStd::string& GetName() const override;
SCENE_DATA_API void SetName(const AZStd::string& name);
SCENE_DATA_API void SetName(AZStd::string&& name) override;
SCENE_DATA_API const Uuid& GetId() const override;
SCENE_DATA_API void OverrideId(const Uuid& id) override;
SCENE_DATA_API Containers::RuleContainer& GetRuleContainer() override;
SCENE_DATA_API const Containers::RuleContainer& GetRuleContainerConst() const override;
SCENE_DATA_API DataTypes::ISceneNodeSelectionList& GetSceneNodeSelectionList() override;
SCENE_DATA_API const DataTypes::ISceneNodeSelectionList& GetSceneNodeSelectionList() const override;
static void Reflect(AZ::ReflectContext* context);
static bool VersionConverter(SerializeContext& context, SerializeContext::DataElementNode& classElement);
protected:
SceneNodeSelectionList m_nodeSelectionList;
Containers::RuleContainer m_rules;
AZStd::string m_name;
Uuid m_id;
};
} // SceneData
} // SceneAPI
} // AZ