From a371edd07fa94d1c231162cc24062eb3452a95bb Mon Sep 17 00:00:00 2001 From: srikappa Date: Wed, 14 Apr 2021 17:26:14 -0700 Subject: [PATCH 01/67] Initial commit of CreatePrefab work --- .../PrefabEditorEntityOwnershipService.cpp | 25 ++- .../PrefabEditorEntityOwnershipService.h | 2 +- .../Prefab/Instance/Instance.cpp | 2 +- .../Instance/InstanceUpdateExecutor.cpp | 57 ++++- .../Prefab/Instance/InstanceUpdateExecutor.h | 14 ++ .../Prefab/PrefabPublicHandler.cpp | 211 ++++++++++++------ .../Prefab/PrefabPublicHandler.h | 5 +- .../Prefab/PrefabPublicInterface.h | 2 +- .../Prefab/PrefabSystemComponent.cpp | 33 ++- .../UI/Prefab/PrefabIntegrationManager.cpp | 16 +- .../UI/Prefab/PrefabIntegrationManager.h | 4 + 11 files changed, 281 insertions(+), 90 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.cpp index 4b23b46ffd..2424658ecf 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.cpp @@ -279,18 +279,29 @@ namespace AzToolsFramework AZStd::unique_ptr createdPrefabInstance = m_prefabSystemComponent->CreatePrefab(entities, AZStd::move(nestedPrefabInstances), filePath); - if (!instanceToParentUnder) - { - instanceToParentUnder = *m_rootInstance; - } - if (createdPrefabInstance) { + if (!instanceToParentUnder) + { + instanceToParentUnder = *m_rootInstance; + } + Prefab::Instance& addedInstance = instanceToParentUnder->get().AddInstance(AZStd::move(createdPrefabInstance)); - HandleEntitiesAdded({addedInstance.m_containerEntity.get()}); + AZ::Entity* containerEntity = addedInstance.m_containerEntity.get(); + containerEntity->AddComponent(aznew Prefab::EditorPrefabComponent()); + HandleEntitiesAdded({containerEntity}); + HandleEntitiesAdded(entities); + + // Update the template of the instance since we modified the entities of the instance by calling HandleEntitiesAdded. + Prefab::PrefabDom serializedInstance; + if (Prefab::PrefabDomUtils::StoreInstanceInPrefabDom(addedInstance, serializedInstance)) + { + m_prefabSystemComponent->UpdatePrefabTemplate(addedInstance.GetTemplateId(), serializedInstance); + } + return addedInstance; } - HandleEntitiesAdded(entities); + return AZStd::nullopt; } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.h index ad11547506..36a60cc501 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.h @@ -186,7 +186,7 @@ namespace AzToolsFramework PlayInEditorData m_playInEditorData; ////////////////////////////////////////////////////////////////////////// - // PrefabSystemComponentInterface interface implementation + // PrefabEditorEntityOwnershipInterface implementation Prefab::InstanceOptionalReference CreatePrefab( const AZStd::vector& entities, AZStd::vector>&& nestedPrefabInstances, AZ::IO::PathView filePath, Prefab::InstanceOptionalReference instanceToParentUnder) override; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp index 0a5b43482e..bd4c343a3c 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp @@ -283,7 +283,7 @@ namespace AzToolsFramework { if (!m_instanceEntityMapper->RegisterEntityToInstance(entityId, *this)) { - AZ_Assert(false, + AZ_Error("Prefab", false, "Prefab - Failed to register entity with id %s with a Prefab Instance derived from source asset %s " "This entity is likely already registered. Check for a double add.", entityId.ToString().c_str(), diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp index 65de6b713c..7df1602bff 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -117,6 +118,8 @@ namespace AzToolsFramework currentTemplateId); isUpdateSuccessful = false; + m_instancesUpdateQueue.pop(); + continue; } } @@ -139,9 +142,16 @@ namespace AzToolsFramework } m_instancesUpdateQueue.pop(); - } + for (auto entityIdIterator = selectedEntityIds.begin(); entityIdIterator != selectedEntityIds.end(); entityIdIterator++) + { + AZ::Entity* entity = GetEntityById(*entityIdIterator); + if (entity == nullptr) + { + selectedEntityIds.erase(entityIdIterator--); + } + } ToolsApplicationRequestBus::Broadcast(&ToolsApplicationRequests::SetSelectedEntities, selectedEntityIds); // Enable the Outliner @@ -163,5 +173,50 @@ namespace AzToolsFramework return isUpdateSuccessful; } + + Instance* InstanceUpdateExecutor::UniqueInstanceQueue::front() + { + return m_instancesQueue.front(); + } + + void InstanceUpdateExecutor::UniqueInstanceQueue::pop() + { + m_instancesSet.erase(m_instancesQueue.front()); + m_instancesQueue.pop(); + } + + void InstanceUpdateExecutor::UniqueInstanceQueue::emplace(Instance* instance) + { + Instance* ancestorInstance = instance; + + while (ancestorInstance != nullptr) + { + if (m_instancesSet.contains(ancestorInstance)) + { + return; + } + + auto parent = ancestorInstance->GetParentInstance(); + if (parent.has_value()) + { + ancestorInstance = &(parent->get()); + } + else + { + ancestorInstance = nullptr; + } + } + + // TODO - remove child instances too? + // Optimization. + + m_instancesQueue.emplace(instance); + m_instancesSet.emplace(instance); + } + + size_t InstanceUpdateExecutor::UniqueInstanceQueue::size() + { + return m_instancesQueue.size(); + } } } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.h index 04bd189816..a29e19dc8a 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.h @@ -15,6 +15,7 @@ #include #include #include +#include #include #include @@ -45,6 +46,19 @@ namespace AzToolsFramework PrefabSystemComponentInterface* m_prefabSystemComponentInterface = nullptr; TemplateInstanceMapperInterface* m_templateInstanceMapperInterface = nullptr; int m_instanceCountToUpdateInBatch = 0; + + class UniqueInstanceQueue + { + public: + Instance* front(); + void pop(); + void emplace(Instance* instance); + size_t size(); + private: + AZStd::queue m_instancesQueue; + AZStd::unordered_set m_instancesSet; + }; + //UniqueInstanceQueue m_instancesUpdateQueue; AZStd::queue m_instancesUpdateQueue; bool m_updatingTemplateInstancesInQueue { false }; }; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp index 417a524e77..292ee3c7f8 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp @@ -15,15 +15,16 @@ #include #include +#include #include #include #include #include -#include #include #include #include #include +#include #include #include #include @@ -37,12 +38,14 @@ namespace AzToolsFramework void PrefabPublicHandler::RegisterPrefabPublicHandlerInterface() { m_instanceEntityMapperInterface = AZ::Interface::Get(); - AZ_Assert( - m_instanceEntityMapperInterface, "PrefabPublicHandler - Could not retrieve instance of InstanceEntityMapperInterface"); + AZ_Assert(m_instanceEntityMapperInterface, "PrefabPublicHandler - Could not retrieve instance of InstanceEntityMapperInterface"); m_instanceToTemplateInterface = AZ::Interface::Get(); AZ_Assert(m_instanceToTemplateInterface, "PrefabPublicHandler - Could not retrieve instance of InstanceToTemplateInterface"); + m_prefabLoaderInterface = AZ::Interface::Get(); + AZ_Assert(m_prefabLoaderInterface, "Could not get PrefabLoaderInterface on PrefabPublicHandler construction."); + m_prefabSystemComponentInterface = AZ::Interface::Get(); AZ_Assert(m_prefabSystemComponentInterface, "Could not get PrefabSystemComponentInterface on PrefabPublicHandler construction."); @@ -58,7 +61,7 @@ namespace AzToolsFramework m_prefabUndoCache.Destroy(); } - PrefabOperationResult PrefabPublicHandler::CreatePrefab(const AZStd::vector& entityIds, AZStd::string_view filePath) + PrefabOperationResult PrefabPublicHandler::CreatePrefab(const AZStd::vector& entityIds, AZ::IO::PathView filePath) { // Retrieve entityList from entityIds EntityList inputEntityList; @@ -70,17 +73,14 @@ namespace AzToolsFramework EntityList topLevelEntities; AzToolsFramework::ToolsApplicationRequests::Bus::BroadcastResult( - entitiesHaveCommonRoot, - &AzToolsFramework::ToolsApplicationRequests::FindCommonRootInactive, - inputEntityList, - commonRootEntityId, - &topLevelEntities - ); + entitiesHaveCommonRoot, &AzToolsFramework::ToolsApplicationRequests::FindCommonRootInactive, inputEntityList, + commonRootEntityId, &topLevelEntities); // Bail if entities don't share a common root if (!entitiesHaveCommonRoot) { - return AZ::Failure(AZStd::string("Could not create a new prefab out of the entities provided - entities do not share a common root.")); + return AZ::Failure( + AZStd::string("Could not create a new prefab out of the entities provided - entities do not share a common root.")); } AZ::Entity* commonRootEntity = nullptr; @@ -91,58 +91,139 @@ namespace AzToolsFramework // Retrieve the owning instance of the common root entity, which will be our new instance's parent instance. InstanceOptionalReference commonRootEntityOwningInstance = GetOwnerInstanceByEntityId(commonRootEntityId); - AZ_Assert(commonRootEntityOwningInstance.has_value(), "Failed to create prefab : " + AZ_Assert( + commonRootEntityOwningInstance.has_value(), + "Failed to create prefab : " "Couldn't get a valid owning instance for the common root entity of the enities provided"); AZStd::vector entities; AZStd::vector> instances; - // Retrieve all entities affected and identify Instances - if (!RetrieveAndSortPrefabEntitiesAndInstances(inputEntityList, commonRootEntityOwningInstance->get(), entities, instances)) + InstanceOptionalReference instance; + { - return AZ::Failure(AZStd::string("Could not create a new prefab out of the entities provided - entities do not share a common root.")); + // Initialize Undo Batch object + ScopedUndoBatch undoBatch("Create Prefab"); + + TemplateId commonRootOwningTemplateId = commonRootEntityOwningInstance->get().GetTemplateId(); + + PrefabDom commonRootInstanceDomBeforeCreate; + m_instanceToTemplateInterface->GenerateDomForInstance( + commonRootInstanceDomBeforeCreate, commonRootEntityOwningInstance->get()); + + // Retrieve all entities affected and identify Instances + if (!RetrieveAndSortPrefabEntitiesAndInstances(inputEntityList, commonRootEntityOwningInstance->get(), entities, instances)) + { + return AZ::Failure( + AZStd::string("Could not create a new prefab out of the entities provided - entities do not share a common root.")); + } + + auto prefabEditorEntityOwnershipInterface = AZ::Interface::Get(); + if (!prefabEditorEntityOwnershipInterface) + { + return AZ::Failure(AZStd::string("Could not create a new prefab out of the entities provided - internal error " + "(PrefabEditorEntityOwnershipInterface unavailable).")); + } + + // When you move instances from another template, you have to remove the links and propagate changes to target template. + auto linkRemoveUndo = aznew PrefabUndoInstanceLink("Undo Link Remove Node"); + for (auto& nestedInstance : instances) + { + PrefabDom emptyLinkDom; + linkRemoveUndo->Capture( + commonRootOwningTemplateId, nestedInstance->GetTemplateId(), nestedInstance->GetInstanceAlias(), emptyLinkDom, + nestedInstance->GetLinkId()); + linkRemoveUndo->SetParent(undoBatch.GetUndoBatch()); + } + + // Create the Prefab + instance = prefabEditorEntityOwnershipInterface->CreatePrefab( + entities, AZStd::move(instances), filePath, commonRootEntityOwningInstance); + + if (!instance) + { + return AZ::Failure(AZStd::string("Could not create a new prefab out of the entities provided - internal error " + "(A null instance is returned).")); + } + + PrefabDom commonRootInstanceDomAfterCreate; + m_instanceToTemplateInterface->GenerateDomForInstance( + commonRootInstanceDomAfterCreate, commonRootEntityOwningInstance->get()); + + auto commonRootInstanceUndoNode = aznew PrefabUndoInstance("Undo Instance Node"); + commonRootInstanceUndoNode->Capture( + commonRootInstanceDomBeforeCreate, commonRootInstanceDomAfterCreate, commonRootOwningTemplateId); + commonRootInstanceUndoNode->SetParent(undoBatch.GetUndoBatch()); + commonRootInstanceUndoNode->Redo(); + + linkRemoveUndo->Redo(); + + + AZ::EntityId containerEntityId = instance->get().GetContainerEntityId(); + AZ::Entity* containerEntity = GetEntityById(containerEntityId); + + // Apply Transform changes as overrides + { + Prefab::PrefabDom containerEntityDomBefore; + m_instanceToTemplateInterface->GenerateDomForEntity(containerEntityDomBefore, *containerEntity); + + AZ::Vector3 containerEntityTranslation(AZ::Vector3::CreateZero()); + AZ::Quaternion containerEntityRotation(AZ::Quaternion::CreateZero()); + + // Set the transform (translation, rotation) of the container entity + GenerateContainerEntityTransform(topLevelEntities, containerEntityTranslation, containerEntityRotation); + + // Set container entity to be child of common root + AZ::TransformBus::Event(containerEntityId, &AZ::TransformBus::Events::SetParent, commonRootEntityId); + + AZ::TransformBus::Event(containerEntityId, &AZ::TransformBus::Events::SetLocalTranslation, containerEntityTranslation); + AZ::TransformBus::Event(containerEntityId, &AZ::TransformBus::Events::SetLocalRotationQuaternion, containerEntityRotation); + + PrefabDom containerEntityDomAfter; + m_instanceToTemplateInterface->GenerateDomForEntity(containerEntityDomAfter, *containerEntity); + + PrefabDom patch; + m_instanceToTemplateInterface->GeneratePatch(patch, containerEntityDomBefore, containerEntityDomAfter); + + m_instanceToTemplateInterface->AppendEntityAliasToPatchPaths(patch, containerEntityId); + + + auto linkAddUndo = aznew PrefabUndoInstanceLink("Undo Link Add Node"); + linkAddUndo->Capture( + commonRootEntityOwningInstance->get().GetTemplateId(), instance->get().GetTemplateId(), instance->get().GetInstanceAlias(), + patch, InvalidLinkId); + linkAddUndo->SetParent(undoBatch.GetUndoBatch()); + + linkAddUndo->Redo(); + + // Update the cache - this prevents these changes from being stored in the regular undo/redo nodes + m_prefabUndoCache.Store(containerEntityId, AZStd::move(containerEntityDomAfter)); + } + + // Change top level entities to be parented to the container entity + // Mark them as dirty so this change is correctly applied to the template + for (AZ::Entity* topLevelEntity : topLevelEntities) + { + m_prefabUndoCache.UpdateCache(topLevelEntity->GetId()); + undoBatch.MarkEntityDirty(topLevelEntity->GetId()); + AZ::TransformBus::Event(topLevelEntity->GetId(), &AZ::TransformBus::Events::SetParent, containerEntityId); + } + + /* + // Select Container Entity + { + auto selectionUndo = aznew SelectionCommand({containerEntityId}, "Select Prefab Container Entity"); + selectionUndo->SetParent(undoBatch.GetUndoBatch()); + + ToolsApplicationRequestBus::Broadcast(&ToolsApplicationRequestBus::Events::RunRedoSeparately, selectionUndo); + }*/ } - auto prefabEditorEntityOwnershipInterface = AZ::Interface::Get(); - if (!prefabEditorEntityOwnershipInterface) - { - return AZ::Failure(AZStd::string("Could not create a new prefab out of the entities provided - internal error " - "(PrefabEditorEntityOwnershipInterface unavailable).")); - } + // Save Template to file + m_prefabLoaderInterface->SaveTemplate(instance->get().GetTemplateId()); - InstanceOptionalReference instance = prefabEditorEntityOwnershipInterface->CreatePrefab( - entities, AZStd::move(instances), filePath, commonRootEntityOwningInstance); - - if (!instance) - { - return AZ::Failure(AZStd::string("Could not create a new prefab out of the entities provided - internal error " - "(A null instance is returned).")); - } - - AZ::EntityId containerEntityId = instance->get().GetContainerEntityId(); - AZ::Vector3 containerEntityTranslation(AZ::Vector3::CreateZero()); - AZ::Quaternion containerEntityRotation(AZ::Quaternion::CreateZero()); - - // Set the transform (translation, rotation) of the container entity - GenerateContainerEntityTransform(topLevelEntities, containerEntityTranslation, containerEntityRotation); - - AZ::TransformBus::Event(containerEntityId, &AZ::TransformBus::Events::SetLocalTranslation, containerEntityTranslation); - AZ::TransformBus::Event(containerEntityId, &AZ::TransformBus::Events::SetLocalRotationQuaternion, containerEntityRotation); - - // Set container entity to be child of common root - AZ::TransformBus::Event(containerEntityId, &AZ::TransformBus::Events::SetParent, commonRootEntityId); - - // Assign the EditorPrefabComponent to the instance container - EntityCompositionRequests::AddComponentsOutcome outcome; - EntityCompositionRequestBus::BroadcastResult( - outcome, &EntityCompositionRequests::AddComponentsToEntities, EntityIdList{containerEntityId}, - AZ::ComponentTypeList{azrtti_typeid()}); - - // Change top level entities to be parented to the container entity - for (AZ::Entity* topLevelEntity : topLevelEntities) - { - AZ::TransformBus::Event(topLevelEntity->GetId(), &AZ::TransformBus::Events::SetParent, containerEntityId); - } + // This function does not support undo/redo yet, so clear the undo stack to prevent issues. + //AzToolsFramework::ToolsApplicationRequestBus::Broadcast(&AzToolsFramework::ToolsApplicationRequestBus::Events::FlushUndo); return AZ::Success(); } @@ -174,14 +255,7 @@ namespace AzToolsFramework AZStd::string("SavePrefab - Path error. Path could be invalid, or the prefab may not be loaded in this level.")); } - auto prefabLoaderInterface = AZ::Interface::Get(); - if (prefabLoaderInterface == nullptr) - { - return AZ::Failure(AZStd::string( - "Could not save prefab - internal error (PrefabLoaderInterface unavailable).")); - } - - if (!prefabLoaderInterface->SaveTemplate(templateId)) + if (!m_prefabLoaderInterface->SaveTemplate(templateId)) { return AZ::Failure(AZStd::string("Could not save prefab - internal error (Json write operation failure).")); } @@ -260,15 +334,15 @@ namespace AzToolsFramework // Create Undo node on entities if they belong to an instance InstanceOptionalReference instanceOptionalReference = m_instanceEntityMapperInterface->FindOwningInstance(entityId); - if (instanceOptionalReference.has_value()) + if (instanceOptionalReference.has_value() && !IsInstanceContainerEntity(entityId)) { - PrefabDom beforeState; - m_prefabUndoCache.Retrieve(entityId, beforeState); - PrefabDom afterState; AZ::Entity* entity = GetEntityById(entityId); if (entity) { + PrefabDom beforeState; + m_prefabUndoCache.Retrieve(entityId, beforeState); + m_instanceToTemplateInterface->GenerateDomForEntity(afterState, *entity); PrefabDom patch; @@ -287,7 +361,10 @@ namespace AzToolsFramework // Update the cache m_prefabUndoCache.Store(entityId, AZStd::move(afterState)); } - + else + { + m_prefabUndoCache.PurgeCache(entityId); + } } } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h index 46a7f946ba..de892470ab 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h @@ -27,8 +27,10 @@ namespace AzToolsFramework namespace Prefab { class Instance; + class InstanceEntityMapperInterface; class InstanceToTemplateInterface; + class PrefabLoaderInterface; class PrefabSystemComponentInterface; class PrefabPublicHandler final @@ -42,7 +44,7 @@ namespace AzToolsFramework void UnregisterPrefabPublicHandlerInterface(); // PrefabPublicInterface... - PrefabOperationResult CreatePrefab(const AZStd::vector& entityIds, AZStd::string_view filePath) override; + PrefabOperationResult CreatePrefab(const AZStd::vector& entityIds, AZ::IO::PathView filePath) override; PrefabOperationResult InstantiatePrefab(AZStd::string_view filePath, AZ::EntityId parent, AZ::Vector3 position) override; PrefabOperationResult SavePrefab(AZ::IO::Path filePath) override; PrefabEntityResult CreateEntity(AZ::EntityId parentId, const AZ::Vector3& position) override; @@ -74,6 +76,7 @@ namespace AzToolsFramework InstanceEntityMapperInterface* m_instanceEntityMapperInterface = nullptr; InstanceToTemplateInterface* m_instanceToTemplateInterface = nullptr; + PrefabLoaderInterface* m_prefabLoaderInterface = nullptr; PrefabSystemComponentInterface* m_prefabSystemComponentInterface = nullptr; // Caches entity states for undo/redo purposes diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicInterface.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicInterface.h index 81a5258d91..4e59729ab2 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicInterface.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicInterface.h @@ -49,7 +49,7 @@ namespace AzToolsFramework * @param filePath The path for the new prefab file. * @return An outcome object; on failure, it comes with an error message detailing the cause of the error. */ - virtual PrefabOperationResult CreatePrefab(const AZStd::vector& entityIds, AZStd::string_view filePath) = 0; + virtual PrefabOperationResult CreatePrefab(const AZStd::vector& entityIds, AZ::IO::PathView filePath) = 0; /** * Instantiate a prefab from a prefab file. diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp index bf9fd658c6..37620ed9ec 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp @@ -104,7 +104,6 @@ namespace AzToolsFramework return nullptr; } - AZStd::unique_ptr newInstance = AZStd::make_unique(AZStd::move(containerEntity)); for (AZ::Entity* entity : entities) @@ -120,8 +119,11 @@ namespace AzToolsFramework newInstance->AddInstance(AZStd::move(instance)); } - - newInstance->SetTemplateSourcePath(relativeFilePath); + /* + AzToolsFramework::EditorEntityContextRequestBus::Broadcast( + &AzToolsFramework::EditorEntityContextRequests::HandleEntitiesAdded, EntityList{containerEntity->GetId()}); + */ + newInstance->SetTemplateSourcePath(filePath); TemplateId newTemplateId = CreateTemplateFromInstance(*newInstance); if (newTemplateId == InvalidTemplateId) @@ -157,11 +159,16 @@ namespace AzToolsFramework void PrefabSystemComponent::UpdatePrefabTemplate(TemplateId templateId, const PrefabDom& updatedDom) { - PrefabDom& templateDomToUpdate = FindTemplateDom(templateId); - if (AZ::JsonSerialization::Compare(templateDomToUpdate, updatedDom) != AZ::JsonSerializerCompareResult::Equal) + auto templateRef = FindTemplate(templateId); + if (templateRef.has_value()) { - templateDomToUpdate.CopyFrom(updatedDom, templateDomToUpdate.GetAllocator()); - PropagateTemplateChanges(templateId); + PrefabDom& templateDomToUpdate = templateRef->get().GetPrefabDom(); + if (AZ::JsonSerialization::Compare(templateDomToUpdate, updatedDom) != AZ::JsonSerializerCompareResult::Equal) + { + templateDomToUpdate.CopyFrom(updatedDom, templateDomToUpdate.GetAllocator()); + templateRef->get().MarkAsDirty(true); + PropagateTemplateChanges(templateId); + } } } @@ -615,7 +622,12 @@ namespace AzToolsFramework instancesValue = memberFound->value; } - instancesValue->get().AddMember(rapidjson::StringRef(instanceAlias.c_str()), PrefabDomValue(), targetTemplateDom.GetAllocator()); + // Only add the instance if it's not there already + if (instancesValue->get().FindMember(rapidjson::StringRef(instanceAlias.c_str())) == instancesValue->get().MemberEnd()) + { + instancesValue->get().AddMember( + rapidjson::StringRef(instanceAlias.c_str()), PrefabDomValue(), targetTemplateDom.GetAllocator()); + } Template& sourceTemplate = sourceTemplateRef->get(); @@ -628,9 +640,12 @@ namespace AzToolsFramework newLink.GetLinkDom().AddMember(rapidjson::StringRef(PrefabDomUtils::SourceName), rapidjson::StringRef(sourceTemplate.GetFilePath().c_str()), newLink.GetLinkDom().GetAllocator()); + PrefabDom linkPatchCopy; + linkPatchCopy.CopyFrom(linkPatch->get(), newLink.GetLinkDom().GetAllocator()); + if (linkPatch && linkPatch->get().IsArray() && !(linkPatch->get().Empty())) { - m_instanceToTemplatePropagator.AddPatchesToLink(linkPatch.value(), newLink); + m_instanceToTemplatePropagator.AddPatchesToLink(linkPatchCopy, newLink); } //update the target template dom to have the proper values for the source template dom diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp index 1e71b545b5..6ce3fdc755 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -39,9 +40,12 @@ namespace AzToolsFramework { namespace Prefab { + EditorEntityUiInterface* PrefabIntegrationManager::s_editorEntityUiInterface = nullptr; PrefabPublicInterface* PrefabIntegrationManager::s_prefabPublicInterface = nullptr; PrefabEditInterface* PrefabIntegrationManager::s_prefabEditInterface = nullptr; + PrefabLoaderInterface* PrefabIntegrationManager::s_prefabLoaderInterface = nullptr; + const AZStd::string PrefabIntegrationManager::s_prefabFileExtension = ".prefab"; void PrefabUserSettings::Reflect(AZ::ReflectContext* context) @@ -79,6 +83,13 @@ namespace AzToolsFramework return; } + s_prefabLoaderInterface = AZ::Interface::Get(); + if (s_prefabLoaderInterface == nullptr) + { + AZ_Assert(false, "Prefab - could not get PrefabLoaderInterface on PrefabIntegrationManager construction."); + return; + } + EditorContextMenuBus::Handler::BusConnect(); PrefabInstanceContainerNotificationBus::Handler::BusConnect(); AZ::Interface::Register(this); @@ -320,14 +331,15 @@ namespace AzToolsFramework GenerateSuggestedFilenameFromEntities(prefabRootEntities, suggestedName); - if (!QueryUserForPrefabSaveLocation(suggestedName, targetDirectory, AZ_CRC("PrefabUserSettings"), activeWindow, prefabName, prefabFilePath)) + if (!QueryUserForPrefabSaveLocation( + suggestedName, targetDirectory, AZ_CRC("PrefabUserSettings"), activeWindow, prefabName, prefabFilePath)) { // User canceled prefab creation, or error prevented continuation. return; } } - auto createPrefabOutcome = s_prefabPublicInterface->CreatePrefab(selectedEntities, prefabFilePath); + auto createPrefabOutcome = s_prefabPublicInterface->CreatePrefab(selectedEntities, s_prefabLoaderInterface->GetRelativePathToProject(prefabFilePath.data())); if (!createPrefabOutcome.IsSuccess()) { diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.h b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.h index 66a047df28..c9b846aa5b 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.h @@ -29,6 +29,9 @@ namespace AzToolsFramework { namespace Prefab { + + class PrefabLoaderInterface; + //! Structure for saving/retrieving user settings related to prefab workflows. class PrefabUserSettings : public AZ::UserSettings @@ -129,6 +132,7 @@ namespace AzToolsFramework static EditorEntityUiInterface* s_editorEntityUiInterface; static PrefabPublicInterface* s_prefabPublicInterface; static PrefabEditInterface* s_prefabEditInterface; + static PrefabLoaderInterface* s_prefabLoaderInterface; }; } } From 778d60bd0c47ad25e43b166928dfa64e54202167 Mon Sep 17 00:00:00 2001 From: srikappa Date: Thu, 15 Apr 2021 18:45:48 -0700 Subject: [PATCH 02/67] Replaced unique instance queue with checks in template to instance mapper --- .../Instance/InstanceUpdateExecutor.cpp | 54 ++++--------------- .../Prefab/Instance/InstanceUpdateExecutor.h | 14 ----- .../Prefab/PrefabPublicHandler.cpp | 2 +- .../Prefab/PrefabSystemComponent.cpp | 5 +- 4 files changed, 14 insertions(+), 61 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp index 7df1602bff..d84edd6212 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp @@ -123,6 +123,15 @@ namespace AzToolsFramework } } + auto findInstancesResult = m_templateInstanceMapperInterface->FindInstancesOwnedByTemplate(instanceTemplateId)->get(); + + if (findInstancesResult.find(instanceToUpdate) == findInstancesResult.end()) + { + isUpdateSuccessful = false; + m_instancesUpdateQueue.pop(); + continue; + } + Template& currentTemplate = currentTemplateReference->get(); Instance::EntityList newEntities; if (PrefabDomUtils::LoadInstanceFromPrefabDom(*instanceToUpdate, newEntities, currentTemplate.GetPrefabDom())) @@ -173,50 +182,5 @@ namespace AzToolsFramework return isUpdateSuccessful; } - - Instance* InstanceUpdateExecutor::UniqueInstanceQueue::front() - { - return m_instancesQueue.front(); - } - - void InstanceUpdateExecutor::UniqueInstanceQueue::pop() - { - m_instancesSet.erase(m_instancesQueue.front()); - m_instancesQueue.pop(); - } - - void InstanceUpdateExecutor::UniqueInstanceQueue::emplace(Instance* instance) - { - Instance* ancestorInstance = instance; - - while (ancestorInstance != nullptr) - { - if (m_instancesSet.contains(ancestorInstance)) - { - return; - } - - auto parent = ancestorInstance->GetParentInstance(); - if (parent.has_value()) - { - ancestorInstance = &(parent->get()); - } - else - { - ancestorInstance = nullptr; - } - } - - // TODO - remove child instances too? - // Optimization. - - m_instancesQueue.emplace(instance); - m_instancesSet.emplace(instance); - } - - size_t InstanceUpdateExecutor::UniqueInstanceQueue::size() - { - return m_instancesQueue.size(); - } } } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.h index a29e19dc8a..04bd189816 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.h @@ -15,7 +15,6 @@ #include #include #include -#include #include #include @@ -46,19 +45,6 @@ namespace AzToolsFramework PrefabSystemComponentInterface* m_prefabSystemComponentInterface = nullptr; TemplateInstanceMapperInterface* m_templateInstanceMapperInterface = nullptr; int m_instanceCountToUpdateInBatch = 0; - - class UniqueInstanceQueue - { - public: - Instance* front(); - void pop(); - void emplace(Instance* instance); - size_t size(); - private: - AZStd::queue m_instancesQueue; - AZStd::unordered_set m_instancesSet; - }; - //UniqueInstanceQueue m_instancesUpdateQueue; AZStd::queue m_instancesUpdateQueue; bool m_updatingTemplateInstancesInQueue { false }; }; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp index 292ee3c7f8..b97e9ebd98 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp @@ -334,7 +334,7 @@ namespace AzToolsFramework // Create Undo node on entities if they belong to an instance InstanceOptionalReference instanceOptionalReference = m_instanceEntityMapperInterface->FindOwningInstance(entityId); - if (instanceOptionalReference.has_value() && !IsInstanceContainerEntity(entityId)) + if (instanceOptionalReference.has_value()) { PrefabDom afterState; AZ::Entity* entity = GetEntityById(entityId); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp index 37620ed9ec..7a9ec0a62e 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp @@ -144,7 +144,6 @@ namespace AzToolsFramework void PrefabSystemComponent::PropagateTemplateChanges(TemplateId templateId) { - UpdatePrefabInstances(templateId); auto templateIdToLinkIdsIterator = m_templateToLinkIdsMap.find(templateId); if (templateIdToLinkIdsIterator != m_templateToLinkIdsMap.end()) { @@ -155,6 +154,10 @@ namespace AzToolsFramework templateIdToLinkIdsIterator->second.end())); UpdateLinkedInstances(linkIdsToUpdateQueue); } + else + { + UpdatePrefabInstances(templateId); + } } void PrefabSystemComponent::UpdatePrefabTemplate(TemplateId templateId, const PrefabDom& updatedDom) From 808fd1d3ba2843a2e0e19205726f4ca957e5fcd8 Mon Sep 17 00:00:00 2001 From: moraaar Date: Fri, 16 Apr 2021 18:24:29 +0100 Subject: [PATCH 03/67] Cloth works with Actors in Atom. Cloth system uses MeshAssetHelper to read model mesh information for actors too. --- .../Code/Source/AtomActorInstance.cpp | 48 +++++++------------ .../Code/Source/AtomActorInstance.h | 9 ---- .../ClothComponentMesh/ClothComponentMesh.cpp | 15 ++++-- .../NvCloth/Code/Source/Utils/AssetHelper.cpp | 26 ++-------- .../Code/Source/Utils/MeshAssetHelper.cpp | 6 +++ .../Code/Source/Utils/MeshAssetHelper.h | 4 +- 6 files changed, 41 insertions(+), 67 deletions(-) diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/AtomActorInstance.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/AtomActorInstance.cpp index 0a17a6444d..cd5f3bb6c5 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/AtomActorInstance.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/AtomActorInstance.cpp @@ -212,19 +212,26 @@ namespace AZ void AtomActorInstance::SetModelAsset([[maybe_unused]] Data::Asset modelAsset) { - // Atom Actor Instance is not based on an actual Model Asset yet, - // it's created at runtime from an Actor Asset. + // Changing model asset is not supported by Atom Actor Instance. + // The model asset is obtained from the Actor inside the ActorAsset, + // which is passed to the constructor. To set a different model asset + // this instance should use a different Actor. + AZ_Assert(false, "AtomActorInstance::SetModelAsset not supported"); } const Data::Asset& AtomActorInstance::GetModelAsset() const { - return m_skinnedMeshInstance->m_model->GetModelAsset(); + AZ_Assert(GetActor(), "Expecting a Atom Actor Instance having a valid Actor."); + return GetActor()->GetMeshAsset(); } void AtomActorInstance::SetModelAssetId([[maybe_unused]] Data::AssetId modelAssetId) { - // Atom Actor Instance is not based on an actual Model Asset yet, - // it's created at runtime from an Actor Asset. + // Changing model asset is not supported by Atom Actor Instance. + // The model asset is obtained from the Actor inside the ActorAsset, + // which is passed to the constructor. To set a different model asset + // this instance should use a different Actor. + AZ_Assert(false, "AtomActorInstance::SetModelAssetId not supported"); } Data::AssetId AtomActorInstance::GetModelAssetId() const @@ -234,8 +241,11 @@ namespace AZ void AtomActorInstance::SetModelAssetPath([[maybe_unused]] const AZStd::string& modelAssetPath) { - // Atom Actor Instance is not based on an actual Model Asset yet, - // it's created at runtime from an Actor Asset. + // Changing model asset is not supported by Atom Actor Instance. + // The model asset is obtained from the Actor inside the ActorAsset, + // which is passed to the constructor. To set a different model asset + // this instance should use a different Actor. + AZ_Assert(false, "AtomActorInstance::SetModelAssetPath not supported"); } AZStd::string AtomActorInstance::GetModelAssetPath() const @@ -278,28 +288,6 @@ namespace AZ return IsVisible(); } - void AtomActorInstance::SetMeshAsset(const AZ::Data::AssetId& id) - { - AZ::Data::Asset asset = - AZ::Data::AssetManager::Instance().GetAsset( - id, m_actorAsset.GetAutoLoadBehavior()); - if (asset) - { - m_actorAsset = asset; - Create(); - } - } - - AZ::Data::Asset AtomActorInstance::GetMeshAsset() - { - return m_actorAsset; - } - - bool AtomActorInstance::GetVisibility() - { - return static_cast(*this).GetVisibility(); - } - AZ::u32 AtomActorInstance::GetJointCount() { return m_actorInstance->GetActor()->GetSkeleton()->GetNumNodes(); @@ -469,7 +457,6 @@ namespace AZ TransformNotificationBus::Handler::BusConnect(m_entityId); MaterialComponentNotificationBus::Handler::BusConnect(m_entityId); MeshComponentRequestBus::Handler::BusConnect(m_entityId); - LmbrCentral::MeshComponentRequestBus::Handler::BusConnect(m_entityId); const Data::Instance model = m_meshFeatureProcessor->GetModel(*m_meshHandle); MeshComponentNotificationBus::Event(m_entityId, &MeshComponentNotificationBus::Events::OnModelReady, model->GetModelAsset(), model); @@ -479,7 +466,6 @@ namespace AZ { MeshComponentNotificationBus::Event(m_entityId, &MeshComponentNotificationBus::Events::OnModelPreDestroy); - LmbrCentral::MeshComponentRequestBus::Handler::BusDisconnect(); MeshComponentRequestBus::Handler::BusDisconnect(); MaterialComponentNotificationBus::Handler::BusDisconnect(); TransformNotificationBus::Handler::BusDisconnect(); diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/AtomActorInstance.h b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/AtomActorInstance.h index e14a0a7c4f..a2cf042efa 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/AtomActorInstance.h +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/AtomActorInstance.h @@ -62,7 +62,6 @@ namespace AZ , public AzFramework::BoundsRequestBus::Handler , public AZ::Render::MaterialComponentNotificationBus::Handler , public AZ::Render::MeshComponentRequestBus::Handler - , public LmbrCentral::MeshComponentRequestBus::Handler , private AZ::Render::SkinnedMeshFeatureProcessorNotificationBus::Handler , private AZ::Render::SkinnedMeshOutputStreamNotificationBus::Handler , private LmbrCentral::SkeletalHierarchyRequestBus::Handler @@ -143,14 +142,6 @@ namespace AZ bool GetVisibility() const override; // GetWorldBounds/GetLocalBounds already overridden by BoundsRequestBus::Handler - ////////////////////////////////////////////////////////////////////////// - // LmbrCentral::MeshComponentRequestBus::Handler - void SetMeshAsset(const AZ::Data::AssetId& id) override; - AZ::Data::Asset GetMeshAsset() override; - bool GetVisibility() override; - // SetVisibility already overridden by MeshComponentRequestBus::Handler - // GetWorldBounds/GetLocalBounds already overridden by BoundsRequestBus::Handler - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// // SkeletalHierarchyRequestBus::Handler overrides... AZ::u32 GetJointCount() override; diff --git a/Gems/NvCloth/Code/Source/Components/ClothComponentMesh/ClothComponentMesh.cpp b/Gems/NvCloth/Code/Source/Components/ClothComponentMesh/ClothComponentMesh.cpp index cf2593048f..92dbfdb89a 100644 --- a/Gems/NvCloth/Code/Source/Components/ClothComponentMesh/ClothComponentMesh.cpp +++ b/Gems/NvCloth/Code/Source/Components/ClothComponentMesh/ClothComponentMesh.cpp @@ -448,9 +448,18 @@ namespace NvCloth const auto& renderTangents = renderData.m_tangents; const auto& renderBitangents = renderData.m_bitangents; - AZ::Data::Asset modelAsset; - AZ::Render::MeshComponentRequestBus::EventResult( - modelAsset, m_entityId, &AZ::Render::MeshComponentRequestBus::Events::GetModelAsset); + // Since Atom has a 1:1 relation with between ModelAsset buffers and Model buffers, + // internally it created a new asset for the model instance. So it's important to + // get the asset from the model when we want to write to them, instead of getting the + // ModelAsset directly from the bus (which returns the original asset shared by all entities). + AZ::Data::Instance model; + AZ::Render::MeshComponentRequestBus::EventResult(model, m_entityId, &AZ::Render::MeshComponentRequestBus::Events::GetModel); + if (!model) + { + return; + } + + AZ::Data::Asset modelAsset = model->GetModelAsset(); if (!modelAsset.IsReady()) { return; diff --git a/Gems/NvCloth/Code/Source/Utils/AssetHelper.cpp b/Gems/NvCloth/Code/Source/Utils/AssetHelper.cpp index cb4d644065..c7558580b3 100644 --- a/Gems/NvCloth/Code/Source/Utils/AssetHelper.cpp +++ b/Gems/NvCloth/Code/Source/Utils/AssetHelper.cpp @@ -13,11 +13,7 @@ #include #include -#include -#include - -#include namespace NvCloth { @@ -30,25 +26,9 @@ namespace NvCloth AZStd::unique_ptr AssetHelper::CreateAssetHelper(AZ::EntityId entityId) { - // Does the entity have an Actor Asset? - EMotionFX::ActorInstance* actorInstance = nullptr; - EMotionFX::Integration::ActorComponentRequestBus::EventResult( - actorInstance, entityId, &EMotionFX::Integration::ActorComponentRequestBus::Events::GetActorInstance); - if (actorInstance) - { - return AZStd::make_unique(entityId); - } - - AZ::Data::Asset modelAsset; - AZ::Render::MeshComponentRequestBus::EventResult( - modelAsset, entityId, &AZ::Render::MeshComponentRequestBus::Events::GetModelAsset); - if (modelAsset.GetId().IsValid()) - { - return AZStd::make_unique(entityId); - } - - AZ_Warning("AssetHelper", false, "Unexpected asset type"); - return nullptr; + return entityId.IsValid() + ? AZStd::make_unique(entityId) + : nullptr; } float AssetHelper::ConvertBackstopOffset(float backstopOffset) diff --git a/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.cpp b/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.cpp index fa8d6e5455..6852d245d2 100644 --- a/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.cpp +++ b/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.cpp @@ -14,11 +14,17 @@ #include +#include + namespace NvCloth { MeshAssetHelper::MeshAssetHelper(AZ::EntityId entityId) : AssetHelper(entityId) { + EMotionFX::ActorInstance* actorInstance = nullptr; + EMotionFX::Integration::ActorComponentRequestBus::EventResult( + actorInstance, entityId, &EMotionFX::Integration::ActorComponentRequestBus::Events::GetActorInstance); + m_supportSkinnedAnimation = actorInstance != nullptr; } void MeshAssetHelper::GatherClothMeshNodes(MeshNodeList& meshNodes) diff --git a/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.h b/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.h index b558519bd4..a7849583e7 100644 --- a/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.h +++ b/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.h @@ -35,12 +35,14 @@ namespace NvCloth MeshClothInfo& meshClothInfo) override; bool DoesSupportSkinnedAnimation() const override { - return false; + return m_supportSkinnedAnimation; } private: bool CopyDataFromMeshes( const AZStd::vector& meshes, MeshClothInfo& meshClothInfo); + + bool m_supportSkinnedAnimation = false; }; } // namespace NvCloth From 9e6a5ecbaf3e8619bffd11f2d4944145a42560cf Mon Sep 17 00:00:00 2001 From: moraaar Date: Fri, 16 Apr 2021 18:25:24 +0100 Subject: [PATCH 04/67] Fix cloth chicken actor asset in NvCloth gem. --- .../cloth/Chicken/Actor/chicken.fbx.assetinfo | 534 ++++++------------ 1 file changed, 172 insertions(+), 362 deletions(-) diff --git a/Gems/NvCloth/Assets/Objects/cloth/Chicken/Actor/chicken.fbx.assetinfo b/Gems/NvCloth/Assets/Objects/cloth/Chicken/Actor/chicken.fbx.assetinfo index 808b024189..a6024e0c5f 100644 --- a/Gems/NvCloth/Assets/Objects/cloth/Chicken/Actor/chicken.fbx.assetinfo +++ b/Gems/NvCloth/Assets/Objects/cloth/Chicken/Actor/chicken.fbx.assetinfo @@ -1,362 +1,172 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +{ + "values": [ + { + "$type": "ActorGroup", + "name": "chicken", + "id": "{C086F309-EE7E-5AFD-A9C2-69DE5BA48461}", + "rules": { + "rules": [ + { + "$type": "MetaDataRule", + "metaData": "AdjustActor -actorID $(ACTORID) -name \"chicken\"\r\nActorSetCollisionMeshes -actorID $(ACTORID) -lod 0 -nodeList \"\"\r\nAdjustActor -actorID $(ACTORID) -nodesExcludedFromBounds \"\" -nodeAction \"select\"\r\nAdjustActor -actorID $(ACTORID) -nodeAction \"replace\" -attachmentNodes \"\"\r\n" + }, + { + "$type": "ActorPhysicsSetupRule", + "data": { + "config": { + "clothConfig": { + "nodes": [ + { + "name": "def_c_head_joint", + "shapes": [ + [ + { + "Visible": true, + "Position": [ + -0.08505599945783615, + 0.0, + 0.009370899759232998 + ], + "Rotation": [ + 0.7071437239646912, + 0.0, + 0.0, + 0.708984375 + ], + "propertyVisibilityFlags": 248 + }, + { + "$type": "CapsuleShapeConfiguration", + "Height": 0.191273495554924, + "Radius": 0.05063670128583908 + } + ] + ] + }, + { + "name": "def_c_neck_joint", + "shapes": [ + [ + { + "Visible": true, + "Position": [ + -0.03810190036892891, + 0.0, + -0.03132440149784088 + ], + "propertyVisibilityFlags": 248 + }, + { + "$type": "SphereShapeConfiguration", + "Radius": 0.16069939732551576 + } + ] + ] + }, + { + "name": "def_c_spine_end", + "shapes": [ + [ + { + "Visible": true, + "Position": [ + -2.0000000233721949e-7, + 0.012646200135350228, + -0.24104370176792146 + ], + "propertyVisibilityFlags": 248 + }, + { + "$type": "SphereShapeConfiguration", + "Radius": 0.24875959753990174 + } + ] + ] + } + ] + } + } + } + }, + { + "$type": "CoordinateSystemRule" + } + ] + } + }, + { + "$type": "{07B356B7-3635-40B5-878A-FAC4EFD5AD86} MeshGroup", + "name": "chicken", + "nodeSelectionList": { + "selectedNodes": [ + {}, + "RootNode", + "RootNode.chicken_skeleton", + "RootNode.chicken_feet_skin", + "RootNode.chicken_eyes_skin", + "RootNode.chicken_body_skin", + "RootNode.chicken_mohawk", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_l_uprLeg_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_r_uprLeg_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_l_uprLeg_joint.def_l_lwrLeg_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_r_uprLeg_joint.def_r_lwrLeg_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_l_wing1_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_r_wing1_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_l_uprLeg_joint.def_l_lwrLeg_joint.def_l_foot_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_r_uprLeg_joint.def_r_lwrLeg_joint.def_r_foot_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_tail1_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_l_wing1_joint.def_l_wing2_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_r_wing1_joint.def_r_wing2_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_l_uprLeg_joint.def_l_lwrLeg_joint.def_l_foot_joint.def_l_ball_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_r_uprLeg_joint.def_r_lwrLeg_joint.def_r_foot_joint.def_r_ball_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_tail1_joint.def_c_tail2_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_l_wing1_joint.def_l_wing2_joint.def_l_wing_end", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_r_wing1_joint.def_r_wing2_joint.def_r_wing_end", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_mouth_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_waddle1_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint.def_c_feather2_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_mouth_joint.def_c_mouth_end", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_waddle1_joint.def_c_waddle2_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint.def_c_feather2_joint.def_c_feather3_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_waddle1_joint.def_c_waddle2_joint.def_c_waddle3_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint.def_c_feather2_joint.def_c_feather3_joint.def_c_feather4_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_waddle1_joint.def_c_waddle2_joint.def_c_waddle3_joint.def_c_waddle_end", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint.def_c_feather2_joint.def_c_feather3_joint.def_c_feather4_joint.def_c_feather_end" + ] + }, + "rules": { + "rules": [ + { + "$type": "SkinRule" + }, + { + "$type": "StaticMeshAdvancedRule", + "vertexColorStreamName": "Disabled" + }, + { + "$type": "MaterialRule" + }, + { + "$type": "CoordinateSystemRule" + }, + { + "$type": "ClothRule", + "meshNodeName": "RootNode.chicken_mohawk", + "inverseMassesStreamName": "colorSet1", + "motionConstraintsStreamName": "Default: 1.0", + "backstopStreamName": "None" + } + ] + }, + "id": "{55E26F74-B35F-4BC1-87BB-83E3DE85C346}" + } + ] +} \ No newline at end of file From 4b3662ac0a47cb6e962653e3acd838183c701eed Mon Sep 17 00:00:00 2001 From: moraaar Date: Fri, 16 Apr 2021 18:26:17 +0100 Subject: [PATCH 05/67] Sort out cloth tests after Actors work with model mesh assets. --- .../ActorClothCollidersTest.cpp | 10 ++-- .../ClothComponentMeshTest.cpp | 28 ++++++++--- .../Components/EditorClothComponentTest.cpp | 20 ++++---- Gems/NvCloth/Code/Tests/System/ClothTest.cpp | 2 +- .../Code/Tests/System/FabricCookerTest.cpp | 44 ++++++++-------- .../Code/Tests/Utils/ActorAssetHelperTest.cpp | 50 +++++++++++++------ 6 files changed, 96 insertions(+), 58 deletions(-) diff --git a/Gems/NvCloth/Code/Tests/Components/ClothComponentMesh/ActorClothCollidersTest.cpp b/Gems/NvCloth/Code/Tests/Components/ClothComponentMesh/ActorClothCollidersTest.cpp index 946f9e0af2..e3a321cebd 100644 --- a/Gems/NvCloth/Code/Tests/Components/ClothComponentMesh/ActorClothCollidersTest.cpp +++ b/Gems/NvCloth/Code/Tests/Components/ClothComponentMesh/ActorClothCollidersTest.cpp @@ -145,8 +145,8 @@ namespace UnitTest const AZStd::vector& capsuleColliders = actorClothColliders->GetCapsuleColliders(); const AZStd::vector& nativeCapsuleIndices = actorClothColliders->GetCapsuleIndices(); - EXPECT_EQ(sphereColliders.size(), 1); - EXPECT_EQ(nativeSpheres.size(), 1); + ASSERT_EQ(sphereColliders.size(), 1); + ASSERT_EQ(nativeSpheres.size(), 1); EXPECT_TRUE(capsuleColliders.empty()); EXPECT_TRUE(nativeCapsuleIndices.empty()); @@ -189,9 +189,9 @@ namespace UnitTest const AZStd::vector& nativeCapsuleIndices = actorClothColliders->GetCapsuleIndices(); EXPECT_TRUE(sphereColliders.empty()); - EXPECT_EQ(nativeSpheres.size(), 2); // Each capsule produces 2 spheres - EXPECT_EQ(capsuleColliders.size(), 1); - EXPECT_EQ(nativeCapsuleIndices.size(), 2); // Each capsule is 2 indices + ASSERT_EQ(nativeSpheres.size(), 2); // Each capsule produces 2 spheres + ASSERT_EQ(capsuleColliders.size(), 1); + ASSERT_EQ(nativeCapsuleIndices.size(), 2); // Each capsule is 2 indices EXPECT_NEAR(capsuleColliders[0].m_height, height, Tolerance); EXPECT_NEAR(capsuleColliders[0].m_radius, radius, Tolerance); diff --git a/Gems/NvCloth/Code/Tests/Components/ClothComponentMesh/ClothComponentMeshTest.cpp b/Gems/NvCloth/Code/Tests/Components/ClothComponentMesh/ClothComponentMeshTest.cpp index c463c30226..3d5b7713b3 100644 --- a/Gems/NvCloth/Code/Tests/Components/ClothComponentMesh/ClothComponentMeshTest.cpp +++ b/Gems/NvCloth/Code/Tests/Components/ClothComponentMesh/ClothComponentMeshTest.cpp @@ -144,8 +144,12 @@ namespace UnitTest EXPECT_TRUE(renderData.m_bitangents.empty()); EXPECT_TRUE(renderData.m_normals.empty()); } - - TEST_F(NvClothComponentMesh, ClothComponentMesh_InitWithEntityActorWithNoClothData_TriggersError) + + // [TODO LYN-1891] + // Revisit when Cloth Component Mesh works with Actors adapted to Atom models. + // Editor Cloth component now uses the new AZ::Render::MeshComponentNotificationBus::OnModelReady + // notification and this test does not setup a model yet. + TEST_F(NvClothComponentMesh, DISABLED_ClothComponentMesh_InitWithEntityActorWithNoClothData_TriggersError) { { auto actor = AZStd::make_unique("actor_test"); @@ -165,8 +169,12 @@ namespace UnitTest AZ_TEST_STOP_TRACE_SUPPRESSION(1); // Expect 1 error } - - TEST_F(NvClothComponentMesh, ClothComponentMesh_InitWithEntityActor_ReturnsValidRenderData) + + // [TODO LYN-1891] + // Revisit when Cloth Component Mesh works with Actors adapted to Atom models. + // Editor Cloth component now uses the new AZ::Render::MeshComponentNotificationBus::OnModelReady + // notification and this test does not setup a model yet. + TEST_F(NvClothComponentMesh, DISABLED_ClothComponentMesh_InitWithEntityActor_ReturnsValidRenderData) { { auto actor = AZStd::make_unique("actor_test"); @@ -265,7 +273,11 @@ namespace UnitTest EXPECT_TRUE(renderData.m_normals.empty()); } - TEST_F(NvClothComponentMesh, ClothComponentMesh_UpdateConfigurationDifferentEntity_ReturnsRenderDataFromNewEntity) + // [TODO LYN-1891] + // Revisit when Cloth Component Mesh works with Actors adapted to Atom models. + // Editor Cloth component now uses the new AZ::Render::MeshComponentNotificationBus::OnModelReady + // notification and this test does not setup a model yet. + TEST_F(NvClothComponentMesh, DISABLED_ClothComponentMesh_UpdateConfigurationDifferentEntity_ReturnsRenderDataFromNewEntity) { { auto actor = AZStd::make_unique("actor_test"); @@ -341,7 +353,11 @@ namespace UnitTest EXPECT_TRUE(renderData.m_normals.empty()); } - TEST_F(NvClothComponentMesh, ClothComponentMesh_UpdateConfigurationNewMeshNode_ReturnsRenderDataFromNewMeshNode) + // [TODO LYN-1891] + // Revisit when Cloth Component Mesh works with Actors adapted to Atom models. + // Editor Cloth component now uses the new AZ::Render::MeshComponentNotificationBus::OnModelReady + // notification and this test does not setup a model yet. + TEST_F(NvClothComponentMesh, DISABLED_ClothComponentMesh_UpdateConfigurationNewMeshNode_ReturnsRenderDataFromNewMeshNode) { const AZStd::string meshNode2Name = "cloth_node_2"; diff --git a/Gems/NvCloth/Code/Tests/Components/EditorClothComponentTest.cpp b/Gems/NvCloth/Code/Tests/Components/EditorClothComponentTest.cpp index bb3218a4f5..7dc191bd9a 100644 --- a/Gems/NvCloth/Code/Tests/Components/EditorClothComponentTest.cpp +++ b/Gems/NvCloth/Code/Tests/Components/EditorClothComponentTest.cpp @@ -184,7 +184,7 @@ namespace UnitTest const NvCloth::MeshNodeList& meshNodeList = editorClothComponent->GetMeshNodeList(); - EXPECT_EQ(meshNodeList.size(), 1); + ASSERT_EQ(meshNodeList.size(), 1); EXPECT_TRUE(meshNodeList[0] == NvCloth::Internal::StatusMessageNoAsset); } @@ -208,7 +208,7 @@ namespace UnitTest const NvCloth::MeshNodeList& meshNodeList = editorClothComponent->GetMeshNodeList(); - EXPECT_EQ(meshNodeList.size(), 1); + ASSERT_EQ(meshNodeList.size(), 1); EXPECT_TRUE(meshNodeList[0] == NvCloth::Internal::StatusMessageNoClothNodes); } @@ -234,7 +234,7 @@ namespace UnitTest const NvCloth::MeshNodeList& meshNodeList = editorClothComponent->GetMeshNodeList(); - EXPECT_EQ(meshNodeList.size(), 1); + ASSERT_EQ(meshNodeList.size(), 1); EXPECT_TRUE(meshNodeList[0] == NvCloth::Internal::StatusMessageNoClothNodes); } @@ -261,7 +261,7 @@ namespace UnitTest const NvCloth::MeshNodeList& meshNodeList = editorClothComponent->GetMeshNodeList(); - EXPECT_EQ(meshNodeList.size(), 2); + ASSERT_EQ(meshNodeList.size(), 2); EXPECT_TRUE(meshNodeList[0] == NvCloth::Internal::StatusMessageSelectNode); EXPECT_TRUE(meshNodeList[1] == MeshNodeName); } @@ -322,9 +322,11 @@ namespace UnitTest EXPECT_TRUE(meshNodesWithBackstopData.find(MeshNodeName) != meshNodesWithBackstopData.end()); } - // [TODO LYN-2252] - // Enable test once OnModelDestroyed is available. - TEST_F(NvClothEditorClothComponent, DISABLED_EditorClothComponent_OnMeshDestroyed_ReturnsMeshNodeListWithNoAssetMessage) + // [TODO LYN-1891] + // Revisit when Cloth Component Mesh works with Actors adapted to Atom models. + // Editor Cloth component now uses the new AZ::Render::MeshComponentNotificationBus::OnModelReady + // notification and this test does not setup a model yet. + TEST_F(NvClothEditorClothComponent, DISABLED_EditorClothComponent_OnModelPreDestroy_ReturnsMeshNodeListWithNoAssetMessage) { auto editorEntity = CreateInactiveEditorEntity("ClothComponentEditorEntity"); auto* editorClothComponent = editorEntity->CreateComponent(); @@ -341,12 +343,12 @@ namespace UnitTest editorActorComponent->SetActorAsset(CreateAssetFromActor(AZStd::move(actor))); } - //editorClothComponent->OnModelDestroyed(); + editorClothComponent->OnModelPreDestroy(); const NvCloth::MeshNodeList& meshNodeList = editorClothComponent->GetMeshNodeList(); const auto& meshNodesWithBackstopData = editorClothComponent->GetMeshNodesWithBackstopData(); - EXPECT_EQ(meshNodeList.size(), 1); + ASSERT_EQ(meshNodeList.size(), 1); EXPECT_TRUE(meshNodeList[0] == NvCloth::Internal::StatusMessageNoAsset); EXPECT_TRUE(meshNodesWithBackstopData.empty()); } diff --git a/Gems/NvCloth/Code/Tests/System/ClothTest.cpp b/Gems/NvCloth/Code/Tests/System/ClothTest.cpp index 2c3ae610e4..08959a9196 100644 --- a/Gems/NvCloth/Code/Tests/System/ClothTest.cpp +++ b/Gems/NvCloth/Code/Tests/System/ClothTest.cpp @@ -506,7 +506,7 @@ namespace UnitTest EXPECT_EQ(initialParticles.size(), nvClothCurrentParticles.size()); EXPECT_EQ(initialParticles.size(), nvClothPreviousParticles.size()); - for (size_t i = 0; i < nvClothCurrentParticles.size(); ++i) + for (size_t i = 0; i < initialParticles.size(); ++i) { ExpectEq(initialParticles[i], nvClothCurrentParticles[i]); ExpectEq(initialParticles[i], nvClothPreviousParticles[i]); diff --git a/Gems/NvCloth/Code/Tests/System/FabricCookerTest.cpp b/Gems/NvCloth/Code/Tests/System/FabricCookerTest.cpp index 16a5d2efa3..d2d312c2ca 100644 --- a/Gems/NvCloth/Code/Tests/System/FabricCookerTest.cpp +++ b/Gems/NvCloth/Code/Tests/System/FabricCookerTest.cpp @@ -283,7 +283,7 @@ namespace UnitTest AZStd::vector remappedVertices; NvCloth::Internal::WeldVertices(vertices, indices, weldedVertices, weldedIndices, remappedVertices); - EXPECT_EQ(weldedVertices.size(), expectedSizeAfterWelding); + ASSERT_EQ(weldedVertices.size(), expectedSizeAfterWelding); EXPECT_THAT(weldedVertices[0].GetAsVector3(), IsCloseTolerance(vertexPosition, Tolerance)); EXPECT_NEAR(weldedVertices[0].GetW(), lowestInverseMass, Tolerance); } @@ -307,9 +307,9 @@ namespace UnitTest AZStd::vector remappedVertices; NvCloth::Internal::WeldVertices(vertices, indices, weldedVertices, weldedIndices, remappedVertices); - EXPECT_EQ(weldedVertices.size(), expectedSizeAfterWelding); - EXPECT_EQ(weldedIndices.size(), indices.size()); - EXPECT_EQ(remappedVertices.size(), vertices.size()); + ASSERT_EQ(weldedVertices.size(), expectedSizeAfterWelding); + ASSERT_EQ(weldedIndices.size(), indices.size()); + ASSERT_EQ(remappedVertices.size(), vertices.size()); for (size_t i = 0; i < remappedVertices.size(); ++i) { @@ -347,9 +347,9 @@ namespace UnitTest // The result after calling WeldVertices is expected to have the same size. // The vertices inside will be reordered though due to the welding process. - EXPECT_EQ(weldedVertices.size(), vertices.size()); - EXPECT_EQ(weldedIndices.size(), indices.size()); - EXPECT_EQ(remappedVertices.size(), vertices.size()); + ASSERT_EQ(weldedVertices.size(), vertices.size()); + ASSERT_EQ(weldedIndices.size(), indices.size()); + ASSERT_EQ(remappedVertices.size(), vertices.size()); for (size_t i = 0; i < remappedVertices.size(); ++i) { @@ -422,9 +422,9 @@ namespace UnitTest AZStd::vector remappedVertices; NvCloth::Internal::RemoveStaticTriangles(vertices, indices, simplifiedVertices, simplifiedIndices, remappedVertices); - EXPECT_EQ(simplifiedVertices.size(), expectedVerticesSizeAfterSimplification); - EXPECT_EQ(simplifiedIndices.size(), expectedIndicesSizeAfterSimplification); - EXPECT_EQ(remappedVertices.size(), vertices.size()); + ASSERT_EQ(simplifiedVertices.size(), expectedVerticesSizeAfterSimplification); + ASSERT_EQ(simplifiedIndices.size(), expectedIndicesSizeAfterSimplification); + ASSERT_EQ(remappedVertices.size(), vertices.size()); for (size_t i = 0; i < remappedVertices.size(); ++i) { @@ -477,9 +477,9 @@ namespace UnitTest AZStd::vector remappedVertices; NvCloth::Internal::RemoveStaticTriangles(vertices, indices, simplifiedVertices, simplifiedIndices, remappedVertices); - EXPECT_EQ(simplifiedVertices.size(), expectedVerticesSizeAfterSimplification); - EXPECT_EQ(simplifiedIndices.size(), expectedIndicesSizeAfterSimplification); - EXPECT_EQ(remappedVertices.size(), vertices.size()); + ASSERT_EQ(simplifiedVertices.size(), expectedVerticesSizeAfterSimplification); + ASSERT_EQ(simplifiedIndices.size(), expectedIndicesSizeAfterSimplification); + ASSERT_EQ(remappedVertices.size(), vertices.size()); for (size_t i = 0; i < remappedVertices.size(); ++i) { @@ -532,9 +532,9 @@ namespace UnitTest // The result after calling RemoveStaticTriangles is expected to have the same size. // The vertices will be reordered though due to the processing during simplification. - EXPECT_EQ(simplifiedVertices.size(), vertices.size()); - EXPECT_EQ(simplifiedIndices.size(), indices.size()); - EXPECT_EQ(remappedVertices.size(), vertices.size()); + ASSERT_EQ(simplifiedVertices.size(), vertices.size()); + ASSERT_EQ(simplifiedIndices.size(), indices.size()); + ASSERT_EQ(remappedVertices.size(), vertices.size()); for (size_t i = 0; i < remappedVertices.size(); ++i) { @@ -576,9 +576,9 @@ namespace UnitTest AZStd::vector remappedVertices; AZ::Interface::Get()->SimplifyMesh(vertices, indices, simplifiedVertices, simplifiedIndices, remappedVertices, removeStaticTriangles); - EXPECT_EQ(simplifiedVertices.size(), expectedVerticesSizeAfterSimplification); - EXPECT_EQ(simplifiedIndices.size(), expectedIndicesSizeAfterSimplification); - EXPECT_EQ(remappedVertices.size(), vertices.size()); + ASSERT_EQ(simplifiedVertices.size(), expectedVerticesSizeAfterSimplification); + ASSERT_EQ(simplifiedIndices.size(), expectedIndicesSizeAfterSimplification); + ASSERT_EQ(remappedVertices.size(), vertices.size()); for (size_t i = 0; i < remappedVertices.size(); ++i) { @@ -635,9 +635,9 @@ namespace UnitTest AZStd::vector remappedVertices; AZ::Interface::Get()->SimplifyMesh(vertices, indices, simplifiedVertices, simplifiedIndices, remappedVertices, removeStaticTriangles); - EXPECT_EQ(simplifiedVertices.size(), expectedVerticesSizeAfterSimplification); - EXPECT_EQ(simplifiedIndices.size(), expectedIndicesSizeAfterSimplification); - EXPECT_EQ(remappedVertices.size(), vertices.size()); + ASSERT_EQ(simplifiedVertices.size(), expectedVerticesSizeAfterSimplification); + ASSERT_EQ(simplifiedIndices.size(), expectedIndicesSizeAfterSimplification); + ASSERT_EQ(remappedVertices.size(), vertices.size()); for (size_t i = 0; i < remappedVertices.size(); ++i) { diff --git a/Gems/NvCloth/Code/Tests/Utils/ActorAssetHelperTest.cpp b/Gems/NvCloth/Code/Tests/Utils/ActorAssetHelperTest.cpp index 481bf70c67..de0ba9031e 100644 --- a/Gems/NvCloth/Code/Tests/Utils/ActorAssetHelperTest.cpp +++ b/Gems/NvCloth/Code/Tests/Utils/ActorAssetHelperTest.cpp @@ -15,7 +15,7 @@ #include #include -#include +#include #include #include @@ -24,7 +24,7 @@ namespace UnitTest { //! Fixture to setup entity with actor component and the tests data. - class NvClothActorAssetHelper + class NvClothMeshAssetHelper : public ::testing::Test { public: @@ -75,7 +75,7 @@ namespace UnitTest AZStd::unique_ptr m_entity; }; - void NvClothActorAssetHelper::SetUp() + void NvClothMeshAssetHelper::SetUp() { m_entity = AZStd::make_unique(); m_entity->CreateComponent(); @@ -84,14 +84,14 @@ namespace UnitTest m_entity->Activate(); } - void NvClothActorAssetHelper::TearDown() + void NvClothMeshAssetHelper::TearDown() { m_entity->Deactivate(); m_actorComponent = nullptr; m_entity.reset(); } - TEST_F(NvClothActorAssetHelper, ActorAssetHelper_CreateAssetHelperWithInvalidEntityId_ReturnsNull) + TEST_F(NvClothMeshAssetHelper, MeshAssetHelper_CreateAssetHelperWithInvalidEntityId_ReturnsNull) { AZ::EntityId entityId; @@ -100,7 +100,18 @@ namespace UnitTest EXPECT_TRUE(assetHelper.get() == nullptr); } - TEST_F(NvClothActorAssetHelper, ActorAssetHelper_CreateAssetHelperWithActor_ReturnsValidActorAssetHelper) + TEST_F(NvClothMeshAssetHelper, MeshAssetHelper_CreateAssetHelperWithValidEntityId_ReturnsValidMeshAssetHelper) + { + AZStd::unique_ptr entity = AZStd::make_unique(); + + AZStd::unique_ptr assetHelper = NvCloth::AssetHelper::CreateAssetHelper(entity->GetId()); + + EXPECT_TRUE(assetHelper.get() != nullptr); + EXPECT_TRUE(azrtti_cast(assetHelper.get()) != nullptr); + EXPECT_FALSE(assetHelper->DoesSupportSkinnedAnimation()); + } + + TEST_F(NvClothMeshAssetHelper, MeshAssetHelper_CreateAssetHelperWithActor_ReturnsValidMeshAssetHelper) { { auto actor = AZStd::make_unique("actor_test"); @@ -112,10 +123,11 @@ namespace UnitTest AZStd::unique_ptr assetHelper = NvCloth::AssetHelper::CreateAssetHelper(m_actorComponent->GetEntityId()); EXPECT_TRUE(assetHelper.get() != nullptr); - EXPECT_TRUE(azrtti_cast(assetHelper.get()) != nullptr); + EXPECT_TRUE(azrtti_cast(assetHelper.get()) != nullptr); + EXPECT_TRUE(assetHelper->DoesSupportSkinnedAnimation()); } - TEST_F(NvClothActorAssetHelper, ActorAssetHelper_DoesSupportSkinnedAnimation_ReturnsTrue) + TEST_F(NvClothMeshAssetHelper, MeshAssetHelper_DoesSupportSkinnedAnimation_ReturnsTrue) { { auto actor = AZStd::make_unique("actor_test"); @@ -129,7 +141,7 @@ namespace UnitTest EXPECT_TRUE(assetHelper->DoesSupportSkinnedAnimation()); } - TEST_F(NvClothActorAssetHelper, ActorAssetHelper_GatherClothMeshNodesWithEmptyActor_ReturnsEmptyInfo) + TEST_F(NvClothMeshAssetHelper, MeshAssetHelper_GatherClothMeshNodesWithEmptyActor_ReturnsEmptyInfo) { { auto actor = AZStd::make_unique("actor_test"); @@ -146,7 +158,7 @@ namespace UnitTest EXPECT_TRUE(meshNodes.empty()); } - TEST_F(NvClothActorAssetHelper, ActorAssetHelper_ObtainClothMeshNodeInfoWithEmptyActor_ReturnsFalse) + TEST_F(NvClothMeshAssetHelper, MeshAssetHelper_ObtainClothMeshNodeInfoWithEmptyActor_ReturnsFalse) { { auto actor = AZStd::make_unique("actor_test"); @@ -164,7 +176,11 @@ namespace UnitTest EXPECT_FALSE(infoObtained); } - TEST_F(NvClothActorAssetHelper, ActorAssetHelper_GatherClothMeshNodesWithActor_ReturnsCorrectMeshNodeList) + // [TODO LYN-1891] + // Revisit when Cloth Component Mesh works with Actors adapted to Atom models. + // Editor Cloth component now uses the new AZ::Render::MeshComponentNotificationBus::OnModelReady + // notification and this test does not setup a model yet. + TEST_F(NvClothMeshAssetHelper, DISABLED_MeshAssetHelper_GatherClothMeshNodesWithActor_ReturnsCorrectMeshNodeList) { { auto actor = AZStd::make_unique("actor_test"); @@ -185,12 +201,16 @@ namespace UnitTest NvCloth::MeshNodeList meshNodes; assetHelper->GatherClothMeshNodes(meshNodes); - EXPECT_EQ(meshNodes.size(), 2); + ASSERT_EQ(meshNodes.size(), 2); EXPECT_TRUE(meshNodes[0] == MeshNode1Name); EXPECT_TRUE(meshNodes[1] == MeshNode2Name); } - - TEST_F(NvClothActorAssetHelper, ActorAssetHelper_ObtainClothMeshNodeInfoWithActor_ReturnsCorrectClothInfo) + + // [TODO LYN-1891] + // Revisit when Cloth Component Mesh works with Actors adapted to Atom models. + // Editor Cloth component now uses the new AZ::Render::MeshComponentNotificationBus::OnModelReady + // notification and this test does not setup a model yet. + TEST_F(NvClothMeshAssetHelper, DISABLED_MeshAssetHelper_ObtainClothMeshNodeInfoWithActor_ReturnsCorrectClothInfo) { { auto actor = AZStd::make_unique("actor_test"); @@ -215,7 +235,7 @@ namespace UnitTest EXPECT_TRUE(infoObtained); EXPECT_EQ(meshNodeInfo.m_lodLevel, LodLevel); - EXPECT_EQ(meshNodeInfo.m_subMeshes.size(), 1); + ASSERT_EQ(meshNodeInfo.m_subMeshes.size(), 1); EXPECT_EQ(meshNodeInfo.m_subMeshes[0].m_primitiveIndex, 2); EXPECT_EQ(meshNodeInfo.m_subMeshes[0].m_verticesFirstIndex, 0); EXPECT_EQ(meshNodeInfo.m_subMeshes[0].m_numVertices, MeshVertices.size()); From 22d6e1ec0dfd41a49d2e8b37e4ee71566a274838 Mon Sep 17 00:00:00 2001 From: srikappa Date: Fri, 16 Apr 2021 16:18:34 -0700 Subject: [PATCH 06/67] Modularized undo instannce update undo operation and enabled setting container entity to be selected --- .../Prefab/PrefabPublicHandler.cpp | 20 ++++--------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp index b97e9ebd98..0ce929217d 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp @@ -146,15 +146,8 @@ namespace AzToolsFramework "(A null instance is returned).")); } - PrefabDom commonRootInstanceDomAfterCreate; - m_instanceToTemplateInterface->GenerateDomForInstance( - commonRootInstanceDomAfterCreate, commonRootEntityOwningInstance->get()); - - auto commonRootInstanceUndoNode = aznew PrefabUndoInstance("Undo Instance Node"); - commonRootInstanceUndoNode->Capture( - commonRootInstanceDomBeforeCreate, commonRootInstanceDomAfterCreate, commonRootOwningTemplateId); - commonRootInstanceUndoNode->SetParent(undoBatch.GetUndoBatch()); - commonRootInstanceUndoNode->Redo(); + PrefabUndoHelpers::UpdatePrefabInstance( + commonRootEntityOwningInstance->get(), "Undo detaching entity", commonRootInstanceDomBeforeCreate, undoBatch.GetUndoBatch()); linkRemoveUndo->Redo(); @@ -208,22 +201,17 @@ namespace AzToolsFramework undoBatch.MarkEntityDirty(topLevelEntity->GetId()); AZ::TransformBus::Event(topLevelEntity->GetId(), &AZ::TransformBus::Events::SetParent, containerEntityId); } - - /* + // Select Container Entity { auto selectionUndo = aznew SelectionCommand({containerEntityId}, "Select Prefab Container Entity"); selectionUndo->SetParent(undoBatch.GetUndoBatch()); - ToolsApplicationRequestBus::Broadcast(&ToolsApplicationRequestBus::Events::RunRedoSeparately, selectionUndo); - }*/ + } } // Save Template to file m_prefabLoaderInterface->SaveTemplate(instance->get().GetTemplateId()); - - // This function does not support undo/redo yet, so clear the undo stack to prevent issues. - //AzToolsFramework::ToolsApplicationRequestBus::Broadcast(&AzToolsFramework::ToolsApplicationRequestBus::Events::FlushUndo); return AZ::Success(); } From 82f6d249eb11edb3907c59d97e67b5348558f6e5 Mon Sep 17 00:00:00 2001 From: Chris Santora Date: Fri, 16 Apr 2021 23:01:27 -0700 Subject: [PATCH 07/67] ATOM-14765 Add More Texture Preset Masks Several image preset files had a full list of file masks for only one platform. I made sure that the same list was applied to every platform including the default preset. Removed the "Swizzle" command from Displacement.preset. Swizzle "aaa1" is wrong since this preset expects a single channel image. Added "_col" to Albedo.preset as an abbreviation for "_color". Added "_rough" to Roughness.preset as it's a common abbreviation. Added "_rgbmask" filter to LayerMask.preset to correspond to the "_mask" filter in Grayscale.preset. Added a warning when an image can't be processed according to the assigned preset due to dimension issues. Otherwise it's difficult to figure out why it's using the ReferenceImage preset instead of what was expected. Resized the "bark" textures to make them compatible with the image presets. Removed the "bark1disp2.jgp" image and just applied the changes to the original bark1disp.jpg". It's just blurred a bit to remove excessive noise. Renamed all the "bark" textures to include an underscore "_" after "bark1" to get the image pipeline to properly recognize the file masks. Testing: AtomSampleViewer automation. All assets in AtomTest build. Opened several levels in AtomTest. --- .../BuilderSettings/BuilderSettingManager.cpp | 4 ++ .../Code/Source/ImageBuilderComponent.cpp | 2 +- .../ImageProcessingAtom/Config/Albedo.preset | 5 ++ .../Config/AmbientOcclusion.preset | 20 ++++++-- .../Config/Displacement.preset | 49 +++++++++++++++---- .../Config/Emissive.preset | 24 +++++++-- .../Config/LayerMask.preset | 15 ++++-- .../Config/NormalsWithSmoothness.preset | 24 +++++++-- .../ImageProcessingAtom/Config/Opacity.preset | 40 ++++++++++++--- .../Config/Reflectance.preset | 15 ++++-- .../001_ManyFeatures.material | 12 ++--- .../002_ParallaxPdo.material | 8 +-- .../TestData/Textures/cc0/bark1_col.jpg | 3 ++ .../TestData/Textures/cc0/bark1_disp.jpg | 3 ++ .../TestData/Textures/cc0/bark1_norm.jpg | 3 ++ .../TestData/Textures/cc0/bark1_roughness.jpg | 3 ++ .../TestData/Textures/cc0/bark1col.jpg | 3 -- .../TestData/Textures/cc0/bark1disp.jpg | 3 -- .../TestData/Textures/cc0/bark1disp2.jpg | 3 -- .../TestData/Textures/cc0/bark1norm.jpg | 3 -- .../TestData/Textures/cc0/bark1roughness.jpg | 3 -- 21 files changed, 182 insertions(+), 63 deletions(-) create mode 100644 Gems/Atom/TestData/TestData/Textures/cc0/bark1_col.jpg create mode 100644 Gems/Atom/TestData/TestData/Textures/cc0/bark1_disp.jpg create mode 100644 Gems/Atom/TestData/TestData/Textures/cc0/bark1_norm.jpg create mode 100644 Gems/Atom/TestData/TestData/Textures/cc0/bark1_roughness.jpg delete mode 100644 Gems/Atom/TestData/TestData/Textures/cc0/bark1col.jpg delete mode 100644 Gems/Atom/TestData/TestData/Textures/cc0/bark1disp.jpg delete mode 100644 Gems/Atom/TestData/TestData/Textures/cc0/bark1disp2.jpg delete mode 100644 Gems/Atom/TestData/TestData/Textures/cc0/bark1norm.jpg delete mode 100644 Gems/Atom/TestData/TestData/Textures/cc0/bark1roughness.jpg diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/BuilderSettingManager.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/BuilderSettingManager.cpp index e30fb9c6a2..3b6c906c10 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/BuilderSettingManager.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/BuilderSettings/BuilderSettingManager.cpp @@ -524,6 +524,10 @@ namespace ImageProcessingAtom { return outPreset; } + else + { + AZ_Warning("Image Processing", false, "Image dimensions are not compatible with preset '%s'. The default preset will be used.", presetInfo->m_name.c_str()); + } } //uncompressed one which could be used for almost everything diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageBuilderComponent.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageBuilderComponent.cpp index 4de024c088..5d5fd21b44 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageBuilderComponent.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageBuilderComponent.cpp @@ -79,7 +79,7 @@ namespace ImageProcessingAtom builderDescriptor.m_busId = azrtti_typeid(); builderDescriptor.m_createJobFunction = AZStd::bind(&ImageBuilderWorker::CreateJobs, &m_imageBuilder, AZStd::placeholders::_1, AZStd::placeholders::_2); builderDescriptor.m_processJobFunction = AZStd::bind(&ImageBuilderWorker::ProcessJob, &m_imageBuilder, AZStd::placeholders::_1, AZStd::placeholders::_2); - builderDescriptor.m_version = 19; // [ATOM-14459] + builderDescriptor.m_version = 22; // [ATOM-14765] builderDescriptor.m_analysisFingerprint = ImageProcessingAtom::BuilderSettingManager::Instance()->GetAnalysisFingerprint(); m_imageBuilder.BusConnect(builderDescriptor.m_busId); AssetBuilderSDK::AssetBuilderBus::Broadcast(&AssetBuilderSDK::AssetBuilderBusTraits::RegisterBuilderInformation, builderDescriptor); diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/Albedo.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/Albedo.preset index d81fefede2..c00185e255 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/Albedo.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/Albedo.preset @@ -11,6 +11,7 @@ "_basecolor", "_diff", "_color", + "_col", "_albedo", "_alb", "_bc", @@ -31,6 +32,7 @@ "FileMasks": [ "_diff", "_color", + "_col", "_albedo", "_alb", "_basecolor", @@ -51,6 +53,7 @@ "FileMasks": [ "_diff", "_color", + "_col", "_albedo", "_alb", "_basecolor", @@ -71,6 +74,7 @@ "FileMasks": [ "_diff", "_color", + "_col", "_albedo", "_alb", "_basecolor", @@ -91,6 +95,7 @@ "FileMasks": [ "_diff", "_color", + "_col", "_albedo", "_alb", "_basecolor", diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/AmbientOcclusion.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/AmbientOcclusion.preset index 222a1d4c7b..6b1197e28d 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/AmbientOcclusion.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/AmbientOcclusion.preset @@ -9,7 +9,10 @@ "SourceColor": "Linear", "DestColor": "Linear", "FileMasks": [ - "_ao" + "_ao", + "_ambocc", + "_amb", + "_ambientocclusion" ], "PixelFormat": "BC4" }, @@ -33,7 +36,10 @@ "SourceColor": "Linear", "DestColor": "Linear", "FileMasks": [ - "_ao" + "_ao", + "_ambocc", + "_amb", + "_ambientocclusion" ], "PixelFormat": "EAC_R11" }, @@ -43,7 +49,10 @@ "SourceColor": "Linear", "DestColor": "Linear", "FileMasks": [ - "_ao" + "_ao", + "_ambocc", + "_amb", + "_ambientocclusion" ], "PixelFormat": "BC4" }, @@ -53,7 +62,10 @@ "SourceColor": "Linear", "DestColor": "Linear", "FileMasks": [ - "_ao" + "_ao", + "_ambocc", + "_amb", + "_ambientocclusion" ], "PixelFormat": "BC4" } diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/Displacement.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/Displacement.preset index 1cac9c1d3a..569ff6ce23 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/Displacement.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/Displacement.preset @@ -9,12 +9,20 @@ "SourceColor": "Linear", "DestColor": "Linear", "FileMasks": [ - "_displ" + "_displ", + "_disp", + "_dsp", + "_d", + "_dm", + "_displacement", + "_height", + "_hm", + "_ht", + "_h" ], "PixelFormat": "BC4", "DiscardAlpha": true, "IsPowerOf2": true, - "Swizzle": "aaa1", "MipMapSetting": { "MipGenType": "Box" } @@ -26,13 +34,21 @@ "SourceColor": "Linear", "DestColor": "Linear", "FileMasks": [ - "_displ" + "_displ", + "_disp", + "_dsp", + "_d", + "_dm", + "_displacement", + "_height", + "_hm", + "_ht", + "_h" ], "PixelFormat": "EAC_R11", "DiscardAlpha": true, "IsPowerOf2": true, "SizeReduceLevel": 3, - "Swizzle": "aaa1", "MipMapSetting": { "MipGenType": "Box" } @@ -57,7 +73,6 @@ "PixelFormat": "EAC_R11", "DiscardAlpha": true, "IsPowerOf2": true, - "Swizzle": "aaa1", "MipMapSetting": { "MipGenType": "Box" } @@ -68,12 +83,20 @@ "SourceColor": "Linear", "DestColor": "Linear", "FileMasks": [ - "_displ" + "_displ", + "_disp", + "_dsp", + "_d", + "_dm", + "_displacement", + "_height", + "_hm", + "_ht", + "_h" ], "PixelFormat": "BC4", "DiscardAlpha": true, "IsPowerOf2": true, - "Swizzle": "aaa1", "MipMapSetting": { "MipGenType": "Box" } @@ -84,12 +107,20 @@ "SourceColor": "Linear", "DestColor": "Linear", "FileMasks": [ - "_displ" + "_displ", + "_disp", + "_dsp", + "_d", + "_dm", + "_displacement", + "_height", + "_hm", + "_ht", + "_h" ], "PixelFormat": "BC4", "DiscardAlpha": true, "IsPowerOf2": true, - "Swizzle": "aaa1", "MipMapSetting": { "MipGenType": "Box" } diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/Emissive.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/Emissive.preset index d3290eb469..5dc75397a0 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/Emissive.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/Emissive.preset @@ -8,7 +8,11 @@ "Name": "Emissive", "RGB_Weight": "CIEXYZ", "FileMasks": [ - "_emissive" + "_emissive", + "_e", + "_glow", + "_em", + "_emit" ], "PixelFormat": "BC7", "DiscardAlpha": true @@ -33,7 +37,11 @@ "Name": "Emissive", "RGB_Weight": "CIEXYZ", "FileMasks": [ - "_emissive" + "_emissive", + "_e", + "_glow", + "_em", + "_emit" ], "PixelFormat": "ASTC_6x6", "DiscardAlpha": true @@ -43,7 +51,11 @@ "Name": "Emissive", "RGB_Weight": "CIEXYZ", "FileMasks": [ - "_emissive" + "_emissive", + "_e", + "_glow", + "_em", + "_emit" ], "PixelFormat": "BC7", "DiscardAlpha": true @@ -53,7 +65,11 @@ "Name": "Emissive", "RGB_Weight": "CIEXYZ", "FileMasks": [ - "_emissive" + "_emissive", + "_e", + "_glow", + "_em", + "_emit" ], "PixelFormat": "BC7", "DiscardAlpha": true diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/LayerMask.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/LayerMask.preset index 363a6f9f9d..66927b175c 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/LayerMask.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/LayerMask.preset @@ -9,7 +9,8 @@ "SourceColor": "Linear", "DestColor": "Linear", "FileMasks": [ - "_layers" + "_layers", + "_rgbmask" ], "PixelFormat": "R8G8B8X8" }, @@ -20,7 +21,8 @@ "SourceColor": "Linear", "DestColor": "Linear", "FileMasks": [ - "_layers" + "_layers", + "_rgbmask" ], "PixelFormat": "R8G8B8X8" }, @@ -30,7 +32,8 @@ "SourceColor": "Linear", "DestColor": "Linear", "FileMasks": [ - "_layers" + "_layers", + "_rgbmask" ], "PixelFormat": "R8G8B8X8" }, @@ -40,7 +43,8 @@ "SourceColor": "Linear", "DestColor": "Linear", "FileMasks": [ - "_layers" + "_layers", + "_rgbmask" ], "PixelFormat": "R8G8B8X8" }, @@ -50,7 +54,8 @@ "SourceColor": "Linear", "DestColor": "Linear", "FileMasks": [ - "_layers" + "_layers", + "_rgbmask" ], "PixelFormat": "R8G8B8X8" } diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness.preset index fb8b1da6a4..fdb24ecd09 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness.preset @@ -9,7 +9,11 @@ "SourceColor": "Linear", "DestColor": "Linear", "FileMasks": [ - "_ddna" + "_ddna", + "_normala", + "_nrma", + "_nma", + "_na" ], "PixelFormat": "BC5s", "PixelFormatAlpha": "BC4", @@ -48,7 +52,11 @@ "SourceColor": "Linear", "DestColor": "Linear", "FileMasks": [ - "_ddna" + "_ddna", + "_normala", + "_nrma", + "_nma", + "_na" ], "PixelFormat": "ASTC_4x4", "PixelFormatAlpha": "ASTC_4x4", @@ -65,7 +73,11 @@ "SourceColor": "Linear", "DestColor": "Linear", "FileMasks": [ - "_ddna" + "_ddna", + "_normala", + "_nrma", + "_nma", + "_na" ], "PixelFormat": "BC5s", "PixelFormatAlpha": "BC4", @@ -82,7 +94,11 @@ "SourceColor": "Linear", "DestColor": "Linear", "FileMasks": [ - "_ddna" + "_ddna", + "_normala", + "_nrma", + "_nma", + "_na" ], "PixelFormat": "BC5s", "PixelFormatAlpha": "BC4", diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/Opacity.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/Opacity.preset index bd9299d71d..6d0d9009a5 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/Opacity.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/Opacity.preset @@ -9,9 +9,16 @@ "SourceColor": "Linear", "DestColor": "Linear", "FileMasks": [ - "_sss", - "_trans", - "_opac" + "_sss", + "_trans", + "_opac", + "_opacity", + "_o", + "_opac", + "_op", + "_mask", + "_msk", + "_blend" ], "PixelFormat": "BC4", "IsPowerOf2": true, @@ -28,7 +35,14 @@ "FileMasks": [ "_sss", "_trans", - "_opac" + "_opac", + "_opacity", + "_o", + "_opac", + "_op", + "_mask", + "_msk", + "_blend" ], "PixelFormat": "EAC_R11", "IsPowerOf2": true, @@ -67,7 +81,14 @@ "FileMasks": [ "_sss", "_trans", - "_opac" + "_opac", + "_opacity", + "_o", + "_opac", + "_op", + "_mask", + "_msk", + "_blend" ], "PixelFormat": "BC4", "IsPowerOf2": true, @@ -83,7 +104,14 @@ "FileMasks": [ "_sss", "_trans", - "_opac" + "_opac", + "_opacity", + "_o", + "_opac", + "_op", + "_mask", + "_msk", + "_blend" ], "PixelFormat": "BC4", "IsPowerOf2": true, diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/Reflectance.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/Reflectance.preset index ca773debbb..7a6af50728 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/Reflectance.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/Reflectance.preset @@ -24,7 +24,8 @@ "_mt", "_metalness", "_metallic", - "_roughness" + "_roughness", + "_rough" ], "PixelFormat": "BC1", "IsPowerOf2": true, @@ -53,7 +54,8 @@ "_mt", "_metalness", "_metallic", - "_roughness" + "_roughness", + "_rough" ], "PixelFormat": "ETC2", "IsPowerOf2": true, @@ -81,7 +83,8 @@ "_mt", "_metalness", "_metallic", - "_roughness" + "_roughness", + "_rough" ], "PixelFormat": "ASTC_6x6", "IsPowerOf2": true, @@ -109,7 +112,8 @@ "_mt", "_metalness", "_metallic", - "_roughness" + "_roughness", + "_rough" ], "PixelFormat": "BC1", "IsPowerOf2": true, @@ -137,7 +141,8 @@ "_mt", "_metalness", "_metallic", - "_roughness" + "_roughness", + "_rough" ], "PixelFormat": "BC1", "IsPowerOf2": true, diff --git a/Gems/Atom/TestData/TestData/Materials/StandardMultilayerPbrTestCases/001_ManyFeatures.material b/Gems/Atom/TestData/TestData/Materials/StandardMultilayerPbrTestCases/001_ManyFeatures.material index c013eecae5..e84c6296be 100644 --- a/Gems/Atom/TestData/TestData/Materials/StandardMultilayerPbrTestCases/001_ManyFeatures.material +++ b/Gems/Atom/TestData/TestData/Materials/StandardMultilayerPbrTestCases/001_ManyFeatures.material @@ -7,7 +7,7 @@ "layer1_ambientOcclusion": { "enable": true, "factor": 1.6399999856948853, - "textureMap": "TestData/Textures/cc0/bark1disp2.jpg" + "textureMap": "TestData/Textures/cc0/bark1_disp.jpg" }, "layer1_baseColor": { "color": [ @@ -16,7 +16,7 @@ 0.12039368599653244, 1.0 ], - "textureMap": "TestData/Textures/cc0/bark1col.jpg" + "textureMap": "TestData/Textures/cc0/bark1_col.jpg" }, "layer1_emissive": { "color": [ @@ -30,16 +30,16 @@ "layer1_normal": { "factor": 0.4444443881511688, "flipY": true, - "textureMap": "TestData/Textures/cc0/bark1norm.jpg" + "textureMap": "TestData/Textures/cc0/bark1_norm.jpg" }, "layer1_parallax": { "enable": true, "factor": 0.02500000037252903, - "textureMap": "TestData/Textures/cc0/bark1disp2.jpg" + "textureMap": "TestData/Textures/cc0/bark1_disp.jpg" }, "layer1_roughness": { "lowerBound": 0.010100999847054482, - "textureMap": "TestData/Textures/cc0/bark1roughness.jpg" + "textureMap": "TestData/Textures/cc0/bark1_roughness.jpg" }, "layer1_specularF0": { "factor": 0.5099999904632568, @@ -55,7 +55,7 @@ }, "layer2_ambientOcclusion": { "factor": 1.2200000286102296, - "textureMap": "TestData/Textures/cc0/bark1disp2.jpg" + "textureMap": "TestData/Textures/cc0/bark1_disp.jpg" }, "layer2_baseColor": { "textureMap": "TestData/Textures/cc0/Lava004_1K_Color.jpg" diff --git a/Gems/Atom/TestData/TestData/Materials/StandardMultilayerPbrTestCases/002_ParallaxPdo.material b/Gems/Atom/TestData/TestData/Materials/StandardMultilayerPbrTestCases/002_ParallaxPdo.material index 471b437bd2..126e1a7fcb 100644 --- a/Gems/Atom/TestData/TestData/Materials/StandardMultilayerPbrTestCases/002_ParallaxPdo.material +++ b/Gems/Atom/TestData/TestData/Materials/StandardMultilayerPbrTestCases/002_ParallaxPdo.material @@ -5,18 +5,18 @@ "propertyLayoutVersion": 3, "properties": { "layer1_baseColor": { - "textureMap": "TestData/Textures/cc0/bark1col.jpg" + "textureMap": "TestData/Textures/cc0/bark1_col.jpg" }, "layer1_normal": { - "textureMap": "TestData/Textures/cc0/bark1norm.jpg" + "textureMap": "TestData/Textures/cc0/bark1_norm.jpg" }, "layer1_parallax": { "enable": true, "factor": 0.03999999910593033, - "textureMap": "TestData/Textures/cc0/bark1disp2.jpg" + "textureMap": "TestData/Textures/cc0/bark1_disp.jpg" }, "layer1_roughness": { - "textureMap": "TestData/Textures/cc0/bark1roughness.jpg" + "textureMap": "TestData/Textures/cc0/bark1_roughness.jpg" }, "layer2_baseColor": { "textureMap": "TestData/Textures/cc0/Rock030_2K_Color.jpg" diff --git a/Gems/Atom/TestData/TestData/Textures/cc0/bark1_col.jpg b/Gems/Atom/TestData/TestData/Textures/cc0/bark1_col.jpg new file mode 100644 index 0000000000..0a4c5f380c --- /dev/null +++ b/Gems/Atom/TestData/TestData/Textures/cc0/bark1_col.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd44119610135ca5674de7144647df6580d7ac3e03576e9a8e87e741548e7364 +size 2105853 diff --git a/Gems/Atom/TestData/TestData/Textures/cc0/bark1_disp.jpg b/Gems/Atom/TestData/TestData/Textures/cc0/bark1_disp.jpg new file mode 100644 index 0000000000..57c74af488 --- /dev/null +++ b/Gems/Atom/TestData/TestData/Textures/cc0/bark1_disp.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4dbb74aac2450d6457bb02d36bd3d74e671c2dc7e938e090331151ecc52d545b +size 845683 diff --git a/Gems/Atom/TestData/TestData/Textures/cc0/bark1_norm.jpg b/Gems/Atom/TestData/TestData/Textures/cc0/bark1_norm.jpg new file mode 100644 index 0000000000..41b1d6d30b --- /dev/null +++ b/Gems/Atom/TestData/TestData/Textures/cc0/bark1_norm.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e69a3844c3a595245619a9dda4ed8981476a516ad3648a8b4dfb8151a68b0db5 +size 4439966 diff --git a/Gems/Atom/TestData/TestData/Textures/cc0/bark1_roughness.jpg b/Gems/Atom/TestData/TestData/Textures/cc0/bark1_roughness.jpg new file mode 100644 index 0000000000..2e7ccba4e0 --- /dev/null +++ b/Gems/Atom/TestData/TestData/Textures/cc0/bark1_roughness.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8caa5961599624a6414d7277c389dd85b175b9587989b815ffd90aff8f62b6c +size 1747230 diff --git a/Gems/Atom/TestData/TestData/Textures/cc0/bark1col.jpg b/Gems/Atom/TestData/TestData/Textures/cc0/bark1col.jpg deleted file mode 100644 index 944a968d5b..0000000000 --- a/Gems/Atom/TestData/TestData/Textures/cc0/bark1col.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:24f5c234f11a1b29de9000b5a7ba74262f1bc5ebd2227ca1e85a12fa0e8b5237 -size 8273450 diff --git a/Gems/Atom/TestData/TestData/Textures/cc0/bark1disp.jpg b/Gems/Atom/TestData/TestData/Textures/cc0/bark1disp.jpg deleted file mode 100644 index c8a2a44e9b..0000000000 --- a/Gems/Atom/TestData/TestData/Textures/cc0/bark1disp.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0112ac235da74c60105b0e1a2da49c1e4ab7b89a60960a60cec54ad65db0b4b6 -size 4585685 diff --git a/Gems/Atom/TestData/TestData/Textures/cc0/bark1disp2.jpg b/Gems/Atom/TestData/TestData/Textures/cc0/bark1disp2.jpg deleted file mode 100644 index f93d68141b..0000000000 --- a/Gems/Atom/TestData/TestData/Textures/cc0/bark1disp2.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6a202449e5d787e76d959b6bee7a4b60b3821441ac918944c21358742ed1c546 -size 878112 diff --git a/Gems/Atom/TestData/TestData/Textures/cc0/bark1norm.jpg b/Gems/Atom/TestData/TestData/Textures/cc0/bark1norm.jpg deleted file mode 100644 index f68ed8b696..0000000000 --- a/Gems/Atom/TestData/TestData/Textures/cc0/bark1norm.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b0100b3c356d76ae1cb4c42bd4cc9c58ff359155aab6b9e3c1b205fe25956738 -size 16848020 diff --git a/Gems/Atom/TestData/TestData/Textures/cc0/bark1roughness.jpg b/Gems/Atom/TestData/TestData/Textures/cc0/bark1roughness.jpg deleted file mode 100644 index f6e7acd7b6..0000000000 --- a/Gems/Atom/TestData/TestData/Textures/cc0/bark1roughness.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:11badf07e6a7d0501c915f669ff1b14c8744d427d47d06e2fdca46b8f86839c9 -size 4441528 From 007589a98de65718ef52ad623a4f05156049a61e Mon Sep 17 00:00:00 2001 From: dmcdiar Date: Mon, 19 Apr 2021 02:29:20 -0700 Subject: [PATCH 08/67] Added DiffuseProbeGridClassification pass. Updated RayTracing shaders to use the new light types. --- .../Assets/Passes/DiffuseProbeGridUpdate.pass | 4 + .../Assets/Passes/PassTemplates.azasset | 4 + .../RayTracingSceneSrg.azsli | 36 +- .../diffuseprobegridblenddistance.azshader | Bin 40240 -> 41674 bytes ...begridblenddistance_dx12_0.azshadervariant | Bin 11626 -> 12166 bytes ...begridblenddistance_null_0.azshadervariant | Bin 4502 -> 4502 bytes ...iffuseprobegridblenddistance_passsrg.azsrg | 328 ++++++++++++++-- ...gridblenddistance_vulkan_0.azshadervariant | Bin 11798 -> 12234 bytes .../diffuseprobegridblendirradiance.azshader | Bin 40262 -> 41696 bytes ...gridblendirradiance_dx12_0.azshadervariant | Bin 12102 -> 12630 bytes ...gridblendirradiance_null_0.azshadervariant | Bin 4502 -> 4502 bytes ...fuseprobegridblendirradiance_passsrg.azsrg | 328 ++++++++++++++-- ...idblendirradiance_vulkan_0.azshadervariant | Bin 12974 -> 13410 bytes ...iffuseprobegridborderupdatecolumn.azshader | Bin 10253 -> 10253 bytes ...dborderupdatecolumn_dx12_0.azshadervariant | Bin 8498 -> 8498 bytes ...dborderupdatecolumn_null_0.azshadervariant | Bin 4502 -> 4502 bytes ...orderupdatecolumn_vulkan_0.azshadervariant | Bin 6717 -> 6717 bytes .../diffuseprobegridborderupdaterow.azshader | Bin 10250 -> 10250 bytes ...gridborderupdaterow_dx12_0.azshadervariant | Bin 8314 -> 8314 bytes ...gridborderupdaterow_null_0.azshadervariant | Bin 4502 -> 4502 bytes ...idborderupdaterow_vulkan_0.azshadervariant | Bin 6238 -> 6238 bytes .../diffuseprobegridraytracing.azshader | Bin 75199 -> 79309 bytes ...probegridraytracing_dx12_0.azshadervariant | Bin 31618 -> 34086 bytes ...probegridraytracing_null_0.azshadervariant | Bin 4502 -> 4502 bytes ...obegridraytracing_vulkan_0.azshadervariant | Bin 33896 -> 36232 bytes ...fuseprobegridraytracingclosesthit.azshader | Bin 75209 -> 79319 bytes ...aytracingclosesthit_dx12_0.azshadervariant | Bin 16294 -> 16754 bytes ...aytracingclosesthit_null_0.azshadervariant | Bin 4502 -> 4502 bytes ...tracingclosesthit_vulkan_0.azshadervariant | Bin 8872 -> 9172 bytes ...raytracingcommon_raytracingglobalsrg.azsrg | 352 ++++++++++++++--- .../diffuseprobegridraytracingmiss.azshader | Bin 75203 -> 79313 bytes ...egridraytracingmiss_dx12_0.azshadervariant | Bin 16394 -> 16838 bytes ...egridraytracingmiss_null_0.azshadervariant | Bin 4502 -> 4502 bytes ...ridraytracingmiss_vulkan_0.azshadervariant | Bin 10276 -> 10364 bytes .../diffuseprobegridrelocation.azshader | Bin 42190 -> 42190 bytes ...probegridrelocation_dx12_0.azshadervariant | Bin 12098 -> 12098 bytes ...probegridrelocation_null_0.azshadervariant | Bin 4502 -> 4502 bytes ...obegridrelocation_vulkan_0.azshadervariant | Bin 13314 -> 13314 bytes .../diffuseprobegridrender.azshader | Bin 112069 -> 116296 bytes ...fuseprobegridrender_dx12_0.azshadervariant | Bin 33020 -> 33592 bytes ...fuseprobegridrender_null_0.azshadervariant | Bin 4854 -> 4854 bytes .../diffuseprobegridrender_objectsrg.azsrg | 354 +++++++++++++++--- ...seprobegridrender_vulkan_0.azshadervariant | Bin 24334 -> 24478 bytes .../Code/Source/CommonSystemComponent.cpp | 2 + .../DiffuseProbeGrid/DiffuseProbeGrid.cpp | 49 +++ .../DiffuseProbeGrid/DiffuseProbeGrid.h | 9 + .../DiffuseProbeGridBlendDistancePass.cpp | 10 + .../DiffuseProbeGridBlendIrradiancePass.cpp | 10 + .../DiffuseProbeGridFeatureProcessor.cpp | 1 + .../DiffuseProbeGridRayTracingPass.cpp | 13 + .../DiffuseProbeGridRenderPass.cpp | 10 + .../RayTracing/RayTracingFeatureProcessor.cpp | 20 +- .../Code/atom_feature_common_files.cmake | 2 + 53 files changed, 1361 insertions(+), 171 deletions(-) diff --git a/Gems/Atom/Feature/Common/Assets/Passes/DiffuseProbeGridUpdate.pass b/Gems/Atom/Feature/Common/Assets/Passes/DiffuseProbeGridUpdate.pass index 3d4057f6df..6852cc2d1a 100644 --- a/Gems/Atom/Feature/Common/Assets/Passes/DiffuseProbeGridUpdate.pass +++ b/Gems/Atom/Feature/Common/Assets/Passes/DiffuseProbeGridUpdate.pass @@ -26,6 +26,10 @@ { "Name": "DiffuseProbeGridRelocationPass", "TemplateName": "DiffuseProbeGridRelocationPassTemplate" + }, + { + "Name": "DiffuseProbeGridClassificationPass", + "TemplateName": "DiffuseProbeGridClassificationPassTemplate" } ] } diff --git a/Gems/Atom/Feature/Common/Assets/Passes/PassTemplates.azasset b/Gems/Atom/Feature/Common/Assets/Passes/PassTemplates.azasset index 3cedd78210..29ccb1db09 100644 --- a/Gems/Atom/Feature/Common/Assets/Passes/PassTemplates.azasset +++ b/Gems/Atom/Feature/Common/Assets/Passes/PassTemplates.azasset @@ -416,6 +416,10 @@ "Name": "DiffuseProbeGridRelocationPassTemplate", "Path": "Passes/DiffuseProbeGridRelocation.pass" }, + { + "Name": "DiffuseProbeGridClassificationPassTemplate", + "Path": "Passes/DiffuseProbeGridClassification.pass" + }, { "Name": "DiffuseGlobalIlluminationPassTemplate", "Path": "Passes/DiffuseGlobalIllumination.pass" diff --git a/Gems/Atom/Feature/Common/Assets/ShaderResourceGroups/RayTracingSceneSrg.azsli b/Gems/Atom/Feature/Common/Assets/ShaderResourceGroups/RayTracingSceneSrg.azsli index 2025e3b81b..0aeb43bcf2 100644 --- a/Gems/Atom/Feature/Common/Assets/ShaderResourceGroups/RayTracingSceneSrg.azsli +++ b/Gems/Atom/Feature/Common/Assets/ShaderResourceGroups/RayTracingSceneSrg.azsli @@ -18,7 +18,7 @@ partial ShaderResourceGroup RayTracingSceneSrg { RaytracingAccelerationStructure m_scene; - // directional Lights + // directional lights struct DirectionalLight { float3 m_direction; @@ -30,7 +30,33 @@ partial ShaderResourceGroup RayTracingSceneSrg StructuredBuffer m_directionalLights; uint m_directionalLightCount; - // point Lights + // simple point lights + struct SimplePointLight + { + float3 m_position; + float m_invAttenuationRadiusSquared; // For a radius at which this light no longer has an effect, 1 / radius^2. + float3 m_rgbIntensityCandelas; + float m_padding; // explicit padding. + }; + + StructuredBuffer m_simplePointLights; + uint m_simplePointLightCount; + + // simple spot lights + struct SimpleSpotLight + { + float3 m_position; + float m_invAttenuationRadiusSquared; // For a radius at which this light no longer has an effect, 1 / radius^2. + float3 m_direction; + float m_cosInnerConeAngle; // cosine of the outer cone angle + float3 m_rgbIntensityCandelas; + float m_cosOuterConeAngle; // cosine of the inner cone angle + }; + + StructuredBuffer m_simpleSpotLights; + uint m_simpleSpotLightCount; + + // point lights (sphere) struct PointLight { float3 m_position; @@ -42,7 +68,7 @@ partial ShaderResourceGroup RayTracingSceneSrg StructuredBuffer m_pointLights; uint m_pointLightCount; - // disk Lights + // disk lights struct DiskLight { float3 m_position; @@ -60,7 +86,7 @@ partial ShaderResourceGroup RayTracingSceneSrg StructuredBuffer m_diskLights; uint m_diskLightCount; - // capsule Lights + // capsule lights struct CapsuleLight { float3 m_startPoint; // one of the end points of the capsule @@ -74,7 +100,7 @@ partial ShaderResourceGroup RayTracingSceneSrg StructuredBuffer m_capsuleLights; uint m_capsuleLightCount; - // quad Lights + // quad lights struct QuadLight { float3 m_position; diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance.azshader b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance.azshader index ae07080eba08c4979c64374fc9d6e974c8e409d3..4a5edc370b5c1a1d22dd012739345fd0d299317c 100644 GIT binary patch delta 804 zcmdn6i|N!+rVUc;lN+b&xFzps2M`Ylq{L|_37dLmAo@5yW4&wCD5ZbI{cJejDWb4^lo8M*JWu}R% zf*FA!TIgssd97UxkadxJI+)a*eBM46EMq@efQMyrgF`S>{6nwurVD>(VD!kOk%QjnF&-xLDmo`0+T=BQUnxF^t7Mc;4d`! zPdQlJbs|*l1h*uZF86FGt3jj~%F3zco!rnXJh{pPW?D{l4p1)9b1q!1&}2KWL@4hp zoaGQIIr(iZOqWBb*yP$ef2b-DPoN%|r|k>lDKx;`v!Nl9nVErMvSYgT=KX$uMLEjT zBpu``aOV<+L&)IA}`z<4f+VYE! J7BMg|003+5B{Tp4 delta 561 zcmX?glxf2*rVUc;oAcrAfvA_p_L?&Gk7P*mMRkPTt4CF`1*RA55Q+ zP@C)!EjPK>$p_B=z?%zIV?24mM1jfsoe^>y;*=-HxIp+EWgvOh$qT}`C*R>msL6HB z1MAnQv6w6yCNf#y4I%fxstj(AuX`<2-3*9W%`~{2yhsX|{iC)6On1~xgv-Tst543W zN0=$2sW5rA7=o|klLJu;v|q0=4oRQT?yEk!CnaaIP6pI=Br`_QepmwI2^&u!JaWmPE}{)JnxuGn)%w0smjFM z0muPvK#u~Dn6)a618tD-@wf;8b%O0dFabchxxw>8bN<@`p5P(Yj z22;;~E*w3K**AA`QjUBDHdJLF?1;6EK8}CKkVmP2yZN-yGxXZ`${*jHQy2WQ+S7I~ zX_H#UIyV6@1nBq)VW3|=mpkCSu55a6ci`8$Jz_JQTwxm`?SV^saB$4ko1hnwkCVd&aA`+djtT41~biOy5asCFL}xrKAYU2DJj&83~ciE6{nf% z`JpR&bXdY8A<2;X2{DkSeuUL&U@THwy#*$Vve)7-&~hz|;6qmMu}$#Fh~U2gDu}Sq zs9=dji3*}EEGo#dnA`-}mVP(EYZkz(YXgS`ttn{TezwLJEXW6rCWJ2FvL}3jAs>V_ zBXkj$t?~teeCWtN7#L0^V%`|?asa1=Ccoio=}^4tf{Gyoxx2lvoFRthN2sW0=770= zT*TuHpJO*KpUddHFw{FsRekGL`pw_J^~bmDH@`S^H2qHXoujwXNn=T+CQ~vermjNM``Y6)$|KdGK`j$ry~k?@s1O28phtDx)=S&h^R9S8lB0{W7+3ELjIb zb{j&N3{+$1EQD!t>`Cuv@7Mr@!2BS@1`^Gr&|2@~!!23gkXxFDHv9TCXMf{=Un2Pi z)2CF5l3N8iRzdCvS!q7t74CIp^|FMv-Qg`QZEACPOTvNN5Lgo1t@e~HDk57;_?NkM zxvH#8tJ_wjEy>MGD#?9g8{F+mZE>*{R*OhM@#RL990n|cbwaK#I~Q(l315B0EDTvK z+${+YFOwVyS-pGNGQo}=LWsT-qUWoKLWrK@LSOS{vD3f|er8^I-cDGCtq}OoLZf|Q zz1^?h0D*PkyFc0ylG@Vd#B5v86`tDy!Ac-lnTpt>CBA0shFY>;rCKt!3=U)Za=6t_ zVNSmgZna}|_+_tDp;NyU>K{}QHfTKAWqhNytVo-)GcQBCje#}i4z0!-?Xhq>#2T3O zv<33DPa781FZ!GARzvEdzT(^C>7N#NS-CryG!kDr$jZJ|HdRu`yQtX4@dtxX@Ao!8 z81KE`JN%@5a-=sD@AijD*+Zgl!n|5sb)kq3{iUbp=WY3lP02AZr%zx`t(DaIF6s=j zF!oYRN90LsNAx*sN92O2OJ|p!k5QcEbJp=By86+8ZV=dG({f$q)i{8Lsm|0?Z!%SHu~l!Ks4k^>d$M?YjlBJz>3DB7(aJWfJ|!xGQQ)tx*qK$o zSagqeAGNrTYl5ciL817u4rGv_g2kQ^&f!6Zpd&n^nmY%EYfgva6&diBh#O>%cdsHO zc$e&JFi+u4uk&Qz^Q`I|9qpXF`sDW5{j1%RPkNolA#j3kHVeP}SL?Et9skM+X=!UI zqR9ic1bNz;MW3X-V{FQ98ltv*<1bor;Ue?-C3r{iwOukYUTMp>Tx=>R-%ii~i(=fa1ciz94RtGlbx`mpqSRq4Z3)JV6<%lwsO zRlI7`A>ym*MIN8Z9k>4GDu7$XC3PbnA?s?1uRiE&ShL9E>B3tLB_*jQ&#jJ$>>lSq z?j0RFjV*iYY1=D}YtTq~V^HT%Rs*H4rF`0>p;*ACy;c;ROi-~EW5LZp2wONOKu9!~!L#$3)vVaE17>`57+ zv^{%tAw5R|msA8>>I}wI9+lb&FsE|ZDVMU8(_|zIYpSih0w)x&;Pd}`bU~ydYQEeX zcrA-9lIr|&3g0yX?k-Zol(pZ0D??o?-!~SjXPl_s?p!(lQFFU7EI>2y_Rxi@-_9H! zy5P3sg^p(ad?|G6Z%Wrr{%XWEBoC6I-Q`Y`?{9Zu&d^CGQ9L7i&Ky7ff6TEF&d)N( zRu^+T=wgn~%nEujZ)J(Z2QnG+PC7uh=Wgk=*U#jUYn}tCX$N-=wZnf=WnE-2X`rD> z;?WP3G^T=c{%3nLXk1$j$p-xi0XXEQ=hR|Spr>*5$hsLW7JqTwbr+5it_iC$D)ENj z(kn-C2uDSpBIj{}w;kgsbpX(N-l4;|Rk3*Mz{@04uLMgD+heT>v3*@}pXuepoP~{O ze1F1nN5WDE^3sHUd1F^>f7dbx8q|a?yOI#wk4ji1U<#q85JC3-f`9ht13I;VV|LND zhjR)~`cLQspQ-|TRqiQzkEiy4vEYE)_JCf!zl{zU)(1Y*0XO_Qz2GF(8X`l|w(hy*Ao}4R0ZRjB2p569 zZ)xdt@w~Kyf)r1Q?~2QY<9AcM`qMm@B{ec9!8N&?>`+7f`&(7Fi%#(iPd6+ONY$z} z|Kvl`n1&EifSRubAJeU&*xI<+*98bp?DM2&xGEH=Nx2ftzB@3Zhu9ayPvb~H5E`mD z8)R%8j>a`~l1C3N_JRW@1d9HX0{Z_aJB)*dU^ZNhnq+^&9D5+;L!LjYiOUBV`&Y2s{f8_@ddPV@sIXLiuV@M9E7vvCf!<7JkNiPkn%At_3L+itohDY?97(2zm zh{QScJ}&z+Bz6U$u*qf6N$B#-uY@eqB{tLaT^F6h|EQv7=-jFME;^@#G|s;Q3&pov z(@E2gN^6|tSas2{Jlg+;ULi;C%Da@Y@1W`AsHKIb2f5ml3VHWEc{iNgP)td0Hq+z! z7?tv@$YF^7GIE=(MhPj~|8UbtcP$E8R@@s26UCIQ#+@jPs{Y`TC_SB=Vj;0CY;YL6_H9fr4caOuvibbjBtJF*oBvc@b9O*NNA?Y#V_l+VO+YJ}s&<)O7+ttxI zrOx&Fq###0VJ}pJ`cPc&R!$pUHoTPR(Sxb6qZ4+W_pTH^lF6p{CS}sL(gcm5koj^1 zQzd;2d^$LT1A-Xlx=%?)6-dIF=Xe>yy{x^nP)$NS17DBV@z40_lL+4o6pz zoD~!3iit`XT&e^wLx_A||KKpj+YMb+jOkr|DIMhX0K|vd zkcwo2fIw_+Z7E5(8>Z?h3I+xF&iygdM0OX%N-gN4mORR6d!jLZRf^^Cx?=vU;gyrb zN?AEmaaUAs;pu%UE7HWHOI9n1OweuPqdp*_w9{yJ2CsaY7OJhdJu*k*jLmSou3N1^ zf`h#9>A?v{!7&TfuI#HU=bxGaLAR>_)+N%*o9yz094v$@f?-wu9$Q>*h{elj_eb!< zG?PR)^_n!us70kDSJOQLlqAukkvUF!|Ezs3v9eyfcloSjk@Y?FE_p8XS#+}7h|fQ@ zQNdJ=q_IqizG_3TyP`C@p7M9@o3dhyEvWW-EUWokh1UteWey|!ohp7N^|m{SvDlm` zLq$E{O=nqz6CGP)pXBQ4pzo{c_&L~Q$Lsi`B{MtCUh7C;W`@VtcFzun*Xo{C=IH77 z#V86?%t)tNMhWrhzDSy3d*&?p9U zDn^N3EI-uFpGA7W2|XXyG*8K00KUsWb1j?<_b3JmkNeTwZVdwCd*w2FNQHBQsR+ht zZqee`q*e>8qUwsBVWS%=EMDuO034X+nycuCJQ7 zUZ`e>7;KxCdyYu;>hqMNJ~p{Lz7y-6Dm;Ghsf~YVRUwNEMSB zVgb}EwrcMkP_)OacZx@K{nhuJvMO$iQx4$@q0y1Q_GCXZEdEKo9(uup6PAC}yvim$ zKY+Ow$pO39A0wJcm<=`4%-{-QvO^04fK=4eqq%A@o6f$F#T?JOp{gAehGI55b~_B^;hEO&%Z5wXrVFO1(Fk|GZq%{9#4%`#~9WVb|Po=pNA}N?>7-gfK`^s1JKh=Ds8YVbdNlP;fv2 zUMM=}4P^st#R!=}NDj-YsTD8p{0Rf{a z6t&hM(o*a7K~V&sE(xFpDjKm`D%66eNWE$)tyS*r-{+qbp!Hwo$w_7=^S$3b=hbg` z^hRqe5B-;yuF7~GX)%g<(paG(IVUkm*zrZ4xt)EYuT*dUdE0e90st@w0bs!2SooyE zCkH-q_zc76Gp_LqUNll@e8vk!s78O+m?#?Do*h})lI%ea0C|88qNxBR=cJ`mASMP6 znBjh6lKGxL{9R}~=K3)rH)i_d$cV9kpQuR9KnP4F(DN8XE#T;R`T!?&o0e_}JdS*X zcK)7Ms_eb`jt{+8qy|1gD|z$M-~C2)|6gHlNpEQbm7nYne;@)5Lu#pj^Me==Y2loc z^G|4dUqjOJ0v>FB-B9kmg>ob<@8b&BAUDzb&C0;D2Y+r0wJxoRMEcKXDpDlLA#!V4 z36;PQZz))T-^|uOh;3QWRchODt7MA*8+PbR*MSx3@0Jd=KxbmdP;B6-SGc0fH*qq_ z)>okht$S4-WxmUU?E ztp*U4k=={>vebLX%YfGbs)UCW{}OYAku3)zZp3ZDXC8V2Ml^m9^L;qOu}Q z8B|uRNl9nrn#^?8o2C&utHcz`!al*PB29al@&*JiU?`7xfwBTHei*^!45ii!unI^M z!P_t#`NkB_IA3k|5!~k+h71ovne7r0hm~K>*9HuUaHj}~;8)`@Pj80Ixy7lg(fGNi zNFk)99>L?^HFFje78kF0`gq%lNAmIhqT29lHLF^#Upt*%tS%`OVwzK&{8lB`azO=x zI1M;z5=mlX8FIe1=_u}Vj}b5$*IgcjNhk-lpYcTQ&+SdN^_U8U=C8LQ{Q9_1<2#W%HI|VRbSWBE9IieIZTvL%*c1 zSJL}=W!*}wcDuSnX<-D&G-tT+F*q&wdC;1jf$vMB>7LQ`V>{a|sUxPL_>+@#AP|mlsQB=c~&Sie*v&-2pwln7Jxq!~dbB!0{VlH($DZ2a_!s?UG zaj#4aE8R(HuNk>qp6~F{wTFe@(MAPOUd?>dcSe5k$W3v92i~FK$9?v(zC(6CtcU*2M7dX`B>Ux`Xm1pZDx`UQ< ztTq~|Yqx!;Ry-7GjC=T@M%Gux-A(MKSND`R9b%UsU9!ixZAjFi5_0(3Zf-Q57LHxA zJyAc*IJYPN(`}*KcDIFY3oUPI>eGb60^HteN!{J}3;hN+#G!0uP4DMt&n`QBxWDcu zbj~>zY8$cXG_%fWyRO{1)&)JYDeQeS8CdQE4K5wGTFM(77*WlgUcH}p-aM?UspB>G z-z0MZp_W3ZG21cC!wDrjAmG*VSD^ZGsD7X^i+RJJ;whEFa`adti5(|22V0ZAasIFk zX}dGRy{~kBDt7rdaFbfxR;%3COFXtBp1VdBo;{5|HrbqEnR?_`3uEpluqTMi-TEGz z)x@#k+i z3-^UAN#ZgEHvX45Bz;wQ*iZYP7M^+XYS@7@g|L+ek>jGJovoiOy42R$z9{r^xnG4Qyog3jwP1`k3<{GSWo!{shDrxPpxf=U@(&CXd zm7E*8aF;V-*8V3o;nm?!`iqLIaF^#9`#3k6;hhui@@OFmw8G}{rgdW7m3xnd$6wRy1Uq%>dMnolf|2y}9kB8O}4Pc<;G| zleG}hE0r|jZ*zDE=l)2*#UjoPQbE?VAC7m0gYI18PSc;V^RP@2S$Sb=J7IV||vSN1Jcn*`W>+?qBnHp=-4 zik!+hQh`#YMbgyI!emHb?`Gxv#PBb3e2B?XzvW1LH4gTrWhFZqzu#ec5y!ra&GC04 z9-a6qW!(s!bQM|`BV7*+qipJysu0;^miW-1^~JaD_79{-lm&+dA@g#g|FY@-mI99@ zKlKo0iDfLvvq+|4d^Mn6QOoq5oTVLbPh?MfnHIDG$Tg-1WDFFFcxC~~1dV2%S%9Pu zS?HgvMj!9_GCf)RGIJ>uPX`eSitImdx-B;lDQw}Q$4NqB7V+$^6u zCw7Kdkg2%6%v6>GbiQhCh&E4vgj7-jL!9H5gYj^&Sxh^(8MGWjOfr&VI|v39Yyd{7 zXPhGN2#yap7>4z{MBrc;H0@mn!w{cxN)(pRg3!%|l^C{7(;6?V*KMiag!^1oMTb#u zg>{Q#YpF%p+%0N?IYdJ`qjC1_u&*)@A!QpCN%w@jLd!MlWjD`rE$uSF;#z4|&XFP8 z*R)aR^G+0Xk-!W%96h&Z(o5FbXpIMa=Dz7VQqApVC8%~N?}--l^Lw2v4`d-VZWwBU;$8PO#g zB6e=6X7p%r2~`n`o)*~itMKEwYMF_G)4~NU09CQ291lRV5Zm@;W9k&No=2quiO6~n zai_4+sRpt2s(yJw8?8r7zwh1ss!tU2aY+yj7Zjrz7EXbeVXh!T4ltTV?zdjzQY=Z; ztnJXj&rL0nW5HdYh&e(`B?18qCQzsezDiuYh18*eBkD6*ar((gEfLAL=vZKY%BF{q>zAzlXsk}&IRRNm{* znJI4=4)EG>KQ@6Rc(9r8D8ev%ejClNh8qx+LdLsB5QSUEP=TbJAC=K+KltU^O;o;_yreG{k=4Px5^lA|oNPae+q?|Q$k&4bs z*VEiU6RXWYse#KL=>~G?dcojLF29z_;WEF6AmbJNO~(EW6T0=ORm5}|oEgN~M`6yK zVI~1*T~c_#+$brZLPSbnA{Z9EBq5qJ8R4%yz|-zkq@%M{VHU$UlVw~|cXcbRlCImE4(rR} z?g#>4KC^)vJs9{RHl&_X`$WR+mFUf^bDlkzpJbQ8(3&2jv z2QXwMa4{pn8P1O$?;-_8DdsQ%cdB~&-r3=IDwB4_6L}{r)t;X?_c%{Owk**6XOR1a zwFX|SGd+nW%c+sOs0**FV|Hm`UfTs71X8{h)+$ygzMoHZ_2WBFH7KoDtCACYFHP)$hIL8Y#f2fC^uHYxSAv*Th#Do+@u+=%Ot2iA0nB HE!_Wa4Njx~ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance_null_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance_null_0.azshadervariant index 575eb94769774026fe913a0bdb9afdbac874c1ce..17b4f0c3cb5168b9654cfef4d9a121661a033107 100644 GIT binary patch delta 16 YcmbQHJWY8+pCE_Y@{5laF)%Oy05)9(>;M1& delta 16 XcmbQHJWY8+pCHFu$7Y|K3=9kaHRT1M diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance_passsrg.azsrg b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance_passsrg.azsrg index c050a315a1..45c0fc7efb 100644 --- a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance_passsrg.azsrg +++ b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance_passsrg.azsrg @@ -136,6 +136,44 @@ "value": "1" } ] + }, + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] } ] }, @@ -203,6 +241,26 @@ "value": "2" } ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + } + ] } ] }, @@ -221,7 +279,7 @@ "field": "m_groupSizeForImages", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" }, { "field": "m_groupSizeForBufferUnboundedArrays", @@ -318,6 +376,34 @@ ] } ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + } + ] } ] } @@ -2691,7 +2777,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "10722138557170830784" + "value": "13399614758886099705" } ] } @@ -2818,6 +2904,44 @@ "value": "1" } ] + }, + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] } ] }, @@ -2885,6 +3009,26 @@ "value": "2" } ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + } + ] } ] }, @@ -2903,7 +3047,7 @@ "field": "m_groupSizeForImages", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" }, { "field": "m_groupSizeForBufferUnboundedArrays", @@ -3000,6 +3144,34 @@ ] } ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + } + ] } ] } @@ -5373,7 +5545,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "10722138557170830784" + "value": "13399614758886099705" } ] } @@ -5500,6 +5672,44 @@ "value": "1" } ] + }, + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] } ] }, @@ -5567,6 +5777,26 @@ "value": "2" } ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + } + ] } ] }, @@ -5585,7 +5815,7 @@ "field": "m_groupSizeForImages", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" }, { "field": "m_groupSizeForBufferUnboundedArrays", @@ -5682,6 +5912,34 @@ ] } ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + } + ] } ] } @@ -5766,7 +6024,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -5798,7 +6056,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -5830,7 +6088,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -5862,7 +6120,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -5894,7 +6152,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -5926,7 +6184,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -5958,7 +6216,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -5990,7 +6248,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6022,7 +6280,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6054,7 +6312,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6086,7 +6344,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6118,7 +6376,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6150,7 +6408,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6182,7 +6440,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6214,7 +6472,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6246,7 +6504,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6278,7 +6536,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6310,7 +6568,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6342,7 +6600,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6374,7 +6632,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6406,7 +6664,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6438,7 +6696,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6470,7 +6728,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6502,7 +6760,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6534,7 +6792,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6566,7 +6824,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6598,7 +6856,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6630,7 +6888,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] } @@ -8011,7 +8269,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "2959428625184507101" + "value": "8603598590297091788" } ] } @@ -8055,7 +8313,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "6463331605863849001" + "value": "6181996982157220722" } ] } diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance_vulkan_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance_vulkan_0.azshadervariant index d2fa9789ef0bb1494eba4c719068477bae03878b..8ed12bf81cb9a1f6114c2cbe8c8591cda346bb5a 100644 GIT binary patch literal 12234 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 diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance.azshader b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance.azshader index 3eb4955132e71c6976b1aacdb017bb9e8bd5da04..f0bfc085cbc871297e6fe760f7ab54a8d85ee4d8 100644 GIT binary patch delta 800 zcmX@Mi|N5prVR@0lP6|t^YP}!7Zl|ur3RNImZTO>=4VTvoM6qmS&5yAak4=X>tqXU zO-824jarh7%##zXy&0J|=W#SMPJZ9XHo22i6QBnx?TCtp{Qo2{+1{ z5X-F}NHV(5fQrsnP@lYB1ZH>cW#fMG+!7K$VWJKpVy4;Ch56^NJ@zd2_(5 zi4x9}8@&C2ViP4M0m+ATAQB|{OA;hn=w>y!p_y}XuN2JWeKNe0MWlhe&56=lVjSgZ z@}VtT*PWRhFnub=wR`<59oNMknrvVc4^%M0NR@Dsv;BX;X8Fg(r#1)9e#^+AwoIpL I4FdxM0MpF}wg3PC delta 593 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 delta 5263 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 bCe23VuIPr|P3W%s7rqX8D(roH4Xpncr%hMX diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance_null_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance_null_0.azshadervariant index 594cb48e02f3b1a8b29efe53d2468c4f65c674ae..912946db79bad2bfb696b75275f5ce11e6de5ae3 100644 GIT binary patch delta 16 XcmbQHJWY8+pCE_YGM%b53=9kaFqj1B delta 16 YcmbQHJWY8+pCHFu$CIy)F)%Oy06J3!aR2}S diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance_passsrg.azsrg b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance_passsrg.azsrg index 062882a45b..4b7667c981 100644 --- a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance_passsrg.azsrg +++ b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance_passsrg.azsrg @@ -136,6 +136,44 @@ "value": "1" } ] + }, + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] } ] }, @@ -203,6 +241,26 @@ "value": "2" } ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + } + ] } ] }, @@ -221,7 +279,7 @@ "field": "m_groupSizeForImages", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" }, { "field": "m_groupSizeForBufferUnboundedArrays", @@ -318,6 +376,34 @@ ] } ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + } + ] } ] } @@ -2691,7 +2777,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "2253369087368484601" + "value": "4760130259633911968" } ] } @@ -2818,6 +2904,44 @@ "value": "1" } ] + }, + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] } ] }, @@ -2885,6 +3009,26 @@ "value": "2" } ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + } + ] } ] }, @@ -2903,7 +3047,7 @@ "field": "m_groupSizeForImages", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" }, { "field": "m_groupSizeForBufferUnboundedArrays", @@ -3000,6 +3144,34 @@ ] } ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + } + ] } ] } @@ -5373,7 +5545,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "2253369087368484601" + "value": "4760130259633911968" } ] } @@ -5500,6 +5672,44 @@ "value": "1" } ] + }, + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] } ] }, @@ -5567,6 +5777,26 @@ "value": "2" } ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + } + ] } ] }, @@ -5585,7 +5815,7 @@ "field": "m_groupSizeForImages", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" }, { "field": "m_groupSizeForBufferUnboundedArrays", @@ -5682,6 +5912,34 @@ ] } ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + } + ] } ] } @@ -5766,7 +6024,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -5798,7 +6056,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -5830,7 +6088,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -5862,7 +6120,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -5894,7 +6152,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -5926,7 +6184,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -5958,7 +6216,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -5990,7 +6248,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6022,7 +6280,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6054,7 +6312,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6086,7 +6344,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6118,7 +6376,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6150,7 +6408,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6182,7 +6440,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6214,7 +6472,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6246,7 +6504,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6278,7 +6536,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6310,7 +6568,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6342,7 +6600,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6374,7 +6632,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6406,7 +6664,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6438,7 +6696,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6470,7 +6728,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6502,7 +6760,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6534,7 +6792,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6566,7 +6824,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6598,7 +6856,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6630,7 +6888,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] } @@ -8011,7 +8269,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "2959428625184507101" + "value": "8603598590297091788" } ] } @@ -8055,7 +8313,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "1715809227613203910" + "value": "15482970526060535234" } ] } diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance_vulkan_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance_vulkan_0.azshadervariant index 7178a643b1f1cd76ab68346dd62a662a9c6dee58..7e790aa0f1ad05e8cd022ea42dcf33fe3553b0be 100644 GIT binary patch literal 13410 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 SM9ZyRs>#3YW1VJg75_JVv_?Sy literal 12974 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 Zu*=Ho!@fAyYE#$R^8X@v-|@ZT{{~N!ATs~} diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdatecolumn.azshader b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdatecolumn.azshader index f2d6a2e169542edef0939d0ad69287d24b8aa11a..d70f7ac139958df72e00df283daa8d18f84925d5 100644 GIT binary patch delta 62 zcmV-E0Kxx_P>oQqc@7BL-{qy@s~IP=fes`L2x_S0a64~mOtY;TV+#oEiL^K2ZkMl< Ut{N({LMFoj2qvd;lcfLv0B%GY5dZ)H delta 62 zcmV-E0Kxx_P>oQqc@7BqulHUwJ5=AZfes`L2)KXA*v|pF diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdatecolumn_dx12_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdatecolumn_dx12_0.azshadervariant index 16d5486bc2d8ec81a564bde07c8369b436f098bb..8d904928c902e29c9d1554d243b8d8f89155e982 100644 GIT binary patch delta 16 Xcmdnww8?3MmLiAR@}kL085kGN8nb`A)x`HqEtq6Dt9ehwrI2+XnrI41siPP3{SV+#nN9ZZ2#Q4QFW Us~Re^KPJNg2qvd%wf_JB03Spb>i_@% delta 62 zcmV-E0Kxx?P>N8nb`A*FzwQ5u-&@eLehwrI2wa%sD5+5vC9|p;V+#nMs{b3a*0^(% Us~Re^KPJNg2<<`n9Z>)P0F5vju>b%7 diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdaterow_dx12_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdaterow_dx12_0.azshadervariant index 5555d906468d2bfbac4d58135f82539e5729abef..7335bfca4d3baf8a179abf2165443c62f11a8c80 100644 GIT binary patch delta 16 Xcmez6@XKLCkphR>^6ahu85kGiqd delta 16 XcmbQHJWY8+pCHFu$Dgu+3=9kaHJ$}u diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdaterow_vulkan_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdaterow_vulkan_0.azshadervariant index 4f9d140b86f8f2df884f6717e2d6d93a78fac132..46f9f928772e23c4ba4f28e5d54c7a808e081b96 100644 GIT binary patch delta 16 Xcmca-aL-^vm;{H~^6ahu85kGF815+rE*D#%SS>68sRB~gTL`!)>jo7!b?PW1unz|XHZ~_~_)s)k(6UU$ zA;`xQayO??W3m`sHnzKk=oVm!$riE7HXXrDTlNtdOB6!pL{WEo>1`|7&n5iv*L~0P zp7Y-KGtb*UsBr$J==na3jka00y zore1v1u`ytNmzlaJ}gJ;=(?aVnG6boiN1c)WJPL+OT*t5iB^yF;qOP2`L=zTm3nTHi<_r2;mV$}YITHyL$Z&}q6ZIUs zSc=wy_L0pZv`B&q5O?_{4}_MHR196t6y@w#J*+>^$^$M9+_74u)mNbSkz}G3((6YF zs@z7_Z{_o=I)ccHEZp`)WXGy86UTXcGh)D%OMPegCp07xal0aLIi91A8qwv>nGGa0 z(81ktX5faO^9h`7xJj5z*KYnA(JWb}^l{Yim7ToL;7fV`mha zlh=yHJNTZS)<=U~W8dM#A6#IavYU$dlS_!6R;G|froi1sJ#CvJPq+&HjE=;hr$-^! z#yPp*ZazkoN}IL1wyM0MV0+p23YZOBP|7mszn+9AufHW&xYcrW)oegV+IkX#*e z^5iWsm#d}>!cd2r%ocgoRHEtuQ`^w9(}+@y0>ABiRB%o$BOUzXydjcA!u0n>PaTE4 z71vW3-TNm$Yjbi6VX{AEt~VrUy~jc?4TvSkDdpg5i4>a4j?0lFGY6NGe*cr`} z-|=)<4{34bcBT)rOsipdZXxbv`QN+lR7-k(H%q&bGx?PRxk|oDLs!4P0I>URrSHW= zI7x=}p7%vp$E>0&0}c1B(j~a=s5|3HiSIn&*yfRWZ7@mUb0UZuw{t`b{5m-?p~;*l zs_Ef?B$&{%+J~BON> z@1-NQT+2kC9lUD~o=)T=;z=hH{cX&0`=zT##Rd|f|H=XU@A delta 2368 zcmeH|T}+!*7{@vAmb_(9+QPdOHlSUEL9uW7sG%ro2}~{^fN^AtWP{?2h)$Ses0*+% zmk9fytbfN_9WWMlG4>Iv?~ug{K8%S8Y=XOxL@ghZEz^O_#3_jmeBaX!xX{Fl&8uCV z^L(7=obx%i9ni?>1&n9#jt`_UCr zlYT^a!YTHgWoX+-mS+Km(X%w0rCamlFJbpRBPO<<2$l;`Qw@!)2t!UD`a|J(Gciv} zY80*|x@eM?oq1UKSb_V0B*CH6pwXB|pLXel5vt$4Qc-v*!6j018Ca5xwAOm$x%7;1 zBaK9%EkYr7EtvvEkGY3PDP%r%4+H`cW+XoqO_+W=(GWTN7c%0ZZr6yN9ZEuiFsw6+ zS=Py9Hs$=tX=BUnTcTk!iBON}vHl>o;`>S6N=w0eV*Bga!H*m4af3bV1{LYzl|eFU&~J_uP3$@H2s=(F-$EF1d)-HmnrS2i_Ds`ys`)ezxc0K&VLjda zDj(l0e#u9<2hxVv-F|)Nkx~@bDG;B(9rshg8}8yj5^U zlgM@@@tv&9OhDOlb<}G~NqYQVZn`Gg+UY7gEfng6xKRJ8o!QOQa68*K+GPj*MJ@|grUgeyYMPU-j|1>7@z;5 zj{WI|bys2Pmv*V+QqlLy9yVj-jXkQGUwdiSDWtADEq0Ho$l8cZQDgqvbrLi%o<_bS c?7M$@pFDV>(>w5qg+vl|CQ;YW6c7;bH{xv0tN;K2 diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracing_dx12_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracing_dx12_0.azshadervariant index 46c99b0d3ddcb8fbc6cf08974f29b437d0f7c350..e9f841047e633f729f147731f9e8b3ed5dc1383b 100644 GIT binary patch literal 34086 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 H2z>r8)R2yn diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracing_null_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracing_null_0.azshadervariant index df447c8da00f01cc0b384c650132128240ec0a3a..e399dbcef0fef75481aaf50adde0ecf40c34350d 100644 GIT binary patch delta 16 XcmbQHJWY8+pCE@i%d70U3=9kaFdqcx delta 16 XcmbQHJWY8+pCHEr4T;)D1_lNIG2sO0 diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracing_vulkan_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracing_vulkan_0.azshadervariant index e2d34e23f7aedd46394608210faf80f45637f123..1580aa2477a788fd6aaad857b568327862e53b35 100644 GIT binary patch literal 36232 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 literal 33896 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 diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingclosesthit.azshader b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingclosesthit.azshader index d1a669bacfae4238d30c8f1d0686a96ebca80fe3..bfed840febab47233bd7efbc8529ce1564a32892 100644 GIT binary patch delta 2968 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 delta 5688 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 b^1^McD8T;$)xf$y0UtlHW{ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingclosesthit_vulkan_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingclosesthit_vulkan_0.azshadervariant index 1a0ec0f96219c3e202a5c1de3dd1b98575b7f9c0..e2f5a8cb502b189e07cdec95a357c9d43f7c880f 100644 GIT binary patch delta 2793 zcmY+FS#MQk6o&WdU;zo(K+3q3vc^)DWn;3>&V124SU>;l_$*tKHDn`j zo)3OV_Q+(Phm;?c?C|A~xQhsj!b9wo~CNv{u z79y?J2FzTPbY~#njg;@o``fykXQ0XGSpqvNKi0NhW#;IoSuugQ9#|8rt&?&{?0Kw9`3q|aZ( z%k^cItm?FQAC5nfcBgG{6zfO#EqsPj0|V$~AQy2P(2a9y5qB-Rv2p{SD_uqDI@;|bosD1qx)No^KL}1=$sDr zry^U>O_cm5`EEkje<6s%ThYDOHsuP9i9$D{%g34965oQ1{9Dk;uM8hxP#mxw-GDgY zR&)y#8@LU-*nlySe>=Lo<6ey10c>hJkaOBgkvrVKJHG?NohyH1wC?CmumpGyc7nS= zaCf5zcTa(HP4@yPV%~kgywgn53wb|~?*zZo{x0fQ0}$0)X@Cj4fDNg~6b8{9cX5on zvFkxQaQ_`3rtko|d@sc>Lq1sLY7In8<)K8xrFa-y-*ga#A3^spxwsRLqU$fNpV3-2%l1p2RNZ8x#3Yq07geaPoWH zzXwb1Bh|g{2a=9$0rF|E47fKBYehZ-^dBb1oFT9u)ciG{cg8zZ<7z+Q1K6%`xM>R= z1jQXr#g49@O?=qTVY|mz*YoK5rh}Nw3+U#_#kyWZ*FRhs{Sc@$@W-y)mqAhJC3FMg z(3cZmynKi874waW{8!NBBmW4x=NB7z)j<~zFenaq4V{4DedXvj<-u~XuGi7!%yTtw zfZ}S7VjENQ*H+_C)}QcE7abk?TXo02Vey;bPjPhmZXZK00l)Dc;MZ&+@=Z`&;Y4g3 zYD2!2_;W3JnG?W#!DDjd1F}4%ZU;IzH8auw6 zC((OAA7B!d>X$CaPjL1o(qDNSuY_2AI=WRu(9gf;-!-)6Q!V|=SDdb`>2ApCOIemRXJ1_Sx@D?%;1a}mR+lwmmw_Kv zF6t$PzF6p`h5j+0Xxm(B%#XEomX=+ZZ_7(}5y`Hg#VYJ-VE@o-;I)Zf3$IIbC%gu% zKW>TkbCP`%p_S%uF-3k=>V{YabqPHILgB^}3qJ9r{YR$Nj&~8&(~ucHtQT!=N7Q zpmGIv6gb2^cs;A@3m;~|=h@u=^!uA7Pv4E80*qO!Zw#2{%8_>yoZRX{aFV6g;}{19 zEVgJTkGT`8-;H_DHv^Aij^^rH3ST#Nl*o11TR|=80Oo6>egbZMQCG9v#-ryQ##ujW1JU44c-p|EXs{P< zJR10hxInsryU}UAIZ=NP+_8@Wzr!(wC$F5(48xMU9o{sA{THgi`C-XYoI%6@e6VBg2y09bhxZITUIssy#X}Ixd zIs-SJj_V{ktv4s?XW_=9e$Hk#NH_2XI&CnAjs|bSjmNm&f=>e*8;fzh4L4?;qj?9U zqj?u?PSrrnW z<5j+3jSH9MOyM-(&xSR?f`07#pb_jv4`R<2zW68e0ose@FMJ=u_1P8(3gM1)MEz?8k89F6fhO#eM?PCtHhlqdnMjMLg<1MSDW}V;rBsm#9Z5YK43b nmV!zCF2~LTPsGJ-V1YR!U>)#NU5}m5C%R`Ef9w6`%O=!+3^LUh diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingcommon_raytracingglobalsrg.azsrg b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingcommon_raytracingglobalsrg.azsrg index 889e5a51fe..c9fa0f4e1c 100644 --- a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingcommon_raytracingglobalsrg.azsrg +++ b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingcommon_raytracingglobalsrg.azsrg @@ -251,6 +251,44 @@ } ] }, + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, { "field": "element", "typeName": "ShaderInputImageDescriptor", @@ -433,6 +471,26 @@ "value": "4" } ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "5" + } + ] } ] }, @@ -451,7 +509,7 @@ "field": "m_groupSizeForImages", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "4" + "value": "5" }, { "field": "m_groupSizeForBufferUnboundedArrays", @@ -515,7 +573,7 @@ "field": "m_index", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] } @@ -599,7 +657,35 @@ "field": "m_index", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" } ] } @@ -3217,7 +3303,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "3506265182085703910" + "value": "2492931172876496388" } ] } @@ -3459,6 +3545,44 @@ } ] }, + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, { "field": "element", "typeName": "ShaderInputImageDescriptor", @@ -3641,6 +3765,26 @@ "value": "4" } ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "5" + } + ] } ] }, @@ -3659,7 +3803,7 @@ "field": "m_groupSizeForImages", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "4" + "value": "5" }, { "field": "m_groupSizeForBufferUnboundedArrays", @@ -3723,7 +3867,7 @@ "field": "m_index", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] } @@ -3807,7 +3951,35 @@ "field": "m_index", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" } ] } @@ -6425,7 +6597,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "3506265182085703910" + "value": "2492931172876496388" } ] } @@ -6575,7 +6747,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "4" + "value": "5" } ] } @@ -6667,6 +6839,44 @@ } ] }, + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, { "field": "element", "typeName": "ShaderInputImageDescriptor", @@ -6701,7 +6911,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6739,7 +6949,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] } @@ -6849,6 +7059,26 @@ "value": "4" } ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "5" + } + ] } ] }, @@ -6867,7 +7097,7 @@ "field": "m_groupSizeForImages", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "4" + "value": "5" }, { "field": "m_groupSizeForBufferUnboundedArrays", @@ -6931,7 +7161,7 @@ "field": "m_index", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] } @@ -7015,7 +7245,35 @@ "field": "m_index", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" } ] } @@ -7104,7 +7362,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7136,7 +7394,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7168,7 +7426,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7200,7 +7458,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7232,7 +7490,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7264,7 +7522,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7296,7 +7554,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7328,7 +7586,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7360,7 +7618,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7392,7 +7650,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7424,7 +7682,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7456,7 +7714,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7488,7 +7746,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7520,7 +7778,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7552,7 +7810,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7584,7 +7842,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7616,7 +7874,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7648,7 +7906,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7680,7 +7938,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7712,7 +7970,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7744,7 +8002,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7776,7 +8034,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7808,7 +8066,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7840,7 +8098,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7872,7 +8130,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7904,7 +8162,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7936,7 +8194,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7968,7 +8226,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -8000,7 +8258,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -8032,7 +8290,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -8064,7 +8322,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] } @@ -9589,7 +9847,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "16848591129341445217" + "value": "1426176521634445605" } ] } @@ -9633,7 +9891,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "4017610420074377641" + "value": "1425135468820160161" } ] } diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss.azshader b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss.azshader index 91c528661acd213ef512656f94c454c4d82cf4eb..84e773d9db95f1fc18b7e3add5bddde12e043425 100644 GIT binary patch delta 3097 zcmeHJYfO_@80OR#KMRFYEJ8b_u(q%YUkmECpg_@uIe`EHkwtBx0XLLOf!1s!+Ws&u z8xsjnwBFI_mSx>g_wA-rG0|j31IQ0FyU1{hC`_Pa(QJ#%oqo_3__HioHh=iE>_mG# zgVt&-q|b$6L&zqu847ehWRPE@g{m(C%1|dfy$s9}Eeu^Pa5gYV4AEkDVkpvUop4+c zp(tr3I=gLXbqi53CP!}1Q6lC>dJYMY6t|jRqL#Igc`!F#z=bL~4%;?{1){90s-b&S0G;Ct3v_Un72cte2|s}DKTp7YO>%|ijW!;P@}M5tVsvY14Wy0 zHF^}u82f%H49Zdxjo!WG+_2I~(7#oTZ3CKFM>*19>>q@uP*0DLwZ(da)6*m5Smg93 zLFL$V8l)a3r3`s0mL{X05uGCozkY6}t;yk9Z*L^j<#=2SR+OZ;Viynvj>bEfuG`rS z1Mxvy(DL&hCiq+X*N@H|%7b;sLuA}zk$=Yw&qWr}@Nm=)zD&dzzZi|~!M5q89k}B_ z+1*l{RkLs;l=9un8`AL&QY2pC+xB?pe0UO~=lbr`pF<_ClPaR4Jy}ar5#rok9qmC0 zO;N}d59bJ|TM?I@bc9GGHD+r=ou#tKR&J}r_^#I>-NJy`t))ed=V;hRfA*o-3^VMx`ZU|59XHy3l8m)u;;#P4&T zZtY@)v<}C-UNB*{&x)g7{R+Ki!Y^qOV(R50%Q?%x5-{4GC8=MmSU1EOE3$&0KA@)$ z=;;IcXAda%e6oA_vNwmg`02Ar(d_3hIf6(ULTS1r@@M`{p8=JHZ^4`I)c5Z)S}ZZf#JahKYqMtvtQ2pG!CK9=lXG{TZS@@ z_SzNDIf|c!@r3~HbT354Zvi~9uhzf6bq)2mKVUO{q{E^=0{GT}ZPV7uFq&58$ErdZ zT9%vqSh*$|{f7d3ttTW=+PvJr%g>WrxoA4s-BRGR$Zn?`%F86cqFqm*?>Z delta 2324 zcmeHIZA@Eb6y_~0-nA6USA{YI==dm;+oCL@>0-(1Fi2o?B;bgA1*dbk6~{CNfrc<; zZnCbAc$s#5#4T=SNZrM4ac+S6L&E^)RFsUij6k{xp~Pt#9O~N(w2MECG26fWdveaX z=REh^=RW7sFXAr;#kL<-p{)8Kj7Byn_@&a_#$70v?L>cw3N4Ea@_$T%vo-|!(QVkY zTZOr57G)D*_-oXJ{!td)KeceqAi|(Zo`jC8!6>US!8RtrRLyB}4?YfwGvL%T%bNCHclNl`zOXlY(g ziD=O73P*i2OC*TzuizUVI8M+~tl~nFNgka0)0r<`Z7kpLmij8#`Bvs=M&AI4 zNxyTCE9padW;INgqA`=aXJzB*o_sn`j4L-%;n))jV@kGnZEzfl#J4FHVdFQ|*%(=n zV8)_G$7C3e{FaTAZ?klLQ3zi9wXpQzRJHK6IxX3hv>0m!S+Jg`p~#f*dp$WK#1BgN zzSeefs_mQzr|cSN)~SdX6A>}3^~6KhEyd5)MBZ#w5icP=GBfZ&MtgkV{nUM~Y5EFX zbnVSBTf_MA=ROT&WbGvm_d9)S`S-SG1>Kd=T^ap98C_uyUuO!x`IYY+L7*V~?-wHZ z+{;JFoz)bP@%aktZ8fG65s_lvkamkbWza}gqm~E`CE!BpQQoMx&hJzz8mV>_dVOl? z39nNvRV{f{E|GG2B`HFFoc<2j){R$AJiM=G>IK2J47O|JT+#}&Rt+MZ{8c=mJ@F825b>vR0MmUCgS+j70f?us?2n5m?f3WBLh1sLyYq$1bIrRJhSKzx0T*G@tN~lBBjSmxPGZ{ tUK|%h(d3DNi5@ij&}W3HD(-d%KQ#FVx<*ntM+UjhIFpU*4+I1R{0+{a5Fh{m diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss_dx12_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss_dx12_0.azshadervariant index 57660de9e803dc08fa613c1e31202b581e7f6bdb..b288bb7647484f5b9a304def316271a8b425a39a 100644 GIT binary patch delta 6330 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 diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss_null_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss_null_0.azshadervariant index 74e6d6263d2936a48c0e8702b82acade825eb2eb..0f2473b60661c98f9fe92e1ec3d3c4f05a572d03 100644 GIT binary patch delta 16 XcmbQHJWY8+pCE_Y|F-Vg3=9kaH8cgA delta 16 XcmbQHJWY8+pCHEr^#a=-1_lNIGS&qO diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss_vulkan_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss_vulkan_0.azshadervariant index 15d17bca27324078944b7ca7b9d4d083aea6758d..bfd979e588d5a15ff3c6ccce525bae8a2c8e6fa9 100644 GIT binary patch delta 407 zcmZ1y@F!q{pCF$m_chrCiIX2N#Auq|{5<&}yYS?EK|RKV&GQ5=F){K@E)Gx7iV{G(JQ!HPcCrK6%0R4uB*wA%y>vG-(5z~Cd7vS)<)tSdlhnEYN| zTvQXN5Cr&vSdM`kY>4P&aRqftEuaV!5QDrT&cMQ;4Wwm&m>GyAfP5VwEe*shKn#-C z1=3PL%rrS&L7P!~@?-^lQIHyt9*|y;90==9zOHasQ3J>V=>!35APeLURxl63*V?>W PF_Dc!?SEVMY@jdzIucCn delta 355 zcmewpuq0rEpCF&KP5jY+ezy%7Vl>Tfex7`gU3hZ7pdKT~=6Qmbm>78{7mCPD{x2du zd7X%qU_pL~PiA^XiF1BwUI_ym1JC4#Kv`o^@yT_ zcrP!_E6%{epaGPU0%E4g>tfBU@LbzbQ_GV$FL^h5G>IJqvKw$ump+9c` diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation.azshader b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation.azshader index e5446589e8aa26e03fd61ebd2324a70a84fec04e..d827fbe2a181de9df1ebc19f0eec3720dc8f81d1 100644 GIT binary patch delta 67 zcmV-J0KEUs$pX&F0F^0N>)y)_6N?q8|A%G~giyErSdZqYOd6EDET Zg(MNWle{=8vjd~U0SN6u149r1002AC9LWFx diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation_dx12_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation_dx12_0.azshadervariant index abfbda4bae32f81f3f26e826b1567e3501ae1198..7d76080dd79fd6606d4302c5822ff903e8888cd8 100644 GIT binary patch delta 16 YcmX>UcPMUyl|F~s@}={pGcYg!06hT)2><{9 delta 16 XcmX>UcPMUyl|IK?M`mXM1_lNIIKTwv diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation_null_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation_null_0.azshadervariant index c2689bcb40cbf967f8c0a4dda1c1ad45b06f8ddd..c301dc47904b0ef3153d55cbf01d1895204c4000 100644 GIT binary patch delta 16 YcmbQHJWY8+pCE_Y@}={pGcYg!05jDEaR2}S delta 16 XcmbQHJWY8+pCHFuM`mXM1_lNIFO&pM diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation_vulkan_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation_vulkan_0.azshadervariant index cc5cc308183699e005b4afa210ffe005388c2180..2a077e0bbf7bafe71fa27bcbe10130b0e105f20e 100644 GIT binary patch delta 16 XcmZq5Xv)~|%a}uL`OBeSyr0|Ns9I=}@! diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender.azshader b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender.azshader index 9e62bc1927545963c08003722c3871870e55c28f..b88c7e4ec562e81480498d413d19812aa15012e4 100644 GIT binary patch delta 4966 zcmeHLeNdF=5qI$gUr)K?+q)CxFn}I#?|Xa%PW%X_en5b73>kuvgM)$|%E6(eI;Mo9 z+Np_&oVU?Mq6E@5$&5ybm&s`?AKKB$SOMEVIx%(xn>Kc|7H486He<&=?|pEWKb&c% ze`U%)chBxVyU*@E`|SPpF5M0L^!0gzn|WEZwPshN)z;KtL=%5b7Ud_)@xn11Iu@#_ zItO?>H9y69tP8{65^yp}7Sd3UwF|76e}E&G4b)^zgEShHLs;bYhM%-G)NgETYHQeO ztle2_rAQt893966>R1JfG2-}EjO5j5TEx?2I;7xK7>8nl0#g^-vGjc&o5NGE<3tt8QmE9mmW4SG%MA4_t)r9i zsJWyML!w@sId*M{rxkxqwIBXu~oDhf{sO1#U~!y`KE7**q_w!oRk zzL@=y3u-h!C_wq;6g2CVuo~Aj)G{gxM{;AF8A^6X5<`DQjjJvyVLhXYvF~D*r0DEs zx|wf~RRJQi9ZS{aAmH>BkvWrq@!6~naz$C3KjLy4DTf`*=}qkZMV!vQNcc{gNV=MUc`x?il{f7#_-i5i5npS(^vim?`4Y4yaF1Kv6GES zv98ziIst34L@75ad~{X7(QMH@Sp|t9G*|_qERc6PTmkFcTn+po43a2uD?G=7F8h(5 zS{H%p=r(rGG4FvcBqSd@|D<98GZFig)&-v3c)Dvbgixynl)QcU{_)GEH!sj(4P;RB zHmK)6-w?aI>PGyhl(-i*P=bX$v^NsrS=2PMda}S~srE6cER~i16lx|jUA;GYAgK7L ze>-$YMJL0zipN+=GDxuj=CRjHn(a`^YL26E8>FH!Iu1{jjIlsD94JT)F8YpEsKBJj z{j7+ECl>!1mb&|YR%5(TV76k&)&kc_Xkj-fmAC!YCaLH{(ORN)9#f#HY!jI?|ITOOru3=BP6HcMyLy?)6&6wXsiJg!|>-WGV zSMyhAb^OVfK8W6zIh+?rvzw*)B;fRmu{d>0735j#87RcTJsjTMqN4mg5b7Fmo&)}~ z{yUA|Za<=O+1_+;LD`#ask1G0wx!Ot)Y+D*{+=y$zO3)dFEgSq@0&v>K7v&Dv&m2$ z0@2jJ9R4=jV1J;P_2OLWTh4|FzA=TtFgdn=RP1GRk7&uh9;yT4$s}`tn9g2|;>W(d zl|x#LSQ$@0-UvR9WX|#Xc&v7N8D!W5`)0Ih*aYd=b=D_4TLfCX_jDY-ydt1ZU0c|6 zpfB`UlniLmu6@yCgd~*(z9H#5NZWgc#i|X0+g=?{hymQ4?KQNb2%h&K?-{!cpjV9q?Fb-~s6BA3JZ%vb-9QT^sSE56YE zHRDPUs{f+lU!R@6D=EohTt@yT*$M$zp@Udw(Ihq&%Up8F=|MMV#&0qZzjj`U=k4Q%?h*&}4nuiLZW55jT3lpH*p+}j^{>`AZJaP(IYgG>JHJ>a3ufDyZ+ z@Vt+PO&tP@-zeUHyvx6)G=T6Uy}q5SZAgqJkMyDKsDBsJ zh{EyKS`Xbll1hi1V3G(=*Tm_abu$DFAOt8TilzyUO`-nHR2u4&`<;~0kevNol)O~p zF)#Vh5(b;4e?_Fel8;lb#QGeFb&nr~bt=C1vzS{K=Ks+my|*L$om6GZnZ8HYgPt1a zd1^F~2$fR(2>yw(f)ytXx3KK6p)rE)ErX)}e*U|4u%htmU++8ZW>`f7e9C){BKe#- GbN&M-CmBcp delta 4211 zcmeHKdr(y873VA$SQc4!MRa$0E!vH7Veeid1Rn(0sg{`Xve;Ox2)jka7+{r*wrRCX zXVj*NivFTsEDn+x(R6&RY$7S~MI#}lBADo;%yjJHG?_7IAZ;hpYDfCryUQx=f0=3f zNBQT@d41=ebM86k{=N@ii|QGP^j4^u*+X%-7wy3pYEhV0SJjA;BW_gBHNhJ#Mos4e zcf(7}nM0dZVQ!@9ji}RzF`BxnwT*R+Y zW1cuzMDhD$J-9SY#Oc_V0=Ax55vk|&__5Z5T&>95MWjVly9W=nBFfeYaK9aklw%(J zv0cQ~V+S#ILqPsl1^Y{8__~fSit^>3IZqUev-gd-XKJ4a6irEsq3aTu*F}*yX`aW- zKjiuKpRH6P+mj@s?PCp2CtITAT;=e|oQ=J+HAqdVLBR?E4NZ}_|Bi(XK1CXwPkEF1 zO`O=BV&TDS@yk>ZQh^3ZX_iSv=zhn}2A2|#yCa<^mX9$mP-=VloXDC_aTnD-3onHO z%{w*tqQfGmoJ$(t_B2U@{%i3V?S45*7Yu5jI2-PaAE4SM;$emhW427}v8`oePMV3s zqJfoFP!@DOYw?FGE}XGjQEYd?zbFA^k^w`U?vt!&{=kLpy*4EEx^Qi=2BVoz;zX~B zRaf$_B{gK?OwJq}dCEW;aMn9;R|wjwA0QJ9nM{ceaSpCVMD!$Bl)|e3Iq*7kY?1l5kib00DIFJ|F67_Qj@A8F zu{+le>9P^-YprsH?L3L;C>;=)bb>SE7xlO>aCZL!JL)Z3oEU6lx-?$hiiPPIypYP; z)=@j^2klB)rMY=%&9)=ue8Ra}Y9c13lAU=sP$3FFvHMbQrm0BF^l9YkG}qDQNSHS^-IOL^p~YD5C2+e(^r;Td7C2f_En6OW(rD|-7R0i`$oW$6}Et2Q&9=; z1OcCySmBS1?~D0D`k5Vi$L!&kXZgN7)GSPGnyF1QwP~g{&3|IkM8~&8)O_0a z{g1+!xreNsOC(yOV%}Ax#=Fr^$b0qOsrB=}Uq8PICp{dNUHtjwdwWRF-aJ6_A$15$ zdVvF^r1uQWznroZBO6Bvi4f-&aZcYOVcYd2j9!pAhsDO+OK7#O3|chb)MIsb&`A(RtjnL`-=-@1S_yVZJ|8hE5)k+7OE>$aiA8_`N7YqCYocp zAHnUEFH(AJ|JyoQ0;@Jt+<{_JPO@JepdBHtxha;7Cz1}&Z4CKkcZpsISrqI_!?qV6DcwFwX1U=3 zXV_5pddSk;l+4^hP{HG4%_f@7rbPrL3mceXI@HiIafE5(DU+2&k^v*`EJeDoAqRuI zX0Vp1M~-l5=X8v3S~GDBuWqgh(aDW2g*Ns)32$SqOtWPgdSk+XdD|$KCB;zHMI)$Id8A^t(T|afZ827dcR}uz>d%)ge#N4 z`-gF0U&tFsR4xb?4;I2a8o}IKX`XyRU>j}p?SDc2DR0j?d_KA2VJH6;n@N4ovFe$q Iu&}Uy0$#yybN~PV diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_dx12_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_dx12_0.azshadervariant index ae976a7cd9387fb22b236e6c1361548c84cf149d..48bdc8986766d7f4467669244413fbb6ec33af5d 100644 GIT binary patch delta 12905 zcmb_@X+Trg*7nIj5<(KfAOr#uAVv^`05O0#Bmof>5JeFbC1Da25CP{QA%sc6f(H~- zYEVRN)gmZ@QxiZ66ckZg1oTElq*lGuT5GS~_FE@frT6xIzwgKQ1B0ABtiASH&tCg^ zPTpnXoAU5=|1_Z}53qNdZqDC^+Re5?nWj^Hrpf{$CI0OPcLqK*svTKgl|wn+nz9dv zAc$-#f{@_T2Y!O!CmVjQz>f?bR&pCQn7ZR8@f{H)7QrFi6a)!~oEMCTXH00rg1<}r zHTUgl2-1pnnjOT6&;)Z1PJ`x|N6TACIa(>7#l&Yzs>7TRBp3T&xotCPiFJImdRa-P zbu#`y^3h$&g0OT>0E2kl)Izj(JE_89_~q_vINl$x*PA=#ndHT?#0UeeEimPM{iEoo z4HmoXr%OyVx93<^ix55-fgn!i2-2d~Ac(b+O-SD5Bzt+2W3RF*EG{~{QhYtR#xRLj zSmiLkqU0am zqrzbGX7W~PZk7)@OHH0F!u{x}cYlnkuD|0=I61l2)MJmK2@%2ZQET*qrJE4%df9(^ z6JchZWcne(^xhmhwPwTTf;naU-`pjUDe>=;hq)@g31J(O6K5X}K|{?YNo&1PhLyW0 zvLt^~SbheJyw!;eGiOoA84%%P1anQEiR$5uaTCvuuPksfa8TIu93=C_5mN9ls!q8+O8;3>z~r?h zD~<&e#l;#+(_M#eubIYHL$pv0L=S|hEw(5L-nk}c2JB?7|Mbf_ez2b(R@dsP_V+1i z^&5g^BAY74Ez{P)c~Y#6*CeXt$N8dyu{Dh|D(9-u61qc2sK|roI$1ZZjF1 zxohmPos5T_1c#cTjh1{5Clz5vxBtvKf8S3YRs3bDDF!rbDhW0f!ZAmk=Xtml2)|_U3G%V@l@NaoDo-r9e^NrIuMi)dzj}^wR!i-;rF)~Ed?P10*_{NYKFTxnZ z2nkCR9ofmL`!*UXu|$7k+oGX13ve&d12*<(dTIfxSwKb?*sh$k92V#~v4Ue|5?oSb z$eY_v^!K#ja5ya#WWszkB@o$F%`roJY;7kf2vkospFkC;!w6JwwUl~NO}&XyCfdr+ zS1Z`muMh)jx*9Q}_NozM>MOOvnEFoLYfSxJJ!VWbspgna&8kHv)Ctv66RKsk!h~v5 z%}GS4k?IlyYP7o7fVxUOW7knG;lyG}0v{h{I$VKMe?vpWiHMUYK~!jkNV<_;8A(C& zLgEkL)VF9zH9VR|5Pc!HLYDU+%(W!NaxY{Uo_$Y4wD3$w5H(mKN8nK!Ns-}&)EvaA z@6nK-5|I<$1kqJ12ba^#dAWvKl$zLl9+KA$XW&R)ieoo}T>HVFBvGKDuCA=Ae}OwW12g zQsIs_es%UjGuQiqXLGgpg?i2fuf}?MpedtbszS_4;hQek+(u|Eitxej`v-@@ZC6$f z^&VUiRWc~IT5*@;Xiq*x*KlY;n{*DT0bxAkGamEBn{zf)aGJ8Gr!Z+*{mhzHk~S=# zo?{*Vqp0@zf>V1!f~OR@o=!{4DLqF>G?Fq&Z0a;-PSgp5O%tBgAQH${D$HQK%bzU8{n6f}bMVyNxr3^8!mE&+q7| z&Mm!i?|iP-ptCdgamd+Y#pS7d(;b>u2<@R_$>8@k%UO2^s}@V~^I`r1eP?hn<-YGY=j$$~=1TAjdquP8$@8_c!EI2-c}FvB|PbGu08AkX1Ne>VhN5 z>g)^ixA*7oL<&p!^1?D{p&{P(aw}2B7?R~kFSq3(JRv18IEAI-poVU#G0B;8(qyqI z3GwVA6^~B<+af=#e&q_*5E?xYbzsHbLGu*@k>G)|hO`M94&%+aPyP!z_5&EOBhSBm{%uN5X^}xK2^!c8T6S^Mu_VrtZUEnk z&>Kr_jKWT7N!(^=z`u-sJ;_4e5B855G+KgruoHCHiP_Q}(3&rH8iGeU;%j(B&KkJd z-ZIkO((z|JTw}u`dNl#yb6A817GY>uBmhtGD06HesrG7uvF!*Rw2Z2ZyjN+mqW|s? zvAP5TL}?wl1_C6Qxy!d-%9X!UoF=i_aMg|O4gBV>8U+_FHoIS_=QkTl#AJ3+%{2b^ zNDg0m`?Z00Vq#f);42SVUJ1@kl{3pSW%rfOk;*C$FFaHREh4`jQW>vmt( z8GVfu-*hUz6-NJVGySf**sx_{cPmkBJPffk)SicULoCVDQdqAzx9Fa!G4aWnYZuGn zlQ(2SGnuJ+Tc->g0;f64jk{-n*MzQH z0bat4t~_AtOeQ`QPkiDb9?jWW0XaVtP~w+<=BaN;TIpwWf=&E$F^sgwEqD*(>C~QL z0GZ3=L_jiT^4q;ejtjm#2*~$Sb}43bX`_3i=LN6n=jef+c7MWMlx6_4x)nzrv$xa9 zMRt$E?95cNoAM2ncKrZFn$PIsoiOLW`}w2dM!VpFtNmTwqXm7#;9$9QHMWvt&yA)Q z^*ozWT*OGtDSb!QV;n^PQ{DS!1=2Op46qPuMmy>HoQ9cMMEMR&g0g|D!`IvP4vlsV zfuH0r5A}_Xz|e)#bm#-b-bA&{f zdNDsTzEw?%+C7&1_P|ji^r%aQok=0=RT*X*N3H}j>u7&9Lp^-|c9$O6 zKbWGoOFjnJj#=aZ7CD-MMZ2<>F28%PZ0PQ?!Tl?j-?c3pI=K8UYvsT}c3E`gN(^MI z?-Q&00a;>sfGn%=5D?#fH0;M0A$y8xPgC8B!M0Ro*cfcWJhR{s*aRo?r=_MP$TF74 zB+4@6`hS-%Nls134E^(u%R`dWHoX5YV3M(rWq44Uip_K5<2+wpr+;)o>S#~u9=Gn| zv@~Vd8<=m487&m%3yL~celMi6YRCB0Y5Tt;eG@_YW#35P zH)R|10=-|sVd^b*lE?rm4fjn3EPD0H?IV5I30kYWKU&duy?6A_qtpqoW2W{E5%96n z?xV9UhgKY5+lCKVS>MwirzFRp%xLcD_ft4>FnSRftybnzAq-}J`KQfa3A`^kpX1kG zxYWpR;!JO>Yd$HsQV+-pw#P5wFUIBY$Jst-A8(m3aR2KOi}v>Mw$BIKE2tZ%fbFh? zPh`WF8}BgVs%h1J$V96STh6(%vg78z|#ji^=Q^igYG7Zm2o9pe@ zrU%U3N(^qR3GRRCYH4u`&~S@?UvlKBQpBd#rt&5cN#vkVH+K%cNRZ>^2ix}Zim zR1`jsx}X@)UQt>>!oPyLscWdcum3=c?nKvE`~CaF9VhPR-EXgH>F9e3=+^m_G#*35 zubvy7=}vVmKJ84qKAL(eO^@JvzM!pp_B>?IsWmyJDx-}bFtYuA`-%It?ZaJNL-Lvy zI8R`dCh1NLBdgyS#^5a1+wV7Qae78L+W3{{jHV0C)0^vS1>Ut6yejE|8EzGDghMs? zCC&In>Y30pr<`e@{qQ_EF{iY~D31yz1FVney1F{P&;cU3fbTbG`wgH9UI6t|bd;6V z&B3ZclH+>IB7jdht?B%Z@(0>0J$E|GqjJyQDW_jKuPtxx$-Q~(N;6bKo3+=m3OZtN zS=6d1W)#b2C59I(N>@~{R#-vhRchI7j2&{=2|XJ-p>c}{S&Q~>+_HajrRCO2PMKtO zZ-vp?oH&<35%*VRm6nKmlTTNcx|(vzItK1kkuD?#|_SiSoG6j-y((IxKa)=OJa(>TXLzEod?SJ=ms zup%5?zsgd6K#QIKihF1U0OWhbTo!pSa(N|tWwyRLkLTx23Wtq4?QAOJm5`B;nT*w2seB)pkfZM?R9TE{j0nsHxXORs9tblIk&a^hV)YYBGLly( zWu+ycf5b54X?1>BKQcDqKJH}8zO~{jT_Cs`_2OT50jv#pb+-p4hR{niLmb4<-h1p7D_2C_I=C`wMJ3yI>BQ)} z#OibmET{L6DsWT6l;}1ymxI>mwz#-$o?ZuC^tZ9E03+vYJcSX{l*+?WwDOR@OpJXTH^mFh40%PGYOP z>Z%NtE{BLFCyt-weo-^|I6dg4j5K8!rqq(MX<4h4igzs}2N^#ur}x!$BJN=>JpeCj zC)wi<)6YwneBMspA*CL#qn=_KomLn%>x?c+8Ba8f(J{uD)c9qushfwHd$q+{6U)>^ z?8dX~3)vHYcrfv)%pxXO;PHLd? z!W}2y@^p)%x;IeykGy7k`JK!3YijVj{K)TXvsq@u`Ta-=i}up~FkSpx3M=m?kHdy7 zE^4^w?nn~k9&3&Y31NN_UBOw>RA`b<0PpAGhk z!-kRsBRJVCgp~ewDUn43QFgy3+x=!W{EgJ^Uw4_eZ{*qUd`7O|RN$d-9$W42G3#mO z>?ObV^5eD{=|kb1#sR7*tc1FaFK#~9;4bvE&P-k%lbOXX`S*jvzyEaj53PtY;fuPn zch5K1l$JN&3^7zrk;iX#+nA7%32_;YKVoS0`Royps0fc0RwD$%Qu8Q7y)<-k^k6C+^X)GBBc;yFtJu!NTVIH%( znsvmHiwj%Wt%rmy&+Cdd(N^3@){$~T{_%-iv_qI?paU)%sgkL zXbQ%Jf*^|Qzl0A?Uxh)N4bBNoORYqY`o!Wq8%Vw;B#M%3cK_*x_0K`T3AB+!Vd9OV zVrbuuI@&)(CnrB#^!W>G&|r`#37S3I8lO9*p=$OwIGzermRR_+J@v0TO$z*7@=YvwC@UH@;W;+(z9m6t@szT7<+2*M0PEXcZ%{+ror=3YB|PaV@K zX+rLVbOSuLLiP6{9|WCzet@HWsH43DlR~7L7&YO!E(8w3SuRGv$#NK_BZ4AA5Kgo` zbW~*J$_%32^sB)m4{iTWD{@k~>!`i|Jn`V=Qv-<5-(HDZrcfON z5+6ZKc0Zt&;IqxG$aqgqdf9k|z#cK0&s8XiOalsWuU9!n!ZS)FzD52%bs#5*d{G;; zWQ`@+sRNTSW}&ugtkZD7+WmH%tg+f;B&y)H_`pe!H6$t`2iHv` zqowm5(Gn}#45J@<8Dkp8W5np6C5#s$<5MM!Ckj3Jo&NdcPwf8e-TWJpy3f4I3)TmB zlptKh@V!vuCd`cr`oP0SDe^a|$q_;MnIiI5P-;Z(dL8eNIh5VSMYA`QBu>Fp276o( z;&l>R;51MfYI6K~$4Lw|PsS-}hXX?;6f=)HGT+BS;*gDSn7tn~DUrfp%VzQhr~LKm z{0vThlqf%)lfS76)1)@A#FXpf=KaHeUtz&w4xSb3;7~(6l?@wh9Qms>Hlq$z*gQvPATcdhv#aLbK60bUxnJq7E=xoP$Wi|+ITdi`#%f~c39+^s;qBlr!s`hv_gPH&nK zj){AYsNGtYCj=Xnnok-hBX0ZtQP7fr^iZ!k*Z1O0G)yy-d83%iMVjez5vtb?RL5pp z{Gwz03~{DoJQgve`mo!nP-@V3^F1ji(tS*KXIT@`b*Y67ngtXbF9CZ0hr}YW0KhXuD5|jWAaEhYGUVymWA5jg3+^~JX`?UA8L#H1$`a5kpIZI?ejK_ z;CW9x>4xvOb-iaGM|hOv5(eACe~=c(@!7LYNW4eXcA*;amE8D?>vTS#rgbcoZ?aS7emw2)8w$M|)YD z(y44>43ZCp%egk9c0wdtuqX=d%-I-4yez5z0pk$ez)2^be##%DkJtw=LY>Z(O(aYd z5`O~mW?0rLrKa3ylk?5x2F+Dx<$6UVDG-}H-x((FC(IgdofXVXwCC|C^@tgp*lH&v{sHrgVp|bv zI@2`%J$?J}&K@LqmQKE&hc_SN*nWpy5YO|?%v3r$k8+L!-3gO~MCY?&{*u_%bkp=Y z(;_gxOE=o9>T4M}&?3h;KOya^&Zw2dO*U+qWc`R?6OkH|nIwx}w<%SYF3!l1Z3$0F zj!S^s0?#_KDJPr*{1Q}5uQ#q9M|8vOCH~0z96uj}S)iA|Ju6<8u_ZiCmXctmLf}em z7$TUqp3DFO%ct41{+ynrIaw!^`!v>9UzqLhH~;wiEAp4(i8^nTA?naD;HU?@eOeKUVT=^H}DY|{Z+XMm3B)!r>Uvxd!+#!2+tueIvJE^8QDd_>$>^OIloPy~Fy>r4X zH|fTb-e$b@e47Dryy<3LtF4c#UcrIjTP09K@a2OjVJMM;|Ki=PuQm}@E14K+za_Wb z{e|XkT}8|CbJte1U5oBFST#B)=G`@7wPjkYlBv@Yvn^9%bEHM>c?tor7Rf2B00JX8 zCmhre`G3nbV*2~=*qR!Xf?aJfwra_`@INC(PX@;&fKbN4=-@R>x0|QhZGCPJTzzqW zxF3inJ&%U5j(SG7y$d!g8>4i;<3t}>U+kBT`R(i#ZMosG+#W-DZclj#Q#li^Wpy{( zU>q}*0%KT11P!o@MEg;YXdYUGqz-AFdy|3kI>aIrDnX(+q(=<{!jransn>EiZWFDf=k(eOm;aEJrQ z75}4X)nb+$Lg%-e=UQxiQh-qFZRxoGV((B#7m(`N&ajYwC%u8tmbK!IHkUAdF0Oe*L+NAV6g}6i*z=_OE%q`*gSbxn6>)32J3*(t+%j^(W$0P>6&}70hg} zp3I{>)L@7Q!ihWF|D^G)h*3Jz5lFy~+D>PY9&h(Ix}W0<8}uYN%V;S5In%Y%T#p&m50&^P8w~+-v~PieWP02LqIg#Ern#) z+~r8QqrF(>vZ-Mjf|swEppsKTh)iMqOKq`HrWD;nvz#2{eLU3y0fc(ZCu;uLpXo9N zWWqs6DGe-O97X-<`A6YK>kK*NV;_B_6!l9#@kv|&ng}EIfC`pS(%Or=cuoM|o$}hrAufvAbV7SMTT4?0x<{xz6>zDK`oPEu{$!z4EIl5{v~gguh8?vg=PUp;u}ipuuxuT9o9_9 zNAEaKlT#uglM3d0O#w{&#HxQ3@IeI|r{NP%W316Jk8;2C|3PBGF9UQr(O1)DdkFu@ zivLtt#xRv)sdYqijy!yvOz}TREEFl2*fjs=DUgT%SBXXJ3dt9l9RC>KK`^?COxQu>CT)#?*_phc$~?Qa>W?Ry0>o)()TIyvhx z!)E6=c_BIDy@Dr83C5sYPmBU=VI105f-4#1;~LMpkMiLGek$c8Pi@zPhT%i zgR=|r#(95xG_1JbQ}|xHlUwR>tV&*e^MgQ!j|Ml4_SJj~yXXBehTNOH8!tC_d+YU| z50yoU5$xbf>y6Dh;nKKIBGBtZp_q~-Ba}8R_}PtJ&rdh=sWkJ`qBDO&!|cn$7nMh3 zmq(qP5Pf$-jG<+QujPhh%gvQ?PVj5d$>(cbPn`~SqfH5RJ9WAUBu&7a?geoGcjKg! zKLwMbr>UcP?kz)$WysLt9Sj~6DZS>lzu{oeJJYiZuVb?XLyFc=Dxa&aQP{sZ0 z@zC&V3{S>CX&HO}r1NXRRVW=$0P&`J&-y7%kZs^5ZoG9VWZPfm75mCS0I>((yE4F|7{Dzu?**a{SVhK!SN(Zcv)5y{VU7CN$?3o-Hqh zQ>!c)D{k~hArv)mN-@L6EK95^_xe_rEvhtZNjDXY=wIa#GUt6O*ufVg?NFOs?k3`F zdu2KNwr&zGF+MRmN7~&@Qd+FhCL|>)IR)2<4_JkCiCafEyb@4JCr-Vs{C2pTsO1zI zw!AbpQ)O{>!@Ce9IGeCjeKWjL@vb`$Nr6+gKZUhjySgn=sq1YeR#)a5;xC{MAzwJX*MF5?PgM{d*JO&tW$U+F{VD?IC>+-2G@r^ zi{aqgvQUPUOBPqb`K5V)I`b#v?w~R$N3Pmn?cGF(QR_vEktN^%DR=}f&0E%v4HJF* zWTD@f!IU&$>t!kLDSzTdsKg2R1t6_g!CO0^50zFWPJW@0{hbDobo{46zw`>d7v|+Y zo_FQ_-Y@FRZSJX*U+FxbDl#2}6Ui4^Io-W-_Rjh8X;6Q|G5sHxv(+OLikC3fn44R!SyEe zXFoX1;FT^jm$maVz4mUCXCC!3V!Jrb$6oGYy8vM60I*t)n;iB_|0Dn?)4_t_TV*$F zeFAhX9UXl`*JDA-{7tYS1FC|QX&>qSz~fn=lQ%>h->_=(#>C?r)8=m4O5Wc7&Gz2a zN;M-vd-VC*XT_kBc9q?+Tv{;{Wo5glo5YPe+&*UTx*006Uh;DmfT%k1cd9Q{n*o(poGkV+i)(?odzn}|aC&)YhEl_Lb zx)x9EIqe#pHsut3&*|VaLh0~Af>HeVTeXnc`MbbRYk)~2DZAW?&ZI!AR|_*u*|dM1 zwR?Bd4k&X&iK!`^v~;-OY?tNejO+#C6Jr333UOQtvqhoeQEX?Ya7;auis%xnL%n&? z`~kU|@la%um~FY$-lpw=O}p0ie)dEi6pdo;yJ~K*a#C2VYlp+sF1$eUNDvq|v)^&n zK*_xQr zk!RV(v+2%Dd&=8!`E1j=u8@{PJ>N^L zw(X7eACm|UwDb+BYk8D-4k)mm1^M)B4>5-T@2Qn&;g!Y%iLJ4k&uBeN`kme||2+CV zW|i}oU%{0WZlu`T1eXo*R!yzMY}x?SXQXEU9_`pKKi0{tGJrgk7vybD(p67O7M$QMQPCJDYWj8<@6Ta%)3T$v@&(HuCK1nqp=;1(#2M(EKNs|!Vo`Q z3YYU@q4^YZ|J7}zpn9Cq9PPIM)|FM*cP02N{Z}UXSH9MNap1-o&J#f&QE)48f`Li3V(t~2%~g|J z72Mxw{5c(uEq4=we}DeS=?&eH*2-5(QBA-E^LwJz6l)rc!e_B)7l$}We9C(Chk%Jb zC%i^Ut%JSry@+vNi>NK0LUoYfN_TndnaLaY?gplbAI>aWiL<>WvoLXh*GbN1Q8v-jE0 z%jG=1H&VU&A597APj6joTkcFyc(AP%6tg*gv!g;{f`Yd={~`PuyFlqDzAfMGVibiz z5F~0gg5crP55B_SOA24t;Y$dEg-%VI%{(wJbVmeco_1Q9Db%nxCvDH1K{n0iH?MXdM=KBq;%q*C;xLDhT&AWwylmHxhGU`*&7*u)IHBJay%hoJhBrGQ^ehnw9P?GcH?3OypLA~Sbs-*}K zK_v6Da2(GWe)8~YieoREjknmludcw1@t=i+J;g;|I^hHyLkxwEY9yu3OR*=+eUAQ8 z*ZhqHgX{^cMMcuSoQ;C~jEeki8Q9gX20NAc+e`8@OR!4``rAtKGujOlr6IOHJ=l54 z`I{v9+g|B!Z#UTLYG7fJ6!70C+Svsmn=5@l9lv=5#fTE#oXqiAR!IFSm!Ky>Di$d& zgnM{nEFU}A4NC1}9PI93>_%Hm_{sp@LC5flH&za_Szez`Zmcu&+-o=!hhW%XS4722 zQT%Ml^hZp7WSg8WAwQFlUuq3p1;$Q13amY*^Bn9nQu|Jhy}-eC*ul2H+IFU{@oV-5yTKAm>1$)jYV~>|A3dQ=uNd!IHj6Vw<`_)MIpaHQ2D=PoBW2D zd?%5qc>@Y|DoyNPe={%_JFgx?RY|AQF_gnjh`e${V5@Pk9TD0ON-R4u(?_fAhrvV= zi`7EQS1S8Xq3!69-LTZ8OKSJn!FE(?tdfx5NQ_ko`3>9TrNCZYZKsvmbq-mLI!xDA z+w%Dp9i%p?omyx=(qf!kZ95^gf6f69Acs}^OiPlQj8)sVN$nqV>|d#DHA8l4sl5gv zjjBxGyH;gVLZROY!9P`zhnOb+(&8I4j1;}Lvv972u6v4)gRK+X&20icmWT z1l$qxL_MgI-Ra2Ak)H?1TM0>T5GDZlj|a@+?6pR= zcOjGnyu{HPDXYNHTS|Gw?@M6ASIc2$^Q6h*q=T!L6B`!1o2lm@B^6`b+}WJ#}3|N@imGrj+zFT2Y8C zb1ss@gy(;W4qf^Fc`;0A$9#f?2?43=G7{4^r^aOpgHnW9w4zp9rXS1^+?|}8Z^@m^ zJ}}IU&b!nS)`K~QWwPbQ+&CkRorFUz+3?!zRJ?i4_CpcJB6ei$@bW(7cI*({LQvll z_6;W9fJw+P-eX_TGW%YTUs16C;oyK1!GS!AR$#{=@*}n=M;^-I6H?lzR3N>?Cv=osk`T-o)+blj$xCe9NUSM z*W!c0Mov4feqxk!DEzJ)2ptDP|Bm^W0kZ(RG<988vM?ci3pYiyDKRrLaZ_@7f_ZKn ziA6OG6F6Y-8&$_&M2wxeQ#_mJp1xsr(HW79U($kivNkMoR?$gYFYIdRC@-xo?ybGv z94Wuh(ok-E{eE*VSlLS>aAruWa8z+C=FCNpCLh)nuV$Z1O(*MFeis|7F9rBsF$@yo zX+_R1%yJ~hkA8o0#WVbjU+bb-T(C7O)M|w5>&tPyBgiSO$9-c4+VJVW(b}gTVG#6f zM9h5$R02JcS`sy2HCRy@WkXwA8N1BduAlZ0R~?pP%yl%^@FW~tkzk1yGySD>`X3zU za6Ol3wM(3g!60Pzkj-=b1o_6Yjpj7H!x}o(zdwephYxv}So>LwRW`)9iB< ziCF-vHJVUop{p_XeX6+XY-5Wt8Y8LbWCEOD-XXtG-do&769+ObM-3Be0hM_=52aT{z@qhE)I2W$pz-|HIvl<+fdyHjKRy2Hb z`>@dMG3|`3OxDLb6OKda@8Eopm(WV}0Q@3~K zJ$^no3i6}cxvS!1Nl!rj9+2PDkT(~U#2_rRgP}523=Bzl16HdlV;)tSuF*Uk#8uaW za-Y~}J^|(OD7yo}X~cBtEj+aqQw>hTY(96<=hBsCk4ufrX2T$<0j(&3#q5WW)%3J4 z{CMKlx&nMk1$V<~?kB1|(Y-bt#^i}mmSHea&tYc72ba)jxL{uvDWl{?8{Wy(0JRw@ z`NFQk>%G;cwH@U;x9zr;7x!N80Ly)=O2d%UVmM=up3X1{{WseCM!u<0xA#3CfvDRm zNCorN4@t0|74pZgj3+3c8OrRtZsHtF(6}!9Do^zh0N6GWRZ9;x@q*ymB+T5zPftnP z1o$+Mi3NWR8#oY4UA6krAl^x6QiKXraDG=qd2>~7HHh%5DoqSBfC%k+-=MxhBm2dC zHaS}SD`N7hfS2>|v9gBEo2Vj^N%`C`!H-^iAH1PU41^F#x?Luz@Jr0X!xP zMM*1D5;i5n_6zFQfZnvdlPe6S9(#pdhCT*jqK}0ormRl}FRIrh^4_G&7RLTz z?#dC?0q%ikWn5oanvKgr=h&yNOA-m!1A>NxFtZ_gH6^1`YFE&wW1-?Vp#??lxE7Of zp{&PX5)8ph2+nY%;jjx?qzxstgd-Qv`CnoBUvczpboOoZx(31JNVV1lml>ty4&wah z@!w?#tYwO+RVDomX1<7eM{5!e29_w+uXYrBIe`n~skxY$r_MKCo!Q)U?xM$4_^FN= z(Cl-~IBY384mc@PbXBI7XH}>f0KFdox3xGBZ{@-j0{%?zc zb0?KYXZyNrnY=%#KZQmICP%)}!84%IO96J@C}E?CX0L>Up(^leT*Qk$1F(Lf4`SR_ z{bd_+_;}ee+OBW7&O`%>hSM2%*yh&-eAD#E+{k-Rc+Tq9dI@{1$d5;H2M%9C(0Ij#s>2q5& z==8D`s~mo)L2dviL;PJ82yw6mB#$l^ey!hX)29qisKxg(mb` zkopfCb{Yu1U;1wC2e!I}_t92a+eaOY6+fh|?LV}JN?X=%Z37Bn!WNFRG$%kIln=K! zwB|2sABVNW^}W%x)7~p2UYL=!S(NypO7y0IO1==B{Hsdb&bk*B=~N>AQztc`lU37- zRshCcUiHq0TCO*IS9QJFv$m?b_s?WZTmiUxR(72Tuu6L$D~-NQhCvNPT7h#kbJau1 zT%R~6f3?$mGe$xtV?!S!!)r$Nz8O27%%~2Ub^Pe8GkR`KUL2-cx>P*yASPx_Wh`}h zMQqF(>$R1G0A>x-x=_@3FsToKvA^vb3w-E`Jm1MlMkx0e)=L&+8h3v*iXa*KPAGzG z*Og-NDWXVW1~)x^bCwPzmnUwGPfyQGSOLJYvfg_NhUQMPV2QbmmC+-x%7Mv?;+C+j z`u~Dea*P+Q8Vo->7JiOLVLMExUf5MW)N;N1en~^-XI`8liA}~+&n`aOHLK{%S<&bj6EWO ztI-&nN4$x5wziff=#tf4MaAle)F}*D8BBot(b>)ixGa4u*8Y)fxG9M6y4<-q z1AP))1tx~1KpIbrhk3a5x*RIjV&6@C8U0L`7&qY|nX>hxb@SfNSO_kcmWU?*-1WMo zIyEt`%oi>wD_I9v5Dz=?x{SJ1H!(O_n6^G~d2(iAR&u&10d^EI1Heb=P#80!8O{f? z^SIBVKVtcY%3*%~WE&SmZpB|kBPvt3!lKMfVL}Qj?!vVA^n{eO^`XMlR3S(pLK8Jp zt5_8`L)_Hz5&^?d4-X!Ssa&>p&A!8EO;RxsW4*%qW9tD3XAZ4P54&6mDUcC8vit$J z3@yl6(cBezE8AEQD61h*P8eTg2_(ejgO7*%)tX!=&7npb5c~mg!fu5;yV!M(C@rV- znz1EXy%#~gY3)3%9_~|%AsCeEb^$y-C~$_-Qbk%k9(kHKYxa`o#kx=`4tMWLy)zbh zHWj=Jt({p?i4YVJwQ^B(M%yf}x zNm5c);-)O~+$SiSJ{D}l;!m)RblbR!MWXK6qSHmh$g?8yi{fIa0aSpc4{1f|;E@$A z9oGv{1hMY8-rQR$FD^H&?e3K~7nj4eCI*o7)0}@BL%KJ)%=Bu68;xO*gArU~HZgl4 zo745IxLj~0%chpFFoOY86r?mCck#Lhd3VNmU%%mLiXtD14@dUb7Z0e42Yb37jYfVe zxieaJ2j?)2E4y8G-|F5#tPSLs0jLp}*lBzNv>wX9pY-PN_4m>Be(@;}DStV99X|ijAg{&c0SJ4WoBy=pju_L(_^n@4ix+@P;g+rPJc7 zr)7#cR-X#328ZmPJJ@efGqRsBw2toMaqgn0tgTqzww#apj(zkbc>Z|&{IHsk<*gwf zX%vb zX?iaoGE0{Hj+p00u>t&k7rBa#Z@HHrH{B*llrBU)KxP?J)7;&Q_8wL%Jr870if?hb z@$N6iKG~aweKP+??1G=17HHlmgQl@qS6K&q8ohk4%;fOpq_1y5g@^)sINQhJW>$ky ze3P5vkQsGz`$Q~yFYg>a__)1OQ-@n*?e&pWb7S+RfaZqA=9w+a3rSzg-A&HUZts3E z<%4UOoF=3{xL znZMn7f+)nV{fJkDxl$^Zl6SLa=F!}a9|QP1tK@M7drNT4&AoC{&4lqyCJDr@Bd18w0eS{FlezI~z|t-`pI|v<_QcDhBES zAyB^meCX#HV-C&>a0i7B{GM4vH!V?&Lr=^;cj!;ff-EfH1|8-Gh0rMk3rEWg{jg{} z8)2W9A$q!Fl$@bRfaACv1oM#Zi8qOtV|9naA+3Rb$A<6;>r~T}-$vd1Ziyy1Z2qOF zTj9L-10p7lfwBQT&E#L@ERG`hatOfNDnfvt5-+3hO)d0lS3ru|i55Mo&t zhUgoDNY3kLDb`wfi0Sf7YJP^mU;$g2$?&HdWE1kYRT%gx<(Vpj?I#Sjxf=M><@^$Z zZG`-tTI>#>P?Y&wN(|;R4YIf9XDAI=2sU5>%bdW@>&eLuGuT>@zfPIIQ<9&_<_PM% z|Lb~w|Gc2HMa6*+_=zI{VLED~pagN2RNg~r32(uWU0;jcsB~K2kZq6D{tcpkXDZIb zrs_DSr|YM$pJn>AqQnsshL|CA1nDY6xdEo%#02@}`)8P2S@}K6{zSA`^hxbd1_fiO=Afmm z*&nbD6j@($K4t+`cXyxEdxE_dq#)wwa%nY zig92S*mk%%GIjM7hE7p$kALwqn`V0WF0ZtyhK*ykhJ=^}fFTe{$sJRPTG7n&A{1o! zneFi*pvbu!Xb6L*oJb6Yfg<4l;38&O(FJrp{XdxqQut9IBfeN{^Z!6bg#Uk%5gU{r z?XFUmneHy`R75P$wC78Pka+IB!giNyx9w5cj{r2u);U3{y)QWjgvoKE;$x&W^@s+>(R2GEIZl|}FY2CUaS6yu$G z^OG#bRn>RVn|1U92E&R0gaOD?oi2OpdrhegGQG zGa4M&g~qZ{Ga6nY!Iu9Wbupp84yX&m2+EvZ>K1MNhS%?S2cvxoquYn#B4};{0%wn2 zmD=vGUITOi&odh@UA@S>Jfr!1lg}mROEWK?Z)h~;nwb~V23uwVbpb1gKcp^j=*2nd zXmw$rpZ-5k7i{QP7e@N{ZZtUlzo`pK7ur=XGFY6Y@>_xJ}<2VQU&ykzrU-A}&0rDy*6)tf%j3;_oq(&1rANRa?fzHC$wk~09%Yjhh#Smw z9wk%AfI!shX=qEP}V#Cnz44a=| zh<A7ERtuWYr`YW8&N)#unH=5hPVGhOzPuN47 zem;v-hZy|S06aqV_c?(X$rr@`M40@J0@-0>?oqO_D`>6m#h%%zX_2#vW}iued;egl zHyB#v$HSQP3Fkk*Ie#KvrZw{O0i?WcaL|5cEbE<4!!MIy{{!co8*0S}HTY%! z2p44-k;xTYx4?6*JAOQ`i96|AQ*Y}; zLd=+O+6fKFQT6cXZt-CIzQOj+322v8_-xNGKpV-T8q_w>*$D7?kzsHrPtRh4&1=i$ zF$hn4%xQV^PsrC+(D{?>uiv%QQRd@4C2?koi@@%yG3+%fhIsu44yBP162bJT&oChS zzHc1ACs~|*uX;5%HyQ>>h_sTL$b$XJgTrK7#pg5a#Pn&94Gu##Xzj4`BVpgq_G|V< zyN~C6FHI3Of39I1<~1WE!lwab`F|x+C@0i-=ac3Tmx0aL{5Zio<|gq#v^d+qMMowB zzT;h1CQUKy5I@mE>^?0VI`VS>rQ7e+qYHS_^Hld@^ujNr)T0d{Mcxv?4%_zxO>?=t zBV||R+iy{|7s|W+-~A4HM)#-w8%Yt%qS01S-y1mnf2UofZh(FKl#uVpwoBi00||-o zLeZZ*i56{Ro%E^Agv9n<>OJnoXU4+Zi^paa7m-0~w2kFoj$bjZ6nyM?92@79*0 zYp+e&imrX=J-ZV_9gMYGW36LzrZ_H#%P7a?)_o4@kPj%G-KUJ4KBRPTmmw0>wWbH4 z9{GUM$w(J%Tc4ixmeLWUG#A|p%-8Jm9csR|cTTrwtXm|bjH>aD{s-`DSpuPwA^Mq- z88l^-dtSUFjw9ZRX$XF{kpiLH0rwX_2Q`)aNxNuDKE8T+yBbI;66S$Uk7gw zGy~N81NSOoS5+Qb4%8P=0Hp_@Do{P-k1f1WE{np zn4TBC(8AKocn%m;S7l5>;U>iD5r5t1@#cvK-O0upLwKYve=U=(8l=lQL5Q1DV? zKIBPs9csId+R{|ISz}6C+|4L_;9c(p=B)T-Ec4ts)8A7d=M{^ERNi-w13MQ;I2dDMjsbe1y1}uYoLO7E&Rdf zT$aI&x2(bcA`K{S0BsAaxY^*vI)dh#GVw@~^RFY^^_D=D{7IQWS+9aK_bgr(xJ5f5 zF>-Q>$O?qgcL*d%JKjg8%MlYkLPi{P77^G(gm8`MNQ}jlvHTnr!`Qt)tse}_RqNpXGG6;|6i|A%v z$wkIN)`MT?tzz~o$xqnuo|Dyf2iw*m+qNM)ZMD7liPSkf&Si1j9F3!UzuIT)9@C=%*vcKOHj=GYCS72w{=h{uui@Pat7fK&C7SLc$Eeqv9l(u0t%_s$;r`Vb_%i8V=*8aJ}^xqwr zL?=(jwsx!b6EmIEMU%CPt4ZtpCXS1rmkc#);GF`O(#T$UZ+WEQAIHhopGQ>Es$%W$ ztvLu6+%kIp6?mu!ec!LVqdU^Di_lb^wE)vplFY}8H+`4c9P57I?)8u1Zvq5N68fhB z^?%D%U_RUKKM@cSgDm>lTClt1wuhxb#hZbzq9$luYMv0+;y3js`dRF)2diB3MhT0M zWmapiNbgX5sIaP#$)s*-=JW_CPtr)bu3czOE`<>RZ>?wR`yVf5C@Y<_q3Ili=dbTE z&bw5N{-wYNe<(m(VG)w6=Qu50_rm@W{fhMtj@fz)J$-CIU5j8ZVo`@QeUUE1U_NS^ Rvk_}Xc)?jc&j6ZK{|C1g-mCxs diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_null_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_null_0.azshadervariant index 674ed7b1ac9a931a9c56889d13f32032fd5390ae..af7c9626941cbdb222496d8485268501ae2beaac 100644 GIT binary patch delta 16 XcmeyS`b~AiJ0T9Wh{0 diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_objectsrg.azsrg b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_objectsrg.azsrg index 856baff38e..47f5e48fca 100644 --- a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_objectsrg.azsrg +++ b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_objectsrg.azsrg @@ -99,6 +99,44 @@ } ] }, + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + } + ] + }, { "field": "element", "typeName": "ShaderInputImageDescriptor", @@ -261,6 +299,26 @@ "value": "3" } ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + } + ] } ] }, @@ -279,7 +337,7 @@ "field": "m_groupSizeForImages", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" }, { "field": "m_groupSizeForBufferUnboundedArrays", @@ -343,7 +401,7 @@ "field": "m_index", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "1" + "value": "2" } ] } @@ -399,7 +457,35 @@ "field": "m_index", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" } ] } @@ -3177,7 +3263,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "10943999648486519461" + "value": "12354971452077948474" } ] } @@ -3267,6 +3353,44 @@ } ] }, + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + } + ] + }, { "field": "element", "typeName": "ShaderInputImageDescriptor", @@ -3429,6 +3553,26 @@ "value": "3" } ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + } + ] } ] }, @@ -3447,7 +3591,7 @@ "field": "m_groupSizeForImages", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" }, { "field": "m_groupSizeForBufferUnboundedArrays", @@ -3511,7 +3655,7 @@ "field": "m_index", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "1" + "value": "2" } ] } @@ -3567,7 +3711,35 @@ "field": "m_index", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" } ] } @@ -6345,7 +6517,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "10943999648486519461" + "value": "12354971452077948474" } ] } @@ -6435,6 +6607,44 @@ } ] }, + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + } + ] + }, { "field": "element", "typeName": "ShaderInputImageDescriptor", @@ -6469,7 +6679,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "1" + "value": "2" } ] }, @@ -6507,7 +6717,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] } @@ -6597,6 +6807,26 @@ "value": "3" } ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + } + ] } ] }, @@ -6615,7 +6845,7 @@ "field": "m_groupSizeForImages", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" }, { "field": "m_groupSizeForBufferUnboundedArrays", @@ -6679,7 +6909,7 @@ "field": "m_index", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "1" + "value": "2" } ] } @@ -6735,7 +6965,35 @@ "field": "m_index", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" } ] } @@ -6824,7 +7082,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -6856,7 +7114,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -6888,7 +7146,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -6920,7 +7178,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -6952,7 +7210,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -6984,7 +7242,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7016,7 +7274,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7048,7 +7306,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7080,7 +7338,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7112,7 +7370,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7144,7 +7402,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7176,7 +7434,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7208,7 +7466,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7240,7 +7498,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7272,7 +7530,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7304,7 +7562,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7336,7 +7594,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7368,7 +7626,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7400,7 +7658,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7432,7 +7690,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7464,7 +7722,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7496,7 +7754,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7528,7 +7786,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7560,7 +7818,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7592,7 +7850,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7624,7 +7882,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7656,7 +7914,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7688,7 +7946,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7720,7 +7978,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7752,7 +8010,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7784,7 +8042,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7816,7 +8074,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7848,7 +8106,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] } @@ -9469,7 +9727,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "14153574899631108967" + "value": "11445921412800959080" } ] } @@ -9513,7 +9771,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "8072403242124824453" + "value": "16873325821914315993" } ] } diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_vulkan_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_vulkan_0.azshadervariant index 1dfcbd3ac3ce6667f3ae591d8da91d8aa7af5c35..4e9771d614e2d6c7fc40b5ed9eae75421e5e1360 100644 GIT binary patch delta 529 zcmeC%$2f04z`E?;;;+tE<7PB%6P1cZ+XJpyzAtTK!=)u4Wwox2thcXZwY)+70%giV>nNQhv zv%9h~E1#o@-M6)ytdGFML3nbvh92Xa&AT+tG3jyx-Ar^iOx~z1A_op6Y#s+01o1eF z4#?wjlg)JaCQInZF@n6TJ$V|Cw^vk&6{Jph@^l^b$fi zQGBzx?teC*H_c7vGcrxSZX(afJo!72WSN|!D8Jdv^bZr*+aPlg-qyE}Wd(ZM*VcA( Qn{9(4huZQ9-h4n60A*^2i2wiq delta 416 zcmbQYpRsQro7qCEs=m@~v^n&139*^ozcvXGDtW6WlIp=nI)TnsD>3=BMz z^>q~WA#7eCKP)q~Jh&)5J~zI&Aiu;XGd-ikIlnZo1SrM8#=s5M!#6obRC{u?DBt9% zqH>elf%G07DOQkaf|DPJ8Z!z_=GRpQ^Mxndh^aG*Opb^0MJM+F`C^mT>xyqaE!M-z zC^$JnMxK#*bA^mF^XBF9tC$%jCkH9pZl0_x&&pT&pE)FwdFm{<`-LZ8*3e^IvYAQq z91|ngOihnpB$tk1a!R=D@a6O@_HR@pi>@*>Vx?p_p394 z+^#&?NLOfbj;<6V$mPnDn{WIiL~WPek6MyAR6K$3a#21WVJ>rDSJ kZQf@g#mX$nz&825t@Pw?whEi2>}nJ_-a1CvvIA`c03e5KYybcN diff --git a/Gems/Atom/Feature/Common/Code/Source/CommonSystemComponent.cpp b/Gems/Atom/Feature/Common/Code/Source/CommonSystemComponent.cpp index 5f7057c9be..be6d438a62 100644 --- a/Gems/Atom/Feature/Common/Code/Source/CommonSystemComponent.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/CommonSystemComponent.cpp @@ -96,6 +96,7 @@ #include #include #include +#include #include #include #include @@ -261,6 +262,7 @@ namespace AZ passSystem->AddPassCreator(Name("DiffuseProbeGridBlendDistancePass"), &Render::DiffuseProbeGridBlendDistancePass::Create); passSystem->AddPassCreator(Name("DiffuseProbeGridBorderUpdatePass"), &Render::DiffuseProbeGridBorderUpdatePass::Create); passSystem->AddPassCreator(Name("DiffuseProbeGridRelocationPass"), &Render::DiffuseProbeGridRelocationPass::Create); + passSystem->AddPassCreator(Name("DiffuseProbeGridClassificationPass"), &Render::DiffuseProbeGridClassificationPass::Create); passSystem->AddPassCreator(Name("DiffuseProbeGridRenderPass"), &Render::DiffuseProbeGridRenderPass::Create); passSystem->AddPassCreator(Name("LuminanceHistogramGeneratorPass"), &LuminanceHistogramGeneratorPass::Create); diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGrid.cpp b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGrid.cpp index eeb32cdd07..8a349083ea 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGrid.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGrid.cpp @@ -41,6 +41,7 @@ namespace AZ m_irradianceImageAttachmentId = AZStd::string::format("ProbeIrradianceImageAttachmentId_%s", uuidString.c_str()); m_distanceImageAttachmentId = AZStd::string::format("ProbeDistanceImageAttachmentId_%s", uuidString.c_str()); m_relocationImageAttachmentId = AZStd::string::format("ProbeRelocationImageAttachmentId_%s", uuidString.c_str()); + m_classificationImageAttachmentId = AZStd::string::format("ProbeClassificationImageAttachmentId_%s", uuidString.c_str()); // setup culling m_cullable.m_cullData.m_scene = m_scene; @@ -252,6 +253,20 @@ namespace AZ AZ_Assert(result == RHI::ResultCode::Success, "Failed to initialize m_probeRelocationImage image"); } + // probe classification + { + uint32_t width = probeCountX; + uint32_t height = probeCountY; + + m_classificationImage[m_currentImageIndex] = RHI::Factory::Get().CreateImage(); + + RHI::ImageInitRequest request; + request.m_image = m_classificationImage[m_currentImageIndex].get(); + request.m_descriptor = RHI::ImageDescriptor::Create2D(RHI::ImageBindFlags::ShaderReadWrite, width, height, DiffuseProbeGridRenderData::ClassificationImageFormat); + RHI::ResultCode result = m_renderData->m_imagePool->InitImage(request); + AZ_Assert(result == RHI::ResultCode::Success, "Failed to initialize m_probeClassificationImage image"); + } + m_updateTextures = false; // textures have changed so we need to update the render Srg to bind the new ones @@ -401,6 +416,10 @@ namespace AZ imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeOffsets")); m_rayTraceSrg->SetImageView(imageIndex, m_relocationImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeRelocationImageViewDescriptor).get()); + // probe classification + imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeStates")); + m_rayTraceSrg->SetImageView(imageIndex, m_classificationImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeClassificationImageViewDescriptor).get()); + // grid settings constantIndex = srgLayout->FindShaderInputConstantIndex(Name("m_ambientMultiplier")); m_rayTraceSrg->SetConstant(constantIndex, m_ambientMultiplier); @@ -431,6 +450,9 @@ namespace AZ imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeIrradiance")); m_blendIrradianceSrg->SetImageView(imageIndex, m_irradianceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeIrradianceImageViewDescriptor).get()); + imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeStates")); + m_blendIrradianceSrg->SetImageView(imageIndex, m_classificationImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeClassificationImageViewDescriptor).get()); + SetGridConstants(m_blendIrradianceSrg); } @@ -451,6 +473,9 @@ namespace AZ imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeDistance")); m_blendDistanceSrg->SetImageView(imageIndex, m_distanceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeDistanceImageViewDescriptor).get()); + imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeStates")); + m_blendDistanceSrg->SetImageView(imageIndex, m_classificationImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeClassificationImageViewDescriptor).get()); + SetGridConstants(m_blendDistanceSrg); } @@ -559,6 +584,27 @@ namespace AZ SetGridConstants(m_relocationSrg); } + void DiffuseProbeGrid::UpdateClassificationSrg(const Data::Asset& srgAsset) + { + if (!m_classificationSrg) + { + m_classificationSrg = RPI::ShaderResourceGroup::Create(srgAsset); + AZ_Error("DiffuseProbeGrid", m_classificationSrg.get(), "Failed to create Classification shader resource group"); + } + + const RHI::ShaderResourceGroupLayout* srgLayout = m_classificationSrg->GetLayout(); + RHI::ShaderInputConstantIndex constantIndex; + RHI::ShaderInputImageIndex imageIndex; + + imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeRayTrace")); + m_classificationSrg->SetImageView(imageIndex, m_rayTraceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeRayTraceImageViewDescriptor).get()); + + imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeStates")); + m_classificationSrg->SetImageView(imageIndex, m_classificationImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeClassificationImageViewDescriptor).get()); + + SetGridConstants(m_classificationSrg); + } + void DiffuseProbeGrid::UpdateRenderObjectSrg() { if (!m_updateRenderObjectSrg) @@ -601,6 +647,9 @@ namespace AZ imageIndex = srgLayout->FindShaderInputImageIndex(Name("m_probeOffsets")); m_renderObjectSrg->SetImageView(imageIndex, m_relocationImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeRelocationImageViewDescriptor).get()); + imageIndex = srgLayout->FindShaderInputImageIndex(Name("m_probeStates")); + m_renderObjectSrg->SetImageView(imageIndex, m_classificationImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeClassificationImageViewDescriptor).get()); + SetGridConstants(m_renderObjectSrg); m_updateRenderObjectSrg = false; diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGrid.h b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGrid.h index a92daeffaa..e1ca2123a5 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGrid.h +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGrid.h @@ -30,6 +30,7 @@ namespace AZ static const RHI::Format IrradianceImageFormat = RHI::Format::R16G16B16A16_UNORM; static const RHI::Format DistanceImageFormat = RHI::Format::R32G32_FLOAT; static const RHI::Format RelocationImageFormat = RHI::Format::R16G16B16A16_FLOAT; + static const RHI::Format ClassificationImageFormat = RHI::Format::R8_UINT; // image pool RHI::Ptr m_imagePool; @@ -43,6 +44,7 @@ namespace AZ RHI::ImageViewDescriptor m_probeIrradianceImageViewDescriptor; RHI::ImageViewDescriptor m_probeDistanceImageViewDescriptor; RHI::ImageViewDescriptor m_probeRelocationImageViewDescriptor; + RHI::ImageViewDescriptor m_probeClassificationImageViewDescriptor; // render pipeline state RPI::Ptr m_pipelineState; @@ -118,6 +120,7 @@ namespace AZ const Data::Instance& GetBorderUpdateRowDistanceSrg() const { return m_borderUpdateRowDistanceSrg; } const Data::Instance& GetBorderUpdateColumnDistanceSrg() const { return m_borderUpdateColumnDistanceSrg; } const Data::Instance& GetRelocationSrg() const { return m_relocationSrg; } + const Data::Instance& GetClassificationSrg() const { return m_classificationSrg; } const Data::Instance& GetRenderObjectSrg() const { return m_renderObjectSrg; } // Srg updates @@ -126,6 +129,7 @@ namespace AZ void UpdateBlendDistanceSrg(const Data::Asset& srgAsset); void UpdateBorderUpdateSrgs(const Data::Asset& rowSrgAsset, const Data::Asset& columnSrgAsset); void UpdateRelocationSrg(const Data::Asset& srgAsset); + void UpdateClassificationSrg(const Data::Asset& srgAsset); void UpdateRenderObjectSrg(); // textures @@ -133,12 +137,14 @@ namespace AZ const RHI::Ptr& GetIrradianceImage() { return m_irradianceImage[m_currentImageIndex]; } const RHI::Ptr& GetDistanceImage() { return m_distanceImage[m_currentImageIndex]; } const RHI::Ptr& GetRelocationImage() { return m_relocationImage[m_currentImageIndex]; } + const RHI::Ptr& GetClassificationImage() { return m_classificationImage[m_currentImageIndex]; } // attachment Ids const RHI::AttachmentId GetRayTraceImageAttachmentId() const { return m_rayTraceImageAttachmentId; } const RHI::AttachmentId GetIrradianceImageAttachmentId() const { return m_irradianceImageAttachmentId; } const RHI::AttachmentId GetDistanceImageAttachmentId() const { return m_distanceImageAttachmentId; } const RHI::AttachmentId GetRelocationImageAttachmentId() const { return m_relocationImageAttachmentId; } + const RHI::AttachmentId GetClassificationImageAttachmentId() const { return m_classificationImageAttachmentId; } const DiffuseProbeGridRenderData* GetRenderData() const { return m_renderData; } @@ -222,6 +228,7 @@ namespace AZ RHI::Ptr m_irradianceImage[ImageFrameCount]; RHI::Ptr m_distanceImage[ImageFrameCount]; RHI::Ptr m_relocationImage[ImageFrameCount]; + RHI::Ptr m_classificationImage[ImageFrameCount]; uint32_t m_currentImageIndex = 0; bool m_updateTextures = false; bool m_irradianceClearRequired = true; @@ -235,6 +242,7 @@ namespace AZ Data::Instance m_borderUpdateRowDistanceSrg; Data::Instance m_borderUpdateColumnDistanceSrg; Data::Instance m_relocationSrg; + Data::Instance m_classificationSrg; Data::Instance m_renderObjectSrg; bool m_updateRenderObjectSrg = true; @@ -243,6 +251,7 @@ namespace AZ RHI::AttachmentId m_irradianceImageAttachmentId; RHI::AttachmentId m_distanceImageAttachmentId; RHI::AttachmentId m_relocationImageAttachmentId; + RHI::AttachmentId m_classificationImageAttachmentId; }; } // namespace Render } // namespace AZ diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridBlendDistancePass.cpp b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridBlendDistancePass.cpp index 33c14afe86..3df13556d3 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridBlendDistancePass.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridBlendDistancePass.cpp @@ -132,6 +132,16 @@ namespace AZ frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite); } + + // probe classification image + { + RHI::ImageScopeAttachmentDescriptor desc; + desc.m_attachmentId = diffuseProbeGrid->GetClassificationImageAttachmentId(); + desc.m_imageViewDescriptor = diffuseProbeGrid->GetRenderData()->m_probeClassificationImageViewDescriptor; + desc.m_loadStoreAction.m_loadAction = AZ::RHI::AttachmentLoadAction::Load; + + frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite); + } } } diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridBlendIrradiancePass.cpp b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridBlendIrradiancePass.cpp index 5d25b68b18..4e05b8ef31 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridBlendIrradiancePass.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridBlendIrradiancePass.cpp @@ -132,6 +132,16 @@ namespace AZ frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite); } + + // probe classification image + { + RHI::ImageScopeAttachmentDescriptor desc; + desc.m_attachmentId = diffuseProbeGrid->GetClassificationImageAttachmentId(); + desc.m_imageViewDescriptor = diffuseProbeGrid->GetRenderData()->m_probeClassificationImageViewDescriptor; + desc.m_loadStoreAction.m_loadAction = AZ::RHI::AttachmentLoadAction::Load; + + frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite); + } } } diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridFeatureProcessor.cpp index 8f39b6e1b3..1aaa06c797 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridFeatureProcessor.cpp @@ -73,6 +73,7 @@ namespace AZ m_probeGridRenderData.m_probeIrradianceImageViewDescriptor = RHI::ImageViewDescriptor::Create(DiffuseProbeGridRenderData::IrradianceImageFormat, 0, 0); m_probeGridRenderData.m_probeDistanceImageViewDescriptor = RHI::ImageViewDescriptor::Create(DiffuseProbeGridRenderData::DistanceImageFormat, 0, 0); m_probeGridRenderData.m_probeRelocationImageViewDescriptor = RHI::ImageViewDescriptor::Create(DiffuseProbeGridRenderData::RelocationImageFormat, 0, 0); + m_probeGridRenderData.m_probeClassificationImageViewDescriptor = RHI::ImageViewDescriptor::Create(DiffuseProbeGridRenderData::ClassificationImageFormat, 0, 0); // load shader // Note: the shader may not be available on all platforms diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridRayTracingPass.cpp b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridRayTracingPass.cpp index ddda810eb7..6a0e618830 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridRayTracingPass.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridRayTracingPass.cpp @@ -291,6 +291,19 @@ namespace AZ frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite); } + + // probe classification + { + RHI::ResultCode result = frameGraph.GetAttachmentDatabase().ImportImage(diffuseProbeGrid->GetClassificationImageAttachmentId(), diffuseProbeGrid->GetClassificationImage()); + AZ_Assert(result == RHI::ResultCode::Success, "Failed to import probeClassificationImage"); + + RHI::ImageScopeAttachmentDescriptor desc; + desc.m_attachmentId = diffuseProbeGrid->GetClassificationImageAttachmentId(); + desc.m_imageViewDescriptor = diffuseProbeGrid->GetRenderData()->m_probeClassificationImageViewDescriptor; + desc.m_loadStoreAction.m_loadAction = AZ::RHI::AttachmentLoadAction::Load; + + frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite); + } } } diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridRenderPass.cpp b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridRenderPass.cpp index c5ac94607e..af6fce6f6a 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridRenderPass.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridRenderPass.cpp @@ -117,6 +117,16 @@ namespace AZ frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite); } + + // probe classification image + { + RHI::ImageScopeAttachmentDescriptor desc; + desc.m_attachmentId = diffuseProbeGrid->GetClassificationImageAttachmentId(); + desc.m_imageViewDescriptor = diffuseProbeGrid->GetRenderData()->m_probeClassificationImageViewDescriptor; + desc.m_loadStoreAction.m_loadAction = AZ::RHI::AttachmentLoadAction::Load; + + frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite); + } } Base::SetupFrameGraphDependencies(frameGraph); diff --git a/Gems/Atom/Feature/Common/Code/Source/RayTracing/RayTracingFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/RayTracing/RayTracingFeatureProcessor.cpp index 9df7f262ac..bb8f7ff54d 100644 --- a/Gems/Atom/Feature/Common/Code/Source/RayTracing/RayTracingFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/RayTracing/RayTracingFeatureProcessor.cpp @@ -21,6 +21,8 @@ #include #include #include +#include +#include #include #include #include @@ -195,7 +197,23 @@ namespace AZ constantIndex = srgLayout->FindShaderInputConstantIndex(AZ::Name("m_directionalLightCount")); m_rayTracingSceneSrg->SetConstant(constantIndex, directionalLightFP->GetLightCount()); - // point lights + // simple point lights + const auto simplePointLightFP = GetParentScene()->GetFeatureProcessor(); + bufferIndex = srgLayout->FindShaderInputBufferIndex(AZ::Name("m_simplePointLights")); + m_rayTracingSceneSrg->SetBufferView(bufferIndex, simplePointLightFP->GetLightBuffer()->GetBufferView()); + + constantIndex = srgLayout->FindShaderInputConstantIndex(AZ::Name("m_simplePointLightCount")); + m_rayTracingSceneSrg->SetConstant(constantIndex, simplePointLightFP->GetLightCount()); + + // simple spot lights + const auto simpleSpotLightFP = GetParentScene()->GetFeatureProcessor(); + bufferIndex = srgLayout->FindShaderInputBufferIndex(AZ::Name("m_simpleSpotLights")); + m_rayTracingSceneSrg->SetBufferView(bufferIndex, simpleSpotLightFP->GetLightBuffer()->GetBufferView()); + + constantIndex = srgLayout->FindShaderInputConstantIndex(AZ::Name("m_simpleSpotLightCount")); + m_rayTracingSceneSrg->SetConstant(constantIndex, simpleSpotLightFP->GetLightCount()); + + // point lights (sphere) const auto pointLightFP = GetParentScene()->GetFeatureProcessor(); bufferIndex = srgLayout->FindShaderInputBufferIndex(AZ::Name("m_pointLights")); m_rayTracingSceneSrg->SetBufferView(bufferIndex, pointLightFP->GetLightBuffer()->GetBufferView()); diff --git a/Gems/Atom/Feature/Common/Code/atom_feature_common_files.cmake b/Gems/Atom/Feature/Common/Code/atom_feature_common_files.cmake index 7e23bc340f..47000d8a5c 100644 --- a/Gems/Atom/Feature/Common/Code/atom_feature_common_files.cmake +++ b/Gems/Atom/Feature/Common/Code/atom_feature_common_files.cmake @@ -131,6 +131,8 @@ set(FILES Source/DiffuseProbeGrid/DiffuseProbeGridBorderUpdatePass.h Source/DiffuseProbeGrid/DiffuseProbeGridRelocationPass.cpp Source/DiffuseProbeGrid/DiffuseProbeGridRelocationPass.h + Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.cpp + Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.h Source/DiffuseProbeGrid/DiffuseProbeGridRenderPass.cpp Source/DiffuseProbeGrid/DiffuseProbeGridRenderPass.h Source/DiffuseProbeGrid/DiffuseProbeGrid.cpp From c367e514627c6e8c83be407b33273f1dde387470 Mon Sep 17 00:00:00 2001 From: dmcdiar Date: Mon, 19 Apr 2021 02:30:52 -0700 Subject: [PATCH 09/67] Added DiffuseProbeGridClassification pass. --- .../DiffuseProbeGridClassification.pass | 11 + ...eProbeGridClassification.precompiledshader | 32 + .../diffuseprobegridclassification.azshader | Bin 0 -> 40224 bytes ...egridclassification_dx12_0.azshadervariant | Bin 0 -> 10106 bytes ...egridclassification_null_0.azshadervariant | Bin 0 -> 4502 bytes ...ffuseprobegridclassification_passsrg.azsrg | 8071 +++++++++++++++++ ...ridclassification_vulkan_0.azshadervariant | Bin 0 -> 8914 bytes .../DiffuseProbeGridClassificationPass.cpp | 182 + .../DiffuseProbeGridClassificationPass.h | 66 + 9 files changed, 8362 insertions(+) create mode 100644 Gems/Atom/Feature/Common/Assets/Passes/DiffuseProbeGridClassification.pass create mode 100644 Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/DiffuseProbeGridClassification.precompiledshader create mode 100644 Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification.azshader create mode 100644 Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification_dx12_0.azshadervariant create mode 100644 Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification_null_0.azshadervariant create mode 100644 Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification_passsrg.azsrg create mode 100644 Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification_vulkan_0.azshadervariant create mode 100644 Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.cpp create mode 100644 Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.h diff --git a/Gems/Atom/Feature/Common/Assets/Passes/DiffuseProbeGridClassification.pass b/Gems/Atom/Feature/Common/Assets/Passes/DiffuseProbeGridClassification.pass new file mode 100644 index 0000000000..c50890dac2 --- /dev/null +++ b/Gems/Atom/Feature/Common/Assets/Passes/DiffuseProbeGridClassification.pass @@ -0,0 +1,11 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "PassAsset", + "ClassData": { + "PassTemplate": { + "Name": "DiffuseProbeGridClassificationPassTemplate", + "PassClass": "DiffuseProbeGridClassificationPass" + } + } +} \ No newline at end of file diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/DiffuseProbeGridClassification.precompiledshader b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/DiffuseProbeGridClassification.precompiledshader new file mode 100644 index 0000000000..e7b15190e5 --- /dev/null +++ b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/DiffuseProbeGridClassification.precompiledshader @@ -0,0 +1,32 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "PrecompiledShaderAssetSourceData", + "ClassData": + { + "ShaderAssetFileName": "diffuseprobegridclassification.azshader", + "PlatformIdentifiers": + [ + "pc" + ], + "ShaderResourceGroupAssets": + [ + "diffuseprobegridclassification_passsrg.azsrg" + ], + "RootShaderVariantAssets": + [ + { + "APIName": "dx12", + "RootShaderVariantAssetFileName": "diffuseprobegridclassification_dx12_0.azshadervariant" + }, + { + "APIName": "vulkan", + "RootShaderVariantAssetFileName": "diffuseprobegridclassification_vulkan_0.azshadervariant" + }, + { + "APIName": "null", + "RootShaderVariantAssetFileName": "diffuseprobegridclassification_null_0.azshadervariant" + } + ] + } +} \ No newline at end of file diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification.azshader b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification.azshader new file mode 100644 index 0000000000000000000000000000000000000000..39322fc48481c8420d1e60c410ab4a9b5a965852 GIT binary patch literal 40224 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 WWOyUcgs|33j}_Bho5 literal 0 HcmV?d00001 diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification_null_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification_null_0.azshadervariant new file mode 100644 index 0000000000000000000000000000000000000000..58124203ee382908b2dfc7187dc9934d7cc6e491 GIT binary patch literal 4502 zcmZQzU|?YGV4m-r>g{6blh}Lq=`GnObRz;TyI}%Bx>fQ)%kg$oP2cD9EKD7 zdJ6R!Z^a~stZEGK?%3b=wNYwUV$7MA8>!B>CS=#X_gOK0LaQU&<)6(!bAiCa*ZzBy z`o@2Udb-@NFEB~t{KctlQrR_O^-9fClO)BT#GjvO^6pG*C-+VPhz2CGvOfQ?0bykf zk#UcW-z+%Q!L$B}^XW-Bk!w6W6NMNUPIO!hc*0oICdj7}>UyC$>9EZD{CBfGE}Fiu z;3(KGw}vg|+l691ac&&;~n*&o>xc!)FfqhbRW|iwjhvXq%so4>$S^X*9A(cp#3IAM5OdgUu{Ks2h7&74^(Qfw72mjV z__mwY!qD>%FBuC@kCL1eUjAmm7Um;AyxXS!Y0T(l$#Y;}WQeNS#4Ug!4vYxdUiS+9 z8|!&9i=%y~&6u}8PpZJ?grh^8C1cO&b}gO59y3T}vJxUFdC5ug7}8m~ByEY2|l%P^dHaBtN&M$W!< z&5J)f6>ML#=Av-g?wz(-x+HVa3V<+i6{z8uUifmAHQH-6V(muY^ly8*k5)3?=|v3L2L z{@b=4iww}TJ$2F{*i8eaVJu$f2ZkcJLLT)dT5~sMG&V;Q?P%T{ErLc%TCCL*?g|B1 zeR;gR>", + "typeId": "{A85E274A-4C1D-546F-B18C-452C5700BAE4}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{F4529C0B-A2C0-5A32-A348-59D45FB1776B}" + } + ] + }, + { + "field": "m_idReflectionForImages", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{BB6D1ABE-9A2F-5F51-93CB-B1B866EFD5B4}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{BBD5D625-992D-5296-A631-9B84B00CE2F1}", + "Objects": [ + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeRayTrace" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + } + ] + } + ] + } + ] + } + ] + }, + { + "field": "m_idReflectionForBufferUnboundedArrays", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{46520159-BC56-5E90-89AD-3CB0A5D295B0}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{CD6D3195-A87A-5E0C-AD4D-23457B3B8DCF}" + } + ] + }, + { + "field": "m_idReflectionForImageUnboundedArrays", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{A33C41AC-ABA0-5A34-9A6B-89BABDC151D7}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{14C5FF00-B370-575F-866B-B19B97F76D82}" + } + ] + }, + { + "field": "m_idReflectionForSamplers", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{2665EED7-CFB4-582B-B265-107348B1DFAC}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{1545A615-BFD7-515C-A1E9-710570135F08}" + } + ] + }, + { + "field": "m_constantsDataLayout", + "typeName": "AZStd::intrusive_ptr", + "typeId": "{CEB3049A-A620-56C8-AFBA-D0A98304333D}", + "Objects": [ + { + "field": "element", + "typeName": "ConstantsLayout", + "typeId": "{66EDAC32-7730-4F05-AF9D-B3CB0F5D90E0}", + "Objects": [ + { + "field": "m_inputs", + "typeName": "AZStd::vector", + "typeId": "{5FC25C85-DF2F-5219-918C-EBC47D7D6451}", + "Objects": [ + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.origin" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.numRaysPerProbe" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeGridSpacing" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeMaxRayDistance" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "28" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeGridCounts" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "32" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeDistanceExponent" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "44" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeHysteresis" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "48" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeChangeThreshold" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "52" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeBrightnessThreshold" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "56" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeIrradianceEncodingGamma" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "60" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeInverseIrradianceEncodingGamma" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeNumIrradianceTexels" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "68" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeNumDistanceTexels" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "72" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.normalBias" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "76" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.viewBias" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "80" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeVariablePad0" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "84" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeRayRotationTransform" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "96" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.volumeMovementType" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "160" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeScrollOffsets" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "164" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeBackfaceThreshold" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "176" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeMinFrontfaceDistance" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "180" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "184" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "8" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[0]" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[1]" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "208" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[2]" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "224" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[3]" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "240" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + } + ] + }, + { + "field": "m_idReflection", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{7DE7E4B8-5C98-5F7A-985F-DDEEA5BB5366}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{4B54CC87-1340-5B29-8040-2003033F9B93}", + "Objects": [ + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeMinFrontfaceDistance" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "20" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeNumDistanceTexels" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "27" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeInverseIrradianceEncodingGamma" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "10" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "26" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeScrollOffsets" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "18" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeIrradianceEncodingGamma" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "9" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.normalBias" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "13" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeBrightnessThreshold" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "8" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeHysteresis" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "6" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeRayRotationTransform" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[2]" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "24" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[3]" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "25" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[0]" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "22" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[1]" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "23" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeChangeThreshold" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "7" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "21" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.origin" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.numRaysPerProbe" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeGridSpacing" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeBackfaceThreshold" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "19" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeMaxRayDistance" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeNumIrradianceTexels" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "11" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeGridCounts" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeVariablePad0" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "15" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.volumeMovementType" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "17" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeDistanceExponent" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "5" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.viewBias" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "14" + } + ] + } + ] + } + ] + } + ] + }, + { + "field": "m_intervals", + "typeName": "AZStd::vector", + "typeId": "{908FF0AE-802D-5311-A2E0-A6D595FBC480}", + "Objects": [ + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "28" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "28" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "32" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "32" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "44" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "44" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "48" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "48" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "52" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "52" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "56" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "56" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "60" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "60" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "68" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "68" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "72" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "72" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "76" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "76" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "80" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "80" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "84" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "84" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "96" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "96" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "160" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "160" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "164" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "164" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "176" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "176" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "180" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "180" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "184" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "184" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "208" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "208" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "224" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "224" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "240" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "240" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + } + ] + } + ] + }, + { + "field": "m_sizeInBytes", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + }, + { + "field": "m_hash", + "typeName": "AZ::u64", + "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", + "value": "7181601620235669059" + } + ] + } + ] + }, + { + "field": "m_bindingSlot", + "typeName": "AZ::RHI::Handle", + "typeId": "{1811456D-0C3D-58C8-ACE8-FD47F4E80E25}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + } + ] + }, + { + "field": "m_shaderVariantKeyFallbackSize", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_shaderVariantKeyFallbackConstantIndex", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4294967295" + } + ] + }, + { + "field": "m_hash", + "typeName": "AZ::u64", + "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", + "value": "10614022793008117732" + } + ] + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZStd::pair", + "typeId": "{5C6406C8-77C9-597F-A3E9-249628D94902}", + "Objects": [ + { + "field": "value1", + "typeName": "Crc32", + "typeId": "{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}", + "Objects": [ + { + "field": "Value", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "634125391" + } + ] + }, + { + "field": "value2", + "typeName": "AZStd::intrusive_ptr", + "typeId": "{FF05CAD3-238F-5E19-8FF2-083353BBEC47}", + "Objects": [ + { + "field": "element", + "typeName": "ShaderResourceGroupLayout", + "typeId": "{1F92C651-9B83-4379-AB5C-5201F1B2C278}", + "version": 6, + "Objects": [ + { + "field": "m_staticSamplers", + "typeName": "AZStd::vector", + "typeId": "{D3BC4729-3DE0-57A1-96E0-DCFF98D4D975}" + }, + { + "field": "m_inputsForBuffers", + "typeName": "AZStd::vector", + "typeId": "{A4650430-04B9-589A-991F-4B443DCD20EA}" + }, + { + "field": "m_inputsForImages", + "typeName": "AZStd::vector", + "typeId": "{909BE4D8-5A22-59A4-A135-4E73662E2D83}", + "Objects": [ + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeRayTrace" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + } + ] + } + ] + }, + { + "field": "m_inputsForBufferUnboundedArrays", + "typeName": "AZStd::vector", + "typeId": "{DD5102EE-72A9-55F7-AB54-14F228FAE38F}" + }, + { + "field": "m_inputsForImageUnboundedArrays", + "typeName": "AZStd::vector", + "typeId": "{8042FF1E-9115-53F7-BE33-3DCDE9C0AB7F}" + }, + { + "field": "m_inputsForSamplers", + "typeName": "AZStd::vector", + "typeId": "{4CF286E1-5297-581D-93E9-891166EDAD9A}" + }, + { + "field": "m_intervalsForBuffers", + "typeName": "AZStd::vector", + "typeId": "{908FF0AE-802D-5311-A2E0-A6D595FBC480}" + }, + { + "field": "m_intervalsForImages", + "typeName": "AZStd::vector", + "typeId": "{908FF0AE-802D-5311-A2E0-A6D595FBC480}", + "Objects": [ + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + } + ] + }, + { + "field": "m_intervalsForSamplers", + "typeName": "AZStd::vector", + "typeId": "{908FF0AE-802D-5311-A2E0-A6D595FBC480}" + }, + { + "field": "m_groupSizeForBuffers", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_groupSizeForImages", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + }, + { + "field": "m_groupSizeForBufferUnboundedArrays", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_groupSizeForImageUnboundedArrays", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_groupSizeForSamplers", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_idReflectionForBuffers", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{A85E274A-4C1D-546F-B18C-452C5700BAE4}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{F4529C0B-A2C0-5A32-A348-59D45FB1776B}" + } + ] + }, + { + "field": "m_idReflectionForImages", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{BB6D1ABE-9A2F-5F51-93CB-B1B866EFD5B4}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{BBD5D625-992D-5296-A631-9B84B00CE2F1}", + "Objects": [ + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeRayTrace" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + } + ] + } + ] + } + ] + } + ] + }, + { + "field": "m_idReflectionForBufferUnboundedArrays", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{46520159-BC56-5E90-89AD-3CB0A5D295B0}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{CD6D3195-A87A-5E0C-AD4D-23457B3B8DCF}" + } + ] + }, + { + "field": "m_idReflectionForImageUnboundedArrays", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{A33C41AC-ABA0-5A34-9A6B-89BABDC151D7}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{14C5FF00-B370-575F-866B-B19B97F76D82}" + } + ] + }, + { + "field": "m_idReflectionForSamplers", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{2665EED7-CFB4-582B-B265-107348B1DFAC}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{1545A615-BFD7-515C-A1E9-710570135F08}" + } + ] + }, + { + "field": "m_constantsDataLayout", + "typeName": "AZStd::intrusive_ptr", + "typeId": "{CEB3049A-A620-56C8-AFBA-D0A98304333D}", + "Objects": [ + { + "field": "element", + "typeName": "ConstantsLayout", + "typeId": "{66EDAC32-7730-4F05-AF9D-B3CB0F5D90E0}", + "Objects": [ + { + "field": "m_inputs", + "typeName": "AZStd::vector", + "typeId": "{5FC25C85-DF2F-5219-918C-EBC47D7D6451}", + "Objects": [ + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.origin" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.numRaysPerProbe" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeGridSpacing" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeMaxRayDistance" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "28" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeGridCounts" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "32" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeDistanceExponent" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "44" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeHysteresis" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "48" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeChangeThreshold" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "52" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeBrightnessThreshold" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "56" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeIrradianceEncodingGamma" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "60" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeInverseIrradianceEncodingGamma" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeNumIrradianceTexels" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "68" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeNumDistanceTexels" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "72" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.normalBias" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "76" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.viewBias" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "80" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeVariablePad0" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "84" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeRayRotationTransform" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "96" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.volumeMovementType" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "160" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeScrollOffsets" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "164" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeBackfaceThreshold" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "176" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeMinFrontfaceDistance" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "180" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "184" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "8" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[0]" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[1]" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "208" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[2]" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "224" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[3]" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "240" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + } + ] + }, + { + "field": "m_idReflection", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{7DE7E4B8-5C98-5F7A-985F-DDEEA5BB5366}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{4B54CC87-1340-5B29-8040-2003033F9B93}", + "Objects": [ + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeMinFrontfaceDistance" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "20" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeNumDistanceTexels" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "27" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeInverseIrradianceEncodingGamma" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "10" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "26" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeScrollOffsets" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "18" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeIrradianceEncodingGamma" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "9" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.normalBias" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "13" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeBrightnessThreshold" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "8" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeHysteresis" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "6" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeRayRotationTransform" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[2]" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "24" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[3]" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "25" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[0]" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "22" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[1]" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "23" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeChangeThreshold" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "7" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "21" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.origin" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.numRaysPerProbe" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeGridSpacing" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeBackfaceThreshold" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "19" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeMaxRayDistance" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeNumIrradianceTexels" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "11" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeGridCounts" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeVariablePad0" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "15" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.volumeMovementType" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "17" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeDistanceExponent" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "5" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.viewBias" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "14" + } + ] + } + ] + } + ] + } + ] + }, + { + "field": "m_intervals", + "typeName": "AZStd::vector", + "typeId": "{908FF0AE-802D-5311-A2E0-A6D595FBC480}", + "Objects": [ + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "28" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "28" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "32" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "32" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "44" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "44" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "48" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "48" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "52" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "52" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "56" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "56" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "60" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "60" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "68" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "68" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "72" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "72" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "76" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "76" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "80" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "80" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "84" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "84" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "96" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "96" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "160" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "160" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "164" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "164" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "176" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "176" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "180" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "180" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "184" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "184" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "208" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "208" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "224" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "224" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "240" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "240" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + } + ] + } + ] + }, + { + "field": "m_sizeInBytes", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + }, + { + "field": "m_hash", + "typeName": "AZ::u64", + "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", + "value": "7181601620235669059" + } + ] + } + ] + }, + { + "field": "m_bindingSlot", + "typeName": "AZ::RHI::Handle", + "typeId": "{1811456D-0C3D-58C8-ACE8-FD47F4E80E25}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + } + ] + }, + { + "field": "m_shaderVariantKeyFallbackSize", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_shaderVariantKeyFallbackConstantIndex", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4294967295" + } + ] + }, + { + "field": "m_hash", + "typeName": "AZ::u64", + "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", + "value": "10614022793008117732" + } + ] + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZStd::pair", + "typeId": "{5C6406C8-77C9-597F-A3E9-249628D94902}", + "Objects": [ + { + "field": "value1", + "typeName": "Crc32", + "typeId": "{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}", + "Objects": [ + { + "field": "Value", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3189070339" + } + ] + }, + { + "field": "value2", + "typeName": "AZStd::intrusive_ptr", + "typeId": "{FF05CAD3-238F-5E19-8FF2-083353BBEC47}", + "Objects": [ + { + "field": "element", + "typeName": "ShaderResourceGroupLayout", + "typeId": "{1F92C651-9B83-4379-AB5C-5201F1B2C278}", + "version": 6, + "Objects": [ + { + "field": "m_staticSamplers", + "typeName": "AZStd::vector", + "typeId": "{D3BC4729-3DE0-57A1-96E0-DCFF98D4D975}" + }, + { + "field": "m_inputsForBuffers", + "typeName": "AZStd::vector", + "typeId": "{A4650430-04B9-589A-991F-4B443DCD20EA}" + }, + { + "field": "m_inputsForImages", + "typeName": "AZStd::vector", + "typeId": "{909BE4D8-5A22-59A4-A135-4E73662E2D83}", + "Objects": [ + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeRayTrace" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + } + ] + } + ] + }, + { + "field": "m_inputsForBufferUnboundedArrays", + "typeName": "AZStd::vector", + "typeId": "{DD5102EE-72A9-55F7-AB54-14F228FAE38F}" + }, + { + "field": "m_inputsForImageUnboundedArrays", + "typeName": "AZStd::vector", + "typeId": "{8042FF1E-9115-53F7-BE33-3DCDE9C0AB7F}" + }, + { + "field": "m_inputsForSamplers", + "typeName": "AZStd::vector", + "typeId": "{4CF286E1-5297-581D-93E9-891166EDAD9A}" + }, + { + "field": "m_intervalsForBuffers", + "typeName": "AZStd::vector", + "typeId": "{908FF0AE-802D-5311-A2E0-A6D595FBC480}" + }, + { + "field": "m_intervalsForImages", + "typeName": "AZStd::vector", + "typeId": "{908FF0AE-802D-5311-A2E0-A6D595FBC480}", + "Objects": [ + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + } + ] + }, + { + "field": "m_intervalsForSamplers", + "typeName": "AZStd::vector", + "typeId": "{908FF0AE-802D-5311-A2E0-A6D595FBC480}" + }, + { + "field": "m_groupSizeForBuffers", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_groupSizeForImages", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + }, + { + "field": "m_groupSizeForBufferUnboundedArrays", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_groupSizeForImageUnboundedArrays", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_groupSizeForSamplers", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_idReflectionForBuffers", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{A85E274A-4C1D-546F-B18C-452C5700BAE4}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{F4529C0B-A2C0-5A32-A348-59D45FB1776B}" + } + ] + }, + { + "field": "m_idReflectionForImages", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{BB6D1ABE-9A2F-5F51-93CB-B1B866EFD5B4}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{BBD5D625-992D-5296-A631-9B84B00CE2F1}", + "Objects": [ + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeRayTrace" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + } + ] + } + ] + } + ] + } + ] + }, + { + "field": "m_idReflectionForBufferUnboundedArrays", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{46520159-BC56-5E90-89AD-3CB0A5D295B0}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{CD6D3195-A87A-5E0C-AD4D-23457B3B8DCF}" + } + ] + }, + { + "field": "m_idReflectionForImageUnboundedArrays", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{A33C41AC-ABA0-5A34-9A6B-89BABDC151D7}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{14C5FF00-B370-575F-866B-B19B97F76D82}" + } + ] + }, + { + "field": "m_idReflectionForSamplers", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{2665EED7-CFB4-582B-B265-107348B1DFAC}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{1545A615-BFD7-515C-A1E9-710570135F08}" + } + ] + }, + { + "field": "m_constantsDataLayout", + "typeName": "AZStd::intrusive_ptr", + "typeId": "{CEB3049A-A620-56C8-AFBA-D0A98304333D}", + "Objects": [ + { + "field": "element", + "typeName": "ConstantsLayout", + "typeId": "{66EDAC32-7730-4F05-AF9D-B3CB0F5D90E0}", + "Objects": [ + { + "field": "m_inputs", + "typeName": "AZStd::vector", + "typeId": "{5FC25C85-DF2F-5219-918C-EBC47D7D6451}", + "Objects": [ + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.origin" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.numRaysPerProbe" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeGridSpacing" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeMaxRayDistance" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "28" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeGridCounts" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "32" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeDistanceExponent" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "44" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeHysteresis" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "48" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeChangeThreshold" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "52" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeBrightnessThreshold" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "56" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeIrradianceEncodingGamma" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "60" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeInverseIrradianceEncodingGamma" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeNumIrradianceTexels" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "68" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeNumDistanceTexels" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "72" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.normalBias" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "76" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.viewBias" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "80" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeVariablePad0" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "84" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeRayRotationTransform" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "96" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.volumeMovementType" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "160" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeScrollOffsets" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "164" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeBackfaceThreshold" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "176" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeMinFrontfaceDistance" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "180" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "184" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "8" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[0]" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[1]" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "208" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[2]" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "224" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[3]" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "240" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + } + ] + }, + { + "field": "m_idReflection", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{7DE7E4B8-5C98-5F7A-985F-DDEEA5BB5366}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{4B54CC87-1340-5B29-8040-2003033F9B93}", + "Objects": [ + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeMinFrontfaceDistance" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "20" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeNumDistanceTexels" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "27" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeInverseIrradianceEncodingGamma" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "10" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "26" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeScrollOffsets" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "18" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeIrradianceEncodingGamma" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "9" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.normalBias" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "13" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeBrightnessThreshold" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "8" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeHysteresis" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "6" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeRayRotationTransform" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[2]" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "24" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[3]" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "25" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[0]" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "22" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[1]" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "23" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeChangeThreshold" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "7" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "21" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.origin" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.numRaysPerProbe" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeGridSpacing" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeBackfaceThreshold" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "19" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeMaxRayDistance" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeNumIrradianceTexels" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "11" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeGridCounts" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeVariablePad0" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "15" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.volumeMovementType" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "17" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeDistanceExponent" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "5" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.viewBias" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "14" + } + ] + } + ] + } + ] + } + ] + }, + { + "field": "m_intervals", + "typeName": "AZStd::vector", + "typeId": "{908FF0AE-802D-5311-A2E0-A6D595FBC480}", + "Objects": [ + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "28" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "28" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "32" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "32" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "44" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "44" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "48" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "48" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "52" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "52" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "56" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "56" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "60" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "60" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "68" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "68" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "72" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "72" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "76" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "76" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "80" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "80" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "84" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "84" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "96" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "96" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "160" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "160" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "164" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "164" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "176" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "176" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "180" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "180" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "184" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "184" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "208" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "208" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "224" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "224" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "240" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "240" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + } + ] + } + ] + }, + { + "field": "m_sizeInBytes", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + }, + { + "field": "m_hash", + "typeName": "AZ::u64", + "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", + "value": "2959428625184507101" + } + ] + } + ] + }, + { + "field": "m_bindingSlot", + "typeName": "AZ::RHI::Handle", + "typeId": "{1811456D-0C3D-58C8-ACE8-FD47F4E80E25}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + } + ] + }, + { + "field": "m_shaderVariantKeyFallbackSize", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_shaderVariantKeyFallbackConstantIndex", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4294967295" + } + ] + }, + { + "field": "m_hash", + "typeName": "AZ::u64", + "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", + "value": "4240011884224364085" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification_vulkan_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification_vulkan_0.azshadervariant new file mode 100644 index 0000000000000000000000000000000000000000..3a22d2cd552ecd70656fd5f864600db591cb9123 GIT binary patch literal 8914 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 S_Cmk9;q*Reo1g6#=6?dAfp;PR literal 0 HcmV?d00001 diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.cpp b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.cpp new file mode 100644 index 0000000000..db85914cee --- /dev/null +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.cpp @@ -0,0 +1,182 @@ +/* +* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or +* its licensors. +* +* For complete copyright and license terms please see the LICENSE at the root of this +* distribution (the "License"). All use of this software is governed by the License, +* or, if provided, by the license below or the license accompanying this file. Do not +* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace AZ +{ + namespace Render + { + RPI::Ptr DiffuseProbeGridClassificationPass::Create(const RPI::PassDescriptor& descriptor) + { + RPI::Ptr pass = aznew DiffuseProbeGridClassificationPass(descriptor); + return AZStd::move(pass); + } + + DiffuseProbeGridClassificationPass::DiffuseProbeGridClassificationPass(const RPI::PassDescriptor& descriptor) + : RPI::RenderPass(descriptor) + { + LoadShader(); + } + + void DiffuseProbeGridClassificationPass::LoadShader() + { + // load shader + // Note: the shader may not be available on all platforms + AZStd::string shaderFilePath = "Shaders/DiffuseGlobalIllumination/DiffuseProbeGridClassification.azshader"; + m_shader = RPI::LoadShader(shaderFilePath); + if (m_shader == nullptr) + { + return; + } + + // load pipeline state + RHI::PipelineStateDescriptorForDispatch pipelineStateDescriptor; + const auto& shaderVariant = m_shader->GetVariant(RPI::ShaderAsset::RootShaderVariantStableId); + shaderVariant.ConfigurePipelineState(pipelineStateDescriptor); + m_pipelineState = m_shader->AcquirePipelineState(pipelineStateDescriptor); + + // load Pass Srg asset + m_srgAsset = m_shader->FindShaderResourceGroupAsset(RPI::SrgBindingSlot::Pass); + + // retrieve the number of threads per thread group from the shader + const auto numThreads = m_shader->GetAsset()->GetAttribute(RHI::ShaderStage::Compute, Name{ "numthreads" }); + if (numThreads) + { + const RHI::ShaderStageAttributeArguments& args = *numThreads; + bool validArgs = args.size() == 3; + if (validArgs) + { + validArgs &= args[0].type() == azrtti_typeid(); + validArgs &= args[1].type() == azrtti_typeid(); + validArgs &= args[2].type() == azrtti_typeid(); + } + + if (!validArgs) + { + AZ_Error("PassSystem", false, "[DiffuseProbeClassificationPass '%s']: Shader '%s' contains invalid numthreads arguments.", GetPathName().GetCStr(), shaderFilePath.c_str()); + return; + } + + m_dispatchArgs.m_threadsPerGroupX = AZStd::any_cast(args[0]); + m_dispatchArgs.m_threadsPerGroupY = AZStd::any_cast(args[1]); + m_dispatchArgs.m_threadsPerGroupZ = AZStd::any_cast(args[2]); + } + } + + void DiffuseProbeGridClassificationPass::FrameBeginInternal(FramePrepareParams params) + { + RPI::Scene* scene = m_pipeline->GetScene(); + DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor(); + + if (!diffuseProbeGridFeatureProcessor || diffuseProbeGridFeatureProcessor->GetProbeGrids().empty()) + { + // no diffuse probe grids + return; + } + + RayTracingFeatureProcessor* rayTracingFeatureProcessor = scene->GetFeatureProcessor(); + AZ_Assert(rayTracingFeatureProcessor, "DiffuseProbeGridClassificationPass requires the RayTracingFeatureProcessor"); + + if (!rayTracingFeatureProcessor->GetSubMeshCount()) + { + // empty scene + return; + } + + RenderPass::FrameBeginInternal(params); + } + + void DiffuseProbeGridClassificationPass::SetupFrameGraphDependencies(RHI::FrameGraphInterface frameGraph) + { + RenderPass::SetupFrameGraphDependencies(frameGraph); + + RPI::Scene* scene = m_pipeline->GetScene(); + DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor(); + for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetProbeGrids()) + { + // probe raytrace image + { + RHI::ImageScopeAttachmentDescriptor desc; + desc.m_attachmentId = diffuseProbeGrid->GetRayTraceImageAttachmentId(); + desc.m_imageViewDescriptor = diffuseProbeGrid->GetRenderData()->m_probeRayTraceImageViewDescriptor; + desc.m_loadStoreAction.m_loadAction = AZ::RHI::AttachmentLoadAction::Load; + + frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite); + } + + // probe classification image + { + RHI::ImageScopeAttachmentDescriptor desc; + desc.m_attachmentId = diffuseProbeGrid->GetClassificationImageAttachmentId(); + desc.m_imageViewDescriptor = diffuseProbeGrid->GetRenderData()->m_probeClassificationImageViewDescriptor; + desc.m_loadStoreAction.m_loadAction = AZ::RHI::AttachmentLoadAction::Load; + + frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite); + } + } + } + + void DiffuseProbeGridClassificationPass::CompileResources([[maybe_unused]] const RHI::FrameGraphCompileContext& context) + { + RPI::Scene* scene = m_pipeline->GetScene(); + DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor(); + for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetProbeGrids()) + { + // the diffuse probe grid Srg must be updated in the Compile phase in order to successfully bind the ReadWrite shader inputs + // (see ValidateSetImageView() in ShaderResourceGroupData.cpp) + diffuseProbeGrid->UpdateClassificationSrg(m_srgAsset); + diffuseProbeGrid->GetClassificationSrg()->Compile(); + } + } + + void DiffuseProbeGridClassificationPass::BuildCommandListInternal(const RHI::FrameGraphExecuteContext& context) + { + RHI::CommandList* commandList = context.GetCommandList(); + RPI::Scene* scene = m_pipeline->GetScene(); + DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor(); + + // submit the DispatchItems for each DiffuseProbeGrid + for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetProbeGrids()) + { + const RHI::ShaderResourceGroup* shaderResourceGroup = diffuseProbeGrid->GetClassificationSrg()->GetRHIShaderResourceGroup(); + commandList->SetShaderResourceGroupForDispatch(*shaderResourceGroup); + + uint32_t probeCountX; + uint32_t probeCountY; + diffuseProbeGrid->GetTexture2DProbeCount(probeCountX, probeCountY); + + RHI::DispatchItem dispatchItem; + dispatchItem.m_arguments = m_dispatchArgs; + dispatchItem.m_pipelineState = m_pipelineState; + dispatchItem.m_arguments.m_direct.m_totalNumberOfThreadsX = probeCountX; + dispatchItem.m_arguments.m_direct.m_totalNumberOfThreadsY = probeCountY; + dispatchItem.m_arguments.m_direct.m_totalNumberOfThreadsZ = 1; + + commandList->Submit(dispatchItem); + } + } + } // namespace Render +} // namespace AZ diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.h b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.h new file mode 100644 index 0000000000..df0a237e1a --- /dev/null +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.h @@ -0,0 +1,66 @@ +/* +* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or +* its licensors. +* +* For complete copyright and license terms please see the LICENSE at the root of this +* distribution (the "License"). All use of this software is governed by the License, +* or, if provided, by the license below or the license accompanying this file. Do not +* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* +*/ +#pragma once + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace AZ +{ + namespace Render + { + //! Compute shader that classifies probes as active or inactive in the diffuse probe grid. + class DiffuseProbeGridClassificationPass final + : public RPI::RenderPass + { + public: + AZ_RPI_PASS(DiffuseProbeGridClassificationPass); + + AZ_RTTI(AZ::Render::DiffuseProbeGridClassificationPass, "{98A6477A-F31C-4390-9BEB-9DB8E30BB281}", RPI::RenderPass); + AZ_CLASS_ALLOCATOR(DiffuseProbeGridClassificationPass, SystemAllocator, 0); + virtual ~DiffuseProbeGridClassificationPass() = default; + + static RPI::Ptr Create(const RPI::PassDescriptor& descriptor); + + private: + DiffuseProbeGridClassificationPass(const RPI::PassDescriptor& descriptor); + + void LoadShader(); + + // Pass overrides + void FrameBeginInternal(FramePrepareParams params) override; + + void SetupFrameGraphDependencies(RHI::FrameGraphInterface frameGraph) override; + void CompileResources(const RHI::FrameGraphCompileContext& context) override; + void BuildCommandListInternal(const RHI::FrameGraphExecuteContext& context) override; + + // shader + Data::Instance m_shader; + const RHI::PipelineState* m_pipelineState = nullptr; + Data::Asset m_srgAsset; + RHI::DispatchDirect m_dispatchArgs; + + // revision number of the ray tracing data when the shader table was built + uint32_t m_rayTracingDataRevision = 0; + }; + } // namespace Render +} // namespace AZ From 593542627602015b897f4239c3e4a785bfa6c755 Mon Sep 17 00:00:00 2001 From: Chris Santora Date: Mon, 19 Apr 2021 09:33:49 -0700 Subject: [PATCH 10/67] Fixed whitespace. ATOM-14765 Add More Texture Preset Masks --- .../Config/IBLSkybox.preset | 6 +++--- .../Config/NormalsWithSmoothness.preset | 10 +++++----- .../ImageProcessingAtom/Config/Opacity.preset | 20 +++++++++---------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/IBLSkybox.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/IBLSkybox.preset index 867fc73959..fef756e354 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/IBLSkybox.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/IBLSkybox.preset @@ -27,7 +27,7 @@ }, "PlatformsPresets": { "es3": { - "UUID": "{E6441EAC-9843-484B-8EFC-C03B2935B48D}", + "UUID": "{E6441EAC-9843-484B-8EFC-C03B2935B48D}", "Name": "IBLSkybox", "FileMasks": [ "_iblskyboxcm" @@ -61,7 +61,7 @@ "MinTextureSize": 256, "IsPowerOf2": true, "CubemapSettings": { - "RequiresConvolve": false, + "RequiresConvolve": false, "GenerateIBLSpecular": true, "IBLSpecularPreset": "{908DA68C-97FB-4C4A-97BC-5A55F30F14FA}", "GenerateIBLDiffuse": true, @@ -69,7 +69,7 @@ } }, "osx_gl": { - "UUID": "{E6441EAC-9843-484B-8EFC-C03B2935B48D}", + "UUID": "{E6441EAC-9843-484B-8EFC-C03B2935B48D}", "Name": "IBLSkybox", "FileMasks": [ "_iblskyboxcm" diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness.preset index fdb24ecd09..2c61d6f5a6 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness.preset @@ -9,11 +9,11 @@ "SourceColor": "Linear", "DestColor": "Linear", "FileMasks": [ - "_ddna", - "_normala", - "_nrma", - "_nma", - "_na" + "_ddna", + "_normala", + "_nrma", + "_nma", + "_na" ], "PixelFormat": "BC5s", "PixelFormatAlpha": "BC4", diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/Opacity.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/Opacity.preset index 6d0d9009a5..79fb235508 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/Opacity.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/Opacity.preset @@ -9,16 +9,16 @@ "SourceColor": "Linear", "DestColor": "Linear", "FileMasks": [ - "_sss", - "_trans", - "_opac", - "_opacity", - "_o", - "_opac", - "_op", - "_mask", - "_msk", - "_blend" + "_sss", + "_trans", + "_opac", + "_opacity", + "_o", + "_opac", + "_op", + "_mask", + "_msk", + "_blend" ], "PixelFormat": "BC4", "IsPowerOf2": true, From 889158e3a993eb371ed358cb3ce3e92c98ae6c8d Mon Sep 17 00:00:00 2001 From: srikappa Date: Mon, 19 Apr 2021 09:53:45 -0700 Subject: [PATCH 11/67] A couple of minor fixes --- .../Prefab/Instance/Instance.cpp | 2 +- .../Prefab/PrefabSystemComponent.cpp | 18 ++++++------------ 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp index bd4c343a3c..0a5b43482e 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp @@ -283,7 +283,7 @@ namespace AzToolsFramework { if (!m_instanceEntityMapper->RegisterEntityToInstance(entityId, *this)) { - AZ_Error("Prefab", false, + AZ_Assert(false, "Prefab - Failed to register entity with id %s with a Prefab Instance derived from source asset %s " "This entity is likely already registered. Check for a double add.", entityId.ToString().c_str(), diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp index 7a9ec0a62e..b777c2bdeb 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp @@ -119,10 +119,7 @@ namespace AzToolsFramework newInstance->AddInstance(AZStd::move(instance)); } - /* - AzToolsFramework::EditorEntityContextRequestBus::Broadcast( - &AzToolsFramework::EditorEntityContextRequests::HandleEntitiesAdded, EntityList{containerEntity->GetId()}); - */ + newInstance->SetTemplateSourcePath(filePath); TemplateId newTemplateId = CreateTemplateFromInstance(*newInstance); @@ -162,14 +159,14 @@ namespace AzToolsFramework void PrefabSystemComponent::UpdatePrefabTemplate(TemplateId templateId, const PrefabDom& updatedDom) { - auto templateRef = FindTemplate(templateId); - if (templateRef.has_value()) + auto templateToUpdate = FindTemplate(templateId); + if (templateToUpdate) { - PrefabDom& templateDomToUpdate = templateRef->get().GetPrefabDom(); + PrefabDom& templateDomToUpdate = templateToUpdate->get().GetPrefabDom(); if (AZ::JsonSerialization::Compare(templateDomToUpdate, updatedDom) != AZ::JsonSerializerCompareResult::Equal) { templateDomToUpdate.CopyFrom(updatedDom, templateDomToUpdate.GetAllocator()); - templateRef->get().MarkAsDirty(true); + templateToUpdate->get().MarkAsDirty(true); PropagateTemplateChanges(templateId); } } @@ -643,12 +640,9 @@ namespace AzToolsFramework newLink.GetLinkDom().AddMember(rapidjson::StringRef(PrefabDomUtils::SourceName), rapidjson::StringRef(sourceTemplate.GetFilePath().c_str()), newLink.GetLinkDom().GetAllocator()); - PrefabDom linkPatchCopy; - linkPatchCopy.CopyFrom(linkPatch->get(), newLink.GetLinkDom().GetAllocator()); - if (linkPatch && linkPatch->get().IsArray() && !(linkPatch->get().Empty())) { - m_instanceToTemplatePropagator.AddPatchesToLink(linkPatchCopy, newLink); + m_instanceToTemplatePropagator.AddPatchesToLink(linkPatch.value(), newLink); } //update the target template dom to have the proper values for the source template dom From 9a0b47137a53d10d01c1faba3efa0b238b0f14ad Mon Sep 17 00:00:00 2001 From: spham Date: Mon, 19 Apr 2021 10:14:59 -0700 Subject: [PATCH 12/67] Add linux setup scripts to: 1. Install Linux AWSCLI 2. Install Linux Git, GitLFS, and GCM 3. Install Linux build libraries and tools for O3DE --- .../Platform/Linux/install-awscli.sh | 47 ++++++++ .../Linux/install-ubuntu-build-libraries.sh | 103 ++++++++++++++++++ .../Linux/install-ubuntu-build-tools.sh | 72 ++++++++++++ .../Platform/Linux/install-ubuntu-git.sh | 96 ++++++++++++++++ 4 files changed, 318 insertions(+) create mode 100644 scripts/build/build_node/Platform/Linux/install-awscli.sh create mode 100644 scripts/build/build_node/Platform/Linux/install-ubuntu-build-libraries.sh create mode 100644 scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh create mode 100644 scripts/build/build_node/Platform/Linux/install-ubuntu-git.sh diff --git a/scripts/build/build_node/Platform/Linux/install-awscli.sh b/scripts/build/build_node/Platform/Linux/install-awscli.sh new file mode 100644 index 0000000000..c9addedc82 --- /dev/null +++ b/scripts/build/build_node/Platform/Linux/install-awscli.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or +# its licensors. +# +# For complete copyright and license terms please see the LICENSE at the root of this +# distribution (the "License"). All use of this software is governed by the License, +# or, if provided, by the license below or the license accompanying this file. Do not +# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + +# This script must be run as root +if [ "`whoami`" != "root" ] +then + echo "This script must be run as root (sudo)" + exit 1 +fi + +# +# Install curl if its not installed +# +curl --version >/dev/null 2>&1 +if [ $? -ne 0 ] +then + echo "Installing curl" + apt-get install curl -y +fi + +# +# Setup AWS CLI if needed +# +aws --version >/dev/null 2>&1 +if [ $? -ne 0 ] +then + echo Setting up AWS CLI + curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" + unzip awscliv2.zip + ./aws/install + rm -rf ./aws +else + AWS_CLI_VERSION=`aws --version | awk '{print $1}' | awk -F/ '{print $2}'` + echo AWS CLI \(version $AWS_CLI_VERSION\) already installed +fi + + + + diff --git a/scripts/build/build_node/Platform/Linux/install-ubuntu-build-libraries.sh b/scripts/build/build_node/Platform/Linux/install-ubuntu-build-libraries.sh new file mode 100644 index 0000000000..7b78a53802 --- /dev/null +++ b/scripts/build/build_node/Platform/Linux/install-ubuntu-build-libraries.sh @@ -0,0 +1,103 @@ +#!/bin/bash + +# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or +# its licensors. +# +# For complete copyright and license terms please see the LICENSE at the root of this +# distribution (the "License"). All use of this software is governed by the License, +# or, if provided, by the license below or the license accompanying this file. Do not +# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + +# This script must be run as root +if [ "`whoami`" != "root" ] +then + echo "This script must be run as root (sudo)" + exit 1 +fi + +# +# Make sure we are installing on a supported ubuntu distro +# +lsb_release -c >/dev/null 2>&1 +if [ $? -ne 0 ] +then + echo This script is only supported on Ubuntu Distros + exit 1 +fi + +UBUNTU_DISTRO="`lsb_release -c | awk '{print $2}'`" +if [ "$UBUNTU_DISTRO" == "bionic" ] +then + echo "Setup for Ubuntu 18.04 LTS ($UBUNTU_DISTRO)" +elif [ "$UBUNTU_DISTRO" == "focal" ] +then + echo "Setup for Ubuntu 20.04 LTS ($UBUNTU_DISTRO)" +else + echo "Unsupported version of Ubuntu $UBUNTU_DISTRO" + exit 1 +fi + +# +# Install curl if its not installed +# +curl --version >/dev/null 2>&1 +if [ $? -ne 0 ] +then + echo "Installing curl" + apt-get install curl -y +fi + + +# +# If the linux distro is 20.04 (focal), we need libffi.so.6, which is not part of the focal distro. We +# will install it from the bionic distro manually into focal. This is needed since Ubuntu 20.04 supports +# python 3.8 out of the box, but we are using 3.7 +# +LIBFFI6_COUNT=`apt list --installed 2>/dev/null | grep libffi6 | wc -l` +if [ "$UBUNTU_DISTRO" == "focal" ] && [ $LIBFFI6_COUNT -eq 0 ] +then + echo "Installing libffi for Ubuntu 20.04" + + pushd /tmp >/dev/null + + LIBFFI_PACKAGE_NAME=libffi6_3.2.1-8_amd64.deb + LIBFFI_PACKAGE_URL=http://mirrors.kernel.org/ubuntu/pool/main/libf/libffi/ + + curl --location $LIBFFI_PACKAGE_URL/$LIBFFI_PACKAGE_NAME -o $LIBFFI_PACKAGE_NAME + if [ $? -ne 0 ] + then + echo Unable to download $LIBFFI_PACKAGE_URL/$LIBFFI_PACKAGE_NAME + popd + exit 1 + fi + + apt install ./$LIBFFI_PACKAGE_NAME -y + if [ $? -ne 0 ] + then + echo Unable to install $LIBFFI_PACKAGE_NAME + rm -f ./$LIBFFI_PACKAGE_NAME + popd + exit 1 + fi + + rm -f ./$LIBFFI_PACKAGE_NAME + popd + echo "libffi.so.6 installed" +fi + +# Install the required build packages +apt-get install clang-6.0 -y # For the compiler and its dependencies +apt-get install libglu1-mesa-dev -y # For Qt (GL dependency) + +# The following packages resolves a runtime error with Qt Plugins +apt-get install libxcb-xinerama0 -y # For Qt plugins at runtime +apt-get install libxcb-xinput0 -y # For Qt plugins at runtime + +apt-get install libcurl4-openssl-dev -y # For HttpRequestor +apt-get install libsdl2-dev -y # For WWise + +apt-get install libz-dev -y +apt-get install mesa-common-dev -y + +echo Build Libraries Setup Complete diff --git a/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh b/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh new file mode 100644 index 0000000000..eb9229d90b --- /dev/null +++ b/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh @@ -0,0 +1,72 @@ +#!/bin/bash + +# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or +# its licensors. +# +# For complete copyright and license terms please see the LICENSE at the root of this +# distribution (the "License"). All use of this software is governed by the License, +# or, if provided, by the license below or the license accompanying this file. Do not +# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + +# This script must be run as root +if [ "`whoami`" != "root" ] +then + echo "This script must be run as root (sudo)" + exit 1 +fi + +# +# Make sure we are installing on a supported ubuntu distro +# +lsb_release -c >/dev/null 2>&1 +if [ $? -ne 0 ] +then + echo This script is only supported on Ubuntu Distros + exit 1 +fi + +UBUNTU_DISTRO="`lsb_release -c | awk '{print $2}'`" +if [ "$UBUNTU_DISTRO" == "bionic" ] +then + echo "Setup for Ubuntu 18.04 LTS ($UBUNTU_DISTRO)" +elif [ "$UBUNTU_DISTRO" == "focal" ] +then + echo "Setup for Ubuntu 20.04 LTS ($UBUNTU_DISTRO)" +else + echo "Unsupported version of Ubuntu $UBUNTU_DISTRO" + exit 1 +fi + +# +# Always install the latest version of cmake (from kitware) +# +echo Installing the latest version of CMake + +# Remove any pre-existing version of cmake +apt purge --auto-remove cmake -y +wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null +CMAKE_DEB_REPO="'deb https://apt.kitware.com/ubuntu/ $UBUNTU_DISTRO main'" + +# Add the appropriate kitware repository to apt +if [ "$UBUNTU_DISTRO" == "bionic" ] +then + apt-add-repository 'deb https://apt.kitware.com/ubuntu/ bionic main' +elif [ "$UBUNTU_DISTRO" == "focal" ] +then + apt-add-repository 'deb https://apt.kitware.com/ubuntu/ focal main' +fi +apt-get update + +# Install cmake +apt-get install cmake -y + + +# +# Make sure that Ninja is installed +# +echo Installing Ninja +apt-get install ninja-build -y + + +echo Build Tools Setup Complete diff --git a/scripts/build/build_node/Platform/Linux/install-ubuntu-git.sh b/scripts/build/build_node/Platform/Linux/install-ubuntu-git.sh new file mode 100644 index 0000000000..a1c2923c13 --- /dev/null +++ b/scripts/build/build_node/Platform/Linux/install-ubuntu-git.sh @@ -0,0 +1,96 @@ +#!/bin/bash + +# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or +# its licensors. +# +# For complete copyright and license terms please see the LICENSE at the root of this +# distribution (the "License"). All use of this software is governed by the License, +# or, if provided, by the license below or the license accompanying this file. Do not +# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + +# This script must be run as root +if [ "`whoami`" != "root" ] +then + echo "This script must be run as root (sudo)" + exit 1 +fi + +# +# Make sure we are installing on a supported ubuntu distro +# +lsb_release -c >/dev/null 2>&1 +if [ $? -ne 0 ] +then + echo This script is only supported on Ubuntu Distros + exit 1 +fi + +UBUNTU_DISTRO="`lsb_release -c | awk '{print $2}'`" +if [ "$UBUNTU_DISTRO" == "bionic" ] +then + echo "Setup for Ubuntu 18.04 LTS ($UBUNTU_DISTRO)" +elif [ "$UBUNTU_DISTRO" == "focal" ] +then + echo "Setup for Ubuntu 20.04 LTS ($UBUNTU_DISTRO)" +else + echo "Unsupported version of Ubuntu $UBUNTU_DISTRO" + exit 1 +fi + +# +# Setup and get the latest from git if necessary +# +git --version > /dev/null 2>&1 +if [ $? -ne 0 ] +then + echo Setting up latest version of GIT + add-apt-repository ppa:git-core/ppa -y + apt-get update + apt-get install git -y +else + GIT_VERSION=`git --version | awk '{print $3}'` + echo Git $GIT_VERSION already Installed. Skipping Git installation +fi + +# +# Setup Git-LFS if needed +# +GIT_LFS_PACKAGE_COUNT=`apt list --installed 2>/dev/null | grep git-lfs/ | wc -l` +if [ $GIT_LFS_PACKAGE_COUNT -eq 0 ] +then + echo Setting up Git-LFS + pushd /tmp + wget https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh -o script.deb.sh + rm script.deb.sh + mv script.deb.sh.1 script.deb.sh + chmod +x script.deb.sh + ./script.deb.sh + sudo apt-get install git-lfs -y + popd +else + echo Git LFS already installed. Skipping Git-LFS installation +fi + +# Setup GCM if needed +git-credential-manager-core --version > /dev/null 2>&1 +if [ $? -ne 0 ] +then + # Download and setup Git Credential Manager + GCM_PACKAGE_NAME=gcmcore-linux_amd64.2.0.394.50751.deb + GCM_PACKAGE_URL=https://github.com/microsoft/Git-Credential-Manager-Core/releases/download/v2.0.394-beta + + echo Installing Git Credential Manager \($GCM_PACKAGE_NAME\) + + pushd /tmp > /dev/null + curl --location $GCM_PACKAGE_URL/$GCM_PACKAGE_NAME -o $GCM_PACKAGE_NAME + dpkg -i $GCM_PACKAGE_NAME + popd +else + GCM_VERSION=`git-credential-manager-core --version` + echo Git Credential Manager \(GCM\) version $GCM_VERSION already installed. Skipping GCM installation +fi + +# Setup pass (password manager) for git-credential-manager +apt-get install pass -y + From f3ff5ec8869e2344e17b1510bf76a9ae6b2a9b2e Mon Sep 17 00:00:00 2001 From: srikappa Date: Mon, 19 Apr 2021 11:05:28 -0700 Subject: [PATCH 13/67] Add helper method for adding link in CreatePrefab --- .../Prefab/PrefabPublicHandler.cpp | 77 +++++++++---------- .../Prefab/PrefabPublicHandler.h | 4 + .../Prefab/PrefabSystemComponent.cpp | 2 +- .../AzToolsFramework/Prefab/PrefabUndo.cpp | 2 +- .../AzToolsFramework/Prefab/PrefabUndo.h | 2 +- .../Prefab/PrefabUndoHelpers.cpp | 10 +++ .../Prefab/PrefabUndoHelpers.h | 3 + 7 files changed, 57 insertions(+), 43 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp index 0ce929217d..2fb186bcf7 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp @@ -100,7 +100,6 @@ namespace AzToolsFramework AZStd::vector> instances; InstanceOptionalReference instance; - { // Initialize Undo Batch object ScopedUndoBatch undoBatch("Create Prefab"); @@ -151,47 +150,9 @@ namespace AzToolsFramework linkRemoveUndo->Redo(); - AZ::EntityId containerEntityId = instance->get().GetContainerEntityId(); - AZ::Entity* containerEntity = GetEntityById(containerEntityId); - // Apply Transform changes as overrides - { - Prefab::PrefabDom containerEntityDomBefore; - m_instanceToTemplateInterface->GenerateDomForEntity(containerEntityDomBefore, *containerEntity); - - AZ::Vector3 containerEntityTranslation(AZ::Vector3::CreateZero()); - AZ::Quaternion containerEntityRotation(AZ::Quaternion::CreateZero()); - - // Set the transform (translation, rotation) of the container entity - GenerateContainerEntityTransform(topLevelEntities, containerEntityTranslation, containerEntityRotation); - - // Set container entity to be child of common root - AZ::TransformBus::Event(containerEntityId, &AZ::TransformBus::Events::SetParent, commonRootEntityId); - - AZ::TransformBus::Event(containerEntityId, &AZ::TransformBus::Events::SetLocalTranslation, containerEntityTranslation); - AZ::TransformBus::Event(containerEntityId, &AZ::TransformBus::Events::SetLocalRotationQuaternion, containerEntityRotation); - - PrefabDom containerEntityDomAfter; - m_instanceToTemplateInterface->GenerateDomForEntity(containerEntityDomAfter, *containerEntity); - - PrefabDom patch; - m_instanceToTemplateInterface->GeneratePatch(patch, containerEntityDomBefore, containerEntityDomAfter); - - m_instanceToTemplateInterface->AppendEntityAliasToPatchPaths(patch, containerEntityId); - - - auto linkAddUndo = aznew PrefabUndoInstanceLink("Undo Link Add Node"); - linkAddUndo->Capture( - commonRootEntityOwningInstance->get().GetTemplateId(), instance->get().GetTemplateId(), instance->get().GetInstanceAlias(), - patch, InvalidLinkId); - linkAddUndo->SetParent(undoBatch.GetUndoBatch()); - - linkAddUndo->Redo(); - - // Update the cache - this prevents these changes from being stored in the regular undo/redo nodes - m_prefabUndoCache.Store(containerEntityId, AZStd::move(containerEntityDomAfter)); - } + AddLink(topLevelEntities, instance->get(), commonRootEntityOwningInstance->get(), undoBatch.GetUndoBatch(), commonRootEntityId); // Change top level entities to be parented to the container entity // Mark them as dirty so this change is correctly applied to the template @@ -216,6 +177,42 @@ namespace AzToolsFramework return AZ::Success(); } + void PrefabPublicHandler::AddLink( + const EntityList& topLevelEntities, Instance& instanceToAdd, Instance& parentInstance, UndoSystem::URSequencePoint* undoBatch, + AZ::EntityId commonRootEntityId) + { + AZ::EntityId containerEntityId = instanceToAdd.GetContainerEntityId(); + AZ::Entity* containerEntity = GetEntityById(containerEntityId); + Prefab::PrefabDom containerEntityDomBefore; + m_instanceToTemplateInterface->GenerateDomForEntity(containerEntityDomBefore, *containerEntity); + + AZ::Vector3 containerEntityTranslation(AZ::Vector3::CreateZero()); + AZ::Quaternion containerEntityRotation(AZ::Quaternion::CreateZero()); + + // Set the transform (translation, rotation) of the container entity + GenerateContainerEntityTransform(topLevelEntities, containerEntityTranslation, containerEntityRotation); + + // Set container entity to be child of common root + AZ::TransformBus::Event(containerEntityId, &AZ::TransformBus::Events::SetParent, commonRootEntityId); + + AZ::TransformBus::Event(containerEntityId, &AZ::TransformBus::Events::SetLocalTranslation, containerEntityTranslation); + AZ::TransformBus::Event(containerEntityId, &AZ::TransformBus::Events::SetLocalRotationQuaternion, containerEntityRotation); + + PrefabDom containerEntityDomAfter; + m_instanceToTemplateInterface->GenerateDomForEntity(containerEntityDomAfter, *containerEntity); + + PrefabDom patch; + m_instanceToTemplateInterface->GeneratePatch(patch, containerEntityDomBefore, containerEntityDomAfter); + m_instanceToTemplateInterface->AppendEntityAliasToPatchPaths(patch, containerEntityId); + + PrefabUndoHelpers::AddLink( + "Add Link", instanceToAdd.GetTemplateId(), parentInstance.GetTemplateId(), patch, instanceToAdd.GetInstanceAlias(), + undoBatch); + + // Update the cache - this prevents these changes from being stored in the regular undo/redo nodes + m_prefabUndoCache.Store(containerEntityId, AZStd::move(containerEntityDomAfter)); + } + PrefabOperationResult PrefabPublicHandler::InstantiatePrefab(AZStd::string_view /*filePath*/, AZ::EntityId /*parent*/, AZ::Vector3 /*position*/) { return AZ::Failure(AZStd::string("Prefab - InstantiatePrefab is yet to be implemented.")); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h index de892470ab..7f3d05e3d3 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h @@ -69,6 +69,10 @@ namespace AzToolsFramework InstanceOptionalReference GetOwnerInstanceByEntityId(AZ::EntityId entityId) const; bool EntitiesBelongToSameInstance(const EntityIdList& entityIds) const; + void AddLink( + const EntityList& topLevelEntities, Instance& instanceToAdd, Instance& parentInstance, + UndoSystem::URSequencePoint* undoBatch, AZ::EntityId commonRootEntityId); + static Instance* GetParentInstance(Instance* instance); static Instance* GetAncestorOfInstanceThatIsChildOfRoot(const Instance* ancestor, Instance* descendant); static void GenerateContainerEntityTransform(const EntityList& topLevelEntities, AZ::Vector3& translation, AZ::Quaternion& rotation); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp index b777c2bdeb..9070630e56 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp @@ -120,7 +120,7 @@ namespace AzToolsFramework newInstance->AddInstance(AZStd::move(instance)); } - newInstance->SetTemplateSourcePath(filePath); + newInstance->SetTemplateSourcePath(relativeFilePath); TemplateId newTemplateId = CreateTemplateFromInstance(*newInstance); if (newTemplateId == InvalidTemplateId) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndo.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndo.cpp index 0d9f9f72a5..ea3fa5d84d 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndo.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndo.cpp @@ -124,7 +124,7 @@ namespace AzToolsFramework const TemplateId& targetId, const TemplateId& sourceId, const InstanceAlias& instanceAlias, - const PrefabDomReference linkDom, + PrefabDomReference linkDom, const LinkId linkId) { m_targetId = targetId; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndo.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndo.h index 7a765c5db7..0d15d707d2 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndo.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndo.h @@ -101,7 +101,7 @@ namespace AzToolsFramework const TemplateId& targetId, const TemplateId& sourceId, const InstanceAlias& instanceAlias, - const PrefabDomReference linkDom = PrefabDomReference(), + PrefabDomReference linkDom = PrefabDomReference(), const LinkId linkId = InvalidLinkId); void Undo() override; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.cpp index da41635d03..1fa9169ae2 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.cpp @@ -32,6 +32,16 @@ namespace AzToolsFramework state->SetParent(undoBatch); state->Redo(); } + + void AddLink( + AZStd::string_view undoMessage, TemplateId sourceTemplateId, TemplateId targetTemplateId, PrefabDomReference patch, + const InstanceAlias& instanceAlias, UndoSystem::URSequencePoint* undoBatch) + { + auto linkAddUndo = aznew PrefabUndoInstanceLink(undoMessage); + linkAddUndo->Capture(targetTemplateId, sourceTemplateId, instanceAlias, patch, InvalidLinkId); + linkAddUndo->SetParent(undoBatch); + linkAddUndo->Redo(); + } } } // namespace Prefab } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.h index 81d0048e9e..279deb953c 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.h @@ -21,6 +21,9 @@ namespace AzToolsFramework void UpdatePrefabInstance( const Instance& instance, AZStd::string_view undoMessage, const PrefabDom& instanceDomBeforeUpdate, UndoSystem::URSequencePoint* undoBatch); + void AddLink( + AZStd::string_view undoMessage, TemplateId sourceTemplateId, TemplateId targetTemplateId, PrefabDomReference patch, + const InstanceAlias& instanceAlias, UndoSystem::URSequencePoint* undoBatch); } } // namespace Prefab } // namespace AzToolsFramework From c9153b035350e68a1a15f6918f64d62c770e1d24 Mon Sep 17 00:00:00 2001 From: qingtao Date: Mon, 19 Apr 2021 11:47:57 -0700 Subject: [PATCH 14/67] ATOM-15272 Running game with Actor spams asserts in the log resulting in low framerate The condition was setup wrongly when introducing DynamicInputAssembly. --- Gems/Atom/RPI/Code/Source/RPI.Public/Buffer/Buffer.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Buffer/Buffer.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Buffer/Buffer.cpp index 81fd9e751b..afcf4670f3 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Buffer/Buffer.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Buffer/Buffer.cpp @@ -74,7 +74,8 @@ namespace AZ const RHI::BufferView* Buffer::GetBufferView() const { - if(RHI::CheckBitsAny(m_rhiBuffer->GetDescriptor().m_bindFlags, RHI::BufferBindFlags::InputAssembly | RHI::BufferBindFlags::DynamicInputAssembly)) + if (m_rhiBuffer->GetDescriptor().m_bindFlags == RHI::BufferBindFlags::InputAssembly || + m_rhiBuffer->GetDescriptor().m_bindFlags == RHI::BufferBindFlags::DynamicInputAssembly) { AZ_Assert(false, "Input assembly buffer doesn't need a regular buffer view, it requires a stream or index buffer view."); From 4fb407e1309da2d661a9ed71cb72ada58ed23fc7 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Mon, 19 Apr 2021 15:39:50 -0500 Subject: [PATCH 15/67] [LYN-3070] Removed legacy Material Editor. --- Code/Sandbox/Editor/CryEdit.cpp | 9 - Code/Sandbox/Editor/CryEdit.h | 2 - Code/Sandbox/Editor/MainWindow.cpp | 2 - Code/Sandbox/Editor/MatEditMainDlg.cpp | 110 - Code/Sandbox/Editor/MatEditMainDlg.h | 48 - .../Editor/Material/MaterialDialog.cpp | 2290 ----------------- Code/Sandbox/Editor/Material/MaterialDialog.h | 176 -- .../Editor/Material/MaterialDialog.qrc | 35 - .../Material/images/materialdialog_add.png | 3 - .../images/materialdialog_add_active.png | 3 - .../images/materialdialog_add_disabled.png | 3 - .../images/materialdialog_add_normal.png | 3 - .../images/materialdialog_assignselection.png | 3 - .../materialdialog_assignselection_active.png | 3 - ...aterialdialog_assignselection_disabled.png | 3 - .../materialdialog_assignselection_normal.png | 3 - .../Material/images/materialdialog_copy.png | 3 - .../images/materialdialog_copy_active.png | 3 - .../images/materialdialog_copy_disabled.png | 3 - .../images/materialdialog_copy_normal.png | 3 - .../materialdialog_getfromselection.png | 3 - ...materialdialog_getfromselection_active.png | 3 - ...terialdialog_getfromselection_disabled.png | 3 - ...materialdialog_getfromselection_normal.png | 3 - .../Material/images/materialdialog_paste.png | 3 - .../images/materialdialog_paste_active.png | 3 - .../images/materialdialog_paste_disabled.png | 3 - .../images/materialdialog_paste_normal.png | 3 - .../Material/images/materialdialog_pick.png | 3 - .../images/materialdialog_pick_active.png | 3 - .../images/materialdialog_pick_disabled.png | 3 - .../images/materialdialog_pick_normal.png | 3 - .../images/materialdialog_preview.png | 3 - .../images/materialdialog_preview_active.png | 3 - .../materialdialog_preview_disabled.png | 3 - .../images/materialdialog_preview_normal.png | 3 - .../Material/images/materialdialog_remove.png | 3 - .../images/materialdialog_remove_active.png | 3 - .../images/materialdialog_remove_disabled.png | 3 - .../images/materialdialog_remove_normal.png | 3 - .../Material/images/materialdialog_reset.png | 3 - .../images/materialdialog_reset_active.png | 3 - .../images/materialdialog_reset_disabled.png | 3 - .../images/materialdialog_reset_normal.png | 3 - .../materialdialog_reset_viewport_active.png | 3 - ...materialdialog_reset_viewport_disabled.png | 3 - .../materialdialog_reset_viewport_normal.png | 3 - .../Material/images/materialdialog_save.png | 3 - .../images/materialdialog_save_active.png | 3 - .../images/materialdialog_save_disabled.png | 3 - .../images/materialdialog_save_normal.png | 3 - Code/Sandbox/Editor/editor_lib_files.cmake | 4 - 52 files changed, 2805 deletions(-) delete mode 100644 Code/Sandbox/Editor/MatEditMainDlg.cpp delete mode 100644 Code/Sandbox/Editor/MatEditMainDlg.h delete mode 100644 Code/Sandbox/Editor/Material/MaterialDialog.cpp delete mode 100644 Code/Sandbox/Editor/Material/MaterialDialog.h delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_add.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_add_active.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_add_disabled.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_add_normal.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_assignselection.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_assignselection_active.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_assignselection_disabled.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_assignselection_normal.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_copy.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_copy_active.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_copy_disabled.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_copy_normal.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_getfromselection.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_getfromselection_active.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_getfromselection_disabled.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_getfromselection_normal.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_paste.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_paste_active.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_paste_disabled.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_paste_normal.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_pick.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_pick_active.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_pick_disabled.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_pick_normal.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_preview.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_preview_active.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_preview_disabled.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_preview_normal.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_remove.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_remove_active.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_remove_disabled.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_remove_normal.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_reset.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_reset_active.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_reset_disabled.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_reset_normal.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_reset_viewport_active.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_reset_viewport_disabled.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_reset_viewport_normal.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_save.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_save_active.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_save_disabled.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_save_normal.png diff --git a/Code/Sandbox/Editor/CryEdit.cpp b/Code/Sandbox/Editor/CryEdit.cpp index dff5b2267c..e4f06a1bc3 100644 --- a/Code/Sandbox/Editor/CryEdit.cpp +++ b/Code/Sandbox/Editor/CryEdit.cpp @@ -126,7 +126,6 @@ AZ_POP_DISABLE_WARNING #include "EditorPreferencesDialog.h" #include "GraphicsSettingsDialog.h" #include "FeedbackDialog/FeedbackDialog.h" -#include "MatEditMainDlg.h" #include "AnimationContext.h" #include "GotoPositionDlg.h" @@ -1898,14 +1897,6 @@ BOOL CCryEditApp::InitInstance() CWipFeatureManager::Init(); #endif - if (GetIEditor()->IsInMatEditMode()) - { - m_pMatEditDlg = new CMatEditMainDlg(QStringLiteral("Material Editor")); - m_pEditor->InitFinished(); - m_pMatEditDlg->show(); - return true; - } - if (!m_bConsoleMode && !m_bPreviewMode) { GetIEditor()->UpdateViews(); diff --git a/Code/Sandbox/Editor/CryEdit.h b/Code/Sandbox/Editor/CryEdit.h index 7480b34e5a..6a17f9a8bf 100644 --- a/Code/Sandbox/Editor/CryEdit.h +++ b/Code/Sandbox/Editor/CryEdit.h @@ -28,7 +28,6 @@ class CCryDocManager; class CQuickAccessBar; -class CMatEditMainDlg; class CCryEditDoc; class CEditCommandLineInfo; class CMainFrame; @@ -367,7 +366,6 @@ private: //! Autotest mode: Special mode meant for automated testing, things like blocking dialogs or error report windows won't appear bool m_bAutotestMode = false; - CMatEditMainDlg* m_pMatEditDlg = nullptr; CConsoleDialog* m_pConsoleDialog = nullptr; AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING diff --git a/Code/Sandbox/Editor/MainWindow.cpp b/Code/Sandbox/Editor/MainWindow.cpp index ab5e0cf559..b926c00fc8 100644 --- a/Code/Sandbox/Editor/MainWindow.cpp +++ b/Code/Sandbox/Editor/MainWindow.cpp @@ -92,7 +92,6 @@ AZ_POP_DISABLE_WARNING #include "TrackView/TrackViewDialog.h" #include "ErrorReportDialog.h" -#include "Material/MaterialDialog.h" #include "LensFlareEditor/LensFlareEditor.h" #include "TimeOfDayDialog.h" @@ -1974,7 +1973,6 @@ void MainWindow::RegisterStdViewClasses() if (!AZ::Interface::Get()) { - CMaterialDialog::RegisterViewClass(); CLensFlareEditor::RegisterViewClass(); CTimeOfDayDialog::RegisterViewClass(); } diff --git a/Code/Sandbox/Editor/MatEditMainDlg.cpp b/Code/Sandbox/Editor/MatEditMainDlg.cpp deleted file mode 100644 index 9a96ad15d0..0000000000 --- a/Code/Sandbox/Editor/MatEditMainDlg.cpp +++ /dev/null @@ -1,110 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -// Original file Copyright Crytek GMBH or its affiliates, used under license. - -// Description : implementation file - -#include "EditorDefs.h" - -#include "MatEditMainDlg.h" - -// Qt -#include -#include - -// Editor -#include "Material/MaterialDialog.h" -#include "Material/MaterialManager.h" -#include "MaterialSender.h" - - -CMatEditMainDlg::CMatEditMainDlg(const QString& title, QWidget* pParent /*=NULL*/) - : QWidget(pParent) -{ - resize(1000, 600); - - setWindowTitle(title); - - QTimer* t = new QTimer(this); - connect(t, &QTimer::timeout, this, &CMatEditMainDlg::OnKickIdle); - t->start(250); - - m_materialDialog = new CMaterialDialog(); // must be created after the timer - auto layout = new QVBoxLayout(this); - layout->addWidget(m_materialDialog); - -#ifdef Q_OS_WIN - if (auto aed = QAbstractEventDispatcher::instance()) - { - aed->installNativeEventFilter(this); - } -#endif -} - -CMatEditMainDlg::~CMatEditMainDlg() -{ -#ifdef Q_OS_WIN - if (auto aed = QAbstractEventDispatcher::instance()) - { - aed->removeNativeEventFilter(this); - } -#endif -} - -///////////////////////////////////////////////////////////////////////////// -// CMatEditMainDlg message handlers - -void CMatEditMainDlg::showEvent(QShowEvent*) -{ - if (QWindow *win = window()->windowHandle()) - { - // Make sure our top-level window decorator wrapper set this exact title - // 3ds Max Exporter will use ::FindWindow with this name - win->setTitle("Material Editor"); - } -} - -bool CMatEditMainDlg::nativeEventFilter(const QByteArray&, void* message, long*) -{ -#ifdef Q_OS_WIN - // WM_MATEDITSEND is Windows only. Used by 3ds Max exporter. - MSG* msg = static_cast(message); - if (msg->message == WM_MATEDITSEND) - { - OnMatEditSend(msg->wParam); - return true; - } -#endif - - return false; -} - -void CMatEditMainDlg::closeEvent(QCloseEvent* event) -{ - QWidget::closeEvent(event); - qApp->quit(); -} - -void CMatEditMainDlg::OnKickIdle() -{ - GetIEditor()->Notify(eNotify_OnIdleUpdate); -} - -void CMatEditMainDlg::OnMatEditSend(int param) -{ - if (param != eMSM_Init) - { - GetIEditor()->GetMaterialManager()->SyncMaterialEditor(); - } -} - -#include diff --git a/Code/Sandbox/Editor/MatEditMainDlg.h b/Code/Sandbox/Editor/MatEditMainDlg.h deleted file mode 100644 index b329933c1f..0000000000 --- a/Code/Sandbox/Editor/MatEditMainDlg.h +++ /dev/null @@ -1,48 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -// Original file Copyright Crytek GMBH or its affiliates, used under license. - -#ifndef CRYINCLUDE_EDITOR_MATEDITMAINDLG_H -#define CRYINCLUDE_EDITOR_MATEDITMAINDLG_H - -#pragma once - -#if !defined(Q_MOC_RUN) -#include -#include -#include -#endif - -class CMaterialDialog; - -class CMatEditMainDlg - : public QWidget - , public QAbstractNativeEventFilter -{ - Q_OBJECT -public: - explicit CMatEditMainDlg(const QString& title = QString(), QWidget* parent = nullptr); - ~CMatEditMainDlg(); - - bool nativeEventFilter(const QByteArray& eventType, void* message, long* result) override; - -protected: - void closeEvent(QCloseEvent* event) override; - void showEvent(QShowEvent* event) override; - -private: - void OnKickIdle(); - void OnMatEditSend(int param); - CMaterialDialog* m_materialDialog = nullptr; -}; - -#endif // CRYINCLUDE_EDITOR_MATEDITMAINDLG_H diff --git a/Code/Sandbox/Editor/Material/MaterialDialog.cpp b/Code/Sandbox/Editor/Material/MaterialDialog.cpp deleted file mode 100644 index 5d5f14ecd2..0000000000 --- a/Code/Sandbox/Editor/Material/MaterialDialog.cpp +++ /dev/null @@ -1,2290 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -// Original file Copyright Crytek GMBH or its affiliates, used under license. - -#include "EditorDefs.h" - -#include "MaterialDialog.h" - -// Qt -#include -#include -#include -#include -#include -#include -#include -#include - -// AzToolsFramework -#include // for AzToolsFramework::ViewPaneOptions - -// Editor -#include "IEditor.h" -#include "EditTool.h" -#include "MaterialImageListCtrl.h" -#include "MaterialManager.h" -#include "MaterialHelpers.h" -#include "ShaderEnum.h" -#include "MatEditPreviewDlg.h" -#include "Controls/ReflectedPropertyControl/ReflectedPropertyCtrl.h" -#include "Include/IObjectManager.h" -#include "Objects/BaseObject.h" -#include "Settings.h" -#include "Objects/SelectionGroup.h" -#include "LyViewPaneNames.h" - - -const QString EDITOR_OBJECTS_PATH("Objects\\Editor\\"); - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::RegisterViewClass() -{ - AzToolsFramework::ViewPaneOptions opts; - opts.shortcut = QKeySequence(Qt::Key_M); - opts.canHaveMultipleInstances = true; - - AzToolsFramework::RegisterViewPane(MATERIAL_EDITOR_NAME, LyViewPane::CategoryTools, opts); - - GetIEditor()->GetSettingsManager()->AddToolVersion(MATERIAL_EDITOR_NAME, MATERIAL_EDITOR_VER); -} - -const GUID& CMaterialDialog::GetClassID() -{ - static const GUID guid = - { - 0xc7891863, 0x1665, 0x45ac, { 0xae, 0x51, 0x48, 0x66, 0x71, 0xbc, 0x8b, 0x12 } - }; - return guid; -} - -inline float RoundDegree(float val) -{ - return (float)((int)(val * 100 + 0.5f)) * 0.01f; -} - -////////////////////////////////////////////////////////////////////////// -// Material structures. -////////////////////////////////////////////////////////////////////////// - -#ifndef _countof -#define _countof(array) (sizeof(array) / sizeof(array[0])) -#endif - -struct STextureVars -{ - CSmartVariable is_tile[2]; - - CSmartVariableEnum etcgentype; - CSmartVariableEnum etcmrotatetype; - CSmartVariableEnum etcmumovetype; - CSmartVariableEnum etcmvmovetype; - CSmartVariableEnum etextype; - CSmartVariableEnum filter; - - CSmartVariable is_tcgprojected; - CSmartVariable tiling[3]; - CSmartVariable rotate[3]; - CSmartVariable offset[3]; - CSmartVariable tcmuoscrate; - CSmartVariable tcmvoscrate; - CSmartVariable tcmuoscamplitude; - CSmartVariable tcmvoscamplitude; - CSmartVariable tcmuoscphase; - CSmartVariable tcmvoscphase; - CSmartVariable tcmrotoscrate; - CSmartVariable tcmrotoscamplitude; - CSmartVariable tcmrotoscphase; - CSmartVariable tcmrotosccenter[2]; - - CSmartVariableArray tableTiling; - CSmartVariableArray tableOscillator; - CSmartVariableArray tableRotator; - - void Reset() - { - SEfTexModificator defaultTextureCoordinateModifier; - SEfResTexture defaultTextureResource; - for (int i = 0; i < 2; i++) - { - *is_tile[i] = defaultTextureResource.GetTiling(i); - *tcmrotosccenter[i] = defaultTextureCoordinateModifier.m_RotOscCenter[i]; - } - - for (int i = 0; i < 3; i++) - { - *rotate[i] = RoundDegree(Word2Degr(defaultTextureCoordinateModifier.m_Rot[i])); - *tiling[i] = defaultTextureCoordinateModifier.m_Tiling[i]; - *offset[i] = defaultTextureCoordinateModifier.m_Offs[i]; - } - - etcgentype = defaultTextureCoordinateModifier.m_eTGType; - etcmrotatetype = defaultTextureCoordinateModifier.m_eRotType; - etcmumovetype = defaultTextureCoordinateModifier.m_eMoveType[0]; - etcmvmovetype = defaultTextureCoordinateModifier.m_eMoveType[1]; - etextype = defaultTextureResource.m_Sampler.m_eTexType; - filter = defaultTextureResource.m_Filter; - is_tcgprojected = defaultTextureCoordinateModifier.m_bTexGenProjected; - - tcmuoscrate = defaultTextureCoordinateModifier.m_OscRate[0]; - tcmvoscrate = defaultTextureCoordinateModifier.m_OscRate[1]; - - tcmuoscamplitude = defaultTextureCoordinateModifier.m_OscAmplitude[0]; - tcmvoscamplitude = defaultTextureCoordinateModifier.m_OscAmplitude[1]; - - tcmuoscphase = defaultTextureCoordinateModifier.m_OscPhase[0]; - tcmvoscphase = defaultTextureCoordinateModifier.m_OscPhase[1]; - - tcmrotoscrate = RoundDegree(Word2Degr(defaultTextureCoordinateModifier.m_RotOscRate[2])); - tcmrotoscamplitude = RoundDegree(Word2Degr(defaultTextureCoordinateModifier.m_RotOscAmplitude[2])); - tcmrotoscphase = RoundDegree(Word2Degr(defaultTextureCoordinateModifier.m_RotOscPhase[2])); - } -}; - -struct SMaterialLayerVars -{ - CSmartVariable bNoDraw; // disable layer rendering (useful in some cases) - CSmartVariable bFadeOut; // fade out layer rendering and parent rendering - CSmartVariableEnum shader; // shader layer name -}; - -struct SVertexWaveFormUI -{ - CSmartVariableArray table; - CSmartVariableEnum waveFormType; - CSmartVariable level; - CSmartVariable amplitude; - CSmartVariable phase; - CSmartVariable frequency; -}; - -////////////////////////////////////////////////////////////////////////// -struct SVertexModUI -{ - CSmartVariableEnum type; - CSmartVariable fDividerX; - CSmartVariable fDividerY; - CSmartVariable fDividerZ; - CSmartVariable fDividerW; - CSmartVariable vNoiseScale; - SVertexWaveFormUI wave; -}; - -/** User Interface definition of material. -*/ -class CMaterialUI -{ -public: - CSmartVariableEnum shader; - CSmartVariable bNoShadow; - CSmartVariable bAdditive; - CSmartVariable bWire; - CSmartVariable b2Sided; - CSmartVariable opacity; - CSmartVariable alphaTest; - CSmartVariable emissiveIntensity; - CSmartVariable voxelCoverage; - CSmartVariable heatAmount; - CSmartVariable bScatter; - CSmartVariable bHideAfterBreaking; - CSmartVariable bFogVolumeShadingQualityHigh; - CSmartVariable bBlendTerrainColor; - //CSmartVariable bTranslucenseLayer; - CSmartVariableEnum surfaceType; - - CSmartVariable allowLayerActivation; - - ////////////////////////////////////////////////////////////////////////// - // Material Value Propagation for dynamic material switches, as for instance - // used by breakable glass - ////////////////////////////////////////////////////////////////////////// - CSmartVariableEnum matPropagate; - CSmartVariable bPropagateMaterialSettings; - CSmartVariable bPropagateOpactity; - CSmartVariable bPropagateLighting; - CSmartVariable bPropagateAdvanced; - CSmartVariable bPropagateTexture; - CSmartVariable bPropagateVertexDef; - CSmartVariable bPropagateShaderParams; - CSmartVariable bPropagateLayerPresets; - CSmartVariable bPropagateShaderGenParams; - - ////////////////////////////////////////////////////////////////////////// - // Lighting - ////////////////////////////////////////////////////////////////////////// - CSmartVariable diffuse; // Diffuse color 0..1 - CSmartVariable specular; // Specular color 0..1 - CSmartVariable smoothness; // Specular shininess. - CSmartVariable emissiveCol; // Emissive color 0..1 - - ////////////////////////////////////////////////////////////////////////// - // Textures. - ////////////////////////////////////////////////////////////////////////// - CSmartVariableArray textureVars[EFTT_MAX]; - CSmartVariableArray advancedTextureGroup[EFTT_MAX]; - STextureVars textures[EFTT_MAX]; - - ////////////////////////////////////////////////////////////////////////// - // Material layers settings - ////////////////////////////////////////////////////////////////////////// - - // 8 max for now. change this later - SMaterialLayerVars materialLayers[MTL_LAYER_MAX_SLOTS]; - - ////////////////////////////////////////////////////////////////////////// - - SVertexModUI vertexMod; - - CSmartVariableArray tableShader; - CSmartVariableArray tableOpacity; - CSmartVariableArray tableLighting; - CSmartVariableArray tableTexture; - CSmartVariableArray tableAdvanced; - CSmartVariableArray tableVertexMod; - CSmartVariableArray tableEffects; - - CSmartVariableArray tableShaderParams; - CSmartVariableArray tableShaderGenParams; - - CVarEnumList* enumTexType; - CVarEnumList* enumTexGenType; - CVarEnumList* enumTexModRotateType; - CVarEnumList* enumTexModUMoveType; - CVarEnumList* enumTexModVMoveType; - CVarEnumList* enumTexFilterType; - - CVarEnumList* enumVertexMod; - CVarEnumList* enumWaveType; - - ////////////////////////////////////////////////////////////////////////// - int texUsageMask; - - CVarBlockPtr m_vars; - - typedef std::map TVarChangeNotifications; - TVarChangeNotifications m_varChangeNotifications; - - ////////////////////////////////////////////////////////////////////////// - void SetFromMaterial(CMaterial* mtl); - void SetToMaterial(CMaterial* mtl, int propagationFlags = MTL_PROPAGATE_ALL); - void SetTextureNames(CMaterial* mtl); - - void SetShaderResources(const SInputShaderResources& srTextures, bool bSetTextures = true); - void GetShaderResources(SInputShaderResources& sr, int propagationFlags); - - void SetVertexDeform(const SInputShaderResources& sr); - void GetVertexDeform(SInputShaderResources& sr, int propagationFlags); - - void PropagateFromLinkedMaterial(CMaterial* mtl); - void PropagateToLinkedMaterial(CMaterial* mtl, CVarBlockPtr pShaderParamsBlock); - void NotifyObjectsAboutMaterialChange(IVariable* var); - - - ////////////////////////////////////////////////////////////////////////// - CMaterialUI() - { - } - - ~CMaterialUI() - { - } - - ////////////////////////////////////////////////////////////////////////// - CVarBlock* CreateVars() - { - m_vars = new CVarBlock; - - ////////////////////////////////////////////////////////////////////////// - // Init enums. - ////////////////////////////////////////////////////////////////////////// - enumTexType = new CVarEnumList(); - enumTexType->AddItem("2D", eTT_2D); - enumTexType->AddItem("Cube-Map", eTT_Cube); - enumTexType->AddItem("Nearest Cube-Map probe for alpha blended", eTT_NearestCube); - enumTexType->AddItem("Dynamic 2D-Map", eTT_Dyn2D); - enumTexType->AddItem("From User Params", eTT_User); - - enumTexGenType = new CVarEnumList(); - enumTexGenType->AddItem("Stream", ETG_Stream); - enumTexGenType->AddItem("World", ETG_World); - enumTexGenType->AddItem("Camera", ETG_Camera); - - enumTexModRotateType = new CVarEnumList(); - enumTexModRotateType->AddItem("No Change", ETMR_NoChange); - enumTexModRotateType->AddItem("Fixed Rotation", ETMR_Fixed); - enumTexModRotateType->AddItem("Constant Rotation", ETMR_Constant); - enumTexModRotateType->AddItem("Oscillated Rotation", ETMR_Oscillated); - - enumTexModUMoveType = new CVarEnumList(); - enumTexModUMoveType->AddItem("No Change", ETMM_NoChange); - enumTexModUMoveType->AddItem("Fixed Moving", ETMM_Fixed); - enumTexModUMoveType->AddItem("Constant Moving", ETMM_Constant); - enumTexModUMoveType->AddItem("Jitter Moving", ETMM_Jitter); - enumTexModUMoveType->AddItem("Pan Moving", ETMM_Pan); - enumTexModUMoveType->AddItem("Stretch Moving", ETMM_Stretch); - enumTexModUMoveType->AddItem("Stretch-Repeat Moving", ETMM_StretchRepeat); - - enumTexModVMoveType = new CVarEnumList(); - enumTexModVMoveType->AddItem("No Change", ETMM_NoChange); - enumTexModVMoveType->AddItem("Fixed Moving", ETMM_Fixed); - enumTexModVMoveType->AddItem("Constant Moving", ETMM_Constant); - enumTexModVMoveType->AddItem("Jitter Moving", ETMM_Jitter); - enumTexModVMoveType->AddItem("Pan Moving", ETMM_Pan); - enumTexModVMoveType->AddItem("Stretch Moving", ETMM_Stretch); - enumTexModVMoveType->AddItem("Stretch-Repeat Moving", ETMM_StretchRepeat); - - enumTexFilterType = new CVarEnumList(); - enumTexFilterType->AddItem("Default", FILTER_NONE); - enumTexFilterType->AddItem("Point", FILTER_POINT); - enumTexFilterType->AddItem("Linear", FILTER_LINEAR); - enumTexFilterType->AddItem("Bilinear", FILTER_BILINEAR); - enumTexFilterType->AddItem("Trilinear", FILTER_TRILINEAR); - enumTexFilterType->AddItem("Anisotropic 2x", FILTER_ANISO2X); - enumTexFilterType->AddItem("Anisotropic 4x", FILTER_ANISO4X); - enumTexFilterType->AddItem("Anisotropic 8x", FILTER_ANISO8X); - enumTexFilterType->AddItem("Anisotropic 16x", FILTER_ANISO16X); - - ////////////////////////////////////////////////////////////////////////// - // Vertex Mods. - ////////////////////////////////////////////////////////////////////////// - enumVertexMod = new CVarEnumList(); - enumVertexMod->AddItem("None", eDT_Unknown); - enumVertexMod->AddItem("Sin Wave", eDT_SinWave); - enumVertexMod->AddItem("Sin Wave using vertex color", eDT_SinWaveUsingVtxColor); - enumVertexMod->AddItem("Bulge", eDT_Bulge); - enumVertexMod->AddItem("Squeeze", eDT_Squeeze); - enumVertexMod->AddItem("FixedOffset", eDT_FixedOffset); - - ////////////////////////////////////////////////////////////////////////// - - enumWaveType = new CVarEnumList(); - enumWaveType->AddItem("Sin", eWF_Sin); - - ////////////////////////////////////////////////////////////////////////// - // Fill shaders enum. - ////////////////////////////////////////////////////////////////////////// - CVarEnumList* enumShaders = new CVarEnumList(); - { - CShaderEnum* pShaderEnum = GetIEditor()->GetShaderEnum(); - pShaderEnum->EnumShaders(); - for (int i = 0; i < pShaderEnum->GetShaderCount(); i++) - { - QString shaderName = pShaderEnum->GetShader(i); - if (shaderName.contains("_Overlay", Qt::CaseInsensitive)) - { - continue; - } - enumShaders->AddItem(shaderName, shaderName); - } - } - - ////////////////////////////////////////////////////////////////////////// - // Fill surface types. - ////////////////////////////////////////////////////////////////////////// - CVarEnumList* enumSurfaceTypes = new CVarEnumList(); - { - QStringList types; - types.push_back(""); // Push empty surface type. - ISurfaceTypeEnumerator* pSurfaceTypeEnum = gEnv->p3DEngine->GetMaterialManager()->GetSurfaceTypeManager()->GetEnumerator(); - if (pSurfaceTypeEnum) - { - for (ISurfaceType* pSurfaceType = pSurfaceTypeEnum->GetFirst(); pSurfaceType; pSurfaceType = pSurfaceTypeEnum->GetNext()) - { - types.push_back(pSurfaceType->GetName()); - } - std::sort(types.begin(), types.end()); - for (int i = 0; i < types.size(); i++) - { - QString name = types[i]; - if (name.left(4) == "mat_") - { - name.remove(0, 4); - } - enumSurfaceTypes->AddItem(name, types[i]); - } - } - } - - ////////////////////////////////////////////////////////////////////////// - // Init tables. - ////////////////////////////////////////////////////////////////////////// - AddVariable(m_vars, tableShader, "Material Settings", ""); - AddVariable(m_vars, tableOpacity, "Opacity Settings", ""); - AddVariable(m_vars, tableLighting, "Lighting Settings", ""); - AddVariable(m_vars, tableAdvanced, "Advanced", ""); - AddVariable(m_vars, tableTexture, "Texture Maps", ""); - AddVariable(m_vars, tableShaderParams, "Shader Params", ""); - AddVariable(m_vars, tableShaderGenParams, "Shader Generation Params", ""); - AddVariable(m_vars, tableVertexMod, "Vertex Deformation", ""); - - tableTexture->SetFlags(tableTexture->GetFlags() | IVariable::UI_ROLLUP2); - tableVertexMod->SetFlags(tableVertexMod->GetFlags() | IVariable::UI_ROLLUP2 | IVariable::UI_COLLAPSED); - tableAdvanced->SetFlags(tableAdvanced->GetFlags() | IVariable::UI_COLLAPSED); - tableShaderGenParams->SetFlags(tableShaderGenParams->GetFlags() | IVariable::UI_ROLLUP2 | IVariable::UI_COLLAPSED); - tableShaderParams->SetFlags(tableShaderParams->GetFlags() | IVariable::UI_ROLLUP2); - - - ////////////////////////////////////////////////////////////////////////// - // Shader. - ////////////////////////////////////////////////////////////////////////// - AddVariable(tableShader, shader, "Shader", "Selects shader type for specific surface response and options"); - AddVariable(tableShader, surfaceType, "Surface Type", "Defines how entities interact with surfaces using the material effects system"); - m_varChangeNotifications["Surface Type"] = MATERIALCHANGE_SURFACETYPE; - - shader->SetEnumList(enumShaders); - - surfaceType->SetEnumList(enumSurfaceTypes); - - // Properties that use this scriptingDescription are based on what's available in MaterialHelpers::SetGetMaterialParamVec3 and MaterialHelpers::SetGetMaterialParamFloat. - // This should match what's done in MaterialHelpers.cpp AddRealNameToDescription(). - auto scriptingDescription = [](const AZStd::string& scriptAccessibleName, const AZStd::string& description) { return description + "\n(Script Param Name = " + scriptAccessibleName + ")"; }; - - ////////////////////////////////////////////////////////////////////////// - // Opacity. - ////////////////////////////////////////////////////////////////////////// - AddVariable(tableOpacity, opacity, "Opacity", - scriptingDescription("opacity", "Sets the transparency amount. Uses 0-99 to set Alpha Blend and 100 for Opaque and Alpha Test.").c_str(), IVariable::DT_PERCENT); - AddVariable(tableOpacity, alphaTest, "AlphaTest", - scriptingDescription("alpha", "Uses the alpha mask and refines the transparent edge. Uses 0-50 to bias toward white or 50-100 to bias toward black.").c_str(), IVariable::DT_PERCENT); - AddVariable(tableOpacity, bAdditive, "Additive", "Adds material color to the background color resulting in a brighter transparent surface"); - opacity->SetLimits(0, 100, 1, true, true); - alphaTest->SetLimits(0, 100, 1, true, true); - - ////////////////////////////////////////////////////////////////////////// - // Lighting. - ////////////////////////////////////////////////////////////////////////// - AddVariable(tableLighting, diffuse, "Diffuse Color (Tint)", scriptingDescription("diffuse", "Tints the material diffuse color. Physically based materials should be left at white").c_str(), IVariable::DT_COLOR); - AddVariable(tableLighting, specular, "Specular Color", scriptingDescription("specular", "Reflective and shininess intensity and color of reflective highlights").c_str(), IVariable::DT_COLOR); - AddVariable(tableLighting, smoothness, "Smoothness", scriptingDescription("shininess", "Smoothness or glossiness simulating how light bounces off the surface").c_str()); - AddVariable(tableLighting, emissiveIntensity, "Emissive Intensity (kcd/m2)", scriptingDescription("emissive_intensity", "Brightness simulating light emitting from the surface making an object glow").c_str()); - AddVariable(tableLighting, emissiveCol, "Emissive Color", scriptingDescription("emissive_color", "Tints the emissive color").c_str(), IVariable::DT_COLOR); - emissiveIntensity->SetLimits(0, EMISSIVE_INTENSITY_SOFT_MAX, 1, true, false); - smoothness->SetLimits(0, 255, 1, true, true); - - ////////////////////////////////////////////////////////////////////////// - // Init texture variables. - ////////////////////////////////////////////////////////////////////////// - for (EEfResTextures texId = EEfResTextures(0); texId < EFTT_MAX; texId = EEfResTextures(texId + 1)) - { - if (!MaterialHelpers::IsAdjustableTexSlot(texId)) - { - continue; - } - - InitTextureVars(texId, MaterialHelpers::LookupTexName(texId), MaterialHelpers::LookupTexDesc(texId)); - } - - //AddVariable( tableAdvanced,bWire,"Wireframe" ); - AddVariable(tableAdvanced, allowLayerActivation, "Allow layer activation", ""); - AddVariable(tableAdvanced, b2Sided, "2 Sided", "Enables both sides of mesh faces to render"); - AddVariable(tableAdvanced, bNoShadow, "No Shadow", "Disables casting shadows from mesh faces"); - AddVariable(tableAdvanced, bScatter, "Use Scattering", "Deprecated"); - AddVariable(tableAdvanced, bHideAfterBreaking, "Hide After Breaking", "Causes the object to disappear after procedurally breaking"); - AddVariable(tableAdvanced, bFogVolumeShadingQualityHigh, "Fog Volume Shading Quality High", "high fog volume shading quality behaves more accurately with fog volumes."); - AddVariable(tableAdvanced, bBlendTerrainColor, "Blend Terrain Color", ""); - AddVariable(tableAdvanced, voxelCoverage, "Voxel Coverage", "Fine tunes occlusion amount for svogi feature. Higher values occlude more closely to object shape."); - voxelCoverage->SetLimits(0, 1.0f); - - ////////////////////////////////////////////////////////////////////////// - // Material Value Propagation for dynamic material switches, as for instance - // used by breakable glass - ////////////////////////////////////////////////////////////////////////// - AddVariable(tableAdvanced, matPropagate, "Link to Material", ""); - AddVariable(tableAdvanced, bPropagateMaterialSettings, "Propagate Material Settings", ""); - AddVariable(tableAdvanced, bPropagateOpactity, "Propagate Opacity Settings", ""); - AddVariable(tableAdvanced, bPropagateLighting, "Propagate Lighting Settings", ""); - AddVariable(tableAdvanced, bPropagateAdvanced, "Propagate Advanced Settings", ""); - AddVariable(tableAdvanced, bPropagateTexture, "Propagate Texture Maps", ""); - AddVariable(tableAdvanced, bPropagateShaderParams, "Propagate Shader Params", ""); - AddVariable(tableAdvanced, bPropagateShaderGenParams, "Propagate Shader Generation", ""); - AddVariable(tableAdvanced, bPropagateVertexDef, "Propagate Vertex Deformation", ""); - - ////////////////////////////////////////////////////////////////////////// - // Init Vertex Deformation. - ////////////////////////////////////////////////////////////////////////// - vertexMod.type->SetEnumList(enumVertexMod); - AddVariable(tableVertexMod, vertexMod.type, "Type", "Choose method to define how the vertices will deform"); - AddVariable(tableVertexMod, vertexMod.fDividerX, "Wave Length", "Length of wave deformation"); - - AddVariable(tableVertexMod, vertexMod.wave.table, "Parameters", "Fine tunes how the vertices deform"); - - vertexMod.wave.waveFormType->SetEnumList(enumWaveType); - AddVariable(vertexMod.wave.table, vertexMod.wave.waveFormType, "Type", "Sin type will include vertex color in calculation"); - AddVariable(vertexMod.wave.table, vertexMod.wave.level, "Level", "Scales the object equally in xyz"); - AddVariable(vertexMod.wave.table, vertexMod.wave.amplitude, "Amplitude", "Strength of vertex deformation (vertex color: b, normal: z)"); - AddVariable(vertexMod.wave.table, vertexMod.wave.phase, "Phase", "Offset of vertex deformation (vertex color: r, normal: x)"); - AddVariable(vertexMod.wave.table, vertexMod.wave.frequency, "Frequency", "Speed of vertex animation (vertex color: g, normal: y)"); - - return m_vars; - } - -private: - ////////////////////////////////////////////////////////////////////////// - void InitTextureVars(int id, const QString& name, const QString& desc) - { - textureVars[id]->SetFlags(IVariable::UI_BOLD); - textureVars[id]->SetFlags(textureVars[id]->GetFlags() | IVariable::UI_AUTO_EXPAND); - advancedTextureGroup[id]->SetFlags(advancedTextureGroup[id]->GetFlags() | IVariable::UI_COLLAPSED); - AddVariable(tableTexture, *textureVars[id], name.toUtf8().data(), desc.toUtf8().data(), IVariable::DT_TEXTURE); - AddVariable(*textureVars[id], *advancedTextureGroup[id], "Advanced", "Controls UV tiling, offset, and rotation as well as texture filtering"); - - AddVariable(*advancedTextureGroup[id], textures[id].etextype, "TexType", ""); - AddVariable(*advancedTextureGroup[id], textures[id].filter, "Filter", "Sets texture smoothing method to determine texture pixel quality"); - - AddVariable(*advancedTextureGroup[id], textures[id].is_tcgprojected, "IsProjectedTexGen", ""); - AddVariable(*advancedTextureGroup[id], textures[id].etcgentype, "TexGenType", "Controls UV projection behavior"); - - if (IsTextureModifierSupportedForTextureMap(static_cast(id))) - { - ////////////////////////////////////////////////////////////////////////// - // Tiling table. - AddVariable(*advancedTextureGroup[id], textures[id].tableTiling, "Tiling", "Controls UV tiling, offset, and rotation"); - { - CVariableArray& table = textures[id].tableTiling; - table.SetFlags(IVariable::UI_BOLD); - AddVariable(table, *textures[id].is_tile[0], "IsTileU", "Enables UV tiling on U"); - AddVariable(table, *textures[id].is_tile[1], "IsTileV", "Enables UV tiling on V"); - AddVariable(table, *textures[id].tiling[0], "TileU", "Multiplies tiled projection on U"); - AddVariable(table, *textures[id].tiling[1], "TileV", "Multiplies tiled projection on V"); - AddVariable(table, *textures[id].offset[0], "OffsetU", "Offsets texture projection on U"); - AddVariable(table, *textures[id].offset[1], "OffsetV", "Offsets texture projection on V"); - AddVariable(table, *textures[id].rotate[0], "RotateU", "Rotates texture projection on U"); - AddVariable(table, *textures[id].rotate[1], "RotateV", "Rotates texture projection on V"); - AddVariable(table, *textures[id].rotate[2], "RotateW", "Rotates texture projection on W"); - } - - ////////////////////////////////////////////////////////////////////////// - // Rotator tables. - AddVariable(*advancedTextureGroup[id], textures[id].tableRotator, "Rotator", "Controls the animated UV rotation"); - { - CVariableArray& table = textures[id].tableRotator; - table.SetFlags(IVariable::UI_BOLD); - AddVariable(table, textures[id].etcmrotatetype, "Type", "Controls the behavior of UV rotation"); - AddVariable(table, textures[id].tcmrotoscrate, "Rate", "Sets the speed (number of complete cycles per unit of time) of rotation"); - AddVariable(table, textures[id].tcmrotoscphase, "Phase", "Sets the initial offset of rotation"); - AddVariable(table, textures[id].tcmrotoscamplitude, "Amplitude", "Sets the strength (maximum value) of rotation"); - AddVariable(table, *textures[id].tcmrotosccenter[0], "CenterU", "Sets the center of rotation along U"); - AddVariable(table, *textures[id].tcmrotosccenter[1], "CenterV", "Sets the center of rotation along V"); - } - - ////////////////////////////////////////////////////////////////////////// - // Oscillator table - AddVariable(*advancedTextureGroup[id], textures[id].tableOscillator, "Oscillator", "Controls the animated UV oscillation"); - { - CVariableArray& table = textures[id].tableOscillator; - table.SetFlags(IVariable::UI_BOLD); - AddVariable(table, textures[id].etcmumovetype, "TypeU", "Sets the behavior of oscillation in the U direction"); - AddVariable(table, textures[id].etcmvmovetype, "TypeV", "Sets the behavior of oscillation in the V direction"); - AddVariable(table, textures[id].tcmuoscrate, "RateU", "Sets the speed (number of complete cycles per unit of time) of oscillation in U"); - AddVariable(table, textures[id].tcmvoscrate, "RateV", "Sets the speed (number of complete cycles per unit of time) of oscillation in V"); - AddVariable(table, textures[id].tcmuoscphase, "PhaseU", "Sets the initial offset of oscillation in U"); - AddVariable(table, textures[id].tcmvoscphase, "PhaseV", "Sets the initial offset of oscillation in V"); - AddVariable(table, textures[id].tcmuoscamplitude, "AmplitudeU", "Sets the strength (maximum value) of oscillation in U"); - AddVariable(table, textures[id].tcmvoscamplitude, "AmplitudeV", "Sets the strength (maximum value) of oscillation in V"); - } - } - - ////////////////////////////////////////////////////////////////////////// - // Assign enums tables to variable. - ////////////////////////////////////////////////////////////////////////// - textures[id].etextype->SetEnumList(enumTexType); - textures[id].etcgentype->SetEnumList(enumTexGenType); - textures[id].etcmrotatetype->SetEnumList(enumTexModRotateType); - textures[id].etcmumovetype->SetEnumList(enumTexModUMoveType); - textures[id].etcmvmovetype->SetEnumList(enumTexModVMoveType); - textures[id].filter->SetEnumList(enumTexFilterType); - } - ////////////////////////////////////////////////////////////////////////// - - void AddVariable(CVariableBase& varArray, CVariableBase& var, const char* varName, const char* varTooltip, unsigned char dataType = IVariable::DT_SIMPLE) - { - if (varName) - { - var.SetName(varName); - } - if (varTooltip) - { - var.SetDescription(varTooltip); - } - var.SetDataType(dataType); - varArray.AddVariable(&var); - } - ////////////////////////////////////////////////////////////////////////// - void AddVariable(CVarBlock* vars, CVariableBase& var, const char* varName, const char* varTooltip, unsigned char dataType = IVariable::DT_SIMPLE) - { - if (varName) - { - var.SetName(varName); - } - if (varTooltip) - { - var.SetDescription(varTooltip); - } - var.SetDataType(dataType); - vars->AddVariable(&var); - } - - void SetTextureResources(const SEfResTexture *pTextureRes, uint16 tex, bool bSetTextures); - void GetTextureResources(SInputShaderResources& sr, int texid, int propagationFlags); - void ResetTextureResources(uint16 tex); - Vec4 ToVec4(const ColorF& col) { return Vec4(col.r, col.g, col.b, col.a); } - Vec3 ToVec3(const ColorF& col) { return Vec3(col.r, col.g, col.b); } - ColorF ToCFColor(const Vec3& col) { return ColorF(col); } - ColorF ToCFColor(const Vec4& col) { return ColorF(col); } -}; - -////////////////////////////////////////////////////////////////////////// -void CMaterialUI::NotifyObjectsAboutMaterialChange(IVariable* var) -{ - if (!var) - { - return; - } - - TVarChangeNotifications::iterator it = m_varChangeNotifications.find(var->GetName()); - if (it == m_varChangeNotifications.end()) - { - return; - } - - CMaterial* pMaterial = GetIEditor()->GetMaterialManager()->GetCurrentMaterial(); - if (!pMaterial) - { - return; - } - - // Get a parent, if we are editing submaterial - if (pMaterial->GetParent() != 0) - { - pMaterial = pMaterial->GetParent(); - } - - CBaseObjectsArray objects; - GetIEditor()->GetObjectManager()->GetObjects(objects); - int numObjects = objects.size(); - for (int i = 0; i < numObjects; ++i) - { - CBaseObject* pObject = objects[i]; - if (pObject->GetRenderMaterial() == pMaterial) - { - pObject->OnMaterialChanged(it->second); - } - } -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialUI::SetShaderResources(const SInputShaderResources& srTextures, bool bSetTextures) -{ - alphaTest = srTextures.m_AlphaRef; - voxelCoverage = (float) srTextures.m_VoxelCoverage / 255.0f; - - diffuse = ToVec3(srTextures.m_LMaterial.m_Diffuse); - specular = ToVec3(srTextures.m_LMaterial.m_Specular); - emissiveCol = ToVec3(srTextures.m_LMaterial.m_Emittance); - emissiveIntensity = srTextures.m_LMaterial.m_Emittance.a; - opacity = srTextures.m_LMaterial.m_Opacity; - smoothness = srTextures.m_LMaterial.m_Smoothness; - - SetVertexDeform(srTextures); - - - for (EEfResTextures texId = EEfResTextures(0); texId < EFTT_MAX; texId = EEfResTextures(texId + 1)) - { - if (!MaterialHelpers::IsAdjustableTexSlot(texId)) - { - continue; - } - - auto foundIter = srTextures.m_TexturesResourcesMap.find((ResourceSlotIndex)texId); - if (foundIter != srTextures.m_TexturesResourcesMap.end()) - { - const SEfResTexture* pTextureRes = const_cast(&foundIter->second); - SetTextureResources(pTextureRes, texId, bSetTextures); - } - else - { - ResetTextureResources(texId); - } - } -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialUI::GetShaderResources(SInputShaderResources& sr, int propagationFlags) -{ - if (propagationFlags & MTL_PROPAGATE_OPACITY) - { - sr.m_LMaterial.m_Opacity = opacity; - sr.m_AlphaRef = alphaTest; - } - - if (propagationFlags & MTL_PROPAGATE_ADVANCED) - { - sr.m_VoxelCoverage = int_round(voxelCoverage * 255.0f); - } - - if (propagationFlags & MTL_PROPAGATE_LIGHTING) - { - sr.m_LMaterial.m_Diffuse = ToCFColor(diffuse); - sr.m_LMaterial.m_Specular = ToCFColor(specular); - sr.m_LMaterial.m_Emittance = ColorF(emissiveCol, emissiveIntensity); - sr.m_LMaterial.m_Smoothness = smoothness; - } - - GetVertexDeform(sr, propagationFlags); - - for (EEfResTextures texId = EEfResTextures(0); texId < EFTT_MAX; texId = EEfResTextures(texId + 1)) - { - if (!MaterialHelpers::IsAdjustableTexSlot(texId)) - { - continue; - } - - GetTextureResources(sr, texId, propagationFlags); - } -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialUI::SetTextureResources( const SEfResTexture *pTextureRes, uint16 texSlot, bool bSetTextures) -{ - /* - // Enable/Disable texture map, depending on the mask. - int flags = textureVars[tex].GetFlags(); - if ((1 << tex) & texUsageMask) - flags &= ~IVariable::UI_DISABLED; - else - flags |= IVariable::UI_DISABLED; - textureVars[tex].SetFlags( flags ); - */ - - if (bSetTextures) - { - QString texFilename = pTextureRes->m_Name.c_str(); - texFilename = Path::ToUnixPath(texFilename); - textureVars[texSlot]->Set(texFilename); - } - - //textures[tex].amount = pTextureRes->m_Amount; - *textures[texSlot].is_tile[0] = pTextureRes->m_bUTile; - *textures[texSlot].is_tile[1] = pTextureRes->m_bVTile; - - *textures[texSlot].tiling[0] = pTextureRes->GetTiling(0); - *textures[texSlot].tiling[1] = pTextureRes->GetTiling(1); - *textures[texSlot].offset[0] = pTextureRes->GetOffset(0); - *textures[texSlot].offset[1] = pTextureRes->GetOffset(1); - textures[texSlot].filter = (int)pTextureRes->m_Filter; - textures[texSlot].etextype = pTextureRes->m_Sampler.m_eTexType; - - if (pTextureRes->m_Ext.m_pTexModifier) - { - textures[texSlot].etcgentype = pTextureRes->m_Ext.m_pTexModifier->m_eTGType; - textures[texSlot].etcmumovetype = pTextureRes->m_Ext.m_pTexModifier->m_eMoveType[0]; - textures[texSlot].etcmvmovetype = pTextureRes->m_Ext.m_pTexModifier->m_eMoveType[1]; - textures[texSlot].etcmrotatetype = pTextureRes->m_Ext.m_pTexModifier->m_eRotType; - textures[texSlot].is_tcgprojected = pTextureRes->m_Ext.m_pTexModifier->m_bTexGenProjected; - textures[texSlot].tcmuoscrate = pTextureRes->m_Ext.m_pTexModifier->m_OscRate[0]; - textures[texSlot].tcmuoscphase = pTextureRes->m_Ext.m_pTexModifier->m_OscPhase[0]; - textures[texSlot].tcmuoscamplitude = pTextureRes->m_Ext.m_pTexModifier->m_OscAmplitude[0]; - textures[texSlot].tcmvoscrate = pTextureRes->m_Ext.m_pTexModifier->m_OscRate[1]; - textures[texSlot].tcmvoscphase = pTextureRes->m_Ext.m_pTexModifier->m_OscPhase[1]; - textures[texSlot].tcmvoscamplitude = pTextureRes->m_Ext.m_pTexModifier->m_OscAmplitude[1]; - - for (int i = 0; i < 3; i++) - { - *textures[texSlot].rotate[i] = RoundDegree(Word2Degr(pTextureRes->m_Ext.m_pTexModifier->m_Rot[i])); - } - textures[texSlot].tcmrotoscrate = RoundDegree(Word2Degr(pTextureRes->m_Ext.m_pTexModifier->m_RotOscRate[2])); - textures[texSlot].tcmrotoscphase = RoundDegree(Word2Degr(pTextureRes->m_Ext.m_pTexModifier->m_RotOscPhase[2])); - textures[texSlot].tcmrotoscamplitude = RoundDegree(Word2Degr(pTextureRes->m_Ext.m_pTexModifier->m_RotOscAmplitude[2])); - *textures[texSlot].tcmrotosccenter[0] = pTextureRes->m_Ext.m_pTexModifier->m_RotOscCenter[0]; - *textures[texSlot].tcmrotosccenter[1] = pTextureRes->m_Ext.m_pTexModifier->m_RotOscCenter[1]; - } - else - { - textures[texSlot].etcgentype = 0; - textures[texSlot].etcmumovetype = 0; - textures[texSlot].etcmvmovetype = 0; - textures[texSlot].etcmrotatetype = 0; - textures[texSlot].is_tcgprojected = false; - textures[texSlot].tcmuoscrate = 0; - textures[texSlot].tcmuoscphase = 0; - textures[texSlot].tcmuoscamplitude = 0; - textures[texSlot].tcmvoscrate = 0; - textures[texSlot].tcmvoscphase = 0; - textures[texSlot].tcmvoscamplitude = 0; - - for (int i = 0; i < 3; i++) - { - *textures[texSlot].rotate[i] = 0; - } - - textures[texSlot].tcmrotoscrate = 0; - textures[texSlot].tcmrotoscphase = 0; - textures[texSlot].tcmrotoscamplitude = 0; - *textures[texSlot].tcmrotosccenter[0] = 0; - *textures[texSlot].tcmrotosccenter[1] = 0; - } -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialUI::ResetTextureResources(uint16 texSlot) -{ - QString texFilename = ""; - textureVars[texSlot]->Set(texFilename); - textures[texSlot].Reset(); -} - -void CMaterialUI::GetTextureResources(SInputShaderResources& sr, int tex, int propagationFlags) -{ - if ((propagationFlags & MTL_PROPAGATE_TEXTURES) == 0) - { - return; - } - - QString texFilename; - textureVars[tex]->Get(texFilename); - if (texFilename.isEmpty()) - { - // Remove the texture if the path was cleared in the UI - sr.m_TexturesResourcesMap.erase(tex); - - // If the normal map/second normal map has been cleared in the UI, - // we must also clear the smoothness/second smoothness since smoothness lives in the alpha of the normal - if (tex == EFTT_NORMALS) - { - sr.m_TexturesResourcesMap.erase(EFTT_SMOOTHNESS); - } - // EFTT_CUSTOM_SECONDARY is the 2nd normal - if (tex == EFTT_CUSTOM_SECONDARY) - { - sr.m_TexturesResourcesMap.erase(EFTT_SECOND_SMOOTHNESS); - } - return; - } - texFilename = Path::ToUnixPath(texFilename); - - // Clear any texture resource that has no associated file - if (texFilename.size() > AZ_MAX_PATH_LEN) - { - AZ_Error("Material Editor", false, "Texture path exceeds the maximium allowable length of %d.", AZ_MAX_PATH_LEN); - return; - } - - // The following line will insert the slot if did not exist. - SEfResTexture* pTextureRes = &(sr.m_TexturesResourcesMap[tex]); - pTextureRes->m_Name = texFilename.toUtf8().data(); - - //pTextureRes->m_Amount = textures[tex].amount; - pTextureRes->m_bUTile = *textures[tex].is_tile[0]; - pTextureRes->m_bVTile = *textures[tex].is_tile[1]; - SEfTexModificator& texm = *pTextureRes->AddModificator(); - texm.m_bTexGenProjected = textures[tex].is_tcgprojected; - - texm.m_Tiling[0] = *textures[tex].tiling[0]; - texm.m_Tiling[1] = *textures[tex].tiling[1]; - texm.m_Offs[0] = *textures[tex].offset[0]; - texm.m_Offs[1] = *textures[tex].offset[1]; - pTextureRes->m_Filter = (int)textures[tex].filter; - pTextureRes->m_Sampler.m_eTexType = textures[tex].etextype; - texm.m_eRotType = textures[tex].etcmrotatetype; - texm.m_eTGType = textures[tex].etcgentype; - texm.m_eMoveType[0] = textures[tex].etcmumovetype; - texm.m_eMoveType[1] = textures[tex].etcmvmovetype; - texm.m_OscRate[0] = textures[tex].tcmuoscrate; - texm.m_OscPhase[0] = textures[tex].tcmuoscphase; - texm.m_OscAmplitude[0] = textures[tex].tcmuoscamplitude; - texm.m_OscRate[1] = textures[tex].tcmvoscrate; - texm.m_OscPhase[1] = textures[tex].tcmvoscphase; - texm.m_OscAmplitude[1] = textures[tex].tcmvoscamplitude; - - for (int i = 0; i < 3; i++) - { - texm.m_Rot[i] = Degr2Word(*textures[tex].rotate[i]); - } - texm.m_RotOscRate[2] = Degr2Word(textures[tex].tcmrotoscrate); - texm.m_RotOscPhase[2] = Degr2Word(textures[tex].tcmrotoscphase); - texm.m_RotOscAmplitude[2] = Degr2Word(textures[tex].tcmrotoscamplitude); - texm.m_RotOscCenter[0] = *textures[tex].tcmrotosccenter[0]; - texm.m_RotOscCenter[1] = *textures[tex].tcmrotosccenter[1]; - texm.m_RotOscCenter[2] = 0.0f; -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialUI::SetVertexDeform(const SInputShaderResources& sr) -{ - vertexMod.type = (int)sr.m_DeformInfo.m_eType; - vertexMod.fDividerX = sr.m_DeformInfo.m_fDividerX; - vertexMod.vNoiseScale = sr.m_DeformInfo.m_vNoiseScale; - - vertexMod.wave.waveFormType = EWaveForm::eWF_Sin; - vertexMod.wave.amplitude = sr.m_DeformInfo.m_WaveX.m_Amp; - vertexMod.wave.level = sr.m_DeformInfo.m_WaveX.m_Level; - vertexMod.wave.phase = sr.m_DeformInfo.m_WaveX.m_Phase; - vertexMod.wave.frequency = sr.m_DeformInfo.m_WaveX.m_Freq; -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialUI::GetVertexDeform(SInputShaderResources& sr, int propagationFlags) -{ - if ((propagationFlags & MTL_PROPAGATE_VERTEX_DEF) == 0) - { - return; - } - - sr.m_DeformInfo.m_eType = (EDeformType)((int)vertexMod.type); - sr.m_DeformInfo.m_fDividerX = vertexMod.fDividerX; - sr.m_DeformInfo.m_vNoiseScale = vertexMod.vNoiseScale; - - sr.m_DeformInfo.m_WaveX.m_eWFType = (EWaveForm)((int)vertexMod.wave.waveFormType); - sr.m_DeformInfo.m_WaveX.m_Amp = vertexMod.wave.amplitude; - sr.m_DeformInfo.m_WaveX.m_Level = vertexMod.wave.level; - sr.m_DeformInfo.m_WaveX.m_Phase = vertexMod.wave.phase; - sr.m_DeformInfo.m_WaveX.m_Freq = vertexMod.wave.frequency; -} - -void CMaterialUI::PropagateToLinkedMaterial(CMaterial* mtl, CVarBlockPtr pShaderParams) -{ - if (!mtl) - { - return; - } - CMaterial* subMtl = NULL, * parentMtl = mtl->GetParent(); - const QString& linkedMaterialName = matPropagate; - int propFlags = 0; - - if (parentMtl) - { - for (int i = 0; i < parentMtl->GetSubMaterialCount(); ++i) - { - CMaterial* pMtl = parentMtl->GetSubMaterial(i); - if (pMtl && pMtl != mtl && pMtl->GetFullName() == linkedMaterialName) - { - subMtl = pMtl; - break; - } - } - } - if (!linkedMaterialName.isEmpty() && subMtl) - { - // Ensure that the linked material is cleared if it can't be found anymore - mtl->LinkToMaterial(linkedMaterialName); - } - // Note: It's only allowed to propagate the shader params and shadergen params - // if we also propagate the actual shader to the linked material as well, else - // bogus values will be set - bPropagateShaderParams = (int)bPropagateShaderParams & - (int)bPropagateMaterialSettings; - bPropagateShaderGenParams = (int)bPropagateShaderGenParams & - (int)bPropagateMaterialSettings; - - propFlags |= MTL_PROPAGATE_MATERIAL_SETTINGS & - (int)bPropagateMaterialSettings; - propFlags |= MTL_PROPAGATE_OPACITY & - (int)bPropagateOpactity; - propFlags |= MTL_PROPAGATE_LIGHTING & - (int)bPropagateLighting; - propFlags |= MTL_PROPAGATE_ADVANCED & - (int)bPropagateAdvanced; - propFlags |= MTL_PROPAGATE_TEXTURES & - (int)bPropagateTexture; - propFlags |= MTL_PROPAGATE_SHADER_PARAMS & - (int)bPropagateShaderParams; - propFlags |= MTL_PROPAGATE_SHADER_GEN & - (int)bPropagateShaderGenParams; - propFlags |= MTL_PROPAGATE_VERTEX_DEF & - (int)bPropagateVertexDef; - propFlags |= MTL_PROPAGATE_LAYER_PRESETS & - (int)bPropagateLayerPresets; - mtl->SetPropagationFlags(propFlags); - - if (subMtl) - { - SetToMaterial(subMtl, propFlags | MTL_PROPAGATE_RESERVED); - if (propFlags & MTL_PROPAGATE_SHADER_PARAMS) - { - if (CVarBlock* pPublicVars = subMtl->GetPublicVars(mtl->GetShaderResources())) - { - subMtl->SetPublicVars(pPublicVars, subMtl); - } - } - if (propFlags & MTL_PROPAGATE_SHADER_GEN) - { - subMtl->SetShaderGenParamsVars(mtl->GetShaderGenParamsVars()); - } - subMtl->Update(); - subMtl->UpdateMaterialLayers(); - } -} - -void CMaterialUI::PropagateFromLinkedMaterial(CMaterial* mtl) -{ - if (!mtl) - { - return; - } - CMaterial* subMtl = NULL, * parentMtl = mtl->GetParent(); - const QString& linkedMaterialName = mtl->GetLinkedMaterialName(); - //CVarEnumList *enumMtls = new CVarEnumList; - if (parentMtl) - { - for (int i = 0; i < parentMtl->GetSubMaterialCount(); ++i) - { - CMaterial* pMtl = parentMtl->GetSubMaterial(i); - if (!pMtl || pMtl == mtl) - { - continue; - } - const QString& subMtlName = pMtl->GetFullName(); - //enumMtls->AddItem(subMtlName, subMtlName); - if (subMtlName == linkedMaterialName) - { - subMtl = pMtl; - break; - } - } - } - matPropagate = QString(); - //matPropagate.SetEnumList(enumMtls); - if (!linkedMaterialName.isEmpty() && !subMtl) - { - // Ensure that the linked material is cleared if it can't be found anymore - mtl->LinkToMaterial(QString()); - } - else - { - matPropagate = linkedMaterialName; - } - bPropagateMaterialSettings = mtl->GetPropagationFlags() & MTL_PROPAGATE_MATERIAL_SETTINGS; - bPropagateOpactity = mtl->GetPropagationFlags() & MTL_PROPAGATE_OPACITY; - bPropagateLighting = mtl->GetPropagationFlags() & MTL_PROPAGATE_LIGHTING; - bPropagateTexture = mtl->GetPropagationFlags() & MTL_PROPAGATE_TEXTURES; - bPropagateAdvanced = mtl->GetPropagationFlags() & MTL_PROPAGATE_ADVANCED; - bPropagateVertexDef = mtl->GetPropagationFlags() & MTL_PROPAGATE_VERTEX_DEF; - bPropagateShaderParams = mtl->GetPropagationFlags() & MTL_PROPAGATE_SHADER_PARAMS; - bPropagateLayerPresets = mtl->GetPropagationFlags() & MTL_PROPAGATE_LAYER_PRESETS; - bPropagateShaderGenParams = mtl->GetPropagationFlags() & MTL_PROPAGATE_SHADER_GEN; -} - -void CMaterialUI::SetFromMaterial(CMaterial* mtlIn) -{ - QString shaderName = mtlIn->GetShaderName(); - if (!shaderName.isEmpty()) - { - // Capitalize first letter. - shaderName = shaderName[0].toUpper() + shaderName.mid(1); - } - - shader = shaderName; - - int mtlFlags = mtlIn->GetFlags(); - bNoShadow = (mtlFlags & MTL_FLAG_NOSHADOW); - bAdditive = (mtlFlags & MTL_FLAG_ADDITIVE); - bWire = (mtlFlags & MTL_FLAG_WIRE); - b2Sided = (mtlFlags & MTL_FLAG_2SIDED); - bScatter = (mtlFlags & MTL_FLAG_SCATTER); - bHideAfterBreaking = (mtlFlags & MTL_FLAG_HIDEONBREAK); - bFogVolumeShadingQualityHigh = (mtlFlags & MTL_FLAG_FOG_VOLUME_SHADING_QUALITY_HIGH); - bBlendTerrainColor = (mtlFlags & MTL_FLAG_BLEND_TERRAIN); - texUsageMask = mtlIn->GetTexmapUsageMask(); - - allowLayerActivation = mtlIn->LayerActivationAllowed(); - - // Detail, decal and custom textures are always active. - const uint32 nDefaultFlagsEFTT = (1 << EFTT_DETAIL_OVERLAY) | (1 << EFTT_DECAL_OVERLAY) | (1 << EFTT_CUSTOM) | (1 << EFTT_CUSTOM_SECONDARY); - texUsageMask |= nDefaultFlagsEFTT; - if ((texUsageMask & (1 << EFTT_NORMALS))) - { - texUsageMask |= 1 << EFTT_NORMALS; - } - - surfaceType = mtlIn->GetSurfaceTypeName(); - SetShaderResources(mtlIn->GetShaderResources(), true); - - // Propagate settings and properties to a sub material if edited - PropagateFromLinkedMaterial(mtlIn); - - // set each material layer - SMaterialLayerResources* pMtlLayerResources = mtlIn->GetMtlLayerResources(); - for (int l(0); l < MTL_LAYER_MAX_SLOTS; ++l) - { - materialLayers[l].shader = pMtlLayerResources[l].m_shaderName; - materialLayers[l].bNoDraw = pMtlLayerResources[l].m_nFlags & MTL_LAYER_USAGE_NODRAW; - materialLayers[l].bFadeOut = pMtlLayerResources[l].m_nFlags & MTL_LAYER_USAGE_FADEOUT; - } -} - -void CMaterialUI::SetToMaterial(CMaterial* mtl, int propagationFlags) -{ - int mtlFlags = mtl->GetFlags(); - - if (propagationFlags & MTL_PROPAGATE_ADVANCED) - { - if (bNoShadow) - { - mtlFlags |= MTL_FLAG_NOSHADOW; - } - else - { - mtlFlags &= ~MTL_FLAG_NOSHADOW; - } - } - - if (propagationFlags & MTL_PROPAGATE_OPACITY) - { - if (bAdditive) - { - mtlFlags |= MTL_FLAG_ADDITIVE; - } - else - { - mtlFlags &= ~MTL_FLAG_ADDITIVE; - } - } - - if (bWire) - { - mtlFlags |= MTL_FLAG_WIRE; - } - else - { - mtlFlags &= ~MTL_FLAG_WIRE; - } - - if (propagationFlags & MTL_PROPAGATE_ADVANCED) - { - if (b2Sided) - { - mtlFlags |= MTL_FLAG_2SIDED; - } - else - { - mtlFlags &= ~MTL_FLAG_2SIDED; - } - - if (bScatter) - { - mtlFlags |= MTL_FLAG_SCATTER; - } - else - { - mtlFlags &= ~MTL_FLAG_SCATTER; - } - - if (bHideAfterBreaking) - { - mtlFlags |= MTL_FLAG_HIDEONBREAK; - } - else - { - mtlFlags &= ~MTL_FLAG_HIDEONBREAK; - } - - if (bFogVolumeShadingQualityHigh) - { - mtlFlags |= MTL_FLAG_FOG_VOLUME_SHADING_QUALITY_HIGH; - } - else - { - mtlFlags &= ~MTL_FLAG_FOG_VOLUME_SHADING_QUALITY_HIGH; - } - - if (bBlendTerrainColor) - { - mtlFlags |= MTL_FLAG_BLEND_TERRAIN; - } - else - { - mtlFlags &= ~MTL_FLAG_BLEND_TERRAIN; - } - } - - mtl->SetFlags(mtlFlags); - - mtl->SetLayerActivation(allowLayerActivation); - - // set each material layer - if (propagationFlags & MTL_PROPAGATE_LAYER_PRESETS) - { - SMaterialLayerResources* pMtlLayerResources = mtl->GetMtlLayerResources(); - for (int l(0); l < MTL_LAYER_MAX_SLOTS; ++l) - { - if (pMtlLayerResources[l].m_shaderName != materialLayers[l].shader) - { - pMtlLayerResources[l].m_shaderName = materialLayers[l].shader; - pMtlLayerResources[l].m_bRegetPublicParams = true; - } - - if (materialLayers[l].bNoDraw) - { - pMtlLayerResources[l].m_nFlags |= MTL_LAYER_USAGE_NODRAW; - } - else - { - pMtlLayerResources[l].m_nFlags &= ~MTL_LAYER_USAGE_NODRAW; - } - - if (materialLayers[l].bFadeOut) - { - pMtlLayerResources[l].m_nFlags |= MTL_LAYER_USAGE_FADEOUT; - } - else - { - pMtlLayerResources[l].m_nFlags &= ~MTL_LAYER_USAGE_FADEOUT; - } - } - } - - if (propagationFlags & MTL_PROPAGATE_MATERIAL_SETTINGS) - { - mtl->SetSurfaceTypeName(surfaceType); - // If shader name is different reload shader. - mtl->SetShaderName(shader); - } - - GetShaderResources(mtl->GetShaderResources(), propagationFlags); -} - -void CMaterialUI::SetTextureNames(CMaterial* mtl) -{ - SInputShaderResources& sr = mtl->GetShaderResources(); - - for ( auto& iter : sr.m_TexturesResourcesMap ) - { - uint16 texId = iter.first; - if (!MaterialHelpers::IsAdjustableTexSlot((EEfResTextures)texId)) - { - continue; - } - - SEfResTexture* pTextureRes = &(iter.second); - textureVars[texId]->Set(pTextureRes->m_Name.c_str()); - } -} - -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -class CMtlPickCallback - : public IPickObjectCallback -{ -public: - CMtlPickCallback() { m_bActive = true; }; - //! Called when object picked. - virtual void OnPick(CBaseObject* picked) - { - m_bActive = false; - CMaterial* pMtl = picked->GetMaterial(); - if (pMtl) - { - GetIEditor()->OpenMaterialLibrary(pMtl); - } - delete this; - } - //! Called when pick mode canceled. - virtual void OnCancelPick() - { - m_bActive = false; - delete this; - } - //! Return true if specified object is pickable. - virtual bool OnPickFilter(CBaseObject* filterObject) - { - // Check if object have material. - if (filterObject->GetMaterial()) - { - return true; - } - else - { - return false; - } - } - static bool IsActive() { return m_bActive; }; -private: - static bool m_bActive; -}; -bool CMtlPickCallback::m_bActive = false; -////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////// -// CMaterialDialog implementation. -////////////////////////////////////////////////////////////////////////// -CMaterialDialog::CMaterialDialog(QWidget* parent /* = 0 */) - : QMainWindow(parent) - , m_wndMtlBrowser(0) -{ - m_propsCtrl = new TwoColumnPropertyControl; - m_propsCtrl->Setup(true, 150); - m_propsCtrl->SetSavedStateKey("MaterialDialog"); - m_propsCtrl->setMinimumWidth(460); - - m_placeHolderLabel = new QLabel(tr("Select a material in the Material Editor hierarchy to view properties")); - m_placeHolderLabel->setMinimumHeight(250); - m_placeHolderLabel->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); - - SEventLog toolEvent(MATERIAL_EDITOR_NAME, "", MATERIAL_EDITOR_VER); - GetIEditor()->GetSettingsManager()->RegisterEvent(toolEvent); - - m_pMatManager = GetIEditor()->GetMaterialManager(); - - m_shaderGenParamsVars = 0; - - m_textureSlots = 0; - - m_pMaterialUI = new CMaterialUI; - - m_bForceReloadPropsCtrl = true; - - m_pMaterialImageListModel.reset(new QMaterialImageListModel); - - m_pMaterialImageListCtrl.reset(new CMaterialImageListCtrl); - m_pMaterialImageListCtrl->setModel(m_pMaterialImageListModel.data()); - - // Immediately create dialog. - OnInitDialog(); - - GetIEditor()->RegisterNotifyListener(this); - m_pMatManager->AddListener(this); - m_propsCtrl->SetUndoCallback(AZStd::bind(&CMaterialDialog::OnUndo, this, AZStd::placeholders::_1)); - m_propsCtrl->SetStoreUndoByItems(false); - - // KDAB_TODO: hack until we have proper signal coming from the IEDitor - connect(QCoreApplication::eventDispatcher(), &QAbstractEventDispatcher::awake, this, &CMaterialDialog::UpdateActions); -} - -////////////////////////////////////////////////////////////////////////// -CMaterialDialog::~CMaterialDialog() -{ - m_pMatManager->RemoveListener(this); - GetIEditor()->UnregisterNotifyListener(this); - m_wndMtlBrowser->SetImageListCtrl(NULL); - - delete m_pMaterialUI; - m_vars = 0; - m_publicVars = 0; - m_shaderGenParamsVars = 0; - m_textureSlots = 0; - - m_propsCtrl->ClearUndoCallback(); - m_propsCtrl->RemoveAllItems(); - - SEventLog toolEvent(MATERIAL_EDITOR_NAME, "", MATERIAL_EDITOR_VER); - GetIEditor()->GetSettingsManager()->UnregisterEvent(toolEvent); -} - -BOOL CMaterialDialog::OnInitDialog() -{ - setWindowTitle(tr(LyViewPane::MaterialEditor)); - if (gEnv->p3DEngine) - { - ISurfaceTypeManager* pSurfaceTypeManager = gEnv->p3DEngine->GetMaterialManager()->GetSurfaceTypeManager(); - if (pSurfaceTypeManager) - { - pSurfaceTypeManager->LoadSurfaceTypes(); - } - } - - InitToolbar(IDR_DB_MATERIAL_BAR); - - setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea); - - // hide menu bar - menuBar()->hide(); - - // Create status bar. - { - m_statusBar = this->statusBar(); - m_statusBar->setSizeGripEnabled(false); - } - - QSplitter* centralWidget = new QSplitter(Qt::Horizontal, this); - setCentralWidget(centralWidget); - - QSplitter* rightWidget = new QSplitter(Qt::Vertical, centralWidget); - centralWidget->addWidget(rightWidget); - - rightWidget->addWidget(m_propsCtrl); - - m_vars = m_pMaterialUI->CreateVars(); - m_propsCtrl->AddVarBlock(m_vars); - - m_propsCtrl->setEnabled(false); - m_propsCtrl->hide(); - - ////////////////////////////////////////////////////////////////////////// - // Preview Pane - ////////////////////////////////////////////////////////////////////////// - { - rightWidget->insertWidget(0, m_pMaterialImageListCtrl.data()); - - int h = m_pMaterialImageListCtrl->sizeHint().height(); - m_pMaterialImageListCtrl->hide(); - rightWidget->setSizes({h, height() - h }); - } - - rightWidget->addWidget(m_placeHolderLabel); - m_placeHolderLabel->setAlignment(Qt::AlignCenter); - - ////////////////////////////////////////////////////////////////////////// - // Browser Pane - ////////////////////////////////////////////////////////////////////////// - if (!m_wndMtlBrowser) - { - m_wndMtlBrowser = new MaterialBrowserWidget(this); - m_wndMtlBrowser->SetListener(this); - m_wndMtlBrowser->SetImageListCtrl(m_pMaterialImageListCtrl.data()); - //m_wndMtlBrowser->resize(width() / 3, height()); - - centralWidget->insertWidget(0, m_wndMtlBrowser); - - int w = m_wndMtlBrowser->sizeHint().height(); - centralWidget->setSizes({ w, width() - w }); - centralWidget->setStretchFactor(0, 0); - centralWidget->setStretchFactor(1, 1); - - // Start the background processing of material files after the widget has been initialized - m_wndMtlBrowser->StartRecordUpdateJobs(); - } - - // Set the image list control to give stretch priority to the other widgets. This is both to avoid resizing the - // image list control when the window is resized and to avoid an issue with the QSplitter resizing the image list - // control when enabling/disabling the other two widgets. - const int materialImageControlIndex = 0; - const int materialImagePropertiesControlIndex = 1; - const int materialPlaceholderLabelIndex = 2; - rightWidget->setStretchFactor(materialImageControlIndex, 0); - rightWidget->setStretchFactor(materialImagePropertiesControlIndex, 1); - rightWidget->setStretchFactor(materialPlaceholderLabelIndex, 1); - - resize(1200, 800); - - return true; // return true unless you set the focus to a control - // EXCEPTION: OCX Property Pages should return FALSE -} - -void CMaterialDialog::closeEvent(QCloseEvent *ev) -{ - // We call save before running any dtors, as it might trigger a modal dialog / nested event loop - // asking to overwrite files, and that causes a crash - m_wndMtlBrowser->SaveCurrentMaterial(); - ev->accept(); // All good, dialog will close now -} - -////////////////////////////////////////////////////////////////////////// -// Create the toolbar -void CMaterialDialog::InitToolbar([[maybe_unused]] UINT nToolbarResID) -{ - // detect if the new viewport interaction model is enabled and give - // feedback to the user that certain operations are not yet compatible - const bool newViewportInteractionModelEnabled = GetIEditor()->IsNewViewportInteractionModelEnabled(); - const char* const newViewportInteractionModelWarning = - "This option is currently not available with the new Viewport Interaction Model enabled"; - - m_toolbar = addToolBar(tr("Material ToolBar")); - m_toolbar->setFloatable(false); - - QIcon assignselectionIcon; - assignselectionIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_assignselection_normal.png" }, QIcon::Normal); - assignselectionIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_assignselection_active.png" }, QIcon::Active); - assignselectionIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_assignselection_disabled.png" }, QIcon::Disabled); - - m_assignToSelectionAction = - m_toolbar->addAction(assignselectionIcon, - newViewportInteractionModelEnabled - ? tr(newViewportInteractionModelWarning) - : tr("Assign Item to Selected Objects"), - this, SLOT(OnAssignMaterialToSelection())); - - QIcon resetIcon; - resetIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_reset_normal.png" }, QIcon::Normal); - resetIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_reset_active.png" }, QIcon::Active); - resetIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_reset_disabled.png" }, QIcon::Disabled); - - m_resetAction = - m_toolbar->addAction(resetIcon, - newViewportInteractionModelEnabled - ? tr(newViewportInteractionModelWarning) - : tr("Reset Material on Selection to Default"), - this, SLOT(OnResetMaterialOnSelection())); - - QIcon getfromselectionIcon; - getfromselectionIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_getfromselection_normal.png" }, QIcon::Normal); - getfromselectionIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_getfromselection_active.png" }, QIcon::Active); - getfromselectionIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_getfromselection_disabled.png" }, QIcon::Disabled); - - m_getFromSelectionAction = - m_toolbar->addAction( - getfromselectionIcon, - newViewportInteractionModelEnabled - ? tr(newViewportInteractionModelWarning) - : tr("Get Properties From Selection"), - this, SLOT(OnGetMaterialFromSelection())); - - QIcon pickIcon; - pickIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_pick_normal.png" }, QIcon::Normal); - pickIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_pick_active.png" }, QIcon::Active); - pickIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_pick_disabled.png" }, QIcon::Disabled); - - m_pickAction = m_toolbar->addAction( - pickIcon, - newViewportInteractionModelEnabled - ? tr(newViewportInteractionModelWarning) - : tr("Pick Material from Object"), - this, SLOT(OnPickMtl())); - - m_pickAction->setCheckable(true); - - if (newViewportInteractionModelEnabled) - { - m_pickAction->setEnabled(false); - } - - QAction* sepAction = m_toolbar->addSeparator(); - m_filterTypeSelection = new QComboBox(this); - m_filterTypeSelection->addItem(tr("All Materials")); - m_filterTypeSelection->addItem(tr("Used In Level")); - m_filterTypeSelection->setMinimumWidth(150); - QAction* cbAction = m_toolbar->addWidget(m_filterTypeSelection); - m_filterTypeSelection->setCurrentIndex(0); - connect(m_filterTypeSelection, SIGNAL(currentIndexChanged(int)), this, SLOT(OnChangedBrowserListType(int))); - m_toolbar->addSeparator(); - QIcon addIcon; - addIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_add_normal.png" }, QIcon::Normal); - addIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_add_active.png" }, QIcon::Active); - addIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_add_disabled.png" }, QIcon::Disabled); - m_addAction = m_toolbar->addAction(addIcon, tr("Add New Item"), this, SLOT(OnAddItem())); - QIcon saveIcon; - saveIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_save_normal.png" }, QIcon::Normal); - saveIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_save_active.png" }, QIcon::Active); - saveIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_save_disabled.png" }, QIcon::Disabled); - m_saveAction = m_toolbar->addAction(saveIcon, tr("Save Item"), this, SLOT(OnSaveItem())); - QIcon removeIcon; - removeIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_remove_normal.png" }, QIcon::Normal); - removeIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_remove_active.png" }, QIcon::Active); - removeIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_remove_disabled.png" }, QIcon::Disabled); - m_removeAction = m_toolbar->addAction(removeIcon, tr("Remove Item"), this, SLOT(OnDeleteItem())); - m_toolbar->addSeparator(); - QIcon copyIcon; - copyIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_copy_normal.png" }, QIcon::Normal); - copyIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_copy_active.png" }, QIcon::Active); - copyIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_copy_disabled.png" }, QIcon::Disabled); - m_copyAction = m_toolbar->addAction(copyIcon, tr("Copy Material"), this, SLOT(OnCopy())); - QIcon pasteIcon; - pasteIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_paste_normal.png" }, QIcon::Normal); - pasteIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_paste_active.png" }, QIcon::Active); - pasteIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_paste_disabled.png" }, QIcon::Disabled); - m_pasteAction = m_toolbar->addAction(pasteIcon, tr("Paste Material"), this, SLOT(OnPaste())); - m_toolbar->addSeparator(); - QIcon previewIcon; - previewIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_preview_normal.png" }, QIcon::Normal); - previewIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_preview_active.png" }, QIcon::Active); - previewIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_preview_disabled.png" }, QIcon::Disabled); - m_previewAction = m_toolbar->addAction(previewIcon, tr("Open Large Material Preview Window"), this, SLOT(OnMaterialPreview())); - m_toolbar->addSeparator(); - QIcon resetViewportIcon; - resetViewportIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_reset_viewport_normal.png" }, QIcon::Normal); - resetViewportIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_reset_viewport_active.png" }, QIcon::Active); - resetViewportIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_reset_viewport_disabled.png" }, QIcon::Disabled); - m_resetViewporAction = m_toolbar->addAction(resetViewportIcon, tr("Reset Material Viewport"), this, SLOT(OnResetMaterialViewport())); - - UpdateActions(); - setContextMenuPolicy(Qt::ContextMenuPolicy::NoContextMenu); - - connect(m_toolbar, &QToolBar::orientationChanged, m_toolbar, [=](Qt::Orientation orientation) - { - if (orientation == Qt::Vertical) - { - m_toolbar->removeAction(cbAction); - } - else - { - m_toolbar->insertAction(sepAction, cbAction); - } - }); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::ReloadItems() -{ - UpdateActions(); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnAddItem() -{ - m_wndMtlBrowser->OnAddNewMaterial(); - UpdateActions(); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnSaveItem() -{ - CMaterial* pMtl = GetSelectedMaterial(); - if (pMtl) - { - CMaterial* parent = pMtl->GetParent(); - - if (!pMtl->Save(false)) - { - if (!parent) - { - QMessageBox::warning(this, QString(), tr("The material file cannot be saved. The file is located in a PAK archive or access is denied")); - } - } - - if (parent) - { - //The reload function will clear all the sub-material references, and re-create them. - //Thus pMtl will point to old sub-material that should be deleted instead. - //So we need to set m_pMatManager's current material to the new one. - int index = -1; - - //Find the corresponding sub-material and record its index - for (int i = 0; i < parent->GetSubMaterialCount(); i++) - { - if (parent->GetSubMaterial(i) == pMtl) - { - index = i; - break; - } - } - pMtl->Reload(); - - if (index >= 0 && index < parent->GetSubMaterialCount()) - { - m_pMatManager->SetCurrentMaterial(parent->GetSubMaterial(index)); - } - else //If we can't find the sub-material, use parent instead - { - m_pMatManager->SetCurrentMaterial(parent); - } - } - else - { - pMtl->Reload(); - } - - } - UpdateActions(); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnDeleteItem() -{ - m_wndMtlBrowser->DeleteItem(); - UpdateActions(); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::SetMaterialVars([[maybe_unused]] CMaterial* mtl) -{ -} - - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::UpdateShaderParamsUI(CMaterial* pMtl) -{ - ////////////////////////////////////////////////////////////////////////// - // Shader Gen Mask. - ////////////////////////////////////////////////////////////////////////// - IVariable* shaderGenParamsContainerVar = m_pMaterialUI->tableShaderGenParams.GetVar(); - if (m_propsCtrl->FindVariable(shaderGenParamsContainerVar)) - { - m_shaderGenParamsVars = pMtl->GetShaderGenParamsVars(); - m_propsCtrl->ReplaceVarBlock(shaderGenParamsContainerVar, m_shaderGenParamsVars); - } - - ////////////////////////////////////////////////////////////////////////// - // Shader Public Params. - ////////////////////////////////////////////////////////////////////////// - IVariable* publicVars = m_pMaterialUI->tableShaderParams.GetVar(); - if (m_propsCtrl->FindVariable(publicVars)) - { - bool bNeedUpdateMaterialFromUI = false; - CVarBlockPtr pPublicVars = pMtl->GetPublicVars(pMtl->GetShaderResources()); - if (m_publicVars && pPublicVars) - { - // list of shader parameters depends on list of shader generation parameters - // we need to keep values of vars which not presented in every combinations, - // but probably adjusted by user, to keep his work. - // m_excludedPublicVars is used for these values - if (m_excludedPublicVars.pMaterial) - { - if (m_excludedPublicVars.pMaterial != pMtl) - { - m_excludedPublicVars.vars.DeleteAllVariables(); - } - else - { - // find new presented vars in pPublicVars, which not existed in old m_publicVars - for (int j = pPublicVars->GetNumVariables() - 1; j >= 0; --j) - { - IVariable* pVar = pPublicVars->GetVariable(j); - bool isVarExist = false; - for (int i = m_publicVars->GetNumVariables() - 1; i >= 0; --i) - { - IVariable* pOldVar = m_publicVars->GetVariable(i); - if (!QString::compare(pOldVar->GetName(), pVar->GetName())) - { - isVarExist = true; - break; - } - } - if (!isVarExist) // var exist in new pPublicVars block, but not in previous (m_publicVars) - { - // try to find value for this var inside "excluded vars" collection - for (int i = m_excludedPublicVars.vars.GetNumVariables() - 1; i >= 0; --i) - { - IVariable* pStoredVar = m_excludedPublicVars.vars.GetVariable(i); - if (!QString::compare(pStoredVar->GetName(), pVar->GetName()) && pVar->GetDataType() == pStoredVar->GetDataType()) - { - pVar->CopyValue(pStoredVar); - m_excludedPublicVars.vars.DeleteVariable(pStoredVar); - bNeedUpdateMaterialFromUI = true; - break; - } - } - } - } - } - } - // We only want to collect vars if the old and new block are part of the same - // material, otherwise we are storing state from one material to an other. - if (m_excludedPublicVars.pMaterial == pMtl) - { - // collect excluded vars from old block (m_publicVars) - // which exist in m_publicVars but not in a new generated pPublicVars block - for (int i = m_publicVars->GetNumVariables() - 1; i >= 0; --i) - { - IVariable* pOldVar = m_publicVars->GetVariable(i); - bool isVarExist = false; - for (int j = pPublicVars->GetNumVariables() - 1; j >= 0; --j) - { - IVariable* pVar = pPublicVars->GetVariable(j); - if (!QString::compare(pOldVar->GetName(), pVar->GetName())) - { - isVarExist = true; - break; - } - } - if (!isVarExist) - { - m_excludedPublicVars.vars.AddVariable(pOldVar->Clone(false)); - } - } - } - m_excludedPublicVars.pMaterial = pMtl; - } - - m_publicVars = pPublicVars; - if (m_publicVars) - { - m_publicVars->Sort(); - } - - m_propsCtrl->ReplaceVarBlock(publicVars, m_publicVars); - - if (m_publicVars && bNeedUpdateMaterialFromUI) - { - pMtl->SetPublicVars(m_publicVars, pMtl); - } - } - IVariable* textureSlotsVar = m_pMaterialUI->tableTexture.GetVar(); - if (m_propsCtrl->FindVariable(textureSlotsVar)) - { - m_textureSlots = pMtl->UpdateTextureNames(m_pMaterialUI->textureVars); - m_propsCtrl->ReplaceVarBlock(textureSlotsVar, m_textureSlots); - } - - ////////////////////////////////////////////////////////////////////////// -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::SelectItem(CBaseLibraryItem* item, bool bForceReload) -{ - static bool bNoRecursiveSelect = false; - if (bNoRecursiveSelect) - { - return; - } - - bool bChanged = item != m_pPrevSelectedItem || bForceReload; - - if (!bChanged) - { - return; - } - - m_pPrevSelectedItem = item; - - // Empty preview control. - //m_previewCtrl.SetEntity(0); - m_pMatManager->SetCurrentMaterial((CMaterial*)item); - - if (!item) - { - m_statusBar->clearMessage(); - m_propsCtrl->setEnabled(false); - m_propsCtrl->hide(); - m_pMaterialImageListCtrl->hide(); - m_placeHolderLabel->setText(tr("Select a material in the Material Editor hierarchy to view properties")); - m_placeHolderLabel->show(); - return; - } - - // Render preview geometry with current material - CMaterial* mtl = (CMaterial*)item; - - QString statusText; - if (mtl->IsPureChild() && mtl->GetParent()) - { - statusText = mtl->GetParent()->GetName() + " [" + mtl->GetName() + "]"; - } - else - { - statusText = mtl->GetName(); - } - - - if (mtl->IsDummy()) - { - statusText += " (Not Found)"; - } - else if (!mtl->CanModify()) - { - statusText += " (Read Only)"; - } - m_statusBar->showMessage(statusText); - - if (mtl->IsMultiSubMaterial()) - { - // Cannot edit it. - m_propsCtrl->setEnabled(false); - m_propsCtrl->EnableUpdateCallback(false); - m_propsCtrl->hide(); - - m_placeHolderLabel->setText(tr("Select a material to view properties")); - m_placeHolderLabel->show(); - - //return; - } - else - { - m_propsCtrl->setEnabled(true); - m_propsCtrl->EnableUpdateCallback(false); - m_propsCtrl->show(); - m_placeHolderLabel->hide(); - } - m_pMaterialImageListCtrl->show(); - - if (m_bForceReloadPropsCtrl) - { - // CPropertyCtrlEx skip OnPaint and another methods for redraw - // OnSize method is forced to invalidate control for redraw - m_propsCtrl->InvalidateCtrl(); - m_bForceReloadPropsCtrl = false; - } - - UpdatePreview(); - - // Update variables. - m_propsCtrl->EnableUpdateCallback(false); - m_pMaterialUI->SetFromMaterial(mtl); - m_propsCtrl->EnableUpdateCallback(true); - - mtl->SetShaderParamPublicScript(); - - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // Set Shader Gen Params. - ////////////////////////////////////////////////////////////////////////// - UpdateShaderParamsUI(mtl); - ////////////////////////////////////////////////////////////////////////// - - m_propsCtrl->SetUpdateCallback(AZStd::bind(&CMaterialDialog::OnUpdateProperties, this, AZStd::placeholders::_1)); - m_propsCtrl->EnableUpdateCallback(true); - - if (mtl->IsDummy()) - { - m_propsCtrl->setEnabled(false); - } - else - { - m_propsCtrl->setEnabled(true); - m_propsCtrl->SetGrayed(!mtl->CanModify()); - } - if (mtl) - { - m_pMaterialImageListCtrl->SelectMaterial(mtl); - } -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnUpdateProperties(IVariable* var) -{ - CMaterial* mtl = GetSelectedMaterial(); - if (!mtl) - { - return; - } - - bool bShaderChanged = (m_pMaterialUI->shader == var); - bool bShaderGenMaskChanged = false; - if (m_shaderGenParamsVars) - { - bShaderGenMaskChanged = m_shaderGenParamsVars->IsContainsVariable(var); - } - - bool bMtlLayersChanged = false; - int nCurrLayer = -1; - - // Check for shader changes - for (int l(0); l < MTL_LAYER_MAX_SLOTS; ++l) - { - if ((m_pMaterialUI->materialLayers[l].shader == var)) - { - bMtlLayersChanged = true; - nCurrLayer = l; - break; - } - } - - ////////////////////////////////////////////////////////////////////////// - // Assign modified Shader Gen Params to shader. - ////////////////////////////////////////////////////////////////////////// - if (bShaderGenMaskChanged) - { - mtl->SetShaderGenParamsVars(m_shaderGenParamsVars); - } - ////////////////////////////////////////////////////////////////////////// - // Invalidate material and save changes. - //m_pMatManager->MarkMaterialAsModified(mtl); - // - - mtl->RecordUndo("Material parameter", true); - m_pMaterialUI->SetToMaterial(mtl); - mtl->Update(); - - // - ////////////////////////////////////////////////////////////////////////// - // Assign new public vars to material. - // Must be after material update. - ////////////////////////////////////////////////////////////////////////// - - GetIEditor()->SuspendUndo(); - - if (m_publicVars != NULL && !bShaderChanged) - { - mtl->SetPublicVars(m_publicVars, mtl); - } - - /* - bool bUpdateLayers = false; - for(int l(0); l < MTL_LAYER_MAX_SLOTS; ++l) - { - if ( m_varsMtlLayersShaderParams[l] != NULL && l != nCurrLayer) - { - SMaterialLayerResources *pCurrResource = pTemplateMtl ? &pTemplateMtl->GetMtlLayerResources()[l] : &pMtlLayerResources[l]; - SShaderItem &pCurrShaderItem = pCurrResource->m_pMatLayer->GetShaderItem(); - CVarBlock* pVarBlock = pTemplateMtl ? pTemplateMtl->GetPublicVars( pCurrResource->m_shaderResources ) : m_varsMtlLayersShaderParams[l]; - mtl->SetPublicVars( pVarBlock, pCurrResource->m_shaderResources, pCurrShaderItem.m_pShaderResources, pCurrShaderItem.m_pShader); - bUpdateLayers = true; - } - } - */ - //if( bUpdateLayers ) - { - mtl->UpdateMaterialLayers(); - } - - m_pMaterialUI->PropagateToLinkedMaterial(mtl, m_shaderGenParamsVars); - if (var) - { - GetIEditor()->GetMaterialManager()->HighlightedMaterialChanged(mtl); - m_pMaterialUI->NotifyObjectsAboutMaterialChange(var); - } - - GetIEditor()->ResumeUndo(); - - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - if (bShaderChanged || bShaderGenMaskChanged || bMtlLayersChanged) - { - m_pMaterialUI->SetFromMaterial(mtl); - } - //m_pMaterialUI->SetTextureNames( mtl ); - - UpdatePreview(); - - // When shader changed. - if (bShaderChanged || bShaderGenMaskChanged || bMtlLayersChanged) - { - ////////////////////////////////////////////////////////////////////////// - // Set material layers params - ////////////////////////////////////////////////////////////////////////// - /* - if( bMtlLayersChanged) // only update changed shader in material layers - { - SMaterialLayerResources *pCurrResource = &pMtlLayerResources[nCurrLayer]; - - // delete old property item - if ( m_varsMtlLayersShaderParamsItems[nCurrLayer] ) - { - m_propsCtrl->DeleteItem( m_varsMtlLayersShaderParamsItems[nCurrLayer] ); - m_varsMtlLayersShaderParamsItems[nCurrLayer] = 0; - } - - m_varsMtlLayersShaderParams[nCurrLayer] = mtl->GetPublicVars( pCurrResource->m_shaderResources ); - - if ( m_varsMtlLayersShaderParams[nCurrLayer] ) - { - m_varsMtlLayersShaderParamsItems[nCurrLayer] = m_propsCtrl->AddVarBlockAt( m_varsMtlLayersShaderParams[nCurrLayer], "Shader Params", m_varsMtlLayersShaderItems[nCurrLayer] ); - } - } - */ - - UpdateShaderParamsUI(mtl); - } - - if (bShaderGenMaskChanged || bShaderChanged || bMtlLayersChanged) - { - m_propsCtrl->InvalidateCtrl(); - } - - m_pMaterialImageListModel->InvalidateMaterial(mtl); -} - -////////////////////////////////////////////////////////////////////////// -CMaterial* CMaterialDialog::GetSelectedMaterial() -{ - CBaseLibraryItem* pItem = m_pMatManager->GetCurrentMaterial(); - return (CMaterial*)pItem; -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnAssignMaterialToSelection() -{ - CUndo undo("Assign Material To Selection"); - GetIEditor()->GetMaterialManager()->Command_AssignToSelection(); - UpdateActions(); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnSelectAssignedObjects() -{ - CUndo undo("Select Objects With Current Material"); - GetIEditor()->GetMaterialManager()->Command_SelectAssignedObjects(); - UpdateActions(); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnResetMaterialOnSelection() -{ - GetIEditor()->GetMaterialManager()->Command_ResetSelection(); - UpdateActions(); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnGetMaterialFromSelection() -{ - GetIEditor()->GetMaterialManager()->Command_SelectFromObject(); - UpdateActions(); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::DeleteItem([[maybe_unused]] CBaseLibraryItem* pItem) -{ - m_wndMtlBrowser->DeleteItem(); - UpdateActions(); -} - -////////////////////////////////////////////////////////////////////////// - -void CMaterialDialog::UpdateActions() -{ - if (isHidden()) - { - return; - } - - CMaterial* mtl = GetSelectedMaterial(); - if (mtl && mtl->CanModify(false)) - { - m_saveAction->setEnabled(true); - } - else - { - m_saveAction->setEnabled(false); - } - - if (GetIEditor()->GetEditTool() && GetIEditor()->GetEditTool()->GetClassDesc() && QString::compare(GetIEditor()->GetEditTool()->GetClassDesc()->ClassName(), "EditTool.PickMaterial") == 0) - { - m_pickAction->setChecked(true); - } - else - { - m_pickAction->setChecked(false); - } - - if (mtl && (!GetIEditor()->GetSelection()->IsEmpty() || GetIEditor()->IsInPreviewMode())) - { - m_assignToSelectionAction->setEnabled(true); - } - else - { - m_assignToSelectionAction->setEnabled(false); - } - - if (!GetIEditor()->GetSelection()->IsEmpty() || GetIEditor()->IsInPreviewMode()) - { - m_resetAction->setEnabled(true); - m_getFromSelectionAction->setEnabled(true); - } - else - { - m_resetAction->setEnabled(false); - m_getFromSelectionAction->setEnabled(false); - } -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnPickMtl() -{ - if (GetIEditor()->GetEditTool() && QString::compare(GetIEditor()->GetEditTool()->GetClassDesc()->ClassName(), "EditTool.PickMaterial") == 0) - { - GetIEditor()->SetEditTool(NULL); - } - else - { - GetIEditor()->SetEditTool("EditTool.PickMaterial"); - } - UpdateActions(); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnCopy() -{ - m_wndMtlBrowser->OnCopy(); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnPaste() -{ - m_wndMtlBrowser->OnPaste(); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnMaterialPreview() -{ - if (!m_pPreviewDlg) - { - m_pPreviewDlg = new CMatEditPreviewDlg(this); - m_pPreviewDlg->show(); - } -} - -////////////////////////////////////////////////////////////////////////// -bool CMaterialDialog::SetItemName(CBaseLibraryItem* item, const QString& groupName, const QString& itemName) -{ - assert(item); - // Make prototype name. - QString fullName = groupName + "/" + itemName; - IDataBaseItem* pOtherItem = m_pMatManager->FindItemByName(fullName); - if (pOtherItem && pOtherItem != item) - { - // Ensure uniqness of name. - Warning("Duplicate Item Name %s", fullName.toUtf8().data()); - return false; - } - else - { - item->SetName(fullName); - } - return true; -} - - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnBrowserSelectItem(IDataBaseItem* pItem, bool bForce) -{ - SelectItem((CBaseLibraryItem*)pItem, bForce); - UpdateActions(); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::UpdatePreview() -{ -}; - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnChangedBrowserListType(int sel) -{ - m_wndMtlBrowser->ShowOnlyLevelMaterials(sel == 1); - m_pMatManager->SetCurrentMaterial(0); - UpdateActions(); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnUndo(IVariable* pVar) -{ - if (!m_pMatManager->GetCurrentMaterial()) - { - return; - } - - QString undoName; - if (pVar) - { - undoName = tr("%1 modified").arg(pVar->GetName()); - } - else - { - undoName = tr("Material parameter was modified"); - } - - if (!CUndo::IsRecording()) - { - if (!CUndo::IsSuspended()) - { - CUndo undo(undoName.toUtf8().data()); - m_pMatManager->GetCurrentMaterial()->RecordUndo(undoName.toUtf8().data(), true); - } - } - UpdateActions(); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnDataBaseItemEvent(IDataBaseItem* pItem, EDataBaseItemEvent event) -{ - switch (event) - { - case EDB_ITEM_EVENT_UPDATE_PROPERTIES: - if (pItem && pItem == m_pMatManager->GetCurrentMaterial()) - { - SelectItem(m_pMatManager->GetCurrentMaterial(), true); - } - break; - } -} - -// If an object is selected or de-selected, update the available actions in the Material Editor toolbar -void CMaterialDialog::OnEditorNotifyEvent(EEditorNotifyEvent event) -{ - switch (event) - { - case eNotify_OnSelectionChange: - UpdateActions(); - break; - case eNotify_OnCloseScene: - case eNotify_OnEndNewScene: - case eNotify_OnEndSceneOpen: - m_filterTypeSelection->setCurrentIndex(0); - break; - } -} - -void CMaterialDialog::OnResetMaterialViewport() -{ - m_pMaterialImageListCtrl->LoadModel(); -} - -#include diff --git a/Code/Sandbox/Editor/Material/MaterialDialog.h b/Code/Sandbox/Editor/Material/MaterialDialog.h deleted file mode 100644 index 48e68e2322..0000000000 --- a/Code/Sandbox/Editor/Material/MaterialDialog.h +++ /dev/null @@ -1,176 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -// Original file Copyright Crytek GMBH or its affiliates, used under license. - -#pragma once - -#if !defined(Q_MOC_RUN) -#include "MaterialBrowser.h" - -#include -#include -#include -#endif - -static const char* MATERIAL_EDITOR_NAME = "Material Editor"; -static const char* MATERIAL_EDITOR_VER = "1.00"; - - -class QComboBox; -class QLabel; - -class CMaterial; -class CMaterialManager; -class CMatEditPreviewDlg; -class CMaterialSender; -class CMaterialImageListCtrl; -class QMaterialImageListModel; -class TwoColumnPropertyControl; - -/** Dialog which hosts entity prototype library. -*/ - - -struct SMaterialExcludedVars -{ - CMaterial* pMaterial; - CVarBlock vars; - - SMaterialExcludedVars() - : pMaterial(nullptr) - { - } -}; - - -class CMaterialDialog - : public QMainWindow - , public IMaterialBrowserListener - , public IDataBaseManagerListener - , public IEditorNotifyListener -{ - Q_OBJECT -public: - CMaterialDialog(QWidget* parent = 0); - ~CMaterialDialog(); - - static void RegisterViewClass(); - static const GUID& GetClassID(); - -public slots: - void OnAssignMaterialToSelection(); - void OnResetMaterialOnSelection(); - void OnGetMaterialFromSelection(); - -protected: - BOOL OnInitDialog(); - void closeEvent(QCloseEvent *ev) override; - -protected slots: - void OnAddItem(); - void OnDeleteItem(); - void OnSaveItem(); - void OnPickMtl(); - void OnCopy(); - void OnPaste(); - void OnMaterialPreview(); - void OnSelectAssignedObjects(); - void OnChangedBrowserListType(int); - void OnResetMaterialViewport(); - - void UpdateActions(); - -protected: - ////////////////////////////////////////////////////////////////////////// - // Some functions can be overriden to modify standart functionality. - ////////////////////////////////////////////////////////////////////////// - virtual void InitToolbar(UINT nToolbarResID); - - virtual void SelectItem(CBaseLibraryItem* item, bool bForceReload = false); - virtual void DeleteItem(CBaseLibraryItem* pItem); - virtual bool SetItemName(CBaseLibraryItem* item, const QString& groupName, const QString& itemName); - virtual void ReloadItems(); - - ////////////////////////////////////////////////////////////////////////// - // IMaterialBrowserListener implementation. - ////////////////////////////////////////////////////////////////////////// - virtual void OnBrowserSelectItem(IDataBaseItem* pItem, bool bForce); - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // IDataBaseManagerListener implementation. - ////////////////////////////////////////////////////////////////////////// - virtual void OnDataBaseItemEvent(IDataBaseItem* pItem, EDataBaseItemEvent event); - ////////////////////////////////////////////////////////////////////////// - - // IEditorNotifyListener implementation. - virtual void OnEditorNotifyEvent(EEditorNotifyEvent event); - - ////////////////////////////////////////////////////////////////////////// - CMaterial* GetSelectedMaterial(); - void OnUpdateProperties(IVariable* var); - void OnUndo(IVariable* pVar); - - void UpdateShaderParamsUI(CMaterial* pMtl); - - void UpdatePreview(); - - //void SetTextureVars( CVariableArray *texVar,CMaterial *mtl,int id,const CString &name ); - void SetMaterialVars(CMaterial* mtl); - - MaterialBrowserWidget* m_wndMtlBrowser; - - QStatusBar* m_statusBar; - //CXTCaption m_wndCaption; - - TwoColumnPropertyControl* m_propsCtrl; - bool m_bForceReloadPropsCtrl; - - QLabel* m_placeHolderLabel; - - CBaseLibraryItem* m_pPrevSelectedItem; - - // Material manager. - CMaterialManager* m_pMatManager; - - CVarBlockPtr m_vars; - CVarBlockPtr m_publicVars; - - // collection of excluded vars from m_publicVars for remembering values - // when updating shader params - SMaterialExcludedVars m_excludedPublicVars; - - CVarBlockPtr m_shaderGenParamsVars; - CVarBlockPtr m_textureSlots; - - class CMaterialUI* m_pMaterialUI; - - QPointer m_pPreviewDlg; - - QScopedPointer m_pMaterialImageListCtrl; - QScopedPointer m_pMaterialImageListModel; - - QToolBar* m_toolbar; - QComboBox* m_filterTypeSelection; - QAction* m_addAction; - QAction* m_assignToSelectionAction; - QAction* m_copyAction; - QAction* m_getFromSelectionAction; - QAction* m_pasteAction; - QAction* m_pickAction; - QAction* m_previewAction; - QAction* m_removeAction; - QAction* m_resetAction; - QAction* m_saveAction; - QAction* m_resetViewporAction; -}; - diff --git a/Code/Sandbox/Editor/Material/MaterialDialog.qrc b/Code/Sandbox/Editor/Material/MaterialDialog.qrc index 43bfbd6ea0..c99e5b052a 100644 --- a/Code/Sandbox/Editor/Material/MaterialDialog.qrc +++ b/Code/Sandbox/Editor/Material/MaterialDialog.qrc @@ -1,39 +1,4 @@ - - images/materialdialog_add_disabled.png - images/materialdialog_copy_disabled.png - images/materialdialog_paste_disabled.png - images/materialdialog_preview_disabled.png - images/materialdialog_remove_disabled.png - images/materialdialog_save_disabled.png - images/materialdialog_assignselection_disabled.png - images/materialdialog_getfromselection_disabled.png - images/materialdialog_pick_disabled.png - images/materialdialog_reset_disabled.png - images/materialdialog_assignselection_active.png - images/materialdialog_assignselection_normal.png - images/materialdialog_add_active.png - images/materialdialog_add_normal.png - images/materialdialog_copy_active.png - images/materialdialog_copy_normal.png - images/materialdialog_getfromselection_active.png - images/materialdialog_getfromselection_normal.png - images/materialdialog_paste_active.png - images/materialdialog_paste_normal.png - images/materialdialog_pick_active.png - images/materialdialog_pick_normal.png - images/materialdialog_preview_active.png - images/materialdialog_preview_normal.png - images/materialdialog_remove_active.png - images/materialdialog_remove_normal.png - images/materialdialog_reset_active.png - images/materialdialog_reset_normal.png - images/materialdialog_save_active.png - images/materialdialog_save_normal.png - images/materialdialog_reset_viewport_active.png - images/materialdialog_reset_viewport_disabled.png - images/materialdialog_reset_viewport_normal.png - images/material_browser_00.png images/material_browser_01.png diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_add.png b/Code/Sandbox/Editor/Material/images/materialdialog_add.png deleted file mode 100644 index aa8d657f23..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_add.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:703f6875258486629bc1db68ce80fe1653f0d2876cd1252d03f72f6eae04dd84 -size 392 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_add_active.png b/Code/Sandbox/Editor/Material/images/materialdialog_add_active.png deleted file mode 100644 index 467365d1ad..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_add_active.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3f3c05f8425956e9c1e380fde9a65df8f0d341868900a3589d9f629f34a0ddf6 -size 251 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_add_disabled.png b/Code/Sandbox/Editor/Material/images/materialdialog_add_disabled.png deleted file mode 100644 index 399e45469e..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_add_disabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:25554e93a4f0d9b904a2a3628c315ee55c0ad8831bb5891a9d7e27e5cb9a5416 -size 261 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_add_normal.png b/Code/Sandbox/Editor/Material/images/materialdialog_add_normal.png deleted file mode 100644 index 1eb8d63ef5..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_add_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b2ee886c6e487a6490361609fdd44c64438e40c7e5a4c40fda866ec399ec4727 -size 256 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_assignselection.png b/Code/Sandbox/Editor/Material/images/materialdialog_assignselection.png deleted file mode 100644 index 72fdb0537a..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_assignselection.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:943ff19774cbe8d47c1e8001a48e6d137fdac2c0af63c9092911c37be0d6d6a8 -size 471 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_assignselection_active.png b/Code/Sandbox/Editor/Material/images/materialdialog_assignselection_active.png deleted file mode 100644 index 605107f750..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_assignselection_active.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:400d669d7a658968549f6ee776ee415b871b207c444d8797a404b76d536131b1 -size 325 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_assignselection_disabled.png b/Code/Sandbox/Editor/Material/images/materialdialog_assignselection_disabled.png deleted file mode 100644 index 3505f577a4..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_assignselection_disabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:02bdc8aad92bb75b118c4a703a3e5b1369376620b3836a125faedc7f6b42b49b -size 330 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_assignselection_normal.png b/Code/Sandbox/Editor/Material/images/materialdialog_assignselection_normal.png deleted file mode 100644 index 0e9c984e1d..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_assignselection_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:38097d3041defeec0179390a73bb463e54e7f4c1f0b1a20e77ab3f69ea9cf13c -size 332 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_copy.png b/Code/Sandbox/Editor/Material/images/materialdialog_copy.png deleted file mode 100644 index 08fc0c6987..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_copy.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e1d9fe8e97655bf776b20e242d66900980721ba2f3ee93c02cd4062a8b872eed -size 433 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_copy_active.png b/Code/Sandbox/Editor/Material/images/materialdialog_copy_active.png deleted file mode 100644 index 67a010be86..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_copy_active.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:468b68c44d8ef183b292c1bc6ca4dc583357f693db9ea2cd198fb2af22537be1 -size 249 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_copy_disabled.png b/Code/Sandbox/Editor/Material/images/materialdialog_copy_disabled.png deleted file mode 100644 index d585dbae6e..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_copy_disabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b27a1346f2edebe34ee06d7892a467bfc67952d0f8e4458e09a74a6dbf62fe98 -size 336 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_copy_normal.png b/Code/Sandbox/Editor/Material/images/materialdialog_copy_normal.png deleted file mode 100644 index 4b42f5c9a2..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_copy_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c3f40524a96689b8c8549bc662415df654494baeeda6eed47e66b455ac902eeb -size 254 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_getfromselection.png b/Code/Sandbox/Editor/Material/images/materialdialog_getfromselection.png deleted file mode 100644 index 76c343a718..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_getfromselection.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cebe97de0d879d239fcd61595fd28b73760aa6452dcf4dabc54bfe034e2e33c1 -size 476 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_getfromselection_active.png b/Code/Sandbox/Editor/Material/images/materialdialog_getfromselection_active.png deleted file mode 100644 index cc58f4f767..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_getfromselection_active.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:699ee40aeedfc50b7766e94ef66e645762eb183ddd6ce134b4bdab01c3957ab9 -size 327 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_getfromselection_disabled.png b/Code/Sandbox/Editor/Material/images/materialdialog_getfromselection_disabled.png deleted file mode 100644 index 6e4a425058..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_getfromselection_disabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5f1fd8a7cecb22901c6d73f2e6129f3bada0f94cf73d9a8fd2676a972faa5719 -size 348 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_getfromselection_normal.png b/Code/Sandbox/Editor/Material/images/materialdialog_getfromselection_normal.png deleted file mode 100644 index 1c319c319d..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_getfromselection_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d432de9e921d23fbbf3c1b805f644b9554aa206011a87c063d167c30c7c4579e -size 335 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_paste.png b/Code/Sandbox/Editor/Material/images/materialdialog_paste.png deleted file mode 100644 index 95740d44d8..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_paste.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c006e70efd8bdb1dd5aac867db9d97de587e8d518ba0693d19c319e34a74c7d0 -size 501 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_paste_active.png b/Code/Sandbox/Editor/Material/images/materialdialog_paste_active.png deleted file mode 100644 index aabb4f2520..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_paste_active.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:00c291361664d357502f5267fccd0a6fff0c3f2e906c0402d57ad9fa5ca7f023 -size 255 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_paste_disabled.png b/Code/Sandbox/Editor/Material/images/materialdialog_paste_disabled.png deleted file mode 100644 index 9abc336f71..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_paste_disabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d68fc8604a23eb3bcc0cac9bb6e83dd4dc4cdab70b0bdaec3c456559727c6b5b -size 354 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_paste_normal.png b/Code/Sandbox/Editor/Material/images/materialdialog_paste_normal.png deleted file mode 100644 index 158bf9d690..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_paste_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4055c7f029d7711e5c32f3f74901bf1dcc1540fd2c0f3f30dc74743d7f2cc042 -size 355 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_pick.png b/Code/Sandbox/Editor/Material/images/materialdialog_pick.png deleted file mode 100644 index e08b45ac66..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_pick.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:99e2c0378137bef94eb6f281e0168852540bf1ca823b9bcd4365ef2849db9956 -size 420 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_pick_active.png b/Code/Sandbox/Editor/Material/images/materialdialog_pick_active.png deleted file mode 100644 index 392b4ab63e..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_pick_active.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:34075016c93f1914fe4d12ead7c5ee322a18466f08a476eff7c127e4e1429224 -size 290 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_pick_disabled.png b/Code/Sandbox/Editor/Material/images/materialdialog_pick_disabled.png deleted file mode 100644 index 865a91152d..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_pick_disabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:dc289621f8a9d3e714cd985651d7d6f20495fb7be46e1f60c283d8920c730d0b -size 307 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_pick_normal.png b/Code/Sandbox/Editor/Material/images/materialdialog_pick_normal.png deleted file mode 100644 index 5c1086b22d..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_pick_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7e9d5c878acf9fee4252cb854f192690d3f50d46dc4e5f5b1b5812b79fc2cdf7 -size 296 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_preview.png b/Code/Sandbox/Editor/Material/images/materialdialog_preview.png deleted file mode 100644 index c7d79780ee..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_preview.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e2e912c40f07ca3d2a9b2aa1c5caf3acc181436b6a1b560fc021450701331b4c -size 403 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_preview_active.png b/Code/Sandbox/Editor/Material/images/materialdialog_preview_active.png deleted file mode 100644 index d2e1d8230d..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_preview_active.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:00663e473803ba6c2798c494676b0a65fd62d7484f6d7b51d9fc8955ad586477 -size 273 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_preview_disabled.png b/Code/Sandbox/Editor/Material/images/materialdialog_preview_disabled.png deleted file mode 100644 index 56716582bb..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_preview_disabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:34b7d5520cfc8f00ff580558db4f0ec4297458d310321471204daa8678db5fc1 -size 298 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_preview_normal.png b/Code/Sandbox/Editor/Material/images/materialdialog_preview_normal.png deleted file mode 100644 index f54cd90c2a..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_preview_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7bca1a8811739949aa2e87486f8697dfae5bc5238894dd1b95ae80aa6f80d517 -size 279 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_remove.png b/Code/Sandbox/Editor/Material/images/materialdialog_remove.png deleted file mode 100644 index d530169b78..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_remove.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:db86d857b651a2fec80418f8b251447bb3fcf4c0cf64bdee12c3b656adbde29a -size 422 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_remove_active.png b/Code/Sandbox/Editor/Material/images/materialdialog_remove_active.png deleted file mode 100644 index 78ec0e0806..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_remove_active.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fef72444f077879d5c0186c9583f67aa45aafc23214d9e7de90a7c595609270f -size 258 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_remove_disabled.png b/Code/Sandbox/Editor/Material/images/materialdialog_remove_disabled.png deleted file mode 100644 index a69ef52e75..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_remove_disabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d2117fda3ed6a28032ae8f03ed7f9a7a0960f4691e49903c63b2150027dfe1ea -size 302 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_remove_normal.png b/Code/Sandbox/Editor/Material/images/materialdialog_remove_normal.png deleted file mode 100644 index b84a504285..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_remove_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:06b384ecc11ed2547a9bf466f585889d647c29a4883840070e444a382e80c41c -size 266 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_reset.png b/Code/Sandbox/Editor/Material/images/materialdialog_reset.png deleted file mode 100644 index e2eedad0bf..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_reset.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4b9ee01e7fe2f19b0e736efe09c2b81d3243e369375b4f26346e6abd499e54a6 -size 476 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_reset_active.png b/Code/Sandbox/Editor/Material/images/materialdialog_reset_active.png deleted file mode 100644 index e86ed4dcb8..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_reset_active.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:935a041332be1fe11ed01c09a3cd367fb9ede7e7eb04909614943f80e741d35f -size 334 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_reset_disabled.png b/Code/Sandbox/Editor/Material/images/materialdialog_reset_disabled.png deleted file mode 100644 index 2e4e403a30..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_reset_disabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2b343233ab25a73fcdb4fff5509011497814fc4cb591065bdb3043a0f1092577 -size 342 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_reset_normal.png b/Code/Sandbox/Editor/Material/images/materialdialog_reset_normal.png deleted file mode 100644 index 8d8b8a1bd9..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_reset_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1cc0183d7f57f15c4efeffb32795921f2f4e9c7965955fd0a392f826d5f6b6c8 -size 337 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_reset_viewport_active.png b/Code/Sandbox/Editor/Material/images/materialdialog_reset_viewport_active.png deleted file mode 100644 index 41590634f5..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_reset_viewport_active.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9a8467c1dcc343f637e0f7f5071a20b8881a43d567fb32fd96f5383f7b69bbb6 -size 430 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_reset_viewport_disabled.png b/Code/Sandbox/Editor/Material/images/materialdialog_reset_viewport_disabled.png deleted file mode 100644 index c6518416c0..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_reset_viewport_disabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0fd5ec79fc2c679f99ac5eb63d725f2cc815b09286bd0f3b5d2921eeb2e1e8cc -size 406 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_reset_viewport_normal.png b/Code/Sandbox/Editor/Material/images/materialdialog_reset_viewport_normal.png deleted file mode 100644 index eef1d5236f..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_reset_viewport_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3e19713b6586581d2336e833d8ecbd78b4b8f15b1c49a29d80acbf05e8aae3df -size 418 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_save.png b/Code/Sandbox/Editor/Material/images/materialdialog_save.png deleted file mode 100644 index 4408a8ba1d..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_save.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4de0f4a102e5c4990d5d23e22b5cdd16532192f3a125758b608cd8c731278898 -size 355 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_save_active.png b/Code/Sandbox/Editor/Material/images/materialdialog_save_active.png deleted file mode 100644 index b0961d34a9..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_save_active.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d0b6f7c69112d124eac1123ffa840268c16148fef9ded3a67f84d3ad8d73eb96 -size 212 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_save_disabled.png b/Code/Sandbox/Editor/Material/images/materialdialog_save_disabled.png deleted file mode 100644 index cc694f079f..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_save_disabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0b795fb88a6f301d7ecc9ce75141bdcf9e6dca25043730661aa4d1f09b055d6f -size 222 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_save_normal.png b/Code/Sandbox/Editor/Material/images/materialdialog_save_normal.png deleted file mode 100644 index 6293be8be5..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_save_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:88fbce753cdd9381a814e3b2ec5d16df7cc26f2a37ad30b7010be71ae9183510 -size 214 diff --git a/Code/Sandbox/Editor/editor_lib_files.cmake b/Code/Sandbox/Editor/editor_lib_files.cmake index 9084a566ae..c91d6ce428 100644 --- a/Code/Sandbox/Editor/editor_lib_files.cmake +++ b/Code/Sandbox/Editor/editor_lib_files.cmake @@ -316,8 +316,6 @@ set(FILES Material/MaterialHelpers.cpp Material/MaterialHelpers.h Material/MaterialDialog.qrc - Material/MaterialDialog.cpp - Material/MaterialDialog.h Material/MaterialPreviewModelView.cpp Material/MaterialPreviewModelView.h Material/PreviewModelView.cpp @@ -632,8 +630,6 @@ set(FILES LensFlareEditor/LensFlareView.h LogFileImpl.cpp LogFileImpl.h - MatEditMainDlg.cpp - MatEditMainDlg.h MatEditPreviewDlg.cpp MatEditPreviewDlg.h Material/MaterialBrowser.cpp From 65b2d9de1bcee2cc4466e25738c285bb2f233c7d Mon Sep 17 00:00:00 2001 From: srikappa Date: Mon, 19 Apr 2021 13:43:54 -0700 Subject: [PATCH 16/67] Added couple of helper functions --- .../Prefab/PrefabPublicHandler.cpp | 120 +++++++++--------- .../Prefab/PrefabPublicHandler.h | 6 +- .../Prefab/PrefabUndoHelpers.cpp | 18 ++- .../Prefab/PrefabUndoHelpers.h | 7 +- 4 files changed, 87 insertions(+), 64 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp index 2fb186bcf7..adadc9d0ac 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp @@ -63,53 +63,28 @@ namespace AzToolsFramework PrefabOperationResult PrefabPublicHandler::CreatePrefab(const AZStd::vector& entityIds, AZ::IO::PathView filePath) { - // Retrieve entityList from entityIds - EntityList inputEntityList; - EntityIdListToEntityList(entityIds, inputEntityList); - - // Find common root and top level entities - bool entitiesHaveCommonRoot = false; + EntityList inputEntityList, topLevelEntities; AZ::EntityId commonRootEntityId; - EntityList topLevelEntities; - - AzToolsFramework::ToolsApplicationRequests::Bus::BroadcastResult( - entitiesHaveCommonRoot, &AzToolsFramework::ToolsApplicationRequests::FindCommonRootInactive, inputEntityList, - commonRootEntityId, &topLevelEntities); - - // Bail if entities don't share a common root - if (!entitiesHaveCommonRoot) + InstanceOptionalReference commonRootEntityOwningInstance; + PrefabOperationResult findCommonRootOutcome = FindCommonRootOwningInstance( + entityIds, inputEntityList, topLevelEntities, commonRootEntityId, commonRootEntityOwningInstance); + if (!findCommonRootOutcome.IsSuccess()) { - return AZ::Failure( - AZStd::string("Could not create a new prefab out of the entities provided - entities do not share a common root.")); + return findCommonRootOutcome; } - AZ::Entity* commonRootEntity = nullptr; - if (commonRootEntityId.IsValid()) - { - commonRootEntity = GetEntityById(commonRootEntityId); - } - - // Retrieve the owning instance of the common root entity, which will be our new instance's parent instance. - InstanceOptionalReference commonRootEntityOwningInstance = GetOwnerInstanceByEntityId(commonRootEntityId); - AZ_Assert( - commonRootEntityOwningInstance.has_value(), - "Failed to create prefab : " - "Couldn't get a valid owning instance for the common root entity of the enities provided"); - - AZStd::vector entities; - AZStd::vector> instances; - - InstanceOptionalReference instance; + InstanceOptionalReference instanceToCreate; { // Initialize Undo Batch object ScopedUndoBatch undoBatch("Create Prefab"); - TemplateId commonRootOwningTemplateId = commonRootEntityOwningInstance->get().GetTemplateId(); - PrefabDom commonRootInstanceDomBeforeCreate; m_instanceToTemplateInterface->GenerateDomForInstance( commonRootInstanceDomBeforeCreate, commonRootEntityOwningInstance->get()); + AZStd::vector entities; + AZStd::vector> instances; + // Retrieve all entities affected and identify Instances if (!RetrieveAndSortPrefabEntitiesAndInstances(inputEntityList, commonRootEntityOwningInstance->get(), entities, instances)) { @@ -117,6 +92,14 @@ namespace AzToolsFramework AZStd::string("Could not create a new prefab out of the entities provided - entities do not share a common root.")); } + // When you move instances from another template, you have to remove the links and propagate changes to target template. + for (auto& nestedInstance : instances) + { + PrefabUndoHelpers::RemoveLink( + nestedInstance->GetTemplateId(), commonRootEntityOwningInstance->get().GetTemplateId(), + nestedInstance->GetInstanceAlias(), nestedInstance->GetLinkId(), undoBatch.GetUndoBatch()); + } + auto prefabEditorEntityOwnershipInterface = AZ::Interface::Get(); if (!prefabEditorEntityOwnershipInterface) { @@ -124,35 +107,23 @@ namespace AzToolsFramework "(PrefabEditorEntityOwnershipInterface unavailable).")); } - // When you move instances from another template, you have to remove the links and propagate changes to target template. - auto linkRemoveUndo = aznew PrefabUndoInstanceLink("Undo Link Remove Node"); - for (auto& nestedInstance : instances) - { - PrefabDom emptyLinkDom; - linkRemoveUndo->Capture( - commonRootOwningTemplateId, nestedInstance->GetTemplateId(), nestedInstance->GetInstanceAlias(), emptyLinkDom, - nestedInstance->GetLinkId()); - linkRemoveUndo->SetParent(undoBatch.GetUndoBatch()); - } - // Create the Prefab - instance = prefabEditorEntityOwnershipInterface->CreatePrefab( + instanceToCreate = prefabEditorEntityOwnershipInterface->CreatePrefab( entities, AZStd::move(instances), filePath, commonRootEntityOwningInstance); - if (!instance) + if (!instanceToCreate) { return AZ::Failure(AZStd::string("Could not create a new prefab out of the entities provided - internal error " "(A null instance is returned).")); } PrefabUndoHelpers::UpdatePrefabInstance( - commonRootEntityOwningInstance->get(), "Undo detaching entity", commonRootInstanceDomBeforeCreate, undoBatch.GetUndoBatch()); + commonRootEntityOwningInstance->get(), "Update prefab instance", commonRootInstanceDomBeforeCreate, undoBatch.GetUndoBatch()); - linkRemoveUndo->Redo(); - - AZ::EntityId containerEntityId = instance->get().GetContainerEntityId(); - - AddLink(topLevelEntities, instance->get(), commonRootEntityOwningInstance->get(), undoBatch.GetUndoBatch(), commonRootEntityId); + CreateLink( + topLevelEntities, instanceToCreate->get(), commonRootEntityOwningInstance->get(), undoBatch.GetUndoBatch(), + commonRootEntityId); + AZ::EntityId containerEntityId = instanceToCreate->get().GetContainerEntityId(); // Change top level entities to be parented to the container entity // Mark them as dirty so this change is correctly applied to the template @@ -172,12 +143,45 @@ namespace AzToolsFramework } // Save Template to file - m_prefabLoaderInterface->SaveTemplate(instance->get().GetTemplateId()); + m_prefabLoaderInterface->SaveTemplate(instanceToCreate->get().GetTemplateId()); return AZ::Success(); } - void PrefabPublicHandler::AddLink( + PrefabOperationResult PrefabPublicHandler::FindCommonRootOwningInstance( + const AZStd::vector& entityIds, EntityList& inputEntityList, EntityList& topLevelEntities, + AZ::EntityId& commonRootEntityId, InstanceOptionalReference& commonRootEntityOwningInstance) + { + // Retrieve entityList from entityIds + EntityIdListToEntityList(entityIds, inputEntityList); + + // Find common root and top level entities + bool entitiesHaveCommonRoot = false; + + AzToolsFramework::ToolsApplicationRequests::Bus::BroadcastResult( + entitiesHaveCommonRoot, &AzToolsFramework::ToolsApplicationRequests::FindCommonRootInactive, inputEntityList, + commonRootEntityId, &topLevelEntities); + + // Bail if entities don't share a common root + if (!entitiesHaveCommonRoot) + { + return AZ::Failure(AZStd::string("Failed to create a prefab: Provided entities do not share a common root.")); + } + + // Retrieve the owning instance of the common root entity, which will be our new instance's parent instance. + commonRootEntityOwningInstance = GetOwnerInstanceByEntityId(commonRootEntityId); + if (!commonRootEntityOwningInstance) + { + AZ_Assert( + false, + "Failed to create prefab : Couldn't get a valid owning instance for the common root entity of the enities provided"); + return AZ::Failure(AZStd::string( + "Failed to create prefab : Couldn't get a valid owning instance for the common root entity of the enities provided")); + } + return AZ::Success(); + } + + void PrefabPublicHandler::CreateLink( const EntityList& topLevelEntities, Instance& instanceToAdd, Instance& parentInstance, UndoSystem::URSequencePoint* undoBatch, AZ::EntityId commonRootEntityId) { @@ -205,8 +209,8 @@ namespace AzToolsFramework m_instanceToTemplateInterface->GeneratePatch(patch, containerEntityDomBefore, containerEntityDomAfter); m_instanceToTemplateInterface->AppendEntityAliasToPatchPaths(patch, containerEntityId); - PrefabUndoHelpers::AddLink( - "Add Link", instanceToAdd.GetTemplateId(), parentInstance.GetTemplateId(), patch, instanceToAdd.GetInstanceAlias(), + PrefabUndoHelpers::CreateLink( + instanceToAdd.GetTemplateId(), parentInstance.GetTemplateId(), patch, instanceToAdd.GetInstanceAlias(), undoBatch); // Update the cache - this prevents these changes from being stored in the regular undo/redo nodes diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h index 7f3d05e3d3..d05192a3b4 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h @@ -69,10 +69,14 @@ namespace AzToolsFramework InstanceOptionalReference GetOwnerInstanceByEntityId(AZ::EntityId entityId) const; bool EntitiesBelongToSameInstance(const EntityIdList& entityIds) const; - void AddLink( + void CreateLink( const EntityList& topLevelEntities, Instance& instanceToAdd, Instance& parentInstance, UndoSystem::URSequencePoint* undoBatch, AZ::EntityId commonRootEntityId); + PrefabOperationResult FindCommonRootOwningInstance( + const AZStd::vector& entityIds, EntityList& inputEntityList, EntityList& topLevelEntities, + AZ::EntityId& commonRootEntityId, InstanceOptionalReference& commonRootEntityOwningInstance); + static Instance* GetParentInstance(Instance* instance); static Instance* GetAncestorOfInstanceThatIsChildOfRoot(const Instance* ancestor, Instance* descendant); static void GenerateContainerEntityTransform(const EntityList& topLevelEntities, AZ::Vector3& translation, AZ::Quaternion& rotation); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.cpp index 1fa9169ae2..c9b6c88a97 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.cpp @@ -33,15 +33,27 @@ namespace AzToolsFramework state->Redo(); } - void AddLink( - AZStd::string_view undoMessage, TemplateId sourceTemplateId, TemplateId targetTemplateId, PrefabDomReference patch, + void CreateLink( + TemplateId sourceTemplateId, TemplateId targetTemplateId, PrefabDomReference patch, const InstanceAlias& instanceAlias, UndoSystem::URSequencePoint* undoBatch) { - auto linkAddUndo = aznew PrefabUndoInstanceLink(undoMessage); + auto linkAddUndo = aznew PrefabUndoInstanceLink("Create Link"); linkAddUndo->Capture(targetTemplateId, sourceTemplateId, instanceAlias, patch, InvalidLinkId); linkAddUndo->SetParent(undoBatch); linkAddUndo->Redo(); } + + void RemoveLink( + TemplateId sourceTemplateId, TemplateId targetTemplateId, const InstanceAlias& instanceAlias, + LinkId linkId, UndoSystem::URSequencePoint* undoBatch) + { + auto linkRemoveUndo = aznew PrefabUndoInstanceLink("Remove Link"); + PrefabDom emptyLinkDom; + linkRemoveUndo->Capture( + targetTemplateId, sourceTemplateId, instanceAlias, emptyLinkDom, linkId); + linkRemoveUndo->SetParent(undoBatch); + linkRemoveUndo->Redo(); + } } } // namespace Prefab } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.h index 279deb953c..5f81ef14a8 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.h @@ -21,9 +21,12 @@ namespace AzToolsFramework void UpdatePrefabInstance( const Instance& instance, AZStd::string_view undoMessage, const PrefabDom& instanceDomBeforeUpdate, UndoSystem::URSequencePoint* undoBatch); - void AddLink( - AZStd::string_view undoMessage, TemplateId sourceTemplateId, TemplateId targetTemplateId, PrefabDomReference patch, + void CreateLink( + TemplateId sourceTemplateId, TemplateId targetTemplateId, PrefabDomReference patch, const InstanceAlias& instanceAlias, UndoSystem::URSequencePoint* undoBatch); + void RemoveLink( + TemplateId sourceTemplateId, TemplateId targetTemplateId, const InstanceAlias& instanceAlias, + LinkId linkId, UndoSystem::URSequencePoint* undoBatch); } } // namespace Prefab } // namespace AzToolsFramework From 4232fa4232cbb71c2302e5de387489fa48e45590 Mon Sep 17 00:00:00 2001 From: spham Date: Mon, 19 Apr 2021 14:52:13 -0700 Subject: [PATCH 17/67] - Renamed install-awscli.sh to install-ubuntu-awscli.sh - Update to use $EUID instead of 'whoami' to determine if script is running as sudo - Tagging cmake version 3.20.1 specifically --- .../Linux/{install-awscli.sh => install-ubuntu-awscli.sh} | 2 +- .../Platform/Linux/install-ubuntu-build-libraries.sh | 2 +- .../Platform/Linux/install-ubuntu-build-tools.sh | 7 ++++--- .../build/build_node/Platform/Linux/install-ubuntu-git.sh | 2 +- 4 files changed, 7 insertions(+), 6 deletions(-) rename scripts/build/build_node/Platform/Linux/{install-awscli.sh => install-ubuntu-awscli.sh} (97%) diff --git a/scripts/build/build_node/Platform/Linux/install-awscli.sh b/scripts/build/build_node/Platform/Linux/install-ubuntu-awscli.sh similarity index 97% rename from scripts/build/build_node/Platform/Linux/install-awscli.sh rename to scripts/build/build_node/Platform/Linux/install-ubuntu-awscli.sh index c9addedc82..4c2f350859 100644 --- a/scripts/build/build_node/Platform/Linux/install-awscli.sh +++ b/scripts/build/build_node/Platform/Linux/install-ubuntu-awscli.sh @@ -10,7 +10,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # This script must be run as root -if [ "`whoami`" != "root" ] +if [[ $EUID -ne 0 ]] then echo "This script must be run as root (sudo)" exit 1 diff --git a/scripts/build/build_node/Platform/Linux/install-ubuntu-build-libraries.sh b/scripts/build/build_node/Platform/Linux/install-ubuntu-build-libraries.sh index 7b78a53802..90786a675a 100644 --- a/scripts/build/build_node/Platform/Linux/install-ubuntu-build-libraries.sh +++ b/scripts/build/build_node/Platform/Linux/install-ubuntu-build-libraries.sh @@ -10,7 +10,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # This script must be run as root -if [ "`whoami`" != "root" ] +if [[ $EUID -ne 0 ]] then echo "This script must be run as root (sudo)" exit 1 diff --git a/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh b/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh index eb9229d90b..0b341c089e 100644 --- a/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh +++ b/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh @@ -10,7 +10,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # This script must be run as root -if [ "`whoami`" != "root" ] +if [[ $EUID -ne 0 ]] then echo "This script must be run as root (sudo)" exit 1 @@ -41,7 +41,8 @@ fi # # Always install the latest version of cmake (from kitware) # -echo Installing the latest version of CMake +CMAKE_DISTRO_VERSION=3.20.1-0kitware1ubuntu20.04.1 +echo Installing CMake package $CMAKE_DISTRO_VERSION # Remove any pre-existing version of cmake apt purge --auto-remove cmake -y @@ -59,7 +60,7 @@ fi apt-get update # Install cmake -apt-get install cmake -y +apt-get install cmake $CMAKE_DISTRO_VERSION -y # diff --git a/scripts/build/build_node/Platform/Linux/install-ubuntu-git.sh b/scripts/build/build_node/Platform/Linux/install-ubuntu-git.sh index a1c2923c13..53554f4175 100644 --- a/scripts/build/build_node/Platform/Linux/install-ubuntu-git.sh +++ b/scripts/build/build_node/Platform/Linux/install-ubuntu-git.sh @@ -10,7 +10,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # This script must be run as root -if [ "`whoami`" != "root" ] +if [[ $EUID -ne 0 ]] then echo "This script must be run as root (sudo)" exit 1 From a6cea546da84e079a77e1525c7960f55220ba74d Mon Sep 17 00:00:00 2001 From: shiranj Date: Mon, 19 Apr 2021 14:52:37 -0700 Subject: [PATCH 18/67] Add repository name to EBS volume tag --- scripts/build/Jenkins/Jenkinsfile | 15 ++++--- .../build/bootstrap/incremental_build_util.py | 44 ++++++++++--------- 2 files changed, 33 insertions(+), 26 deletions(-) diff --git a/scripts/build/Jenkins/Jenkinsfile b/scripts/build/Jenkins/Jenkinsfile index f77c139342..7f269c0012 100644 --- a/scripts/build/Jenkins/Jenkinsfile +++ b/scripts/build/Jenkins/Jenkinsfile @@ -265,7 +265,7 @@ def CheckoutRepo(boolean disableSubmodules = false) { palRm('commitid') } -def PreBuildCommonSteps(Map pipelineConfig, String projectName, String pipeline, String branchName, String platform, String buildType, String workspace, boolean mount = true, boolean disableSubmodules = false) { +def PreBuildCommonSteps(Map pipelineConfig, String repositoryName, String projectName, String pipeline, String branchName, String platform, String buildType, String workspace, boolean mount = true, boolean disableSubmodules = false) { echo 'Starting pre-build common steps...' if (mount) { @@ -276,10 +276,10 @@ def PreBuildCommonSteps(Map pipelineConfig, String projectName, String pipeline, else pythonCmd = 'python -u ' if(env.RECREATE_VOLUME?.toBoolean()) { - palSh("${pythonCmd} ${INCREMENTAL_BUILD_SCRIPT_PATH} --action delete --project ${projectName} --pipeline ${pipeline} --branch ${branchName} --platform ${platform} --build_type ${buildType}", 'Deleting volume') + palSh("${pythonCmd} ${INCREMENTAL_BUILD_SCRIPT_PATH} --action delete --repository_name ${repositoryName} --project ${projectName} --pipeline ${pipeline} --branch ${branchName} --platform ${platform} --build_type ${buildType}", 'Deleting volume') } timeout(5) { - palSh("${pythonCmd} ${INCREMENTAL_BUILD_SCRIPT_PATH} --action mount --project ${projectName} --pipeline ${pipeline} --branch ${branchName} --platform ${platform} --build_type ${buildType}", 'Mounting volume') + palSh("${pythonCmd} ${INCREMENTAL_BUILD_SCRIPT_PATH} --action mount --repository_name ${repositoryName} --project ${projectName} --pipeline ${pipeline} --branch ${branchName} --platform ${platform} --build_type ${buildType}", 'Mounting volume') } if(env.IS_UNIX) { @@ -383,10 +383,10 @@ def PostBuildCommonSteps(String workspace, boolean mount = true) { } } -def CreateSetupStage(Map pipelineConfig, String projectName, String pipelineName, String branchName, String platformName, String jobName, Map environmentVars) { +def CreateSetupStage(Map pipelineConfig, String repositoryName, String projectName, String pipelineName, String branchName, String platformName, String jobName, Map environmentVars) { return { stage("Setup") { - PreBuildCommonSteps(pipelineConfig, projectName, pipelineName, branchName, platformName, jobName, environmentVars['WORKSPACE'], environmentVars['MOUNT_VOLUME']) + PreBuildCommonSteps(pipelineConfig, repositoryName, projectName, pipelineName, branchName, platformName, jobName, environmentVars['WORKSPACE'], environmentVars['MOUNT_VOLUME']) } } } @@ -430,6 +430,9 @@ try { } withEnv(envVarList) { timestamps { + repositoryUrl = scm.getUserRemoteConfigs()[0].getUrl() + // repositoryName is the full repository name + repositoryName = (repositoryUrl =~ /https:\/\/github.com\/(.*)\.git/)[0][1] (projectName, pipelineName) = GetRunningPipelineName(env.JOB_NAME) // env.JOB_NAME is the name of the job given by Jenkins if(env.BRANCH_NAME) { @@ -493,7 +496,7 @@ try { try { def build_job_name = build_job.key - CreateSetupStage(pipelineConfig, projectName, pipelineName, branchName, platform.key, build_job.key, envVars).call() + CreateSetupStage(pipelineConfig, repositoryName, projectName, pipelineName, branchName, platform.key, build_job.key, envVars).call() if(build_job.value.steps) { //this is a pipe with many steps so create all the build stages build_job.value.steps.each { build_step -> diff --git a/scripts/build/bootstrap/incremental_build_util.py b/scripts/build/bootstrap/incremental_build_util.py index 40b4a5cb4f..fec48e2bee 100755 --- a/scripts/build/bootstrap/incremental_build_util.py +++ b/scripts/build/bootstrap/incremental_build_util.py @@ -94,6 +94,7 @@ def error(message): def parse_args(): parser = argparse.ArgumentParser() parser.add_argument('-a', '--action', dest="action", help="Action (mount|unmount|delete)") + parser.add_argument('-proj', '--repository_name', dest="repository_name", help="Repository name") parser.add_argument('-proj', '--project', dest="project", help="Project") parser.add_argument('-pipe', '--pipeline', dest="pipeline", help="Pipeline") parser.add_argument('-b', '--branch', dest="branch", help="Branch") @@ -108,6 +109,8 @@ def parse_args(): error('No action specified') args.action = args.action.lower() if args.action != 'unmount': + if args.repository_name is None: + error('No repository specified') if args.project is None: error('No project specified') if args.pipeline is None: @@ -121,8 +124,8 @@ def parse_args(): return args -def get_mount_name(project, pipeline, branch, platform, build_type): - mount_name = "{}_{}_{}_{}_{}".format(project, pipeline, branch, platform, build_type) +def get_mount_name(repository_name, project, pipeline, branch, platform, build_type): + mount_name = "{}_{}_{}_{}_{}_{}".format(repository_name, project, pipeline, branch, platform, build_type) mount_name = mount_name.replace('/','_').replace('\\','_') return mount_name @@ -174,8 +177,8 @@ def delete_volume(ec2_client, volume_id): response = ec2_client.delete_volume(VolumeId=volume_id) print 'Volume {} deleted'.format(volume_id) -def find_snapshot_id(ec2_client, project, pipeline, platform, build_type, disk_size): - mount_name = get_mount_name(project, pipeline, 'main', platform, build_type) # we take snapshots out of main +def find_snapshot_id(ec2_client, repository_name, project, pipeline, platform, build_type, disk_size): + mount_name = get_mount_name(repository_name, project, pipeline, 'main', platform, build_type) # we take snapshots out of main response = ec2_client.describe_snapshots(Filters= [{ 'Name': 'tag:Name', 'Values': [mount_name] }]) @@ -191,9 +194,9 @@ def find_snapshot_id(ec2_client, project, pipeline, platform, build_type, disk_s snapshot_id = snapshot['SnapshotId'] return snapshot_id -def create_volume(ec2_client, availability_zone, project, pipeline, branch, platform, build_type, disk_size, disk_type): +def create_volume(ec2_client, availability_zone, repository_name, project, pipeline, branch, platform, build_type, disk_size, disk_type): # The actual EBS default calculation for IOps is a floating point number, the closest approxmiation is 4x of the disk size for simplicity - mount_name = get_mount_name(project, pipeline, branch, platform, build_type) + mount_name = get_mount_name(repository_name, project, pipeline, branch, platform, build_type) pipeline_and_branch = get_pipeline_and_branch(pipeline, branch) parameters = dict( AvailabilityZone = availability_zone, @@ -202,6 +205,7 @@ def create_volume(ec2_client, availability_zone, project, pipeline, branch, plat 'ResourceType': 'volume', 'Tags': [ { 'Key': 'Name', 'Value': mount_name }, + {'Key': 'RepositoryName', 'Value': repository_name}, { 'Key': 'Project', 'Value': project }, { 'Key': 'Pipeline', 'Value': pipeline }, { 'Key': 'BranchName', 'Value': branch }, @@ -214,7 +218,7 @@ def create_volume(ec2_client, availability_zone, project, pipeline, branch, plat if 'io1' in disk_type.lower(): parameters['Iops'] = (4 * disk_size) - snapshot_id = find_snapshot_id(ec2_client, project, pipeline, platform, build_type, disk_size) + snapshot_id = find_snapshot_id(ec2_client, repository_name, project, pipeline, platform, build_type, disk_size) if snapshot_id: parameters['SnapshotId'] = snapshot_id created = False @@ -234,8 +238,8 @@ def create_volume(ec2_client, availability_zone, project, pipeline, branch, plat time.sleep(1) response = ec2_client.describe_volumes(VolumeIds=[volume_id, ]) - print("Volume {} created\n\tSnapshot: {}\n\tProject {}\n\tPipeline {}\n\tBranch {}\n\tPlatform: {}\n\tBuild type: {}" - .format(volume_id, snapshot_id, project, pipeline, branch, platform, build_type)) + print("Volume {} created\n\tSnapshot: {}\n\tRepository {}\n\tProject {}\n\tPipeline {}\n\tBranch {}\n\tPlatform: {}\n\tBuild type: {}" + .format(volume_id, snapshot_id, repository_name, project, pipeline, branch, platform, build_type)) return volume_id, created @@ -359,7 +363,7 @@ def attach_ebs_and_create_partition_with_retry(volume, volume_id, ec2_instance_i mount_volume(created) attempt += 1 -def mount_ebs(project, pipeline, branch, platform, build_type, disk_size, disk_type): +def mount_ebs(repository_name, project, pipeline, branch, platform, build_type, disk_size, disk_type): session = boto3.session.Session() region = session.region_name if region is None: @@ -379,7 +383,7 @@ def mount_ebs(project, pipeline, branch, platform, build_type, disk_size, disk_t unmount_volume() detach_volume(volume, ec2_instance_id, False) # Force unmounts should not be used, as that will cause the EBS block device driver to fail the remount - mount_name = get_mount_name(project, pipeline, branch, platform, build_type) + mount_name = get_mount_name(repository_name, project, pipeline, branch, platform, build_type) response = ec2_client.describe_volumes(Filters=[{ 'Name': 'tag:Name', 'Values': [mount_name] }]) @@ -388,7 +392,7 @@ def mount_ebs(project, pipeline, branch, platform, build_type, disk_size, disk_t if 'Volumes' in response and not len(response['Volumes']): print 'Volume for {} doesn\'t exist creating it...'.format(mount_name) # volume doesn't exist, create it - volume_id, created = create_volume(ec2_client, ec2_availability_zone, project, pipeline, branch, platform, build_type, disk_size, disk_type) + volume_id, created = create_volume(ec2_client, ec2_availability_zone, repository_name, project, pipeline, branch, platform, build_type, disk_size, disk_type) else: volume = response['Volumes'][0] volume_id = volume['VolumeId'] @@ -396,7 +400,7 @@ def mount_ebs(project, pipeline, branch, platform, build_type, disk_size, disk_t if (volume['Size'] != disk_size or volume['VolumeType'] != disk_type): print 'Override disk attributes does not match the existing volume, deleting {} and replacing the volume'.format(volume_id) delete_volume(ec2_client, volume_id) - volume_id, created = create_volume(ec2_client, ec2_availability_zone, project, pipeline, branch, platform, build_type, disk_size, disk_type) + volume_id, created = create_volume(ec2_client, ec2_availability_zone, repository_name, project, pipeline, branch, platform, build_type, disk_size, disk_type) if len(volume['Attachments']): # this is bad we shouldn't be attached, we should have detached at the end of a build attachment = volume['Attachments'][0] @@ -426,7 +430,7 @@ def mount_ebs(project, pipeline, branch, platform, build_type, disk_size, disk_t print 'Error: EBS disk size reached to the allowed maximum disk size {}MB, please contact ly-infra@ and ly-build@ to investigate.'.format(MAX_EBS_DISK_SIZE) exit(1) print 'Recreating the EBS with disk size {}'.format(new_disk_size) - volume_id, created = create_volume(ec2_client, ec2_availability_zone, project, pipeline, branch, platform, build_type, new_disk_size, disk_type) + volume_id, created = create_volume(ec2_client, ec2_availability_zone, repository_name, project, pipeline, branch, platform, build_type, new_disk_size, disk_type) volume = ec2_resource.Volume(volume_id) attach_ebs_and_create_partition_with_retry(volume, volume_id, ec2_instance_id, created) @@ -458,7 +462,7 @@ def unmount_ebs(): unmount_volume() detach_volume(volume, ec2_instance_id, False) -def delete_ebs(project, pipeline, branch, platform, build_type): +def delete_ebs(repository_name, project, pipeline, branch, platform, build_type): unmount_ebs() session = boto3.session.Session() @@ -470,7 +474,7 @@ def delete_ebs(project, pipeline, branch, platform, build_type): ec2_resource = boto3.resource('ec2', region_name=region) ec2_instance = ec2_resource.Instance(ec2_instance_id) - mount_name = get_mount_name(project, pipeline, branch, platform, build_type) + mount_name = get_mount_name(repository_name, project, pipeline, branch, platform, build_type) response = ec2_client.describe_volumes(Filters=[ { 'Name': 'tag:Name', 'Values': [mount_name] } ]) @@ -481,15 +485,15 @@ def delete_ebs(project, pipeline, branch, platform, build_type): delete_volume(ec2_client, volume_id) -def main(action, project, pipeline, branch, platform, build_type, disk_size, disk_type): +def main(action, repository_name, project, pipeline, branch, platform, build_type, disk_size, disk_type): if action == 'mount': - mount_ebs(project, pipeline, branch, platform, build_type, disk_size, disk_type) + mount_ebs(repository_name, project, pipeline, branch, platform, build_type, disk_size, disk_type) elif action == 'unmount': unmount_ebs() elif action == 'delete': - delete_ebs(project, pipeline, branch, platform, build_type) + delete_ebs(repository_name, project, pipeline, branch, platform, build_type) if __name__ == "__main__": args = parse_args() - ret = main(args.action, args.project, args.pipeline, args.branch, args.platform, args.build_type, args.disk_size, args.disk_type) + ret = main(args.action, args.repository_name, args.project, args.pipeline, args.branch, args.platform, args.build_type, args.disk_size, args.disk_type) sys.exit(ret) \ No newline at end of file From 86be2647c59251bfcf9e70307334fc577a6598f9 Mon Sep 17 00:00:00 2001 From: spham Date: Mon, 19 Apr 2021 14:56:54 -0700 Subject: [PATCH 19/67] Fix apt-get command for installing specific version of cmake based on distro of ubuntu --- .../build_node/Platform/Linux/install-ubuntu-build-tools.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh b/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh index 0b341c089e..36832bb9ac 100644 --- a/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh +++ b/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh @@ -41,7 +41,6 @@ fi # # Always install the latest version of cmake (from kitware) # -CMAKE_DISTRO_VERSION=3.20.1-0kitware1ubuntu20.04.1 echo Installing CMake package $CMAKE_DISTRO_VERSION # Remove any pre-existing version of cmake @@ -52,9 +51,11 @@ CMAKE_DEB_REPO="'deb https://apt.kitware.com/ubuntu/ $UBUNTU_DISTRO main'" # Add the appropriate kitware repository to apt if [ "$UBUNTU_DISTRO" == "bionic" ] then + CMAKE_DISTRO_VERSION=3.20.1-0kitware1ubuntu20.04.1 apt-add-repository 'deb https://apt.kitware.com/ubuntu/ bionic main' elif [ "$UBUNTU_DISTRO" == "focal" ] then + CMAKE_DISTRO_VERSION=3.20.1-0kitware1ubuntu18.04.1 apt-add-repository 'deb https://apt.kitware.com/ubuntu/ focal main' fi apt-get update From f5b7200f328471cad30d6cff050b75588fecfeaa Mon Sep 17 00:00:00 2001 From: shiranj Date: Mon, 19 Apr 2021 14:59:43 -0700 Subject: [PATCH 20/67] Fix typo --- scripts/build/bootstrap/incremental_build_util.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/build/bootstrap/incremental_build_util.py b/scripts/build/bootstrap/incremental_build_util.py index fec48e2bee..0228f129d0 100755 --- a/scripts/build/bootstrap/incremental_build_util.py +++ b/scripts/build/bootstrap/incremental_build_util.py @@ -94,8 +94,8 @@ def error(message): def parse_args(): parser = argparse.ArgumentParser() parser.add_argument('-a', '--action', dest="action", help="Action (mount|unmount|delete)") - parser.add_argument('-proj', '--repository_name', dest="repository_name", help="Repository name") - parser.add_argument('-proj', '--project', dest="project", help="Project") + parser.add_argument('-repository_name', '--repository_name', dest="repository_name", help="Repository name") + parser.add_argument('-project', '--project', dest="project", help="Project") parser.add_argument('-pipe', '--pipeline', dest="pipeline", help="Pipeline") parser.add_argument('-b', '--branch', dest="branch", help="Branch") parser.add_argument('-plat', '--platform', dest="platform", help="Platform") From 707f7cb6cefe7b43c03495a9137d829c63722710 Mon Sep 17 00:00:00 2001 From: srikappa Date: Mon, 19 Apr 2021 15:06:41 -0700 Subject: [PATCH 21/67] Added some comments --- .../Instance/InstanceUpdateExecutor.cpp | 5 +++++ .../Prefab/PrefabPublicHandler.cpp | 10 ++++----- .../Prefab/PrefabPublicHandler.h | 21 ++++++++++++++++++- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp index d84edd6212..b307d8290c 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp @@ -117,6 +117,7 @@ namespace AzToolsFramework "Could not find Template using Id '%llu'. Unable to update Instance.", currentTemplateId); + // Remove the instance from update queue if it's corresponding template couldn't be found isUpdateSuccessful = false; m_instancesUpdateQueue.pop(); continue; @@ -127,6 +128,8 @@ namespace AzToolsFramework if (findInstancesResult.find(instanceToUpdate) == findInstancesResult.end()) { + // Since nested instances get reconstructed during propgation, remove any nested instance that no longer + // maps to a template. isUpdateSuccessful = false; m_instancesUpdateQueue.pop(); continue; @@ -155,6 +158,8 @@ namespace AzToolsFramework for (auto entityIdIterator = selectedEntityIds.begin(); entityIdIterator != selectedEntityIds.end(); entityIdIterator++) { + // Since entities get recreated during propagation, we need to check whether the entities correspoding to the list + // of selected entity ids are present or not. AZ::Entity* entity = GetEntityById(*entityIdIterator); if (entity == nullptr) { diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp index adadc9d0ac..6ba342bf9b 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp @@ -121,7 +121,7 @@ namespace AzToolsFramework commonRootEntityOwningInstance->get(), "Update prefab instance", commonRootInstanceDomBeforeCreate, undoBatch.GetUndoBatch()); CreateLink( - topLevelEntities, instanceToCreate->get(), commonRootEntityOwningInstance->get(), undoBatch.GetUndoBatch(), + topLevelEntities, instanceToCreate->get(), commonRootEntityOwningInstance->get().GetTemplateId(), undoBatch.GetUndoBatch(), commonRootEntityId); AZ::EntityId containerEntityId = instanceToCreate->get().GetContainerEntityId(); @@ -182,10 +182,10 @@ namespace AzToolsFramework } void PrefabPublicHandler::CreateLink( - const EntityList& topLevelEntities, Instance& instanceToAdd, Instance& parentInstance, UndoSystem::URSequencePoint* undoBatch, - AZ::EntityId commonRootEntityId) + const EntityList& topLevelEntities, Instance& sourceInstance, TemplateId targetTemplateId, + UndoSystem::URSequencePoint* undoBatch, AZ::EntityId commonRootEntityId) { - AZ::EntityId containerEntityId = instanceToAdd.GetContainerEntityId(); + AZ::EntityId containerEntityId = sourceInstance.GetContainerEntityId(); AZ::Entity* containerEntity = GetEntityById(containerEntityId); Prefab::PrefabDom containerEntityDomBefore; m_instanceToTemplateInterface->GenerateDomForEntity(containerEntityDomBefore, *containerEntity); @@ -210,7 +210,7 @@ namespace AzToolsFramework m_instanceToTemplateInterface->AppendEntityAliasToPatchPaths(patch, containerEntityId); PrefabUndoHelpers::CreateLink( - instanceToAdd.GetTemplateId(), parentInstance.GetTemplateId(), patch, instanceToAdd.GetInstanceAlias(), + sourceInstance.GetTemplateId(), targetTemplateId, patch, sourceInstance.GetInstanceAlias(), undoBatch); // Update the cache - this prevents these changes from being stored in the regular undo/redo nodes diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h index d05192a3b4..f97fa46c3e 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h @@ -69,10 +69,29 @@ namespace AzToolsFramework InstanceOptionalReference GetOwnerInstanceByEntityId(AZ::EntityId entityId) const; bool EntitiesBelongToSameInstance(const EntityIdList& entityIds) const; + /** + * Creates a link between the templates of an instance and its parent. + * + * \param topLevelEntities The list of entities that are immediate children of container entity of instance. + * \param sourceInstance The instance that corresponds to the source template of the link. + * \param targetInstance The id of the target template. + * \param undoBatch The undo batch to set as parent for this create link action. + * \param commonRootEntityId The id of the entity that the source instance should be parented under. + */ void CreateLink( - const EntityList& topLevelEntities, Instance& instanceToAdd, Instance& parentInstance, + const EntityList& topLevelEntities, Instance& sourceInstance, TemplateId targetTemplateId, UndoSystem::URSequencePoint* undoBatch, AZ::EntityId commonRootEntityId); + /** + * Given a list of entityIds, finds the prefab instance that owns the common root entity of the entityIds. + * + * \param entityIds The list of entity ids. + * \param inputEntityList The list of entities corresponding to the entity ids. + * \param topLevelEntities The list of entities that are immediate children of the common root entity. + * \param commonRootEntityId The entity id of the common root entity of all the entityIds. + * \param commonRootEntityOwningInstance The owning instance of the common root entity. + * \return PrefabOperationResult indicating whether the action was successful or not. + */ PrefabOperationResult FindCommonRootOwningInstance( const AZStd::vector& entityIds, EntityList& inputEntityList, EntityList& topLevelEntities, AZ::EntityId& commonRootEntityId, InstanceOptionalReference& commonRootEntityOwningInstance); From 8fc69113c9d91a7fd64948787488e8f742962b3a Mon Sep 17 00:00:00 2001 From: nvsickle Date: Mon, 19 Apr 2021 15:08:06 -0700 Subject: [PATCH 22/67] Get the default viewport context on demand in FFont, as it may change --- .../AtomLyIntegration/AtomFont/FFont.h | 31 ++--------------- .../AtomFont/Code/Source/FFont.cpp | 33 +++++++++++++------ 2 files changed, 26 insertions(+), 38 deletions(-) diff --git a/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/FFont.h b/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/FFont.h index 96f5e09fc3..a6066984c7 100644 --- a/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/FFont.h +++ b/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/FFont.h @@ -277,11 +277,11 @@ namespace AZ void ScaleCoord(const RHI::Viewport& viewport, float& x, float& y) const; - void InitDefaultWindowContext(); - void InitDefaultViewportContext(); - void OnBootstrapSceneReady(AZ::RPI::Scene* bootstrapScene) override; + RPI::WindowContextSharedPtr GetDefaultWindowContext() const; + RPI::ViewportContextPtr GetDefaultViewportContext() const; + private: static constexpr uint32_t NumBuffers = 2; static constexpr float WindowScaleWidth = 800.0f; @@ -294,9 +294,6 @@ namespace AZ size_t m_fontBufferSize = 0; unsigned char* m_fontBuffer = nullptr; - AZStd::shared_ptr m_defaultWindowContext; - AZStd::shared_ptr m_defaultViewportContext; - AZ::Data::Instance m_fontStreamingImage; AZ::RHI::Ptr m_fontImage; uint32_t m_fontImageVersion = 0; @@ -345,26 +342,4 @@ namespace AZ } } -inline void AZ::FFont::InitDefaultWindowContext() -{ - if (!m_defaultWindowContext) - { - // font is created before window & viewport in the editor so need to do late init - // TODO need to deal with multiple windows, such as the editor - AZ::Render::Bootstrap::DefaultWindowBus::BroadcastResult(m_defaultWindowContext, &AZ::Render::Bootstrap::DefaultWindowInterface::GetDefaultWindowContext); - AZ_Assert(m_defaultWindowContext, "Unable to get the main window context"); - } -} - -inline void AZ::FFont::InitDefaultViewportContext() -{ - if (!m_defaultViewportContext) - { - // font is created before window & viewport in the editor so need to do late init - auto viewContextManager = AZ::Interface::Get(); - m_defaultViewportContext = viewContextManager->GetViewportContextByName(viewContextManager->GetDefaultViewportContextName()); - AZ_Assert(m_defaultViewportContext, "Unable to get the viewport context"); - } -} - #endif diff --git a/Gems/AtomLyIntegration/AtomFont/Code/Source/FFont.cpp b/Gems/AtomLyIntegration/AtomFont/Code/Source/FFont.cpp index d32302a07b..38024393fa 100644 --- a/Gems/AtomLyIntegration/AtomFont/Code/Source/FFont.cpp +++ b/Gems/AtomLyIntegration/AtomFont/Code/Source/FFont.cpp @@ -84,6 +84,20 @@ AZ::FFont::FFont(AtomFont* atomFont, const char* fontName) AZ::Render::Bootstrap::NotificationBus::Handler::BusConnect(); } +AZ::RPI::ViewportContextPtr AZ::FFont::GetDefaultViewportContext() const +{ + auto viewContextManager = AZ::Interface::Get(); + return viewContextManager->GetDefaultViewportContext(); +} + +AZ::RPI::WindowContextSharedPtr AZ::FFont::GetDefaultWindowContext() const +{ + if (auto defaultViewportContext = GetDefaultViewportContext()) + { + return defaultViewportContext->GetWindowContext(); + } + return {}; +} bool AZ::FFont::InitFont() { @@ -92,11 +106,8 @@ bool AZ::FFont::InitFont() return true; } - InitDefaultWindowContext(); - InitDefaultViewportContext(); - // Create and initialize DynamicDrawContext for font draw - AZ::RPI::Ptr dynamicDraw = m_atomFont->GetOrCreateDynamicDrawForScene(m_defaultViewportContext->GetRenderScene().get()); + AZ::RPI::Ptr dynamicDraw = m_atomFont->GetOrCreateDynamicDrawForScene(GetDefaultViewportContext()->GetRenderScene().get()); // Save draw srg input indices for later use Data::Instance drawSrg = dynamicDraw->NewDrawSrg(); @@ -259,7 +270,7 @@ void AZ::FFont::DrawString(float x, float y, const char* str, const bool asciiMu return; } - DrawStringUInternal(m_defaultWindowContext->GetViewport(), m_defaultViewportContext.get(), x, y, 1.0f, str, asciiMultiLine, ctx); + DrawStringUInternal(GetDefaultWindowContext()->GetViewport(), GetDefaultViewportContext().get(), x, y, 1.0f, str, asciiMultiLine, ctx); } void AZ::FFont::DrawString(float x, float y, float z, const char* str, const bool asciiMultiLine, const TextDrawContext& ctx) @@ -269,7 +280,7 @@ void AZ::FFont::DrawString(float x, float y, float z, const char* str, const boo return; } - DrawStringUInternal(m_defaultWindowContext->GetViewport(), m_defaultViewportContext.get(), x, y, z, str, asciiMultiLine, ctx); + DrawStringUInternal(GetDefaultWindowContext()->GetViewport(), GetDefaultViewportContext().get(), x, y, z, str, asciiMultiLine, ctx); } void AZ::FFont::DrawStringUInternal( @@ -282,6 +293,8 @@ void AZ::FFont::DrawStringUInternal( const bool asciiMultiLine, const TextDrawContext& ctx) { + InitFont(); + if (!str || !m_vertexBuffer // vertex buffer isn't created until BootstrapScene is ready, Editor tries to render text before that. || !m_fontTexture @@ -400,7 +413,7 @@ Vec2 AZ::FFont::GetTextSize(const char* str, const bool asciiMultiLine, const Te return Vec2(0.0f, 0.0f); } - return GetTextSizeUInternal(m_defaultWindowContext->GetViewport(), str, asciiMultiLine, ctx); + return GetTextSizeUInternal(GetDefaultWindowContext()->GetViewport(), str, asciiMultiLine, ctx); } Vec2 AZ::FFont::GetTextSizeUInternal( @@ -746,7 +759,7 @@ uint32_t AZ::FFont::WriteTextQuadsToBuffers(SVF_P2F_C4B_T2F_F4B* verts, uint16_t return true; }; - CreateQuadsForText(m_defaultWindowContext->GetViewport(), x, y, z, str, asciiMultiLine, ctx, AddQuad); + CreateQuadsForText(GetDefaultWindowContext()->GetViewport(), x, y, z, str, asciiMultiLine, ctx, AddQuad); return numQuadsWritten; } @@ -1438,7 +1451,7 @@ void AZ::FFont::AddCharsToFontTexture(const char* chars, int glyphSizeX, int gly Vec2 AZ::FFont::GetKerning(uint32_t leftGlyph, uint32_t rightGlyph, const TextDrawContext& ctx) const { - return GetKerningInternal(m_defaultWindowContext->GetViewport(), leftGlyph, rightGlyph, ctx); + return GetKerningInternal(GetDefaultWindowContext()->GetViewport(), leftGlyph, rightGlyph, ctx); } Vec2 AZ::FFont::GetKerningInternal(const RHI::Viewport& viewport, uint32_t leftGlyph, uint32_t rightGlyph, const TextDrawContext& ctx) const @@ -1454,7 +1467,7 @@ float AZ::FFont::GetAscender(const TextDrawContext& ctx) const float AZ::FFont::GetBaseline(const TextDrawContext& ctx) const { - return GetBaselineInternal(m_defaultWindowContext->GetViewport(), ctx); + return GetBaselineInternal(GetDefaultWindowContext()->GetViewport(), ctx); } float AZ::FFont::GetBaselineInternal(const RHI::Viewport& viewport, const TextDrawContext& ctx) const From c05d4b44e4789eafdad6168bba28e46870d257cd Mon Sep 17 00:00:00 2001 From: nvsickle Date: Mon, 19 Apr 2021 15:08:40 -0700 Subject: [PATCH 23/67] Move supplemental EditorViewportWidget rendering to OnBeginPrepareRender to avoid sync issues --- Code/Sandbox/Editor/EditorViewportWidget.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Code/Sandbox/Editor/EditorViewportWidget.cpp b/Code/Sandbox/Editor/EditorViewportWidget.cpp index 695a0fa5f1..897b3c569d 100644 --- a/Code/Sandbox/Editor/EditorViewportWidget.cpp +++ b/Code/Sandbox/Editor/EditorViewportWidget.cpp @@ -276,9 +276,6 @@ void EditorViewportWidget::paintEvent([[maybe_unused]] QPaintEvent* event) if ((ge && ge->IsLevelLoaded()) || (GetType() != ET_ViewportCamera)) { setRenderOverlayVisible(true); - m_isOnPaint = true; - Update(); - m_isOnPaint = false; } else { @@ -809,6 +806,10 @@ void EditorViewportWidget::OnBeginPrepareRender() return; } + m_isOnPaint = true; + Update(); + m_isOnPaint = false; + float fNearZ = GetIEditor()->GetConsoleVar("cl_DefaultNearPlane"); float fFarZ = m_Camera.GetFarPlane(); From 482e423ec9294a416697a37f0f08054814963b55 Mon Sep 17 00:00:00 2001 From: nvsickle Date: Fri, 16 Apr 2021 12:00:13 -0700 Subject: [PATCH 24/67] Fix crash on default layout restore --- Code/Sandbox/Editor/LayoutWnd.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Code/Sandbox/Editor/LayoutWnd.cpp b/Code/Sandbox/Editor/LayoutWnd.cpp index 56c0bcb849..dc3ae14d90 100644 --- a/Code/Sandbox/Editor/LayoutWnd.cpp +++ b/Code/Sandbox/Editor/LayoutWnd.cpp @@ -418,8 +418,9 @@ void CLayoutWnd::CreateLayout(EViewLayout layout, bool bBindViewports, EViewport QRect rcView = rect(); rcView.setBottom(rcView.bottom() - m_infoBar->height()); + // Ensure we delete our old view immediately so it can relinquish its backing ViewportContext if (m_maximizedView) - m_maximizedView->deleteLater(); + delete m_maximizedView; m_maximizedView = new CLayoutViewPane(this); m_maximizedView->SetId(0); From d2fadcb0e37bc78b035e9b0cb3c37fa960a7b190 Mon Sep 17 00:00:00 2001 From: nvsickle Date: Fri, 16 Apr 2021 12:02:55 -0700 Subject: [PATCH 25/67] Fix context menu handling in multi-viewport scenarios (the logic bugs here were many and nuanced, but we're narrowing in on something robust). Specifically this: -Ensures key/mouse up event propagation works across multiple viewports -Ensures that mouse up events for manipulators only get delivered if there's a corresponding mouse down event -Also tidies up the "are we done processing events this tick?" logic in ViewportManipulatorController --- .../Editor/ViewportManipulatorController.cpp | 26 +++++++++++++++---- .../Source/Viewport/RenderViewportWidget.cpp | 19 +++++++++++--- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/Code/Sandbox/Editor/ViewportManipulatorController.cpp b/Code/Sandbox/Editor/ViewportManipulatorController.cpp index 910d037670..8ce2ea1cd9 100644 --- a/Code/Sandbox/Editor/ViewportManipulatorController.cpp +++ b/Code/Sandbox/Editor/ViewportManipulatorController.cpp @@ -95,6 +95,11 @@ bool ViewportManipulatorControllerInstance::HandleInputChannelEvent(const AzFram AZStd::optional overrideButton; AZStd::optional eventType; + // Because we receive events multiple times at separate priorities for manipulator events and + // viewport interaction events, we want to avoid updating our "last tick state" until we're on our last event, + // which currently is the low priority Interaction processor. + const bool finishedProcessingEvents = event.m_priority == InteractionPriority; + if (IsMouseMove(event.m_inputChannel)) { // Cache the ray trace results when doing manipulator interaction checks, no need to recalculate after @@ -120,10 +125,11 @@ bool ViewportManipulatorControllerInstance::HandleInputChannelEvent(const AzFram } else if (auto mouseButton = GetMouseButton(event.m_inputChannel); mouseButton != MouseButton::None) { + const AZ::u32 mouseButtonValue = static_cast(mouseButton); overrideButton = mouseButton; if (event.m_inputChannel.GetState() == InputChannel::State::Began) { - m_state.m_mouseButtons.m_mouseButtons |= static_cast(mouseButton); + m_state.m_mouseButtons.m_mouseButtons |= mouseButtonValue; if (IsDoubleClick(mouseButton)) { // Only remove the double click flag once we're done processing both Manipulator and Interaction events @@ -135,8 +141,8 @@ bool ViewportManipulatorControllerInstance::HandleInputChannelEvent(const AzFram } else { - // Only insert the double click timing once we're done processing both Manipulator and Interaction events, to avoid a false IsDoubleClick positive - if (event.m_priority == InteractionPriority) + // Only insert the double click timing once we're done processing events, to avoid a false IsDoubleClick positive + if (finishedProcessingEvents) { m_pendingDoubleClicks[mouseButton] = m_curTime; } @@ -145,8 +151,18 @@ bool ViewportManipulatorControllerInstance::HandleInputChannelEvent(const AzFram } else if (event.m_inputChannel.GetState() == InputChannel::State::Ended) { - m_state.m_mouseButtons.m_mouseButtons &= ~static_cast(mouseButton); - eventType = MouseEvent::Up; + // If we've actually logged a mouse down event, forward a mouse up event. + // This prevents corner cases like the context menu thinking it should be opened even though no one clicked in this viewport, + // due to RenderViewportWidget ensuring all controllers get InputChannel::State::Ended events. + if (m_state.m_mouseButtons.m_mouseButtons & mouseButtonValue) + { + // Erase the button from our state if we're done processing events. + if (event.m_priority == InteractionPriority) + { + m_state.m_mouseButtons.m_mouseButtons &= ~mouseButtonValue; + } + eventType = MouseEvent::Up; + } } } else if (auto keyboardModifier = GetKeyboardModifier(event.m_inputChannel); keyboardModifier != KeyboardModifier::None) diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/RenderViewportWidget.cpp b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/RenderViewportWidget.cpp index e08a5a045c..9ea2144289 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/RenderViewportWidget.cpp +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/RenderViewportWidget.cpp @@ -164,6 +164,8 @@ namespace AtomToolsFramework bool RenderViewportWidget::OnInputChannelEventFiltered(const AzFramework::InputChannel& inputChannel) { + bool shouldConsumeEvent = true; + // Grab keyboard focus if we've been clicked on. // Qt normally handles this for us, but we're filtering native events before they get // synthesized into QMouseEvents. @@ -175,9 +177,18 @@ namespace AtomToolsFramework // Don't consume new input events if we don't currently have focus. // We do forward Ended events, as they may be relevant to our current state // (e.g. a key gets released after we lose focus, it shouldn't remain "stuck"). - if (!hasFocus() && inputChannel.GetState() != AzFramework::InputChannel::State::Ended) + if (!hasFocus()) { - return false; + if (inputChannel.GetState() == AzFramework::InputChannel::State::Ended) + { + // Forward the input ended event to our controllers, but don't prevent other viewports from receiving it. + shouldConsumeEvent = false; + } + else + { + // Not an event we should listen to, abort + return false; + } } // If we receive a mouse button event from outside of our viewport, ignore it even if we have focus. @@ -196,7 +207,9 @@ namespace AtomToolsFramework } AzFramework::NativeWindowHandle windowId = reinterpret_cast(winId()); - return m_controllerList->HandleInputChannelEvent({GetId(), windowId, inputChannel}); + const bool eventHandled = m_controllerList->HandleInputChannelEvent({GetId(), windowId, inputChannel}); + // If our controllers handled the event and it's one we can safely consume (i.e. it's not an Ended event that other viewports might need), consume it. + return eventHandled && shouldConsumeEvent; } void RenderViewportWidget::OnTick([[maybe_unused]]float deltaTime, AZ::ScriptTimePoint time) From dd7334471f9920b6312738c5abcf9d5fc37e0b1d Mon Sep 17 00:00:00 2001 From: nvsickle Date: Fri, 16 Apr 2021 12:17:35 -0700 Subject: [PATCH 26/67] Fix comment punctuation --- .../Code/Source/Viewport/RenderViewportWidget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/RenderViewportWidget.cpp b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/RenderViewportWidget.cpp index 9ea2144289..bf46ece27b 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/RenderViewportWidget.cpp +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/RenderViewportWidget.cpp @@ -186,7 +186,7 @@ namespace AtomToolsFramework } else { - // Not an event we should listen to, abort + // Not an event we should listen to, abort. return false; } } From ebf41d2bdf58dcc3f7899bf94cf84e380c0f8428 Mon Sep 17 00:00:00 2001 From: nvsickle Date: Fri, 16 Apr 2021 14:26:58 -0700 Subject: [PATCH 27/67] Update code style --- Code/Sandbox/Editor/LayoutWnd.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Code/Sandbox/Editor/LayoutWnd.cpp b/Code/Sandbox/Editor/LayoutWnd.cpp index dc3ae14d90..34a96bca53 100644 --- a/Code/Sandbox/Editor/LayoutWnd.cpp +++ b/Code/Sandbox/Editor/LayoutWnd.cpp @@ -420,7 +420,9 @@ void CLayoutWnd::CreateLayout(EViewLayout layout, bool bBindViewports, EViewport // Ensure we delete our old view immediately so it can relinquish its backing ViewportContext if (m_maximizedView) + { delete m_maximizedView; + } m_maximizedView = new CLayoutViewPane(this); m_maximizedView->SetId(0); From 6abf17439a836ddbccd4258ebb97b1bc926cf1ea Mon Sep 17 00:00:00 2001 From: mnaumov Date: Mon, 19 Apr 2021 15:22:32 -0700 Subject: [PATCH 28/67] Adding "Create New Material" context menu option to folder in Material Editor Improving MaterialBrowser filter to show empty folders --- .../AssetBrowser/Search/SearchWidget.cpp | 9 +++++++++ .../AssetBrowser/Search/SearchWidget.h | 4 ++++ .../CreateMaterialDialog.cpp | 9 +++++++-- .../CreateMaterialDialog.h | 3 +++ .../Window/MaterialBrowserInteractions.cpp | 19 +++++++++++++++++++ .../Source/Window/MaterialBrowserWidget.cpp | 14 ++++++++++++-- 6 files changed, 54 insertions(+), 4 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Search/SearchWidget.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Search/SearchWidget.cpp index 7c2f26042f..d2edbcce32 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Search/SearchWidget.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Search/SearchWidget.cpp @@ -170,6 +170,15 @@ namespace AzToolsFramework return m_filter; } + QSharedPointer SearchWidget::GetStringFilter() const + { + return m_stringFilter; + } + + QSharedPointer SearchWidget::GetTypesFilter() const + { + return m_typesFilter; + } } // namespace AssetBrowser } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Search/SearchWidget.h b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Search/SearchWidget.h index 0453333c94..be649bc81d 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Search/SearchWidget.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Search/SearchWidget.h @@ -39,6 +39,10 @@ namespace AzToolsFramework QSharedPointer GetFilter() const; + QSharedPointer GetStringFilter() const; + + QSharedPointer GetTypesFilter() const; + QString GetFilterString() const { return textFilter(); } void ClearStringFilter() { ClearTextFilter(); } diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/CreateMaterialDialog/CreateMaterialDialog.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/CreateMaterialDialog/CreateMaterialDialog.cpp index 76aee99e52..6c30540392 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/CreateMaterialDialog/CreateMaterialDialog.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/CreateMaterialDialog/CreateMaterialDialog.cpp @@ -26,8 +26,14 @@ namespace MaterialEditor { CreateMaterialDialog::CreateMaterialDialog(QWidget* parent) + : CreateMaterialDialog(QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@")) + AZ_CORRECT_FILESYSTEM_SEPARATOR + "Materials", parent) + { + } + + CreateMaterialDialog::CreateMaterialDialog(const QString& path, QWidget* parent) : QDialog(parent) , m_ui(new Ui::CreateMaterialDialog) + , m_path(path) { m_ui->setupUi(this); @@ -77,8 +83,7 @@ namespace MaterialEditor { //Select a default location and unique name for the new material m_materialFileInfo = AtomToolsFramework::GetUniqueFileInfo( - QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@")) + - AZ_CORRECT_FILESYSTEM_SEPARATOR + "Materials" + + m_path + AZ_CORRECT_FILESYSTEM_SEPARATOR + "untitled." + AZ::RPI::MaterialSourceData::Extension).absoluteFilePath(); diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/CreateMaterialDialog/CreateMaterialDialog.h b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/CreateMaterialDialog/CreateMaterialDialog.h index 54d7c2175d..63d166e95c 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/CreateMaterialDialog/CreateMaterialDialog.h +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/CreateMaterialDialog/CreateMaterialDialog.h @@ -27,6 +27,7 @@ namespace MaterialEditor Q_OBJECT public: CreateMaterialDialog(QWidget* parent = nullptr); + CreateMaterialDialog(const QString& path, QWidget* parent = nullptr); ~CreateMaterialDialog() = default; QFileInfo m_materialFileInfo; @@ -34,6 +35,8 @@ namespace MaterialEditor private: QScopedPointer m_ui; + QString m_path; + void InitMaterialTypeSelection(); void InitMaterialFileSelection(); void UpdateMaterialTypeSelection(); diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserInteractions.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserInteractions.cpp index b0412c001c..167f7d38f5 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserInteractions.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserInteractions.cpp @@ -29,6 +29,7 @@ #include #include +#include #include #include @@ -246,6 +247,24 @@ namespace MaterialEditor } } }); + + menu->addSeparator(); + + QAction* createMaterialAction = menu->addAction(QObject::tr("Create New Material")); + QObject::connect(createMaterialAction, &QAction::triggered, caller, [caller, entry]() + { + CreateMaterialDialog createDialog(entry->GetFullPath().c_str(), caller); + createDialog.adjustSize(); + + if (createDialog.exec() == QDialog::Accepted && + !createDialog.m_materialFileInfo.absoluteFilePath().isEmpty() && + !createDialog.m_materialTypeFileInfo.absoluteFilePath().isEmpty()) + { + MaterialDocumentSystemRequestBus::Broadcast(&MaterialDocumentSystemRequestBus::Events::CreateDocumentFromFile, + createDialog.m_materialTypeFileInfo.absoluteFilePath().toUtf8().constData(), + createDialog.m_materialFileInfo.absoluteFilePath().toUtf8().constData()); + } + }); } void MaterialBrowserInteractions::AddPerforceMenuActions([[maybe_unused]] QWidget* caller, QMenu* menu, const AzToolsFramework::AssetBrowser::AssetBrowserEntry* entry) diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserWidget.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserWidget.cpp index 6272312b90..1d579e5a10 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserWidget.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserWidget.cpp @@ -115,19 +115,29 @@ namespace MaterialEditor { using namespace AzToolsFramework::AssetBrowser; + // Material Browser uses the following filters: + // 1. [All source files (no products) that contain products matching the assetType specified by searchWidget (default is materials and textures)] + // 2. [All folders (including empty folders)] + // 3. [All Sources and folders matching the search text typed in search widget] + // Final filter = ((1 OR 2) AND 3) + QSharedPointer sourceFilter(new EntryTypeFilter); sourceFilter->SetEntryType(AssetBrowserEntry::AssetEntryType::Source); + QSharedPointer assetTypeFilter(new CompositeFilter(CompositeFilter::LogicOperatorType::AND)); + assetTypeFilter->AddFilter(sourceFilter); + assetTypeFilter->AddFilter(m_ui->m_searchWidget->GetTypesFilter()); + QSharedPointer folderFilter(new EntryTypeFilter); folderFilter->SetEntryType(AssetBrowserEntry::AssetEntryType::Folder); QSharedPointer sourceOrFolderFilter(new CompositeFilter(CompositeFilter::LogicOperatorType::OR)); - sourceOrFolderFilter->AddFilter(sourceFilter); + sourceOrFolderFilter->AddFilter(assetTypeFilter); sourceOrFolderFilter->AddFilter(folderFilter); QSharedPointer finalFilter(new CompositeFilter(CompositeFilter::LogicOperatorType::AND)); finalFilter->AddFilter(sourceOrFolderFilter); - finalFilter->AddFilter(m_ui->m_searchWidget->GetFilter()); + finalFilter->AddFilter(m_ui->m_searchWidget->GetStringFilter()); return finalFilter; } From e2a76299938d5e7a2f942917e434f9f4f2f8cb3f Mon Sep 17 00:00:00 2001 From: nvsickle Date: Mon, 19 Apr 2021 15:24:08 -0700 Subject: [PATCH 29/67] Remove statistics rendering from EditorViewportWidget - it's wrong at the moment, and needs to be moved to a controller --- Code/Sandbox/Editor/EditorViewportWidget.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Code/Sandbox/Editor/EditorViewportWidget.cpp b/Code/Sandbox/Editor/EditorViewportWidget.cpp index 897b3c569d..3c714b1d4c 100644 --- a/Code/Sandbox/Editor/EditorViewportWidget.cpp +++ b/Code/Sandbox/Editor/EditorViewportWidget.cpp @@ -906,11 +906,6 @@ void EditorViewportWidget::OnBeginPrepareRender() m_debugDisplay->DepthTestOn(); PostWidgetRendering(); - - if (!m_renderer->IsStereoEnabled()) - { - GetIEditor()->GetSystem()->RenderStatistics(); - } } ////////////////////////////////////////////////////////////////////////// From 0472bc49aaf76351b6c7eedf3d873f61f9a9fe95 Mon Sep 17 00:00:00 2001 From: shiranj Date: Mon, 19 Apr 2021 15:25:51 -0700 Subject: [PATCH 30/67] Set winSlashReplacement to false when running incremental_build_util.py --- scripts/build/Jenkins/Jenkinsfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/build/Jenkins/Jenkinsfile b/scripts/build/Jenkins/Jenkinsfile index 7f269c0012..9751d5f31b 100644 --- a/scripts/build/Jenkins/Jenkinsfile +++ b/scripts/build/Jenkins/Jenkinsfile @@ -276,10 +276,10 @@ def PreBuildCommonSteps(Map pipelineConfig, String repositoryName, String projec else pythonCmd = 'python -u ' if(env.RECREATE_VOLUME?.toBoolean()) { - palSh("${pythonCmd} ${INCREMENTAL_BUILD_SCRIPT_PATH} --action delete --repository_name ${repositoryName} --project ${projectName} --pipeline ${pipeline} --branch ${branchName} --platform ${platform} --build_type ${buildType}", 'Deleting volume') + palSh("${pythonCmd} ${INCREMENTAL_BUILD_SCRIPT_PATH} --action delete --repository_name ${repositoryName} --project ${projectName} --pipeline ${pipeline} --branch ${branchName} --platform ${platform} --build_type ${buildType}", 'Deleting volume', winSlashReplacement=false) } timeout(5) { - palSh("${pythonCmd} ${INCREMENTAL_BUILD_SCRIPT_PATH} --action mount --repository_name ${repositoryName} --project ${projectName} --pipeline ${pipeline} --branch ${branchName} --platform ${platform} --build_type ${buildType}", 'Mounting volume') + palSh("${pythonCmd} ${INCREMENTAL_BUILD_SCRIPT_PATH} --action mount --repository_name ${repositoryName} --project ${projectName} --pipeline ${pipeline} --branch ${branchName} --platform ${platform} --build_type ${buildType}", 'Mounting volume', winSlashReplacement=false) } if(env.IS_UNIX) { From 34be0cd4b5feeb370a14873a90a37898de440bf9 Mon Sep 17 00:00:00 2001 From: mnaumov Date: Mon, 19 Apr 2021 15:31:45 -0700 Subject: [PATCH 31/67] Fixing string search --- .../MaterialEditor/Code/Source/Window/MaterialBrowserWidget.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserWidget.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserWidget.cpp index 1d579e5a10..406c585b73 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserWidget.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserWidget.cpp @@ -138,6 +138,7 @@ namespace MaterialEditor QSharedPointer finalFilter(new CompositeFilter(CompositeFilter::LogicOperatorType::AND)); finalFilter->AddFilter(sourceOrFolderFilter); finalFilter->AddFilter(m_ui->m_searchWidget->GetStringFilter()); + finalFilter->SetFilterPropagation(AssetBrowserEntryFilter::PropagateDirection::Down); return finalFilter; } From 6aabf2ee3db06bc56725b7cecea2e45f4d508621 Mon Sep 17 00:00:00 2001 From: nvsickle Date: Mon, 19 Apr 2021 15:36:25 -0700 Subject: [PATCH 32/67] Don't attempt to render manipulators in game mode --- Code/Sandbox/Editor/EditorViewportWidget.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Code/Sandbox/Editor/EditorViewportWidget.cpp b/Code/Sandbox/Editor/EditorViewportWidget.cpp index 3c714b1d4c..91c70b720f 100644 --- a/Code/Sandbox/Editor/EditorViewportWidget.cpp +++ b/Code/Sandbox/Editor/EditorViewportWidget.cpp @@ -881,6 +881,11 @@ void EditorViewportWidget::OnBeginPrepareRender() GetIEditor()->GetSystem()->SetViewCamera(m_Camera); + if (GetIEditor()->IsInGameMode()) + { + return; + } + PreWidgetRendering(); RenderAll(); From 23b9b3e12b4a9c870f38e7bc1753cd00dfca99de Mon Sep 17 00:00:00 2001 From: shiranj Date: Mon, 19 Apr 2021 15:52:43 -0700 Subject: [PATCH 33/67] Fix indentation --- scripts/build/bootstrap/incremental_build_util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build/bootstrap/incremental_build_util.py b/scripts/build/bootstrap/incremental_build_util.py index 0228f129d0..28bb70955e 100755 --- a/scripts/build/bootstrap/incremental_build_util.py +++ b/scripts/build/bootstrap/incremental_build_util.py @@ -205,7 +205,7 @@ def create_volume(ec2_client, availability_zone, repository_name, project, pipel 'ResourceType': 'volume', 'Tags': [ { 'Key': 'Name', 'Value': mount_name }, - {'Key': 'RepositoryName', 'Value': repository_name}, + { 'Key': 'RepositoryName', 'Value': repository_name}, { 'Key': 'Project', 'Value': project }, { 'Key': 'Pipeline', 'Value': pipeline }, { 'Key': 'BranchName', 'Value': branch }, From d1ba2155c52c410e91452ed0b130e692500d30d4 Mon Sep 17 00:00:00 2001 From: mnaumov Date: Mon, 19 Apr 2021 15:55:58 -0700 Subject: [PATCH 34/67] PR feedback --- .../Code/Source/Window/MaterialBrowserInteractions.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserInteractions.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserInteractions.cpp index 167f7d38f5..39654af211 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserInteractions.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserInteractions.cpp @@ -250,7 +250,7 @@ namespace MaterialEditor menu->addSeparator(); - QAction* createMaterialAction = menu->addAction(QObject::tr("Create New Material")); + QAction* createMaterialAction = menu->addAction(QObject::tr("Create Material...")); QObject::connect(createMaterialAction, &QAction::triggered, caller, [caller, entry]() { CreateMaterialDialog createDialog(entry->GetFullPath().c_str(), caller); From dee0f8470448c5ce4d60944f0db6df091e17c3f0 Mon Sep 17 00:00:00 2001 From: nvsickle Date: Mon, 19 Apr 2021 17:00:36 -0700 Subject: [PATCH 35/67] Clarified lazy initialization and added some thread sanity logic after discussion with @rgba16f --- .../Include/AtomLyIntegration/AtomFont/FFont.h | 1 + .../AtomFont/Code/Source/FFont.cpp | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/FFont.h b/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/FFont.h index a6066984c7..91fc0834ec 100644 --- a/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/FFont.h +++ b/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/FFont.h @@ -302,6 +302,7 @@ namespace AZ bool m_fontTexDirty = false; bool m_fontInitialized = false; + AZStd::atomic_bool m_fontInitializing = false; FontEffects m_effects; diff --git a/Gems/AtomLyIntegration/AtomFont/Code/Source/FFont.cpp b/Gems/AtomLyIntegration/AtomFont/Code/Source/FFont.cpp index 38024393fa..edbf148940 100644 --- a/Gems/AtomLyIntegration/AtomFont/Code/Source/FFont.cpp +++ b/Gems/AtomLyIntegration/AtomFont/Code/Source/FFont.cpp @@ -106,6 +106,14 @@ bool AZ::FFont::InitFont() return true; } + // If we're being initialized in another thread, abort. + if (m_fontInitializing) + { + return false; + } + + m_fontInitializing = true; + // Create and initialize DynamicDrawContext for font draw AZ::RPI::Ptr dynamicDraw = m_atomFont->GetOrCreateDynamicDrawForScene(GetDefaultViewportContext()->GetRenderScene().get()); @@ -129,6 +137,7 @@ bool AZ::FFont::InitFont() m_indexCount = 0; m_fontInitialized = true; + m_fontInitializing = false; return true; } @@ -293,7 +302,11 @@ void AZ::FFont::DrawStringUInternal( const bool asciiMultiLine, const TextDrawContext& ctx) { - InitFont(); + // Lazily ensure we're initialized before attempting to render. + if (!InitFont()) + { + return; + } if (!str || !m_vertexBuffer // vertex buffer isn't created until BootstrapScene is ready, Editor tries to render text before that. From 967d182ccc9f6deb7c2f95bd9c0cef3a5ff60fe8 Mon Sep 17 00:00:00 2001 From: srikappa Date: Mon, 19 Apr 2021 17:29:03 -0700 Subject: [PATCH 36/67] Fixed a couple of typos --- .../Prefab/Instance/InstanceUpdateExecutor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp index b307d8290c..71b1e04ec8 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp @@ -117,7 +117,7 @@ namespace AzToolsFramework "Could not find Template using Id '%llu'. Unable to update Instance.", currentTemplateId); - // Remove the instance from update queue if it's corresponding template couldn't be found + // Remove the instance from update queue if its corresponding template couldn't be found isUpdateSuccessful = false; m_instancesUpdateQueue.pop(); continue; @@ -128,7 +128,7 @@ namespace AzToolsFramework if (findInstancesResult.find(instanceToUpdate) == findInstancesResult.end()) { - // Since nested instances get reconstructed during propgation, remove any nested instance that no longer + // Since nested instances get reconstructed during propagation, remove any nested instance that no longer // maps to a template. isUpdateSuccessful = false; m_instancesUpdateQueue.pop(); From 7e48bee48fbef40e281ffb3f68aa82dcedf7e515 Mon Sep 17 00:00:00 2001 From: mnaumov Date: Mon, 19 Apr 2021 18:24:23 -0700 Subject: [PATCH 37/67] Fixing thumbnail pixelation --- .../AzToolsFramework/Thumbnails/ThumbnailWidget.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Thumbnails/ThumbnailWidget.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Thumbnails/ThumbnailWidget.cpp index f2b81fdb98..1aefa6f189 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Thumbnails/ThumbnailWidget.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Thumbnails/ThumbnailWidget.cpp @@ -79,7 +79,9 @@ namespace AzToolsFramework int realHeight = qMin(aznumeric_cast(originalWidth /aspectRatio), originalHeight); int realWidth = aznumeric_cast(realHeight * aspectRatio); int x = (originalWidth - realWidth) / 2; - painter.drawPixmap(QRect(x, 0, realHeight, realWidth), pixmap); + // pixmap needs to be manually scaled to produce smoother result and avoid looking pixelated + // using painter.setRenderHint(QPainter::SmoothPixmapTransform); does not seem to work + painter.drawPixmap(QPoint(x, 0), pixmap.scaled(realWidth, realHeight, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); } QWidget::paintEvent(event); } From 7901fe8625b3bbd31a569f0c7dd89a7d43cd8830 Mon Sep 17 00:00:00 2001 From: AMZN-daimini <82231674+AMZN-daimini@users.noreply.github.com> Date: Mon, 19 Apr 2021 21:52:10 -0700 Subject: [PATCH 38/67] Reset the whole Qt model when an entry in the EditorEntityModel is removed. (#48) (#82) An optimization introduced in Prefab mode currently changes the relative ordering of children, causing stale QModelIndex variables to still be referenced and crash the Editor sporadically. This change is theoretically a bit slower, but still much faster than the pre-optimization times. Co-authored-by: Shirang Jia Co-authored-by: Shirang Jia --- .../AzToolsFramework/UI/Outliner/EntityOutlinerListModel.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.cpp index ea281aacf7..de10ae18b4 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.cpp @@ -1344,14 +1344,15 @@ namespace AzToolsFramework emit EnableSelectionUpdates(false); auto parentIndex = GetIndexFromEntity(parentId); auto childIndex = GetIndexFromEntity(childId); - beginRemoveRows(parentIndex, childIndex.row(), childIndex.row()); + beginResetModel(); } void EntityOutlinerListModel::OnEntityInfoUpdatedRemoveChildEnd(AZ::EntityId parentId, AZ::EntityId childId) { (void)childId; AZ_PROFILE_FUNCTION(AZ::Debug::ProfileCategory::AzToolsFramework); - endRemoveRows(); + + endResetModel(); //must refresh partial lock/visibility of parents m_isFilterDirty = true; From 9cc0d3fa2d14596efdbfccf5e4650b778c60a78f Mon Sep 17 00:00:00 2001 From: dmcdiar Date: Tue, 20 Apr 2021 01:01:27 -0700 Subject: [PATCH 39/67] Minor cleanup --- .../DiffuseProbeGrid/DiffuseProbeGridClassificationPass.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.h b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.h index df0a237e1a..677e16ac42 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.h +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.h @@ -58,9 +58,6 @@ namespace AZ const RHI::PipelineState* m_pipelineState = nullptr; Data::Asset m_srgAsset; RHI::DispatchDirect m_dispatchArgs; - - // revision number of the ray tracing data when the shader table was built - uint32_t m_rayTracingDataRevision = 0; }; } // namespace Render } // namespace AZ From 33e61ad35ba191fd8490e02fe151476256e0bb54 Mon Sep 17 00:00:00 2001 From: mbalfour Date: Wed, 14 Apr 2021 16:03:27 -0500 Subject: [PATCH 40/67] Added SetEntityName and exposed Get/SetEntityName to the behavior context for use from scripts. (cherry picked from commit 4f2e0b74727cfe99c74ed588769a540f24d7aa46) --- .../AzCore/Component/ComponentApplication.cpp | 24 +++++++++++++++++++ .../AzCore/Component/ComponentApplication.h | 1 + .../Component/ComponentApplicationBus.h | 8 ++++++- 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp index a3af2648cf..a3986f72dd 100644 --- a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp +++ b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp @@ -341,6 +341,16 @@ namespace AZ ; } } + + if (auto behaviorContext = azrtti_cast(context)) + { + behaviorContext->EBus("ComponentApplicationBus") + ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common) + ->Attribute(AZ::Script::Attributes::Category, "Components") + + ->Event("GetEntityName", &ComponentApplicationBus::Events::GetEntityName) + ->Event("SetEntityName", &ComponentApplicationBus::Events::SetEntityName); + } } //========================================================================= @@ -1050,6 +1060,20 @@ namespace AZ return AZStd::string(); } + //========================================================================= + // SetEntityName + //========================================================================= + bool ComponentApplication::SetEntityName(const EntityId& id, const AZStd::string& name) + { + Entity* entity = FindEntity(id); + if (entity) + { + entity->SetName(name); + return true; + } + return false; + } + //========================================================================= // EnumerateEntities //========================================================================= diff --git a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h index ef5c813573..a66409eaf3 100644 --- a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h +++ b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h @@ -209,6 +209,7 @@ namespace AZ bool DeleteEntity(const EntityId& id) override; Entity* FindEntity(const EntityId& id) override; AZStd::string GetEntityName(const EntityId& id) override; + bool SetEntityName(const EntityId& id, const AZStd::string& name) override; void EnumerateEntities(const ComponentApplicationRequests::EntityCallback& callback) override; ComponentApplication* GetApplication() override { return this; } /// Returns the serialize context that has been registered with the app, if there is one. diff --git a/Code/Framework/AzCore/AzCore/Component/ComponentApplicationBus.h b/Code/Framework/AzCore/AzCore/Component/ComponentApplicationBus.h index d0f161aa39..a3602c303e 100644 --- a/Code/Framework/AzCore/AzCore/Component/ComponentApplicationBus.h +++ b/Code/Framework/AzCore/AzCore/Component/ComponentApplicationBus.h @@ -130,7 +130,13 @@ namespace AZ //! @param entity A reference to the entity whose name you are seeking. //! @return The name of the entity with the specified entity ID. //! If no entity is found for the specified ID, it returns an empty string. - virtual AZStd::string GetEntityName(const EntityId& id) { (void)id; return AZStd::string(); }; + virtual AZStd::string GetEntityName(const EntityId& id) { (void)id; return AZStd::string(); } + + //! Sets the name of the entity that has the specified entity ID. + //! Entity names are not enforced to be unique. + //! @param entityId A reference to the entity whose name you want to change. + //! @return True if the name was changed successfully, false if it wasn't. + virtual bool SetEntityName([[maybe_unused]] const EntityId& id, [[maybe_unused]] const AZStd::string& name) { return false; } //! The type that AZ::ComponentApplicationRequests::EnumerateEntities uses to //! pass entity callbacks to the application for enumeration. From e8459898a7f887008fe2375673e3cddb39f1d40c Mon Sep 17 00:00:00 2001 From: mbalfour Date: Wed, 14 Apr 2021 16:04:44 -0500 Subject: [PATCH 41/67] Exposed Quaternion::CreateFromEulerAnglesDegrees and Transform::Transform(Vector3, Quaternion, Vector3) to the behavior context to improve usability of these classes from scripts. (cherry picked from commit 8156beb21181f9ff20972c8ea8be5e3dc61f1700) --- Code/Framework/AzCore/AzCore/Math/Quaternion.cpp | 3 ++- Code/Framework/AzCore/AzCore/Math/Transform.cpp | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Code/Framework/AzCore/AzCore/Math/Quaternion.cpp b/Code/Framework/AzCore/AzCore/Math/Quaternion.cpp index ca09f8b453..143fe59ca7 100644 --- a/Code/Framework/AzCore/AzCore/Math/Quaternion.cpp +++ b/Code/Framework/AzCore/AzCore/Math/Quaternion.cpp @@ -258,7 +258,8 @@ namespace AZ Method("CreateFromMatrix3x3", &Quaternion::CreateFromMatrix3x3)-> Method("CreateFromMatrix4x4", &Quaternion::CreateFromMatrix4x4)-> Method("CreateFromAxisAngle", &Quaternion::CreateFromAxisAngle)-> - Method("CreateShortestArc", &Quaternion::CreateShortestArc) + Method("CreateShortestArc", &Quaternion::CreateShortestArc)-> + Method("CreateFromEulerAnglesDegrees", &Quaternion::CreateFromEulerAnglesDegrees) ; } } diff --git a/Code/Framework/AzCore/AzCore/Math/Transform.cpp b/Code/Framework/AzCore/AzCore/Math/Transform.cpp index 77d8658d0f..bb3f764492 100644 --- a/Code/Framework/AzCore/AzCore/Math/Transform.cpp +++ b/Code/Framework/AzCore/AzCore/Math/Transform.cpp @@ -250,6 +250,7 @@ namespace AZ Attribute(Script::Attributes::ExcludeFrom, Script::Attributes::ExcludeFlags::All)-> Attribute(Script::Attributes::Storage, Script::Attributes::StorageType::Value)-> Attribute(Script::Attributes::GenericConstructorOverride, &Internal::TransformDefaultConstructor)-> + Constructor()-> Method("GetBasis", &Transform::GetBasis)-> Method("GetBasisX", &Transform::GetBasisX)-> Method("GetBasisY", &Transform::GetBasisY)-> From 5aa4642c12df54a6f7c53986bbe6dd5169f89d5f Mon Sep 17 00:00:00 2001 From: mbalfour Date: Wed, 14 Apr 2021 16:05:50 -0500 Subject: [PATCH 42/67] Added another implicit converter to MaterialPropertyValue so that generated images can be used with material properties more easily. (cherry picked from commit 66d7e9672ca0d6ced068dd95d8b52f88b5492c1f) --- .../Include/Atom/RPI.Reflect/Material/MaterialPropertyValue.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Material/MaterialPropertyValue.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Material/MaterialPropertyValue.h index cafd31d8a5..758afb1c66 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Material/MaterialPropertyValue.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Material/MaterialPropertyValue.h @@ -65,6 +65,7 @@ namespace AZ MaterialPropertyValue(const Vector4& value) : m_value(value) {} MaterialPropertyValue(const Color& value) : m_value(value) {} MaterialPropertyValue(const Data::Asset& value) : m_value(value) {} + MaterialPropertyValue(const Data::Instance& value) : m_value(value) {} MaterialPropertyValue(const AZStd::string& value) : m_value(value) {} //! Copy constructor From 3e8625b78b83a56ae3f9557060f3e9bf4387517b Mon Sep 17 00:00:00 2001 From: mbalfour Date: Wed, 14 Apr 2021 16:09:02 -0500 Subject: [PATCH 43/67] Added "IsReadyToSpawn" to help detect when a spawner is ready to start spawning. Also added a small optimization to SetDynamicSliceByAssetId so that it doesn't do anything when setting it to the same value as before. (cherry picked from commit ff8a93e71f3017e8555012855f3e2155ec74a405) --- .../Source/Scripting/SpawnerComponent.cpp | 25 +++++++++++-------- .../Code/Source/Scripting/SpawnerComponent.h | 3 ++- .../Scripting/SpawnerComponentBus.h | 3 +++ 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/Gems/LmbrCentral/Code/Source/Scripting/SpawnerComponent.cpp b/Gems/LmbrCentral/Code/Source/Scripting/SpawnerComponent.cpp index 2595fc09fd..7b76a1465c 100644 --- a/Gems/LmbrCentral/Code/Source/Scripting/SpawnerComponent.cpp +++ b/Gems/LmbrCentral/Code/Source/Scripting/SpawnerComponent.cpp @@ -148,6 +148,7 @@ namespace LmbrCentral ->Event("GetCurrentEntitiesFromSpawnedSlice", &SpawnerComponentRequestBus::Events::GetCurrentEntitiesFromSpawnedSlice) ->Event("GetAllCurrentlySpawnedEntities", &SpawnerComponentRequestBus::Events::GetAllCurrentlySpawnedEntities) ->Event("SetDynamicSlice", &SpawnerComponentRequestBus::Events::SetDynamicSliceByAssetId) + ->Event("IsReadyToSpawn", &SpawnerComponentRequestBus::Events::IsReadyToSpawn) ; behaviorContext->EBus("SpawnerComponentNotificationBus") @@ -250,17 +251,15 @@ namespace LmbrCentral //========================================================================= void SpawnerComponent::SetDynamicSliceByAssetId(AZ::Data::AssetId& assetId) { - auto sliceAsset = AZ::Data::AssetManager::Instance().GetAsset(assetId, AZ::AzTypeInfo::Uuid(), m_sliceAsset.GetAutoLoadBehavior()); + if (m_sliceAsset.GetId() == assetId) + { + return; + } - if (sliceAsset.IsReady()) - { - m_sliceAsset = sliceAsset; - } - else - { - AZ::Data::AssetBus::Handler::BusDisconnect(); - AZ::Data::AssetBus::Handler::BusConnect(assetId); - } + m_sliceAsset = AZ::Data::AssetManager::Instance().GetAsset( + assetId, AZ::AzTypeInfo::Uuid(), m_sliceAsset.GetAutoLoadBehavior()); + AZ::Data::AssetBus::Handler::BusDisconnect(); + AZ::Data::AssetBus::Handler::BusConnect(assetId); } //========================================================================= @@ -444,6 +443,12 @@ namespace LmbrCentral return entities; } + //========================================================================= + bool SpawnerComponent::IsReadyToSpawn() + { + return m_sliceAsset.IsReady(); + } + //========================================================================= void SpawnerComponent::OnSlicePreInstantiate(const AZ::Data::AssetId& /*sliceAssetId*/, [[maybe_unused]] const AZ::SliceComponent::SliceInstanceAddress& sliceAddress) { diff --git a/Gems/LmbrCentral/Code/Source/Scripting/SpawnerComponent.h b/Gems/LmbrCentral/Code/Source/Scripting/SpawnerComponent.h index 3dee332df3..75f5db8df2 100644 --- a/Gems/LmbrCentral/Code/Source/Scripting/SpawnerComponent.h +++ b/Gems/LmbrCentral/Code/Source/Scripting/SpawnerComponent.h @@ -70,7 +70,8 @@ namespace LmbrCentral AZStd::vector GetCurrentlySpawnedSlices() override; bool HasAnyCurrentlySpawnedSlices() override; AZStd::vector GetCurrentEntitiesFromSpawnedSlice(const AzFramework::SliceInstantiationTicket& ticket) override; - AZStd::vector GetAllCurrentlySpawnedEntities(); + AZStd::vector GetAllCurrentlySpawnedEntities() override; + bool IsReadyToSpawn() override; ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// diff --git a/Gems/LmbrCentral/Code/include/LmbrCentral/Scripting/SpawnerComponentBus.h b/Gems/LmbrCentral/Code/include/LmbrCentral/Scripting/SpawnerComponentBus.h index 6122a747f3..92ca003300 100644 --- a/Gems/LmbrCentral/Code/include/LmbrCentral/Scripting/SpawnerComponentBus.h +++ b/Gems/LmbrCentral/Code/include/LmbrCentral/Scripting/SpawnerComponentBus.h @@ -91,6 +91,9 @@ namespace LmbrCentral //! Note that spawning is not instant, if a slice hasn't finished spawning then none of its entities are returned. //! If an entity has been destroyed since it was spawned, its ID is not returned. virtual AZStd::vector GetAllCurrentlySpawnedEntities() = 0; + + //! Returns whether or not the spawner is in a state that's ready to spawn. + virtual bool IsReadyToSpawn() = 0; }; using SpawnerComponentRequestBus = AZ::EBus; From 1256994696a847a0c82662a1994555ecccda22ba Mon Sep 17 00:00:00 2001 From: Aaron Ruiz Mora Date: Tue, 20 Apr 2021 15:38:26 +0100 Subject: [PATCH 44/67] Cleaning up NvCloth gem. Removed any reference to LmbrCentral and legacy renderer since now it uses Atom. (#154) - Removed any usage of LmbCentral and legacy renderer from NvCloth gem. - Cloth rule can only be added to Mesh groups, not allowed in Actor groups anymore. - Removed ActorAssetHelper since actors now share the mesh model format and therefore they also use MeshAssetHelper. - Updated NvCloth gem.json file with the fields from the template. - Updated cloth chicken asset to not convert axis. --- .../cloth/Chicken/Actor/chicken.fbx.assetinfo | 94 ++++++- Gems/NvCloth/Code/CMakeLists.txt | 20 +- .../ClothComponentMesh/ClothDebugDisplay.cpp | 27 +-- Gems/NvCloth/Code/Source/Module.cpp | 2 - .../Pipeline/RCExt/CgfClothExporter.cpp | 120 --------- .../Source/Pipeline/RCExt/CgfClothExporter.h | 50 ---- .../SceneAPIExt/ClothRuleBehavior.cpp | 6 +- .../Code/Source/System/SystemComponent.cpp | 3 - .../Code/Source/Utils/ActorAssetHelper.cpp | 229 ------------------ .../Code/Source/Utils/ActorAssetHelper.h | 49 ---- .../NvCloth/Code/Source/Utils/AssetHelper.cpp | 1 - Gems/NvCloth/Code/Source/Utils/AssetHelper.h | 3 - .../Code/Source/Utils/MeshAssetHelper.cpp | 6 - .../Code/Source/Utils/MeshAssetHelper.h | 6 - .../ClothComponentMeshTest.cpp | 7 +- Gems/NvCloth/Code/Tests/CryRenderMeshStub.h | 130 ---------- .../Tests/NvClothEditorTestEnvironment.cpp | 2 - .../Code/Tests/Utils/ActorAssetHelperTest.cpp | 16 -- Gems/NvCloth/Code/nvcloth_editor_files.cmake | 2 - Gems/NvCloth/Code/nvcloth_files.cmake | 2 - Gems/NvCloth/Code/nvcloth_tests_files.cmake | 1 - Gems/NvCloth/gem.json | 47 +--- 22 files changed, 104 insertions(+), 719 deletions(-) delete mode 100644 Gems/NvCloth/Code/Source/Pipeline/RCExt/CgfClothExporter.cpp delete mode 100644 Gems/NvCloth/Code/Source/Pipeline/RCExt/CgfClothExporter.h delete mode 100644 Gems/NvCloth/Code/Source/Utils/ActorAssetHelper.cpp delete mode 100644 Gems/NvCloth/Code/Source/Utils/ActorAssetHelper.h delete mode 100644 Gems/NvCloth/Code/Tests/CryRenderMeshStub.h diff --git a/Gems/NvCloth/Assets/Objects/cloth/Chicken/Actor/chicken.fbx.assetinfo b/Gems/NvCloth/Assets/Objects/cloth/Chicken/Actor/chicken.fbx.assetinfo index a6024e0c5f..92c20c02ac 100644 --- a/Gems/NvCloth/Assets/Objects/cloth/Chicken/Actor/chicken.fbx.assetinfo +++ b/Gems/NvCloth/Assets/Objects/cloth/Chicken/Actor/chicken.fbx.assetinfo @@ -8,7 +8,7 @@ "rules": [ { "$type": "MetaDataRule", - "metaData": "AdjustActor -actorID $(ACTORID) -name \"chicken\"\r\nActorSetCollisionMeshes -actorID $(ACTORID) -lod 0 -nodeList \"\"\r\nAdjustActor -actorID $(ACTORID) -nodesExcludedFromBounds \"\" -nodeAction \"select\"\r\nAdjustActor -actorID $(ACTORID) -nodeAction \"replace\" -attachmentNodes \"\"\r\n" + "metaData": "AdjustActor -actorID $(ACTORID) -name \"chicken\"\nActorSetCollisionMeshes -actorID $(ACTORID) -lod 0 -nodeList \"\"\nAdjustActor -actorID $(ACTORID) -nodesExcludedFromBounds \"\" -nodeAction \"select\"\nAdjustActor -actorID $(ACTORID) -nodeAction \"replace\" -attachmentNodes \"\"\nAdjustActor -actorID $(ACTORID) -mirrorSetup \"\"\n" }, { "$type": "ActorPhysicsSetupRule", @@ -50,15 +50,15 @@ { "Visible": true, "Position": [ - -0.03810190036892891, - 0.0, - -0.03132440149784088 + 0.08189810067415238, + -2.4586914726398847e-9, + -0.4713243842124939 ], "propertyVisibilityFlags": 248 }, { "$type": "SphereShapeConfiguration", - "Radius": 0.16069939732551576 + "Radius": 0.2406993955373764 } ] ] @@ -82,14 +82,38 @@ } ] ] + }, + { + "name": "def_c_feather2_joint", + "shapes": [ + [ + { + "Visible": true, + "Position": [ + 0.06151500344276428, + 0.1300000101327896, + 7.729977369308472e-8 + ], + "Rotation": [ + 0.0, + 0.7071062922477722, + 0.0, + 0.7071072459220886 + ], + "propertyVisibilityFlags": 248 + }, + { + "$type": "CapsuleShapeConfiguration", + "Height": 0.5730299949645996, + "Radius": 0.06151498109102249 + } + ] + ] } ] } } } - }, - { - "$type": "CoordinateSystemRule" } ] } @@ -99,47 +123,94 @@ "name": "chicken", "nodeSelectionList": { "selectedNodes": [ - {}, "RootNode", "RootNode.chicken_skeleton", "RootNode.chicken_feet_skin", "RootNode.chicken_eyes_skin", "RootNode.chicken_body_skin", "RootNode.chicken_mohawk", + "RootNode.chicken_skeleton.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint", + "RootNode.chicken_feet_skin.SkinWeight_0", + "RootNode.chicken_feet_skin.map1", + "RootNode.chicken_feet_skin.chicken_body_mat", + "RootNode.chicken_eyes_skin.SkinWeight_0", + "RootNode.chicken_eyes_skin.uvSet1", + "RootNode.chicken_eyes_skin.chicken_eye_mat", + "RootNode.chicken_body_skin.SkinWeight_0", + "RootNode.chicken_body_skin.map1", + "RootNode.chicken_body_skin.chicken_body_mat", + "RootNode.chicken_mohawk.SkinWeight_0", + "RootNode.chicken_mohawk.colorSet1", + "RootNode.chicken_mohawk.map1", + "RootNode.chicken_mohawk.mohawkMat", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_l_uprLeg_joint", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_r_uprLeg_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_l_uprLeg_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_l_uprLeg_joint.def_l_lwrLeg_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_r_uprLeg_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_r_uprLeg_joint.def_r_lwrLeg_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_l_wing1_joint", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_r_wing1_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_l_uprLeg_joint.def_l_lwrLeg_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_l_uprLeg_joint.def_l_lwrLeg_joint.def_l_foot_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_r_uprLeg_joint.def_r_lwrLeg_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_r_uprLeg_joint.def_r_lwrLeg_joint.def_r_foot_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_tail1_joint", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_l_wing1_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_l_wing1_joint.def_l_wing2_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_r_wing1_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_r_wing1_joint.def_r_wing2_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_l_uprLeg_joint.def_l_lwrLeg_joint.def_l_foot_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_l_uprLeg_joint.def_l_lwrLeg_joint.def_l_foot_joint.def_l_ball_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_r_uprLeg_joint.def_r_lwrLeg_joint.def_r_foot_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_r_uprLeg_joint.def_r_lwrLeg_joint.def_r_foot_joint.def_r_ball_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_tail1_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_tail1_joint.def_c_tail2_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_l_wing1_joint.def_l_wing2_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_l_wing1_joint.def_l_wing2_joint.def_l_wing_end", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_r_wing1_joint.def_r_wing2_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_r_wing1_joint.def_r_wing2_joint.def_r_wing_end", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_l_uprLeg_joint.def_l_lwrLeg_joint.def_l_foot_joint.def_l_ball_joint.transform", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_r_uprLeg_joint.def_r_lwrLeg_joint.def_r_foot_joint.def_r_ball_joint.transform", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_tail1_joint.def_c_tail2_joint.transform", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_mouth_joint", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_waddle1_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_l_wing1_joint.def_l_wing2_joint.def_l_wing_end.transform", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_r_wing1_joint.def_r_wing2_joint.def_r_wing_end.transform", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint.def_c_feather2_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_mouth_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_mouth_joint.def_c_mouth_end", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_waddle1_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_waddle1_joint.def_c_waddle2_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint.def_c_feather2_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint.def_c_feather2_joint.def_c_feather3_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_mouth_joint.def_c_mouth_end.transform", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_waddle1_joint.def_c_waddle2_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_waddle1_joint.def_c_waddle2_joint.def_c_waddle3_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint.def_c_feather2_joint.def_c_feather3_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint.def_c_feather2_joint.def_c_feather3_joint.def_c_feather4_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_waddle1_joint.def_c_waddle2_joint.def_c_waddle3_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_waddle1_joint.def_c_waddle2_joint.def_c_waddle3_joint.def_c_waddle_end", - "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint.def_c_feather2_joint.def_c_feather3_joint.def_c_feather4_joint.def_c_feather_end" + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint.def_c_feather2_joint.def_c_feather3_joint.def_c_feather4_joint.transform", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint.def_c_feather2_joint.def_c_feather3_joint.def_c_feather4_joint.def_c_feather_end", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_waddle1_joint.def_c_waddle2_joint.def_c_waddle3_joint.def_c_waddle_end.transform", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint.def_c_feather2_joint.def_c_feather3_joint.def_c_feather4_joint.def_c_feather_end.transform" ] }, "rules": { @@ -154,9 +225,6 @@ { "$type": "MaterialRule" }, - { - "$type": "CoordinateSystemRule" - }, { "$type": "ClothRule", "meshNodeName": "RootNode.chicken_mohawk", diff --git a/Gems/NvCloth/Code/CMakeLists.txt b/Gems/NvCloth/Code/CMakeLists.txt index 8c2c5cafab..983e7ff8f8 100644 --- a/Gems/NvCloth/Code/CMakeLists.txt +++ b/Gems/NvCloth/Code/CMakeLists.txt @@ -30,8 +30,12 @@ ly_add_target( BUILD_DEPENDENCIES PUBLIC 3rdParty::NvCloth - Gem::LmbrCentral - Gem::AtomLyIntegration_CommonFeatures.Static + # CryCommon required for 'gEnv->IsDedicated()'. + # Because of this the module will need CrySystemEventBus to initialize gEnv + # and tests targets will need to fake gEnv. To be removed when there is + # an AZ replacement for asking if the game is running on a server or not. + Legacy::CryCommon + Gem::AtomLyIntegration_CommonFeatures.Public PRIVATE Gem::EMotionFXStaticLib ) @@ -50,10 +54,9 @@ ly_add_target( PUBLIC AZ::AzCore PRIVATE - Legacy::CryCommon Gem::NvCloth.Static RUNTIME_DEPENDENCIES - Gem::LmbrCentral + Gem::AtomLyIntegration_CommonFeatures ) if(PAL_TRAIT_BUILD_HOST_TOOLS) @@ -76,8 +79,6 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS) Gem::NvCloth.Static AZ::AzToolsFramework AZ::SceneCore - PRIVATE - Gem::EMotionFXStaticLib ) ly_add_target( @@ -95,10 +96,9 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS) NVCLOTH_EDITOR BUILD_DEPENDENCIES PRIVATE - Legacy::CryCommon Gem::NvCloth.Editor.Static RUNTIME_DEPENDENCIES - Gem::LmbrCentral.Editor + Gem::AtomLyIntegration_CommonFeatures.Editor ) endif() @@ -118,7 +118,6 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED) Source BUILD_DEPENDENCIES PRIVATE - Legacy::CryCommon AZ::AzTestShared AZ::AzTest Gem::NvCloth.Static @@ -126,7 +125,6 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED) Gem::EMotionFX.Tests.Static RUNTIME_DEPENDENCIES Gem::EMotionFX - Gem::LmbrCentral ) ly_add_googletest( NAME Gem::NvCloth.Tests @@ -148,7 +146,6 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED) NVCLOTH_EDITOR BUILD_DEPENDENCIES PRIVATE - Legacy::CryCommon AZ::AzTestShared AZ::AzTest AZ::AzToolsFrameworkTestCommon @@ -157,7 +154,6 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED) Gem::EMotionFX.Tests.Static RUNTIME_DEPENDENCIES Gem::EMotionFX.Editor - Gem::LmbrCentral.Editor ) ly_add_googletest( NAME Gem::NvCloth.Editor.Tests diff --git a/Gems/NvCloth/Code/Source/Components/ClothComponentMesh/ClothDebugDisplay.cpp b/Gems/NvCloth/Code/Source/Components/ClothComponentMesh/ClothDebugDisplay.cpp index d5f891e117..809a3a5129 100644 --- a/Gems/NvCloth/Code/Source/Components/ClothComponentMesh/ClothDebugDisplay.cpp +++ b/Gems/NvCloth/Code/Source/Components/ClothComponentMesh/ClothDebugDisplay.cpp @@ -13,7 +13,6 @@ #include #include -#include #include #include @@ -285,29 +284,11 @@ namespace NvCloth AzFramework::DebugDisplayRequests& debugDisplay, float radius, float height, const AZ::Transform& transform, - const AZ::Color& color) + [[maybe_unused]] const AZ::Color& color) { - debugDisplay.PushMatrix(transform); + const float heightStraightSection = AZStd::max(AZ::Constants::FloatEpsilon, height - 2.0f * radius); - AZStd::vector capsuleVertexBuffer; - AZStd::vector capsuleIndexBuffer; - AZStd::vector capsuleLineBuffer; - const AZ::u32 sides = 16; - const AZ::u32 capSegments = 8; - - LmbrCentral::CapsuleGeometrySystemRequestBus::Broadcast( - &LmbrCentral::CapsuleGeometrySystemRequestBus::Events::GenerateCapsuleMesh, - radius, - height, - sides, capSegments, - capsuleVertexBuffer, - capsuleIndexBuffer, - capsuleLineBuffer - ); - - debugDisplay.DrawTrianglesIndexed(capsuleVertexBuffer, capsuleIndexBuffer, color); - debugDisplay.DrawLines(capsuleLineBuffer, AzFramework::ViewportColors::WireColor); - - debugDisplay.PopMatrix(); + debugDisplay.SetColor(AzFramework::ViewportColors::WireColor); + debugDisplay.DrawWireCapsule(transform.GetTranslation(), transform.GetBasisZ(), radius, heightStraightSection); } } // namespace NvCloth diff --git a/Gems/NvCloth/Code/Source/Module.cpp b/Gems/NvCloth/Code/Source/Module.cpp index 3a884b306c..08d673fd07 100644 --- a/Gems/NvCloth/Code/Source/Module.cpp +++ b/Gems/NvCloth/Code/Source/Module.cpp @@ -25,7 +25,6 @@ #include #include #include -#include #endif //NVCLOTH_EDITOR namespace NvCloth @@ -59,7 +58,6 @@ namespace NvCloth EditorSystemComponent::CreateDescriptor(), EditorClothComponent::CreateDescriptor(), Pipeline::ClothRuleBehavior::CreateDescriptor(), - Pipeline::CgfClothExporter::CreateDescriptor(), #endif //NVCLOTH_EDITOR }); } diff --git a/Gems/NvCloth/Code/Source/Pipeline/RCExt/CgfClothExporter.cpp b/Gems/NvCloth/Code/Source/Pipeline/RCExt/CgfClothExporter.cpp deleted file mode 100644 index 9c4e44998f..0000000000 --- a/Gems/NvCloth/Code/Source/Pipeline/RCExt/CgfClothExporter.cpp +++ /dev/null @@ -1,120 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ - -#include - -#include // Needed for CGFContent.h -#include -#include -#include - -#include -#include -#include -#include - -#include - -#include - -namespace NvCloth -{ - namespace Pipeline - { - namespace - { - // Index for the Vertex color stream that contains the cloth inverse masses. - const int ClothVertexBufferStreamIndex = 1; - } - - CgfClothExporter::CgfClothExporter() - { - // Binding the processing functions so when exporters call - // SceneAPI::Events::Process() these functions will - // get called if their Context was used. - BindToCall(&CgfClothExporter::ProcessMeshNodeContext); - BindToCall(&CgfClothExporter::ProcessContainerContext); - } - - void CgfClothExporter::Reflect(AZ::ReflectContext* context) - { - AZ::SerializeContext* serializeContext = azrtti_cast(context); - if (serializeContext) - { - serializeContext->Class()->Version(1); - } - } - - AZ::SceneAPI::Events::ProcessingResult CgfClothExporter::ProcessContainerContext(AZ::RC::ContainerExportContext& context) const - { - if (!context.m_group.GetRuleContainerConst().ContainsRuleOfType()) - { - return AZ::SceneAPI::Events::ProcessingResult::Ignored; - } - - if (context.m_phase == AZ::RC::Phase::Finalizing) - { - if (context.m_container.GetExportInfo()->bMergeAllNodes) - { - AZ_TracePrintf(AZ::SceneAPI::Utilities::ErrorWindow, - "Mesh group '%s' has cloth rules and trying to merge all nodes.", - context.m_group.GetName().c_str()); - return AZ::SceneAPI::Events::ProcessingResult::Failure; - } - } - else - { - // If the current mesh group contains a cloth rule it should not merge all the nodes. - context.m_container.GetExportInfo()->bMergeAllNodes = false; - } - - return AZ::SceneAPI::Events::ProcessingResult::Success; - } - - AZ::SceneAPI::Events::ProcessingResult CgfClothExporter::ProcessMeshNodeContext(AZ::RC::MeshNodeExportContext& context) const - { - if (context.m_phase != AZ::RC::Phase::Filling) - { - return AZ::SceneAPI::Events::ProcessingResult::Ignored; - } - - AZStd::vector clothData = - AZ::SceneAPI::DataTypes::IClothRule::FindClothData( - context.m_scene.GetGraph(), - context.m_nodeIndex, - static_cast(context.m_mesh.GetVertexCount()), - context.m_group.GetRuleContainerConst()); - - if (!clothData.empty()) - { - const int numVertices = context.m_mesh.GetVertexCount(); - - // Allocate and get the vertex color stream for cloth - context.m_mesh.ReallocStream(CMesh::COLORS, ClothVertexBufferStreamIndex, numVertices); - auto meshColorStream = context.m_mesh.GetStreamPtr(CMesh::COLORS, ClothVertexBufferStreamIndex); - AZ_Assert(meshColorStream, "Mesh color stream is invalid"); - - for (int i = 0; i < numVertices; ++i) - { - const auto& clothVertexData = clothData[i]; - meshColorStream[i] = SMeshColor( - clothVertexData.GetR8(), - clothVertexData.GetG8(), - clothVertexData.GetB8(), - clothVertexData.GetA8()); - } - } - - return AZ::SceneAPI::Events::ProcessingResult::Success; - } - } // namespace Pipeline -} // namespace NvCloth diff --git a/Gems/NvCloth/Code/Source/Pipeline/RCExt/CgfClothExporter.h b/Gems/NvCloth/Code/Source/Pipeline/RCExt/CgfClothExporter.h deleted file mode 100644 index d02f8d7f99..0000000000 --- a/Gems/NvCloth/Code/Source/Pipeline/RCExt/CgfClothExporter.h +++ /dev/null @@ -1,50 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ - -#pragma once - -#include - -namespace AZ -{ - namespace RC - { - struct MeshNodeExportContext; - struct ContainerExportContext; - } -} - -namespace NvCloth -{ - namespace Pipeline - { - //! This class processes the Scene graph to export cloth data into CGF. - class CgfClothExporter - : public AZ::SceneAPI::SceneCore::RCExportingComponent - { - public: - AZ_COMPONENT(CgfClothExporter, "{3D7287BB-1109-4220-AC44-AEBA59E03FFF}", AZ::SceneAPI::SceneCore::RCExportingComponent); - - CgfClothExporter(); - - static void Reflect(AZ::ReflectContext* context); - - //! Process call at CGF Container level. - //! This function gets called once per Mesh Group from CGF Group Exporter when it's processing meshes. - AZ::SceneAPI::Events::ProcessingResult ProcessContainerContext(AZ::RC::ContainerExportContext& context) const; - - //! Process call at Mesh Node level. - //! This function gets called once per Mesh Node inside a Mesh Group from CGF Group Exporter when it's processing meshes. - AZ::SceneAPI::Events::ProcessingResult ProcessMeshNodeContext(AZ::RC::MeshNodeExportContext& context) const; - }; - } // namespace Pipeline -} // namespace NvCloth diff --git a/Gems/NvCloth/Code/Source/Pipeline/SceneAPIExt/ClothRuleBehavior.cpp b/Gems/NvCloth/Code/Source/Pipeline/SceneAPIExt/ClothRuleBehavior.cpp index c04b7f71ef..63aa651aa2 100644 --- a/Gems/NvCloth/Code/Source/Pipeline/SceneAPIExt/ClothRuleBehavior.cpp +++ b/Gems/NvCloth/Code/Source/Pipeline/SceneAPIExt/ClothRuleBehavior.cpp @@ -15,7 +15,6 @@ #include #include -#include #include #include @@ -100,9 +99,8 @@ namespace NvCloth bool ClothRuleBehavior::IsValidGroupType(const AZ::SceneAPI::DataTypes::ISceneNodeGroup& group) const { - // Cloth rules are available in Mesh and Actor Groups - return group.RTTI_IsTypeOf(AZ::SceneAPI::DataTypes::IMeshGroup::TYPEINFO_Uuid()) - || group.RTTI_IsTypeOf(EMotionFX::Pipeline::Group::IActorGroup::TYPEINFO_Uuid()); + // Cloth rules are available in Mesh Groups + return group.RTTI_IsTypeOf(AZ::SceneAPI::DataTypes::IMeshGroup::TYPEINFO_Uuid()); } bool ClothRuleBehavior::UpdateClothRules(AZ::SceneAPI::Containers::Scene& scene) diff --git a/Gems/NvCloth/Code/Source/System/SystemComponent.cpp b/Gems/NvCloth/Code/Source/System/SystemComponent.cpp index b73622b883..dbddb62d2b 100644 --- a/Gems/NvCloth/Code/Source/System/SystemComponent.cpp +++ b/Gems/NvCloth/Code/Source/System/SystemComponent.cpp @@ -10,9 +10,6 @@ * */ -#include -#include - #include #include #include diff --git a/Gems/NvCloth/Code/Source/Utils/ActorAssetHelper.cpp b/Gems/NvCloth/Code/Source/Utils/ActorAssetHelper.cpp deleted file mode 100644 index 5a60b6d7e5..0000000000 --- a/Gems/NvCloth/Code/Source/Utils/ActorAssetHelper.cpp +++ /dev/null @@ -1,229 +0,0 @@ -/* - * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or - * its licensors. - * - * For complete copyright and license terms please see the LICENSE at the root of this - * distribution (the "License"). All use of this software is governed by the License, - * or, if provided, by the license below or the license accompanying this file. Do not - * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - */ - -#include - -// Needed to access the Mesh information inside Actor. -#include -#include -#include -#include - -#include - -namespace NvCloth -{ - ActorAssetHelper::ActorAssetHelper(AZ::EntityId entityId) - : AssetHelper(entityId) - { - } - - void ActorAssetHelper::GatherClothMeshNodes(MeshNodeList& meshNodes) - { - EMotionFX::ActorInstance* actorInstance = nullptr; - EMotionFX::Integration::ActorComponentRequestBus::EventResult( - actorInstance, m_entityId, &EMotionFX::Integration::ActorComponentRequestBus::Events::GetActorInstance); - if (!actorInstance) - { - return; - } - - const EMotionFX::Actor* actor = actorInstance->GetActor(); - if (!actor) - { - return; - } - - const uint32 numNodes = actor->GetNumNodes(); - const uint32 numLODs = actor->GetNumLODLevels(); - - for (uint32 lodLevel = 0; lodLevel < numLODs; ++lodLevel) - { - for (uint32 nodeIndex = 0; nodeIndex < numNodes; ++nodeIndex) - { - const EMotionFX::Mesh* mesh = actor->GetMesh(lodLevel, nodeIndex); - if (!mesh) - { - continue; - } - - const bool hasClothData = (mesh->FindOriginalVertexData(EMotionFX::Mesh::ATTRIB_CLOTH_DATA) != nullptr); - if (hasClothData) - { - const EMotionFX::Node* node = actor->GetSkeleton()->GetNode(nodeIndex); - AZ_Assert(node, "Invalid node %u in actor '%s'", nodeIndex, actor->GetFileNameString().c_str()); - meshNodes.push_back(node->GetNameString()); - } - } - } - } - - bool ActorAssetHelper::ObtainClothMeshNodeInfo( - const AZStd::string& meshNode, - MeshNodeInfo& meshNodeInfo, - MeshClothInfo& meshClothInfo) - { - AZ_PROFILE_FUNCTION(AZ::Debug::ProfileCategory::Cloth); - - EMotionFX::ActorInstance* actorInstance = nullptr; - EMotionFX::Integration::ActorComponentRequestBus::EventResult( - actorInstance, m_entityId, &EMotionFX::Integration::ActorComponentRequestBus::Events::GetActorInstance); - if (!actorInstance) - { - return false; - } - - const EMotionFX::Actor* actor = actorInstance->GetActor(); - if (!actor) - { - return false; - } - - const uint32 numNodes = actor->GetNumNodes(); - const uint32 numLODs = actor->GetNumLODLevels(); - - const EMotionFX::Mesh* emfxMesh = nullptr; - uint32 meshFirstPrimitiveIndex = 0; - - // Find the render data of the mesh node - for (uint32 lodLevel = 0; lodLevel < numLODs; ++lodLevel) - { - meshFirstPrimitiveIndex = 0; - - for (uint32 nodeIndex = 0; nodeIndex < numNodes; ++nodeIndex) - { - const EMotionFX::Mesh* mesh = actor->GetMesh(lodLevel, nodeIndex); - if (!mesh || mesh->GetIsCollisionMesh()) - { - // Skip invalid and collision meshes. - continue; - } - - const EMotionFX::Node* node = actor->GetSkeleton()->GetNode(nodeIndex); - if (meshNode != node->GetNameString()) - { - // Skip. Increase the index of all primitives of the mesh we're skipping. - meshFirstPrimitiveIndex += mesh->GetNumSubMeshes(); - continue; - } - - // Mesh found, save the lod in mesh info - meshNodeInfo.m_lodLevel = lodLevel; - emfxMesh = mesh; - break; - } - - if (emfxMesh) - { - break; - } - } - - bool infoObtained = false; - - if (emfxMesh) - { - bool dataCopied = CopyDataFromEMotionFXMesh(*emfxMesh, meshClothInfo); - - if (dataCopied) - { - const uint32 numSubMeshes = emfxMesh->GetNumSubMeshes(); - for (uint32 subMeshIndex = 0; subMeshIndex < numSubMeshes; ++subMeshIndex) - { - const EMotionFX::SubMesh* emfxSubMesh = emfxMesh->GetSubMesh(subMeshIndex); - - MeshNodeInfo::SubMesh subMesh; - subMesh.m_primitiveIndex = static_cast(meshFirstPrimitiveIndex + subMeshIndex); - subMesh.m_verticesFirstIndex = emfxSubMesh->GetStartVertex(); - subMesh.m_numVertices = emfxSubMesh->GetNumVertices(); - subMesh.m_indicesFirstIndex = emfxSubMesh->GetStartIndex(); - subMesh.m_numIndices = emfxSubMesh->GetNumIndices(); - - meshNodeInfo.m_subMeshes.push_back(subMesh); - } - - infoObtained = true; - } - else - { - AZ_Error("ActorAssetHelper", false, "Failed to extract data from node %s in actor %s", - meshNode.c_str(), actor->GetFileNameString().c_str()); - } - } - - return infoObtained; - } - - bool ActorAssetHelper::CopyDataFromEMotionFXMesh( - const EMotionFX::Mesh& emfxMesh, - MeshClothInfo& meshClothInfo) - { - const int numVertices = emfxMesh.GetNumVertices(); - const int numIndices = emfxMesh.GetNumIndices(); - if (numVertices == 0 || numIndices == 0) - { - return false; - } - - const uint32* sourceIndices = emfxMesh.GetIndices(); - const AZ::Vector3* sourcePositions = static_cast(emfxMesh.FindOriginalVertexData(EMotionFX::Mesh::ATTRIB_POSITIONS)); - const AZ::u32* sourceClothData = static_cast(emfxMesh.FindOriginalVertexData(EMotionFX::Mesh::ATTRIB_CLOTH_DATA)); - const AZ::Vector2* sourceUVs = static_cast(emfxMesh.FindOriginalVertexData(EMotionFX::Mesh::ATTRIB_UVCOORDS, 0)); // first UV set - - if (!sourceIndices || !sourcePositions || !sourceClothData) - { - return false; - } - - const SimUVType uvZero(0.0f, 0.0f); - - meshClothInfo.m_particles.resize_no_construct(numVertices); - meshClothInfo.m_uvs.resize_no_construct(numVertices); - meshClothInfo.m_motionConstraints.resize_no_construct(numVertices); - meshClothInfo.m_backstopData.resize_no_construct(numVertices); - for (int index = 0; index < numVertices; ++index) - { - AZ::Color clothVertexData; - clothVertexData.FromU32(sourceClothData[index]); - - const float inverseMass = clothVertexData.GetR(); - const float motionConstraint = clothVertexData.GetG(); - const float backstopRadius = clothVertexData.GetA(); - const float backstopOffset = ConvertBackstopOffset(clothVertexData.GetB()); - - meshClothInfo.m_particles[index].Set( - sourcePositions[index], - inverseMass); - - meshClothInfo.m_motionConstraints[index] = motionConstraint; - meshClothInfo.m_backstopData[index].Set(backstopOffset, backstopRadius); - - meshClothInfo.m_uvs[index] = (sourceUVs) ? SimUVType(sourceUVs[index].GetX(), sourceUVs[index].GetY()) : uvZero; - } - - meshClothInfo.m_indices.resize_no_construct(numIndices); - // Fast copy when SimIndexType is the same size as the EMFX indices type. - if constexpr (sizeof(SimIndexType) == sizeof(uint32)) - { - memcpy(meshClothInfo.m_indices.data(), sourceIndices, numIndices * sizeof(SimIndexType)); - } - else - { - for (int index = 0; index < numIndices; ++index) - { - meshClothInfo.m_indices[index] = static_cast(sourceIndices[index]); - } - } - - return true; - } -} // namespace NvCloth diff --git a/Gems/NvCloth/Code/Source/Utils/ActorAssetHelper.h b/Gems/NvCloth/Code/Source/Utils/ActorAssetHelper.h deleted file mode 100644 index ce2ede8e4b..0000000000 --- a/Gems/NvCloth/Code/Source/Utils/ActorAssetHelper.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or - * its licensors. - * - * For complete copyright and license terms please see the LICENSE at the root of this - * distribution (the "License"). All use of this software is governed by the License, - * or, if provided, by the license below or the license accompanying this file. Do not - * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - */ - -#pragma once - -#include - -namespace EMotionFX -{ - class Mesh; -} - -namespace NvCloth -{ - //! Helper class to obtain cloth information from an Actor Asset. - class ActorAssetHelper - : public AssetHelper - { - public: - AZ_RTTI(ActorAssetHelper, "{3246EAC6-595F-4AFB-BA10-44EB0B824398}", AssetHelper); - - explicit ActorAssetHelper(AZ::EntityId entityId); - - // AssetHelper overrides ... - void GatherClothMeshNodes(MeshNodeList& meshNodes) override; - bool ObtainClothMeshNodeInfo( - const AZStd::string& meshNode, - MeshNodeInfo& meshNodeInfo, - MeshClothInfo& meshClothInfo) override; - bool DoesSupportSkinnedAnimation() const override - { - return true; - } - - private: - bool CopyDataFromEMotionFXMesh( - const EMotionFX::Mesh& emfxMesh, - MeshClothInfo& meshClothInfo); - }; -} // namespace NvCloth diff --git a/Gems/NvCloth/Code/Source/Utils/AssetHelper.cpp b/Gems/NvCloth/Code/Source/Utils/AssetHelper.cpp index c7558580b3..d75144a5ff 100644 --- a/Gems/NvCloth/Code/Source/Utils/AssetHelper.cpp +++ b/Gems/NvCloth/Code/Source/Utils/AssetHelper.cpp @@ -14,7 +14,6 @@ #include - namespace NvCloth { const int InvalidIndex = -1; diff --git a/Gems/NvCloth/Code/Source/Utils/AssetHelper.h b/Gems/NvCloth/Code/Source/Utils/AssetHelper.h index 253245426c..9630eeb5e1 100644 --- a/Gems/NvCloth/Code/Source/Utils/AssetHelper.h +++ b/Gems/NvCloth/Code/Source/Utils/AssetHelper.h @@ -88,9 +88,6 @@ namespace NvCloth MeshNodeInfo& meshNodeInfo, MeshClothInfo& meshClothInfo) = 0; - //! Returns whether the asset has support for skinned animation or not. - virtual bool DoesSupportSkinnedAnimation() const = 0; - protected: static float ConvertBackstopOffset(float backstopOffset); diff --git a/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.cpp b/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.cpp index 6852d245d2..fa8d6e5455 100644 --- a/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.cpp +++ b/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.cpp @@ -14,17 +14,11 @@ #include -#include - namespace NvCloth { MeshAssetHelper::MeshAssetHelper(AZ::EntityId entityId) : AssetHelper(entityId) { - EMotionFX::ActorInstance* actorInstance = nullptr; - EMotionFX::Integration::ActorComponentRequestBus::EventResult( - actorInstance, entityId, &EMotionFX::Integration::ActorComponentRequestBus::Events::GetActorInstance); - m_supportSkinnedAnimation = actorInstance != nullptr; } void MeshAssetHelper::GatherClothMeshNodes(MeshNodeList& meshNodes) diff --git a/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.h b/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.h index a7849583e7..724f8598c8 100644 --- a/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.h +++ b/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.h @@ -33,16 +33,10 @@ namespace NvCloth const AZStd::string& meshNode, MeshNodeInfo& meshNodeInfo, MeshClothInfo& meshClothInfo) override; - bool DoesSupportSkinnedAnimation() const override - { - return m_supportSkinnedAnimation; - } private: bool CopyDataFromMeshes( const AZStd::vector& meshes, MeshClothInfo& meshClothInfo); - - bool m_supportSkinnedAnimation = false; }; } // namespace NvCloth diff --git a/Gems/NvCloth/Code/Tests/Components/ClothComponentMesh/ClothComponentMeshTest.cpp b/Gems/NvCloth/Code/Tests/Components/ClothComponentMesh/ClothComponentMeshTest.cpp index 3d5b7713b3..9916029d3b 100644 --- a/Gems/NvCloth/Code/Tests/Components/ClothComponentMesh/ClothComponentMeshTest.cpp +++ b/Gems/NvCloth/Code/Tests/Components/ClothComponentMesh/ClothComponentMeshTest.cpp @@ -19,7 +19,6 @@ #include #include -#include #include #include @@ -465,14 +464,15 @@ namespace UnitTest AZ::ScriptTimePoint(AZStd::chrono::system_clock::now())); } + /* CryRenderMeshStub renderMesh(MeshVertices); - /*LmbrCentral::MeshModificationNotificationBus::Event( + LmbrCentral::MeshModificationNotificationBus::Event( m_actorComponent->GetEntityId(), &LmbrCentral::MeshModificationNotificationBus::Events::ModifyMesh, LodLevel, 0, - &renderMesh);*/ + &renderMesh); const AZStd::vector& clothParticles = clothComponentMesh.GetRenderData().m_particles; const AZStd::vector& renderMeshPositions = renderMesh.m_positions; @@ -482,5 +482,6 @@ namespace UnitTest { EXPECT_THAT(LYVec3ToAZVec3(renderMeshPositions[i]), IsCloseTolerance(clothParticles[i].GetAsVector3(), Tolerance)); } + */ } } // namespace UnitTest diff --git a/Gems/NvCloth/Code/Tests/CryRenderMeshStub.h b/Gems/NvCloth/Code/Tests/CryRenderMeshStub.h deleted file mode 100644 index a81495c79f..0000000000 --- a/Gems/NvCloth/Code/Tests/CryRenderMeshStub.h +++ /dev/null @@ -1,130 +0,0 @@ -/* - * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or - * its licensors. - * - * For complete copyright and license terms please see the LICENSE at the root of this - * distribution (the "License"). All use of this software is governed by the License, - * or, if provided, by the license below or the license accompanying this file. Do not - * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - */ -#pragma once - -#include -#include - -namespace UnitTest -{ - class CryRenderMeshStub - : public IRenderMesh - { - public: - explicit CryRenderMeshStub(const AZStd::vector& vertices) - { - m_positions.reserve(vertices.size()); - for (const auto& vertex : vertices) - { - m_positions.emplace_back(AZVec3ToLYVec3(vertex)); - } - } - - int GetNumVerts() const override - { - return static_cast(m_positions.size()); - } - - byte* GetPosPtr(int32& nStride, uint32 /*nFlags*/) override - { - nStride = sizeof(Vec3); - return reinterpret_cast(m_positions.data()); - } - - AZStd::vector m_positions; - - // ---------------------------------------- - // IRenderMesh unused functions ... - void AddRef() override {} - int Release() override { return 0; } - bool CanRender() override { return false; } - const char* GetTypeName() override { return ""; } - const char* GetSourceName() const override { return ""; } - int GetIndicesCount() override { return 0; } - int GetVerticesCount() override { return 0; } - AZ::Vertex::Format GetVertexFormat() override { return {}; } - ERenderMeshType GetMeshType() override { return eRMT_Dynamic; } - float GetGeometricMeanFaceArea() const override { return 0.0f; } - bool CheckUpdate(uint32 /*nStreamMask*/) override { return false; } - int GetStreamStride(int /*nStream*/) const override { return 0; } - const uintptr_t GetVBStream(int /*nStream*/) const override { return 0; } - const uintptr_t GetIBStream() const override { return 0; } - int GetNumInds() const override { return 0; } - const eRenderPrimitiveType GetPrimitiveType() const override { return static_cast(0); } - void SetSkinned(bool /*bSkinned*/ = true) override {} - uint GetSkinningWeightCount() const override { return 0; } - size_t SetMesh(CMesh& /*mesh*/, int /*nSecColorsSetOffset*/, uint32 /*flags*/, bool /*requiresLock*/) override { return 0; } - void CopyTo(IRenderMesh* /*pDst*/, int /*nAppendVtx*/ = 0, bool /*bDynamic*/ = false, bool /*fullCopy*/ = true) override {} - void SetSkinningDataVegetation(struct SMeshBoneMapping_uint8* /*pBoneMapping*/) override {} - void SetSkinningDataCharacter(CMesh& /*mesh*/, struct SMeshBoneMapping_uint16* /*pBoneMapping*/, struct SMeshBoneMapping_uint16* /*pExtraBoneMapping*/) override {} - IIndexedMesh* GetIndexedMesh(IIndexedMesh* /*pIdxMesh*/ = 0) override { return nullptr; } - int GetRenderChunksCount(_smart_ptr /*pMat*/, int& /*nRenderTrisCount*/) override { return 0; } - IRenderMesh* GenerateMorphWeights() override { return nullptr; } - IRenderMesh* GetMorphBuddy() override { return nullptr; } - void SetMorphBuddy(IRenderMesh* /*pMorph*/) override {} - bool UpdateVertices(const void* /*pVertBuffer*/, int /*nVertCount*/, int /*nOffset*/, int /*nStream*/, uint32 /*copyFlags*/, bool /*requiresLock*/ = true) override { return false; } - bool UpdateIndices(const vtx_idx* /*pNewInds*/, int /*nInds*/, int /*nOffsInd*/, uint32 /*copyFlags*/, bool /*requiresLock*/ = true) override { return false; } - void SetCustomTexID(int /*nCustomTID*/) override {} - void SetChunk(int /*nIndex*/, CRenderChunk& /*chunk*/) override {} - void SetChunk(_smart_ptr /*pNewMat*/, int /*nFirstVertId*/, int /*nVertCount*/, int /*nFirstIndexId*/, int /*nIndexCount*/, float /*texelAreaDensity*/, const AZ::Vertex::Format& /*vertexFormat*/, int /*nMatID*/ = 0) override {} - void SetRenderChunks(CRenderChunk* /*pChunksArray*/, int /*nCount*/, bool /*bSubObjectChunks*/) override {} - void GenerateQTangents() override {} - void CreateChunksSkinned() override {} - void NextDrawSkinned() override {} - IRenderMesh* GetVertexContainer() override { return nullptr; } - void SetVertexContainer(IRenderMesh* /*pBuf*/) override {} - TRenderChunkArray m_chunk; - TRenderChunkArray& GetChunks() override { return m_chunk; } - TRenderChunkArray& GetChunksSkinned() override { return m_chunk; } - TRenderChunkArray& GetChunksSubObjects() override { return m_chunk; } - void SetBBox(const Vec3& /*vBoxMin*/, const Vec3& /*vBoxMax*/) override {} - void GetBBox(Vec3& /*vBoxMin*/, Vec3& /*vBoxMax*/) override {} - void UpdateBBoxFromMesh() override {} - uint32* GetPhysVertexMap() override { return nullptr; } - bool IsEmpty() override { return false; } - byte* GetPosPtrNoCache(int32& /*nStride*/, uint32 /*nFlags*/) override { return nullptr; } - byte* GetColorPtr(int32& /*nStride*/, uint32 /*nFlags*/) override { return nullptr; } - byte* GetNormPtr(int32& /*nStride*/, uint32 /*nFlags*/) override { return nullptr; } - byte* GetUVPtrNoCache(int32& /*nStride*/, uint32 /*nFlags*/, uint32 /*uvSetIndex*/ = 0) override { return nullptr; } - byte* GetUVPtr(int32& /*nStride*/, uint32 /*nFlags*/, uint32 /*uvSetIndex*/ = 0) override { return nullptr; } - byte* GetTangentPtr(int32& /*nStride*/, uint32 /*nFlags*/) override { return nullptr; } - byte* GetQTangentPtr(int32& /*nStride*/, uint32 /*nFlags*/) override { return nullptr; } - byte* GetHWSkinPtr(int32& /*nStride*/, uint32 /*nFlags*/, bool /*remapped*/ = false) override { return nullptr; } - byte* GetVelocityPtr(int32& /*nStride*/, uint32 /*nFlags*/) override { return nullptr; } - void UnlockStream(int /*nStream*/) override {} - void UnlockIndexStream() override {} - vtx_idx* GetIndexPtr(uint32 /*nFlags*/, int32 /*nOffset*/ = 0) override { return nullptr; } - const PodArray >* GetTrisForPosition(const Vec3& /*vPos*/, _smart_ptr /*pMaterial*/) override { return nullptr; } - float GetExtent(EGeomForm /*eForm*/) override { return 0.0f; } - void GetRandomPos(PosNorm& /*ran*/, EGeomForm /*eForm*/, SSkinningData const* /*pSkinning*/ = NULL) override {} - void Render(const struct SRendParams& /*rParams*/, CRenderObject* /*pObj*/, _smart_ptr /*pMaterial*/, const SRenderingPassInfo& /*passInfo*/, bool /*bSkinned*/ = false) override {} - void Render(CRenderObject* /*pObj*/, const SRenderingPassInfo& /*passInfo*/, const SRendItemSorter& /*rendItemSorter*/) override {} - void AddRenderElements(_smart_ptr /*pIMatInfo*/, CRenderObject* /*pObj*/, const SRenderingPassInfo& /*passInfo*/, int /*nSortId*/ = EFSLIST_GENERAL, int /*nAW*/ = 1) override {} - void AddRE(_smart_ptr /*pMaterial*/, CRenderObject* /*pObj*/, IShader* /*pEf*/, const SRenderingPassInfo& /*passInfo*/, int /*nList*/, int /*nAW*/, const SRendItemSorter& /*rendItemSorter*/) override {} - void SetREUserData(float* /*pfCustomData*/, float /*fFogScale*/ = 0, float /*fAlpha*/ = 1) override {} - void DebugDraw(const struct SGeometryDebugDrawInfo& /*info*/, uint32 /*nVisibleChunksMask*/ = ~0, float /*fExtrdueScale*/ = 0.01f) override {} - size_t GetMemoryUsage(ICrySizer* /*pSizer*/, EMemoryUsageArgument /*nType*/) const override { return 0; } - void GetMemoryUsage(ICrySizer* /*pSizer*/) const override {} - int GetAllocatedBytes(bool /*bVideoMem*/) const override { return 0; } - float GetAverageTrisNumPerChunk(_smart_ptr /*pMat*/) override { return 0.0f; } - int GetTextureMemoryUsage(const _smart_ptr /*pMaterial*/, ICrySizer* /*pSizer*/ = NULL, bool /*bStreamedIn*/ = true) const override { return 0; } - void KeepSysMesh(bool /*keep*/) override {} - void UnKeepSysMesh() override {} - void SetMeshLod(int /*nLod*/) override {} - void LockForThreadAccess() override {} - void UnLockForThreadAccess() override {} - volatile int* SetAsyncUpdateState(void) override { return nullptr; } - void CreateRemappedBoneIndicesPair(const DynArray& /*arrRemapTable*/, const uint /*pairGuid*/) override {} - void ReleaseRemappedBoneIndicesPair(const uint /*pairGuid*/) override {} - void OffsetPosition(const Vec3& /*delta*/) override {} - }; -} // namespace UnitTest diff --git a/Gems/NvCloth/Code/Tests/NvClothEditorTestEnvironment.cpp b/Gems/NvCloth/Code/Tests/NvClothEditorTestEnvironment.cpp index e65385722d..1afbe1f476 100644 --- a/Gems/NvCloth/Code/Tests/NvClothEditorTestEnvironment.cpp +++ b/Gems/NvCloth/Code/Tests/NvClothEditorTestEnvironment.cpp @@ -25,7 +25,6 @@ #include #include #include -#include namespace UnitTest { @@ -80,7 +79,6 @@ namespace UnitTest NvCloth::EditorSystemComponent::CreateDescriptor(), NvCloth::EditorClothComponent::CreateDescriptor(), NvCloth::Pipeline::ClothRuleBehavior::CreateDescriptor(), - NvCloth::Pipeline::CgfClothExporter::CreateDescriptor(), }); AddRequiredComponents({ diff --git a/Gems/NvCloth/Code/Tests/Utils/ActorAssetHelperTest.cpp b/Gems/NvCloth/Code/Tests/Utils/ActorAssetHelperTest.cpp index de0ba9031e..ad3a87d5ff 100644 --- a/Gems/NvCloth/Code/Tests/Utils/ActorAssetHelperTest.cpp +++ b/Gems/NvCloth/Code/Tests/Utils/ActorAssetHelperTest.cpp @@ -108,7 +108,6 @@ namespace UnitTest EXPECT_TRUE(assetHelper.get() != nullptr); EXPECT_TRUE(azrtti_cast(assetHelper.get()) != nullptr); - EXPECT_FALSE(assetHelper->DoesSupportSkinnedAnimation()); } TEST_F(NvClothMeshAssetHelper, MeshAssetHelper_CreateAssetHelperWithActor_ReturnsValidMeshAssetHelper) @@ -124,21 +123,6 @@ namespace UnitTest EXPECT_TRUE(assetHelper.get() != nullptr); EXPECT_TRUE(azrtti_cast(assetHelper.get()) != nullptr); - EXPECT_TRUE(assetHelper->DoesSupportSkinnedAnimation()); - } - - TEST_F(NvClothMeshAssetHelper, MeshAssetHelper_DoesSupportSkinnedAnimation_ReturnsTrue) - { - { - auto actor = AZStd::make_unique("actor_test"); - actor->FinishSetup(); - - m_actorComponent->SetActorAsset(CreateAssetFromActor(AZStd::move(actor))); - } - - AZStd::unique_ptr assetHelper = NvCloth::AssetHelper::CreateAssetHelper(m_actorComponent->GetEntityId()); - - EXPECT_TRUE(assetHelper->DoesSupportSkinnedAnimation()); } TEST_F(NvClothMeshAssetHelper, MeshAssetHelper_GatherClothMeshNodesWithEmptyActor_ReturnsEmptyInfo) diff --git a/Gems/NvCloth/Code/nvcloth_editor_files.cmake b/Gems/NvCloth/Code/nvcloth_editor_files.cmake index 8048241f98..c2383f876f 100644 --- a/Gems/NvCloth/Code/nvcloth_editor_files.cmake +++ b/Gems/NvCloth/Code/nvcloth_editor_files.cmake @@ -10,8 +10,6 @@ # set(FILES - Source/Pipeline/RCExt/CgfClothExporter.h - Source/Pipeline/RCExt/CgfClothExporter.cpp Source/Pipeline/SceneAPIExt/ClothRule.h Source/Pipeline/SceneAPIExt/ClothRule.cpp Source/Pipeline/SceneAPIExt/ClothRuleBehavior.h diff --git a/Gems/NvCloth/Code/nvcloth_files.cmake b/Gems/NvCloth/Code/nvcloth_files.cmake index 347ff27b6f..47d4fecdc6 100644 --- a/Gems/NvCloth/Code/nvcloth_files.cmake +++ b/Gems/NvCloth/Code/nvcloth_files.cmake @@ -51,6 +51,4 @@ set(FILES Source/Utils/AssetHelper.cpp Source/Utils/MeshAssetHelper.cpp Source/Utils/MeshAssetHelper.h - Source/Utils/ActorAssetHelper.cpp - Source/Utils/ActorAssetHelper.h ) diff --git a/Gems/NvCloth/Code/nvcloth_tests_files.cmake b/Gems/NvCloth/Code/nvcloth_tests_files.cmake index d027251389..abe1789a66 100644 --- a/Gems/NvCloth/Code/nvcloth_tests_files.cmake +++ b/Gems/NvCloth/Code/nvcloth_tests_files.cmake @@ -18,7 +18,6 @@ set(FILES Tests/ActorHelper.cpp Tests/TriangleInputHelper.h Tests/TriangleInputHelper.cpp - Tests/CryRenderMeshStub.h Tests/System/ClothSystemTest.cpp Tests/System/ClothTest.cpp Tests/System/FabricCookerTest.cpp diff --git a/Gems/NvCloth/gem.json b/Gems/NvCloth/gem.json index a97e9c979d..f71d71e592 100644 --- a/Gems/NvCloth/gem.json +++ b/Gems/NvCloth/gem.json @@ -1,45 +1,8 @@ { "gem_name": "NvCloth", - "GemFormatVersion": 4, - "Uuid": "6ab53783d9f54c9e97a15ad729e7c182", - "Name": "NvCloth", - "DisplayName": "NVIDIA Cloth [PREVIEW]", - "Version": "0.1.0", - "LinkType": "Dynamic", - "Summary": "Provides the functionality needed to add cloth simulation.", - "Tags": ["Physics"], - "IconPath": "preview.png", - "Modules": [ - { - "Type": "GameModule" - }, - { - "Name": "Editor", - "Type": "EditorModule", - "Extends": "GameModule" - } - ], - "Dependencies": [ - { - "Uuid": "ff06785f7145416b9d46fde39098cb0c", - "VersionConstraints": [ - "~>0.1" - ], - "_comment": "LmbrCentral" - }, - { - "Uuid": "4e981f3b17394f5d84d674fff0f54f4f", - "VersionConstraints": [ - "~>0.1" - ], - "_comment": "AtomLyIntegration_CommonFeatures" - }, - { - "Uuid": "044a63ea67d04479aa5daf62ded9d9ca", - "VersionConstraints": [ - "~>0.1" - ], - "_comment": "EMotionFX" - } - ] + "display_name": "NVIDIA Cloth [PREVIEW]", + "summary": "Provides the functionality needed to add cloth simulation.", + "canonical_tags": ["Gem"], + "user_tags": ["Physics"], + "icon_path": "preview.png" } From fd7d3a41ee89305e1f16e78981d15924fc49b24d Mon Sep 17 00:00:00 2001 From: spham Date: Tue, 20 Apr 2021 08:06:27 -0700 Subject: [PATCH 45/67] Removing 'periodic_test_profile' job from Android due to the fact that the Android Virtual Device is not supported on virtualized systems (Windows) --- .../build/Platform/Android/build_config.json | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/scripts/build/Platform/Android/build_config.json b/scripts/build/Platform/Android/build_config.json index e5b41973e0..0b71268a43 100644 --- a/scripts/build/Platform/Android/build_config.json +++ b/scripts/build/Platform/Android/build_config.json @@ -145,23 +145,5 @@ "GRADLE_BUILD_CMD": "build", "ADDITIONAL_GENERATE_ARGS": "" } - }, - "periodic_test_profile": { - "TAGS":[ - "nightly", - "weekly-build-metrics" - ], - "COMMAND":"build_and_run_unit_tests.cmd", - "PARAMETERS": { - "CONFIGURATION":"profile", - "OUTPUT_DIRECTORY":"build\\android_unittest", - "GAME_PROJECT": "AutomatedTesting", - "ANDROID_NDK_PLATFORM": "21", - "ANDROID_SDK_PLATFORM": "29", - "SIGN_APK": "true", - "GRADLE_BUILD_CMD": "assemble", - "ADDITIONAL_GENERATE_ARGS": "--unit-test" - } } - } From 37949abe2505033e6c23205bc9f3c0fdbef6ce2a Mon Sep 17 00:00:00 2001 From: spham Date: Tue, 20 Apr 2021 08:48:52 -0700 Subject: [PATCH 46/67] Restoring original periodic_test_profile block but with the TAGS removed --- scripts/build/Platform/Android/build_config.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/scripts/build/Platform/Android/build_config.json b/scripts/build/Platform/Android/build_config.json index 0b71268a43..0fa4d9ade3 100644 --- a/scripts/build/Platform/Android/build_config.json +++ b/scripts/build/Platform/Android/build_config.json @@ -145,5 +145,20 @@ "GRADLE_BUILD_CMD": "build", "ADDITIONAL_GENERATE_ARGS": "" } + }, + "periodic_test_profile": { + "TAGS":[ + ], + "COMMAND":"build_and_run_unit_tests.cmd", + "PARAMETERS": { + "CONFIGURATION":"profile", + "OUTPUT_DIRECTORY":"build\\android_unittest", + "GAME_PROJECT": "AutomatedTesting", + "ANDROID_NDK_PLATFORM": "21", + "ANDROID_SDK_PLATFORM": "29", + "SIGN_APK": "true", + "GRADLE_BUILD_CMD": "assemble", + "ADDITIONAL_GENERATE_ARGS": "--unit-test" + } } } From 1a359ac50d6463cfafed4801ed69c794b2245a8c Mon Sep 17 00:00:00 2001 From: garrieta Date: Tue, 20 Apr 2021 10:51:20 -0500 Subject: [PATCH 47/67] [ATOM-15285] ShaderVariantAssetBuilder code merge bug Fixing what appears to be a code merge/integration bug. Signed-off-by: garrieta --- .../Source/Editor/ShaderVariantAssetBuilder.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderVariantAssetBuilder.cpp b/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderVariantAssetBuilder.cpp index 1e3c7b6759..3572fb72ae 100644 --- a/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderVariantAssetBuilder.cpp +++ b/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderVariantAssetBuilder.cpp @@ -407,17 +407,20 @@ namespace AZ const auto& jobParameters = request.m_jobDescription.m_jobParameters; if (jobParameters.find(ShaderVariantLoadErrorParam) != jobParameters.end()) { - if (jobParameters.find(ShouldExitEarlyFromProcessJobParam) != jobParameters.end()) - { - AZ_TracePrintf(ShaderVariantAssetBuilderName, "Doing nothing on behalf of [%s] because it's been overriden by game project.", jobParameters.at(ShaderVariantLoadErrorParam).c_str()); - response.m_resultCode = AssetBuilderSDK::ProcessJobResult_Success; - return; - } AZ_Error(ShaderVariantAssetBuilderName, false, "Error during CreateJobs: %s", jobParameters.at(ShaderVariantLoadErrorParam).c_str()); response.m_resultCode = AssetBuilderSDK::ProcessJobResult_Failed; return; } + if (jobParameters.find(ShouldExitEarlyFromProcessJobParam) != jobParameters.end()) + { + AZ_TracePrintf( + ShaderVariantAssetBuilderName, "Doing nothing on behalf of [%s] because it's been overriden by game project.", + jobParameters.at(ShaderVariantLoadErrorParam).c_str()); + response.m_resultCode = AssetBuilderSDK::ProcessJobResult_Success; + return; + } + AssetBuilderSDK::JobCancelListener jobCancelListener(request.m_jobId); if (jobCancelListener.IsCancelled()) { From fbc69e5fd7f692d5e93acf3e8ec0a62f4d5be971 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Tue, 20 Apr 2021 11:08:51 -0500 Subject: [PATCH 48/67] [LYN-3079] Removed IPickObjectCallback and edit tools that used it. --- Code/Sandbox/Editor/AlignTool.cpp | 142 --------- Code/Sandbox/Editor/AlignTool.h | 40 --- .../Editor/Core/LevelEditorMenuHandler.cpp | 1 - Code/Sandbox/Editor/CryEdit.cpp | 67 ---- Code/Sandbox/Editor/CryEdit.h | 6 - Code/Sandbox/Editor/IEditor.h | 29 -- Code/Sandbox/Editor/IEditorImpl.cpp | 35 --- Code/Sandbox/Editor/IEditorImpl.h | 4 - Code/Sandbox/Editor/Lib/Tests/IEditorMock.h | 3 - Code/Sandbox/Editor/LinkTool.cpp | 286 ------------------ Code/Sandbox/Editor/LinkTool.h | 85 ------ Code/Sandbox/Editor/MainWindow.cpp | 18 -- Code/Sandbox/Editor/PickObjectTool.cpp | 173 ----------- Code/Sandbox/Editor/PickObjectTool.h | 76 ----- Code/Sandbox/Editor/Resource.h | 3 - Code/Sandbox/Editor/ToolbarManager.cpp | 8 - Code/Sandbox/Editor/editor_lib_files.cmake | 6 - 17 files changed, 982 deletions(-) delete mode 100644 Code/Sandbox/Editor/AlignTool.cpp delete mode 100644 Code/Sandbox/Editor/AlignTool.h delete mode 100644 Code/Sandbox/Editor/LinkTool.cpp delete mode 100644 Code/Sandbox/Editor/LinkTool.h delete mode 100644 Code/Sandbox/Editor/PickObjectTool.cpp delete mode 100644 Code/Sandbox/Editor/PickObjectTool.h diff --git a/Code/Sandbox/Editor/AlignTool.cpp b/Code/Sandbox/Editor/AlignTool.cpp deleted file mode 100644 index 4b3aedfbfa..0000000000 --- a/Code/Sandbox/Editor/AlignTool.cpp +++ /dev/null @@ -1,142 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -// Original file Copyright Crytek GMBH or its affiliates, used under license. - -#include "EditorDefs.h" - -#include "AlignTool.h" - -// Editor -#include "Objects/BaseObject.h" -#include "Objects/SelectionGroup.h" - -////////////////////////////////////////////////////////////////////////// -bool CAlignPickCallback::m_bActive = false; - -////////////////////////////////////////////////////////////////////////// -//! Called when object picked. -void CAlignPickCallback::OnPick(CBaseObject* picked) -{ - Matrix34 pickedTM(picked->GetWorldTM()); - - AABB pickedAABB; - picked->GetBoundBox(pickedAABB); - pickedAABB.Move(-pickedTM.GetTranslation()); - Vec3 pickedPivot = pickedAABB.GetCenter(); - - AABB pickedLocalAABB; - picked->GetLocalBounds(pickedLocalAABB); - - const Quat& pickedRot = picked->GetRotation(); - const Vec3& pickedScale = picked->GetScale(); - const Vec3& pickedPos = picked->GetPos(); - - bool bKeepScale = CheckVirtualKey(Qt::Key_Shift); - bool bKeepRotation = CheckVirtualKey(Qt::Key_Alt); - bool bAlignToBoundBox = CheckVirtualKey(Qt::Key_Control); - bool bApplyTransform = !bKeepScale && !bKeepRotation && !bAlignToBoundBox; - - { - bool bUndo = !CUndo::IsRecording(); - if (bUndo) - { - GetIEditor()->BeginUndo(); - } - - CSelectionGroup* selGroup = GetIEditor()->GetSelection(); - selGroup->FilterParents(); - - for (int i = 0; i < selGroup->GetFilteredCount(); i++) - { - CBaseObject* pMovedObj = selGroup->GetFilteredObject(i); - - if (bKeepScale || bKeepRotation || bApplyTransform) - { - if (bKeepScale && bKeepRotation) // Keep scale and rotation of a moved object - { - pMovedObj->SetWorldTM(Matrix34::Create(pMovedObj->GetScale(), pMovedObj->GetRotation(), pickedPos), eObjectUpdateFlags_UserInput); - } - else if (bKeepScale) // Keep only scale of a moved object - { - pMovedObj->SetWorldTM(Matrix34::Create(pMovedObj->GetScale(), pickedRot, pickedPos), eObjectUpdateFlags_UserInput); - } - else if (bKeepRotation) // Keep only rotation of a moved object - { - pMovedObj->SetWorldTM(Matrix34::Create(pickedScale, pMovedObj->GetRotation(), pickedPos), eObjectUpdateFlags_UserInput); - } - else // Scale, Rotation and Position of a picked object are applied to a moved object. - { - pMovedObj->SetWorldTM(pickedTM, eObjectUpdateFlags_UserInput); - } - } - else if (bAlignToBoundBox) // align to the bounding box. - { - if (pickedLocalAABB.GetVolume() == 0.0f) - { - continue; - } - - AABB movedLocalAABB; - pMovedObj->GetLocalBounds(movedLocalAABB); - if (fabs(movedLocalAABB.max.x - movedLocalAABB.min.x) < VEC_EPSILON && - fabs(movedLocalAABB.max.y - movedLocalAABB.min.y) < VEC_EPSILON && - fabs(movedLocalAABB.max.z - movedLocalAABB.min.z) < VEC_EPSILON) - { - continue; - } - - const Vec3& movedScale(pMovedObj->GetScale()); - Matrix34 movedScaleTM = Matrix34::CreateScale(movedScale); - AABB movedLocalScaledAABB; - movedLocalScaledAABB.min = movedScaleTM.TransformVector(movedLocalAABB.min); - movedLocalScaledAABB.max = movedScaleTM.TransformVector(movedLocalAABB.max); - - float fMovedWidth = movedLocalScaledAABB.max.x - movedLocalScaledAABB.min.x; - float fMovedHeight = movedLocalScaledAABB.max.z - movedLocalScaledAABB.min.z; - float fMovedLength = movedLocalScaledAABB.max.y - movedLocalScaledAABB.min.y; - - Matrix34 pickedScaleTM = Matrix34::CreateScale(picked->GetScale()); - AABB pickedLocalScaledAABB; - pickedLocalScaledAABB.min = pickedScaleTM.TransformVector(pickedLocalAABB.min); - pickedLocalScaledAABB.max = pickedScaleTM.TransformVector(pickedLocalAABB.max); - float fScaledPickedtWidth = pickedLocalScaledAABB.max.x - pickedLocalScaledAABB.min.x; - float fScaledPickedHeight = pickedLocalScaledAABB.max.z - pickedLocalScaledAABB.min.z; - float fScaledPickedLength = pickedLocalScaledAABB.max.y - pickedLocalScaledAABB.min.y; - - Vec3 scale((fScaledPickedtWidth / fMovedWidth) * movedScale.x, (fScaledPickedLength / fMovedLength) * movedScale.y, (fScaledPickedHeight / fMovedHeight) * movedScale.z); - Matrix34 scaleRotTM = Matrix34::Create(scale, pickedRot, Vec3(0, 0, 0)); - Vec3 movedPivot = scaleRotTM.TransformVector(movedLocalAABB.GetCenter()); - - pMovedObj->SetWorldTM(Matrix34::Create(scale, pickedRot, Vec3(pickedPos + (pickedPivot - movedPivot))), eObjectUpdateFlags_UserInput); - } - } - m_bActive = false; - if (bUndo) - { - GetIEditor()->AcceptUndo("Align To Object"); - } - } - delete this; -} - -//! Called when pick mode cancelled. -void CAlignPickCallback::OnCancelPick() -{ - m_bActive = false; - delete this; -} - -//! Return true if specified object is pickable. -bool CAlignPickCallback::OnPickFilter([[maybe_unused]] CBaseObject* filterObject) -{ - return true; -}; diff --git a/Code/Sandbox/Editor/AlignTool.h b/Code/Sandbox/Editor/AlignTool.h deleted file mode 100644 index 43cd01013d..0000000000 --- a/Code/Sandbox/Editor/AlignTool.h +++ /dev/null @@ -1,40 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -// Original file Copyright Crytek GMBH or its affiliates, used under license. - -#ifndef CRYINCLUDE_EDITOR_ALIGNTOOL_H -#define CRYINCLUDE_EDITOR_ALIGNTOOL_H - -#pragma once - -////////////////////////////////////////////////////////////////////////// -class CAlignPickCallback - : public IPickObjectCallback -{ -public: - CAlignPickCallback() { m_bActive = true; }; - //! Called when object picked. - virtual void OnPick(CBaseObject* picked); - //! Called when pick mode cancelled. - virtual void OnCancelPick(); - //! Return true if specified object is pickable. - virtual bool OnPickFilter(CBaseObject* filterObject); - - static bool IsActive() { return m_bActive; } - - virtual bool IsNeedSpecificBehaviorForSpaceAcce() { return true; } -private: - static bool m_bActive; -}; - - -#endif // CRYINCLUDE_EDITOR_ALIGNTOOL_H diff --git a/Code/Sandbox/Editor/Core/LevelEditorMenuHandler.cpp b/Code/Sandbox/Editor/Core/LevelEditorMenuHandler.cpp index 1c9e7d90d2..f00085d5ad 100644 --- a/Code/Sandbox/Editor/Core/LevelEditorMenuHandler.cpp +++ b/Code/Sandbox/Editor/Core/LevelEditorMenuHandler.cpp @@ -580,7 +580,6 @@ void LevelEditorMenuHandler::PopulateEditMenu(ActionManager::MenuWrapper& editMe auto alignMenu = modifyMenu.AddMenu(tr("Align")); alignMenu.AddAction(ID_OBJECTMODIFY_ALIGNTOGRID); - alignMenu.AddAction(ID_OBJECTMODIFY_ALIGN); alignMenu.AddAction(ID_MODIFY_ALIGNOBJTOSURF); auto constrainMenu = modifyMenu.AddMenu(tr("Constrain")); diff --git a/Code/Sandbox/Editor/CryEdit.cpp b/Code/Sandbox/Editor/CryEdit.cpp index e4f06a1bc3..7aefcffb5a 100644 --- a/Code/Sandbox/Editor/CryEdit.cpp +++ b/Code/Sandbox/Editor/CryEdit.cpp @@ -95,8 +95,6 @@ AZ_POP_DISABLE_WARNING #include "Core/QtEditorApplication.h" #include "StringDlg.h" -#include "LinkTool.h" -#include "AlignTool.h" #include "VoxelAligningTool.h" #include "NewLevelDialog.h" #include "GridSettingsDialog.h" @@ -400,8 +398,6 @@ void CCryEditApp::RegisterActionHandlers() ON_COMMAND(ID_EDITMODE_MOVE, OnEditmodeMove) ON_COMMAND(ID_EDITMODE_ROTATE, OnEditmodeRotate) ON_COMMAND(ID_EDITMODE_SCALE, OnEditmodeScale) - ON_COMMAND(ID_EDITTOOL_LINK, OnEditToolLink) - ON_COMMAND(ID_EDITTOOL_UNLINK, OnEditToolUnlink) ON_COMMAND(ID_EDITMODE_SELECT, OnEditmodeSelect) ON_COMMAND(ID_EDIT_ESCAPE, OnEditEscape) ON_COMMAND(ID_OBJECTMODIFY_SETAREA, OnObjectSetArea) @@ -421,7 +417,6 @@ void CCryEditApp::RegisterActionHandlers() ON_COMMAND(ID_SELECTION_SAVE, OnSelectionSave) ON_COMMAND(ID_IMPORT_ASSET, OnOpenAssetImporter) ON_COMMAND(ID_SELECTION_LOAD, OnSelectionLoad) - ON_COMMAND(ID_OBJECTMODIFY_ALIGN, OnAlignObject) ON_COMMAND(ID_MODIFY_ALIGNOBJTOSURF, OnAlignToVoxel) ON_COMMAND(ID_OBJECTMODIFY_ALIGNTOGRID, OnAlignToGrid) ON_COMMAND(ID_LOCK_SELECTION, OnLockSelection) @@ -2896,51 +2891,6 @@ void CCryEditApp::OnEditmodeScale() } } -////////////////////////////////////////////////////////////////////////// -void CCryEditApp::OnEditToolLink() -{ - // TODO: Add your command handler code here - if (qobject_cast(GetIEditor()->GetEditTool())) - { - GetIEditor()->SetEditTool(0); - } - else - { - GetIEditor()->SetEditTool(new CLinkTool()); - } -} - -////////////////////////////////////////////////////////////////////////// -void CCryEditApp::OnUpdateEditToolLink(QAction* action) -{ - if (!GetIEditor()->GetDocument()) - { - action->setEnabled(false); - return; - } - action->setEnabled(GetIEditor()->GetDocument()->IsDocumentReady()); - CEditTool* pEditTool = GetIEditor()->GetEditTool(); - action->setChecked(qobject_cast(pEditTool) != nullptr); -} - -////////////////////////////////////////////////////////////////////////// -void CCryEditApp::OnEditToolUnlink() -{ - CUndo undo("Unlink Object(s)"); - CSelectionGroup* pSelection = GetIEditor()->GetObjectManager()->GetSelection(); - for (int i = 0; i < pSelection->GetCount(); i++) - { - CBaseObject* pBaseObj = pSelection->GetObject(i); - pBaseObj->DetachThis(); - } -} - -////////////////////////////////////////////////////////////////////////// -void CCryEditApp::OnUpdateEditToolUnlink(QAction* action) -{ - action->setEnabled(false); -} - ////////////////////////////////////////////////////////////////////////// void CCryEditApp::OnEditmodeSelect() { @@ -3510,14 +3460,6 @@ void CCryEditApp::OnUpdateSelected(QAction* action) action->setEnabled(!GetIEditor()->GetSelection()->IsEmpty()); } -////////////////////////////////////////////////////////////////////////// -void CCryEditApp::OnAlignObject() -{ - // Align pick callback will release itself. - CAlignPickCallback* alignCallback = new CAlignPickCallback; - GetIEditor()->PickObject(alignCallback, 0, "Align to Object"); -} - ////////////////////////////////////////////////////////////////////////// void CCryEditApp::OnAlignToGrid() { @@ -3538,15 +3480,6 @@ void CCryEditApp::OnAlignToGrid() } } -////////////////////////////////////////////////////////////////////////// -void CCryEditApp::OnUpdateAlignObject(QAction* action) -{ - Q_ASSERT(action->isCheckable()); - action->setChecked(CAlignPickCallback::IsActive()); - - action->setEnabled(!GetIEditor()->GetSelection()->IsEmpty()); -} - ////////////////////////////////////////////////////////////////////////// void CCryEditApp::OnAlignToVoxel() { diff --git a/Code/Sandbox/Editor/CryEdit.h b/Code/Sandbox/Editor/CryEdit.h index 6a17f9a8bf..94c39991e9 100644 --- a/Code/Sandbox/Editor/CryEdit.h +++ b/Code/Sandbox/Editor/CryEdit.h @@ -224,10 +224,6 @@ public: void OnEditmodeMove(); void OnEditmodeRotate(); void OnEditmodeScale(); - void OnEditToolLink(); - void OnUpdateEditToolLink(QAction* action); - void OnEditToolUnlink(); - void OnUpdateEditToolUnlink(QAction* action); void OnEditmodeSelect(); void OnEditEscape(); void OnObjectSetArea(); @@ -256,10 +252,8 @@ public: void OnOpenAssetImporter(); void OnSelectionLoad(); void OnUpdateSelected(QAction* action); - void OnAlignObject(); void OnAlignToVoxel(); void OnAlignToGrid(); - void OnUpdateAlignObject(QAction* action); void OnUpdateAlignToVoxel(QAction* action); void OnLockSelection(); void OnEditLevelData(); diff --git a/Code/Sandbox/Editor/IEditor.h b/Code/Sandbox/Editor/IEditor.h index 7715e64fe5..722f2a7c25 100644 --- a/Code/Sandbox/Editor/IEditor.h +++ b/Code/Sandbox/Editor/IEditor.h @@ -391,21 +391,6 @@ enum EModifiedModule eModifiedAll = -1 }; -//! Callback class passed to PickObject. -struct IPickObjectCallback -{ - virtual ~IPickObjectCallback() = default; - - //! Called when object picked. - virtual void OnPick(CBaseObject* picked) = 0; - //! Called when pick mode cancelled. - virtual void OnCancelPick() = 0; - //! Return true if specified object is pickable. - virtual bool OnPickFilter([[maybe_unused]] CBaseObject* filterObject) { return true; }; - //! If need a specific behavior when holding space, return true or if not, return false. - virtual bool IsNeedSpecificBehaviorForSpaceAcce() { return false; } -}; - //! Class provided by editor for various registration functions. struct CRegistrationContext { @@ -570,20 +555,6 @@ struct IEditor //! Get access to object manager. virtual struct IObjectManager* GetObjectManager() = 0; virtual CSettingsManager* GetSettingsManager() = 0; - //! Set pick object mode. - //! When object picked callback will be called, with OnPick - //! If pick operation is canceled Cancel will be called - //! @param targetClass specifies objects of which class are supposed to be picked - //! @param bMultipick if true pick tool will pick multiple object - virtual void PickObject( - IPickObjectCallback* callback, - const QMetaObject* targetClass = 0, - const char* statusText = 0, - bool bMultipick = false) = 0; - //! Cancel current pick operation - virtual void CancelPick() = 0; - //! Return true if editor now in object picking mode - virtual bool IsPicking() = 0; //! Get DB manager that own items of specified type. virtual IDataBaseManager* GetDBItemManager(EDataBaseItemType itemType) = 0; //! Get Manager of Materials. diff --git a/Code/Sandbox/Editor/IEditorImpl.cpp b/Code/Sandbox/Editor/IEditorImpl.cpp index 4a0a73c9ac..399ac45794 100644 --- a/Code/Sandbox/Editor/IEditorImpl.cpp +++ b/Code/Sandbox/Editor/IEditorImpl.cpp @@ -65,7 +65,6 @@ AZ_POP_DISABLE_WARNING #include "UIEnumsDatabase.h" #include "Util/Ruler.h" #include "RenderHelpers/AxisHelper.h" -#include "PickObjectTool.h" #include "Settings.h" #include "Include/IObjectManager.h" #include "Include/ISourceControl.h" @@ -170,7 +169,6 @@ CEditorImpl::CEditorImpl() , m_pShaderEnum(nullptr) , m_pIconManager(nullptr) , m_bSelectionLocked(true) - , m_pPickTool(nullptr) , m_pAxisGizmo(nullptr) , m_pGameEngine(nullptr) , m_pAnimationContext(nullptr) @@ -794,11 +792,6 @@ void CEditorImpl::SetEditTool(CEditTool* tool, bool bStopCurrentTool) m_pEditTool->BeginEditParams(this, 0); } - // Make sure pick is aborted. - if (tool != m_pPickTool) - { - m_pPickTool = nullptr; - } Notify(eNotify_OnEditToolChange); } @@ -1069,34 +1062,6 @@ bool CEditorImpl::IsSelectionLocked() return m_bSelectionLocked; } -void CEditorImpl::PickObject(IPickObjectCallback* callback, const QMetaObject* targetClass, const char* statusText, bool bMultipick) -{ - m_pPickTool = new CPickObjectTool(callback, targetClass); - - static_cast(m_pPickTool.get())->SetMultiplePicks(bMultipick); - if (statusText) - { - m_pPickTool.get()->SetStatusText(statusText); - } - - SetEditTool(m_pPickTool); -} - -void CEditorImpl::CancelPick() -{ - SetEditTool(0); - m_pPickTool = 0; -} - -bool CEditorImpl::IsPicking() -{ - if (GetEditTool() == m_pPickTool && m_pPickTool != 0) - { - return true; - } - return false; -} - CViewManager* CEditorImpl::GetViewManager() { return m_pViewManager; diff --git a/Code/Sandbox/Editor/IEditorImpl.h b/Code/Sandbox/Editor/IEditorImpl.h index 9e3b3abc66..4a8d5fa191 100644 --- a/Code/Sandbox/Editor/IEditorImpl.h +++ b/Code/Sandbox/Editor/IEditorImpl.h @@ -181,10 +181,7 @@ public: void SelectObject(CBaseObject* obj); void LockSelection(bool bLock); bool IsSelectionLocked(); - void PickObject(IPickObjectCallback* callback, const QMetaObject* targetClass = 0, const char* statusText = 0, bool bMultipick = false); - void CancelPick(); - bool IsPicking(); IDataBaseManager* GetDBItemManager(EDataBaseItemType itemType); CMaterialManager* GetMaterialManager() { return m_pMaterialManager; } CMusicManager* GetMusicManager() { return m_pMusicManager; }; @@ -409,7 +406,6 @@ protected: QString m_primaryCDFolder; QString m_userFolder; bool m_bSelectionLocked; - _smart_ptr m_pPickTool; class CAxisGizmo* m_pAxisGizmo; CGameEngine* m_pGameEngine; CAnimationContext* m_pAnimationContext; diff --git a/Code/Sandbox/Editor/Lib/Tests/IEditorMock.h b/Code/Sandbox/Editor/Lib/Tests/IEditorMock.h index a290ef5de5..e48fb5fec1 100644 --- a/Code/Sandbox/Editor/Lib/Tests/IEditorMock.h +++ b/Code/Sandbox/Editor/Lib/Tests/IEditorMock.h @@ -90,9 +90,6 @@ public: MOCK_METHOD0(IsSelectionLocked, bool()); MOCK_METHOD0(GetObjectManager, struct IObjectManager* ()); MOCK_METHOD0(GetSettingsManager, CSettingsManager* ()); - MOCK_METHOD4(PickObject, void(IPickObjectCallback*,const QMetaObject*,const char* ,bool bMultipick)); - MOCK_METHOD0(CancelPick, void()); - MOCK_METHOD0(IsPicking, bool()); MOCK_METHOD1(GetDBItemManager, IDataBaseManager* (EDataBaseItemType)); MOCK_METHOD0(GetMaterialManager, CMaterialManager* ()); MOCK_METHOD0(GetMaterialManagerLibrary, IBaseLibraryManager* ()); diff --git a/Code/Sandbox/Editor/LinkTool.cpp b/Code/Sandbox/Editor/LinkTool.cpp deleted file mode 100644 index 4602875b77..0000000000 --- a/Code/Sandbox/Editor/LinkTool.cpp +++ /dev/null @@ -1,286 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -// Original file Copyright Crytek GMBH or its affiliates, used under license. - -#include "EditorDefs.h" - -#include "LinkTool.h" - -// Editor -#include "Viewport.h" -#include "Objects/EntityObject.h" -#include "Objects/SelectionGroup.h" -#include - -// AzCore -#include - -#ifdef LoadCursor -#undef LoadCursor -#endif - -namespace -{ - const float kGeomCacheNodePivotSizeScale = 0.0025f; -} - -////////////////////////////////////////////////////////////////////////// -CLinkTool::CLinkTool() - : m_nodeName(nullptr) - , m_pGeomCacheRenderNode(nullptr) -{ - m_pChild = NULL; - SetStatusText("Click on object and drag a link to a new parent"); - - m_hLinkCursor = CMFCUtils::LoadCursor(IDC_POINTER_LINK); - m_hLinkNowCursor = CMFCUtils::LoadCursor(IDC_POINTER_LINKNOW); - m_hCurrCursor = &m_hLinkCursor; - AZ::EntitySystemBus::Handler::BusConnect(); -} - -////////////////////////////////////////////////////////////////////////// -CLinkTool::~CLinkTool() -{ - AZ::EntitySystemBus::Handler::BusDisconnect(); -} - -////////////////////////////////////////////////////////////////////////// -void CLinkTool::LinkObject(CBaseObject* pChild, CBaseObject* pParent) -{ - if (pChild == NULL) - { - return; - } - - if (ChildIsValid(pParent, pChild)) - { - CUndo undo("Link Object"); - - if (qobject_cast(pChild)) - { - static_cast(pChild)->SetAttachTarget(""); - static_cast(pChild)->SetAttachType(CEntityObject::eAT_Pivot); - } - - pParent->AttachChild(pChild, true); - - QString str; - str = tr("%1 attached to %2").arg(pChild->GetName(), pParent->GetName()); - SetStatusText(str); - } - else - { - SetStatusText("Error: Cyclic linking or already linked."); - } -} - -////////////////////////////////////////////////////////////////////////// -void CLinkTool::LinkSelectedToParent(CBaseObject* pParent) -{ - if (pParent) - { - if (IsRelevant(pParent)) - { - CSelectionGroup* pSel = GetIEditor()->GetSelection(); - if (!pSel->GetCount()) - { - return; - } - CUndo undo("Link Object(s)"); - for (int i = 0; i < pSel->GetCount(); i++) - { - CBaseObject* pChild = pSel->GetObject(i); - if (pChild == pParent) - { - continue; - } - LinkObject(pChild, pParent); - } - } - } -} - -////////////////////////////////////////////////////////////////////////// -bool CLinkTool::MouseCallback(CViewport* view, EMouseEvent event, QPoint& point, [[maybe_unused]] int flags) -{ - view->SetCursorString(""); - - m_hCurrCursor = &m_hLinkCursor; - if (event == eMouseLDown) - { - HitContext hitInfo; - view->HitTest(point, hitInfo); - CBaseObject* obj = hitInfo.object; - if (obj) - { - if (IsRelevant(obj)) - { - m_StartDrag = obj->GetWorldPos(); - m_pChild = obj; - } - } - } - else if (event == eMouseLUp) - { - HitContext hitInfo; - view->HitTest(point, hitInfo); - CBaseObject* obj = hitInfo.object; - if (obj) - { - if (IsRelevant(obj)) - { - CSelectionGroup* pSelectionGroup = GetIEditor()->GetSelection(); - int nGroupCount = pSelectionGroup->GetCount(); - if (pSelectionGroup && nGroupCount > 1) - { - LinkSelectedToParent(obj); - } - if (!pSelectionGroup || nGroupCount <= 1 || !pSelectionGroup->IsContainObject(m_pChild)) - { - LinkObject(m_pChild, obj); - } - } - } - m_pChild = NULL; - } - else if (event == eMouseMove) - { - m_EndDrag = view->ViewToWorld(point); - m_nodeName = nullptr; - m_pGeomCacheRenderNode = nullptr; - - HitContext hitInfo; - if (view->HitTest(point, hitInfo)) - { - m_EndDrag = hitInfo.raySrc + hitInfo.rayDir * hitInfo.dist; - } - - CBaseObject* obj = hitInfo.object; - if (obj) - { - if (IsRelevant(obj)) - { - QString name = obj->GetName(); - if (hitInfo.name) - { - name += QString("\n ") + hitInfo.name; - } - - // Set Cursors. - view->SetCursorString(name); - if (m_pChild) - { - if (ChildIsValid(obj, m_pChild)) - { - m_hCurrCursor = &m_hLinkNowCursor; - } - } - } - } - } - return true; -} - -////////////////////////////////////////////////////////////////////////// -bool CLinkTool::OnKeyDown([[maybe_unused]] CViewport* view, uint32 nChar, [[maybe_unused]] uint32 nRepCnt, [[maybe_unused]] uint32 nFlags) -{ - if (nChar == VK_ESCAPE) - { - // Cancel selection. - GetIEditor()->SetEditTool(nullptr); - } - return false; -} - -////////////////////////////////////////////////////////////////////////// -void CLinkTool::Display(DisplayContext& dc) -{ - if (m_pChild && m_EndDrag != Vec3(ZERO)) - { - ColorF lineColor = (m_hCurrCursor == &m_hLinkNowCursor) ? ColorF(0, 1, 0) : ColorF(1, 0, 0); - dc.DrawLine(m_StartDrag, m_EndDrag, lineColor, lineColor); - } -} - -////////////////////////////////////////////////////////////////////////// -void CLinkTool::OnEntityDestruction(const AZ::EntityId& entityId) -{ - if (m_pChild && (m_pChild->GetType() == OBJTYPE_AZENTITY)) - { - CComponentEntityObject* childComponentEntity = static_cast(m_pChild); - AZ::EntityId childEntityId = childComponentEntity->GetAssociatedEntityId(); - if(entityId == childEntityId) - { - GetIEditor()->SetEditTool(nullptr); - } - } -} - -////////////////////////////////////////////////////////////////////////// -bool CLinkTool::ChildIsValid(CBaseObject* pParent, CBaseObject* pChild, int nDir) -{ - if (!pParent) - { - return false; - } - if (!pChild) - { - return false; - } - if (pParent == pChild) - { - return false; - } - - // Legacy entities and AZ entities shouldn't be linked. - if ((pParent->GetType() == OBJTYPE_AZENTITY) != (pChild->GetType() == OBJTYPE_AZENTITY)) - { - return false; - } - - CBaseObject* pObj; - if (nDir & 1) - { - pObj = pChild->GetParent(); - if (pObj) - { - if (!ChildIsValid(pParent, pObj, 1)) - { - return false; - } - } - } - if (nDir & 2) - { - for (int i = 0; i < pChild->GetChildCount(); i++) - { - pObj = pChild->GetChild(i); - if (pObj) - { - if (!ChildIsValid(pParent, pObj, 2)) - { - return false; - } - } - } - } - return true; -} - -////////////////////////////////////////////////////////////////////////// -bool CLinkTool::OnSetCursor(CViewport* vp) -{ - vp->SetCursor(*m_hCurrCursor); - return true; -} - -#include diff --git a/Code/Sandbox/Editor/LinkTool.h b/Code/Sandbox/Editor/LinkTool.h deleted file mode 100644 index a24370f7fe..0000000000 --- a/Code/Sandbox/Editor/LinkTool.h +++ /dev/null @@ -1,85 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -// Original file Copyright Crytek GMBH or its affiliates, used under license. - -// Description : Definition of CLinkTool, tool used to link objects. - - -#ifndef CRYINCLUDE_EDITOR_LINKTOOL_H -#define CRYINCLUDE_EDITOR_LINKTOOL_H - -#pragma once - -#if !defined(Q_MOC_RUN) -#include -#include "EditTool.h" -#include "Include/IObjectManager.h" -#endif - -class CEntityObject; - -////////////////////////////////////////////////////////////////////////// -class CLinkTool - : public CEditTool - , public IObjectSelectCallback - , private AZ::EntitySystemBus::Handler -{ - Q_OBJECT -public: - Q_INVOKABLE CLinkTool(); // IPickObjectCallback *callback,CRuntimeClass *targetClass=NULL ); - - // Ovverides from CEditTool - bool MouseCallback(CViewport* view, EMouseEvent event, QPoint& point, int flags); - - virtual void BeginEditParams([[maybe_unused]] IEditor* ie, [[maybe_unused]] int flags) {}; - virtual void EndEditParams() {}; - - virtual void Display(DisplayContext& dc); - virtual bool OnKeyDown(CViewport* view, uint32 nChar, uint32 nRepCnt, uint32 nFlags); - virtual bool OnKeyUp([[maybe_unused]] CViewport* view, [[maybe_unused]] uint32 nChar, [[maybe_unused]] uint32 nRepCnt, [[maybe_unused]] uint32 nFlags) { return false; }; - - virtual bool OnSelectObject([[maybe_unused]] CBaseObject* obj) {return false; } - virtual bool CanSelectObject([[maybe_unused]] CBaseObject* obj) { return true; }; - - virtual bool OnSetCursor(CViewport* vp); - - void LinkSelectedToParent(CBaseObject* pParent); - -protected: - virtual ~CLinkTool(); - // Delete itself. - void DeleteThis() { delete this; }; - -private: - bool IsRelevant([[maybe_unused]] CBaseObject* obj) { return true; } - bool ChildIsValid(CBaseObject* pParent, CBaseObject* pChild, int nDir = 3); - void LinkObject(CBaseObject* pChild, CBaseObject* pParent); - void LinkToNode(CEntityObject* pChild, CEntityObject* pParent, const char* nodeName); - - // AZ::EntitySystemBus::Handler - void OnEntityDestruction(const AZ::EntityId& entityId) override; - - - CBaseObject* m_pChild; - Vec3 m_StartDrag; - Vec3 m_EndDrag; - - QCursor m_hLinkCursor; - QCursor m_hLinkNowCursor; - QCursor* m_hCurrCursor; - - const char* m_nodeName; - IGeomCacheRenderNode* m_pGeomCacheRenderNode; -}; - - -#endif // CRYINCLUDE_EDITOR_LINKTOOL_H diff --git a/Code/Sandbox/Editor/MainWindow.cpp b/Code/Sandbox/Editor/MainWindow.cpp index b926c00fc8..6acd8cfc20 100644 --- a/Code/Sandbox/Editor/MainWindow.cpp +++ b/Code/Sandbox/Editor/MainWindow.cpp @@ -1104,15 +1104,6 @@ void MainWindow::InitActions() .RegisterUpdateCallback(cryEdit, &CCryEditApp::OnUpdateSelected) .SetIcon(Style::icon("Align_to_grid")) .SetApplyHoverEffect(); - am->AddAction(ID_OBJECTMODIFY_ALIGN, tr("Align to object")).SetCheckable(true) -#if AZ_TRAIT_OS_PLATFORM_APPLE - .SetStatusTip(tr(u8"\u2318: Align an object to a bounding box, \u2325 : Keep Rotation of the moved object, Shift : Keep Scale of the moved object")) -#else - .SetStatusTip(tr("Ctrl: Align an object to a bounding box, Alt : Keep Rotation of the moved object, Shift : Keep Scale of the moved object")) -#endif - .RegisterUpdateCallback(cryEdit, &CCryEditApp::OnUpdateAlignObject) - .SetIcon(Style::icon("Align_to_Object")) - .SetApplyHoverEffect(); am->AddAction(ID_MODIFY_ALIGNOBJTOSURF, tr("Align object to surface (Hold CTRL)")).SetCheckable(true) .SetToolTip(tr("Align object to surface (Hold CTRL)")) .RegisterUpdateCallback(cryEdit, &CCryEditApp::OnUpdateAlignToVoxel) @@ -1449,15 +1440,6 @@ void MainWindow::InitActions() .SetApplyHoverEffect(); // Edit Mode Toolbar Actions - am->AddAction(ID_EDITTOOL_LINK, tr("Link an object to parent")) - .SetIcon(Style::icon("add_link")) - .SetApplyHoverEffect() - .SetCheckable(true) - .RegisterUpdateCallback(cryEdit, &CCryEditApp::OnUpdateEditToolLink); - am->AddAction(ID_EDITTOOL_UNLINK, tr("Unlink all selected objects")) - .SetIcon(Style::icon("remove_link")) - .SetApplyHoverEffect() - .RegisterUpdateCallback(cryEdit, &CCryEditApp::OnUpdateEditToolUnlink); am->AddAction(IDC_SELECTION_MASK, tr("Selected Object Types")); am->AddAction(ID_REF_COORDS_SYS, tr("Reference coordinate system")) .SetShortcut(tr("Ctrl+W")) diff --git a/Code/Sandbox/Editor/PickObjectTool.cpp b/Code/Sandbox/Editor/PickObjectTool.cpp deleted file mode 100644 index dc1fce110e..0000000000 --- a/Code/Sandbox/Editor/PickObjectTool.cpp +++ /dev/null @@ -1,173 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -// Original file Copyright Crytek GMBH or its affiliates, used under license. - -#include "EditorDefs.h" - -#include "PickObjectTool.h" - -// Editor -#include "Viewport.h" -#include "Include/HitContext.h" -#include "Objects/BaseObject.h" - - -////////////////////////////////////////////////////////////////////////// -CPickObjectTool::CPickObjectTool(IPickObjectCallback* callback, const QMetaObject* targetClass) -{ - assert(callback != 0); - m_callback = callback; - m_targetClass = targetClass; - m_bMultiPick = false; -} - -////////////////////////////////////////////////////////////////////////// -CPickObjectTool::~CPickObjectTool() -{ - GetIEditor()->GetObjectManager()->SetSelectCallback(0); - //m_prevSelectCallback = 0; - if (m_callback) - { - m_callback->OnCancelPick(); - } -} - -////////////////////////////////////////////////////////////////////////// -void CPickObjectTool::BeginEditParams([[maybe_unused]] IEditor* ie, [[maybe_unused]] int flags) -{ - QString str = "Pick object"; - if (m_targetClass) - { - str = tr("Pick %1 object").arg(m_targetClass->className()); - } - SetStatusText(str); - - //m_prevSelectCallback = - GetIEditor()->GetObjectManager()->SetSelectCallback(this); -} - -////////////////////////////////////////////////////////////////////////// -bool CPickObjectTool::MouseCallback(CViewport* view, EMouseEvent event, QPoint& point, [[maybe_unused]] int flags) -{ - if (event == eMouseLDown) - { - HitContext hitInfo; - view->HitTest(point, hitInfo); - CBaseObject* obj = hitInfo.object; - if (obj) - { - if (IsRelevant(obj)) - { - if (m_callback) - { - // Can pick this one. - m_callback->OnPick(obj); - } - if (!m_bMultiPick) - { - m_callback = 0; - GetIEditor()->SetEditTool(0); - } - } - } - } - else if (event == eMouseMove) - { - HitContext hitInfo; - view->HitTest(point, hitInfo); - CBaseObject* obj = hitInfo.object; - if (obj) - { - if (IsRelevant(obj)) - { - // Set Cursors. - view->SetCurrentCursor(STD_CURSOR_HIT, obj->GetName()); - } - } - } - return true; -} - -////////////////////////////////////////////////////////////////////////// -bool CPickObjectTool::OnSelectObject(CBaseObject* obj) -{ - if (IsRelevant(obj)) - { - // Can pick this one. - if (m_callback) - { - m_callback->OnPick(obj); - m_callback = 0; - } - if (!m_bMultiPick) - { - GetIEditor()->SetEditTool(0); - } - } - return false; -} - -////////////////////////////////////////////////////////////////////////// -bool CPickObjectTool::CanSelectObject(CBaseObject* obj) -{ - return IsRelevant(obj); -} - -////////////////////////////////////////////////////////////////////////// -bool CPickObjectTool::OnKeyDown([[maybe_unused]] CViewport* view, uint32 nChar, [[maybe_unused]] uint32 nRepCnt, [[maybe_unused]] uint32 nFlags) -{ - if (nChar == VK_ESCAPE) - { - // Cancel selection. - GetIEditor()->SetEditTool(0); - } - return false; -} - -////////////////////////////////////////////////////////////////////////// -bool CPickObjectTool::IsRelevant(CBaseObject* obj) -{ - assert(obj != 0); - if (obj == NULL) - { - return false; - } - if (!m_callback) - { - return false; - } - - if (!m_targetClass) - { - return m_callback->OnPickFilter(obj); - } - else - { - if (obj->metaObject() == m_targetClass || m_targetClass->cast(obj)) - { - return m_callback->OnPickFilter(obj); - } - } - return false; -} - -////////////////////////////////////////////////////////////////////////// -bool CPickObjectTool::IsNeedSpecificBehaviorForSpaceAcce() -{ - if (m_callback && m_callback->IsNeedSpecificBehaviorForSpaceAcce()) - { - return true; - } - return false; -} - -#include diff --git a/Code/Sandbox/Editor/PickObjectTool.h b/Code/Sandbox/Editor/PickObjectTool.h deleted file mode 100644 index 3b0241042a..0000000000 --- a/Code/Sandbox/Editor/PickObjectTool.h +++ /dev/null @@ -1,76 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -// Original file Copyright Crytek GMBH or its affiliates, used under license. - -// Description : Definition of PickObjectTool, tool used to pick objects. - - -#ifndef CRYINCLUDE_EDITOR_PICKOBJECTTOOL_H -#define CRYINCLUDE_EDITOR_PICKOBJECTTOOL_H - -#if !defined(Q_MOC_RUN) -#include "EditTool.h" -#include "IObjectManager.h" -#endif - -#pragma once - -////////////////////////////////////////////////////////////////////////// -class CPickObjectTool - : public CEditTool - , public IObjectSelectCallback -{ - Q_OBJECT -public: - CPickObjectTool(IPickObjectCallback* callback, const QMetaObject* targetClass = NULL); - - //! If set to true, pick tool will not stop picking after first pick. - void SetMultiplePicks(bool bEnable) { m_bMultiPick = bEnable; }; - - // Ovverides from CEditTool - bool MouseCallback(CViewport* view, EMouseEvent event, QPoint& point, int flags); - - virtual void BeginEditParams(IEditor* ie, int flags); - virtual void EndEditParams() {}; - - virtual void Display([[maybe_unused]] DisplayContext& dc) {}; - virtual bool OnKeyDown(CViewport* view, uint32 nChar, uint32 nRepCnt, uint32 nFlags); - virtual bool OnKeyUp([[maybe_unused]] CViewport* view, [[maybe_unused]] uint32 nChar, [[maybe_unused]] uint32 nRepCnt, [[maybe_unused]] uint32 nFlags) { return false; }; - - ////////////////////////////////////////////////////////////////////////// - // IObjectSelectCallback - ////////////////////////////////////////////////////////////////////////// - virtual bool OnSelectObject(CBaseObject* obj); - virtual bool CanSelectObject(CBaseObject* obj); - ////////////////////////////////////////////////////////////////////////// - - virtual bool IsNeedSpecificBehaviorForSpaceAcce(); - -protected: - virtual ~CPickObjectTool(); - // Delete itself. - void DeleteThis() { delete this; }; - -private: - bool IsRelevant(CBaseObject* obj); - - //! Object that requested pick. - IPickObjectCallback* m_callback; - - //! If target class specified, will pick only objects that belongs to that runtime class. - const QMetaObject* m_targetClass; - - bool m_bMultiPick; -}; - - -#endif // CRYINCLUDE_EDITOR_PICKOBJECTTOOL_H diff --git a/Code/Sandbox/Editor/Resource.h b/Code/Sandbox/Editor/Resource.h index a4bd2c1143..afcd0c7a6f 100644 --- a/Code/Sandbox/Editor/Resource.h +++ b/Code/Sandbox/Editor/Resource.h @@ -181,8 +181,6 @@ #define ID_TV_STOP 33568 #define ID_TV_PAUSE 33569 #define ID_ADDNODE 33570 -#define ID_EDITTOOL_LINK 33571 -#define ID_EDITTOOL_UNLINK 33572 #define ID_ADDSCENETRACK 33573 #define ID_FIND 33574 #define ID_SNAP_TO_GRID 33575 @@ -214,7 +212,6 @@ #define ID_TV_JUMPSTART 33601 #define ID_TV_PREVKEY 33602 #define ID_TV_NEXTKEY 33603 -#define ID_OBJECTMODIFY_ALIGN 33604 #define ID_PLAY_LOOP 33607 #define ID_TERRAIN 33611 #define ID_OBJECTMODIFY_ALIGNTOGRID 33619 diff --git a/Code/Sandbox/Editor/ToolbarManager.cpp b/Code/Sandbox/Editor/ToolbarManager.cpp index 4679f9cb6a..d39dabf034 100644 --- a/Code/Sandbox/Editor/ToolbarManager.cpp +++ b/Code/Sandbox/Editor/ToolbarManager.cpp @@ -585,13 +585,6 @@ AmazonToolbar ToolbarManager::GetEditModeToolbar() const t.AddAction(ID_TOOLBAR_WIDGET_UNDO, ORIGINAL_TOOLBAR_VERSION); t.AddAction(ID_TOOLBAR_WIDGET_REDO, ORIGINAL_TOOLBAR_VERSION); - if (!GetIEditor()->IsNewViewportInteractionModelEnabled()) - { - t.AddAction(ID_TOOLBAR_SEPARATOR, ORIGINAL_TOOLBAR_VERSION); - t.AddAction(ID_EDITTOOL_LINK, ORIGINAL_TOOLBAR_VERSION); - t.AddAction(ID_EDITTOOL_UNLINK, ORIGINAL_TOOLBAR_VERSION); - } - t.AddAction(ID_TOOLBAR_SEPARATOR, ORIGINAL_TOOLBAR_VERSION); if (!GetIEditor()->IsNewViewportInteractionModelEnabled()) @@ -630,7 +623,6 @@ AmazonToolbar ToolbarManager::GetObjectToolbar() const AmazonToolbar t = AmazonToolbar("Object", QObject::tr("Object Toolbar")); t.SetMainToolbar(true); t.AddAction(ID_GOTO_SELECTED, ORIGINAL_TOOLBAR_VERSION); - t.AddAction(ID_OBJECTMODIFY_ALIGN, ORIGINAL_TOOLBAR_VERSION); t.AddAction(ID_OBJECTMODIFY_ALIGNTOGRID, ORIGINAL_TOOLBAR_VERSION); t.AddAction(ID_OBJECTMODIFY_SETHEIGHT, ORIGINAL_TOOLBAR_VERSION); t.AddAction(ID_MODIFY_ALIGNOBJTOSURF, ORIGINAL_TOOLBAR_VERSION); diff --git a/Code/Sandbox/Editor/editor_lib_files.cmake b/Code/Sandbox/Editor/editor_lib_files.cmake index c91d6ce428..5696931f26 100644 --- a/Code/Sandbox/Editor/editor_lib_files.cmake +++ b/Code/Sandbox/Editor/editor_lib_files.cmake @@ -533,8 +533,6 @@ set(FILES Dialogs/PythonScriptsDialog.ui Dialogs/Generic/UserOptions.cpp Dialogs/Generic/UserOptions.h - AlignTool.cpp - AlignTool.h ObjectCloneTool.cpp ObjectCloneTool.h EditMode/SubObjectSelectionReferenceFrameCalculator.cpp @@ -545,10 +543,6 @@ set(FILES RotateTool.h EditTool.cpp EditTool.h - LinkTool.cpp - LinkTool.h - PickObjectTool.cpp - PickObjectTool.h VoxelAligningTool.cpp VoxelAligningTool.h Export/ExportManager.cpp From 8804ab8f1f6990418df4afba0a5e9b889c8f0cbe Mon Sep 17 00:00:00 2001 From: Brian Herrera Date: Tue, 20 Apr 2021 09:56:46 -0700 Subject: [PATCH 49/67] Add script to sync repo with upstream --- scripts/build/tools/sync_repo.py | 153 +++++++++++++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 scripts/build/tools/sync_repo.py diff --git a/scripts/build/tools/sync_repo.py b/scripts/build/tools/sync_repo.py new file mode 100644 index 0000000000..0275cc6661 --- /dev/null +++ b/scripts/build/tools/sync_repo.py @@ -0,0 +1,153 @@ +# +# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or +# its licensors. +# +# For complete copyright and license terms please see the LICENSE at the root of this +# distribution (the "License"). All use of this software is governed by the License, +# or, if provided, by the license below or the license accompanying this file. Do not +# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# + +import argparse +import boto3 +import logging +import os +import subprocess +import sys + +from botocore.exceptions import ClientError +from urllib.parse import urlparse, urlunparse + +log = logging.getLogger(__name__) +log.setLevel(logging.INFO) + +DEFAULT_BRANCH = "main" +DEFAULT_WORKSPACE_ROOT = "." + + +class MergeError(Exception): + pass + + +class SyncRepo: + """A git repo with configured remotes to sync with GitHub. + + Used by the sync pipeline to push branches to GitHub and pull down latest from main. Changes flow from + the upstream remote down to origin. Remotes can be swapped to pull changes in the other direction. + + Attributes: + origin: URL for the origin repo. This is the target for the sync. + upstream: URL for the upstream repo. This is the source with the latest changes. + workspace_root: Path to the parent directory for the local workspace. + parameter: Name of the parameter used to store GitHub credentials. + + """ + + def __init__(self, origin, upstream, workspace_root, region=None, parameter=None): + self.workspace_root = workspace_root + self.parameter = parameter + self.region = region + + if self.parameter and self.region: + log.info(f"Adding credentials from {self.parameter} in {self.region}") + self.origin = self._add_credentials(origin) + self.upstream = self._add_credentials(upstream) + else: + self.origin = origin + self.upstream = upstream + + self.origin_name = self.origin.split("/")[-1] + self.upstream_name = self.upstream.split("/")[-1] + self.workspace = os.path.join(workspace_root, self.origin_name) + + def _add_credentials(self, url): + """Add credentials to a github repo URL from parameter store.""" + parsed_url = urlparse(url) + if parsed_url.netloc == "github.com": + try: + ssm = boto3.client("ssm", self.region) + credentials = ssm.get_parameter( + Name=self.parameter, + WithDecryption=True + )["Parameter"]["Value"] + url = urlunparse(parsed_url._replace(netloc=f"{credentials}@github.com")) + except ClientError as e: + log.error(f"Error retrieving credentials from parameter store: {e}") + return url + + def clone(self): + """Clones repo to the instance workspace. Refreshes remote configs for existing repos.""" + if not os.path.exists(self.workspace): + os.mkdir(self.workspace) + + if subprocess.run(["git", "rev-parse", "--is-inside-work-tree"], cwd=self.workspace).returncode != 0: + log.info(f"Cloning repo {self.origin} to {self.workspace}.") + subprocess.run(["git", "clone", self.origin, self.origin_name], cwd=self.workspace_root, check=True) + subprocess.run(["git", "remote", "add", "upstream", self.upstream], cwd=self.workspace) + else: + log.info("Update remote config for existing repos.") + subprocess.run(["git", "remote", "set-url", "origin", self.origin], cwd=self.workspace) + subprocess.run(["git", "remote", "set-url", "upstream", self.upstream], cwd=self.workspace) + + def sync(self, branch): + """Fetches latest from upstream and syncs changes to origin. + + Syncs are one-way and conflicts are not expected. Fast-forward merges are performed if possible. If a + fast-forward merge is not possible, a merge will not be attempted and will raise an exception. + + The checkout command will create a new branch from upstream/ if it does not exist in origin. The + remote will be remapped to origin during the push. + + Args: + branch: Name of the upstream branch to sync with origin. + + Raises: + MergeError: An error occured when attempting to merge to the target branch. + + """ + subprocess.run(["git", "fetch", "origin"], cwd=self.workspace, check=True) + subprocess.run(["git", "fetch", "upstream"], cwd=self.workspace, check=True) + subprocess.run(["git", "checkout", branch], cwd=self.workspace, check=True) + + # If the branch exists in origin, merge from upstream. New branches do not require a merge. + if subprocess.run(["git", "ls-remote", "--exit-code", "-h", "origin", branch], cwd=self.workspace).returncode == 0: + subprocess.run(["git", "reset", "--hard", "HEAD"], cwd=self.workspace, check=True) + subprocess.run(["git", "pull"], cwd=self.workspace, check=True) + + if subprocess.run(["git", "merge", "--ff-only", f"upstream/{branch}"], cwd=self.workspace).returncode != 0: + raise MergeError(f"Unable to perform ff merge to target branch: {self.origin}/{branch} Intervention required.") + + subprocess.run(["git", "push", "-u", "origin", branch], cwd=self.workspace, check=True) + + +def process_args(): + """Process arguements. + + Example: + sync_repo.py [Options] + + """ + parser = argparse.ArgumentParser() + parser.add_argument("upstream") + parser.add_argument("origin") + parser.add_argument("-b", "--branch", default=DEFAULT_BRANCH) + parser.add_argument("-w", "--workspace-root", default=DEFAULT_WORKSPACE_ROOT) + parser.add_argument("-r", "--region", default=None) + parser.add_argument("-p", "--parameter", default=None) + return parser.parse_args() + + +def main(): + args = process_args() + + repo = SyncRepo(args.origin, args.upstream, args.workspace_root, args.region, args.parameter) + repo.clone() + try: + repo.sync(args.branch) + except MergeError as e: + log.error(e) + + +if __name__ == "__main__": + sys.exit(main()) From 83324762b58438c954a75851d3a277511e2c5628 Mon Sep 17 00:00:00 2001 From: luissemp Date: Tue, 20 Apr 2021 10:40:53 -0700 Subject: [PATCH 50/67] Brought over SC's command line fixes and add_node example script --- .../Code/Editor/View/Widgets/CommandLine.cpp | 215 ++++++++++++++---- .../Code/Editor/View/Widgets/CommandLine.h | 106 ++++++++- .../Code/Editor/View/Windows/MainWindow.cpp | 2 +- .../Code/Editor/View/Windows/mainwindow.ui | 2 +- .../AutoGen/ScriptCanvasGrammar_Header.jinja | 2 +- 5 files changed, 275 insertions(+), 52 deletions(-) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/CommandLine.cpp b/Gems/ScriptCanvas/Code/Editor/View/Widgets/CommandLine.cpp index 6fa930ba34..19390de956 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/CommandLine.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Widgets/CommandLine.cpp @@ -79,15 +79,19 @@ namespace // Create the nodes in a horizontal list at the top of the canvas. - AZ::Vector2 pos(20.0f, -100.0f); + AZ::Vector2 pos(20.0f, 20.0f); for (const auto& index : ui->commandList->selectionModel()->selectedIndexes()) { - if (index.column() != CommandListDataModel::ColumnIndex::Command) + if (index.column() != CommandListDataModel::ColumnIndex::CommandIndex) { continue; } AZ::Uuid type = dataModel->data(index, CommandListDataModel::CustomRole::Types).value(); + if (type.IsNull()) + { + continue; + } [[maybe_unused]] const AZ::SerializeContext::ClassData* classData = serializeContext->FindClassData(type); AZ_Assert(classData, "Failed to find ClassData for ID: %s", type.ToString().data()); @@ -115,6 +119,8 @@ namespace ScriptCanvasEditor ///////////////////////////////////////////////////////////////////////////////////////////// CommandListDataModel::CommandListDataModel([[maybe_unused]] QWidget* parent /*= nullptr*/) { + ScriptCanvasCommandLineRequestBus::Handler::BusConnect(); + AZ::SerializeContext* serializeContext = nullptr; AZ::ComponentApplicationBus::BroadcastResult(serializeContext, &AZ::ComponentApplicationRequests::GetSerializeContext); @@ -138,12 +144,62 @@ namespace ScriptCanvasEditor if (add) { - m_nodeTypes.push_back(classData->m_typeId); + Entry entry; + entry.m_type = classData->m_typeId; + m_entries.emplace_back(entry); } } return true; } - ); + ); + + ScriptCanvasCommandLineRequestBus::Broadcast(&ScriptCanvasCommandLineRequests::AddCommand, "add_node", "Adds the specified node to the graph", + [serializeContext](const AZStd::vector& nodes) + { + AZ::Uuid nodeTypeToAdd = AZ::Uuid::CreateNull(); + if (nodes.size() > 0) + { + const AZStd::string& nodeName = *(nodes.begin()); + + serializeContext->EnumerateDerived( + [&nodeName, &nodeTypeToAdd](const AZ::SerializeContext::ClassData* classData, [[maybe_unused]] const AZ::Uuid& classUuid) -> bool + { + if (classData && classData->m_editData) + { + if (nodeName.compare(classData->m_name) == 0) + { + nodeTypeToAdd = classData->m_typeId; + } + } + return true; + } + ); + + if (!nodeTypeToAdd.IsNull()) + { + ScriptCanvas::ScriptCanvasId scriptCanvasId; + ScriptCanvasEditor::GeneralRequestBus::BroadcastResult(scriptCanvasId, &ScriptCanvasEditor::GeneralRequests::GetActiveScriptCanvasId); + + AZ::EntityId graphCanvasGraphId; + ScriptCanvasEditor::GeneralRequestBus::BroadcastResult(graphCanvasGraphId, &ScriptCanvasEditor::GeneralRequests::GetActiveGraphCanvasGraphId); + + if (scriptCanvasId.IsValid() && graphCanvasGraphId.IsValid()) + { + ScriptCanvasEditor::Nodes::StyleConfiguration styleConfiguration; + + AZ::Vector2 pos(100.0f, 20.0f); + NodeIdPair nodePair = ScriptCanvasEditor::Nodes::CreateNode(nodeTypeToAdd, scriptCanvasId, styleConfiguration); + GraphCanvas::SceneRequestBus::Event(graphCanvasGraphId, &GraphCanvas::SceneRequests::AddNode, nodePair.m_graphCanvasId, pos, false); + } + } + } + } + ); + } + + CommandListDataModel::~CommandListDataModel() + { + ScriptCanvasCommandLineRequestBus::Handler::BusDisconnect(); } QModelIndex CommandListDataModel::index(int row, int column, const QModelIndex& parent /*= QModelIndex()*/) const @@ -162,7 +218,7 @@ namespace ScriptCanvasEditor int CommandListDataModel::rowCount([[maybe_unused]] const QModelIndex& parent /*= QModelIndex()*/) const { - return static_cast(m_nodeTypes.size()); + return static_cast(m_entries.size()); } int CommandListDataModel::columnCount([[maybe_unused]] const QModelIndex& parent /*= QModelIndex()*/) const @@ -190,19 +246,40 @@ namespace ScriptCanvasEditor } } - AZ::Uuid nodeType = m_nodeTypes[index.row()]; - const AZ::SerializeContext::ClassData* classData = serializeContext->FindClassData(nodeType); - if (index.column() == ColumnIndex::Command) + AZ::Uuid nodeType = m_entries[index.row()].m_type; + if (nodeType.IsNull()) { - return QVariant(QString(classData->m_name)); + if (index.column() == ColumnIndex::CommandIndex) + { + return QVariant(QString(m_entries[index.row()].m_command.c_str())); + } + if (index.column() == ColumnIndex::DescriptionIndex) + { + AZStd::string command = m_entries[index.row()].m_command; + const auto& entry = m_commands.find(command); + if (entry != m_commands.end()) + { + return QVariant(QString(entry->second->GetDescription().c_str())); + } + } } - if (index.column() == ColumnIndex::Description) + else { - return QVariant(QString(classData->m_editData ? classData->m_editData->m_description : tr("No description provided."))); - } - if (index.column() == ColumnIndex::Trail) - { - return QVariant(QString("")); + if (const AZ::SerializeContext::ClassData* classData = serializeContext->FindClassData(nodeType)) + { + if (index.column() == ColumnIndex::CommandIndex) + { + return QVariant(QString(classData->m_name)); + } + if (index.column() == ColumnIndex::DescriptionIndex) + { + return QVariant(QString(classData->m_editData ? classData->m_editData->m_description : tr("No description provided."))); + } + if (index.column() == ColumnIndex::TrailIndex) + { + return QVariant(QString("")); + } + } } } @@ -210,25 +287,42 @@ namespace ScriptCanvasEditor { case CustomRole::Types: { - AZ::Uuid nodeType = m_nodeTypes[index.row()]; + AZ::Uuid nodeType = m_entries[index.row()].m_type; return QVariant::fromValue(nodeType); } break; case CustomRole::Node: { - AZ::Uuid nodeType = m_nodeTypes[index.row()]; - const AZ::SerializeContext::ClassData* classData = serializeContext->FindClassData(nodeType); - if (index.column() == ColumnIndex::Command) + AZ::Uuid nodeType = m_entries[index.row()].m_type; + if (nodeType.IsNull()) { - return QVariant(QString(classData->m_name)); + return QVariant(QString(m_entries[index.row()].m_command.c_str())); } - if (index.column() == ColumnIndex::Description) + else { - return QVariant(QString(classData->m_editData ? classData->m_editData->m_description : tr("No description provided."))); + if (const AZ::SerializeContext::ClassData* classData = serializeContext->FindClassData(nodeType)) + { + if (index.column() == ColumnIndex::CommandIndex) + { + return QVariant(QString(classData->m_name)); + } + if (index.column() == ColumnIndex::DescriptionIndex) + { + return QVariant(QString(classData->m_editData ? classData->m_editData->m_description : tr("No description provided."))); + } + if (index.column() == ColumnIndex::TrailIndex) + { + return QVariant(QString("")); + } + } } - if (index.column() == ColumnIndex::Trail) + } + break; + case CustomRole::Commands: + { + if (index.column() == ColumnIndex::CommandIndex) { - return QVariant(QString("")); + return QVariant(QString(m_entries[index.row()].m_command.c_str())); } } break; @@ -250,21 +344,31 @@ namespace ScriptCanvasEditor AZ::SerializeContext* serializeContext = nullptr; AZ::ComponentApplicationBus::BroadcastResult(serializeContext, &AZ::ComponentApplicationRequests::GetSerializeContext); - for (const auto& entry : m_nodeTypes) + for (const auto& entry : m_entries) { - const AZ::SerializeContext::ClassData* classData = serializeContext->FindClassData(entry); - if (classData) + if (!entry.m_type.IsNull()) { - QString name = QString(classData->m_name); - if (name.startsWith(input.c_str(), Qt::CaseSensitivity::CaseInsensitive)) + if (const AZ::SerializeContext::ClassData* classData = serializeContext->FindClassData(entry.m_type)) { - return true; + QString name = QString(classData->m_name); + if (name.startsWith(input.c_str(), Qt::CaseSensitivity::CaseInsensitive)) + { + return true; + } } } + else + { + QString commandName = entry.m_command.c_str(); + return (commandName.startsWith(input.c_str(), Qt::CaseSensitivity::CaseInsensitive)); + } } + return false; } + ScriptCanvasEditor::Widget::CommandRegistry CommandListDataModel::m_commands; + // CommandLineEdit ///////////////////////////////////////////////////////////////////////////////////////////// @@ -335,8 +439,25 @@ namespace ScriptCanvasEditor case Qt::Key_Return: { // Invoke the command - // TODO: trigger invoke - // CommandRequestBus::Broadcast(&CommandRequest::Invoke, text().toStdString().c_str()); + AZStd::string commandText = text().toStdString().c_str(); + AZStd::vector tokens; + AZ::StringFunc::Tokenize(commandText, tokens, " "); + if (tokens.size() == 1) + { + ScriptCanvasCommandLineRequestBus::Broadcast(&ScriptCanvasCommandLineRequests::Invoke, tokens.begin()->c_str()); + } + else if (tokens.size() > 1) + { + AZStd::string command = *(tokens.begin()); + AZStd::vector args; + for (auto it = tokens.begin() + 1; it != tokens.end(); ++it) + { + args.push_back(*it); + } + ScriptCanvasCommandLineRequestBus::Broadcast(&ScriptCanvasCommandLineRequests::InvokeWithArguments, command.c_str(), args); + } + + ResetState(); qobject_cast(parent())->hide(); } @@ -376,20 +497,29 @@ namespace ScriptCanvasEditor // CommandListDataProxyModel ///////////////////////////////////////////////////////////////////////////////////////////// - CommandListDataProxyModel::CommandListDataProxyModel(QObject* parent /*= nullptr*/) + CommandListDataProxyModel::CommandListDataProxyModel(CommandListDataModel* commandListData, QObject* parent /*= nullptr*/) : QSortFilterProxyModel(parent) { - QStringList commands; + setSourceModel(commandListData); + + QStringList commandList; - CommandListDataModel* commandListData = new CommandListDataModel(); for (int i = 0; i < commandListData->rowCount(); ++i) { - QModelIndex index = commandListData->index(i, CommandListDataModel::ColumnIndex::Command); + QModelIndex index = commandListData->index(i, CommandListDataModel::ColumnIndex::CommandIndex); QString command = commandListData->data(index, CommandListDataModel::CustomRole::Node).toString(); - commands.push_back(command); + commandList.push_back(command); } - m_completer = new QCompleter(commands); + ScriptCanvasCommandLineRequests::CommandNameList commands; + ScriptCanvasCommandLineRequestBus::BroadcastResult(commands, &ScriptCanvasCommandLineRequests::GetCommands); + for (auto& command : commands) + { + QString commandName = command.first.c_str(); + commandList.push_back(commandName); + } + + m_completer = new QCompleter(commandList); m_completer->setCompletionMode(QCompleter::UnfilteredPopupCompletion); m_completer->setCaseSensitivity(Qt::CaseInsensitive); } @@ -421,7 +551,7 @@ namespace ScriptCanvasEditor } } - QModelIndex index = dataModel->index(sourceRow, CommandListDataModel::ColumnIndex::Command); + QModelIndex index = dataModel->index(sourceRow, CommandListDataModel::ColumnIndex::CommandIndex); QString sourceStr = dataModel->data(index).toString(); if (sourceRow > 0 && sourceStr.startsWith(m_input.c_str(), Qt::CaseSensitivity::CaseInsensitive)) @@ -450,8 +580,7 @@ namespace ScriptCanvasEditor ui->setupUi(this); CommandListDataModel* commandListDataModel = new CommandListDataModel(); - CommandListDataProxyModel* commandListDataProxyModel = new CommandListDataProxyModel(); - commandListDataProxyModel->setSourceModel(commandListDataModel); + CommandListDataProxyModel* commandListDataProxyModel = new CommandListDataProxyModel(commandListDataModel); ui->commandList->setModel(commandListDataProxyModel); @@ -460,8 +589,8 @@ namespace ScriptCanvasEditor connect(ui->commandText, &CommandLineEdit::onKeyReleased, this, &CommandLine::onEditKeyReleaseEvent); connect(ui->commandList, &CommandLineList::onKeyReleased, this, &CommandLine::onListKeyReleaseEvent); - ui->commandList->setColumnWidth(CommandListDataModel::ColumnIndex::Command, 250); - ui->commandList->setColumnWidth(CommandListDataModel::ColumnIndex::Description, 1000); + ui->commandList->setColumnWidth(CommandListDataModel::ColumnIndex::CommandIndex, 250); + ui->commandList->setColumnWidth(CommandListDataModel::ColumnIndex::DescriptionIndex, 1000); } void CommandLine::onTextChanged(const QString& text) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/CommandLine.h b/Gems/ScriptCanvas/Code/Editor/View/Widgets/CommandLine.h index ab9b115bde..28e3ce4671 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/CommandLine.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Widgets/CommandLine.h @@ -25,6 +25,7 @@ #include #include #include +#include #endif namespace Ui @@ -36,10 +37,49 @@ namespace ScriptCanvasEditor { namespace Widget { + class Command + { + public: + using Functor = AZStd::function)>; + + Command(const AZStd::string& name, const AZStd::string& description, Functor functor) + : m_name(name) + , m_description(description) + , m_functor(functor) + {} + + void operator()(const AZStd::vector& args) + { + m_functor(args); + } + + const AZStd::string& GetName() const { return m_name; } + const AZStd::string& GetDescription() const { return m_description; } + + private: + AZStd::string m_name; + AZStd::string m_description; + Functor m_functor; + }; + + using CommandRegistry = AZStd::unordered_map>; + + struct ScriptCanvasCommandLineRequests : public AZ::EBusTraits + { + virtual void AddCommand(const AZStd::string commandName, const AZStd::string description, Command::Functor) = 0; + virtual void Invoke(const char* commandName) = 0; + virtual void InvokeWithArguments(const char* commandName, const AZStd::vector&) = 0; + + using CommandNameList = AZStd::list>; + virtual CommandNameList GetCommands() = 0; + }; + using ScriptCanvasCommandLineRequestBus = AZ::EBus; + // TODO #lsempe: this deserves its own file // CommandListDataModel ///////////////////////////////////////////////////////////////////////////////////////////// class CommandListDataModel : public QAbstractTableModel + , ScriptCanvasCommandLineRequestBus::Handler { Q_OBJECT @@ -49,9 +89,9 @@ namespace ScriptCanvasEditor enum ColumnIndex { - Command, - Description, - Trail, + CommandIndex, + DescriptionIndex, + TrailIndex, Count }; @@ -65,6 +105,8 @@ namespace ScriptCanvasEditor }; CommandListDataModel(QWidget* parent = nullptr); + ~CommandListDataModel() override; + QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; QModelIndex parent(const QModelIndex &child) const override; int rowCount(const QModelIndex &parent = QModelIndex()) const override; @@ -75,10 +117,62 @@ namespace ScriptCanvasEditor bool HasMatches(const AZStd::string& input); + struct Entry + { + AZ::Uuid m_type; + AZStd::string m_command; + + Entry() + { + m_type = AZ::Uuid::CreateNull(); + } + }; + protected: - AZStd::vector m_nodeTypes; + AZStd::vector m_entries; + static CommandRegistry m_commands; + + void AddCommand(const AZStd::string commandName, const AZStd::string description, Command::Functor f) override + { + if (m_commands.find(commandName) == m_commands.end()) + { + m_commands[commandName] = AZStd::make_unique(commandName, description, f); + Entry entry; + entry.m_command = commandName; + entry.m_type = AZ::Uuid::CreateNull(); + m_entries.emplace_back(entry); + } + } + + void Invoke(const char* commandName) override + { + auto command = m_commands.find(commandName); + if (command != m_commands.end()) + { + command->second->operator()({}); + } + } + + void InvokeWithArguments(const char* commandName, const AZStd::vector& args) override + { + auto command = m_commands.find(commandName); + if (command != m_commands.end()) + { + command->second->operator()(args); + } + } + + ScriptCanvasCommandLineRequests::CommandNameList GetCommands() override + { + ScriptCanvasCommandLineRequests::CommandNameList commands; + for (auto& command : m_commands) + { + commands.push_back(AZStd::make_pair(command.second->GetName(), command.second->GetDescription())); + } + return commands; + } }; class CommandListDataProxyModel : public QSortFilterProxyModel @@ -88,7 +182,7 @@ namespace ScriptCanvasEditor public: AZ_CLASS_ALLOCATOR(CommandListDataProxyModel, AZ::SystemAllocator, 0); - CommandListDataProxyModel(QObject* parent = nullptr); + CommandListDataProxyModel(CommandListDataModel* commandListData, QObject* parent = nullptr); bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override; @@ -168,4 +262,4 @@ namespace ScriptCanvasEditor AZStd::unique_ptr ui; }; } -} \ No newline at end of file +} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp index 3f226e62e0..85abf68332 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp @@ -595,7 +595,7 @@ namespace ScriptCanvasEditor m_commandLine = new Widget::CommandLine(this); m_commandLine->setBaseSize(QSize(size().width(), m_commandLine->size().height())); m_commandLine->setObjectName("CommandLine"); - m_commandLine->hide(); +// m_commandLine->hide(); m_layout->addWidget(m_commandLine); m_layout->addWidget(m_emptyCanvas); diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/mainwindow.ui b/Gems/ScriptCanvas/Code/Editor/View/Windows/mainwindow.ui index 40ba00bb31..3b3043a4a0 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/mainwindow.ui +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/mainwindow.ui @@ -244,7 +244,7 @@ false - false + true diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/AutoGen/ScriptCanvasGrammar_Header.jinja b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/AutoGen/ScriptCanvasGrammar_Header.jinja index b7394ef212..185cf82c86 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/AutoGen/ScriptCanvasGrammar_Header.jinja +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/AutoGen/ScriptCanvasGrammar_Header.jinja @@ -66,7 +66,7 @@ namespace {{attribute_Namespace}} {% set deprecationUuid = Class.attrib['DeprecationUUID'] %} -// The following will be injected directly into the source header file for which AzCodeGenerator is being run. +// The following will be injected directly into the source header file for which AZ AutoGen is being run. // You must #include the generated header into the source header #define SCRIPTCANVAS_NODE_{{ className }} \ public: \ From dc5b4ee1dd665c08a47e36cc622678bd9529fd90 Mon Sep 17 00:00:00 2001 From: shiranj Date: Tue, 20 Apr 2021 10:50:41 -0700 Subject: [PATCH 51/67] Add Android package in packaging pipeline --- .../build/Platform/Android/build_config.json | 10 ++++++++ .../package/Platform/Android/package_env.json | 25 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 scripts/build/package/Platform/Android/package_env.json diff --git a/scripts/build/Platform/Android/build_config.json b/scripts/build/Platform/Android/build_config.json index 0fa4d9ade3..097ff59e4e 100644 --- a/scripts/build/Platform/Android/build_config.json +++ b/scripts/build/Platform/Android/build_config.json @@ -40,6 +40,16 @@ "CMAKE_BUILD_ARGS":"-j!NUMBER_OF_PROCESSORS!" } }, + "android_packaging_all": { + "TAGS": [ + "packaging" + ], + "COMMAND": "python_windows.cmd", + "PARAMETERS": { + "SCRIPT_PATH": "scripts/build/package/package.py", + "SCRIPT_PARAMETERS": "--platform Android --type all" + } + }, "profile": { "TAGS":[ "weekly-build-metrics", diff --git a/scripts/build/package/Platform/Android/package_env.json b/scripts/build/package/Platform/Android/package_env.json new file mode 100644 index 0000000000..017937413a --- /dev/null +++ b/scripts/build/package/Platform/Android/package_env.json @@ -0,0 +1,25 @@ +{ + "local_env": { + "S3_PREFIX": "${BRANCH_NAME}/Android" + }, + "types":{ + "all":{ + "PACKAGE_TARGETS":[ + { + "FILE_LIST": "all.json", + "FILE_LIST_TYPE": "All", + "PACKAGE_NAME": "${PACKAGE_NAME_PATTERN}-android-all-${BUILD_NUMBER}.zip" + } + ], + "BOOTSTRAP_CFG_GAME_FOLDER":"AutomatedTesting", + "SKIP_BUILD": 0, + "BUILD_TARGETS":[ + { + "BUILD_CONFIG_FILENAME": "build_config.json", + "PLATFORM": "Android", + "TYPE": "profile" + } + ] + } + } +} From 841d16055adb3ce2bf4081f0799c4020d0671340 Mon Sep 17 00:00:00 2001 From: shiranj Date: Tue, 20 Apr 2021 11:30:26 -0700 Subject: [PATCH 52/67] Add lambda function to delete branch ebs volumes on github branch deletion event --- ...uto_delete_ebs.py => delete_branch_ebs.py} | 27 ++++-- .../build/lambda/delete_github_branch_ebs.py | 89 +++++++++++++++++++ 2 files changed, 110 insertions(+), 6 deletions(-) rename scripts/build/lambda/{auto_delete_ebs.py => delete_branch_ebs.py} (77%) mode change 100755 => 100644 create mode 100644 scripts/build/lambda/delete_github_branch_ebs.py diff --git a/scripts/build/lambda/auto_delete_ebs.py b/scripts/build/lambda/delete_branch_ebs.py old mode 100755 new mode 100644 similarity index 77% rename from scripts/build/lambda/auto_delete_ebs.py rename to scripts/build/lambda/delete_branch_ebs.py index a004c2a575..b9d52b0c61 --- a/scripts/build/lambda/auto_delete_ebs.py +++ b/scripts/build/lambda/delete_branch_ebs.py @@ -14,20 +14,25 @@ import time import logging TIMEOUT = 300 +log = logging.getLogger(__name__) +log.setLevel(logging.INFO) -def lambda_handler(event, context): - log = logging.getLogger(__name__) - log.setLevel(logging.INFO) - branch_name = event['detail']['referenceName'] +def delete_ebs_volumes(repository_name, branch_name): + success = 0 + failure = 0 ec2_client = boto3.resource('ec2') response = ec2_client.volumes.filter(Filters=[ + { + 'Name': 'tag:RepositoryName', + 'Values': [repository_name] + }, { 'Name': 'tag:BranchName', 'Values': [branch_name] } ]) - log.info(f'Deleting EBS volumes for remote-branch {branch_name}.') + log.info(f'Deleting EBS volumes for remote-branch {branch_name} in repository {repository_name}.') for volume in response: if volume.attachments: ec2_instance_id = volume.attachments[0]['InstanceId'] @@ -49,9 +54,19 @@ def lambda_handler(event, context): try: log.info(f'Deleting volume {volume.volume_id}') volume.delete() + success += 1 except Exception as e: log.error(f'Failed to delete volume {volume.volume_id}.') log.error(e) + failure += 1 + return success, failure -lambda_handler(event, context) \ No newline at end of file +def lambda_handler(event, context): + repository_name = event['repository_name'] + branch_name = event['branch_name'] + (success, failure) = delete_ebs_volumes(repository_name, branch_name) + return { + 'success': success, + 'failure': failure + } diff --git a/scripts/build/lambda/delete_github_branch_ebs.py b/scripts/build/lambda/delete_github_branch_ebs.py new file mode 100644 index 0000000000..0797c55366 --- /dev/null +++ b/scripts/build/lambda/delete_github_branch_ebs.py @@ -0,0 +1,89 @@ +# +# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or +# its licensors. +# +# For complete copyright and license terms please see the LICENSE at the root of this +# distribution (the "License"). All use of this software is governed by the License, +# or, if provided, by the license below or the license accompanying this file. Do not +# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# + +import os +import boto3 +import time +import logging +import json +import hmac +import hashlib + +TIMEOUT = 300 +log = logging.getLogger(__name__) +log.setLevel(logging.INFO) + + +def delete_volumes(repository_name, branch_name): + client = boto3.client('lambda') + payload = { + 'repository_name': repository_name, + 'branch_name': branch_name + } + response = client.invoke( + FunctionName='delete_branch_ebs', + Payload=json.dumps(payload), + ) + status = response['Payload'].read() + response_json = json.loads(status.decode()) + return response_json['success'], response_json['failure'] + + +def verify_signature(headers, payload): + # GITHUB_WEBHOOK_SECRET is encrypted with AWS KMS key + secret = os.environ.get('GITHUB_WEBHOOK_SECRET', '') + # Using X-Hub-Signature-256 is recommended by https://docs.github.com/en/developers/webhooks-and-events/securing-your-webhooks + signature = headers.get('X-Hub-Signature-256', '') + computed_hash = hmac.new(secret.encode(), payload.encode(), hashlib.sha256).hexdigest() + computed_signature = f'sha256={computed_hash}' + return computed_signature, hmac.compare_digest(computed_signature.encode(), signature.encode()) + + +def create_response(status, success=0, failure=0, repository_name=None, branch_name=None): + response = { + 'success': { + 'statusCode': 200, + 'body': f'[SUCCESS] All {success + failure} EBS volumes are deleted for branch {branch_name} in repository {repository_name}', + 'isBase64Encoded': 'false' + }, + 'failure': { + 'statusCode': 500, + 'body': f'[FAILURE] Failed to delete {failure}/{success + failure} EBS volumes for branch {branch_name} in repository {repository_name}', + 'isBase64Encoded': 'false' + }, + 'unauthorized': { + 'statusCode': 401, + 'body': 'Unauthorized', + 'isBase64Encoded': 'false' + } + } + return response[status] + + +def lambda_handler(event, context): + # This function is triggered by AWS API Gateway, + if event.get('resource', '') == '/delete-github-branch-ebs': + headers = event['headers'] + payload = event['body'] + if headers['X-GitHub-Event'] == 'delete': + # Validate github webhook request here since request body cannot be passed to API Gateway lambda authorizer. + if verify_signature(headers, payload): + # Convert payload from string type to json to get repository name and branch name + payload = json.loads(payload) + repository_name = payload['repository']['full_name'] + branch_name = payload['ref'] + (success, failure) = delete_volumes(repository_name, branch_name) + if not failure: + return create_response('success', success, failure, repository_name, branch_name) + else: + return create_response('failure', success, failure, repository_name, branch_name) + else: + return create_response('unauthorized') From d9fe89ba56a1c7d344538951909f086386ba5947 Mon Sep 17 00:00:00 2001 From: mbalfour Date: Tue, 20 Apr 2021 13:37:10 -0500 Subject: [PATCH 53/67] Addressed feedback - made string& into a string_view. --- Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp | 2 +- Code/Framework/AzCore/AzCore/Component/ComponentApplication.h | 2 +- .../Framework/AzCore/AzCore/Component/ComponentApplicationBus.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp index a3986f72dd..c55f565615 100644 --- a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp +++ b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp @@ -1063,7 +1063,7 @@ namespace AZ //========================================================================= // SetEntityName //========================================================================= - bool ComponentApplication::SetEntityName(const EntityId& id, const AZStd::string& name) + bool ComponentApplication::SetEntityName(const EntityId& id, const AZStd::string_view name) { Entity* entity = FindEntity(id); if (entity) diff --git a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h index a66409eaf3..3ebcf39d95 100644 --- a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h +++ b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h @@ -209,7 +209,7 @@ namespace AZ bool DeleteEntity(const EntityId& id) override; Entity* FindEntity(const EntityId& id) override; AZStd::string GetEntityName(const EntityId& id) override; - bool SetEntityName(const EntityId& id, const AZStd::string& name) override; + bool SetEntityName(const EntityId& id, const AZStd::string_view name) override; void EnumerateEntities(const ComponentApplicationRequests::EntityCallback& callback) override; ComponentApplication* GetApplication() override { return this; } /// Returns the serialize context that has been registered with the app, if there is one. diff --git a/Code/Framework/AzCore/AzCore/Component/ComponentApplicationBus.h b/Code/Framework/AzCore/AzCore/Component/ComponentApplicationBus.h index a3602c303e..3582e6ebb8 100644 --- a/Code/Framework/AzCore/AzCore/Component/ComponentApplicationBus.h +++ b/Code/Framework/AzCore/AzCore/Component/ComponentApplicationBus.h @@ -136,7 +136,7 @@ namespace AZ //! Entity names are not enforced to be unique. //! @param entityId A reference to the entity whose name you want to change. //! @return True if the name was changed successfully, false if it wasn't. - virtual bool SetEntityName([[maybe_unused]] const EntityId& id, [[maybe_unused]] const AZStd::string& name) { return false; } + virtual bool SetEntityName([[maybe_unused]] const EntityId& id, [[maybe_unused]] const AZStd::string_view name) { return false; } //! The type that AZ::ComponentApplicationRequests::EnumerateEntities uses to //! pass entity callbacks to the application for enumeration. From 33b485767f584bef006049ed3beb792325190830 Mon Sep 17 00:00:00 2001 From: nvsickle Date: Tue, 20 Apr 2021 11:49:59 -0700 Subject: [PATCH 54/67] Address reviewer feedback, make FFont initialization state an atomic state machine --- .../AtomLyIntegration/AtomFont/FFont.h | 9 +++++-- .../AtomFont/Code/Source/FFont.cpp | 24 ++++++++----------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/FFont.h b/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/FFont.h index 91fc0834ec..8e60cc2055 100644 --- a/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/FFont.h +++ b/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/FFont.h @@ -301,8 +301,13 @@ namespace AZ AtomFont* m_atomFont = nullptr; bool m_fontTexDirty = false; - bool m_fontInitialized = false; - AZStd::atomic_bool m_fontInitializing = false; + enum class InitializationState : AZ::u8 + { + Uninitialized, + Initializing, + Initialized + }; + AZStd::atomic m_fontInitializationState = InitializationState::Uninitialized; FontEffects m_effects; diff --git a/Gems/AtomLyIntegration/AtomFont/Code/Source/FFont.cpp b/Gems/AtomLyIntegration/AtomFont/Code/Source/FFont.cpp index edbf148940..20879876e7 100644 --- a/Gems/AtomLyIntegration/AtomFont/Code/Source/FFont.cpp +++ b/Gems/AtomLyIntegration/AtomFont/Code/Source/FFont.cpp @@ -101,19 +101,16 @@ AZ::RPI::WindowContextSharedPtr AZ::FFont::GetDefaultWindowContext() const bool AZ::FFont::InitFont() { - if (m_fontInitialized) + auto initializationState = InitializationState::Uninitialized; + // Do an atomic transition to Initializing if we're in the Uninitialized state. + // Otherwise, check the current state. + // If we're Initialized, there's no more work to be done, return true to indicate we're good to go. + // If we're Initializing (on another thread), return false to let the consumer know it's not safe for us to be used yet. + if (!m_fontInitializationState.compare_exchange_strong(initializationState, InitializationState::Initializing)) { - return true; + return initializationState == InitializationState::Initialized; } - // If we're being initialized in another thread, abort. - if (m_fontInitializing) - { - return false; - } - - m_fontInitializing = true; - // Create and initialize DynamicDrawContext for font draw AZ::RPI::Ptr dynamicDraw = m_atomFont->GetOrCreateDynamicDrawForScene(GetDefaultViewportContext()->GetRenderScene().get()); @@ -136,8 +133,7 @@ bool AZ::FFont::InitFont() m_vertexCount = 0; m_indexCount = 0; - m_fontInitialized = true; - m_fontInitializing = false; + m_fontInitializationState = InitializationState::Initialized; return true; } @@ -1522,7 +1518,7 @@ bool AZ::FFont::UpdateTexture() { using namespace AZ; - if (!m_fontInitialized || !m_fontImage) + if (m_fontInitializationState != InitializationState::Initialized || !m_fontImage) { return false; } @@ -1590,7 +1586,7 @@ void AZ::FFont::Prepare(const char* str, bool updateTexture, const AtomFont::Gly const bool rerenderGlyphs = m_sizeBehavior == SizeBehavior::Rerender; const AtomFont::GlyphSize usedGlyphSize = rerenderGlyphs ? glyphSize : AtomFont::defaultGlyphSize; bool texUpdateNeeded = m_fontTexture->PreCacheString(str, nullptr, m_sizeRatio, usedGlyphSize, m_fontHintParams) == 1 || m_fontTexDirty; - if (m_fontInitialized && updateTexture && texUpdateNeeded && m_fontImage) + if (m_fontInitializationState == InitializationState::Initialized && updateTexture && texUpdateNeeded && m_fontImage) { UpdateTexture(); m_fontTexDirty = false; From f53c1e808411085f37ed373a674d98984fb87e68 Mon Sep 17 00:00:00 2001 From: amzn-sj Date: Tue, 20 Apr 2021 12:16:40 -0700 Subject: [PATCH 55/67] 3rd Party static libraries need to be public dependencies to work from installed engine. --- Code/Framework/AzCore/CMakeLists.txt | 7 +++---- Code/Framework/AzFramework/CMakeLists.txt | 4 ++-- Code/Framework/GridMate/CMakeLists.txt | 3 ++- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Code/Framework/AzCore/CMakeLists.txt b/Code/Framework/AzCore/CMakeLists.txt index c77205a760..db2c79f0c9 100644 --- a/Code/Framework/AzCore/CMakeLists.txt +++ b/Code/Framework/AzCore/CMakeLists.txt @@ -40,14 +40,13 @@ ly_add_target( ${common_dir} ${AZ_CORE_RADTELEMETRY_INCLUDE_DIRECTORIES} BUILD_DEPENDENCIES - PRIVATE - 3rdParty::zlib - 3rdParty::zstd - 3rdParty::cityhash PUBLIC 3rdParty::Lua 3rdParty::RapidJSON 3rdParty::RapidXML + 3rdParty::zlib + 3rdParty::zstd + 3rdParty::cityhash ${AZ_CORE_RADTELEMETRY_BUILD_DEPENDENCIES} ) ly_add_source_properties( diff --git a/Code/Framework/AzFramework/CMakeLists.txt b/Code/Framework/AzFramework/CMakeLists.txt index f62f205efd..50e1fcb5a4 100644 --- a/Code/Framework/AzFramework/CMakeLists.txt +++ b/Code/Framework/AzFramework/CMakeLists.txt @@ -33,12 +33,12 @@ ly_add_target( BUILD_DEPENDENCIES PRIVATE AZ::AzCore + PUBLIC + AZ::GridMate 3rdParty::md5 3rdParty::zlib 3rdParty::zstd 3rdParty::lz4 - PUBLIC - AZ::GridMate ) if(LY_ENABLE_STATISTICAL_PROFILING) diff --git a/Code/Framework/GridMate/CMakeLists.txt b/Code/Framework/GridMate/CMakeLists.txt index f326bda179..20ce582307 100644 --- a/Code/Framework/GridMate/CMakeLists.txt +++ b/Code/Framework/GridMate/CMakeLists.txt @@ -28,8 +28,9 @@ ly_add_target( ${pal_dir} BUILD_DEPENDENCIES PRIVATE - 3rdParty::OpenSSL AZ::AzCore + PUBLIC + 3rdParty::OpenSSL ) ly_add_source_properties( From 990a40199b5567429f1d88d62edf2c6b34876987 Mon Sep 17 00:00:00 2001 From: Terry Michaels <81711813+tjmichaels@users.noreply.github.com> Date: Tue, 20 Apr 2021 15:05:45 -0500 Subject: [PATCH 56/67] Removed the last remaining connections to the Clang 3rd Party (#159) --- .../3rdParty/Platform/Linux/Clang_linux.cmake | 43 ---------------- .../Platform/Linux/cmake_linux_files.cmake | 1 - cmake/3rdParty/Platform/Mac/Clang_mac.cmake | 49 ------------------- .../Platform/Mac/cmake_mac_files.cmake | 1 - .../Platform/Windows/Clang_windows.cmake | 44 ----------------- .../Windows/cmake_windows_files.cmake | 1 - 6 files changed, 139 deletions(-) delete mode 100644 cmake/3rdParty/Platform/Linux/Clang_linux.cmake delete mode 100644 cmake/3rdParty/Platform/Mac/Clang_mac.cmake delete mode 100644 cmake/3rdParty/Platform/Windows/Clang_windows.cmake diff --git a/cmake/3rdParty/Platform/Linux/Clang_linux.cmake b/cmake/3rdParty/Platform/Linux/Clang_linux.cmake deleted file mode 100644 index 1cf269d1a2..0000000000 --- a/cmake/3rdParty/Platform/Linux/Clang_linux.cmake +++ /dev/null @@ -1,43 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# - -set(CLANG_PLATFORM_LIB_PATH ${BASE_PATH}/linux_x64/release/lib) - -set(CLANG_INCLUDE_DIRECTORIES - llvm/include - linux_x64/release/include -) - -set(CLANG_LIBS - ${CLANG_PLATFORM_LIB_PATH}/libclangFrontend.a - ${CLANG_PLATFORM_LIB_PATH}/libclangSerialization.a - ${CLANG_PLATFORM_LIB_PATH}/libclangDriver.a - ${CLANG_PLATFORM_LIB_PATH}/libclangTooling.a - ${CLANG_PLATFORM_LIB_PATH}/libclangParse.a - ${CLANG_PLATFORM_LIB_PATH}/libclangSema.a - ${CLANG_PLATFORM_LIB_PATH}/libclangAnalysis.a - ${CLANG_PLATFORM_LIB_PATH}/libclangRewriteFrontend.a - ${CLANG_PLATFORM_LIB_PATH}/libclangRewrite.a - ${CLANG_PLATFORM_LIB_PATH}/libclangEdit.a - ${CLANG_PLATFORM_LIB_PATH}/libclangAST.a - ${CLANG_PLATFORM_LIB_PATH}/libclangLex.a - ${CLANG_PLATFORM_LIB_PATH}/libclangBasic.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMCore.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMBinaryFormat.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMDebugInfoDWARF.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMMC.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMOption.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMBitReader.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMMCParser.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMProfileData.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMTarget.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMSupport.a -) diff --git a/cmake/3rdParty/Platform/Linux/cmake_linux_files.cmake b/cmake/3rdParty/Platform/Linux/cmake_linux_files.cmake index 2b1ba4d0e5..83d862ee78 100644 --- a/cmake/3rdParty/Platform/Linux/cmake_linux_files.cmake +++ b/cmake/3rdParty/Platform/Linux/cmake_linux_files.cmake @@ -13,7 +13,6 @@ set(FILES AWSGameLiftServerSDK_linux.cmake BuiltInPackages_linux.cmake civetweb_linux.cmake - Clang_linux.cmake dyad_linux.cmake FbxSdk_linux.cmake OpenSSL_linux.cmake diff --git a/cmake/3rdParty/Platform/Mac/Clang_mac.cmake b/cmake/3rdParty/Platform/Mac/Clang_mac.cmake deleted file mode 100644 index 3d7fc64465..0000000000 --- a/cmake/3rdParty/Platform/Mac/Clang_mac.cmake +++ /dev/null @@ -1,49 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# - -set(CLANG_PLATFORM_LIB_PATH ${BASE_PATH}/xcode/$,debug,release>/lib) - -set(CLANG_INCLUDE_DIRECTORIES - llvm/include - xcode/$,debug,release>/include -) - -set(CLANG_LIBS - ${CLANG_PLATFORM_LIB_PATH}/libclangFrontend.a - ${CLANG_PLATFORM_LIB_PATH}/libclangSerialization.a - ${CLANG_PLATFORM_LIB_PATH}/libclangDriver.a - ${CLANG_PLATFORM_LIB_PATH}/libclangTooling.a - ${CLANG_PLATFORM_LIB_PATH}/libclangParse.a - ${CLANG_PLATFORM_LIB_PATH}/libclangSema.a - ${CLANG_PLATFORM_LIB_PATH}/libclangAnalysis.a - ${CLANG_PLATFORM_LIB_PATH}/libclangRewriteFrontend.a - ${CLANG_PLATFORM_LIB_PATH}/libclangRewrite.a - ${CLANG_PLATFORM_LIB_PATH}/libclangEdit.a - ${CLANG_PLATFORM_LIB_PATH}/libclangAST.a - ${CLANG_PLATFORM_LIB_PATH}/libclangASTMatchers.a - ${CLANG_PLATFORM_LIB_PATH}/libclangLex.a - ${CLANG_PLATFORM_LIB_PATH}/libclangBasic.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMCore.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMBinaryFormat.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMDebugInfoDWARF.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMMC.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMOption.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMBitReader.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMMCParser.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMProfileData.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMTarget.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMSupport.a - - ${CLANG_PLATFORM_LIB_PATH}/libLLVMDemangle.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMSupport.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMCore.a - -) diff --git a/cmake/3rdParty/Platform/Mac/cmake_mac_files.cmake b/cmake/3rdParty/Platform/Mac/cmake_mac_files.cmake index 0e3cc53262..9d0166913a 100644 --- a/cmake/3rdParty/Platform/Mac/cmake_mac_files.cmake +++ b/cmake/3rdParty/Platform/Mac/cmake_mac_files.cmake @@ -12,7 +12,6 @@ set(FILES BuiltInPackages_mac.cmake civetweb_mac.cmake - Clang_mac.cmake DirectXShaderCompiler_mac.cmake FbxSdk_mac.cmake OpenGLInterface_mac.cmake diff --git a/cmake/3rdParty/Platform/Windows/Clang_windows.cmake b/cmake/3rdParty/Platform/Windows/Clang_windows.cmake deleted file mode 100644 index 69a6b77119..0000000000 --- a/cmake/3rdParty/Platform/Windows/Clang_windows.cmake +++ /dev/null @@ -1,44 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# - -set(CLANG_PLATFORM_LIB_PATH ${BASE_PATH}/vs2015/$,debug,release>/lib) - -set(CLANG_INCLUDE_DIRECTORIES - llvm/include - vs2015/$,debug,release>/include -) - -set(CLANG_LIBS - ${CLANG_PLATFORM_LIB_PATH}/clangFrontend.lib - ${CLANG_PLATFORM_LIB_PATH}/clangSerialization.lib - ${CLANG_PLATFORM_LIB_PATH}/clangDriver.lib - ${CLANG_PLATFORM_LIB_PATH}/clangTooling.lib - ${CLANG_PLATFORM_LIB_PATH}/clangParse.lib - ${CLANG_PLATFORM_LIB_PATH}/clangSema.lib - ${CLANG_PLATFORM_LIB_PATH}/clangAnalysis.lib - ${CLANG_PLATFORM_LIB_PATH}/clangRewriteFrontend.lib - ${CLANG_PLATFORM_LIB_PATH}/clangRewrite.lib - ${CLANG_PLATFORM_LIB_PATH}/clangEdit.lib - ${CLANG_PLATFORM_LIB_PATH}/clangAST.lib - ${CLANG_PLATFORM_LIB_PATH}/clangLex.lib - ${CLANG_PLATFORM_LIB_PATH}/clangBasic.lib - ${CLANG_PLATFORM_LIB_PATH}/LLVMBinaryFormat.lib - ${CLANG_PLATFORM_LIB_PATH}/LLVMDebugInfoDWARF.lib - ${CLANG_PLATFORM_LIB_PATH}/LLVMMC.lib - ${CLANG_PLATFORM_LIB_PATH}/LLVMOption.lib - ${CLANG_PLATFORM_LIB_PATH}/LLVMBitReader.lib - ${CLANG_PLATFORM_LIB_PATH}/LLVMMCParser.lib - ${CLANG_PLATFORM_LIB_PATH}/LLVMProfileData.lib - ${CLANG_PLATFORM_LIB_PATH}/LLVMTarget.lib - ${CLANG_PLATFORM_LIB_PATH}/LLVMCore.lib - ${CLANG_PLATFORM_LIB_PATH}/LLVMSupport.lib - Version.lib -) diff --git a/cmake/3rdParty/Platform/Windows/cmake_windows_files.cmake b/cmake/3rdParty/Platform/Windows/cmake_windows_files.cmake index 2c7890fcc4..fe4aa6bc82 100644 --- a/cmake/3rdParty/Platform/Windows/cmake_windows_files.cmake +++ b/cmake/3rdParty/Platform/Windows/cmake_windows_files.cmake @@ -12,7 +12,6 @@ set(FILES AWSGameLiftServerSDK_windows.cmake BuiltInPackages_windows.cmake - Clang_windows.cmake Crashpad_windows.cmake DirectXShaderCompiler_windows.cmake dyad_windows.cmake From 2f9102f10a678bf6fa798b79a869610fd94f5b12 Mon Sep 17 00:00:00 2001 From: sharmajs-amzn <82233357+sharmajs-amzn@users.noreply.github.com> Date: Tue, 20 Apr 2021 13:10:25 -0700 Subject: [PATCH 57/67] AssImp asserts on Linux processing (#118) (#138) LYN-2645} Helios - AssImp asserts on Linux processing * Linux builds have asserts off, to match Windows and Mac. * Secondary UV channels support names are available now Jira: https://jira.agscollab.com/browse/LYN-2645 --- cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake | 2 +- cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake | 2 +- cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake b/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake index 9057b5ba1b..e42e8e40ea 100644 --- a/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake +++ b/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake @@ -15,7 +15,7 @@ ly_associate_package(PACKAGE_NAME Lua-5.3.5-rev3-multiplatform TARG ly_associate_package(PACKAGE_NAME ilmbase-2.3.0-rev4-multiplatform TARGETS ilmbase PACKAGE_HASH 97547fdf1fbc4d81b8ccf382261f8c25514ed3b3c4f8fd493f0a4fa873bba348) ly_associate_package(PACKAGE_NAME hdf5-1.0.11-rev2-multiplatform TARGETS hdf5 PACKAGE_HASH 11d5e04df8a93f8c52a5684a4cacbf0d9003056360983ce34f8d7b601082c6bd) ly_associate_package(PACKAGE_NAME alembic-1.7.11-rev3-multiplatform TARGETS alembic PACKAGE_HASH ba7a7d4943dd752f5a662374f6c48b93493df1d8e2c5f6a8d101f3b50700dd25) -ly_associate_package(PACKAGE_NAME assimp-5.0.1-rev6-multiplatform TARGETS assimplib PACKAGE_HASH 47f1a6d05d101def036c030484c4a6e19d745aacd57037174715c7afe2b19b4c) +ly_associate_package(PACKAGE_NAME assimp-5.0.1-rev7-multiplatform TARGETS assimplib PACKAGE_HASH def855c89d8210db3040f1cb6ec837141ab9b8e74c158eae7c03d50160fcf30b) ly_associate_package(PACKAGE_NAME squish-ccr-20150601-rev3-multiplatform TARGETS squish-ccr PACKAGE_HASH c878c6c0c705e78403c397d03f5aa7bc87e5978298710e14d09c9daf951a83b3) ly_associate_package(PACKAGE_NAME ASTCEncoder-2017_11_14-rev2-multiplatform TARGETS ASTCEncoder PACKAGE_HASH c240ffc12083ee39a5ce9dc241de44d116e513e1e3e4cc1d05305e7aa3bdc326) ly_associate_package(PACKAGE_NAME md5-2.0-multiplatform TARGETS md5 PACKAGE_HASH 29e52ad22c78051551f78a40c2709594f0378762ae03b417adca3f4b700affdf) diff --git a/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake b/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake index ef66259e22..d6d017d1d1 100644 --- a/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake +++ b/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake @@ -15,7 +15,7 @@ ly_associate_package(PACKAGE_NAME Lua-5.3.5-rev3-multiplatform ly_associate_package(PACKAGE_NAME ilmbase-2.3.0-rev4-multiplatform TARGETS ilmbase PACKAGE_HASH 97547fdf1fbc4d81b8ccf382261f8c25514ed3b3c4f8fd493f0a4fa873bba348) ly_associate_package(PACKAGE_NAME hdf5-1.0.11-rev2-multiplatform TARGETS hdf5 PACKAGE_HASH 11d5e04df8a93f8c52a5684a4cacbf0d9003056360983ce34f8d7b601082c6bd) ly_associate_package(PACKAGE_NAME alembic-1.7.11-rev3-multiplatform TARGETS alembic PACKAGE_HASH ba7a7d4943dd752f5a662374f6c48b93493df1d8e2c5f6a8d101f3b50700dd25) -ly_associate_package(PACKAGE_NAME assimp-5.0.1-rev6-multiplatform TARGETS assimplib PACKAGE_HASH 47f1a6d05d101def036c030484c4a6e19d745aacd57037174715c7afe2b19b4c) +ly_associate_package(PACKAGE_NAME assimp-5.0.1-rev7-multiplatform TARGETS assimplib PACKAGE_HASH def855c89d8210db3040f1cb6ec837141ab9b8e74c158eae7c03d50160fcf30b) ly_associate_package(PACKAGE_NAME squish-ccr-20150601-rev3-multiplatform TARGETS squish-ccr PACKAGE_HASH c878c6c0c705e78403c397d03f5aa7bc87e5978298710e14d09c9daf951a83b3) ly_associate_package(PACKAGE_NAME ASTCEncoder-2017_11_14-rev2-multiplatform TARGETS ASTCEncoder PACKAGE_HASH c240ffc12083ee39a5ce9dc241de44d116e513e1e3e4cc1d05305e7aa3bdc326) ly_associate_package(PACKAGE_NAME md5-2.0-multiplatform TARGETS md5 PACKAGE_HASH 29e52ad22c78051551f78a40c2709594f0378762ae03b417adca3f4b700affdf) diff --git a/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake b/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake index 58050652c0..09dd543e5c 100644 --- a/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake +++ b/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake @@ -15,7 +15,7 @@ ly_associate_package(PACKAGE_NAME Lua-5.3.5-rev3-multiplatform ly_associate_package(PACKAGE_NAME ilmbase-2.3.0-rev4-multiplatform TARGETS ilmbase PACKAGE_HASH 97547fdf1fbc4d81b8ccf382261f8c25514ed3b3c4f8fd493f0a4fa873bba348) ly_associate_package(PACKAGE_NAME hdf5-1.0.11-rev2-multiplatform TARGETS hdf5 PACKAGE_HASH 11d5e04df8a93f8c52a5684a4cacbf0d9003056360983ce34f8d7b601082c6bd) ly_associate_package(PACKAGE_NAME alembic-1.7.11-rev3-multiplatform TARGETS alembic PACKAGE_HASH ba7a7d4943dd752f5a662374f6c48b93493df1d8e2c5f6a8d101f3b50700dd25) -ly_associate_package(PACKAGE_NAME assimp-5.0.1-rev6-multiplatform TARGETS assimplib PACKAGE_HASH 47f1a6d05d101def036c030484c4a6e19d745aacd57037174715c7afe2b19b4c) +ly_associate_package(PACKAGE_NAME assimp-5.0.1-rev7-multiplatform TARGETS assimplib PACKAGE_HASH def855c89d8210db3040f1cb6ec837141ab9b8e74c158eae7c03d50160fcf30b) ly_associate_package(PACKAGE_NAME squish-ccr-20150601-rev3-multiplatform TARGETS squish-ccr PACKAGE_HASH c878c6c0c705e78403c397d03f5aa7bc87e5978298710e14d09c9daf951a83b3) ly_associate_package(PACKAGE_NAME ASTCEncoder-2017_11_14-rev2-multiplatform TARGETS ASTCEncoder PACKAGE_HASH c240ffc12083ee39a5ce9dc241de44d116e513e1e3e4cc1d05305e7aa3bdc326) ly_associate_package(PACKAGE_NAME md5-2.0-multiplatform TARGETS md5 PACKAGE_HASH 29e52ad22c78051551f78a40c2709594f0378762ae03b417adca3f4b700affdf) From 78892c8d7eb566b43c7a4364b01163e45eb304e6 Mon Sep 17 00:00:00 2001 From: srikappa Date: Tue, 20 Apr 2021 14:30:56 -0700 Subject: [PATCH 58/67] Improved a couple of comments --- .../AzToolsFramework/Prefab/PrefabPublicHandler.cpp | 3 ++- .../AzToolsFramework/Prefab/PrefabPublicHandler.h | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp index 69ccf707d7..46bd924f30 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp @@ -92,7 +92,8 @@ namespace AzToolsFramework AZStd::string("Could not create a new prefab out of the entities provided - entities do not share a common root.")); } - // When you move instances from another template, you have to remove the links and propagate changes to target template. + // When we create a prefab with other prefab instances, we have to remove the existing links between the source and + // target templates of the other instances. for (auto& nestedInstance : instances) { PrefabUndoHelpers::RemoveLink( diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h index d92f33b634..19985bbf51 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h @@ -72,7 +72,7 @@ namespace AzToolsFramework /** * Creates a link between the templates of an instance and its parent. * - * \param topLevelEntities The list of entities that are immediate children of container entity of instance. + * \param topLevelEntities The list of entities that are immediate children to the container entity of the instance. * \param sourceInstance The instance that corresponds to the source template of the link. * \param targetInstance The id of the target template. * \param undoBatch The undo batch to set as parent for this create link action. From 1865ae71ca6a6a4854639a376137de285210c31f Mon Sep 17 00:00:00 2001 From: shiranj Date: Tue, 20 Apr 2021 14:31:43 -0700 Subject: [PATCH 59/67] Retrieve Github secret from AWS Secret Manager --- scripts/build/lambda/delete_branch_ebs.py | 6 ++++ .../build/lambda/delete_github_branch_ebs.py | 35 ++++++++++++++----- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/scripts/build/lambda/delete_branch_ebs.py b/scripts/build/lambda/delete_branch_ebs.py index b9d52b0c61..8b8100f04e 100644 --- a/scripts/build/lambda/delete_branch_ebs.py +++ b/scripts/build/lambda/delete_branch_ebs.py @@ -19,6 +19,12 @@ log.setLevel(logging.INFO) def delete_ebs_volumes(repository_name, branch_name): + """ + Delete all EBS volumes that are tagged with repository_name and branch_name + :param repository_name: Full repository name. + :param branch_name: Branch name that is deleted. + :return: Number of EBS volumes that are deleted successfully, number of EBS volumes that are not deleted. + """ success = 0 failure = 0 ec2_client = boto3.resource('ec2') diff --git a/scripts/build/lambda/delete_github_branch_ebs.py b/scripts/build/lambda/delete_github_branch_ebs.py index 0797c55366..8163cee762 100644 --- a/scripts/build/lambda/delete_github_branch_ebs.py +++ b/scripts/build/lambda/delete_github_branch_ebs.py @@ -11,18 +11,18 @@ import os import boto3 -import time -import logging import json import hmac import hashlib -TIMEOUT = 300 -log = logging.getLogger(__name__) -log.setLevel(logging.INFO) - def delete_volumes(repository_name, branch_name): + """ + Trigger lambda function that deletes EBS volumes. + :param repository_name: Full repository name. + :param branch_name: Branch name that is deleted. + :return: Number of EBS volumes that are deleted successfully, number of EBS volumes that are not deleted. + """ client = boto3.client('lambda') payload = { 'repository_name': repository_name, @@ -38,16 +38,33 @@ def delete_volumes(repository_name, branch_name): def verify_signature(headers, payload): - # GITHUB_WEBHOOK_SECRET is encrypted with AWS KMS key - secret = os.environ.get('GITHUB_WEBHOOK_SECRET', '') + """ + Validate POST request headers and payload to only receive the expected GitHub webhook requests. + :param headers: Headers from POST request. + :param payload: Payload from POST request. + :return: True if request is verified, otherwise, return False. + """ + # secret is stored in AWS Secret Manager + secret_name = os.environ.get('GITHUB_WEBHOOK_SECRET_NAME', '') + client = boto3.client(service_name='secretsmanager') + response = client.get_secret_value(SecretId=secret_name) + secret = response['SecretString'] # Using X-Hub-Signature-256 is recommended by https://docs.github.com/en/developers/webhooks-and-events/securing-your-webhooks signature = headers.get('X-Hub-Signature-256', '') computed_hash = hmac.new(secret.encode(), payload.encode(), hashlib.sha256).hexdigest() computed_signature = f'sha256={computed_hash}' - return computed_signature, hmac.compare_digest(computed_signature.encode(), signature.encode()) + return hmac.compare_digest(computed_signature.encode(), signature.encode()) def create_response(status, success=0, failure=0, repository_name=None, branch_name=None): + """ + :param status: Status of EBS deletion request. + :param success: Number of EBS volumes that are deleted successfully. + :param failure: Number of EBS volumes that are not deleted. + :param repository_name: Full repository name. + :param branch_name: Branch name that is deleted. + :return: JSON response. + """ response = { 'success': { 'statusCode': 200, From 65a1840e1dc9ff283da27d2ed08e3411b3e20d89 Mon Sep 17 00:00:00 2001 From: luissemp Date: Tue, 20 Apr 2021 14:38:03 -0700 Subject: [PATCH 60/67] Removed commented out line --- Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp index 85abf68332..ee4d6d9371 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp @@ -595,7 +595,6 @@ namespace ScriptCanvasEditor m_commandLine = new Widget::CommandLine(this); m_commandLine->setBaseSize(QSize(size().width(), m_commandLine->size().height())); m_commandLine->setObjectName("CommandLine"); -// m_commandLine->hide(); m_layout->addWidget(m_commandLine); m_layout->addWidget(m_emptyCanvas); From 3c5c540f09596d7ab51bd8fa31abfe78c11c827c Mon Sep 17 00:00:00 2001 From: shiranj Date: Tue, 20 Apr 2021 14:54:39 -0700 Subject: [PATCH 61/67] Fix python path for Android packaging job --- scripts/build/Platform/Android/build_config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build/Platform/Android/build_config.json b/scripts/build/Platform/Android/build_config.json index 097ff59e4e..07dc363296 100644 --- a/scripts/build/Platform/Android/build_config.json +++ b/scripts/build/Platform/Android/build_config.json @@ -44,7 +44,7 @@ "TAGS": [ "packaging" ], - "COMMAND": "python_windows.cmd", + "COMMAND": "../Windows/python_windows.cmd", "PARAMETERS": { "SCRIPT_PATH": "scripts/build/package/package.py", "SCRIPT_PARAMETERS": "--platform Android --type all" From 7e2cbda2d390c758d402cd1bf68451f48275cfa8 Mon Sep 17 00:00:00 2001 From: nvsickle Date: Tue, 20 Apr 2021 12:05:52 -0700 Subject: [PATCH 62/67] Fix viewport display on new level creation --- Code/Sandbox/Editor/EditorViewportWidget.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Code/Sandbox/Editor/EditorViewportWidget.cpp b/Code/Sandbox/Editor/EditorViewportWidget.cpp index 91c70b720f..5998d0349b 100644 --- a/Code/Sandbox/Editor/EditorViewportWidget.cpp +++ b/Code/Sandbox/Editor/EditorViewportWidget.cpp @@ -727,6 +727,8 @@ void EditorViewportWidget::OnEditorNotifyEvent(EEditorNotifyEvent event) // meters above the terrain (default terrain height is 32) viewTM.SetTranslation(Vec3(sx * 0.5f, sy * 0.5f, 34.0f)); SetViewTM(viewTM); + + UpdateScene(); } break; From 5ea22407872f291d5de262b2ee32818eef1260c6 Mon Sep 17 00:00:00 2001 From: nvsickle Date: Tue, 20 Apr 2021 12:31:10 -0700 Subject: [PATCH 63/67] Fix editor controls working in game mode -Implements ResetInputChannels for ViewportController API and SetEnabled for ViewportControllerList -Disables all viewport controllers while in game mode --- .../Viewport/MultiViewportController.h | 2 + .../Viewport/MultiViewportController.inl | 9 ++++ .../Viewport/ViewportControllerList.cpp | 53 +++++++++++++++++++ .../Viewport/ViewportControllerList.h | 10 ++++ Code/Sandbox/Editor/EditorViewportWidget.cpp | 10 ++++ .../Editor/LegacyViewportCameraController.cpp | 15 +++++- .../Editor/LegacyViewportCameraController.h | 2 + .../Editor/ViewportManipulatorController.cpp | 6 +++ .../Editor/ViewportManipulatorController.h | 1 + 9 files changed, 107 insertions(+), 1 deletion(-) diff --git a/Code/Framework/AzFramework/AzFramework/Viewport/MultiViewportController.h b/Code/Framework/AzFramework/AzFramework/Viewport/MultiViewportController.h index 54aa4394cc..2649655f50 100644 --- a/Code/Framework/AzFramework/AzFramework/Viewport/MultiViewportController.h +++ b/Code/Framework/AzFramework/AzFramework/Viewport/MultiViewportController.h @@ -37,6 +37,7 @@ namespace AzFramework // ViewportControllerInterface ... bool HandleInputChannelEvent(const ViewportControllerInputEvent& event) override; + void ResetInputChannels() override; void UpdateViewport(const ViewportControllerUpdateEvent& event) override; void RegisterViewportContext(ViewportId viewport) override; void UnregisterViewportContext(ViewportId viewport) override; @@ -58,6 +59,7 @@ namespace AzFramework ViewportId GetViewportId() const { return m_viewportId; } virtual bool HandleInputChannelEvent([[maybe_unused]]const ViewportControllerInputEvent& event) { return false; } + virtual void ResetInputChannels() {} virtual void UpdateViewport([[maybe_unused]]const ViewportControllerUpdateEvent& event) {} private: diff --git a/Code/Framework/AzFramework/AzFramework/Viewport/MultiViewportController.inl b/Code/Framework/AzFramework/AzFramework/Viewport/MultiViewportController.inl index 011c30b520..cc59418dac 100644 --- a/Code/Framework/AzFramework/AzFramework/Viewport/MultiViewportController.inl +++ b/Code/Framework/AzFramework/AzFramework/Viewport/MultiViewportController.inl @@ -30,6 +30,15 @@ namespace AzFramework return instanceIt->second->HandleInputChannelEvent(event); } + template + void MultiViewportController::ResetInputChannels() + { + for (auto instanceIt = m_instances.begin(); instanceIt != m_instances.end(); ++instanceIt) + { + instanceIt->second->ResetInputChannels(); + } + } + template void MultiViewportController::UpdateViewport(const ViewportControllerUpdateEvent& event) { diff --git a/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.cpp b/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.cpp index 39cdb1440e..7f2059c1c4 100644 --- a/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.cpp +++ b/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.cpp @@ -49,6 +49,11 @@ namespace AzFramework bool ViewportControllerList::HandleInputChannelEvent(const AzFramework::ViewportControllerInputEvent& event) { + if (!IsEnabled()) + { + return false; + } + // If our event priority is "custom", we should dispatch at all priority levels in order using AzFramework::ViewportControllerPriority; if (event.m_priority == AzFramework::ViewportControllerPriority::DispatchToAllPriorities) @@ -76,6 +81,31 @@ namespace AzFramework } } + void ViewportControllerList::ResetInputChannels() + { + // We don't need to send this while we're disabled, we're guaranteed to call ResetInputChannels after being re-enabled. + if (!IsEnabled()) + { + return; + } + + for (const auto priority : { + ViewportControllerPriority::Highest, + ViewportControllerPriority::High, + ViewportControllerPriority::Normal, + ViewportControllerPriority::Low, + ViewportControllerPriority::Lowest }) + { + if (auto priorityListIt = m_controllers.find(priority); priorityListIt != m_controllers.end()) + { + for (const auto& controller : priorityListIt->second) + { + controller->ResetInputChannels(); + } + } + } + } + bool ViewportControllerList::DispatchInputChannelEvent(const AzFramework::ViewportControllerInputEvent& event) { if (auto priorityListIt = m_controllers.find(event.m_priority); priorityListIt != m_controllers.end()) @@ -106,6 +136,11 @@ namespace AzFramework void ViewportControllerList::UpdateViewport(const AzFramework::ViewportControllerUpdateEvent& event) { + if (!IsEnabled()) + { + return; + } + // If our event priority is "custom", we should dispatch at all priority levels in reverse order // Reverse order lets high priority controllers get the last say in viewport update operations using AzFramework::ViewportControllerPriority; @@ -174,4 +209,22 @@ namespace AzFramework } } } + + bool ViewportControllerList::IsEnabled() const + { + return m_enabled; + } + + void ViewportControllerList::SetEnabled(bool enabled) + { + if (m_enabled != enabled) + { + m_enabled = enabled; + // If we've been re-enabled, reset our input channels as they may have missed state changes. + if (m_enabled) + { + ResetInputChannels(); + } + } + } } //namespace AzFramework diff --git a/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.h b/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.h index 294a784dff..2d071498df 100644 --- a/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.h +++ b/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.h @@ -37,6 +37,9 @@ namespace AzFramework //! either a controller returns true to consume the event in OnInputChannelEvent or the controller list is exhausted. //! InputChannelEvents are sent to controllers in priority order (from the lowest priority value to the highest). bool HandleInputChannelEvent(const AzFramework::ViewportControllerInputEvent& event) override; + //! Dispatches a ResetInputChannels call to all controllers registered to this list. + //! Calls to controllers are made in priority order (from the lowest priority value to the highest). + void ResetInputChannels() override; //! Dispatches an update tick to all controllers registered to this list. //! This occurs in *reverse* priority order (i.e. from the highest priority value to the lowest) so that //! controllers with the highest registration priority may override the transforms of the controllers with the @@ -50,6 +53,12 @@ namespace AzFramework //! All ViewportControllerLists have a priority of Custom to ensure //! that they receive events at all priorities from any parent controllers. AzFramework::ViewportControllerPriority GetPriority() const { return ViewportControllerPriority::DispatchToAllPriorities; } + //! Returns true if this controller list is enabled, i.e. + //! it is accepting and forwarding input and update events to its children. + bool IsEnabled() const; + //! Set this controller list's enabled state. + //! If a controller list is disabled, it will ignore all input and update events rather than dispatching them to its children. + void SetEnabled(bool enabled); private: void SortControllers(); @@ -58,5 +67,6 @@ namespace AzFramework AZStd::unordered_map> m_controllers; AZStd::unordered_set m_viewports; + bool m_enabled = true; }; } //namespace AzFramework diff --git a/Code/Sandbox/Editor/EditorViewportWidget.cpp b/Code/Sandbox/Editor/EditorViewportWidget.cpp index 5998d0349b..977850bc58 100644 --- a/Code/Sandbox/Editor/EditorViewportWidget.cpp +++ b/Code/Sandbox/Editor/EditorViewportWidget.cpp @@ -679,6 +679,11 @@ void EditorViewportWidget::OnEditorNotifyEvent(EEditorNotifyEvent event) } SetCurrentCursor(STD_CURSOR_GAME); } + + if (m_renderViewport) + { + m_renderViewport->GetControllerList()->SetEnabled(false); + } } break; @@ -697,6 +702,11 @@ void EditorViewportWidget::OnEditorNotifyEvent(EEditorNotifyEvent event) RestoreViewportAfterGameMode(); } + + if (m_renderViewport) + { + m_renderViewport->GetControllerList()->SetEnabled(true); + } break; case eNotify_OnCloseScene: diff --git a/Code/Sandbox/Editor/LegacyViewportCameraController.cpp b/Code/Sandbox/Editor/LegacyViewportCameraController.cpp index 7a33dff377..518b17f898 100644 --- a/Code/Sandbox/Editor/LegacyViewportCameraController.cpp +++ b/Code/Sandbox/Editor/LegacyViewportCameraController.cpp @@ -408,6 +408,13 @@ bool LegacyViewportCameraControllerInstance::HandleInputChannelEvent(const AzFra } } + UpdateCursorCapture(shouldCaptureCursor); + + return shouldConsumeEvent; +} + +void LegacyViewportCameraControllerInstance::UpdateCursorCapture(bool shouldCaptureCursor) +{ if (m_capturingCursor != shouldCaptureCursor) { if (shouldCaptureCursor) @@ -427,8 +434,14 @@ bool LegacyViewportCameraControllerInstance::HandleInputChannelEvent(const AzFra m_capturingCursor = shouldCaptureCursor; } +} - return shouldConsumeEvent; +void LegacyViewportCameraControllerInstance::ResetInputChannels() +{ + m_modifiers = 0; + m_pressedKeys.clear(); + UpdateCursorCapture(false); + m_inRotateMode = m_inMoveMode = m_inOrbitMode = m_inZoomMode = false; } void LegacyViewportCameraControllerInstance::UpdateViewport(const AzFramework::ViewportControllerUpdateEvent& event) diff --git a/Code/Sandbox/Editor/LegacyViewportCameraController.h b/Code/Sandbox/Editor/LegacyViewportCameraController.h index b4a36f44a5..129a2409da 100644 --- a/Code/Sandbox/Editor/LegacyViewportCameraController.h +++ b/Code/Sandbox/Editor/LegacyViewportCameraController.h @@ -35,6 +35,7 @@ namespace SandboxEditor explicit LegacyViewportCameraControllerInstance(AzFramework::ViewportId viewport); bool HandleInputChannelEvent(const AzFramework::ViewportControllerInputEvent& event) override; + void ResetInputChannels() override; void UpdateViewport(const AzFramework::ViewportControllerUpdateEvent& event) override; private: @@ -53,6 +54,7 @@ namespace SandboxEditor bool HandleMouseMove(const AzFramework::ScreenPoint& currentMousePos, const AzFramework::ScreenPoint& previousMousePos); bool HandleMouseWheel(float zDelta); bool IsKeyDown(Qt::Key key) const; + void UpdateCursorCapture(bool shouldCaptureCursor); bool m_inRotateMode = false; bool m_inMoveMode = false; diff --git a/Code/Sandbox/Editor/ViewportManipulatorController.cpp b/Code/Sandbox/Editor/ViewportManipulatorController.cpp index 8ce2ea1cd9..fc376b27d0 100644 --- a/Code/Sandbox/Editor/ViewportManipulatorController.cpp +++ b/Code/Sandbox/Editor/ViewportManipulatorController.cpp @@ -202,6 +202,12 @@ bool ViewportManipulatorControllerInstance::HandleInputChannelEvent(const AzFram return interactionHandled; } +void ViewportManipulatorControllerInstance::ResetInputChannels() +{ + m_pendingDoubleClicks.clear(); + m_state = AzToolsFramework::ViewportInteraction::MouseInteraction(); +} + void ViewportManipulatorControllerInstance::UpdateViewport(const AzFramework::ViewportControllerUpdateEvent& event) { m_curTime = event.m_time; diff --git a/Code/Sandbox/Editor/ViewportManipulatorController.h b/Code/Sandbox/Editor/ViewportManipulatorController.h index a4f373c48f..03a823fa64 100644 --- a/Code/Sandbox/Editor/ViewportManipulatorController.h +++ b/Code/Sandbox/Editor/ViewportManipulatorController.h @@ -26,6 +26,7 @@ namespace SandboxEditor explicit ViewportManipulatorControllerInstance(AzFramework::ViewportId viewport); bool HandleInputChannelEvent(const AzFramework::ViewportControllerInputEvent& event) override; + void ResetInputChannels() override; void UpdateViewport(const AzFramework::ViewportControllerUpdateEvent& event) override; private: From ba5e0170a2eea3fea6a1f89ce9c3c67f9d3b0d2b Mon Sep 17 00:00:00 2001 From: nvsickle Date: Tue, 20 Apr 2021 14:36:11 -0700 Subject: [PATCH 64/67] Fix ImGui rendering in-Editor -Ensure ViewportContext rendertick notifications always fire -Use viewport size to determine ImGui resolution, ensure OnViewportSizeChanged is always up-to-date for the default viewport context --- .../Include/Atom/RPI.Public/ViewportContext.h | 2 ++ .../Code/Source/RPI.Public/ViewportContext.cpp | 8 ++++++-- .../Source/RPI.Public/ViewportContextManager.cpp | 11 +++++++++-- .../Code/Source/ImguiAtomSystemComponent.cpp | 16 ++++++++++++++++ .../Code/Source/ImguiAtomSystemComponent.h | 1 + 5 files changed, 34 insertions(+), 4 deletions(-) diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/ViewportContext.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/ViewportContext.h index 24922fbe98..d3d3155715 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/ViewportContext.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/ViewportContext.h @@ -77,6 +77,8 @@ namespace AZ void OnRenderPipelineAdded(RenderPipelinePtr pipeline) override; //! Ensures our default view remains set when our scene's render pipelines are modified. void OnRenderPipelineRemoved(RenderPipeline* pipeline) override; + //! OnBeginPrepareRender is forwarded to our RenderTick notification to allow subscribers to do rendering. + void OnBeginPrepareRender() override; //WindowNotificationBus interface //! Used to fire a notification when our window resizes diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/ViewportContext.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/ViewportContext.cpp index b67ead9896..c9386b1fc0 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/ViewportContext.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/ViewportContext.cpp @@ -104,12 +104,16 @@ namespace AZ // add the current pipeline to next render tick if it's not already added. if (m_currentPipeline && m_currentPipeline->GetRenderMode() != RenderPipeline::RenderMode::RenderOnce) { - ViewportContextNotificationBus::Event(GetName(), &ViewportContextNotificationBus::Events::OnRenderTick); - ViewportContextIdNotificationBus::Event(GetId(), &ViewportContextIdNotificationBus::Events::OnRenderTick); m_currentPipeline->AddToRenderTickOnce(); } } + void ViewportContext::OnBeginPrepareRender() + { + ViewportContextNotificationBus::Event(GetName(), &ViewportContextNotificationBus::Events::OnRenderTick); + ViewportContextIdNotificationBus::Event(GetId(), &ViewportContextIdNotificationBus::Events::OnRenderTick); + } + AZ::Name ViewportContext::GetName() const { return m_name; diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/ViewportContextManager.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/ViewportContextManager.cpp index 8d578352d8..2b525df4d4 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/ViewportContextManager.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/ViewportContextManager.cpp @@ -57,9 +57,14 @@ namespace AZ return; } viewportData.context = viewportContext; - auto onSizeChanged = [contextName, viewportId](AzFramework::WindowSize size) + auto onSizeChanged = [this, viewportId](AzFramework::WindowSize size) { - ViewportContextNotificationBus::Event(contextName, &ViewportContextNotificationBus::Events::OnViewportSizeChanged, size); + // Ensure we emit OnViewportSizeChanged with the correct name. + auto viewportContext = this->GetViewportContextById(viewportId); + if (viewportContext) + { + ViewportContextNotificationBus::Event(viewportContext->GetName(), &ViewportContextNotificationBus::Events::OnViewportSizeChanged, size); + } ViewportContextIdNotificationBus::Event(viewportId, &ViewportContextIdNotificationBus::Events::OnViewportSizeChanged, size); }; viewportContext->m_name = contextName; @@ -174,6 +179,8 @@ namespace AZ GetOrCreateViewStackForContext(newContextName); viewportContext->m_name = newContextName; UpdateViewForContext(newContextName); + // Ensure anyone listening on per-name viewport size updates gets notified. + ViewportContextNotificationBus::Event(newContextName, &ViewportContextNotificationBus::Events::OnViewportSizeChanged, viewportContext->GetViewportSize()); } void ViewportContextManager::EnumerateViewportContexts(AZStd::function visitorFunction) diff --git a/Gems/AtomLyIntegration/ImguiAtom/Code/Source/ImguiAtomSystemComponent.cpp b/Gems/AtomLyIntegration/ImguiAtom/Code/Source/ImguiAtomSystemComponent.cpp index 3f25228406..2ae62023c7 100644 --- a/Gems/AtomLyIntegration/ImguiAtom/Code/Source/ImguiAtomSystemComponent.cpp +++ b/Gems/AtomLyIntegration/ImguiAtom/Code/Source/ImguiAtomSystemComponent.cpp @@ -58,6 +58,15 @@ namespace AZ auto atomViewportRequests = AZ::Interface::Get(); const AZ::Name contextName = atomViewportRequests->GetDefaultViewportContextName(); AZ::RPI::ViewportContextNotificationBus::Handler::BusConnect(contextName); + +#if defined(IMGUI_ENABLED) + ImGui::ImGuiManagerListenerBus::Broadcast(&ImGui::IImGuiManagerListener::SetResolutionMode, ImGui::ImGuiResolutionMode::LockToResolution); + auto defaultViewportContext = atomViewportRequests->GetDefaultViewportContext(); + if (defaultViewportContext) + { + OnViewportSizeChanged(defaultViewportContext->GetViewportSize()); + } +#endif } void ImguiAtomSystemComponent::Deactivate() @@ -75,6 +84,13 @@ namespace AZ { #if defined(IMGUI_ENABLED) ImGui::ImGuiManagerListenerBus::Broadcast(&ImGui::IImGuiManagerListener::Render); +#endif + } + + void ImguiAtomSystemComponent::OnViewportSizeChanged(AzFramework::WindowSize size) + { +#if defined(IMGUI_ENABLED) + ImGui::ImGuiManagerListenerBus::Broadcast(&ImGui::IImGuiManagerListener::SetImGuiRenderResolution, ImVec2{aznumeric_cast(size.m_width), aznumeric_cast(size.m_height)}); #endif } } diff --git a/Gems/AtomLyIntegration/ImguiAtom/Code/Source/ImguiAtomSystemComponent.h b/Gems/AtomLyIntegration/ImguiAtom/Code/Source/ImguiAtomSystemComponent.h index a554ab0339..d3bdb7c4fc 100644 --- a/Gems/AtomLyIntegration/ImguiAtom/Code/Source/ImguiAtomSystemComponent.h +++ b/Gems/AtomLyIntegration/ImguiAtom/Code/Source/ImguiAtomSystemComponent.h @@ -54,6 +54,7 @@ namespace AZ // ViewportContextNotificationBus overrides... void OnRenderTick() override; + void OnViewportSizeChanged(AzFramework::WindowSize size) override; DebugConsole m_debugConsole; }; From 4f9d7e37822849d916d9df57dff4eaee2887ef37 Mon Sep 17 00:00:00 2001 From: nvsickle Date: Tue, 20 Apr 2021 15:12:39 -0700 Subject: [PATCH 65/67] Simplify ResetInputChannels --- .../Viewport/ViewportControllerList.cpp | 14 +++----------- .../AzFramework/Viewport/ViewportControllerList.h | 2 +- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.cpp b/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.cpp index 7f2059c1c4..1dd608319a 100644 --- a/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.cpp +++ b/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.cpp @@ -89,19 +89,11 @@ namespace AzFramework return; } - for (const auto priority : { - ViewportControllerPriority::Highest, - ViewportControllerPriority::High, - ViewportControllerPriority::Normal, - ViewportControllerPriority::Low, - ViewportControllerPriority::Lowest }) + for (const auto& controllerList : m_controllers) { - if (auto priorityListIt = m_controllers.find(priority); priorityListIt != m_controllers.end()) + for (const auto& controller : controllerList.second) { - for (const auto& controller : priorityListIt->second) - { - controller->ResetInputChannels(); - } + controller->ResetInputChannels(); } } } diff --git a/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.h b/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.h index 2d071498df..9da1d65dff 100644 --- a/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.h +++ b/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.h @@ -38,7 +38,7 @@ namespace AzFramework //! InputChannelEvents are sent to controllers in priority order (from the lowest priority value to the highest). bool HandleInputChannelEvent(const AzFramework::ViewportControllerInputEvent& event) override; //! Dispatches a ResetInputChannels call to all controllers registered to this list. - //! Calls to controllers are made in priority order (from the lowest priority value to the highest). + //! Calls to controllers are made in an undefined order. void ResetInputChannels() override; //! Dispatches an update tick to all controllers registered to this list. //! This occurs in *reverse* priority order (i.e. from the highest priority value to the lowest) so that From 62bc7a66bb82dfdc390dec81cdfaf2e3d72711cf Mon Sep 17 00:00:00 2001 From: AMZN-daimini <82231674+AMZN-daimini@users.noreply.github.com> Date: Tue, 20 Apr 2021 16:22:34 -0700 Subject: [PATCH 66/67] Remove the Level Inspector from Prefab mode and move behavior to Entity Inspector. (#149) * Remove Level Inspector from Prefab mode, and integrate the same behavior in the Entity Inspector * Show prefab name in level entity row of the Outliner. Allow Ui Handlers to prevent renaming. * Separate setting the prefab's template path and the container entity name. * Disable reparenting to root level * Disable the ability to rename the level entity. * Fixes as per Ram's review --- .../PrefabEditorEntityOwnershipService.cpp | 2 + .../Prefab/Instance/Instance.cpp | 8 ++- .../Prefab/Instance/Instance.h | 1 + .../Prefab/PrefabPublicHandler.cpp | 4 +- .../Prefab/PrefabSystemComponent.cpp | 1 + .../EditorEntityUiHandlerBase.cpp | 5 ++ .../EditorEntityUiHandlerBase.h | 2 + .../UI/Outliner/EntityOutlinerListModel.cpp | 44 +++++++------- .../UI/Outliner/EntityOutlinerWidget.cpp | 29 ++++++++-- .../UI/Outliner/EntityOutlinerWidget.hxx | 3 + .../UI/Prefab/LevelRootUiHandler.cpp | 20 +++++++ .../UI/Prefab/LevelRootUiHandler.h | 2 + .../PropertyEditor/EntityPropertyEditor.cpp | 57 +++++++++++++++---- .../PropertyEditor/EntityPropertyEditor.hxx | 9 +++ Code/Sandbox/Editor/QtViewPaneManager.cpp | 20 ++++++- .../ComponentEntityEditorPlugin.cpp | 17 +++--- 16 files changed, 171 insertions(+), 53 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.cpp index 2424658ecf..cb16e0c099 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.cpp @@ -94,6 +94,7 @@ namespace AzToolsFramework m_prefabSystemComponent->RemoveTemplate(templateId); } m_rootInstance->Reset(); + m_rootInstance->SetContainerEntityName("Level"); AzFramework::EntityOwnershipServiceNotificationBus::Event( m_entityContextId, &AzFramework::EntityOwnershipServiceNotificationBus::Events::OnEntityOwnershipServiceReset); @@ -198,6 +199,7 @@ namespace AzToolsFramework m_rootInstance->SetTemplateId(templateId); m_rootInstance->SetTemplateSourcePath(m_loaderInterface->GetRelativePathToProject(filename)); + m_rootInstance->SetContainerEntityName("Level"); m_prefabSystemComponent->PropagateTemplateChanges(templateId); return true; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp index 0a5b43482e..c1eee62dbc 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp @@ -123,7 +123,11 @@ namespace AzToolsFramework void Instance::SetTemplateSourcePath(AZ::IO::PathView sourcePath) { m_templateSourcePath = sourcePath; - m_containerEntity->SetName(sourcePath.Filename().Native()); + } + + void Instance::SetContainerEntityName(AZStd::string_view containerName) + { + m_containerEntity->SetName(containerName); } bool Instance::AddEntity(AZ::Entity& entity) @@ -563,7 +567,7 @@ namespace AzToolsFramework AZ::EntityId Instance::GetContainerEntityId() const { - return m_containerEntity->GetId(); + return m_containerEntity ? m_containerEntity->GetId() : AZ::EntityId(); } bool Instance::HasContainerEntity() const diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.h index d1c7a4d853..186dce0f50 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.h @@ -80,6 +80,7 @@ namespace AzToolsFramework const AZ::IO::Path& GetTemplateSourcePath() const; void SetTemplateSourcePath(AZ::IO::PathView sourcePath); + void SetContainerEntityName(AZStd::string_view containerName); bool AddEntity(AZ::Entity& entity); bool AddEntity(AZ::Entity& entity, EntityAlias entityAlias); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp index 46bd924f30..772e0ae52e 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp @@ -721,7 +721,7 @@ namespace AzToolsFramework InstanceOptionalReference owningInstance = m_instanceEntityMapperInterface->FindOwningInstance(entity->GetId()); AZ_Assert( owningInstance.has_value(), - "An error occored while retrieving entities and prefab instances : " + "An error occurred while retrieving entities and prefab instances : " "Owning instance of entity with id '%llu' couldn't be found", entity->GetId()); @@ -805,7 +805,7 @@ namespace AzToolsFramework { AZ_Assert( false, - "An error occored in function EntitiesBelongToSameInstance: " + "An error occurred in function EntitiesBelongToSameInstance: " "Owning instance of entity with id '%llu' couldn't be found", entityId); return false; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp index 9070630e56..54e99c9416 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp @@ -121,6 +121,7 @@ namespace AzToolsFramework } newInstance->SetTemplateSourcePath(relativeFilePath); + newInstance->SetContainerEntityName(relativeFilePath.Stem().Native()); TemplateId newTemplateId = CreateTemplateFromInstance(*newInstance); if (newTemplateId == InvalidTemplateId) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.cpp index 98edd26f88..84266d3707 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.cpp @@ -61,6 +61,11 @@ namespace AzToolsFramework return true; } + bool EditorEntityUiHandlerBase::CanRename(AZ::EntityId /*entityId*/) const + { + return true; + } + void EditorEntityUiHandlerBase::PaintItemBackground(QPainter* /*painter*/, const QStyleOptionViewItem& /*option*/, const QModelIndex& /*index*/) const { } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.h b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.h index 7360e7ff0b..1aa5e5720f 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.h @@ -47,6 +47,8 @@ namespace AzToolsFramework virtual QPixmap GenerateItemIcon(AZ::EntityId entityId) const; //! Returns whether the element's lock and visibility state should be accessible in the Outliner virtual bool CanToggleLockVisibility(AZ::EntityId entityId) const; + //! Returns whether the element's name should be editable + virtual bool CanRename(AZ::EntityId entityId) const; //! Paints the background of the item in the Outliner. virtual void PaintItemBackground(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.cpp index de10ae18b4..5b44594398 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.cpp @@ -945,6 +945,12 @@ namespace AzToolsFramework return false; } + // Disable reparenting to the root level + if (!newParentId.IsValid()) + { + return false; + } + // Ignore entities not owned by the editor context. It is assumed that all entities belong // to the same context since multiple selection doesn't span across views. for (const AZ::EntityId& entityId : selectedEntityIds) @@ -974,39 +980,33 @@ namespace AzToolsFramework } } - if (newParentId.IsValid()) + bool isLayerEntity = false; + Layers::EditorLayerComponentRequestBus::EventResult( + isLayerEntity, + entityId, + &Layers::EditorLayerComponentRequestBus::Events::HasLayer); + // Layers can only have other layers as parents, or have no parent. + if (isLayerEntity) { - bool isLayerEntity = false; + bool newParentIsLayer = false; Layers::EditorLayerComponentRequestBus::EventResult( - isLayerEntity, - entityId, + newParentIsLayer, + newParentId, &Layers::EditorLayerComponentRequestBus::Events::HasLayer); - // Layers can only have other layers as parents, or have no parent. - if (isLayerEntity) + if (!newParentIsLayer) { - bool newParentIsLayer = false; - Layers::EditorLayerComponentRequestBus::EventResult( - newParentIsLayer, - newParentId, - &Layers::EditorLayerComponentRequestBus::Events::HasLayer); - if (!newParentIsLayer) - { - return false; - } + return false; } } } //Only check the entity pointer if the entity id is valid because //we want to allow dragging items to unoccupied parts of the tree to un-parent them - if (newParentId.IsValid()) + AZ::Entity* newParentEntity = nullptr; + AZ::ComponentApplicationBus::BroadcastResult(newParentEntity, &AZ::ComponentApplicationRequests::FindEntity, newParentId); + if (!newParentEntity) { - AZ::Entity* newParentEntity = nullptr; - AZ::ComponentApplicationBus::BroadcastResult(newParentEntity, &AZ::ComponentApplicationRequests::FindEntity, newParentId); - if (!newParentEntity) - { - return false; - } + return false; } //reject dragging on to yourself or your children diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.cpp index 08fc764507..3ee8a14285 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -271,6 +272,12 @@ namespace AzToolsFramework m_listModel->Initialize(); + m_editorEntityUiInterface = AZ::Interface::Get(); + + AZ_Assert( + m_editorEntityUiInterface != nullptr, + "EntityOutlinerWidget requires a EditorEntityUiInterface instance on Initialize."); + EditorPickModeNotificationBus::Handler::BusConnect(GetEntityContextId()); EntityHighlightMessages::Bus::Handler::BusConnect(); EntityOutlinerModelNotificationBus::Handler::BusConnect(); @@ -562,7 +569,13 @@ namespace AzToolsFramework if (m_selectedEntityIds.size() == 1) { - contextMenu->addAction(m_actionToRenameSelection); + auto entityId = m_selectedEntityIds.front(); + auto entityUiHandler = m_editorEntityUiInterface->GetHandler(entityId); + + if (!entityUiHandler || entityUiHandler->CanRename(entityId)) + { + contextMenu->addAction(m_actionToRenameSelection); + } } if (m_selectedEntityIds.size() == 1) @@ -688,11 +701,17 @@ namespace AzToolsFramework if (m_selectedEntityIds.size() == 1) { - const QModelIndex proxyIndex = GetIndexFromEntityId(m_selectedEntityIds.front()); - if (proxyIndex.isValid()) + auto entityId = m_selectedEntityIds.front(); + auto entityUiHandler = m_editorEntityUiInterface->GetHandler(entityId); + + if (!entityUiHandler || entityUiHandler->CanRename(entityId)) { - m_gui->m_objectTree->setCurrentIndex(proxyIndex); - m_gui->m_objectTree->QTreeView::edit(proxyIndex); + const QModelIndex proxyIndex = GetIndexFromEntityId(entityId); + if (proxyIndex.isValid()) + { + m_gui->m_objectTree->setCurrentIndex(proxyIndex); + m_gui->m_objectTree->QTreeView::edit(proxyIndex); + } } } } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.hxx b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.hxx index cf8c55abd1..f225bb49b8 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.hxx +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.hxx @@ -42,6 +42,7 @@ namespace Ui namespace AzToolsFramework { + class EditorEntityUiInterface; class EntityOutlinerListModel; class EntityOutlinerSortFilterProxyModel; @@ -193,6 +194,8 @@ namespace AzToolsFramework EntityIdSet m_entitiesToSort; EntityOutliner::DisplaySortMode m_sortMode; bool m_sortContentQueued; + + EditorEntityUiInterface* m_editorEntityUiInterface = nullptr; }; } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/LevelRootUiHandler.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/LevelRootUiHandler.cpp index 828a49ef94..7915403c0a 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/LevelRootUiHandler.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/LevelRootUiHandler.cpp @@ -50,11 +50,31 @@ namespace AzToolsFramework return QPixmap(m_levelRootIconPath); } + QString LevelRootUiHandler::GenerateItemInfoString(AZ::EntityId entityId) const + { + QString infoString; + + AZ::IO::Path path = m_prefabPublicInterface->GetOwningInstancePrefabPath(entityId); + + if (!path.empty()) + { + infoString = + QObject::tr("(%1)").arg(path.Filename().Native().data()); + } + + return infoString; + } + bool LevelRootUiHandler::CanToggleLockVisibility(AZ::EntityId /*entityId*/) const { return false; } + bool LevelRootUiHandler::CanRename(AZ::EntityId /*entityId*/) const + { + return false; + } + void LevelRootUiHandler::PaintItemBackground(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& /*index*/) const { if (!painter) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/LevelRootUiHandler.h b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/LevelRootUiHandler.h index a8b2e4a4f8..19c1244040 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/LevelRootUiHandler.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/LevelRootUiHandler.h @@ -34,7 +34,9 @@ namespace AzToolsFramework // EditorEntityUiHandler... QPixmap GenerateItemIcon(AZ::EntityId entityId) const override; + QString GenerateItemInfoString(AZ::EntityId entityId) const override; bool CanToggleLockVisibility(AZ::EntityId entityId) const override; + bool CanRename(AZ::EntityId entityId) const override; void PaintItemBackground(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override; private: diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.cpp index 55c7fb3f65..181f5b9a9d 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.cpp @@ -310,6 +310,9 @@ namespace AzToolsFramework { initEntityPropertyEditorResources(); + m_prefabPublicInterface = AZ::Interface::Get(); + AZ_Assert(m_prefabPublicInterface != nullptr, "EntityPropertyEditor requires a PrefabPublicInterface instance on Initialize."); + setObjectName("EntityPropertyEditor"); setAcceptDrops(true); @@ -405,8 +408,6 @@ namespace AzToolsFramework CreateActions(); UpdateContents(); - m_prefabPublicInterface = AZ::Interface::Get(); - EditorEntityContextNotificationBus::Handler::BusConnect(); //forced to register global event filter with application for selection @@ -693,11 +694,38 @@ namespace AzToolsFramework m_gui->m_entityIcon->repaint(); } + EntityPropertyEditor::InspectorLayout EntityPropertyEditor::GetCurrentInspectorLayout() const + { + if (!m_prefabsAreEnabled) + { + return m_isLevelEntityEditor ? InspectorLayout::LEVEL : InspectorLayout::ENTITY; + } + + AZ::EntityId levelContainerEntityId = m_prefabPublicInterface->GetLevelInstanceContainerEntityId(); + if (AZStd::find(m_selectedEntityIds.begin(), m_selectedEntityIds.end(), levelContainerEntityId) != m_selectedEntityIds.end()) + { + if (m_selectedEntityIds.size() > 1) + { + return InspectorLayout::INVALID; + } + else + { + return InspectorLayout::LEVEL; + } + } + else + { + return InspectorLayout::ENTITY; + } + } + void EntityPropertyEditor::UpdateEntityDisplay() { UpdateStatusComboBox(); - if (m_isLevelEntityEditor) + InspectorLayout layout = GetCurrentInspectorLayout(); + + if (layout == InspectorLayout::LEVEL) { AZStd::string levelName; AzToolsFramework::EditorRequestBus::BroadcastResult(levelName, &AzToolsFramework::EditorRequests::GetLevelName); @@ -737,13 +765,20 @@ namespace AzToolsFramework AZ_PROFILE_FUNCTION(AZ::Debug::ProfileCategory::AzToolsFramework); SelectionEntityTypeInfo result = SelectionEntityTypeInfo::None; - if (m_isLevelEntityEditor) + InspectorLayout layout = GetCurrentInspectorLayout(); + + if (layout == InspectorLayout::LEVEL) { // The Level Inspector should only have a list of selectable components after the // level entity itself is valid (i.e. "selected"). return selection.empty() ? SelectionEntityTypeInfo::None : SelectionEntityTypeInfo::LevelEntity; } + if (layout == InspectorLayout::INVALID) + { + return SelectionEntityTypeInfo::Mixed; + } + for (AZ::EntityId selectedEntityId : selection) { bool isLayerEntity = false; @@ -909,16 +944,18 @@ namespace AzToolsFramework } } + bool isLevelLayout = GetCurrentInspectorLayout() == InspectorLayout::LEVEL; + m_gui->m_entityDetailsLabel->setText(entityDetailsLabelText); m_gui->m_entityDetailsLabel->setVisible(entityDetailsVisible); m_gui->m_entityNameEditor->setVisible(hasEntitiesDisplayed); m_gui->m_entityNameLabel->setVisible(hasEntitiesDisplayed); m_gui->m_entityIcon->setVisible(hasEntitiesDisplayed); - m_gui->m_pinButton->setVisible(m_overrideSelectedEntityIds.empty() && hasEntitiesDisplayed && !m_isSystemEntityEditor && !m_isLevelEntityEditor); - m_gui->m_statusLabel->setVisible(hasEntitiesDisplayed && !m_isSystemEntityEditor && !m_isLevelEntityEditor); - m_gui->m_statusComboBox->setVisible(hasEntitiesDisplayed && !m_isSystemEntityEditor && !m_isLevelEntityEditor); - m_gui->m_entityIdLabel->setVisible(hasEntitiesDisplayed && !m_isSystemEntityEditor && !m_isLevelEntityEditor); - m_gui->m_entityIdText->setVisible(hasEntitiesDisplayed && !m_isSystemEntityEditor && !m_isLevelEntityEditor); + m_gui->m_pinButton->setVisible(m_overrideSelectedEntityIds.empty() && hasEntitiesDisplayed && !m_isSystemEntityEditor); + m_gui->m_statusLabel->setVisible(hasEntitiesDisplayed && !m_isSystemEntityEditor && !isLevelLayout); + m_gui->m_statusComboBox->setVisible(hasEntitiesDisplayed && !m_isSystemEntityEditor && !isLevelLayout); + m_gui->m_entityIdLabel->setVisible(hasEntitiesDisplayed && !m_isSystemEntityEditor && !isLevelLayout); + m_gui->m_entityIdText->setVisible(hasEntitiesDisplayed && !m_isSystemEntityEditor && !isLevelLayout); bool displayComponentSearchBox = hasEntitiesDisplayed; if (hasEntitiesDisplayed) @@ -941,7 +978,7 @@ namespace AzToolsFramework UpdateEntityDisplay(); } - m_gui->m_darkBox->setVisible(displayComponentSearchBox && !m_isSystemEntityEditor && !m_isLevelEntityEditor); + m_gui->m_darkBox->setVisible(displayComponentSearchBox && !m_isSystemEntityEditor && !isLevelLayout); m_gui->m_entitySearchBox->setVisible(displayComponentSearchBox); bool displayAddComponentMenu = CanAddComponentsToSelection(selectionEntityTypeInfo); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.hxx b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.hxx index fed9c55f15..677dc98277 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.hxx +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.hxx @@ -521,6 +521,15 @@ namespace AzToolsFramework bool m_isSystemEntityEditor; bool m_isLevelEntityEditor = false; + enum class InspectorLayout + { + ENTITY = 0, // All selected entities are regular entities + LEVEL, // The selected entity is the level prefab container entity + INVALID // Other entities are selected alongside the level prefab container entity + }; + + InspectorLayout GetCurrentInspectorLayout() const; + // the spacer's job is to make sure that its always at the end of the list of components. QSpacerItem* m_spacer; bool m_isAlreadyQueuedRefresh; diff --git a/Code/Sandbox/Editor/QtViewPaneManager.cpp b/Code/Sandbox/Editor/QtViewPaneManager.cpp index ad33eecfee..b242f3d914 100644 --- a/Code/Sandbox/Editor/QtViewPaneManager.cpp +++ b/Code/Sandbox/Editor/QtViewPaneManager.cpp @@ -36,6 +36,8 @@ #include #include +#include + #include #include #include @@ -983,6 +985,11 @@ bool QtViewPaneManager::ClosePanesWithRollback(const QVector& panesToKe */ void QtViewPaneManager::RestoreDefaultLayout(bool resetSettings) { + // Get whether the prefab system is enabled + bool isPrefabSystemEnabled = false; + AzFramework::ApplicationRequests::Bus::BroadcastResult( + isPrefabSystemEnabled, &AzFramework::ApplicationRequests::IsPrefabSystemEnabled); + if (resetSettings) { // We're going to do something destructive (removing all of the viewpane settings). Better confirm with the user @@ -1022,7 +1029,11 @@ void QtViewPaneManager::RestoreDefaultLayout(bool resetSettings) state.viewPanes.push_back(LyViewPane::EntityInspector); state.viewPanes.push_back(LyViewPane::AssetBrowser); state.viewPanes.push_back(LyViewPane::Console); - state.viewPanes.push_back(LyViewPane::LevelInspector); + + if (!isPrefabSystemEnabled) + { + state.viewPanes.push_back(LyViewPane::LevelInspector); + } state.mainWindowState = m_defaultMainWindowState; @@ -1047,7 +1058,12 @@ void QtViewPaneManager::RestoreDefaultLayout(bool resetSettings) const QtViewPane* assetBrowserViewPane = OpenPane(LyViewPane::AssetBrowser, QtViewPane::OpenMode::UseDefaultState); const QtViewPane* entityInspectorViewPane = OpenPane(LyViewPane::EntityInspector, QtViewPane::OpenMode::UseDefaultState); const QtViewPane* consoleViewPane = OpenPane(LyViewPane::Console, QtViewPane::OpenMode::UseDefaultState); - const QtViewPane* levelInspectorPane = OpenPane(LyViewPane::LevelInspector, QtViewPane::OpenMode::UseDefaultState); + + const QtViewPane* levelInspectorPane = nullptr; + if (!isPrefabSystemEnabled) + { + levelInspectorPane = OpenPane(LyViewPane::LevelInspector, QtViewPane::OpenMode::UseDefaultState); + } // This class does all kinds of behind the scenes magic to make docking / restore work, especially with groups // so instead of doing our special default layout attach / docking right now, we want to make it happen diff --git a/Code/Sandbox/Plugins/ComponentEntityEditorPlugin/ComponentEntityEditorPlugin.cpp b/Code/Sandbox/Plugins/ComponentEntityEditorPlugin/ComponentEntityEditorPlugin.cpp index 17face523b..e5ad2a2872 100644 --- a/Code/Sandbox/Plugins/ComponentEntityEditorPlugin/ComponentEntityEditorPlugin.cpp +++ b/Code/Sandbox/Plugins/ComponentEntityEditorPlugin/ComponentEntityEditorPlugin.cpp @@ -143,15 +143,6 @@ ComponentEntityEditorPlugin::ComponentEntityEditorPlugin([[maybe_unused]] IEdito LyViewPane::CategoryTools, pinnedInspectorOptions); - ViewPaneOptions levelInspectorOptions; - levelInspectorOptions.canHaveMultipleInstances = false; - levelInspectorOptions.preferedDockingArea = Qt::RightDockWidgetArea; - levelInspectorOptions.paneRect = QRect(50, 50, 400, 700); - RegisterViewPane( - LyViewPane::LevelInspector, - LyViewPane::CategoryTools, - levelInspectorOptions); - bool prefabSystemEnabled = false; AzFramework::ApplicationRequests::Bus::BroadcastResult(prefabSystemEnabled, &AzFramework::ApplicationRequests::IsPrefabSystemEnabled); @@ -170,8 +161,14 @@ ComponentEntityEditorPlugin::ComponentEntityEditorPlugin([[maybe_unused]] IEdito } else { - // Add the Legacy Outliner to the Tools Menu + ViewPaneOptions levelInspectorOptions; + levelInspectorOptions.canHaveMultipleInstances = false; + levelInspectorOptions.preferedDockingArea = Qt::RightDockWidgetArea; + levelInspectorOptions.paneRect = QRect(50, 50, 400, 700); + RegisterViewPane( + LyViewPane::LevelInspector, LyViewPane::CategoryTools, levelInspectorOptions); + // Add the Legacy Outliner to the Tools Menu ViewPaneOptions outlinerOptions; outlinerOptions.canHaveMultipleInstances = true; outlinerOptions.preferedDockingArea = Qt::LeftDockWidgetArea; From 707f5a07b2da251933b19b451b8e5f6e06783291 Mon Sep 17 00:00:00 2001 From: Alex Peterson <26804013+AMZN-alexpete@users.noreply.github.com> Date: Tue, 20 Apr 2021 17:25:31 -0700 Subject: [PATCH 67/67] Converted Civetweb to 3p package --- Gems/Metastream/Code/CMakeLists.txt | 2 -- .../Platform/Common/MSVC/metastream_msvc.cmake | 4 ++++ cmake/3rdParty/Findcivetweb.cmake | 16 ---------------- .../Platform/Android/civetweb_android.cmake | 10 ---------- .../Platform/Android/cmake_android_files.cmake | 1 - .../3rdParty/Platform/Linux/civetweb_linux.cmake | 10 ---------- .../Platform/Linux/cmake_linux_files.cmake | 1 - cmake/3rdParty/Platform/Mac/civetweb_mac.cmake | 10 ---------- .../3rdParty/Platform/Mac/cmake_mac_files.cmake | 1 - .../Windows/BuiltInPackages_windows.cmake | 3 ++- .../Platform/Windows/civetweb_windows.cmake | 13 ------------- cmake/3rdParty/cmake_files.cmake | 1 - .../3rdParty/package_filelists/3rdParty.json | 1 - .../Windows/package_filelists/3rdParty.json | 6 ------ 14 files changed, 6 insertions(+), 73 deletions(-) delete mode 100644 cmake/3rdParty/Findcivetweb.cmake delete mode 100644 cmake/3rdParty/Platform/Android/civetweb_android.cmake delete mode 100644 cmake/3rdParty/Platform/Linux/civetweb_linux.cmake delete mode 100644 cmake/3rdParty/Platform/Mac/civetweb_mac.cmake delete mode 100644 cmake/3rdParty/Platform/Windows/civetweb_windows.cmake diff --git a/Gems/Metastream/Code/CMakeLists.txt b/Gems/Metastream/Code/CMakeLists.txt index 6d2983c91d..47b6f6f9c5 100644 --- a/Gems/Metastream/Code/CMakeLists.txt +++ b/Gems/Metastream/Code/CMakeLists.txt @@ -47,7 +47,6 @@ ly_add_target( PRIVATE Gem::Metastream.Static Legacy::CryCommon - 3rdParty::civetweb ) @@ -74,7 +73,6 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED) AZ::AzTest Gem::Metastream.Static Legacy::CryCommon - 3rdParty::civetweb ) ly_add_googletest( NAME Gem::Metastream.Tests diff --git a/Gems/Metastream/Code/Source/Platform/Common/MSVC/metastream_msvc.cmake b/Gems/Metastream/Code/Source/Platform/Common/MSVC/metastream_msvc.cmake index 5cebdbd198..2a42a01b08 100644 --- a/Gems/Metastream/Code/Source/Platform/Common/MSVC/metastream_msvc.cmake +++ b/Gems/Metastream/Code/Source/Platform/Common/MSVC/metastream_msvc.cmake @@ -11,3 +11,7 @@ # CivetHttpServer.cpp uses a try catch block set(LY_COMPILE_OPTIONS PRIVATE /EHsc) +set(LY_BUILD_DEPENDENCIES + PRIVATE + 3rdParty::civetweb +) \ No newline at end of file diff --git a/cmake/3rdParty/Findcivetweb.cmake b/cmake/3rdParty/Findcivetweb.cmake deleted file mode 100644 index b882957b84..0000000000 --- a/cmake/3rdParty/Findcivetweb.cmake +++ /dev/null @@ -1,16 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# - -ly_add_external_target( - NAME civetweb - VERSION civetweb-20160922-az.2 - INCLUDE_DIRECTORIES include -) diff --git a/cmake/3rdParty/Platform/Android/civetweb_android.cmake b/cmake/3rdParty/Platform/Android/civetweb_android.cmake deleted file mode 100644 index 4d5680a30d..0000000000 --- a/cmake/3rdParty/Platform/Android/civetweb_android.cmake +++ /dev/null @@ -1,10 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# diff --git a/cmake/3rdParty/Platform/Android/cmake_android_files.cmake b/cmake/3rdParty/Platform/Android/cmake_android_files.cmake index 07e453f862..59015d8704 100644 --- a/cmake/3rdParty/Platform/Android/cmake_android_files.cmake +++ b/cmake/3rdParty/Platform/Android/cmake_android_files.cmake @@ -11,7 +11,6 @@ set(FILES BuiltInPackages_android.cmake - civetweb_android.cmake VkValidation_android.cmake Wwise_android.cmake ) diff --git a/cmake/3rdParty/Platform/Linux/civetweb_linux.cmake b/cmake/3rdParty/Platform/Linux/civetweb_linux.cmake deleted file mode 100644 index 4d5680a30d..0000000000 --- a/cmake/3rdParty/Platform/Linux/civetweb_linux.cmake +++ /dev/null @@ -1,10 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# diff --git a/cmake/3rdParty/Platform/Linux/cmake_linux_files.cmake b/cmake/3rdParty/Platform/Linux/cmake_linux_files.cmake index 83d862ee78..809e8b7198 100644 --- a/cmake/3rdParty/Platform/Linux/cmake_linux_files.cmake +++ b/cmake/3rdParty/Platform/Linux/cmake_linux_files.cmake @@ -12,7 +12,6 @@ set(FILES AWSGameLiftServerSDK_linux.cmake BuiltInPackages_linux.cmake - civetweb_linux.cmake dyad_linux.cmake FbxSdk_linux.cmake OpenSSL_linux.cmake diff --git a/cmake/3rdParty/Platform/Mac/civetweb_mac.cmake b/cmake/3rdParty/Platform/Mac/civetweb_mac.cmake deleted file mode 100644 index 4d5680a30d..0000000000 --- a/cmake/3rdParty/Platform/Mac/civetweb_mac.cmake +++ /dev/null @@ -1,10 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# diff --git a/cmake/3rdParty/Platform/Mac/cmake_mac_files.cmake b/cmake/3rdParty/Platform/Mac/cmake_mac_files.cmake index 9d0166913a..8cab9da1ba 100644 --- a/cmake/3rdParty/Platform/Mac/cmake_mac_files.cmake +++ b/cmake/3rdParty/Platform/Mac/cmake_mac_files.cmake @@ -11,7 +11,6 @@ set(FILES BuiltInPackages_mac.cmake - civetweb_mac.cmake DirectXShaderCompiler_mac.cmake FbxSdk_mac.cmake OpenGLInterface_mac.cmake diff --git a/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake b/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake index 09dd543e5c..a2b03c1a68 100644 --- a/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake +++ b/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake @@ -55,4 +55,5 @@ ly_associate_package(PACKAGE_NAME pyside2-qt-5.15.1-rev2-windows TARGETS pys ly_associate_package(PACKAGE_NAME openimageio-2.1.16.0-rev1-windows TARGETS OpenImageIO PACKAGE_HASH b9f6d6df180ad240b9f17a68c1862c7d8f38234de0e692e83116254b0ee467e5) ly_associate_package(PACKAGE_NAME qt-5.15.2-windows TARGETS Qt PACKAGE_HASH edaf954c647c99727bfd313dab2959803d2df0873914bb96368c3d8286eed6d9) ly_associate_package(PACKAGE_NAME libsamplerate-0.2.1-rev2-windows TARGETS libsamplerate PACKAGE_HASH dcf3c11a96f212a52e2c9241abde5c364ee90b0f32fe6eeb6dcdca01d491829f) -ly_associate_package(PACKAGE_NAME OpenMesh-8.1-rev1-windows TARGETS OpenMesh PACKAGE_HASH 1c1df639358526c368e790dfce40c45cbdfcfb1c9a041b9d7054a8949d88ee77) \ No newline at end of file +ly_associate_package(PACKAGE_NAME OpenMesh-8.1-rev1-windows TARGETS OpenMesh PACKAGE_HASH 1c1df639358526c368e790dfce40c45cbdfcfb1c9a041b9d7054a8949d88ee77) +ly_associate_package(PACKAGE_NAME civetweb-1.8-rev1-windows TARGETS civetweb PACKAGE_HASH 36d0e58a59bcdb4dd70493fb1b177aa0354c945b06c30416348fd326cf323dd4) \ No newline at end of file diff --git a/cmake/3rdParty/Platform/Windows/civetweb_windows.cmake b/cmake/3rdParty/Platform/Windows/civetweb_windows.cmake deleted file mode 100644 index f987f76135..0000000000 --- a/cmake/3rdParty/Platform/Windows/civetweb_windows.cmake +++ /dev/null @@ -1,13 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# - -set(CIVETWEB_LIBS ${BASE_PATH}/lib/Windows/$,debug,release>/civetweb.lib) - diff --git a/cmake/3rdParty/cmake_files.cmake b/cmake/3rdParty/cmake_files.cmake index 46b612df42..0d8e6d4bb1 100644 --- a/cmake/3rdParty/cmake_files.cmake +++ b/cmake/3rdParty/cmake_files.cmake @@ -12,7 +12,6 @@ set(FILES BuiltInPackages.cmake FindAWSGameLiftServerSDK.cmake - Findcivetweb.cmake FindClang.cmake FindDirectXShaderCompiler.cmake Finddyad.cmake diff --git a/scripts/build/package/Platform/3rdParty/package_filelists/3rdParty.json b/scripts/build/package/Platform/3rdParty/package_filelists/3rdParty.json index 26733303a6..cb974afd7e 100644 --- a/scripts/build/package/Platform/3rdParty/package_filelists/3rdParty.json +++ b/scripts/build/package/Platform/3rdParty/package_filelists/3rdParty.json @@ -3,7 +3,6 @@ "3rdParty.txt": "#include", "AWS/AWSNativeSDK/1.7.167-az.2/**": "#include", "AWS/GameLift/3.4.0/**": "#include", - "civetweb/civetweb-20160922-az.2/**": "#include", "CMake/3.19.1/**": "#include", "DirectXShaderCompiler/1.0.1-az.1/**": "#include", "DirectXShaderCompiler/2020.08.07/**": "#include", diff --git a/scripts/build/package/Platform/Windows/package_filelists/3rdParty.json b/scripts/build/package/Platform/Windows/package_filelists/3rdParty.json index c43e11cdf1..75add157b4 100644 --- a/scripts/build/package/Platform/Windows/package_filelists/3rdParty.json +++ b/scripts/build/package/Platform/Windows/package_filelists/3rdParty.json @@ -23,12 +23,6 @@ "bin/windows/**":"#include", "lib/linux/libstdcxx/**":"#include" }, - "civetweb/civetweb-20160922-az.2":{ - "src/**":"#include", - "include/**":"#include", - "lib/Windows/**":"#include", - "*":"#include" - }, "DirectXShaderCompiler/1.0.1-az.1":{ "*":"#include", "src/**":"#include",