Skip to content
On this page

Focused Pragmatic

ZhongKeTuXin

Open Innovate

LSGlobe 优化

一、Viewer 优化

1.调整画面精细度

通过调整画面精细度来进行优化,此值不是越高越好,也不是越低越好,可以先通过 window.devicePixelRatio 获取设备像素比来进行调整,如果本身机器的设备像素比只有 1,那么设置成 2, 相应清晰度也会变高,但是渲染效率急剧下降,如果值再往上调,那么页面将直接卡死,无法操作。如果值往 低了调,假如调节到了 0.9,那么如果不和原始像素比下的图像进行对比,那么很难区分,但是如果再往下了 调,肉眼很清晰的就能看清楚画面质量变差

JavaScript
viewer.resolutionScale = 1.0;

2.关闭阴影

如果需求没有强阴影的要求,那么直接关闭此选项,减少场景渲染的因素

JavaScript
viewer.shadows = false;

二、Scene 优化

1.启用请求渲染模式

开启代表有场景请求时才进行渲染,例如:场景中有流动先效果,如果此参数开启,就代表场景中无请求操作 时,就会停止流动效果,一旦视角发生变动(请求),则又恢复流动,一旦停止,则又处于静态状态

JavaScript
viewer.scene.requestRenderMode = true;

2.调整场景变化的渲染速率

无操作时自动渲染帧率,设为数字会消耗性能,Infinity 为无操作不渲染

JavaScript
viewer.scene.maximumRenderTimeChange = Infinity;

3.仅启用 3D 渲染

如果无二维模式,则开启此选项进行场景优化

JavaScript
viewer.scene.mode = LSGlobe.SceneMode.SCENE3D;

viewer.scene.scene3DOnly = true;

4.关闭地形是否投射光源或者阴影

JavaScript
viewer.scene.terrainShadows = LSGlobe.ShadowMode.DISABLED;

5.启用使用对数深度缓冲区

启用此选项将减少多视锥中的视锥,提高性能

JavaScript
viewer.scene.logarithmicDepthBuffer = true;

6.关闭天空盒

JavaScript
viewer.scene.skyBox.show = false;

7.关闭月亮

JavaScript
viewer.scene.moon.show = false;

8.关闭雾效果

JavaScript
viewer.scene.fog.enabled = false;

9.关闭太阳

JavaScript
viewer.scene.sun.show = false;

10.关闭大气层

JavaScript
viewer.scene.skyAtmosphere.show = false;

三、Globe 优化

1.提高瓦片缓存数量

JavaScript
viewer.scene.globe.tileCacheSize = 1000;

2.提高地形影像最大屏幕空间错误

提高值将提供更好的性能,但降低视觉质量

JavaScript
viewer.scene.globe.maximumScreenSpaceError = 5;

3.关闭地形双面渲染

JavaScript
viewer.scene.globe.backFaceCulling = false;

四、Cesium3DTileset 优化

JavaScript
let tileset = new LSGlobe.Cesium3DTileset({

debugWireframe: true, // 图块的内容渲染为线框,图块太多是肯定很卡的,这个时候可以先考虑优化模型。

backFaceCulling: false, // 关闭模型的双面渲染功能

shadows: LSGlobe.ShadowMode.DISABLED, // 关闭阴影

maximumScreenSpaceError: 1024, // 提升模型最大屏幕空间错误

skipLevelOfDetail: true, // 跳过详细级别

baseScreenSpaceError: 1024,
// 当skipLevelOfDetailis=true,在跳过详细级别之前必须达到的屏幕空间错误

skipScreenSpaceErrorFactor: 16,
// 当skipLevelOfDetailis=true,定义要跳过的最小
// 屏幕空间错误的乘数。例如,如果图块的屏幕空间错误为 100,则不会加载图块,除非它们是叶子或
// 屏幕空间错误<= 100 / skipScreenSpaceErrorFactor

skipLevels: 1, // 当skipLevelOfDetailis=true,定义了加载图块时要跳过的最小级别数。
                // 为 0 时,不跳过任何级别

immediatelyLoadDesiredLevelOfDetail: false,
// 当skipLevelOfDetailis=true,只会下载满足最大屏幕空间错误的图块。忽略跳过因素,只加载所需的图块

loadSiblings: true,
// 当skipLevelOfDetailis=true,确定在遍历期间是否始终下载可见分片的同级。这可能有助于确保当查看器向左/向右旋转时,tile已经可用

cullWithChildrenBounds: true, // 是否使用子边界体积的并集来剔除瓦片

cullRequestsWhileMoving: true,
// 移除请求由于相机移动而在返回时可能未使用的图块。这种优化只适用于静止的瓦片集

cullRequestsWhileMovingMultiplier: 10,
// 移动时用于剔除请求的乘数,值越小能够更快的剔除

preloadWhenHidden: true, // 当隐藏的时候进行预加载

preferLeaves: true,
// 优先加载子节点,这样我们就能最快的看见符合当前视觉精度的块,对于提升大数据以及网络环境不好的前提下有一点点改善意义

maximumMemoryUsage: 2048, // 内存分配变小有利于倾斜摄影数据回收,提升性能体验

progressiveResolutionHeightFraction: 0.5, // 数值偏于 0 能够让初始加载变得模糊

dynamicScreenSpaceErrorDensity: 0.5, // 数值加大,能让周边加载变快

dynamicScreenSpaceErrorFactor: 1, // 增加动态屏幕错误的一个因子

dynamicScreenSpaceError: true, // 是否减少离相机较远的tileset屏幕空间错误

});

五、LSPageLOD 优化

1.关闭阴影

JavaScript
pagelod.shadows = LSGlobe.ShadowMode.DISABLED;

2.Entity 优化

目前 Label 存在自动避让问题,一旦过多会很卡,建议不用,效率不好,直接使用 Billboard 即可

Released under the MIT License.