Skip to content

Commit 42ce4cc

Browse files
committed
Unrolled changes to cesium-native. Added CreateModelOptions struct to contain lighting and other misc features needed by worker threads when creating a model.
1 parent f729277 commit 42ce4cc

4 files changed

Lines changed: 56 additions & 23 deletions

File tree

native~/Runtime/src/Cesium3DTilesetImpl.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -608,7 +608,6 @@ void Cesium3DTilesetImpl::LoadTileset(
608608

609609
TilesetContentOptions contentOptions{};
610610
contentOptions.generateMissingNormalsSmooth = tileset.generateSmoothNormals();
611-
contentOptions.ignoreKHRMaterialUnlit = tileset.ignoreKHRMaterialsUnlit();
612611

613612
CesiumGltf::SupportedGpuCompressedPixelFormats supportedFormats;
614613
supportedFormats.ETC2_RGBA = UnityEngine::SystemInfo::IsFormatSupported(
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#pragma once
2+
3+
#include <DotNet/CesiumForUnity/Cesium3DTileset.h>
4+
5+
namespace CesiumForUnityNative {
6+
struct CreateModelOptions {
7+
/**
8+
* Whether to ignore the KHR_materials_unlit extension in the model. If this
9+
* is true and the extension is present, then flat normals will be generated
10+
* for the model as it loads.
11+
*/
12+
bool ignoreKHRMaterialUnlit = false;
13+
14+
CreateModelOptions() = default;
15+
CreateModelOptions(
16+
const DotNet::CesiumForUnity::Cesium3DTileset& tilesetComponent)
17+
: ignoreKHRMaterialUnlit(tilesetComponent.ignoreKHRMaterialsUnlit()) {}
18+
19+
CreateModelOptions operator=(const CreateModelOptions& other) {
20+
this->ignoreKHRMaterialUnlit = other.ignoreKHRMaterialUnlit;
21+
22+
return *this;
23+
}
24+
};
25+
} // namespace CesiumForUnityNative

native~/Runtime/src/UnityPrepareRendererResources.cpp

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "UnityPrepareRendererResources.h"
22

3+
#include "CesiumCreateModelOptions.h"
34
#include "CesiumFeaturesMetadataUtility.h"
45
#include "TextureLoader.h"
56
#include "TilesetMaterialProperties.h"
@@ -74,6 +75,7 @@
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>
315317
void 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) {
696700
void 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

native~/Runtime/src/UnityPrepareRendererResources.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@ class UnityPrepareRendererResources
7272
const CesiumAsync::AsyncSystem& asyncSystem,
7373
Cesium3DTilesSelection::TileLoadResult&& tileLoadResult,
7474
const glm::dmat4& transform,
75-
const Cesium3DTilesSelection::TilesetContentOptions& contentOptions,
7675
const std::any& rendererOptions) override;
7776

7877
virtual void* prepareInMainThread(

0 commit comments

Comments
 (0)