@cesium/engine 9.1.0 → 10.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (255) hide show
  1. package/Build/ThirdParty/Workers/pako_deflate.min.js +108 -210
  2. package/Build/ThirdParty/Workers/pako_inflate.min.js +466 -568
  3. package/Build/ThirdParty/Workers/z-worker-pako.js +54 -104
  4. package/Build/Workers/{chunk-TMMOULW3.js → chunk-2J3JKXCP.js} +5 -5
  5. package/Build/Workers/{chunk-ZDP32RQI.js → chunk-3WUV74WM.js} +95 -155
  6. package/Build/Workers/{chunk-FOZQIHZK.js → chunk-4BAE4PWO.js} +6 -6
  7. package/Build/Workers/{chunk-CYAJYEKW.js → chunk-4MSUJ4I7.js} +8 -8
  8. package/Build/Workers/{chunk-KPY4F4BW.js → chunk-4YSNMHZ4.js} +6 -6
  9. package/Build/Workers/{chunk-66E3H2KU.js → chunk-5S7OLEPK.js} +12 -12
  10. package/Build/Workers/{chunk-4AJGCQFX.js → chunk-7XGC6YB2.js} +14 -14
  11. package/Build/Workers/{chunk-BDUJXBVF.js → chunk-AA4GZKOT.js} +3 -5
  12. package/Build/Workers/{chunk-7LPEGKOF.js → chunk-AD5HBJ2F.js} +11 -8
  13. package/Build/Workers/{chunk-XHLDDE65.js → chunk-AVI4IUWC.js} +11 -11
  14. package/Build/Workers/{chunk-MWYZ64MH.js → chunk-BCL4PHHT.js} +10 -10
  15. package/Build/Workers/{chunk-PWF3YJJ5.js → chunk-BDFNKFOE.js} +13 -13
  16. package/Build/Workers/{chunk-7VZNXIKG.js → chunk-BJF5LOWE.js} +7 -7
  17. package/Build/Workers/{chunk-3S2MFY4B.js → chunk-C2CGMAIU.js} +13 -13
  18. package/Build/Workers/{chunk-UAJEGIWA.js → chunk-COYFZ5VA.js} +6 -6
  19. package/Build/Workers/{chunk-ZWPIM77Q.js → chunk-DGS5QNIO.js} +13 -13
  20. package/Build/Workers/{chunk-V7JB576Q.js → chunk-DKVHRNFY.js} +5 -5
  21. package/Build/Workers/{chunk-NI2R52QD.js → chunk-DOXCPOG4.js} +11 -9
  22. package/Build/Workers/{chunk-XWML5Y7N.js → chunk-FXIHSF7O.js} +9 -9
  23. package/Build/Workers/{chunk-LW7WGHEU.js → chunk-G3YR53LY.js} +13 -13
  24. package/Build/Workers/{chunk-34DGOKCO.js → chunk-GR3CDLCP.js} +7 -7
  25. package/Build/Workers/{chunk-AOIKO5Y7.js → chunk-GRAT5GE7.js} +5 -5
  26. package/Build/Workers/{chunk-AOFMPKUB.js → chunk-I2RC4XVN.js} +4 -4
  27. package/Build/Workers/{chunk-PK7TEP3J.js → chunk-JYAHOGGL.js} +15 -15
  28. package/Build/Workers/{chunk-4KIUON73.js → chunk-KUN2ZA5X.js} +4 -4
  29. package/Build/Workers/{chunk-POLFRINT.js → chunk-L6RTJ3RE.js} +14 -14
  30. package/Build/Workers/{chunk-LVJCR7DH.js → chunk-LCLJJ2MZ.js} +18 -18
  31. package/Build/Workers/{chunk-3RZK5NNV.js → chunk-LEABCTLP.js} +4 -4
  32. package/Build/Workers/{chunk-QKF7XXEQ.js → chunk-MDHQR3ZS.js} +10 -8
  33. package/Build/Workers/{chunk-4PHPQRSH.js → chunk-MSKXMXJI.js} +5 -6
  34. package/Build/Workers/{chunk-GIFJ77E4.js → chunk-NTXTUNEF.js} +4 -4
  35. package/Build/Workers/{chunk-I5TDPPC4.js → chunk-O3JCMSS3.js} +17 -17
  36. package/Build/Workers/{chunk-PEABJLCK.js → chunk-OOK53QUQ.js} +1 -1
  37. package/Build/Workers/{chunk-PS6AEMBR.js → chunk-OORVMGDU.js} +7 -7
  38. package/Build/Workers/{chunk-JI2445T5.js → chunk-PCP4YQST.js} +11 -11
  39. package/Build/Workers/{chunk-C5CE4OG6.js → chunk-PYHLO636.js} +42 -13
  40. package/Build/Workers/{chunk-S4XDCPKD.js → chunk-Q55ECN3Y.js} +1 -1
  41. package/Build/Workers/{chunk-WWP3I7R5.js → chunk-QD4KM3GO.js} +5 -5
  42. package/Build/Workers/{chunk-YLZTCEBJ.js → chunk-QMLTCCYG.js} +1 -1
  43. package/Build/Workers/{chunk-IBXGK4WV.js → chunk-QX5XS4LC.js} +2 -2
  44. package/Build/Workers/{chunk-RL73GOEF.js → chunk-R6B7UCQB.js} +2 -2
  45. package/Build/Workers/{chunk-RR7EOKGZ.js → chunk-RJYML24O.js} +48 -85
  46. package/Build/Workers/{chunk-U4IMCOF5.js → chunk-S3PI2KFM.js} +2 -2
  47. package/Build/Workers/{chunk-6HCAQOVK.js → chunk-STBBMQGG.js} +6 -6
  48. package/Build/Workers/{chunk-CE6GTZ4I.js → chunk-SYCPRK3D.js} +10 -10
  49. package/Build/Workers/{chunk-WFICTTOE.js → chunk-T77JILCU.js} +2 -2
  50. package/Build/Workers/{chunk-ZC4AGBZK.js → chunk-TO2PVHKI.js} +2 -2
  51. package/Build/Workers/{chunk-UCPPWV64.js → chunk-VE7BFUIX.js} +1 -1
  52. package/Build/Workers/{chunk-2CSEEWHN.js → chunk-VFBNELXB.js} +7 -7
  53. package/Build/Workers/{chunk-A6NCZSL3.js → chunk-VO3ACQB2.js} +19 -19
  54. package/Build/Workers/{chunk-WEGCQ5DY.js → chunk-X23FRWHJ.js} +6 -6
  55. package/Build/Workers/{chunk-G7CJQKKD.js → chunk-XD445VDH.js} +7 -7
  56. package/Build/Workers/combineGeometry.js +22 -22
  57. package/Build/Workers/createBoxGeometry.js +16 -16
  58. package/Build/Workers/createBoxOutlineGeometry.js +14 -14
  59. package/Build/Workers/createCircleGeometry.js +29 -25
  60. package/Build/Workers/createCircleOutlineGeometry.js +17 -17
  61. package/Build/Workers/createCoplanarPolygonGeometry.js +32 -32
  62. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +29 -29
  63. package/Build/Workers/createCorridorGeometry.js +29 -29
  64. package/Build/Workers/createCorridorOutlineGeometry.js +27 -27
  65. package/Build/Workers/createCylinderGeometry.js +18 -18
  66. package/Build/Workers/createCylinderOutlineGeometry.js +16 -16
  67. package/Build/Workers/createEllipseGeometry.js +24 -24
  68. package/Build/Workers/createEllipseOutlineGeometry.js +17 -17
  69. package/Build/Workers/createEllipsoidGeometry.js +17 -17
  70. package/Build/Workers/createEllipsoidOutlineGeometry.js +16 -16
  71. package/Build/Workers/createFrustumGeometry.js +16 -16
  72. package/Build/Workers/createFrustumOutlineGeometry.js +16 -16
  73. package/Build/Workers/createGeometry.js +22 -22
  74. package/Build/Workers/createGroundPolylineGeometry.js +24 -24
  75. package/Build/Workers/createPlaneGeometry.js +14 -14
  76. package/Build/Workers/createPlaneOutlineGeometry.js +13 -13
  77. package/Build/Workers/createPolygonGeometry.js +32 -32
  78. package/Build/Workers/createPolygonOutlineGeometry.js +29 -29
  79. package/Build/Workers/createPolylineGeometry.js +24 -24
  80. package/Build/Workers/createPolylineVolumeGeometry.js +30 -30
  81. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +26 -26
  82. package/Build/Workers/createRectangleGeometry.js +27 -27
  83. package/Build/Workers/createRectangleOutlineGeometry.js +19 -19
  84. package/Build/Workers/createSimplePolylineGeometry.js +22 -22
  85. package/Build/Workers/createSphereGeometry.js +17 -17
  86. package/Build/Workers/createSphereOutlineGeometry.js +16 -16
  87. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  88. package/Build/Workers/createVectorTileClampedPolylines.js +13 -13
  89. package/Build/Workers/createVectorTileGeometries.js +22 -22
  90. package/Build/Workers/createVectorTilePoints.js +12 -12
  91. package/Build/Workers/createVectorTilePolygons.js +20 -20
  92. package/Build/Workers/createVectorTilePolylines.js +13 -13
  93. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +20 -20
  94. package/Build/Workers/createVerticesFromHeightmap.js +21 -21
  95. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +17 -17
  96. package/Build/Workers/createWallGeometry.js +23 -23
  97. package/Build/Workers/createWallOutlineGeometry.js +22 -22
  98. package/Build/Workers/decodeDraco.js +11 -11
  99. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +12 -19
  100. package/Build/Workers/decodeI3S.js +10 -10
  101. package/Build/Workers/transcodeKTX2.js +43 -79
  102. package/Build/Workers/transferTypedArrayTest.js +1 -1
  103. package/Build/Workers/upsampleQuantizedTerrainMesh.js +20 -20
  104. package/Source/Core/ApproximateTerrainHeights.js +4 -4
  105. package/Source/Core/ArcGISTiledElevationTerrainProvider.js +12 -8
  106. package/Source/Core/BoundingRectangle.js +2 -0
  107. package/Source/Core/BoundingSphere.js +4 -2
  108. package/Source/Core/Cartesian3.js +13 -10
  109. package/Source/Core/Cartographic.js +11 -8
  110. package/Source/Core/CesiumTerrainProvider.js +3 -2
  111. package/Source/Core/CircleGeometry.js +6 -2
  112. package/Source/Core/CircleOutlineGeometry.js +1 -1
  113. package/Source/Core/CoplanarPolygonGeometry.js +3 -3
  114. package/Source/Core/CorridorGeometry.js +4 -4
  115. package/Source/Core/CorridorOutlineGeometry.js +2 -2
  116. package/Source/Core/Credit.js +3 -2
  117. package/Source/Core/CustomHeightmapTerrainProvider.js +17 -3
  118. package/Source/Core/EllipseGeometry.js +4 -4
  119. package/Source/Core/EllipseOutlineGeometry.js +2 -2
  120. package/Source/Core/Ellipsoid.js +34 -0
  121. package/Source/Core/EllipsoidGeodesic.js +2 -2
  122. package/Source/Core/EllipsoidRhumbLine.js +4 -4
  123. package/Source/Core/EllipsoidTangentPlane.js +3 -3
  124. package/Source/Core/EllipsoidTerrainProvider.js +3 -3
  125. package/Source/Core/GeographicProjection.js +4 -3
  126. package/Source/Core/GeographicTilingScheme.js +3 -3
  127. package/Source/Core/GeometryPipeline.js +2 -2
  128. package/Source/Core/GoogleEarthEnterpriseTerrainProvider.js +1 -1
  129. package/Source/Core/GoogleMaps.js +1 -1
  130. package/Source/Core/GroundPolylineGeometry.js +1 -1
  131. package/Source/Core/HeightmapTessellator.js +2 -2
  132. package/Source/Core/Ion.js +1 -1
  133. package/Source/Core/Math.js +0 -5
  134. package/Source/Core/Occluder.js +3 -3
  135. package/Source/Core/OrientedBoundingBox.js +2 -2
  136. package/Source/Core/PolygonGeometry.js +4 -4
  137. package/Source/Core/PolygonGeometryLibrary.js +1 -1
  138. package/Source/Core/PolygonOutlineGeometry.js +3 -3
  139. package/Source/Core/PolygonPipeline.js +2 -2
  140. package/Source/Core/PolylineGeometry.js +2 -2
  141. package/Source/Core/PolylinePipeline.js +6 -6
  142. package/Source/Core/PolylineVolumeGeometry.js +2 -2
  143. package/Source/Core/PolylineVolumeOutlineGeometry.js +2 -2
  144. package/Source/Core/Rectangle.js +6 -6
  145. package/Source/Core/RectangleGeometry.js +6 -6
  146. package/Source/Core/RectangleGeometryLibrary.js +3 -0
  147. package/Source/Core/RectangleOutlineGeometry.js +2 -2
  148. package/Source/Core/Simon1994PlanetaryPositions.js +3 -2
  149. package/Source/Core/SimplePolylineGeometry.js +2 -2
  150. package/Source/Core/Stereographic.js +2 -2
  151. package/Source/Core/TaskProcessor.js +19 -3
  152. package/Source/Core/Transforms.js +17 -17
  153. package/Source/Core/VRTheWorldTerrainProvider.js +2 -2
  154. package/Source/Core/WallGeometry.js +3 -3
  155. package/Source/Core/WallOutlineGeometry.js +3 -3
  156. package/Source/Core/WebMercatorTilingScheme.js +3 -3
  157. package/Source/Core/createWorldTerrainAsync.js +2 -0
  158. package/Source/Core/sampleTerrain.js +3 -3
  159. package/Source/DataSources/BoxGeometryUpdater.js +2 -2
  160. package/Source/DataSources/CylinderGeometryUpdater.js +2 -2
  161. package/Source/DataSources/CzmlDataSource.js +8 -8
  162. package/Source/DataSources/EllipsoidGeometryUpdater.js +3 -3
  163. package/Source/DataSources/EntityCluster.js +1 -1
  164. package/Source/DataSources/EntityView.js +2 -2
  165. package/Source/DataSources/KmlDataSource.js +4 -4
  166. package/Source/DataSources/ModelVisualizer.js +1 -2
  167. package/Source/DataSources/PolygonGeometryUpdater.js +1 -1
  168. package/Source/DataSources/PolylineGeometryUpdater.js +3 -2
  169. package/Source/DataSources/RectangleGeometryUpdater.js +1 -1
  170. package/Source/DataSources/ScaledPositionProperty.js +2 -2
  171. package/Source/DataSources/TerrainOffsetProperty.js +3 -7
  172. package/Source/DataSources/VelocityOrientationProperty.js +2 -2
  173. package/Source/DataSources/exportKml.js +2 -2
  174. package/Source/Renderer/UniformState.js +1 -1
  175. package/Source/Scene/ArcGisMapServerImageryProvider.js +2 -2
  176. package/Source/Scene/ArcGisMapService.js +1 -1
  177. package/Source/Scene/Billboard.js +8 -6
  178. package/Source/Scene/BingMapsImageryProvider.js +1 -1
  179. package/Source/Scene/Camera.js +16 -10
  180. package/Source/Scene/Cesium3DTileset.js +1 -1
  181. package/Source/Scene/ClippingPolygon.js +2 -2
  182. package/Source/Scene/ClippingPolygonCollection.js +1 -1
  183. package/Source/Scene/CreditDisplay.js +94 -104
  184. package/Source/Scene/Globe.js +16 -13
  185. package/Source/Scene/GltfLoader.js +458 -435
  186. package/Source/Scene/GltfLoaderUtil.js +5 -16
  187. package/Source/Scene/GltfPipeline/forEachTextureInMaterial.js +23 -7
  188. package/Source/Scene/GltfStructuralMetadataLoader.js +11 -9
  189. package/Source/Scene/GoogleEarthEnterpriseImageryProvider.js +1 -1
  190. package/Source/Scene/GoogleEarthEnterpriseMapsProvider.js +1 -1
  191. package/Source/Scene/GridImageryProvider.js +2 -2
  192. package/Source/Scene/ImageryLayerCollection.js +2 -2
  193. package/Source/Scene/Label.js +1 -1
  194. package/Source/Scene/MapboxImageryProvider.js +1 -1
  195. package/Source/Scene/MapboxStyleImageryProvider.js +1 -1
  196. package/Source/Scene/MetadataSemantic.js +4 -4
  197. package/Source/Scene/Model/AlphaPipelineStage.js +1 -1
  198. package/Source/Scene/Model/GeometryPipelineStage.js +15 -43
  199. package/Source/Scene/Model/ImageBasedLightingPipelineStage.js +7 -0
  200. package/Source/Scene/Model/InstancingPipelineStage.js +3 -3
  201. package/Source/Scene/Model/LightingPipelineStage.js +2 -4
  202. package/Source/Scene/Model/MaterialPipelineStage.js +395 -29
  203. package/Source/Scene/Model/Model.js +15 -7
  204. package/Source/Scene/Model/ModelSceneGraph.js +1 -1
  205. package/Source/Scene/Model/ModelUtility.js +3 -0
  206. package/Source/Scene/Model/SceneMode2DPipelineStage.js +3 -3
  207. package/Source/Scene/Model/VerticalExaggerationPipelineStage.js +4 -6
  208. package/Source/Scene/Model/pickModel.js +2 -2
  209. package/Source/Scene/ModelComponents.js +178 -1
  210. package/Source/Scene/PickDepth.js +23 -15
  211. package/Source/Scene/Picking.js +4 -13
  212. package/Source/Scene/PointPrimitive.js +5 -2
  213. package/Source/Scene/ResourceCache.js +41 -50
  214. package/Source/Scene/ResourceCacheKey.js +41 -53
  215. package/Source/Scene/Scene.js +39 -31
  216. package/Source/Scene/SceneTransforms.js +78 -20
  217. package/Source/Scene/SceneTransitioner.js +2 -2
  218. package/Source/Scene/ScreenSpaceCameraController.js +29 -19
  219. package/Source/Scene/SkyBox.js +26 -0
  220. package/Source/Scene/Sun.js +1 -1
  221. package/Source/Shaders/Builtin/CzmBuiltins.js +4 -10
  222. package/Source/Shaders/Builtin/Functions/ellipsoidTextureCoordinates.glsl +10 -0
  223. package/Source/Shaders/Builtin/Functions/{ellipsoidWgs84TextureCoordinates.js → ellipsoidTextureCoordinates.js} +3 -3
  224. package/Source/Shaders/Builtin/Functions/maximumComponent.glsl +21 -0
  225. package/Source/Shaders/Builtin/Functions/maximumComponent.js +23 -0
  226. package/Source/Shaders/Builtin/Functions/pbrLighting.glsl +108 -44
  227. package/Source/Shaders/Builtin/Functions/pbrLighting.js +108 -44
  228. package/Source/Shaders/Builtin/Structs/materialInput.glsl +1 -1
  229. package/Source/Shaders/Builtin/Structs/materialInput.js +1 -1
  230. package/Source/Shaders/Builtin/Structs/modelMaterial.glsl +16 -0
  231. package/Source/Shaders/Builtin/Structs/modelMaterial.js +16 -0
  232. package/Source/Shaders/EllipsoidFS.glsl +1 -1
  233. package/Source/Shaders/EllipsoidFS.js +1 -1
  234. package/Source/Shaders/GlobeFS.glsl +3 -3
  235. package/Source/Shaders/GlobeFS.js +3 -3
  236. package/Source/Shaders/Model/ImageBasedLightingStageFS.glsl +211 -133
  237. package/Source/Shaders/Model/ImageBasedLightingStageFS.js +212 -133
  238. package/Source/Shaders/Model/LightingStageFS.glsl +113 -48
  239. package/Source/Shaders/Model/LightingStageFS.js +113 -48
  240. package/Source/Shaders/Model/MaterialStageFS.glsl +407 -136
  241. package/Source/Shaders/Model/MaterialStageFS.js +407 -136
  242. package/Source/Widget/CesiumWidget.css +0 -5
  243. package/Source/Widget/CesiumWidget.js +29 -28
  244. package/index.d.ts +184 -116
  245. package/index.js +92 -95
  246. package/package.json +2 -2
  247. package/Source/Shaders/Builtin/Functions/defaultPbrMaterial.glsl +0 -16
  248. package/Source/Shaders/Builtin/Functions/defaultPbrMaterial.js +0 -18
  249. package/Source/Shaders/Builtin/Functions/ellipsoidWgs84TextureCoordinates.glsl +0 -10
  250. package/Source/Shaders/Builtin/Functions/pbrMetallicRoughnessMaterial.glsl +0 -37
  251. package/Source/Shaders/Builtin/Functions/pbrMetallicRoughnessMaterial.js +0 -39
  252. package/Source/Shaders/Builtin/Functions/pbrSpecularGlossinessMaterial.glsl +0 -30
  253. package/Source/Shaders/Builtin/Functions/pbrSpecularGlossinessMaterial.js +0 -32
  254. package/Source/Shaders/Builtin/Structs/pbrParameters.glsl +0 -16
  255. package/Source/Shaders/Builtin/Structs/pbrParameters.js +0 -18
