diff --git a/CHANGES.md b/CHANGES.md index 537835e9..239cb50c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -9,6 +9,7 @@ ##### Fixes :wrench: - Fixed a bug where `CesiumCreditSystem` did not accurately track the loading progress of images, which could result in missing credits. +- Fixed a bug where `CesiumPointCloudRenderer` could dereference a null `CesiumPointCloudShading` on `Cesium3DTileset`. ## v1.17.0 - 2025-08-01 diff --git a/Runtime/Cesium3DTileset.cs b/Runtime/Cesium3DTileset.cs index 91f7a2bb..8ca3407e 100644 --- a/Runtime/Cesium3DTileset.cs +++ b/Runtime/Cesium3DTileset.cs @@ -617,7 +617,7 @@ public bool ignoreKhrMaterialsUnlit } [SerializeField] - private CesiumPointCloudShading _pointCloudShading; + private CesiumPointCloudShading _pointCloudShading = new CesiumPointCloudShading(); /// /// The CesiumPointCloudShading attached to this tileset. If the tileset diff --git a/Runtime/CesiumPointCloudRenderer.cs b/Runtime/CesiumPointCloudRenderer.cs index 098dc824..72c9f6a7 100644 --- a/Runtime/CesiumPointCloudRenderer.cs +++ b/Runtime/CesiumPointCloudRenderer.cs @@ -131,7 +131,9 @@ private void UpdateAttenuationParameters() 5.0f : this._tileset.maximumScreenSpaceError; - if (this._tileset.pointCloudShading.maximumAttenuation > 0.0f) + CesiumPointCloudShading pointCloudShading = this._tileset.pointCloudShading; + + if (pointCloudShading.maximumAttenuation > 0.0f) { maximumPointSize = this._tileset.pointCloudShading.maximumAttenuation; } @@ -142,8 +144,6 @@ private void UpdateAttenuationParameters() maximumPointSize *= Screen.dpi / 150; } - CesiumPointCloudShading pointCloudShading = this._tileset.pointCloudShading; - float geometricError = this.GetGeometricError(pointCloudShading); geometricError *= pointCloudShading.geometricErrorScale; @@ -227,7 +227,8 @@ private void DrawPointsWithAttenuation() void Update() { - if (this._tileset.pointCloudShading.attenuation) + CesiumPointCloudShading pointCloudShading = this._tileset.pointCloudShading; + if (pointCloudShading != null && pointCloudShading.attenuation) { this.DrawPointsWithAttenuation(); this._meshRenderer.enabled = false;