@cesium/engine 1.0.0 → 2.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 (472) hide show
  1. package/Build/Workers/{AttributeCompression-4589338a.js → AttributeCompression-b646d393.js} +1 -1
  2. package/Build/Workers/{AxisAlignedBoundingBox-bfb1234f.js → AxisAlignedBoundingBox-47525601.js} +1 -1
  3. package/Build/Workers/{BoundingRectangle-7ffc2153.js → BoundingRectangle-93b263ac.js} +1 -1
  4. package/Build/Workers/{BoxGeometry-93f344a3.js → BoxGeometry-8c4b4125.js} +1 -1
  5. package/Build/Workers/{Color-0c5aaf47.js → Color-52c60ed7.js} +1 -1
  6. package/Build/Workers/{CoplanarPolygonGeometryLibrary-6597982a.js → CoplanarPolygonGeometryLibrary-33c4c1f8.js} +1 -1
  7. package/Build/Workers/{CorridorGeometryLibrary-2119580e.js → CorridorGeometryLibrary-5039cd8e.js} +1 -1
  8. package/Build/Workers/{CylinderGeometry-f9503c6d.js → CylinderGeometry-3ac44974.js} +1 -1
  9. package/Build/Workers/{EllipseGeometry-fedf72d5.js → EllipseGeometry-a9c9b3be.js} +1 -1
  10. package/Build/Workers/{EllipseGeometryLibrary-4ea68687.js → EllipseGeometryLibrary-855d4681.js} +1 -1
  11. package/Build/Workers/{EllipseOutlineGeometry-e2ae6a35.js → EllipseOutlineGeometry-017a5929.js} +1 -1
  12. package/Build/Workers/{EllipsoidGeodesic-16de63ea.js → EllipsoidGeodesic-98c62a56.js} +1 -1
  13. package/Build/Workers/{EllipsoidGeometry-95c0330e.js → EllipsoidGeometry-826e7bce.js} +1 -1
  14. package/Build/Workers/{EllipsoidOutlineGeometry-d6d2ceec.js → EllipsoidOutlineGeometry-784dcdb5.js} +1 -1
  15. package/Build/Workers/{EllipsoidRhumbLine-ae5e65e0.js → EllipsoidRhumbLine-19756602.js} +1 -1
  16. package/Build/Workers/{EllipsoidTangentPlane-bfc674bf.js → EllipsoidTangentPlane-ed9443a1.js} +1 -1
  17. package/Build/Workers/{EncodedCartesian3-f473ea18.js → EncodedCartesian3-81f70735.js} +1 -1
  18. package/Build/Workers/{FrustumGeometry-3bf2e4eb.js → FrustumGeometry-9f1ee4d8.js} +1 -1
  19. package/Build/Workers/{GeometryAttribute-df5f473e.js → GeometryAttribute-334718f8.js} +1 -1
  20. package/Build/Workers/{GeometryInstance-aa75b4cf.js → GeometryInstance-451dc1cd.js} +1 -1
  21. package/Build/Workers/{GeometryPipeline-f0e46c42.js → GeometryPipeline-8fb0db69.js} +1 -1
  22. package/Build/Workers/{IntersectionTests-9de29d51.js → IntersectionTests-27d49265.js} +1 -1
  23. package/Build/Workers/{Matrix2-ce637455.js → Matrix2-13178034.js} +4 -2
  24. package/Build/Workers/{Matrix3-4f4df527.js → Matrix3-315394f6.js} +2 -1
  25. package/Build/Workers/{OrientedBoundingBox-d3ff3d4d.js → OrientedBoundingBox-79ee7cbb.js} +5 -5
  26. package/Build/Workers/{Plane-b81241c2.js → Plane-900aa728.js} +1 -1
  27. package/Build/Workers/{PolygonGeometryLibrary-6f4937bb.js → PolygonGeometryLibrary-6b5a29e9.js} +1 -1
  28. package/Build/Workers/PolygonPipeline-21668b3f.js +1345 -0
  29. package/Build/Workers/{PolylinePipeline-2e2b015c.js → PolylinePipeline-5e2e1b21.js} +1 -1
  30. package/Build/Workers/{PolylineVolumeGeometryLibrary-7ee1d449.js → PolylineVolumeGeometryLibrary-97f0b94e.js} +1 -1
  31. package/Build/Workers/{PrimitivePipeline-a9b7aae0.js → PrimitivePipeline-5640850a.js} +1 -1
  32. package/Build/Workers/{RectangleGeometryLibrary-9aa6c8f6.js → RectangleGeometryLibrary-d5457f7b.js} +1 -1
  33. package/Build/Workers/{TerrainEncoding-b52dcfc5.js → TerrainEncoding-bfdf2021.js} +1 -1
  34. package/Build/Workers/{Transforms-2f755df8.js → Transforms-a05e5e6e.js} +114 -83
  35. package/Build/Workers/{WallGeometryLibrary-ab19a93d.js → WallGeometryLibrary-6db0ebb6.js} +1 -1
  36. package/Build/Workers/{WebMercatorProjection-9f25de49.js → WebMercatorProjection-13a90d41.js} +1 -1
  37. package/Build/Workers/cesiumWorkerBootstrapper.js +92 -2
  38. package/Build/Workers/combineGeometry.js +1 -1
  39. package/Build/Workers/createBoxGeometry.js +1 -1
  40. package/Build/Workers/createBoxOutlineGeometry.js +1 -1
  41. package/Build/Workers/createCircleGeometry.js +1 -1
  42. package/Build/Workers/createCircleOutlineGeometry.js +1 -1
  43. package/Build/Workers/createCoplanarPolygonGeometry.js +1 -1
  44. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +1 -1
  45. package/Build/Workers/createCorridorGeometry.js +1 -1
  46. package/Build/Workers/createCorridorOutlineGeometry.js +1 -1
  47. package/Build/Workers/createCylinderGeometry.js +1 -1
  48. package/Build/Workers/createCylinderOutlineGeometry.js +1 -1
  49. package/Build/Workers/createEllipseGeometry.js +1 -1
  50. package/Build/Workers/createEllipseOutlineGeometry.js +1 -1
  51. package/Build/Workers/createEllipsoidGeometry.js +1 -1
  52. package/Build/Workers/createEllipsoidOutlineGeometry.js +1 -1
  53. package/Build/Workers/createFrustumGeometry.js +1 -1
  54. package/Build/Workers/createFrustumOutlineGeometry.js +1 -1
  55. package/Build/Workers/createGeometry.js +1 -1
  56. package/Build/Workers/createGroundPolylineGeometry.js +1 -1
  57. package/Build/Workers/createPlaneGeometry.js +1 -1
  58. package/Build/Workers/createPlaneOutlineGeometry.js +1 -1
  59. package/Build/Workers/createPolygonGeometry.js +1 -1
  60. package/Build/Workers/createPolygonOutlineGeometry.js +1 -1
  61. package/Build/Workers/createPolylineGeometry.js +1 -1
  62. package/Build/Workers/createPolylineVolumeGeometry.js +1 -1
  63. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +1 -1
  64. package/Build/Workers/createRectangleGeometry.js +1 -1
  65. package/Build/Workers/createRectangleOutlineGeometry.js +1 -1
  66. package/Build/Workers/createSimplePolylineGeometry.js +1 -1
  67. package/Build/Workers/createSphereGeometry.js +1 -1
  68. package/Build/Workers/createSphereOutlineGeometry.js +1 -1
  69. package/Build/Workers/createVectorTileClampedPolylines.js +1 -1
  70. package/Build/Workers/createVectorTileGeometries.js +1 -1
  71. package/Build/Workers/createVectorTilePoints.js +1 -1
  72. package/Build/Workers/createVectorTilePolygons.js +1 -1
  73. package/Build/Workers/createVectorTilePolylines.js +1 -1
  74. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +1 -1
  75. package/Build/Workers/createVerticesFromHeightmap.js +7 -3
  76. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +1 -1
  77. package/Build/Workers/createWallGeometry.js +1 -1
  78. package/Build/Workers/createWallOutlineGeometry.js +1 -1
  79. package/Build/Workers/decodeDraco.js +9 -1
  80. package/Build/Workers/decodeI3S.js +1 -1
  81. package/Build/Workers/package.js +25 -1
  82. package/Build/Workers/transcodeKTX2.js +22 -2
  83. package/Build/Workers/transferTypedArrayTest.js +25 -1
  84. package/Build/Workers/upsampleQuantizedTerrainMesh.js +1 -1
  85. package/README.md +14 -16
  86. package/Source/Core/EarthOrientationParameters.js +67 -63
  87. package/Source/Core/FeatureDetection.js +18 -0
  88. package/Source/Core/Ion.js +1 -2
  89. package/Source/Core/Matrix2.js +2 -1
  90. package/Source/Core/Matrix3.js +2 -1
  91. package/Source/Core/Matrix4.js +1 -0
  92. package/Source/Core/OrientedBoundingBox.js +4 -4
  93. package/Source/Core/PixelFormat.js +22 -2
  94. package/Source/Core/S2Cell.js +3 -3
  95. package/Source/Core/Transforms.js +3 -7
  96. package/Source/Core/sampleTerrain.js +5 -0
  97. package/Source/DataSources/GpxDataSource.js +4 -6
  98. package/Source/DataSources/KmlDataSource.js +3 -5
  99. package/Source/Renderer/AutomaticUniforms.js +3 -3
  100. package/Source/Renderer/Context.js +20 -12
  101. package/Source/Renderer/Pass.js +3 -2
  102. package/Source/Renderer/ShaderBuilder.js +13 -12
  103. package/Source/Renderer/ShaderSource.js +31 -26
  104. package/Source/Renderer/demodernizeShader.js +76 -0
  105. package/Source/Scene/AutoExposure.js +5 -5
  106. package/Source/Scene/BatchTable.js +5 -5
  107. package/Source/Scene/BillboardCollection.js +2 -2
  108. package/Source/Scene/BingMapsImageryProvider.js +1 -1
  109. package/Source/Scene/Cesium3DTile.js +8 -2
  110. package/Source/Scene/Cesium3DTileBatchTable.js +28 -28
  111. package/Source/Scene/Cesium3DTileContentType.js +19 -0
  112. package/Source/Scene/Cesium3DTilesVoxelProvider.js +494 -0
  113. package/Source/Scene/Cesium3DTileset.js +6 -1
  114. package/Source/Scene/Cesium3DTilesetMetadata.js +2 -2
  115. package/Source/Scene/ClassificationPrimitive.js +3 -8
  116. package/Source/Scene/ContentMetadata.js +2 -2
  117. package/Source/Scene/DebugAppearance.js +7 -9
  118. package/Source/Scene/DebugInspector.js +5 -5
  119. package/Source/Scene/DepthPlane.js +0 -6
  120. package/Source/Scene/DerivedCommand.js +15 -22
  121. package/Source/Scene/EllipsoidPrimitive.js +0 -7
  122. package/Source/Scene/Expression.js +1 -1
  123. package/Source/Scene/Globe.js +10 -0
  124. package/Source/Scene/GlobeSurfaceTileProvider.js +7 -0
  125. package/Source/Scene/GlobeTranslucencyState.js +6 -6
  126. package/Source/Scene/GltfImageLoader.js +1 -1
  127. package/Source/Scene/GltfVertexBufferLoader.js +10 -2
  128. package/Source/Scene/GroundPolylinePrimitive.js +2 -4
  129. package/Source/Scene/GroupMetadata.js +2 -2
  130. package/Source/Scene/ImplicitMetadataView.js +2 -2
  131. package/Source/Scene/ImplicitSubtreeCache.js +127 -0
  132. package/Source/Scene/ImplicitSubtreeMetadata.js +2 -2
  133. package/Source/Scene/ImplicitTileset.js +3 -2
  134. package/Source/Scene/InvertClassification.js +9 -10
  135. package/Source/Scene/KeyframeNode.js +47 -0
  136. package/Source/Scene/Material.js +6 -6
  137. package/Source/Scene/Megatexture.js +490 -0
  138. package/Source/Scene/MetadataClass.js +60 -25
  139. package/Source/Scene/MetadataClassProperty.js +132 -68
  140. package/Source/Scene/MetadataComponentType.js +78 -57
  141. package/Source/Scene/MetadataEnum.js +59 -23
  142. package/Source/Scene/MetadataEnumValue.js +49 -15
  143. package/Source/Scene/MetadataSchema.js +53 -24
  144. package/Source/Scene/MetadataSchemaLoader.js +2 -2
  145. package/Source/Scene/MetadataSemantic.js +8 -0
  146. package/Source/Scene/MetadataTableProperty.js +2 -2
  147. package/Source/Scene/MetadataType.js +6 -14
  148. package/Source/Scene/Model/CustomShader.js +1 -1
  149. package/Source/Scene/Model/FeatureIdPipelineStage.js +4 -4
  150. package/Source/Scene/Model/GeoJsonLoader.js +1 -1
  151. package/Source/Scene/Model/LightingModel.js +1 -1
  152. package/Source/Scene/Model/MetadataPipelineStage.js +1 -1
  153. package/Source/Scene/Model/Model.js +2 -3
  154. package/Source/Scene/Model/PickingPipelineStage.js +1 -1
  155. package/Source/Scene/Model/buildDrawCommand.js +19 -11
  156. package/Source/Scene/OIT.js +211 -119
  157. package/Source/Scene/PickDepth.js +2 -2
  158. package/Source/Scene/PointCloud.js +12 -12
  159. package/Source/Scene/PointCloudEyeDomeLighting.js +9 -4
  160. package/Source/Scene/PolylineCollection.js +2 -7
  161. package/Source/Scene/PolylineMaterialAppearance.js +2 -3
  162. package/Source/Scene/PostProcessStage.js +13 -13
  163. package/Source/Scene/PostProcessStageLibrary.js +3 -3
  164. package/Source/Scene/Primitive.js +22 -31
  165. package/Source/Scene/PropertyAttribute.js +2 -2
  166. package/Source/Scene/PropertyAttributeProperty.js +2 -2
  167. package/Source/Scene/PropertyTable.js +2 -2
  168. package/Source/Scene/PropertyTexture.js +2 -2
  169. package/Source/Scene/PropertyTextureProperty.js +2 -2
  170. package/Source/Scene/ResourceCache.js +9 -1
  171. package/Source/Scene/ResourceCacheKey.js +9 -1
  172. package/Source/Scene/Scene.js +17 -0
  173. package/Source/Scene/ShadowMap.js +7 -7
  174. package/Source/Scene/ShadowMapShader.js +9 -9
  175. package/Source/Scene/ShadowVolumeAppearance.js +1 -1
  176. package/Source/Scene/SpatialNode.js +375 -0
  177. package/Source/Scene/StructuralMetadata.js +2 -2
  178. package/Source/Scene/TextureAtlas.js +5 -3
  179. package/Source/Scene/TileMetadata.js +2 -2
  180. package/Source/Scene/TilesetMetadata.js +2 -2
  181. package/Source/Scene/Vector3DTilePolylines.js +1 -1
  182. package/Source/Scene/Vector3DTilePrimitive.js +2 -2
  183. package/Source/Scene/VoxelBoxShape.js +527 -0
  184. package/Source/Scene/VoxelContent.js +169 -0
  185. package/Source/Scene/VoxelCylinderShape.js +937 -0
  186. package/Source/Scene/VoxelEllipsoidShape.js +945 -0
  187. package/Source/Scene/VoxelPrimitive.js +1919 -0
  188. package/Source/Scene/VoxelProvider.js +255 -0
  189. package/Source/Scene/VoxelRenderResources.js +224 -0
  190. package/Source/Scene/VoxelShape.js +152 -0
  191. package/Source/Scene/VoxelShapeType.js +105 -0
  192. package/Source/Scene/VoxelTraversal.js +1144 -0
  193. package/Source/Scene/buildVoxelDrawCommands.js +116 -0
  194. package/Source/Scene/computeFlyToLocationForRectangle.js +10 -1
  195. package/Source/Scene/createElevationBandMaterial.js +10 -15
  196. package/Source/Scene/getClipAndStyleCode.js +1 -1
  197. package/Source/Scene/getClippingFunction.js +3 -3
  198. package/Source/Scene/parseBatchTable.js +18 -2
  199. package/Source/Scene/preprocess3DTileContent.js +8 -0
  200. package/Source/Scene/processVoxelProperties.js +455 -0
  201. package/Source/Shaders/AdjustTranslucentFS.glsl +9 -6
  202. package/Source/Shaders/AdjustTranslucentFS.js +9 -6
  203. package/Source/Shaders/Appearances/AllMaterialAppearanceFS.glsl +7 -7
  204. package/Source/Shaders/Appearances/AllMaterialAppearanceFS.js +7 -7
  205. package/Source/Shaders/Appearances/AllMaterialAppearanceVS.glsl +12 -12
  206. package/Source/Shaders/Appearances/AllMaterialAppearanceVS.js +12 -12
  207. package/Source/Shaders/Appearances/BasicMaterialAppearanceFS.glsl +4 -4
  208. package/Source/Shaders/Appearances/BasicMaterialAppearanceFS.js +4 -4
  209. package/Source/Shaders/Appearances/BasicMaterialAppearanceVS.glsl +6 -6
  210. package/Source/Shaders/Appearances/BasicMaterialAppearanceVS.js +6 -6
  211. package/Source/Shaders/Appearances/EllipsoidSurfaceAppearanceFS.glsl +5 -5
  212. package/Source/Shaders/Appearances/EllipsoidSurfaceAppearanceFS.js +5 -5
  213. package/Source/Shaders/Appearances/EllipsoidSurfaceAppearanceVS.glsl +7 -7
  214. package/Source/Shaders/Appearances/EllipsoidSurfaceAppearanceVS.js +7 -7
  215. package/Source/Shaders/Appearances/PerInstanceColorAppearanceFS.glsl +4 -4
  216. package/Source/Shaders/Appearances/PerInstanceColorAppearanceFS.js +4 -4
  217. package/Source/Shaders/Appearances/PerInstanceColorAppearanceVS.glsl +8 -8
  218. package/Source/Shaders/Appearances/PerInstanceColorAppearanceVS.js +8 -8
  219. package/Source/Shaders/Appearances/PerInstanceFlatColorAppearanceFS.glsl +2 -2
  220. package/Source/Shaders/Appearances/PerInstanceFlatColorAppearanceFS.js +2 -2
  221. package/Source/Shaders/Appearances/PerInstanceFlatColorAppearanceVS.glsl +5 -5
  222. package/Source/Shaders/Appearances/PerInstanceFlatColorAppearanceVS.js +5 -5
  223. package/Source/Shaders/Appearances/PolylineColorAppearanceVS.glsl +10 -10
  224. package/Source/Shaders/Appearances/PolylineColorAppearanceVS.js +10 -10
  225. package/Source/Shaders/Appearances/PolylineMaterialAppearanceVS.glsl +12 -12
  226. package/Source/Shaders/Appearances/PolylineMaterialAppearanceVS.js +12 -12
  227. package/Source/Shaders/Appearances/TexturedMaterialAppearanceFS.glsl +5 -5
  228. package/Source/Shaders/Appearances/TexturedMaterialAppearanceFS.js +5 -5
  229. package/Source/Shaders/Appearances/TexturedMaterialAppearanceVS.glsl +8 -8
  230. package/Source/Shaders/Appearances/TexturedMaterialAppearanceVS.js +8 -8
  231. package/Source/Shaders/BillboardCollectionFS.glsl +15 -15
  232. package/Source/Shaders/BillboardCollectionFS.js +15 -15
  233. package/Source/Shaders/BillboardCollectionVS.glsl +24 -24
  234. package/Source/Shaders/BillboardCollectionVS.js +24 -24
  235. package/Source/Shaders/BrdfLutGeneratorFS.glsl +2 -2
  236. package/Source/Shaders/BrdfLutGeneratorFS.js +2 -2
  237. package/Source/Shaders/Builtin/Constants/passOverlay.glsl +1 -1
  238. package/Source/Shaders/Builtin/Constants/passOverlay.js +1 -1
  239. package/Source/Shaders/Builtin/Constants/passVoxels.glsl +9 -0
  240. package/Source/Shaders/Builtin/Constants/passVoxels.js +11 -0
  241. package/Source/Shaders/Builtin/CzmBuiltins.js +19 -15
  242. package/Source/Shaders/Builtin/Functions/depthClamp.glsl +3 -3
  243. package/Source/Shaders/Builtin/Functions/depthClamp.js +3 -3
  244. package/Source/Shaders/Builtin/Functions/getWaterNoise.glsl +4 -4
  245. package/Source/Shaders/Builtin/Functions/getWaterNoise.js +4 -4
  246. package/Source/Shaders/Builtin/Functions/phong.glsl +1 -1
  247. package/Source/Shaders/Builtin/Functions/phong.js +1 -1
  248. package/Source/Shaders/Builtin/Functions/readDepth.glsl +1 -1
  249. package/Source/Shaders/Builtin/Functions/readDepth.js +1 -1
  250. package/Source/Shaders/Builtin/Functions/sampleOctahedralProjection.glsl +5 -5
  251. package/Source/Shaders/Builtin/Functions/sampleOctahedralProjection.js +5 -5
  252. package/Source/Shaders/Builtin/Functions/shadowDepthCompare.glsl +3 -3
  253. package/Source/Shaders/Builtin/Functions/shadowDepthCompare.js +3 -3
  254. package/Source/Shaders/Builtin/Functions/tangentToEyeSpaceMatrix.glsl +1 -1
  255. package/Source/Shaders/Builtin/Functions/tangentToEyeSpaceMatrix.js +1 -1
  256. package/Source/Shaders/Builtin/Functions/textureCube.glsl +17 -0
  257. package/Source/Shaders/Builtin/Functions/textureCube.js +18 -0
  258. package/Source/Shaders/Builtin/Functions/translateRelativeToEye.glsl +2 -2
  259. package/Source/Shaders/Builtin/Functions/translateRelativeToEye.js +2 -2
  260. package/Source/Shaders/Builtin/Functions/vertexLogDepth.glsl +2 -2
  261. package/Source/Shaders/Builtin/Functions/vertexLogDepth.js +2 -2
  262. package/Source/Shaders/Builtin/Functions/windowToEyeCoordinates.glsl +55 -43
  263. package/Source/Shaders/Builtin/Functions/windowToEyeCoordinates.js +55 -43
  264. package/Source/Shaders/Builtin/Functions/writeDepthClamp.glsl +5 -8
  265. package/Source/Shaders/Builtin/Functions/writeDepthClamp.js +5 -8
  266. package/Source/Shaders/Builtin/Functions/writeLogDepth.glsl +6 -6
  267. package/Source/Shaders/Builtin/Functions/writeLogDepth.js +6 -6
  268. package/Source/Shaders/CloudCollectionFS.glsl +18 -18
  269. package/Source/Shaders/CloudCollectionFS.js +18 -18
  270. package/Source/Shaders/CloudCollectionVS.glsl +11 -11
  271. package/Source/Shaders/CloudCollectionVS.js +11 -11
  272. package/Source/Shaders/CloudNoiseFS.glsl +5 -5
  273. package/Source/Shaders/CloudNoiseFS.js +5 -5
  274. package/Source/Shaders/CloudNoiseVS.glsl +2 -2
  275. package/Source/Shaders/CloudNoiseVS.js +2 -2
  276. package/Source/Shaders/CompareAndPackTranslucentDepth.glsl +4 -4
  277. package/Source/Shaders/CompareAndPackTranslucentDepth.js +4 -4
  278. package/Source/Shaders/CompositeOITFS.glsl +6 -6
  279. package/Source/Shaders/CompositeOITFS.js +6 -6
  280. package/Source/Shaders/DepthPlaneFS.glsl +2 -2
  281. package/Source/Shaders/DepthPlaneFS.js +2 -2
  282. package/Source/Shaders/DepthPlaneVS.glsl +2 -2
  283. package/Source/Shaders/DepthPlaneVS.js +2 -2
  284. package/Source/Shaders/EllipsoidFS.glsl +5 -13
  285. package/Source/Shaders/EllipsoidFS.js +6 -14
  286. package/Source/Shaders/EllipsoidVS.glsl +2 -2
  287. package/Source/Shaders/EllipsoidVS.js +2 -2
  288. package/Source/Shaders/FXAA3_11.glsl +4 -4
  289. package/Source/Shaders/FXAA3_11.js +4 -4
  290. package/Source/Shaders/GlobeFS.glsl +17 -16
  291. package/Source/Shaders/GlobeFS.js +17 -16
  292. package/Source/Shaders/GlobeVS.glsl +17 -17
  293. package/Source/Shaders/GlobeVS.js +17 -17
  294. package/Source/Shaders/Materials/AspectRampMaterial.glsl +1 -1
  295. package/Source/Shaders/Materials/AspectRampMaterial.js +1 -1
  296. package/Source/Shaders/Materials/BumpMapMaterial.glsl +3 -3
  297. package/Source/Shaders/Materials/BumpMapMaterial.js +3 -3
  298. package/Source/Shaders/Materials/ElevationBandMaterial.glsl +3 -3
  299. package/Source/Shaders/Materials/ElevationBandMaterial.js +3 -3
  300. package/Source/Shaders/Materials/ElevationContourMaterial.glsl +2 -1
  301. package/Source/Shaders/Materials/ElevationContourMaterial.js +2 -1
  302. package/Source/Shaders/Materials/ElevationRampMaterial.glsl +1 -1
  303. package/Source/Shaders/Materials/ElevationRampMaterial.js +1 -1
  304. package/Source/Shaders/Materials/GridMaterial.glsl +3 -2
  305. package/Source/Shaders/Materials/GridMaterial.js +3 -2
  306. package/Source/Shaders/Materials/NormalMapMaterial.glsl +1 -1
  307. package/Source/Shaders/Materials/NormalMapMaterial.js +1 -1
  308. package/Source/Shaders/Materials/PolylineArrowMaterial.glsl +3 -2
  309. package/Source/Shaders/Materials/PolylineArrowMaterial.js +3 -2
  310. package/Source/Shaders/Materials/PolylineDashMaterial.glsl +1 -1
  311. package/Source/Shaders/Materials/PolylineDashMaterial.js +1 -1
  312. package/Source/Shaders/Materials/PolylineOutlineMaterial.glsl +1 -1
  313. package/Source/Shaders/Materials/PolylineOutlineMaterial.js +1 -1
  314. package/Source/Shaders/Materials/SlopeRampMaterial.glsl +1 -1
  315. package/Source/Shaders/Materials/SlopeRampMaterial.js +1 -1
  316. package/Source/Shaders/Materials/Water.glsl +1 -1
  317. package/Source/Shaders/Materials/Water.js +1 -1
  318. package/Source/Shaders/Model/ImageBasedLightingStageFS.glsl +3 -3
  319. package/Source/Shaders/Model/ImageBasedLightingStageFS.js +3 -3
  320. package/Source/Shaders/Model/MaterialStageFS.glsl +10 -10
  321. package/Source/Shaders/Model/MaterialStageFS.js +10 -10
  322. package/Source/Shaders/Model/ModelClippingPlanesStageFS.glsl +3 -3
  323. package/Source/Shaders/Model/ModelClippingPlanesStageFS.js +3 -3
  324. package/Source/Shaders/Model/ModelFS.glsl +1 -1
  325. package/Source/Shaders/Model/ModelFS.js +1 -1
  326. package/Source/Shaders/Model/PrimitiveOutlineStageFS.glsl +3 -3
  327. package/Source/Shaders/Model/PrimitiveOutlineStageFS.js +3 -3
  328. package/Source/Shaders/Model/SelectedFeatureIdStageCommon.glsl +1 -1
  329. package/Source/Shaders/Model/SelectedFeatureIdStageCommon.js +1 -1
  330. package/Source/Shaders/OctahedralProjectionAtlasFS.glsl +8 -8
  331. package/Source/Shaders/OctahedralProjectionAtlasFS.js +8 -8
  332. package/Source/Shaders/OctahedralProjectionFS.glsl +4 -4
  333. package/Source/Shaders/OctahedralProjectionFS.js +4 -4
  334. package/Source/Shaders/OctahedralProjectionVS.glsl +3 -3
  335. package/Source/Shaders/OctahedralProjectionVS.js +3 -3
  336. package/Source/Shaders/PointPrimitiveCollectionFS.glsl +6 -6
  337. package/Source/Shaders/PointPrimitiveCollectionFS.js +6 -6
  338. package/Source/Shaders/PointPrimitiveCollectionVS.glsl +17 -14
  339. package/Source/Shaders/PointPrimitiveCollectionVS.js +17 -14
  340. package/Source/Shaders/PolylineFS.glsl +3 -3
  341. package/Source/Shaders/PolylineFS.js +3 -3
  342. package/Source/Shaders/PolylineShadowVolumeFS.glsl +12 -16
  343. package/Source/Shaders/PolylineShadowVolumeFS.js +12 -16
  344. package/Source/Shaders/PolylineShadowVolumeMorphFS.glsl +8 -8
  345. package/Source/Shaders/PolylineShadowVolumeMorphFS.js +8 -8
  346. package/Source/Shaders/PolylineShadowVolumeMorphVS.glsl +20 -20
  347. package/Source/Shaders/PolylineShadowVolumeMorphVS.js +20 -20
  348. package/Source/Shaders/PolylineShadowVolumeVS.glsl +20 -20
  349. package/Source/Shaders/PolylineShadowVolumeVS.js +20 -20
  350. package/Source/Shaders/PolylineVS.glsl +17 -17
  351. package/Source/Shaders/PolylineVS.js +17 -17
  352. package/Source/Shaders/PostProcessStages/AcesTonemappingStage.glsl +4 -4
  353. package/Source/Shaders/PostProcessStages/AcesTonemappingStage.js +4 -4
  354. package/Source/Shaders/PostProcessStages/AdditiveBlend.glsl +4 -4
  355. package/Source/Shaders/PostProcessStages/AdditiveBlend.js +4 -4
  356. package/Source/Shaders/PostProcessStages/AmbientOcclusionGenerate.glsl +4 -4
  357. package/Source/Shaders/PostProcessStages/AmbientOcclusionGenerate.js +4 -4
  358. package/Source/Shaders/PostProcessStages/AmbientOcclusionModulate.glsl +4 -4
  359. package/Source/Shaders/PostProcessStages/AmbientOcclusionModulate.js +4 -4
  360. package/Source/Shaders/PostProcessStages/BlackAndWhite.glsl +4 -4
  361. package/Source/Shaders/PostProcessStages/BlackAndWhite.js +4 -4
  362. package/Source/Shaders/PostProcessStages/BloomComposite.glsl +5 -5
  363. package/Source/Shaders/PostProcessStages/BloomComposite.js +5 -5
  364. package/Source/Shaders/PostProcessStages/BrightPass.glsl +3 -3
  365. package/Source/Shaders/PostProcessStages/BrightPass.js +3 -3
  366. package/Source/Shaders/PostProcessStages/Brightness.glsl +3 -3
  367. package/Source/Shaders/PostProcessStages/Brightness.js +3 -3
  368. package/Source/Shaders/PostProcessStages/CompositeTranslucentClassification.glsl +5 -5
  369. package/Source/Shaders/PostProcessStages/CompositeTranslucentClassification.js +5 -5
  370. package/Source/Shaders/PostProcessStages/ContrastBias.glsl +3 -3
  371. package/Source/Shaders/PostProcessStages/ContrastBias.js +3 -3
  372. package/Source/Shaders/PostProcessStages/DepthOfField.glsl +2 -2
  373. package/Source/Shaders/PostProcessStages/DepthOfField.js +2 -2
  374. package/Source/Shaders/PostProcessStages/DepthView.glsl +2 -2
  375. package/Source/Shaders/PostProcessStages/DepthView.js +2 -2
  376. package/Source/Shaders/PostProcessStages/DepthViewPacked.glsl +3 -3
  377. package/Source/Shaders/PostProcessStages/DepthViewPacked.js +3 -3
  378. package/Source/Shaders/PostProcessStages/EdgeDetection.glsl +7 -7
  379. package/Source/Shaders/PostProcessStages/EdgeDetection.js +7 -7
  380. package/Source/Shaders/PostProcessStages/FXAA.glsl +3 -3
  381. package/Source/Shaders/PostProcessStages/FXAA.js +3 -3
  382. package/Source/Shaders/PostProcessStages/FilmicTonemapping.glsl +4 -4
  383. package/Source/Shaders/PostProcessStages/FilmicTonemapping.js +4 -4
  384. package/Source/Shaders/PostProcessStages/GaussianBlur1D.glsl +5 -5
  385. package/Source/Shaders/PostProcessStages/GaussianBlur1D.js +5 -5
  386. package/Source/Shaders/PostProcessStages/LensFlare.glsl +13 -13
  387. package/Source/Shaders/PostProcessStages/LensFlare.js +13 -13
  388. package/Source/Shaders/PostProcessStages/ModifiedReinhardTonemapping.glsl +4 -4
  389. package/Source/Shaders/PostProcessStages/ModifiedReinhardTonemapping.js +4 -4
  390. package/Source/Shaders/PostProcessStages/NightVision.glsl +3 -3
  391. package/Source/Shaders/PostProcessStages/NightVision.js +3 -3
  392. package/Source/Shaders/PostProcessStages/PassThrough.glsl +2 -2
  393. package/Source/Shaders/PostProcessStages/PassThrough.js +2 -2
  394. package/Source/Shaders/PostProcessStages/PassThroughDepth.glsl +2 -2
  395. package/Source/Shaders/PostProcessStages/PassThroughDepth.js +2 -2
  396. package/Source/Shaders/PostProcessStages/PointCloudEyeDomeLighting.glsl +7 -9
  397. package/Source/Shaders/PostProcessStages/PointCloudEyeDomeLighting.js +8 -10
  398. package/Source/Shaders/PostProcessStages/ReinhardTonemapping.glsl +4 -4
  399. package/Source/Shaders/PostProcessStages/ReinhardTonemapping.js +4 -4
  400. package/Source/Shaders/PostProcessStages/Silhouette.glsl +4 -4
  401. package/Source/Shaders/PostProcessStages/Silhouette.js +4 -4
  402. package/Source/Shaders/ReprojectWebMercatorFS.glsl +2 -2
  403. package/Source/Shaders/ReprojectWebMercatorFS.js +2 -2
  404. package/Source/Shaders/ReprojectWebMercatorVS.glsl +3 -3
  405. package/Source/Shaders/ReprojectWebMercatorVS.js +3 -3
  406. package/Source/Shaders/ShadowVolumeAppearanceFS.glsl +19 -23
  407. package/Source/Shaders/ShadowVolumeAppearanceFS.js +20 -24
  408. package/Source/Shaders/ShadowVolumeAppearanceVS.glsl +12 -12
  409. package/Source/Shaders/ShadowVolumeAppearanceVS.js +12 -12
  410. package/Source/Shaders/ShadowVolumeFS.glsl +2 -6
  411. package/Source/Shaders/ShadowVolumeFS.js +3 -7
  412. package/Source/Shaders/SkyAtmosphereFS.glsl +6 -6
  413. package/Source/Shaders/SkyAtmosphereFS.js +6 -6
  414. package/Source/Shaders/SkyAtmosphereVS.glsl +6 -6
  415. package/Source/Shaders/SkyAtmosphereVS.js +6 -6
  416. package/Source/Shaders/SkyBoxFS.glsl +3 -3
  417. package/Source/Shaders/SkyBoxFS.js +3 -3
  418. package/Source/Shaders/SkyBoxVS.glsl +2 -2
  419. package/Source/Shaders/SkyBoxVS.js +2 -2
  420. package/Source/Shaders/SunFS.glsl +3 -3
  421. package/Source/Shaders/SunFS.js +3 -3
  422. package/Source/Shaders/SunTextureFS.glsl +2 -2
  423. package/Source/Shaders/SunTextureFS.js +2 -2
  424. package/Source/Shaders/SunVS.glsl +2 -2
  425. package/Source/Shaders/SunVS.js +2 -2
  426. package/Source/Shaders/Vector3DTileClampedPolylinesFS.glsl +9 -13
  427. package/Source/Shaders/Vector3DTileClampedPolylinesFS.js +9 -13
  428. package/Source/Shaders/Vector3DTileClampedPolylinesVS.glsl +12 -12
  429. package/Source/Shaders/Vector3DTileClampedPolylinesVS.js +12 -12
  430. package/Source/Shaders/Vector3DTilePolylinesVS.glsl +5 -5
  431. package/Source/Shaders/Vector3DTilePolylinesVS.js +5 -5
  432. package/Source/Shaders/VectorTileVS.glsl +2 -2
  433. package/Source/Shaders/VectorTileVS.js +2 -2
  434. package/Source/Shaders/ViewportQuadFS.glsl +2 -2
  435. package/Source/Shaders/ViewportQuadFS.js +2 -2
  436. package/Source/Shaders/ViewportQuadVS.glsl +3 -3
  437. package/Source/Shaders/ViewportQuadVS.js +3 -3
  438. package/Source/Shaders/Voxels/IntersectBox.glsl +79 -0
  439. package/Source/Shaders/Voxels/IntersectBox.js +81 -0
  440. package/Source/Shaders/Voxels/IntersectClippingPlanes.glsl +70 -0
  441. package/Source/Shaders/Voxels/IntersectClippingPlanes.js +72 -0
  442. package/Source/Shaders/Voxels/IntersectCylinder.glsl +273 -0
  443. package/Source/Shaders/Voxels/IntersectCylinder.js +275 -0
  444. package/Source/Shaders/Voxels/IntersectDepth.glsl +23 -0
  445. package/Source/Shaders/Voxels/IntersectDepth.js +25 -0
  446. package/Source/Shaders/Voxels/IntersectEllipsoid.glsl +347 -0
  447. package/Source/Shaders/Voxels/IntersectEllipsoid.js +349 -0
  448. package/Source/Shaders/Voxels/Intersection.glsl +54 -0
  449. package/Source/Shaders/Voxels/Intersection.js +56 -0
  450. package/Source/Shaders/Voxels/IntersectionUtils.glsl +151 -0
  451. package/Source/Shaders/Voxels/IntersectionUtils.js +153 -0
  452. package/Source/Shaders/Voxels/Megatexture.glsl +136 -0
  453. package/Source/Shaders/Voxels/Megatexture.js +138 -0
  454. package/Source/Shaders/Voxels/Octree.glsl +221 -0
  455. package/Source/Shaders/Voxels/Octree.js +223 -0
  456. package/Source/Shaders/Voxels/VoxelFS.glsl +150 -0
  457. package/Source/Shaders/Voxels/VoxelFS.js +152 -0
  458. package/Source/Shaders/Voxels/VoxelVS.glsl +11 -0
  459. package/Source/Shaders/Voxels/VoxelVS.js +13 -0
  460. package/Source/Shaders/Voxels/convertUvToBox.glsl +16 -0
  461. package/Source/Shaders/Voxels/convertUvToBox.js +18 -0
  462. package/Source/Shaders/Voxels/convertUvToCylinder.glsl +75 -0
  463. package/Source/Shaders/Voxels/convertUvToCylinder.js +77 -0
  464. package/Source/Shaders/Voxels/convertUvToEllipsoid.glsl +130 -0
  465. package/Source/Shaders/Voxels/convertUvToEllipsoid.js +132 -0
  466. package/Source/ThirdParty/Workers/z-worker-pako.js +0 -0
  467. package/Source/WorkersES6/decodeDraco.js +9 -1
  468. package/index.d.ts +3148 -2297
  469. package/index.js +1118 -1085
  470. package/package.json +3 -4
  471. package/Build/Workers/PolygonPipeline-774a8aaf.js +0 -1341
  472. package/Source/Renderer/modernizeShader.js +0 -242
