Still Activley Being Maintained?

Good day,

I am still trying to get more information on this, but it appears that Cesium for O3DE is no longer compatible with the latest version of O3DE. It appears that O3DE version 2305.0 broke compatibility. I am currently trying to evaluate the Cesium O3DE sample and I am unable to compile cleanly. I am currently getting compilation errors and link errors. I have restarted the process multiple times from the instructions within the repository readme files to make sure no mistakes were introduced.

I see from the GitHub repository that Cesium for O3DE has not been updated within the last two years. Is this project still being actively maintained?

Visual Studio: VS 2022 (17.9.6)
O3DE: 2310.2
Cesium O3DE: 1.1.1

Thanks,

Ryan

Good day,

Here is what I have thus far. I was able to build, with some things taken out. I don’t think it is working correctly, as I am unable to see anything from the sample project for viewing.

This appears to be a structure change. Note sure if this is correct.

diff --git a/Code/Source/Cesium/Gltf/GltfModel.cpp b/Code/Source/Cesium/Gltf/GltfModel.cpp
index 34560a0..ff709b3 100644
--- a/Code/Source/Cesium/Gltf/GltfModel.cpp
+++ b/Code/Source/Cesium/Gltf/GltfModel.cpp
@@ -50,7 +50,7 @@ namespace Cesium
                 if (loadPrimitive.m_materialId >= 0 && loadPrimitive.m_materialId < m_materials.size())
                 {
                     auto meshHandle = m_meshFeatureProcessor->AcquireMesh(
-                        AZ::Render::MeshHandleDescriptor{ loadPrimitive.m_modelAsset, false, false, {} },
+                        AZ::Render::MeshHandleDescriptor{ loadPrimitive.m_modelAsset, {}, false, false, false, false },
                         m_materials[loadPrimitive.m_materialId].m_material);
                     m_meshFeatureProcessor->SetTransform(meshHandle, o3deTransform, o3deScale);

I am not sure what this needs to be, as this function was completely removed from the mesh feature processor interface.

diff --git a/Code/Source/Cesium/Gltf/GltfModel.cpp b/Code/Source/Cesium/Gltf/GltfModel.cpp
index 34560a0..ff709b3 100644
--- a/Code/Source/Cesium/Gltf/GltfModel.cpp
+++ b/Code/Source/Cesium/Gltf/GltfModel.cpp
@@ -117,7 +117,8 @@ namespace Cesium
     {
         if (primitive.m_materialIndex >= 0)
         {
-            m_meshFeatureProcessor->SetMaterialAssignmentMap(primitive.m_meshHandle, m_materials[primitive.m_materialIndex].m_material);
+            // what should this be truned into?
+            // m_meshFeatureProcessor->SetMaterialAssignmentMap(primitive.m_meshHandle, m_materials[primitive.m_materialIndex].m_material);
         }
     }

These next ones removed the boolean from the third parameter of the material creator. I am not sure if this boolean was important before or if there is a change needed to actually use it.

diff --git a/Code/Source/Cesium/Gltf/GltfPBRMaterialBuilder.cpp b/Code/Source/Cesium/Gltf/GltfPBRMaterialBuilder.cpp
index 19d5fc4..38c1a55 100644
--- a/Code/Source/Cesium/Gltf/GltfPBRMaterialBuilder.cpp
+++ b/Code/Source/Cesium/Gltf/GltfPBRMaterialBuilder.cpp
@@ -50,7 +50,7 @@ namespace Cesium

         AZ::Data::AssetId materialAssetId = CesiumInterface::Get()->GetCriticalAssetManager().GenerateRandomAssetId();
         AZ::RPI::MaterialAssetCreator materialCreator;
-        materialCreator.Begin(materialAssetId, materialTypeAsset, true);
+        materialCreator.Begin(materialAssetId, materialTypeAsset/*, true*/);
--- a/Code/Source/Cesium/TilesetUtility/GltfRasterMaterialBuilder.cpp
+++ b/Code/Source/Cesium/TilesetUtility/GltfRasterMaterialBuilder.cpp
@@ -50,7 +50,7 @@ namespace Cesium
         AZStd::string prefix = AZStd::string::format("raster%d", rasterLayer);

         AZ::RPI::MaterialAssetCreator materialCreator;
-        materialCreator.Begin(AZ::Uuid::CreateRandom(), parent->GetMaterialTypeAsset(), true);
+        materialCreator.Begin(AZ::Uuid::CreateRandom(), parent->GetMaterialTypeAsset()/*, true*/);

The SetPropertyValue is a templated function, but since I could not find the definition, i assume that the function is explicitly instantiating certain types internally. I assume this one is no longer one of them. I am not sure how to resolve this one or if this is important in why things are not showing up while running the sample application.

--- a/Code/Source/Cesium/TilesetUtility/GltfRasterMaterialBuilder.cpp
+++ b/Code/Source/Cesium/TilesetUtility/GltfRasterMaterialBuilder.cpp
@@ -91,7 +91,8 @@ namespace Cesium
         AZStd::string prefix = AZStd::string::format("raster%d", rasterLayer);

         auto rasterMapIndex = material->FindPropertyIndex(AZ::Name(prefix + ".textureMap"));
-        material->SetPropertyValue(rasterMapIndex, AZ::Data::Asset<AZ::RPI::ImageAsset>());
+        // material->SetPropertyValue is an undefined symbol
+        // material->SetPropertyValue(rasterMapIndex, AZ::Data::Asset<AZ::RPI::ImageAsset>());

This one just required updating an include and using a value of 1.0f to define the duration of the interpolation. 1.0f was the default before the change.

--- a/Code/Source/Editor/Components/OriginShiftEditorComponent.cpp
+++ b/Code/Source/Editor/Components/OriginShiftEditorComponent.cpp
@@ -1,6 +1,7 @@
 #include "Editor/Components/OriginShiftEditorComponent.h"
 #include <Cesium/Math/MathReflect.h>
 #include <AzToolsFramework/API/ToolsApplicationAPI.h>
+#include <AzToolsFramework/UI/PropertyEditor/PropertyEditorAPI.h>
 #include <AtomToolsFramework/Viewport/ModularViewportCameraControllerRequestBus.h>
 #include <Atom/RPI.Public/ViewportContext.h>
 #include <Atom/RPI.Public/ViewportContextBus.h>
@@ -152,7 +153,8 @@ namespace Cesium
                 AtomToolsFramework::ModularViewportCameraControllerRequestBus::Event(
                     viewportContextPtr->GetId(),
                     &AtomToolsFramework::ModularViewportCameraControllerRequestBus::Events::InterpolateToTransform,
-                    AZ::Transform::CreateIdentity());
+                    AZ::Transform::CreateIdentity(),
+                    1.0f);

