11#include " UnityPrepareRendererResources.h"
22
3+ #include " CesiumCreateModelOptions.h"
34#include " CesiumFeaturesMetadataUtility.h"
45#include " TextureLoader.h"
56#include " TilesetMaterialProperties.h"
7475
7576#include < algorithm>
7677#include < array>
78+ #include < iostream>
7779#include < unordered_map>
7880#include < variant>
7981
@@ -315,7 +317,7 @@ template <typename TIndex, class TIndexAccessor>
315317void loadPrimitive (
316318 UnityEngine::MeshData meshData,
317319 CesiumPrimitiveInfo& primitiveInfo,
318- const TilesetContentOptions& contentOptions ,
320+ const CreateModelOptions& options ,
319321 const Model& gltf,
320322 const Node& node,
321323 const Mesh& mesh,
@@ -352,8 +354,10 @@ void loadPrimitive(
352354 const CesiumGltf::Material* pMaterial =
353355 Model::getSafe (&gltf.materials , primitive.material );
354356
355- primitiveInfo.isUnlit = contentOptions.ignoreKHRMaterialUnlit ? false :
356- pMaterial && pMaterial->hasExtension <ExtensionKhrMaterialsUnlit>();
357+ primitiveInfo.isUnlit =
358+ options.ignoreKHRMaterialUnlit
359+ ? false
360+ : pMaterial && pMaterial->hasExtension <ExtensionKhrMaterialsUnlit>();
357361
358362 bool hasNormals = false ;
359363 bool computeFlatNormals = false ;
@@ -375,7 +379,7 @@ void loadPrimitive(
375379 loadPrimitive<uint32_t >(
376380 meshData,
377381 primitiveInfo,
378- contentOptions ,
382+ options ,
379383 gltf,
380384 node,
381385 mesh,
@@ -696,7 +700,7 @@ int32_t countPrimitives(const CesiumGltf::Model& model) {
696700void populateMeshDataArray (
697701 MeshDataResult& meshDataResult,
698702 TileLoadResult& tileLoadResult,
699- const TilesetContentOptions& contentOptions ) {
703+ const CreateModelOptions& options ) {
700704 CesiumGltf::Model* pModel =
701705 std::get_if<CesiumGltf::Model>(&tileLoadResult.contentKind );
702706 if (!pModel)
@@ -708,7 +712,7 @@ void populateMeshDataArray(
708712
709713 pModel->forEachPrimitiveInScene (
710714 -1 ,
711- [&meshDataResult, &meshDataInstance, pModel, &contentOptions ](
715+ [&meshDataResult, &meshDataInstance, pModel, &options ](
712716 const Model& gltf,
713717 const Node& node,
714718 const Mesh& mesh,
@@ -743,7 +747,7 @@ void populateMeshDataArray(
743747 loadPrimitive<std::uint32_t >(
744748 meshData,
745749 primitiveInfo,
746- contentOptions ,
750+ options ,
747751 gltf,
748752 node,
749753 mesh,
@@ -756,7 +760,7 @@ void populateMeshDataArray(
756760 loadPrimitive<std::uint16_t >(
757761 meshData,
758762 primitiveInfo,
759- contentOptions ,
763+ options ,
760764 gltf,
761765 node,
762766 mesh,
@@ -774,7 +778,7 @@ void populateMeshDataArray(
774778 loadPrimitive<std::uint16_t >(
775779 meshData,
776780 primitiveInfo,
777- contentOptions ,
781+ options ,
778782 gltf,
779783 node,
780784 mesh,
@@ -790,7 +794,7 @@ void populateMeshDataArray(
790794 loadPrimitive<std::uint16_t >(
791795 meshData,
792796 primitiveInfo,
793- contentOptions ,
797+ options ,
794798 gltf,
795799 node,
796800 mesh,
@@ -806,7 +810,7 @@ void populateMeshDataArray(
806810 loadPrimitive<std::uint16_t >(
807811 meshData,
808812 primitiveInfo,
809- contentOptions ,
813+ options ,
810814 gltf,
811815 node,
812816 mesh,
@@ -822,7 +826,7 @@ void populateMeshDataArray(
822826 loadPrimitive<std::uint16_t >(
823827 meshData,
824828 primitiveInfo,
825- contentOptions ,
829+ options ,
826830 gltf,
827831 node,
828832 mesh,
@@ -838,7 +842,7 @@ void populateMeshDataArray(
838842 loadPrimitive<std::uint32_t >(
839843 meshData,
840844 primitiveInfo,
841- contentOptions ,
845+ options ,
842846 gltf,
843847 node,
844848 mesh,
@@ -891,10 +895,8 @@ UnityPrepareRendererResources::prepareInLoadThread(
891895 const CesiumAsync::AsyncSystem& asyncSystem,
892896 TileLoadResult&& tileLoadResult,
893897 const glm::dmat4& transform,
894- const Cesium3DTilesSelection::TilesetContentOptions& contentOptions,
895898 const std::any& rendererOptions) {
896899
897-
898900 CesiumGltf::Model* pModel =
899901 std::get_if<CesiumGltf::Model>(&tileLoadResult.contentKind );
900902 if (!pModel)
@@ -908,22 +910,31 @@ UnityPrepareRendererResources::prepareInLoadThread(
908910 TileLoadResult tileLoadResult;
909911 };
910912
913+ CreateModelOptions options{};
914+
911915 return asyncSystem
912- .runInMainThread ([numberOfPrimitives,tileset = this ->_tilesetGameObject ]() {
916+ .runInMainThread ([numberOfPrimitives,
917+ tileset = this ->_tilesetGameObject ,
918+ &options]() {
919+ const auto tilesetComponent =
920+ tileset.GetComponent <DotNet::CesiumForUnity::Cesium3DTileset>();
921+ if (tilesetComponent != nullptr )
922+ options.ignoreKHRMaterialUnlit =
923+ tilesetComponent.ignoreKHRMaterialsUnlit ();
913924 // Allocate a MeshDataArray for the primitives.
914925 // Unfortunately, this must be done on the main thread.
915926 return UnityEngine::Mesh::AllocateWritableMeshData (numberOfPrimitives);
916927 })
917928 .thenInWorkerThread (
918- [tileLoadResult = std::move (tileLoadResult), &contentOptions](
919- UnityEngine::MeshDataArray&& meshDataArray) mutable {
929+ [tileLoadResult = std::move (tileLoadResult),
930+ &options]( UnityEngine::MeshDataArray&& meshDataArray) mutable {
920931 MeshDataResult meshDataResult{std::move (meshDataArray), {}};
921932 // Free the MeshDataArray if something goes wrong.
922933 ScopeGuard sg ([&meshDataResult]() {
923934 meshDataResult.meshDataArray .Dispose ();
924935 });
925936
926- populateMeshDataArray (meshDataResult, tileLoadResult, contentOptions );
937+ populateMeshDataArray (meshDataResult, tileLoadResult, options );
927938
928939 // We're returning the MeshDataArray, so don't free it.
929940 sg.release ();
@@ -945,7 +956,7 @@ UnityPrepareRendererResources::prepareInLoadThread(
945956 bool shouldCreatePhysicsMeshes = false ;
946957 bool shouldShowTilesInHierarchy = false ;
947958
948- DotNet::CesiumForUnity::Cesium3DTileset tilesetComponent =
959+ auto tilesetComponent =
949960 tileset.GetComponent <DotNet::CesiumForUnity::Cesium3DTileset>();
950961 if (tilesetComponent != nullptr ) {
951962 shouldCreatePhysicsMeshes =
@@ -1572,7 +1583,6 @@ void* UnityPrepareRendererResources::prepareInMainThread(
15721583 materialProperties);
15731584 }
15741585
1575-
15761586 if (primitiveInfo.containsPoints ) {
15771587 CesiumForUnity::CesiumPointCloudRenderer pointCloudRenderer =
15781588 primitiveGameObject
0 commit comments