概覽
動態地形誇大、過傾光線時陰影漸隱效果、增加 KTX2 和 Basis Universal 紋理格式的支持、自定義高程提供器、3D-Tiles 擴展檢查機制
提供 Windows *臺外邊線無效的提示文檔
修復舊式 tileset 頂級瓦片無幾何誤差的錯誤、修復相機互操作問題、修復後處理異常和閃屏問題
更新部分文字性描述(文檔類)
終結 IE11 的支持:1.83 是最後一個支持 IE11 的版本。
破壞式更新 📣
- 不再支持 KTX1 和 Crunch 紋理;使用 ktx2ktx2 升級 ktx1 文件
功能新增 🎉
-
新增 動態地形誇大功能,見
Globe.terrainExaggeration
和Globe.terrainExaggerationRelativeHeight
。此更新是自 2015 年以來的再次優化。前者是誇大的倍數,後者是向上向下誇大的基準高度。
地形誇大的舊 API
Globe.terrainExaggeration
將在 1.85 中移除。原理:存儲每個頂點的 f32 類型的測地法線,並在着色器中將其添加到相對中心,它的效果即使不是 64 位仿真中也是不錯的,官方測試中使用 32 位法線精度最多隻有 10 釐米的誤差值。
float newHeight = (height - relativeHeight) * exaggeration + relativeHeight; positionRTC += geodeticSurfaceNormal * (newHeight - height); // ... 從 positionRTC 座標轉世界座標
當地形誇大數字不是 1.0 時(哪怕是 1.01)才存儲大地表面法線。所以,這是一個消耗內存的行爲。靜態誇大(舊API)是類似於烘焙的效果直接寫入幾何中,所以內存是不變的。在
TerrainMesh
類中,大約會額外佔用 30% 的內存(可參考 Chrome 開發者工具的 內存快照,查看具體類的內存佔用)。 -
新增 ShadowMap 參數:
options.fadingEnabled
來當光源接*地*線時,控制陰影是否具有淡出的效果。此選項默認開啓。
var shadowMap = viewer.shadowMap;
shadowMap.maximumDistance = 100000.0; // 米爲單位
shadowMap.darkness = 0; // 月球上是黑色陰影
// !!!
// 新 API,這個屬性默認是 true,此處顯性設爲 false
shadowMap.fadingEnabled = false;
-
新增對 KTX2 和 Basis Universal 紋理格式的支持;
- 增加對 glTF 格式中
KHR_texture_basisu
擴展的支持 - 添加了對 8 位、16 位浮點和 32 位浮點的 KTX2 鏡面反射環境貼圖的支持
- 在
Material
模塊中添加了對 KTX2 圖像的支持 - 對枚舉模塊
PixelFormat
和WebGLConstants
添加了EXT_texture_compression_bptc
和WEBGL_compressed_texture_etc
、WEBGL_compressed_texture_astc
擴展
KHR_texture_basisu 紋理支持非 2次冪 尺寸的紋理貼圖,但是官方仍然建議使用長寬尺寸一樣的、且爲 2次冪 的紋理貼圖。見 pr 9513
- 增加對 glTF 格式中
-
新增自定義高度圖地形提供器,即新 API
CustomHeightmapTerrainProvider
,從一個回調函數裏獲取高程數據。從下列例子中可看出,只需指定能 返回高度類型數組 的回調函數、寬度、高度三個屬性即可。
var width = 32;
var height = 32;
var viewer = new Cesium.Viewer("cesiumContainer", {
terrainProvider: new Cesium.CustomHeightmapTerrainProvider({
callback: function (x, y, level) {
var buffer = new Float32Array(width * height);
for (var yy = 0; yy < height; yy++) {
for (var xx = 0; xx < width; xx++) {
var v = (y + yy / (height - 1)) / Math.pow(2, level);
var heightValue = 8000 * (Math.sin(4000 * v) * 0.5 + 0.5);
var index = yy * width + xx;
buffer[index] = heightValue;
}
}
return buffer;
},
width: width,
height: height,
}),
});
有趣的是,這個雖然很靈活,但是官方仍然建議使用成熟的 TerrainProvider,因爲這個沒有水面特效。
-
3dTiles 擴展檢查器
若一個 tileset 在 extensionsRequired 數組中指定了一個非官方記錄的擴展,會直接彈出運行時錯誤:
throw new RuntimeError("Unsupported 3D Tiles Extension: " + extension)
參考 API
Cesium3DTileset.checkSupportedExtensions(this._extensions)
,官方參考了ModelUtility.js
模塊中對 glTF 的擴展的擴展檢查。 -
終於!更新了文檔:在 Windows *臺上所有主流瀏覽器將忽略
outlineWidth
屬性(在Windows 的 WebGL 本身不支持外邊線線寬繪製)。涉及到的模塊有:BoxGraphics
CorridorGraphics
CylinderGraphics
EllipseGraphics
EllipsoidGraphics
PlaneGraphics
PolygonGraphics
RectangleGraphics
WallGraphics
PolylineVolumeGraphics
屆時可以查看最新的幫助文檔。
-
爲
KmlTour
,KmlTourFlyTo
, 和KmlTourWait
模塊增加了文檔。爲KmlDataSource
模塊的kmlTours
讀類型屬性添加文檔,並從KmlTourSoundCues
類中移除文檔引用。 -
對 OSM Buildings 以及其他在 glTF 模型中用到了
CESIUM_primitive_outline
擴展的 tileset 提供隱藏邊線的能力。主要是在
Model.js
、Batched3DModel3DTileContent.js
、Cesium3DTileset.js
、Gltf3DTileContent.js
、Instanced3DModel3DTileContent.js
、ModelInstanceCollection.js
、createOsmBuildings.js
、ModelSpec.js
作出了修改,部分模塊加入showOutline
屬性。 (參考 pr) -
對於 glTF 某些特定的紋理和
ImageBitmap
的色彩空間,提供了ignore
選項。
修復🔧
-
修復了一些舊式 tileset 中頂級瓦片因爲沒有幾何誤差而不加載的錯誤
以往有一些 3dtiles 的根屬性中沒有
geometricError
,會導致preprocess3DTileContent.js
模塊判斷錯誤。在 1.83 中已修復爲判斷root
屬性。
-
修復了
WebMapTileServiceImageryProvider
這個模塊中若 URL 使用了子域(SubDomains)後,請求會因爲查詢參數而失敗的情況(詳細問題見:9598) -
修復了
ScreenSpaceCameraController.tilt3DOnTerain
API 中當搖晃相機視角時,會有偏移的小問題。精彩推理見:9562 似乎是國人 -
當地球表面瓦片(GlobeSurfaceTile模塊)請求錯誤時,修復在控制檯中的報錯
-
修復了沙盒示例中 KML 示例的縮略圖丟失
-
修復了
GlobeFS
着色器中當自定義材質的positionToEyeEC
和tangentToEyeMatrix
屬性未設置的錯誤// GlobeFS.glsl void main() { // 其他部分略 materialInput.positionToEyeEC = -v_positionEC; materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(v_positionMC, normalize(v_normalEC)); }
-
修復了
Matrix4
模塊中inverse
和inverseTransformation
中使用 仿射變換 的誤導性文檔,已使用旋轉和*移替代。 -
當 glTF 模型引用了外部圖像資源且沒有被
preferImageBitmap
加載時,它會在主線程的解碼過程中造成幀率暴跌的問題,已經修復;通常 glTF 的圖像資源都是內嵌的,也就是 glb 的形式,這個問題被官方發現並修復。針對的模塊:Scene/GltfImageLoader.js
和Scene/Model.js
-
修復
Cesium3DTileStyle
中關於顏色、顯隱的誤導性else
條件設置。邏輯上,如果沒有給定,那就應該使用默認值 true。主要針對的模塊:Scene/Cesium3DTileBatchTable.js
-
修復後處理禁用後再啓用時發生崩潰的問題,這個修復同時能防止在第一次啓用後處理階段功能時閃屏的問題。原因似乎是如果沒有任何一個後處理階段被標記爲活動的話,緩存的紋理就不會創建 FBO,雖然這些後處理都啓用了。針對模塊:
PostProcessStageCollection.js
功能廢棄⏳
CesiumWidget
,Viewer
, 及Scene
模塊的Scene.terrainExaggeration
、options.terrainExaggeration
將會在 1.85 版本中移除。 使用Globe.terrainExaggeration
API 來代替他們。loadCRN
和loadKTX
函數被移除。- 對 IE11 的支持將在 1.84 正式停止