動態地形誇大、過傾光線時陰影漸隱效果、增長 KTX2 和 Basis Universal 紋理格式的支持、自定義高程提供器、3D-Tiles 擴展檢查機制git
提供 Windows *臺外邊線無效的提示文檔github
修復舊式 tileset 頂級瓦片無幾何偏差的錯誤、修復相機互操做問題、修復後處理異常和閃屏問題數組
更新部分文字性描述(文檔類)瀏覽器
終結 IE11 的支持:1.83 是最後一個支持 IE11 的版本。緩存
新增 動態地形誇大功能,見 Globe.terrainExaggeration
和 Globe.terrainExaggerationRelativeHeight
。ide
此更新是自 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 紋理格式的支持;
KHR_texture_basisu
擴展的支持Material
模塊中添加了對 KTX2 圖像的支持PixelFormat
和 WebGLConstants
添加了 EXT_texture_compression_bptc
和 WEBGL_compressed_texture_etc
、WEBGL_compressed_texture_astc
擴展KHR_texture_basisu 紋理支持非 2次冪 尺寸的紋理貼圖,可是官方仍然建議使用長寬尺寸同樣的、且爲 2次冪 的紋理貼圖。見 pr 9513
新增自定義高度圖地形提供器,即新 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
函數被移除。