Cesium 1.91 更新日志 - MSAA 與原生 Promise 來了
不兼容式更新??
- 在下一個版本,也就是 Cesium 1.92,第三方庫
when.js將被原生 Promise API 代替。Cesium.when將被廢棄,且于下個版本移除。關于如何升級,請參考下方個人點評,我轉載了官方指導文檔。 - 修復了當 Scene 沒有渲染時(例如 css 樣式設為 none)相機對象的獲取射線方法(
camera.getPickRay())引發的異常,這個函數會返回 undefined 了。
新增??
- 為 WebGL 2.0 添加 MSAA(多重采樣抗鋸齒)支持。你可以在創建 Viewer 時傳遞
msaaSamples選項,也可以用Scene.msaaSamples屬性控制。 - 現在,glTF 模型默認使用
ModelExperimental架構處理。 - 在
ModelExpertimental架構中支持切換背面裁剪。 - 向 Viewer 和 Scene 類的構造參數中添加
depthPlaneEllipsoidOffset,以解決橢球體平面之下的奇怪渲染問題 - 在
ModelExperimental架構中支持了debugColorTiles - 在
ModelExperimental架構中支持了陰影 - 在所有的矩陣類中添加了
packArray和unpackArray方法 - 為矩陣類添加一些仿射變換幫助函數
- Matrix2:
setScale、setUniformScale、setRotation、getRotation、multiplyByUniformScale - Matrix3:
setScale、setUniformScale、setRotation、multiplyByUniformScale - Matrix4:
setUniformScale、setRotation、getRotation、fromRotation
- Matrix2:
- 為
AxisAlignedBoundBox類添加fromCorners方法 - 為
BoundingSphere類添加fromTransformation方法 - 為
OrientedBoundingBox類添加fromTransformation、computeCOrners、computeTransformation方法 - 為
Rectangle類添加subsection方法 - glTF 的版權信息會標注至版權區域
- 為 3D Tiles 增加一個選項,它可以決定數據集的版權信息是否顯示在屏幕上
- 修改了版權排序規則為出現的頻率
問題修復??
- 修復了使用
ModelExperimental架構的模型在更新其模型矩陣時不會更新范圍球的錯誤 - 修復了在 Safari 瀏覽器中 FeatureID 紋理的偽影
- 修復了使用
ModelExpertimental架構的不透明模型使用半透明著色器,但是未正確渲染的錯誤
個人點評??
① MSAA
MSAA 就不用說了,推薦條件不錯的機器都開,配合 FXAA 提升顯示效果。
const viewer = new Viewer('cesiumContainer', {
msaaSamples: 4 // 1, 2, 4, 8, 默認 1, 越高效果越好, 也越吃性能
})
viewer.postProcessStages.fxaa.enabled = true
二者有什么區別?
- msaa 發生在管線結束前,準確的說是光柵化階段對片元進行多重采樣,輸出到渲染緩沖,然后才繪制到屏幕上
- fxaa 發生在管線結束后的后處理階段,對渲染的結果進行圖像算法處理
MSAA 在 WebGL 2.0 才有,WebGPU 原生就支持。目前 WebGPU 尚不成熟,WebGL 2.0 前陣子才剛剛完全適配所有主流瀏覽器,所以 Cesium 對抗鋸齒效果的 MSAA 功能支持就比較慢。
② 相機獲取射線
獲取射線的函數現在返回值類型發生了改變
const ray = viewer.camera.getPickRay() // Ray 或 undefined
③ ModelExperimental
即實驗中的 Model,是對原有 Model 類的架構升級,這是為了適配更強大的 glTF,以及為下一代 3D Tiles 準備的。
預計 2022 年這個新架構會轉正。
④ 逐漸 ES6
細心的朋友也許觀察到了,源代碼已經把 var 切換至 let/const 聲明變量了。在下一個版本(1.92),CesiumJS 有計劃地將第三方異步庫 when.js 替換為 ES6 原生 Promise 實現。不過,距離源代碼完全使用 async/await 估計還有一段路要走。
關于遷移 Cesium.when,官方是這么說的:
- 移除所有使用了
Cesium.when的代碼 Cesium.defer代替了when.deferPromise.all代替了when.join- 在 Promise 鏈式調用中,
catch代替了otherwise,finally代替了always;如果你用async/await而不是 Promise 鏈,那這里不需要改變
除此之外,還希望官方團隊完成 ES6 的 class、模板字符串的轉換。

浙公網安備 33010602011771號