@@ -0,0 +1,223 @@
1
+ //This file is automatically rebuilt by the Cesium build process.
2
+ export default "// These octree flags must be in sync with GpuOctreeFlag in VoxelTraversal.js\n\
3
+ #define OCTREE_FLAG_INTERNAL 0\n\
4
+ #define OCTREE_FLAG_LEAF 1\n\
5
+ #define OCTREE_FLAG_PACKED_LEAF_FROM_PARENT 2\n\
6
+ \n\
7
+ #define OCTREE_MAX_LEVELS 32 // Harcoded value because GLSL doesn't like variable length loops\n\
8
+ \n\
9
+ uniform sampler2D u_octreeInternalNodeTexture;\n\
10
+ uniform vec2 u_octreeInternalNodeTexelSizeUv;\n\
11
+ uniform int u_octreeInternalNodeTilesPerRow;\n\
12
+ uniform sampler2D u_octreeLeafNodeTexture;\n\
13
+ uniform vec2 u_octreeLeafNodeTexelSizeUv;\n\
14
+ uniform int u_octreeLeafNodeTilesPerRow;\n\
15
+ \n\
16
+ uniform float u_stepSize;\n\
17
+ \n\
18
+ struct OctreeNodeData {\n\
19
+ int data;\n\
20
+ int flag;\n\
21
+ };\n\
22
+ \n\
23
+ struct TraversalData {\n\
24
+ float stepT;\n\
25
+ ivec4 octreeCoords;\n\
26
+ int parentOctreeIndex;\n\
27
+ };\n\
28
+ \n\
29
+ struct SampleData {\n\
30
+ int megatextureIndex;\n\
31
+ bool usingParentMegatextureIndex;\n\
32
+ vec3 tileUv;\n\
33
+ #if (SAMPLE_COUNT > 1)\n\
34
+ float weight;\n\
35
+ #endif\n\
36
+ };\n\
37
+ \n\
38
+ // Integer mod: For WebGL1 only\n\
39
+ int intMod(in int a, in int b) {\n\
40
+ return a - (b * (a / b));\n\
41
+ }\n\
42
+ int normU8_toInt(in float value) {\n\
43
+ return int(value * 255.0);\n\
44
+ }\n\
45
+ int normU8x2_toInt(in vec2 value) {\n\
46
+ return int(value.x * 255.0) + 256 * int(value.y * 255.0);\n\
47
+ }\n\
48
+ float normU8x2_toFloat(in vec2 value) {\n\
49
+ return float(normU8x2_toInt(value)) / 65535.0;\n\
50
+ }\n\
51
+ \n\
52
+ OctreeNodeData getOctreeNodeData(in vec2 octreeUv) {\n\
53
+ vec4 texData = texture(u_octreeInternalNodeTexture, octreeUv);\n\
54
+ \n\
55
+ OctreeNodeData data;\n\
56
+ data.data = normU8x2_toInt(texData.xy);\n\
57
+ data.flag = normU8x2_toInt(texData.zw);\n\
58
+ return data;\n\
59
+ }\n\
60
+ \n\
61
+ OctreeNodeData getOctreeChildData(in int parentOctreeIndex, in ivec3 childCoord) {\n\
62
+ int childIndex = childCoord.z * 4 + childCoord.y * 2 + childCoord.x;\n\
63
+ int octreeCoordX = intMod(parentOctreeIndex, u_octreeInternalNodeTilesPerRow) * 9 + 1 + childIndex;\n\
64
+ int octreeCoordY = parentOctreeIndex / u_octreeInternalNodeTilesPerRow;\n\
65
+ vec2 octreeUv = u_octreeInternalNodeTexelSizeUv * vec2(float(octreeCoordX) + 0.5, float(octreeCoordY) + 0.5);\n\
66
+ return getOctreeNodeData(octreeUv);\n\
67
+ }\n\
68
+ \n\
69
+ int getOctreeParentIndex(in int octreeIndex) {\n\
70
+ int octreeCoordX = intMod(octreeIndex, u_octreeInternalNodeTilesPerRow) * 9;\n\
71
+ int octreeCoordY = octreeIndex / u_octreeInternalNodeTilesPerRow;\n\
72
+ vec2 octreeUv = u_octreeInternalNodeTexelSizeUv * vec2(float(octreeCoordX) + 0.5, float(octreeCoordY) + 0.5);\n\
73
+ vec4 parentData = texture(u_octreeInternalNodeTexture, octreeUv);\n\
74
+ int parentOctreeIndex = normU8x2_toInt(parentData.xy);\n\
75
+ return parentOctreeIndex;\n\
76
+ }\n\
77
+ \n\
78
+ /**\n\
79
+ * Convert a position in the uv-space of the tileset bounding shape\n\
80
+ * into the uv-space of a tile within the tileset\n\
81
+ */\n\
82
+ vec3 getTileUv(in vec3 shapePosition, in ivec4 octreeCoords) {\n\
83
+ // TODO: use bit-shifting (only in WebGL2)\n\
84
+ float dimAtLevel = pow(2.0, float(octreeCoords.w));\n\
85
+ return shapePosition * dimAtLevel - vec3(octreeCoords.xyz);\n\
86
+ }\n\
87
+ \n\
88
+ void setSampleUv(in vec3 shapePosition, in ivec4 octreeCoords, inout SampleData sampleData) {\n\
89
+ ivec4 sampleCoords = sampleData.usingParentMegatextureIndex\n\
90
+ ? ivec4(octreeCoords.xyz / 2, octreeCoords.w - 1)\n\
91
+ : octreeCoords;\n\
92
+ sampleData.tileUv = getTileUv(shapePosition, sampleCoords);\n\
93
+ }\n\
94
+ \n\
95
+ void getOctreeLeafSampleData(in OctreeNodeData data, out SampleData sampleData) {\n\
96
+ sampleData.megatextureIndex = data.data;\n\
97
+ sampleData.usingParentMegatextureIndex = data.flag == OCTREE_FLAG_PACKED_LEAF_FROM_PARENT;\n\
98
+ }\n\
99
+ \n\
100
+ #if (SAMPLE_COUNT > 1)\n\
101
+ void getOctreeLeafSampleDatas(in OctreeNodeData data, out SampleData sampleData0, out SampleData sampleData1) {\n\
102
+ int leafIndex = data.data;\n\
103
+ int leafNodeTexelCount = 2;\n\
104
+ // Adding 0.5 moves to the center of the texel\n\
105
+ float leafCoordXStart = float(intMod(leafIndex, u_octreeLeafNodeTilesPerRow) * leafNodeTexelCount) + 0.5;\n\
106
+ float leafCoordY = float(leafIndex / u_octreeLeafNodeTilesPerRow) + 0.5;\n\
107
+ \n\
108
+ vec2 leafUv0 = u_octreeLeafNodeTexelSizeUv * vec2(leafCoordXStart + 0.0, leafCoordY);\n\
109
+ vec2 leafUv1 = u_octreeLeafNodeTexelSizeUv * vec2(leafCoordXStart + 1.0, leafCoordY);\n\
110
+ vec4 leafData0 = texture(u_octreeLeafNodeTexture, leafUv0);\n\
111
+ vec4 leafData1 = texture(u_octreeLeafNodeTexture, leafUv1);\n\
112
+ \n\
113
+ float lerp = normU8x2_toFloat(leafData0.xy);\n\
114
+ \n\
115
+ sampleData0.megatextureIndex = normU8x2_toInt(leafData1.xy);\n\
116
+ sampleData1.megatextureIndex = normU8x2_toInt(leafData1.zw);\n\
117
+ // TODO: this looks wrong? Should be comparing to OCTREE_FLAG_PACKED_LEAF_FROM_PARENT\n\
118
+ sampleData0.usingParentMegatextureIndex = normU8_toInt(leafData0.z) == 1;\n\
119
+ sampleData1.usingParentMegatextureIndex = normU8_toInt(leafData0.w) == 1;\n\
120
+ sampleData0.weight = 1.0 - lerp;\n\
121
+ sampleData1.weight = lerp;\n\
122
+ }\n\
123
+ #endif\n\
124
+ \n\
125
+ void traverseOctreeDownwards(in vec3 shapePosition, inout TraversalData traversalData, out SampleData sampleDatas[SAMPLE_COUNT]) {\n\
126
+ float sizeAtLevel = 1.0 / pow(2.0, float(traversalData.octreeCoords.w));\n\
127
+ vec3 start = vec3(traversalData.octreeCoords.xyz) * sizeAtLevel;\n\
128
+ vec3 end = start + vec3(sizeAtLevel);\n\
129
+ \n\
130
+ for (int i = 0; i < OCTREE_MAX_LEVELS; ++i) {\n\
131
+ // Find out which octree child contains the position\n\
132
+ // 0 if before center, 1 if after\n\
133
+ vec3 center = 0.5 * (start + end);\n\
134
+ vec3 childCoord = step(center, shapePosition);\n\
135
+ \n\
136
+ OctreeNodeData childData = getOctreeChildData(traversalData.parentOctreeIndex, ivec3(childCoord));\n\
137
+ \n\
138
+ // Get octree coords for the next level down\n\
139
+ ivec4 octreeCoords = traversalData.octreeCoords;\n\
140
+ traversalData.octreeCoords = ivec4(octreeCoords.xyz * 2 + ivec3(childCoord), octreeCoords.w + 1);\n\
141
+ \n\
142
+ if (childData.flag == OCTREE_FLAG_INTERNAL) {\n\
143
+ // interior tile - keep going deeper\n\
144
+ start = mix(start, center, childCoord);\n\
145
+ end = mix(center, end, childCoord);\n\
146
+ traversalData.parentOctreeIndex = childData.data;\n\
147
+ } else {\n\
148
+ // leaf tile - stop traversing\n\
149
+ float dimAtLevel = pow(2.0, float(traversalData.octreeCoords.w));\n\
150
+ traversalData.stepT = u_stepSize / dimAtLevel;\n\
151
+ #if (SAMPLE_COUNT == 1)\n\
152
+ getOctreeLeafSampleData(childData, sampleDatas[0]);\n\
153
+ setSampleUv(shapePosition, traversalData.octreeCoords, sampleDatas[0]);\n\
154
+ #else\n\
155
+ getOctreeLeafSampleDatas(childData, sampleDatas[0], sampleDatas[1]);\n\
156
+ setSampleUv(shapePosition, traversalData.octreeCoords, sampleDatas[0]);\n\
157
+ setSampleUv(shapePosition, traversalData.octreeCoords, sampleDatas[1]);\n\
158
+ #endif\n\
159
+ return;\n\
160
+ }\n\
161
+ }\n\
162
+ }\n\
163
+ \n\
164
+ /**\n\
165
+ * Transform a given position to an octree tile coordinate and a position within that tile,\n\
166
+ * and find the corresponding megatexture index and texture coordinates\n\
167
+ */\n\
168
+ void traverseOctreeFromBeginning(in vec3 shapePosition, out TraversalData traversalData, out SampleData sampleDatas[SAMPLE_COUNT]) {\n\
169
+ traversalData.octreeCoords = ivec4(0);\n\
170
+ traversalData.parentOctreeIndex = 0;\n\
171
+ \n\
172
+ OctreeNodeData rootData = getOctreeNodeData(vec2(0.0));\n\
173
+ if (rootData.flag == OCTREE_FLAG_LEAF) {\n\
174
+ // No child data, only the root tile has data\n\
175
+ traversalData.stepT = u_stepSize;\n\
176
+ #if (SAMPLE_COUNT == 1)\n\
177
+ getOctreeLeafSampleData(rootData, sampleDatas[0]);\n\
178
+ setSampleUv(shapePosition, traversalData.octreeCoords, sampleDatas[0]);\n\
179
+ #else\n\
180
+ getOctreeLeafSampleDatas(rootData, sampleDatas[0], sampleDatas[1]);\n\
181
+ setSampleUv(shapePosition, traversalData.octreeCoords, sampleDatas[0]);\n\
182
+ setSampleUv(shapePosition, traversalData.octreeCoords, sampleDatas[1]);\n\
183
+ #endif\n\
184
+ } else {\n\
185
+ traverseOctreeDownwards(shapePosition, traversalData, sampleDatas);\n\
186
+ }\n\
187
+ }\n\
188
+ \n\
189
+ bool inRange(in vec3 v, in vec3 minVal, in vec3 maxVal) {\n\
190
+ return clamp(v, minVal, maxVal) == v;\n\
191
+ }\n\
192
+ \n\
193
+ bool insideTile(in vec3 shapePosition, in ivec4 octreeCoords) {\n\
194
+ vec3 tileUv = getTileUv(shapePosition, octreeCoords);\n\
195
+ bool inside = inRange(tileUv, vec3(0.0), vec3(1.0));\n\
196
+ // Assume (!) the position is always inside the root tile.\n\
197
+ return inside || octreeCoords.w == 0;\n\
198
+ }\n\
199
+ \n\
200
+ void traverseOctreeFromExisting(in vec3 shapePosition, inout TraversalData traversalData, inout SampleData sampleDatas[SAMPLE_COUNT]) {\n\
201
+ if (insideTile(shapePosition, traversalData.octreeCoords)) {\n\
202
+ for (int i = 0; i < SAMPLE_COUNT; i++) {\n\
203
+ setSampleUv(shapePosition, traversalData.octreeCoords, sampleDatas[i]);\n\
204
+ }\n\
205
+ } else {\n\
206
+ // Go up tree\n\
207
+ for (int i = 0; i < OCTREE_MAX_LEVELS; ++i)\n\
208
+ {\n\
209
+ traversalData.octreeCoords.xyz /= 2;\n\
210
+ traversalData.octreeCoords.w -= 1;\n\
211
+ \n\
212
+ if (!insideTile(shapePosition, traversalData.octreeCoords)) {\n\
213
+ traversalData.parentOctreeIndex = getOctreeParentIndex(traversalData.parentOctreeIndex);\n\
214
+ } else {\n\
215
+ break;\n\
216
+ }\n\
217
+ }\n\
218
+ \n\
219
+ // Go down tree\n\
220
+ traverseOctreeDownwards(shapePosition, traversalData, sampleDatas);\n\
221
+ }\n\
222
+ }\n\
223
+ ";
@@ -0,0 +1,150 @@
1
+ // See Intersection.glsl for the definition of intersectScene
2
+ // See IntersectionUtils.glsl for the definition of nextIntersection
3
+ // See convertUvToBox.glsl, convertUvToCylinder.glsl, or convertUvToEllipsoid.glsl
4
+ // for the definition of convertUvToShapeUvSpace. The appropriate function is
5
+ // selected based on the VoxelPrimitive shape type, and added to the shader in
6
+ // Scene/VoxelRenderResources.js.
7
+ // See Octree.glsl for the definitions of TraversalData, SampleData,
8
+ // traverseOctreeFromBeginning, and traverseOctreeFromExisting
9
+ // See Megatexture.glsl for the definition of accumulatePropertiesFromMegatexture
10
+
11
+ #define STEP_COUNT_MAX 1000 // Harcoded value because GLSL doesn't like variable length loops
12
+ #define ALPHA_ACCUM_MAX 0.98 // Must be > 0.0 and <= 1.0
13
+
14
+ uniform mat3 u_transformDirectionViewToLocal;
15
+ uniform vec3 u_cameraPositionUv;
16
+
17
+ #if defined(PICKING)
18
+ uniform vec4 u_pickColor;
19
+ #endif
20
+
21
+ #if defined(JITTER)
22
+ float hash(vec2 p)
23
+ {
24
+ vec3 p3 = fract(vec3(p.xyx) * 50.0); // magic number = hashscale
25
+ p3 += dot(p3, p3.yzx + 19.19);
26
+ return fract((p3.x + p3.y) * p3.z);
27
+ }
28
+ #endif
29
+
30
+ void main()
31
+ {
32
+ vec4 fragCoord = gl_FragCoord;
33
+ vec2 screenCoord = (fragCoord.xy - czm_viewport.xy) / czm_viewport.zw; // [0,1]
34
+ vec3 eyeDirection = normalize(czm_windowToEyeCoordinates(fragCoord).xyz);
35
+ vec3 viewDirWorld = normalize(czm_inverseViewRotation * eyeDirection); // normalize again just in case
36
+ vec3 viewDirUv = normalize(u_transformDirectionViewToLocal * eyeDirection); // normalize again just in case
37
+ vec3 viewPosUv = u_cameraPositionUv;
38
+
39
+ Intersections ix;
40
+ vec2 entryExitT = intersectScene(screenCoord, viewPosUv, viewDirUv, ix);
41
+
42
+ // Exit early if the scene was completely missed.
43
+ if (entryExitT.x == NO_HIT) {
44
+ discard;
45
+ }
46
+
47
+ float currT = entryExitT.x;
48
+ float endT = entryExitT.y;
49
+ vec3 positionUv = viewPosUv + currT * viewDirUv;
50
+ // TODO: is it possible for this to be out of bounds, and does it matter?
51
+ vec3 positionUvShapeSpace = convertUvToShapeUvSpace(positionUv);
52
+
53
+ // Traverse the tree from the start position
54
+ TraversalData traversalData;
55
+ SampleData sampleDatas[SAMPLE_COUNT];
56
+ traverseOctreeFromBeginning(positionUvShapeSpace, traversalData, sampleDatas);
57
+
58
+ // TODO:
59
+ // - jitter doesn't affect the first traversal?
60
+ // - jitter is always > 0?
61
+ // - jitter is only applied at one step?
62
+ #if defined(JITTER)
63
+ float noise = hash(screenCoord); // [0,1]
64
+ currT += noise * traversalData.stepT;
65
+ positionUv += noise * traversalData.stepT * viewDirUv;
66
+ #endif
67
+
68
+ FragmentInput fragmentInput;
69
+ #if defined(STATISTICS)
70
+ setStatistics(fragmentInput.metadata.statistics);
71
+ #endif
72
+
73
+ vec4 colorAccum =vec4(0.0);
74
+
75
+ for (int stepCount = 0; stepCount < STEP_COUNT_MAX; ++stepCount) {
76
+ // Read properties from the megatexture based on the traversal state
77
+ Properties properties = accumulatePropertiesFromMegatexture(sampleDatas);
78
+
79
+ // Prepare the custom shader inputs
80
+ copyPropertiesToMetadata(properties, fragmentInput.metadata);
81
+ fragmentInput.voxel.positionUv = positionUv;
82
+ fragmentInput.voxel.positionShapeUv = positionUvShapeSpace;
83
+ fragmentInput.voxel.positionUvLocal = sampleDatas[0].tileUv;
84
+ fragmentInput.voxel.viewDirUv = viewDirUv;
85
+ fragmentInput.voxel.viewDirWorld = viewDirWorld;
86
+ fragmentInput.voxel.travelDistance = traversalData.stepT;
87
+
88
+ // Run the custom shader
89
+ czm_modelMaterial materialOutput;
90
+ fragmentMain(fragmentInput, materialOutput);
91
+
92
+ // Sanitize the custom shader output
93
+ vec4 color = vec4(materialOutput.diffuse, materialOutput.alpha);
94
+ color.rgb = max(color.rgb, vec3(0.0));
95
+ color.a = clamp(color.a, 0.0, 1.0);
96
+
97
+ // Pre-multiplied alpha blend
98
+ colorAccum += (1.0 - colorAccum.a) * vec4(color.rgb * color.a, color.a);
99
+
100
+ // Stop traversing if the alpha has been fully saturated
101
+ if (colorAccum.a > ALPHA_ACCUM_MAX) {
102
+ colorAccum.a = ALPHA_ACCUM_MAX;
103
+ break;
104
+ }
105
+
106
+ if (traversalData.stepT == 0.0) {
107
+ // Shape is infinitely thin, no need to traverse further
108
+ break;
109
+ }
110
+
111
+ // Keep raymarching
112
+ currT += traversalData.stepT;
113
+ positionUv += traversalData.stepT * viewDirUv;
114
+
115
+ // Check if there's more intersections.
116
+ if (currT > endT) {
117
+ #if (INTERSECTION_COUNT == 1)
118
+ break;
119
+ #else
120
+ vec2 entryExitT = nextIntersection(ix);
121
+ if (entryExitT.x == NO_HIT) {
122
+ break;
123
+ } else {
124
+ // Found another intersection. Resume raymarching there
125
+ currT = entryExitT.x;
126
+ endT = entryExitT.y;
127
+ positionUv = viewPosUv + currT * viewDirUv;
128
+ }
129
+ #endif
130
+ }
131
+
132
+ // Traverse the tree from the current ray position.
133
+ // This is similar to traverseOctree but is faster when the ray is in the same tile as the previous step.
134
+ positionUvShapeSpace = convertUvToShapeUvSpace(positionUv);
135
+ traverseOctreeFromExisting(positionUvShapeSpace, traversalData, sampleDatas);
136
+ }
137
+
138
+ // Convert the alpha from [0,ALPHA_ACCUM_MAX] to [0,1]
139
+ colorAccum.a /= ALPHA_ACCUM_MAX;
140
+
141
+ #if defined(PICKING)
142
+ // If alpha is 0.0 there is nothing to pick
143
+ if (colorAccum.a == 0.0) {
144
+ discard;
145
+ }
146
+ out_FragColor = u_pickColor;
147
+ #else
148
+ out_FragColor = colorAccum;
149
+ #endif
150
+ }
@@ -0,0 +1,152 @@
1
+ //This file is automatically rebuilt by the Cesium build process.
2
+ export default "// See Intersection.glsl for the definition of intersectScene\n\
3
+ // See IntersectionUtils.glsl for the definition of nextIntersection\n\
4
+ // See convertUvToBox.glsl, convertUvToCylinder.glsl, or convertUvToEllipsoid.glsl\n\
5
+ // for the definition of convertUvToShapeUvSpace. The appropriate function is \n\
6
+ // selected based on the VoxelPrimitive shape type, and added to the shader in\n\
7
+ // Scene/VoxelRenderResources.js.\n\
8
+ // See Octree.glsl for the definitions of TraversalData, SampleData,\n\
9
+ // traverseOctreeFromBeginning, and traverseOctreeFromExisting\n\
10
+ // See Megatexture.glsl for the definition of accumulatePropertiesFromMegatexture\n\
11
+ \n\
12
+ #define STEP_COUNT_MAX 1000 // Harcoded value because GLSL doesn't like variable length loops\n\
13
+ #define ALPHA_ACCUM_MAX 0.98 // Must be > 0.0 and <= 1.0\n\
14
+ \n\
15
+ uniform mat3 u_transformDirectionViewToLocal;\n\
16
+ uniform vec3 u_cameraPositionUv;\n\
17
+ \n\
18
+ #if defined(PICKING)\n\
19
+ uniform vec4 u_pickColor;\n\
20
+ #endif\n\
21
+ \n\
22
+ #if defined(JITTER)\n\
23
+ float hash(vec2 p)\n\
24
+ {\n\
25
+ vec3 p3 = fract(vec3(p.xyx) * 50.0); // magic number = hashscale\n\
26
+ p3 += dot(p3, p3.yzx + 19.19);\n\
27
+ return fract((p3.x + p3.y) * p3.z);\n\
28
+ }\n\
29
+ #endif\n\
30
+ \n\
31
+ void main()\n\
32
+ {\n\
33
+ vec4 fragCoord = gl_FragCoord;\n\
34
+ vec2 screenCoord = (fragCoord.xy - czm_viewport.xy) / czm_viewport.zw; // [0,1]\n\
35
+ vec3 eyeDirection = normalize(czm_windowToEyeCoordinates(fragCoord).xyz);\n\
36
+ vec3 viewDirWorld = normalize(czm_inverseViewRotation * eyeDirection); // normalize again just in case\n\
37
+ vec3 viewDirUv = normalize(u_transformDirectionViewToLocal * eyeDirection); // normalize again just in case\n\
38
+ vec3 viewPosUv = u_cameraPositionUv;\n\
39
+ \n\
40
+ Intersections ix;\n\
41
+ vec2 entryExitT = intersectScene(screenCoord, viewPosUv, viewDirUv, ix);\n\
42
+ \n\
43
+ // Exit early if the scene was completely missed.\n\
44
+ if (entryExitT.x == NO_HIT) {\n\
45
+ discard;\n\
46
+ }\n\
47
+ \n\
48
+ float currT = entryExitT.x;\n\
49
+ float endT = entryExitT.y;\n\
50
+ vec3 positionUv = viewPosUv + currT * viewDirUv;\n\
51
+ // TODO: is it possible for this to be out of bounds, and does it matter?\n\
52
+ vec3 positionUvShapeSpace = convertUvToShapeUvSpace(positionUv);\n\
53
+ \n\
54
+ // Traverse the tree from the start position\n\
55
+ TraversalData traversalData;\n\
56
+ SampleData sampleDatas[SAMPLE_COUNT];\n\
57
+ traverseOctreeFromBeginning(positionUvShapeSpace, traversalData, sampleDatas);\n\
58
+ \n\
59
+ // TODO:\n\
60
+ // - jitter doesn't affect the first traversal?\n\
61
+ // - jitter is always > 0?\n\
62
+ // - jitter is only applied at one step?\n\
63
+ #if defined(JITTER)\n\
64
+ float noise = hash(screenCoord); // [0,1]\n\
65
+ currT += noise * traversalData.stepT;\n\
66
+ positionUv += noise * traversalData.stepT * viewDirUv;\n\
67
+ #endif\n\
68
+ \n\
69
+ FragmentInput fragmentInput;\n\
70
+ #if defined(STATISTICS)\n\
71
+ setStatistics(fragmentInput.metadata.statistics);\n\
72
+ #endif\n\
73
+ \n\
74
+ vec4 colorAccum =vec4(0.0);\n\
75
+ \n\
76
+ for (int stepCount = 0; stepCount < STEP_COUNT_MAX; ++stepCount) {\n\
77
+ // Read properties from the megatexture based on the traversal state\n\
78
+ Properties properties = accumulatePropertiesFromMegatexture(sampleDatas);\n\
79
+ \n\
80
+ // Prepare the custom shader inputs\n\
81
+ copyPropertiesToMetadata(properties, fragmentInput.metadata);\n\
82
+ fragmentInput.voxel.positionUv = positionUv;\n\
83
+ fragmentInput.voxel.positionShapeUv = positionUvShapeSpace;\n\
84
+ fragmentInput.voxel.positionUvLocal = sampleDatas[0].tileUv;\n\
85
+ fragmentInput.voxel.viewDirUv = viewDirUv;\n\
86
+ fragmentInput.voxel.viewDirWorld = viewDirWorld;\n\
87
+ fragmentInput.voxel.travelDistance = traversalData.stepT;\n\
88
+ \n\
89
+ // Run the custom shader\n\
90
+ czm_modelMaterial materialOutput;\n\
91
+ fragmentMain(fragmentInput, materialOutput);\n\
92
+ \n\
93
+ // Sanitize the custom shader output\n\
94
+ vec4 color = vec4(materialOutput.diffuse, materialOutput.alpha);\n\
95
+ color.rgb = max(color.rgb, vec3(0.0));\n\
96
+ color.a = clamp(color.a, 0.0, 1.0);\n\
97
+ \n\
98
+ // Pre-multiplied alpha blend\n\
99
+ colorAccum += (1.0 - colorAccum.a) * vec4(color.rgb * color.a, color.a);\n\
100
+ \n\
101
+ // Stop traversing if the alpha has been fully saturated\n\
102
+ if (colorAccum.a > ALPHA_ACCUM_MAX) {\n\
103
+ colorAccum.a = ALPHA_ACCUM_MAX;\n\
104
+ break;\n\
105
+ }\n\
106
+ \n\
107
+ if (traversalData.stepT == 0.0) {\n\
108
+ // Shape is infinitely thin, no need to traverse further\n\
109
+ break;\n\
110
+ }\n\
111
+ \n\
112
+ // Keep raymarching\n\
113
+ currT += traversalData.stepT;\n\
114
+ positionUv += traversalData.stepT * viewDirUv;\n\
115
+ \n\
116
+ // Check if there's more intersections.\n\
117
+ if (currT > endT) {\n\
118
+ #if (INTERSECTION_COUNT == 1)\n\
119
+ break;\n\
120
+ #else\n\
121
+ vec2 entryExitT = nextIntersection(ix);\n\
122
+ if (entryExitT.x == NO_HIT) {\n\
123
+ break;\n\
124
+ } else {\n\
125
+ // Found another intersection. Resume raymarching there\n\
126
+ currT = entryExitT.x;\n\
127
+ endT = entryExitT.y;\n\
128
+ positionUv = viewPosUv + currT * viewDirUv;\n\
129
+ }\n\
130
+ #endif\n\
131
+ }\n\
132
+ \n\
133
+ // Traverse the tree from the current ray position.\n\
134
+ // This is similar to traverseOctree but is faster when the ray is in the same tile as the previous step.\n\
135
+ positionUvShapeSpace = convertUvToShapeUvSpace(positionUv);\n\
136
+ traverseOctreeFromExisting(positionUvShapeSpace, traversalData, sampleDatas);\n\
137
+ }\n\
138
+ \n\
139
+ // Convert the alpha from [0,ALPHA_ACCUM_MAX] to [0,1]\n\
140
+ colorAccum.a /= ALPHA_ACCUM_MAX;\n\
141
+ \n\
142
+ #if defined(PICKING)\n\
143
+ // If alpha is 0.0 there is nothing to pick\n\
144
+ if (colorAccum.a == 0.0) {\n\
145
+ discard;\n\
146
+ }\n\
147
+ out_FragColor = u_pickColor;\n\
148
+ #else\n\
149
+ out_FragColor = colorAccum;\n\
150
+ #endif\n\
151
+ }\n\
152
+ ";
@@ -0,0 +1,11 @@
1
+ in vec2 position;
2
+
3
+ uniform vec4 u_ndcSpaceAxisAlignedBoundingBox;
4
+
5
+ void main() {
6
+ vec2 aabbMin = u_ndcSpaceAxisAlignedBoundingBox.xy;
7
+ vec2 aabbMax = u_ndcSpaceAxisAlignedBoundingBox.zw;
8
+ vec2 translation = 0.5 * (aabbMax + aabbMin);
9
+ vec2 scale = 0.5 * (aabbMax - aabbMin);
10
+ gl_Position = vec4(position * scale + translation, 0.0, 1.0);
11
+ }
@@ -0,0 +1,13 @@
1
+ //This file is automatically rebuilt by the Cesium build process.
2
+ export default "in vec2 position;\n\
3
+ \n\
4
+ uniform vec4 u_ndcSpaceAxisAlignedBoundingBox;\n\
5
+ \n\
6
+ void main() {\n\
7
+ vec2 aabbMin = u_ndcSpaceAxisAlignedBoundingBox.xy;\n\
8
+ vec2 aabbMax = u_ndcSpaceAxisAlignedBoundingBox.zw;\n\
9
+ vec2 translation = 0.5 * (aabbMax + aabbMin);\n\
10
+ vec2 scale = 0.5 * (aabbMax - aabbMin);\n\
11
+ gl_Position = vec4(position * scale + translation, 0.0, 1.0);\n\
12
+ }\n\
13
+ ";
@@ -0,0 +1,16 @@
1
+ /* Box defines (set in Scene/VoxelBoxShape.js)
2
+ #define BOX_HAS_SHAPE_BOUNDS
3
+ */
4
+
5
+ #if defined(BOX_HAS_SHAPE_BOUNDS)
6
+ uniform vec3 u_boxUvToShapeUvScale;
7
+ uniform vec3 u_boxUvToShapeUvTranslate;
8
+ #endif
9
+
10
+ vec3 convertUvToShapeUvSpace(in vec3 positionUv) {
11
+ #if defined(BOX_HAS_SHAPE_BOUNDS)
12
+ return positionUv * u_boxUvToShapeUvScale + u_boxUvToShapeUvTranslate;
13
+ #else
14
+ return positionUv;
15
+ #endif
16
+ }
@@ -0,0 +1,18 @@
1
+ //This file is automatically rebuilt by the Cesium build process.
2
+ export default "/* Box defines (set in Scene/VoxelBoxShape.js)\n\
3
+ #define BOX_HAS_SHAPE_BOUNDS\n\
4
+ */\n\
5
+ \n\
6
+ #if defined(BOX_HAS_SHAPE_BOUNDS)\n\
7
+ uniform vec3 u_boxUvToShapeUvScale;\n\
8
+ uniform vec3 u_boxUvToShapeUvTranslate;\n\
9
+ #endif\n\
10
+ \n\
11
+ vec3 convertUvToShapeUvSpace(in vec3 positionUv) {\n\
12
+ #if defined(BOX_HAS_SHAPE_BOUNDS)\n\
13
+ return positionUv * u_boxUvToShapeUvScale + u_boxUvToShapeUvTranslate;\n\
14
+ #else\n\
15
+ return positionUv;\n\
16
+ #endif\n\
17
+ }\n\
18
+ ";
@@ -0,0 +1,75 @@
1
+ /* Cylinder defines (set in Scene/VoxelCylinderShape.js)
2
+ #define CYLINDER_HAS_SHAPE_BOUNDS_RADIUS
3
+ #define CYLINDER_HAS_SHAPE_BOUNDS_RADIUS_FLAT
4
+ #define CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT
5
+ #define CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT_FLAT
6
+ #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE
7
+ #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_RANGE_EQUAL_ZERO
8
+ #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY
9
+ #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY
10
+ #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED
11
+ */
12
+
13
+ #if defined(CYLINDER_HAS_SHAPE_BOUNDS_RADIUS)
14
+ uniform vec2 u_cylinderUvToShapeUvRadius; // x = scale, y = offset
15
+ #endif
16
+ #if defined(CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT)
17
+ uniform vec2 u_cylinderUvToShapeUvHeight; // x = scale, y = offset
18
+ #endif
19
+ #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE)
20
+ uniform vec2 u_cylinderUvToShapeUvAngle; // x = scale, y = offset
21
+ #endif
22
+ #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY) || defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY)
23
+ uniform vec2 u_cylinderShapeUvAngleMinMax;
24
+ #endif
25
+ #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY) || defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY) || defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED)
26
+ uniform float u_cylinderShapeUvAngleRangeZeroMid;
27
+ #endif
28
+
29
+ vec3 convertUvToShapeUvSpace(in vec3 positionUv) {
30
+ vec3 positionLocal = positionUv * 2.0 - 1.0; // [-1,+1]
31
+
32
+ // Compute radius
33
+ #if defined(CYLINDER_HAS_SHAPE_BOUNDS_RADIUS_FLAT)
34
+ float radius = 1.0;
35
+ #else
36
+ float radius = length(positionLocal.xy); // [0,1]
37
+ #if defined(CYLINDER_HAS_SHAPE_BOUNDS_RADIUS)
38
+ radius = radius * u_cylinderUvToShapeUvRadius.x + u_cylinderUvToShapeUvRadius.y; // x = scale, y = offset
39
+ #endif
40
+ #endif
41
+
42
+ // Compute height
43
+ #if defined(CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT_FLAT)
44
+ float height = 1.0;
45
+ #else
46
+ float height = positionUv.z; // [0,1]
47
+ #if defined(CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT)
48
+ height = height * u_cylinderUvToShapeUvHeight.x + u_cylinderUvToShapeUvHeight.y; // x = scale, y = offset
49
+ #endif
50
+ #endif
51
+
52
+ // Compute angle
53
+ #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_RANGE_EQUAL_ZERO)
54
+ float angle = 1.0;
55
+ #else
56
+ float angle = (atan(positionLocal.y, positionLocal.x) + czm_pi) / czm_twoPi; // [0,1]
57
+ #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE)
58
+ #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED)
59
+ // Comparing against u_cylinderShapeUvAngleMinMax has precision problems. u_cylinderShapeUvAngleRangeZeroMid is more conservative.
60
+ angle += float(angle < u_cylinderShapeUvAngleRangeZeroMid);
61
+ #endif
62
+
63
+ // Avoid flickering from reading voxels from both sides of the -pi/+pi discontinuity.
64
+ #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY)
65
+ angle = angle > u_cylinderShapeUvAngleRangeZeroMid ? u_cylinderShapeUvAngleMinMax.x : angle;
66
+ #elif defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY)
67
+ angle = angle < u_cylinderShapeUvAngleRangeZeroMid ? u_cylinderShapeUvAngleMinMax.y : angle;
68
+ #endif
69
+
70
+ angle = angle * u_cylinderUvToShapeUvAngle.x + u_cylinderUvToShapeUvAngle.y; // x = scale, y = offset
71
+ #endif
72
+ #endif
73
+
74
+ return vec3(radius, height, angle);
75
+ }