I am still trying to get something to visualize, but not much is coming up. I do get a lot of errors that the assets could not be compiled. I am not sure if that is due to these changes not being correct or something else. This brings me to my original question of if this is being actively maintained.

Thanks,

Ryan

Hi Ryan

Thanks for trying out Cesium for O3DE, and even more for trying to get it working.

We haven’t been updating Cesium for O3DE as you mentioned and this is mostly to focus on other projects that have been seeing usage and impact from the community.

I’ve recently had conversations for the O3DE Foundation leadership on supporting Cesium for O3DE. While we don’t have any concrete actions yet, there seems to be a resurgence of interest in the plugin. With the interest and help of the O3DE community like yourself, we may be able to bring the builds up to date and working with the latest O3DE versions. As we’re not O3DE experts ourselves, we would greatly appreciate all contributions from the community.

I’d love to learn more about how you plan to use O3DE so that we can support you as best as possible. You can reach out to me directly too (shehzan at cesium.com) if you are unable to share the information on the forum.

Regards
Shehzan Mohammed

Shehzan,

I’d love to learn more about how you plan to use O3DE so that we can support you as best as possible.

I work with interactive simulations. We are currently using OpenSceneGraph for the rendering visuals with 2D and 3D views into the simulation in a desktop application. Much of the world / terrain is statically generated for both the 2D and 3D views. I am currently researching options for combining the 2D and 3D into a single view using a geocentric visual model that is dynamically generated from source material. O3DE and Cesium sounds like a good fit for a starting point. We do have other requirements for our application, but I am just looking at the basics of what these two pieces of software can do and how easy it will be to possibly integrate them behind a software library we currently develop today. My goal at the end of the exploration is to create a Qt application with O3DE running inside of that with Cesium generating the world and the application adding simulation elements into that world.

As we’re not O3DE experts ourselves, we would greatly appreciate all contributions from the community.

I am at the same level of experience with O3DE. I was hoping to use the sample Cesium application to try and get a better footing with O3DE and Cesium for the purposes of my work. I believe I will have to use the older version just for evaluation purposes.

Thanks,

Ryan