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
const url = '';
let tileset = await LSGlobe.Cesium3DTileset.fromUrl(url, {
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 即可