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

Hi Ryan

Thanks for the input, this is definitely useful.

There are a few folks trying to update Cesium for O3DE who we’re talking to, but I can’t confirm their active effort on this. I’ll definitely keep you in the loop.

If I may ask, why O3DE? Have you explored other 3D engines too?

Shehzan

If I may ask, why O3DE?

We are just at the beginnings of this adventure. O3DE is supposed to be a free alternative to some of the major competitors.

Have you explored other 3D engines too?

I believe we will also be exploring Unreal sometime next year.

Thanks,

Ryan

Good day,

So I was able to build O3DE at tag 2210.0 with Visual Studio 2019.

I’ve pulled down cesium-o3de (v1.1.1) and cesium-o3de-sample (v1.0.0), but I am still having no luck with what I would have expected to be a simple build and execute.

The first thing I am running into is the asset builder is still unable to build many of the assets from cesium-o3de and the cesium-o3de-sample. I am still not sure if these are required or not for the sample project load correctly.

The second thing I am running into is when I log into Cesium ION and try to add an asset from that (i.e. Cesium World Terrain + Bing Maps Aerial imagery), I get an informational prompt indicating that it “could not load entity DOM from the owning template’s DOM.” Immediately after I select the OK button, the O3DE editor crashes.

I am still working my way through to get a basic understanding of the Cesium and O3DE, but I would be grateful if someone might be able to help identify errors in this process.

Thanks,

Ryan

Good day,

I have managed to get the sample sets from Cesium ION to finally load within O3DE using the versions specified above. There is no texture information present when viewing the sample sets, but the terrain and buildings are loading.

Thanks,

Ryan