Skip to content

Commit ade9bb2

Browse files
authored
Merge pull request #1683 from GhisBntly/advviz-gltf-tuner
Access to glTF tuner and tuned tiles versions in the Unreal plugin
2 parents 4d87529 + 7c00bac commit ade9bb2

File tree

3 files changed

+63
-11
lines changed

3 files changed

+63
-11
lines changed

CHANGES.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Change Log {#changes}
22

3+
### ? - ?
4+
5+
##### Additions :tada:
6+
7+
- Added an optional glTF model post-processing stage after the tile loading step, before the tile can be displayed.
8+
39
### v2.21.1 - 2025-12-01
410

511
This is the last release of Cesium for Unreal that will support Unreal Engine v5.4. Future versions will require Unreal Engine v5.5+.

Source/CesiumRuntime/Private/Cesium3DTileset.cpp

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include "Camera/CameraTypes.h"
77
#include "Camera/PlayerCameraManager.h"
88
#include "Cesium3DTilesSelection/EllipsoidTilesetLoader.h"
9+
#include "Cesium3DTilesSelection/GltfModifier.h"
910
#include "Cesium3DTilesSelection/Tile.h"
1011
#include "Cesium3DTilesSelection/TilesetLoadFailureDetails.h"
1112
#include "Cesium3DTilesSelection/TilesetOptions.h"
@@ -86,23 +87,32 @@ ACesium3DTileset::ACesium3DTileset()
8687
_pStateDebug(nullptr),
8788
#endif
8889

90+
_featuresMetadataDescription(),
91+
_metadataDescription_DEPRECATED(),
92+
8993
_lastTilesRendered(0),
9094
_lastWorkerThreadTileLoadQueueLength(0),
9195
_lastMainThreadTileLoadQueueLength(0),
9296

9397
_lastTilesVisited(0),
98+
_lastCulledTilesVisited(0),
9499
_lastTilesCulled(0),
95100
_lastTilesOccluded(0),
96101
_lastTilesWaitingForOcclusionResults(0),
97102
_lastMaxDepthVisited(0),
98103

99-
_captureMovieMode{false},
100-
_beforeMoviePreloadAncestors{PreloadAncestors},
101-
_beforeMoviePreloadSiblings{PreloadSiblings},
102-
_beforeMovieLoadingDescendantLimit{LoadingDescendantLimit},
103-
_beforeMovieUseLodTransitions{true},
104+
_captureMovieMode(false),
105+
_beforeMoviePreloadAncestors(PreloadAncestors),
106+
_beforeMoviePreloadSiblings(PreloadSiblings),
107+
_beforeMovieLoadingDescendantLimit(LoadingDescendantLimit),
108+
_beforeMovieUseLodTransitions(true),
109+
110+
_scaleUsingDPI(false),
111+
_tilesToHideNextFrame(),
104112

105-
_tilesetsBeingDestroyed(0) {
113+
_tilesetsBeingDestroyed(0),
114+
_pGltfModifier(nullptr),
115+
_pLifecycleEventReceiver(nullptr) {
106116
PrimaryActorTick.bCanEverTick = true;
107117
PrimaryActorTick.TickGroup = ETickingGroup::TG_PostUpdateWork;
108118

@@ -996,7 +1006,9 @@ void ACesium3DTileset::LoadTileset() {
9961006
->EnableExperimentalOcclusionCullingFeature &&
9971007
this->EnableOcclusionCulling && this->BoundingVolumePoolComponent)
9981008
? this->BoundingVolumePoolComponent->getPool()
999-
: nullptr};
1009+
: nullptr,
1010+
Cesium3DTilesSelection::TilesetSharedAssetSystem::getDefault(),
1011+
this->_pGltfModifier};
10001012

10011013
this->_startTime = std::chrono::high_resolution_clock::now();
10021014

@@ -2320,15 +2332,28 @@ void ACesium3DTileset::RuntimeSettingsChanged(
23202332
}
23212333
#endif
23222334

2335+
const std::shared_ptr<Cesium3DTilesSelection::GltfModifier>&
2336+
ACesium3DTileset::GetGltfModifier() const {
2337+
return this->_pGltfModifier;
2338+
}
2339+
2340+
void ACesium3DTileset::SetGltfModifier(
2341+
const std::shared_ptr<Cesium3DTilesSelection::GltfModifier>& Modifier) {
2342+
if (Modifier != this->_pGltfModifier) {
2343+
this->_pGltfModifier = Modifier;
2344+
this->RefreshTileset();
2345+
}
2346+
}
2347+
23232348
ICesium3DTilesetLifecycleEventReceiver*
23242349
ACesium3DTileset::GetLifecycleEventReceiver() {
23252350
return Cast<ICesium3DTilesetLifecycleEventReceiver>(
23262351
this->_pLifecycleEventReceiver);
23272352
}
23282353

2329-
void ACesium3DTileset::SetLifecycleEventReceiver(UObject* InEventReceiver) {
2354+
void ACesium3DTileset::SetLifecycleEventReceiver(UObject* EventReceiver) {
23302355
if (UKismetSystemLibrary::DoesImplementInterface(
2331-
InEventReceiver,
2356+
EventReceiver,
23322357
UCesium3DTilesetLifecycleEventReceiver::StaticClass()))
2333-
this->_pLifecycleEventReceiver = InEventReceiver;
2358+
this->_pLifecycleEventReceiver = EventReceiver;
23342359
}

Source/CesiumRuntime/Public/Cesium3DTileset.h

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ struct FCesiumCamera;
4141
class ICesium3DTilesetLifecycleEventReceiver;
4242

4343
namespace Cesium3DTilesSelection {
44+
class GltfModifier;
4445
class Tileset;
4546
class TilesetView;
4647
class TileOcclusionRendererProxyPool;
@@ -1259,6 +1260,24 @@ class CESIUMRUNTIME_API ACesium3DTileset : public AActor {
12591260
*/
12601261
void UpdateTransformFromCesium();
12611262

1263+
/**
1264+
* Gets the glTF modifier, an optional extension class that can edit
1265+
* each tile's glTF model after it has been loaded, before it can be
1266+
* displayed.
1267+
*/
1268+
const std::shared_ptr<Cesium3DTilesSelection::GltfModifier>&
1269+
GetGltfModifier() const;
1270+
1271+
/**
1272+
* Sets the glTF modifier, an optional extension class that can edit
1273+
* each tile's glTF model after it has been loaded, before it can be
1274+
* displayed.
1275+
*
1276+
* Setting this property will call @ref RefreshTileset.
1277+
*/
1278+
void SetGltfModifier(
1279+
const std::shared_ptr<Cesium3DTilesSelection::GltfModifier>& Modifier);
1280+
12621281
/**
12631282
* Gets the optional receiver of events related to the lifecycle of tiles
12641283
* created by this tileset.
@@ -1274,7 +1293,7 @@ class CESIUMRUNTIME_API ACesium3DTileset : public AActor {
12741293
* ICesium3DTilesetLifecycleEventReceiver, otherwise it will be as if nullptr
12751294
* were passed.
12761295
*/
1277-
void SetLifecycleEventReceiver(UObject* InEventReceiver);
1296+
void SetLifecycleEventReceiver(UObject* EventReceiver);
12781297

12791298
private:
12801299
/**
@@ -1389,6 +1408,8 @@ class CESIUMRUNTIME_API ACesium3DTileset : public AActor {
13891408

13901409
int32 _tilesetsBeingDestroyed;
13911410

1411+
std::shared_ptr<Cesium3DTilesSelection::GltfModifier> _pGltfModifier;
1412+
13921413
// Make this visible to the garbage collector, but don't save/load/copy it.
13931414
// Use UObject instead of TScriptInterface as suggested by
13941415
// https://www.stevestreeting.com/2020/11/02/ue4-c-interfaces-hints-n-tips/,

0 commit comments

Comments
 (0)