@@ -12,15 +12,20 @@ import VertexAttributeSemantic from "../VertexAttributeSemantic.js";
12
12
  import LightingModel from "./LightingModel.js";
13
13
  import ModelUtility from "./ModelUtility.js";
14
14
 
15
- const Material = ModelComponents.Material;
16
- const MetallicRoughness = ModelComponents.MetallicRoughness;
17
- const SpecularGlossiness = ModelComponents.SpecularGlossiness;
15
+ const {
16
+ Material,
17
+ MetallicRoughness,
18
+ SpecularGlossiness,
19
+ Specular,
20
+ Clearcoat,
21
+ } = ModelComponents;
18
22
 
19
23
  /**
20
24
  * The material pipeline stage processes textures and other uniforms needed
21
25
  * to render a primitive. This handles the following material types:
22
26
  * <ul>
23
27
  * <li>Basic glTF materials (PBR metallic roughness model)</li>
28
+ * <li>The `KHR_materials_specular` glTF extension</li>
24
29
  * <li>The `KHR_materials_pbrSpecularGlossiness` glTF extension</li>
25
30
  * <li>The `KHR_materials_unlit` glTF extension</li>
26
31
  * </ul>
@@ -59,20 +64,19 @@ MaterialPipelineStage.process = function (
59
64
  // gltf-pipeline automatically creates a default material so this will always
60
65
  // be defined.
61
66
  const material = primitive.material;
62
- const model = renderResources.model;
67
+ const { model, uniformMap, shaderBuilder } = renderResources;
63
68
 
64
69
  // Classification models only use position and feature ID attributes,
65
70
  // so textures should be disabled to avoid compile errors.
66
71
  const hasClassification = defined(model.classificationType);
67
72
  const disableTextures = hasClassification;
68
73
 
69
- const uniformMap = renderResources.uniformMap;
70
- const shaderBuilder = renderResources.shaderBuilder;
71
-
72
74
  // When textures are loaded incrementally, fall back to a default 1x1 texture
73
- const defaultTexture = frameState.context.defaultTexture;
74
- const defaultNormalTexture = frameState.context.defaultNormalTexture;
75
- const defaultEmissiveTexture = frameState.context.defaultEmissiveTexture;
75
+ const {
76
+ defaultTexture,
77
+ defaultNormalTexture,
78
+ defaultEmissiveTexture,
79
+ } = frameState.context;
76
80
 
77
81
  processMaterialUniforms(
78
82
  material,
@@ -86,15 +90,51 @@ MaterialPipelineStage.process = function (
86
90
 
87
91
  if (defined(material.specularGlossiness)) {
88
92
  processSpecularGlossinessUniforms(
89
- material,
93
+ material.specularGlossiness,
90
94
  uniformMap,
91
95
  shaderBuilder,
92
96
  defaultTexture,
93
97
  disableTextures
94
98
  );
95
99
  } else {
100
+ if (
101
+ defined(material.specular) &&
102
+ ModelUtility.supportedExtensions.KHR_materials_specular
103
+ ) {
104
+ processSpecularUniforms(
105
+ material.specular,
106
+ uniformMap,
107
+ shaderBuilder,
108
+ defaultTexture,
109
+ disableTextures
110
+ );
111
+ }
112
+ if (
113
+ defined(material.anisotropy) &&
114
+ ModelUtility.supportedExtensions.KHR_materials_anisotropy
115
+ ) {
116
+ processAnisotropyUniforms(
117
+ material.anisotropy,
118
+ uniformMap,
119
+ shaderBuilder,
120
+ defaultTexture,
121
+ disableTextures
122
+ );
123
+ }
124
+ if (
125
+ defined(material.clearcoat) &&
126
+ ModelUtility.supportedExtensions.KHR_materials_clearcoat
127
+ ) {
128
+ processClearcoatUniforms(
129
+ material.clearcoat,
130
+ uniformMap,
131
+ shaderBuilder,
132
+ defaultTexture,
133
+ disableTextures
134
+ );
135
+ }
96
136
  processMetallicRoughnessUniforms(
97
- material,
137
+ material.metallicRoughness,
98
138
  uniformMap,
99
139
  shaderBuilder,
100
140
  defaultTexture,
@@ -176,6 +216,44 @@ function processTextureTransform(
176
216
  };
177
217
  }
178
218
 
219
+ /**
220
+ * Process a single texture scale and add it to the shader and uniform map.
221
+ *
222
+ * @param {ShaderBuilder} shaderBuilder The shader builder to modify
223
+ * @param {Object<string, Function>} uniformMap The uniform map to modify.
224
+ * @param {ModelComponents.TextureReader} textureReader The texture to add to the shader
225
+ * @param {string} uniformName The name of the sampler uniform such as <code>u_baseColorTexture</code>
226
+ * @param {string} defineName The name of the texture for use in the defines, minus any prefix or suffix. For example, "BASE_COLOR" or "EMISSIVE"
227
+ *
228
+ * @private
229
+ */
230
+ function processTextureScale(
231
+ shaderBuilder,
232
+ uniformMap,
233
+ textureReader,
234
+ uniformName,
235
+ defineName
236
+ ) {
237
+ // Add a define to enable the texture transformation code in the shader.
238
+ const transformDefine = `HAS_${defineName}_TEXTURE_SCALE`;
239
+ shaderBuilder.addDefine(
240
+ transformDefine,
241
+ undefined,
242
+ ShaderDestination.FRAGMENT
243
+ );
244
+
245
+ // Add a uniform for the transformation matrix
246
+ const scaleUniformName = `${uniformName}Scale`;
247
+ shaderBuilder.addUniform(
248
+ "float",
249
+ scaleUniformName,
250
+ ShaderDestination.FRAGMENT
251
+ );
252
+ uniformMap[scaleUniformName] = function () {
253
+ return textureReader.scale;
254
+ };
255
+ }
256
+
179
257
  /**
180
258
  * Process a single texture and add it to the shader and uniform map.
181
259
  *
@@ -234,6 +312,17 @@ function processTexture(
234
312
  defineName
235
313
  );
236
314
  }
315
+
316
+ const { scale } = textureReader;
317
+ if (defined(scale) && scale !== 1.0) {
318
+ processTextureScale(
319
+ shaderBuilder,
320
+ uniformMap,
321
+ textureReader,
322
+ uniformName,
323
+ defineName
324
+ );
325
+ }
237
326
  }
238
327
 
239
328
  function processMaterialUniforms(
@@ -245,7 +334,13 @@ function processMaterialUniforms(
245
334
  defaultEmissiveTexture,
246
335
  disableTextures
247
336
  ) {
248
- const emissiveFactor = material.emissiveFactor;
337
+ const {
338
+ emissiveFactor,
339
+ emissiveTexture,
340
+ normalTexture,
341
+ occlusionTexture,
342
+ } = material;
343
+
249
344
  if (
250
345
  defined(emissiveFactor) &&
251
346
  !Cartesian3.equals(emissiveFactor, Material.DEFAULT_EMISSIVE_FACTOR)
@@ -264,7 +359,6 @@ function processMaterialUniforms(
264
359
  ShaderDestination.FRAGMENT
265
360
  );
266
361
 
267
- const emissiveTexture = material.emissiveTexture;
268
362
  if (defined(emissiveTexture) && !disableTextures) {
269
363
  processTexture(
270
364
  shaderBuilder,
@@ -277,7 +371,6 @@ function processMaterialUniforms(
277
371
  }
278
372
  }
279
373
 
280
- const normalTexture = material.normalTexture;
281
374
  if (defined(normalTexture) && !disableTextures) {
282
375
  processTexture(
283
376
  shaderBuilder,
@@ -289,7 +382,6 @@ function processMaterialUniforms(
289
382
  );
290
383
  }
291
384
 
292
- const occlusionTexture = material.occlusionTexture;
293
385
  if (defined(occlusionTexture) && !disableTextures) {
294
386
  processTexture(
295
387
  shaderBuilder,
@@ -302,21 +394,37 @@ function processMaterialUniforms(
302
394
  }
303
395
  }
304
396
 
397
+ /**
398
+ * Add uniforms and defines for the KHR_materials_pbrSpecularGlossiness extension
399
+ *
400
+ * @param {ModelComponents.SpecularGlossiness} specularGlossiness
401
+ * @param {Object<string, Function>} uniformMap The uniform map to modify.
402
+ * @param {ShaderBuilder} shaderBuilder
403
+ * @param {Texture} defaultTexture
404
+ * @param {boolean} disableTextures
405
+ * @private
406
+ */
305
407
  function processSpecularGlossinessUniforms(
306
- material,
408
+ specularGlossiness,
307
409
  uniformMap,
308
410
  shaderBuilder,
309
411
  defaultTexture,
310
412
  disableTextures
311
413
  ) {
312
- const specularGlossiness = material.specularGlossiness;
414
+ const {
415
+ diffuseTexture,
416
+ diffuseFactor,
417
+ specularGlossinessTexture,
418
+ specularFactor,
419
+ glossinessFactor,
420
+ } = specularGlossiness;
421
+
313
422
  shaderBuilder.addDefine(
314
423
  "USE_SPECULAR_GLOSSINESS",
315
424
  undefined,
316
425
  ShaderDestination.FRAGMENT
317
426
  );
318
427
 
319
- const diffuseTexture = specularGlossiness.diffuseTexture;
320
428
  if (defined(diffuseTexture) && !disableTextures) {
321
429
  processTexture(
322
430
  shaderBuilder,
@@ -328,7 +436,6 @@ function processSpecularGlossinessUniforms(
328
436
  );
329
437
  }
330
438
 
331
- const diffuseFactor = specularGlossiness.diffuseFactor;
332
439
  if (
333
440
  defined(diffuseFactor) &&
334
441
  !Cartesian4.equals(diffuseFactor, SpecularGlossiness.DEFAULT_DIFFUSE_FACTOR)
@@ -348,8 +455,6 @@ function processSpecularGlossinessUniforms(
348
455
  );
349
456
  }
350
457
 
351
- const specularGlossinessTexture =
352
- specularGlossiness.specularGlossinessTexture;
353
458
  if (defined(specularGlossinessTexture) && !disableTextures) {
354
459
  processTexture(
355
460
  shaderBuilder,
@@ -361,7 +466,6 @@ function processSpecularGlossinessUniforms(
361
466
  );
362
467
  }
363
468
 
364
- const specularFactor = specularGlossiness.specularFactor;
365
469
  if (
366
470
  defined(specularFactor) &&
367
471
  !Cartesian3.equals(
@@ -371,20 +475,19 @@ function processSpecularGlossinessUniforms(
371
475
  ) {
372
476
  shaderBuilder.addUniform(
373
477
  "vec3",
374
- "u_specularFactor",
478
+ "u_legacySpecularFactor",
375
479
  ShaderDestination.FRAGMENT
376
480
  );
377
- uniformMap.u_specularFactor = function () {
481
+ uniformMap.u_legacySpecularFactor = function () {
378
482
  return specularGlossiness.specularFactor;
379
483
  };
380
484
  shaderBuilder.addDefine(
381
- "HAS_SPECULAR_FACTOR",
485
+ "HAS_LEGACY_SPECULAR_FACTOR",
382
486
  undefined,
383
487
  ShaderDestination.FRAGMENT
384
488
  );
385
489
  }
386
490
 
387
- const glossinessFactor = specularGlossiness.glossinessFactor;
388
491
  if (
389
492
  defined(glossinessFactor) &&
390
493
  glossinessFactor !== SpecularGlossiness.DEFAULT_GLOSSINESS_FACTOR
@@ -405,14 +508,277 @@ function processSpecularGlossinessUniforms(
405
508
  }
406
509
  }
407
510
 
511
+ /**
512
+ * Add uniforms and defines for the KHR_materials_specular extension
513
+ *
514
+ * @param {ModelComponents.Specular} specular
515
+ * @param {Object<string, Function>} uniformMap The uniform map to modify.
516
+ * @param {ShaderBuilder} shaderBuilder
517
+ * @param {Texture} defaultTexture
518
+ * @param {boolean} disableTextures
519
+ * @private
520
+ */
521
+ function processSpecularUniforms(
522
+ specular,
523
+ uniformMap,
524
+ shaderBuilder,
525
+ defaultTexture,
526
+ disableTextures
527
+ ) {
528
+ const {
529
+ specularTexture,
530
+ specularFactor,
531
+ specularColorTexture,
532
+ specularColorFactor,
533
+ } = specular;
534
+
535
+ shaderBuilder.addDefine(
536
+ "USE_SPECULAR",
537
+ undefined,
538
+ ShaderDestination.FRAGMENT
539
+ );
540
+
541
+ if (defined(specularTexture) && !disableTextures) {
542
+ processTexture(
543
+ shaderBuilder,
544
+ uniformMap,
545
+ specularTexture,
546
+ "u_specularTexture",
547
+ "SPECULAR",
548
+ defaultTexture
549
+ );
550
+ }
551
+
552
+ if (
553
+ defined(specularFactor) &&
554
+ specularFactor !== Specular.DEFAULT_SPECULAR_FACTOR
555
+ ) {
556
+ shaderBuilder.addUniform(
557
+ "float",
558
+ "u_specularFactor",
559
+ ShaderDestination.FRAGMENT
560
+ );
561
+ uniformMap.u_specularFactor = function () {
562
+ return specular.specularFactor;
563
+ };
564
+ shaderBuilder.addDefine(
565
+ "HAS_SPECULAR_FACTOR",
566
+ undefined,
567
+ ShaderDestination.FRAGMENT
568
+ );
569
+ }
570
+
571
+ if (defined(specularColorTexture) && !disableTextures) {
572
+ processTexture(
573
+ shaderBuilder,
574
+ uniformMap,
575
+ specularColorTexture,
576
+ "u_specularColorTexture",
577
+ "SPECULAR_COLOR",
578
+ defaultTexture
579
+ );
580
+ }
581
+
582
+ if (
583
+ defined(specularColorFactor) &&
584
+ !Cartesian3.equals(
585
+ specularColorFactor,
586
+ Specular.DEFAULT_SPECULAR_COLOR_FACTOR
587
+ )
588
+ ) {
589
+ shaderBuilder.addUniform(
590
+ "vec3",
591
+ "u_specularColorFactor",
592
+ ShaderDestination.FRAGMENT
593
+ );
594
+ uniformMap.u_specularColorFactor = function () {
595
+ return specular.specularColorFactor;
596
+ };
597
+ shaderBuilder.addDefine(
598
+ "HAS_SPECULAR_COLOR_FACTOR",
599
+ undefined,
600
+ ShaderDestination.FRAGMENT
601
+ );
602
+ }
603
+ }
604
+
605
+ const scratchAnisotropy = new Cartesian3();
606
+
607
+ /**
608
+ * Add uniforms and defines for the KHR_materials_anisotropy extension
609
+ *
610
+ * @param {ModelComponents.Anisotropy} anisotropy
611
+ * @param {Object<string, Function>} uniformMap The uniform map to modify.
612
+ * @param {ShaderBuilder} shaderBuilder
613
+ * @param {Texture} defaultTexture
614
+ * @param {boolean} disableTextures
615
+ * @private
616
+ */
617
+ function processAnisotropyUniforms(
618
+ anisotropy,
619
+ uniformMap,
620
+ shaderBuilder,
621
+ defaultTexture,
622
+ disableTextures
623
+ ) {
624
+ const {
625
+ anisotropyStrength,
626
+ anisotropyRotation,
627
+ anisotropyTexture,
628
+ } = anisotropy;
629
+
630
+ shaderBuilder.addDefine(
631
+ "USE_ANISOTROPY",
632
+ undefined,
633
+ ShaderDestination.FRAGMENT
634
+ );
635
+
636
+ if (defined(anisotropyTexture) && !disableTextures) {
637
+ processTexture(
638
+ shaderBuilder,
639
+ uniformMap,
640
+ anisotropyTexture,
641
+ "u_anisotropyTexture",
642
+ "ANISOTROPY",
643
+ defaultTexture
644
+ );
645
+ }
646
+
647
+ // Pre-compute cos and sin of rotation, since they are the same for all fragments.
648
+ // Combine with strength as one vec3 uniform.
649
+ const cosRotation = Math.cos(anisotropyRotation);
650
+ const sinRotation = Math.sin(anisotropyRotation);
651
+ shaderBuilder.addUniform("vec3", "u_anisotropy", ShaderDestination.FRAGMENT);
652
+ uniformMap.u_anisotropy = function () {
653
+ return Cartesian3.fromElements(
654
+ cosRotation,
655
+ sinRotation,
656
+ anisotropyStrength,
657
+ scratchAnisotropy
658
+ );
659
+ };
660
+ }
661
+
662
+ /**
663
+ * Add uniforms and defines for the KHR_materials_clearcoat extension
664
+ *
665
+ * @param {ModelComponents.Clearcoat} clearcoat
666
+ * @param {Object<string, Function>} uniformMap The uniform map to modify.
667
+ * @param {ShaderBuilder} shaderBuilder
668
+ * @param {Texture} defaultTexture
669
+ * @param {boolean} disableTextures
670
+ * @private
671
+ */
672
+ function processClearcoatUniforms(
673
+ clearcoat,
674
+ uniformMap,
675
+ shaderBuilder,
676
+ defaultTexture,
677
+ disableTextures
678
+ ) {
679
+ const {
680
+ clearcoatFactor,
681
+ clearcoatTexture,
682
+ clearcoatRoughnessFactor,
683
+ clearcoatRoughnessTexture,
684
+ clearcoatNormalTexture,
685
+ } = clearcoat;
686
+
687
+ shaderBuilder.addDefine(
688
+ "USE_CLEARCOAT",
689
+ undefined,
690
+ ShaderDestination.FRAGMENT
691
+ );
692
+
693
+ if (
694
+ defined(clearcoatFactor) &&
695
+ clearcoatFactor !== Clearcoat.DEFAULT_CLEARCOAT_FACTOR
696
+ ) {
697
+ shaderBuilder.addUniform(
698
+ "float",
699
+ "u_clearcoatFactor",
700
+ ShaderDestination.FRAGMENT
701
+ );
702
+ uniformMap.u_clearcoatFactor = function () {
703
+ return clearcoat.clearcoatFactor;
704
+ };
705
+ shaderBuilder.addDefine(
706
+ "HAS_CLEARCOAT_FACTOR",
707
+ undefined,
708
+ ShaderDestination.FRAGMENT
709
+ );
710
+ }
711
+
712
+ if (defined(clearcoatTexture) && !disableTextures) {
713
+ processTexture(
714
+ shaderBuilder,
715
+ uniformMap,
716
+ clearcoatTexture,
717
+ "u_clearcoatTexture",
718
+ "CLEARCOAT",
719
+ defaultTexture
720
+ );
721
+ }
722
+
723
+ if (
724
+ defined(clearcoatRoughnessFactor) &&
725
+ clearcoatFactor !== Clearcoat.DEFAULT_CLEARCOAT_ROUGHNESS_FACTOR
726
+ ) {
727
+ shaderBuilder.addUniform(
728
+ "float",
729
+ "u_clearcoatRoughnessFactor",
730
+ ShaderDestination.FRAGMENT
731
+ );
732
+ uniformMap.u_clearcoatRoughnessFactor = function () {
733
+ return clearcoat.clearcoatRoughnessFactor;
734
+ };
735
+ shaderBuilder.addDefine(
736
+ "HAS_CLEARCOAT_ROUGHNESS_FACTOR",
737
+ undefined,
738
+ ShaderDestination.FRAGMENT
739
+ );
740
+ }
741
+
742
+ if (defined(clearcoatRoughnessTexture) && !disableTextures) {
743
+ processTexture(
744
+ shaderBuilder,
745
+ uniformMap,
746
+ clearcoatRoughnessTexture,
747
+ "u_clearcoatRoughnessTexture",
748
+ "CLEARCOAT_ROUGHNESS",
749
+ defaultTexture
750
+ );
751
+ }
752
+
753
+ if (defined(clearcoatNormalTexture) && !disableTextures) {
754
+ processTexture(
755
+ shaderBuilder,
756
+ uniformMap,
757
+ clearcoatNormalTexture,
758
+ "u_clearcoatNormalTexture",
759
+ "CLEARCOAT_NORMAL",
760
+ defaultTexture
761
+ );
762
+ }
763
+ }
764
+
765
+ /**
766
+ * Add uniforms and defines for the PBR metallic roughness model
767
+ *
768
+ * @param {ModelComponents.MetallicRoughness} metallicRoughness
769
+ * @param {Object<string, Function>} uniformMap The uniform map to modify.
770
+ * @param {ShaderBuilder} shaderBuilder
771
+ * @param {Texture} defaultTexture
772
+ * @param {boolean} disableTextures
773
+ * @private
774
+ */
408
775
  function processMetallicRoughnessUniforms(
409
- material,
776
+ metallicRoughness,
410
777
  uniformMap,
411
778
  shaderBuilder,
412
779
  defaultTexture,
413
780
  disableTextures
414
781
  ) {
415
- const metallicRoughness = material.metallicRoughness;
416
782
  shaderBuilder.addDefine(
417
783
  "USE_METALLIC_ROUGHNESS",
418
784
  undefined,
@@ -2123,8 +2123,7 @@ function updateClamping(model) {
2123
2123
  return;
2124
2124
  }
2125
2125
 
2126
- const globe = scene.globe;
2127
- const ellipsoid = defaultValue(globe?.ellipsoid, Ellipsoid.WGS84);
2126
+ const ellipsoid = defaultValue(scene.ellipsoid, Ellipsoid.default);
2128
2127
 
2129
2128
  // Compute cartographic position so we don't recompute every update
2130
2129
  const modelMatrix = model.modelMatrix;
@@ -2206,7 +2205,7 @@ function updateComputedScale(model, modelMatrix, frameState) {
2206
2205
  Matrix4.getTranslation(modelMatrix, scratchPosition);
2207
2206
 
2208
2207
  if (model._sceneMode !== SceneMode.SCENE3D) {
2209
- SceneTransforms.computeActualWgs84Position(
2208
+ SceneTransforms.computeActualEllipsoidPosition(
2210
2209
  frameState,
2211
2210
  scratchPosition,
2212
2211
  scratchPosition
@@ -2250,6 +2249,10 @@ function updatePickIds(model) {
2250
2249
  }
2251
2250
  }
2252
2251
 
2252
+ // Matrix3 is a row-major constructor.
2253
+ // The same constructor in GLSL will produce the transpose of this.
2254
+ const yUpToZUp = new Matrix3(-1, 0, 0, 0, 0, 1, 0, -1, 0);
2255
+
2253
2256
  function updateReferenceMatrices(model, frameState) {
2254
2257
  const modelMatrix = defined(model._clampedModelMatrix)
2255
2258
  ? model._clampedModelMatrix
@@ -2267,15 +2270,16 @@ function updateReferenceMatrices(model, frameState) {
2267
2270
  referenceMatrix,
2268
2271
  iblReferenceFrameMatrix4
2269
2272
  );
2270
- iblReferenceFrameMatrix3 = Matrix4.getMatrix3(
2273
+ iblReferenceFrameMatrix3 = Matrix4.getRotation(
2271
2274
  iblReferenceFrameMatrix4,
2272
2275
  iblReferenceFrameMatrix3
2273
2276
  );
2274
- iblReferenceFrameMatrix3 = Matrix3.getRotation(
2277
+ iblReferenceFrameMatrix3 = Matrix3.transpose(
2275
2278
  iblReferenceFrameMatrix3,
2276
2279
  iblReferenceFrameMatrix3
2277
2280
  );
2278
- model._iblReferenceFrameMatrix = Matrix3.transpose(
2281
+ model._iblReferenceFrameMatrix = Matrix3.multiply(
2282
+ yUpToZUp,
2279
2283
  iblReferenceFrameMatrix3,
2280
2284
  model._iblReferenceFrameMatrix
2281
2285
  );
@@ -2460,7 +2464,11 @@ function passesDistanceDisplayCondition(model, frameState) {
2460
2464
 
2461
2465
  // This will project the position if the scene is in Columbus View,
2462
2466
  // but leave the position as-is in 3D mode.
2463
- SceneTransforms.computeActualWgs84Position(frameState, position, position);
2467
+ SceneTransforms.computeActualEllipsoidPosition(
2468
+ frameState,
2469
+ position,
2470
+ position
2471
+ );
2464
2472
 
2465
2473
  distanceSquared = Cartesian3.distanceSquared(
2466
2474
  position,
@@ -351,7 +351,7 @@ function computeModelMatrix2D(sceneGraph, frameState) {
351
351
  );
352
352
  } else {
353
353
  const center = sceneGraph.boundingSphere.center;
354
- const to2D = Transforms.wgs84To2DModelMatrix(
354
+ const to2D = Transforms.ellipsoidTo2DModelMatrix(
355
355
  frameState.mapProjection,
356
356
  center,
357
357
  sceneGraph._computedModelMatrix2D
@@ -357,6 +357,9 @@ ModelUtility.supportedExtensions = {
357
357
  KHR_techniques_webgl: true,
358
358
  KHR_materials_common: true,
359
359
  KHR_materials_pbrSpecularGlossiness: true,
360
+ KHR_materials_specular: true,
361
+ KHR_materials_anisotropy: true,
362
+ KHR_materials_clearcoat: true,
360
363
  KHR_materials_unlit: true,
361
364
  KHR_mesh_quantization: true,
362
365
  KHR_texture_basisu: true,
@@ -145,7 +145,7 @@ function computeBoundingSphere2D(renderResources, modelMatrix, frameState) {
145
145
  scratchProjectedMin
146
146
  );
147
147
 
148
- const projectedMin = SceneTransforms.computeActualWgs84Position(
148
+ const projectedMin = SceneTransforms.computeActualEllipsoidPosition(
149
149
  frameState,
150
150
  transformedPositionMin,
151
151
  transformedPositionMin
@@ -157,7 +157,7 @@ function computeBoundingSphere2D(renderResources, modelMatrix, frameState) {
157
157
  scratchProjectedMax
158
158
  );
159
159
 
160
- const projectedMax = SceneTransforms.computeActualWgs84Position(
160
+ const projectedMax = SceneTransforms.computeActualEllipsoidPosition(
161
161
  frameState,
162
162
  transformedPositionMax,
163
163
  transformedPositionMax
@@ -244,7 +244,7 @@ function createPositionsTypedArrayFor2D(
244
244
  initialPosition
245
245
  );
246
246
 
247
- const projectedPosition = SceneTransforms.computeActualWgs84Position(
247
+ const projectedPosition = SceneTransforms.computeActualEllipsoidPosition(
248
248
  frameState,
249
249
  transformedPosition,
250
250
  transformedPosition
@@ -3,11 +3,9 @@ import ShaderDestination from "../../Renderer/ShaderDestination.js";
3
3
  import VerticalExaggerationStageVS from "../../Shaders/Model/VerticalExaggerationStageVS.js";
4
4
 
5
5
  /**
6
- * The custom shader pipeline stage takes GLSL callbacks from the
7
- * {@link CustomShader} and inserts them into the overall shader code for the
8
- * {@link Model}. The input to the callback is a struct with many
9
- * properties that depend on the attributes of the primitive. This shader code
10
- * is automatically generated by this stage.
6
+ * The vertical exaggeration pipeline stage transforms the vertex
7
+ * positions based on the values of {@link Scene#verticalExaggeration} and
8
+ * {@link Scene#verticalExaggerationRelativeHeight}
11
9
  *
12
10
  * @namespace VerticalExaggerationPipelineStage
13
11
  *
@@ -20,7 +18,7 @@ const VerticalExaggerationPipelineStage = {
20
18
  const scratchExaggerationUniform = new Cartesian2();
21
19
 
22
20
  /**
23
- * Add vertical exaggeration to a shader
21
+ * Add defines and uniforms for vertical exaggeration calculations in the vertex shader
24
22
  *
25
23
  * @param {PrimitiveRenderResources} renderResources The render resources for the primitive
26
24
  * @param {ModelComponents.Primitive} primitive The primitive to be rendered