@@ -314,6 +314,7 @@ template <typename TIndex, class TIndexAccessor>
314314void loadPrimitive (
315315 UnityEngine::MeshData meshData,
316316 CesiumPrimitiveInfo& primitiveInfo,
317+ const CreateModelOptions& options,
317318 const Model& gltf,
318319 const Node& node,
319320 const Mesh& mesh,
@@ -351,7 +352,9 @@ void loadPrimitive(
351352 Model::getSafe (&gltf.materials , primitive.material );
352353
353354 primitiveInfo.isUnlit =
354- pMaterial && pMaterial->hasExtension <ExtensionKhrMaterialsUnlit>();
355+ options.ignoreKhrMaterialUnlit
356+ ? false
357+ : pMaterial && pMaterial->hasExtension <ExtensionKhrMaterialsUnlit>();
355358
356359 bool hasNormals = false ;
357360 bool computeFlatNormals = false ;
@@ -373,6 +376,7 @@ void loadPrimitive(
373376 loadPrimitive<uint32_t >(
374377 meshData,
375378 primitiveInfo,
379+ options,
376380 gltf,
377381 node,
378382 mesh,
@@ -692,7 +696,8 @@ int32_t countPrimitives(const CesiumGltf::Model& model) {
692696
693697void populateMeshDataArray (
694698 MeshDataResult& meshDataResult,
695- TileLoadResult& tileLoadResult) {
699+ TileLoadResult& tileLoadResult,
700+ const CreateModelOptions& options) {
696701 CesiumGltf::Model* pModel =
697702 std::get_if<CesiumGltf::Model>(&tileLoadResult.contentKind );
698703 if (!pModel)
@@ -704,7 +709,7 @@ void populateMeshDataArray(
704709
705710 pModel->forEachPrimitiveInScene (
706711 -1 ,
707- [&meshDataResult, &meshDataInstance, pModel](
712+ [&meshDataResult, &meshDataInstance, pModel, &options ](
708713 const Model& gltf,
709714 const Node& node,
710715 const Mesh& mesh,
@@ -739,6 +744,7 @@ void populateMeshDataArray(
739744 loadPrimitive<std::uint32_t >(
740745 meshData,
741746 primitiveInfo,
747+ options,
742748 gltf,
743749 node,
744750 mesh,
@@ -751,6 +757,7 @@ void populateMeshDataArray(
751757 loadPrimitive<std::uint16_t >(
752758 meshData,
753759 primitiveInfo,
760+ options,
754761 gltf,
755762 node,
756763 mesh,
@@ -768,6 +775,7 @@ void populateMeshDataArray(
768775 loadPrimitive<std::uint16_t >(
769776 meshData,
770777 primitiveInfo,
778+ options,
771779 gltf,
772780 node,
773781 mesh,
@@ -783,6 +791,7 @@ void populateMeshDataArray(
783791 loadPrimitive<std::uint16_t >(
784792 meshData,
785793 primitiveInfo,
794+ options,
786795 gltf,
787796 node,
788797 mesh,
@@ -798,6 +807,7 @@ void populateMeshDataArray(
798807 loadPrimitive<std::uint16_t >(
799808 meshData,
800809 primitiveInfo,
810+ options,
801811 gltf,
802812 node,
803813 mesh,
@@ -813,6 +823,7 @@ void populateMeshDataArray(
813823 loadPrimitive<std::uint16_t >(
814824 meshData,
815825 primitiveInfo,
826+ options,
816827 gltf,
817828 node,
818829 mesh,
@@ -828,6 +839,7 @@ void populateMeshDataArray(
828839 loadPrimitive<std::uint32_t >(
829840 meshData,
830841 primitiveInfo,
842+ options,
831843 gltf,
832844 node,
833845 mesh,
@@ -881,6 +893,7 @@ UnityPrepareRendererResources::prepareInLoadThread(
881893 TileLoadResult&& tileLoadResult,
882894 const glm::dmat4& transform,
883895 const std::any& rendererOptions) {
896+
884897 CesiumGltf::Model* pModel =
885898 std::get_if<CesiumGltf::Model>(&tileLoadResult.contentKind );
886899 if (!pModel)
@@ -901,15 +914,20 @@ UnityPrepareRendererResources::prepareInLoadThread(
901914 return UnityEngine::Mesh::AllocateWritableMeshData (numberOfPrimitives);
902915 })
903916 .thenInWorkerThread (
904- [tileLoadResult = std::move (tileLoadResult)](
917+ [tileLoadResult = std::move (tileLoadResult), rendererOptions ](
905918 UnityEngine::MeshDataArray&& meshDataArray) mutable {
906919 MeshDataResult meshDataResult{std::move (meshDataArray), {}};
907920 // Free the MeshDataArray if something goes wrong.
908921 ScopeGuard sg ([&meshDataResult]() {
909922 meshDataResult.meshDataArray .Dispose ();
910923 });
911924
912- populateMeshDataArray (meshDataResult, tileLoadResult);
925+ const auto * pOptions =
926+ std::any_cast<CreateModelOptions>(&rendererOptions);
927+ if (pOptions)
928+ populateMeshDataArray (meshDataResult, tileLoadResult, *pOptions);
929+ else
930+ populateMeshDataArray (meshDataResult, tileLoadResult, {});
913931
914932 // We're returning the MeshDataArray, so don't free it.
915933 sg.release ();
@@ -928,11 +946,10 @@ UnityPrepareRendererResources::prepareInLoadThread(
928946 std::move (workerResult.tileLoadResult ),
929947 nullptr });
930948 }
931-
932949 bool shouldCreatePhysicsMeshes = false ;
933950 bool shouldShowTilesInHierarchy = false ;
934951
935- DotNet::CesiumForUnity::Cesium3DTileset tilesetComponent =
952+ auto tilesetComponent =
936953 tileset.GetComponent <DotNet::CesiumForUnity::Cesium3DTileset>();
937954 if (tilesetComponent != nullptr ) {
938955 shouldCreatePhysicsMeshes =
@@ -1550,7 +1567,6 @@ void* UnityPrepareRendererResources::prepareInMainThread(
15501567 UnityEngine::Object::Instantiate (opaqueMaterial);
15511568 material.hideFlags (UnityEngine::HideFlags::HideAndDontSave);
15521569 meshRenderer.material (material);
1553-
15541570 if (pMaterial) {
15551571 setGltfMaterialParameterValues (
15561572 gltf,
0 commit comments