@cesium/engine 22.1.0 → 22.3.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 (216) hide show
  1. package/Build/Workers/{chunk-YZWA5B4R.js → chunk-2MLJ46ZZ.js} +13 -13
  2. package/Build/Workers/{chunk-GKWOUMYA.js → chunk-4BBANFU6.js} +1 -1
  3. package/Build/Workers/{chunk-23T2IPHV.js → chunk-4O2ARYS7.js} +1 -1
  4. package/Build/Workers/{chunk-RXZDTDIY.js → chunk-4R6FGUFP.js} +9 -9
  5. package/Build/Workers/{chunk-UG2DPFOL.js → chunk-5PJB7ASO.js} +6 -6
  6. package/Build/Workers/{chunk-JKXPC5HD.js → chunk-6GBGEUWR.js} +3 -3
  7. package/Build/Workers/{chunk-YF2NVO5B.js → chunk-6WDMPXQ7.js} +12 -12
  8. package/Build/Workers/{chunk-B7JRBTT6.js → chunk-7ATKQRBM.js} +10 -10
  9. package/Build/Workers/{chunk-TDSVSW5A.js → chunk-7SLNBIZS.js} +5 -34
  10. package/Build/Workers/{chunk-2RCIRXNI.js → chunk-7U5YNLF3.js} +1 -1
  11. package/Build/Workers/{chunk-GTY4K4IA.js → chunk-AFGP5BXS.js} +7 -7
  12. package/Build/Workers/{chunk-WTLYD4FE.js → chunk-AWELU5C6.js} +14 -14
  13. package/Build/Workers/{chunk-IL5F6WEE.js → chunk-BO22JHBX.js} +3 -3
  14. package/Build/Workers/{chunk-YX562XOB.js → chunk-D2PEV362.js} +10 -10
  15. package/Build/Workers/{chunk-MKMZHRB3.js → chunk-D63Z7KKL.js} +11 -11
  16. package/Build/Workers/{chunk-P5CGIJUY.js → chunk-D6OKR3BQ.js} +2 -2
  17. package/Build/Workers/{chunk-GDU4RZSZ.js → chunk-E4YDCSQK.js} +9 -9
  18. package/Build/Workers/{chunk-KKGD7HAW.js → chunk-EAAH543Q.js} +11 -11
  19. package/Build/Workers/{chunk-I4REFVXB.js → chunk-EOSX23OS.js} +4 -4
  20. package/Build/Workers/{chunk-V35NQOJC.js → chunk-EUDHHS7K.js} +6 -6
  21. package/Build/Workers/{chunk-OXFU5HNU.js → chunk-EY5HOJFQ.js} +5 -5
  22. package/Build/Workers/{chunk-DMEFNTUV.js → chunk-FDOLXORR.js} +7 -7
  23. package/Build/Workers/{chunk-QEANVUGT.js → chunk-FS42VX2H.js} +2 -2
  24. package/Build/Workers/{chunk-L4JLDVCM.js → chunk-FUDC3KOT.js} +5 -5
  25. package/Build/Workers/{chunk-LIYMRHGR.js → chunk-HWGP4GVC.js} +13 -13
  26. package/Build/Workers/{chunk-KROSQJUA.js → chunk-IHFAFGR2.js} +2 -2
  27. package/Build/Workers/{chunk-SPA2KPH3.js → chunk-IXL46IYV.js} +12 -12
  28. package/Build/Workers/{chunk-A6YFUGJO.js → chunk-K2PLKJJG.js} +5 -5
  29. package/Build/Workers/{chunk-CW7W27IZ.js → chunk-K4PGSAR5.js} +8 -8
  30. package/Build/Workers/{chunk-DICY26ID.js → chunk-KIJR26N3.js} +16 -16
  31. package/Build/Workers/{chunk-YSYSXSHF.js → chunk-L4OFWHNI.js} +1 -1
  32. package/Build/Workers/{chunk-2AM4E2WD.js → chunk-LK7GEFGB.js} +2 -2
  33. package/Build/Workers/{chunk-W4XUEDU5.js → chunk-LWZHJWYK.js} +6 -6
  34. package/Build/Workers/{chunk-3YTMGEXW.js → chunk-LYBNPUEI.js} +4 -4
  35. package/Build/Workers/{chunk-4BHWJWS3.js → chunk-M5DVYXJJ.js} +6 -6
  36. package/Build/Workers/{chunk-COGPE5Z2.js → chunk-MASEF4OV.js} +8 -8
  37. package/Build/Workers/{chunk-QUAH3XOT.js → chunk-N66PIK46.js} +4 -4
  38. package/Build/Workers/{chunk-H6Q7E4BQ.js → chunk-N6XBJBI7.js} +6 -6
  39. package/Build/Workers/{chunk-Y4ALZ4SS.js → chunk-NO3LMU7T.js} +7 -7
  40. package/Build/Workers/{chunk-MO25ZQ2I.js → chunk-NVL7JXAQ.js} +10 -10
  41. package/Build/Workers/{chunk-DQSJEOZY.js → chunk-OOYICVOK.js} +1 -1
  42. package/Build/Workers/{chunk-CJOV55CW.js → chunk-PJLRXIMS.js} +17 -17
  43. package/Build/Workers/{chunk-AOIO5VUS.js → chunk-S2KVL7OJ.js} +8 -8
  44. package/Build/Workers/{chunk-URGEDZBS.js → chunk-T5MJDW43.js} +7 -7
  45. package/Build/Workers/{chunk-OOCGX2OD.js → chunk-TCOUGKXF.js} +4 -4
  46. package/Build/Workers/{chunk-A53R2F2L.js → chunk-TMGLPEZW.js} +4 -4
  47. package/Build/Workers/{chunk-6HKAPCSO.js → chunk-TY5JXMVO.js} +1 -1
  48. package/Build/Workers/{chunk-2MWF4IES.js → chunk-VIQIKMTZ.js} +14 -14
  49. package/Build/Workers/{chunk-5JKH4AMT.js → chunk-VRAAQ3FS.js} +2 -2
  50. package/Build/Workers/{chunk-CHNDJRYA.js → chunk-W5NV72VR.js} +17 -17
  51. package/Build/Workers/{chunk-HXKUEOOD.js → chunk-WHLGBMBC.js} +5 -5
  52. package/Build/Workers/{chunk-QFBCIX7J.js → chunk-WUWPKBOZ.js} +6 -6
  53. package/Build/Workers/{chunk-Z6DFT4D3.js → chunk-XLIJV3YZ.js} +10 -10
  54. package/Build/Workers/{chunk-WB4TSSBQ.js → chunk-Y5MRBKQN.js} +144 -53
  55. package/Build/Workers/{chunk-HHGOFZVQ.js → chunk-YHPBT4I5.js} +5 -5
  56. package/Build/Workers/{chunk-O6RZEKHZ.js → chunk-ZGGVEGTA.js} +12 -12
  57. package/Build/Workers/{chunk-AJYWXC6I.js → chunk-ZWWN2CQH.js} +4 -4
  58. package/Build/Workers/combineGeometry.js +24 -24
  59. package/Build/Workers/createBoxGeometry.js +18 -18
  60. package/Build/Workers/createBoxOutlineGeometry.js +16 -16
  61. package/Build/Workers/createCircleGeometry.js +26 -26
  62. package/Build/Workers/createCircleOutlineGeometry.js +19 -19
  63. package/Build/Workers/createCoplanarPolygonGeometry.js +33 -33
  64. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +31 -31
  65. package/Build/Workers/createCorridorGeometry.js +29 -29
  66. package/Build/Workers/createCorridorOutlineGeometry.js +28 -28
  67. package/Build/Workers/createCylinderGeometry.js +20 -20
  68. package/Build/Workers/createCylinderOutlineGeometry.js +18 -18
  69. package/Build/Workers/createEllipseGeometry.js +26 -26
  70. package/Build/Workers/createEllipseOutlineGeometry.js +19 -19
  71. package/Build/Workers/createEllipsoidGeometry.js +19 -19
  72. package/Build/Workers/createEllipsoidOutlineGeometry.js +18 -18
  73. package/Build/Workers/createFrustumGeometry.js +18 -18
  74. package/Build/Workers/createFrustumOutlineGeometry.js +18 -18
  75. package/Build/Workers/createGeometry.js +24 -24
  76. package/Build/Workers/createGroundPolylineGeometry.js +22 -22
  77. package/Build/Workers/createPlaneGeometry.js +16 -16
  78. package/Build/Workers/createPlaneOutlineGeometry.js +15 -15
  79. package/Build/Workers/createPolygonGeometry.js +32 -32
  80. package/Build/Workers/createPolygonOutlineGeometry.js +30 -30
  81. package/Build/Workers/createPolylineGeometry.js +25 -25
  82. package/Build/Workers/createPolylineVolumeGeometry.js +31 -31
  83. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +27 -27
  84. package/Build/Workers/createRectangleGeometry.js +27 -27
  85. package/Build/Workers/createRectangleOutlineGeometry.js +20 -20
  86. package/Build/Workers/createSimplePolylineGeometry.js +23 -23
  87. package/Build/Workers/createSphereGeometry.js +19 -19
  88. package/Build/Workers/createSphereOutlineGeometry.js +18 -18
  89. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  90. package/Build/Workers/createVectorTileClampedPolylines.js +14 -14
  91. package/Build/Workers/createVectorTileGeometries.js +24 -24
  92. package/Build/Workers/createVectorTilePoints.js +13 -13
  93. package/Build/Workers/createVectorTilePolygons.js +22 -22
  94. package/Build/Workers/createVectorTilePolylines.js +14 -14
  95. package/Build/Workers/createVerticesFromCesium3DTilesTerrain.js +25 -25
  96. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +22 -22
  97. package/Build/Workers/createVerticesFromHeightmap.js +22 -22
  98. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +20 -20
  99. package/Build/Workers/createWallGeometry.js +24 -24
  100. package/Build/Workers/createWallOutlineGeometry.js +23 -23
  101. package/Build/Workers/decodeDraco.js +10 -10
  102. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
  103. package/Build/Workers/decodeI3S.js +10 -10
  104. package/Build/Workers/gaussianSplatSorter.js +4 -4
  105. package/Build/Workers/gaussianSplatTextureGenerator.js +4 -4
  106. package/Build/Workers/incrementallyBuildTerrainPicker.js +20 -12
  107. package/Build/Workers/transcodeKTX2.js +6 -6
  108. package/Build/Workers/transferTypedArrayTest.js +1 -1
  109. package/Build/Workers/upsampleQuantizedTerrainMesh.js +22 -22
  110. package/Build/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +25 -25
  111. package/Source/Core/BoxGeometry.js +1 -1
  112. package/Source/Core/CornerType.js +1 -1
  113. package/Source/Core/CorridorGeometry.js +1 -1
  114. package/Source/Core/FeatureDetection.js +1 -32
  115. package/Source/Core/Geometry.js +1 -1
  116. package/Source/Core/IntersectionTests.js +2 -2
  117. package/Source/Core/Ion.js +1 -1
  118. package/Source/Core/PinBuilder.js +1 -1
  119. package/Source/Core/PolygonGeometry.js +1 -1
  120. package/Source/Core/PolylineGeometry.js +1 -1
  121. package/Source/Core/PolylineVolumeGeometry.js +1 -1
  122. package/Source/Core/RectangleGeometry.js +1 -1
  123. package/Source/Core/ScreenSpaceEventHandler.js +4 -8
  124. package/Source/Core/TerrainMesh.js +11 -8
  125. package/Source/Core/TerrainPicker.js +24 -7
  126. package/Source/Core/VideoSynchronizer.js +1 -1
  127. package/Source/Core/WallGeometry.js +1 -1
  128. package/Source/Core/writeTextToCanvas.js +40 -86
  129. package/Source/DataSources/BillboardGraphics.js +1 -1
  130. package/Source/DataSources/BoxGraphics.js +1 -1
  131. package/Source/DataSources/CallbackPositionProperty.js +1 -1
  132. package/Source/DataSources/CorridorGraphics.js +1 -1
  133. package/Source/DataSources/CzmlDataSource.js +1 -1
  134. package/Source/DataSources/EllipseGraphics.js +1 -1
  135. package/Source/DataSources/EllipsoidGraphics.js +1 -1
  136. package/Source/DataSources/Entity.js +1 -1
  137. package/Source/DataSources/EntityCluster.js +2 -2
  138. package/Source/DataSources/GeoJsonDataSource.js +2 -2
  139. package/Source/DataSources/GpxDataSource.js +1 -1
  140. package/Source/DataSources/KmlDataSource.js +1 -1
  141. package/Source/DataSources/KmlTour.js +1 -1
  142. package/Source/DataSources/LabelGraphics.js +1 -1
  143. package/Source/DataSources/ModelGraphics.js +1 -1
  144. package/Source/DataSources/PlaneGraphics.js +1 -1
  145. package/Source/DataSources/PolygonGraphics.js +1 -1
  146. package/Source/DataSources/PolylineGraphics.js +1 -1
  147. package/Source/DataSources/PolylineVolumeGraphics.js +1 -1
  148. package/Source/DataSources/RectangleGraphics.js +1 -1
  149. package/Source/DataSources/WallGraphics.js +1 -1
  150. package/Source/DataSources/exportKml.js +1 -1
  151. package/Source/Renderer/Context.js +11 -10
  152. package/Source/Renderer/ContextLimits.js +66 -33
  153. package/Source/Renderer/ShaderSource.js +19 -18
  154. package/Source/Renderer/Texture.js +1 -1
  155. package/Source/Renderer/Texture3D.js +166 -7
  156. package/Source/Renderer/TextureAtlas.js +10 -19
  157. package/Source/Scene/Appearance.js +1 -1
  158. package/Source/Scene/ArcGisMapService.js +1 -1
  159. package/Source/Scene/Azure2DImageryProvider.js +7 -8
  160. package/Source/Scene/Billboard.js +1 -1
  161. package/Source/Scene/BillboardCollection.js +15 -1
  162. package/Source/Scene/BillboardTexture.js +4 -1
  163. package/Source/Scene/Camera.js +13 -2
  164. package/Source/Scene/ClippingPlaneCollection.js +2 -2
  165. package/Source/Scene/CloudCollection.js +2 -2
  166. package/Source/Scene/CumulusCloud.js +1 -1
  167. package/Source/Scene/DynamicEnvironmentMapManager.js +41 -26
  168. package/Source/Scene/Fog.js +1 -1
  169. package/Source/Scene/GaussianSplatPrimitive.js +1 -1
  170. package/Source/Scene/Globe.js +3 -10
  171. package/Source/Scene/GltfLoader.js +10 -0
  172. package/Source/Scene/ImageBasedLighting.js +2 -2
  173. package/Source/Scene/ImageryLayerCollection.js +2 -2
  174. package/Source/Scene/ImageryProvider.js +2 -2
  175. package/Source/Scene/Label.js +1 -1
  176. package/Source/Scene/LabelCollection.js +2 -1
  177. package/Source/Scene/Material.js +1 -1
  178. package/Source/Scene/MaterialAppearance.js +1 -1
  179. package/Source/Scene/Megatexture.js +174 -242
  180. package/Source/Scene/Model/MaterialPipelineStage.js +17 -0
  181. package/Source/Scene/Model/Model.js +1 -1
  182. package/Source/Scene/ModelComponents.js +10 -0
  183. package/Source/Scene/ParticleSystem.js +2 -2
  184. package/Source/Scene/PointPrimitive.js +1 -1
  185. package/Source/Scene/Polyline.js +0 -1
  186. package/Source/Scene/PolylineCollection.js +1 -4
  187. package/Source/Scene/PolylineColorAppearance.js +1 -6
  188. package/Source/Scene/PolylineMaterialAppearance.js +1 -6
  189. package/Source/Scene/PostProcessStageCollection.js +1 -1
  190. package/Source/Scene/QuadtreePrimitive.js +6 -3
  191. package/Source/Scene/ShadowMap.js +1 -2
  192. package/Source/Scene/Vector3DTileClampedPolylines.js +1 -5
  193. package/Source/Scene/Vector3DTilePolylines.js +1 -5
  194. package/Source/Scene/VoxelPrimitive.js +16 -33
  195. package/Source/Scene/VoxelRenderResources.js +1 -8
  196. package/Source/Scene/VoxelTraversal.js +16 -61
  197. package/Source/Scene/WebMapTileServiceImageryProvider.js +1 -1
  198. package/Source/Scene/createElevationBandMaterial.js +1 -1
  199. package/Source/Scene/processVoxelProperties.js +1 -1
  200. package/Source/Shaders/Builtin/Functions/columbusViewMorph.glsl +8 -1
  201. package/Source/Shaders/Builtin/Functions/columbusViewMorph.js +8 -1
  202. package/Source/Shaders/Model/ModelFS.glsl +8 -0
  203. package/Source/Shaders/Model/ModelFS.js +8 -0
  204. package/Source/Shaders/Model/ModelVS.glsl +2 -0
  205. package/Source/Shaders/Model/ModelVS.js +2 -0
  206. package/Source/Shaders/Voxels/IntersectionUtils.glsl +1 -1
  207. package/Source/Shaders/Voxels/IntersectionUtils.js +1 -1
  208. package/Source/Shaders/Voxels/Megatexture.glsl +15 -83
  209. package/Source/Shaders/Voxels/Megatexture.js +15 -83
  210. package/Source/Shaders/Voxels/Octree.glsl +6 -9
  211. package/Source/Shaders/Voxels/Octree.js +6 -9
  212. package/Source/Widget/CesiumWidget.js +1 -1
  213. package/Source/Workers/incrementallyBuildTerrainPicker.js +16 -2
  214. package/index.d.ts +32 -21
  215. package/index.js +52 -52
  216. package/package.json +4 -3
@@ -1,104 +1,36 @@
1
- // See Octree.glsl for the definitions of SampleData and intMod
1
+ // See Octree.glsl for the definitions of SampleData
2
2
 
3
3
  /* Megatexture defines (set in Scene/VoxelRenderResources.js)
4
4
  #define SAMPLE_COUNT ###
5
- #define NEAREST_SAMPLING
6
5
  #define PADDING
7
6
  */
8
7
 
9
- uniform ivec2 u_megatextureSliceDimensions; // number of slices per tile, in two dimensions
10
- uniform ivec2 u_megatextureTileDimensions; // number of tiles per megatexture, in two dimensions
11
- uniform vec2 u_megatextureVoxelSizeUv;
12
- uniform vec2 u_megatextureSliceSizeUv;
13
- uniform vec2 u_megatextureTileSizeUv;
8
+ uniform ivec3 u_megatextureTileCounts; // number of tiles in the megatexture, along each axis
14
9
 
15
- // Integer min, max, clamp: For WebGL1 only
16
- int intMin(int a, int b) {
17
- return a <= b ? a : b;
18
- }
19
- int intMax(int a, int b) {
20
- return a >= b ? a : b;
21
- }
22
- int intClamp(int v, int minVal, int maxVal) {
23
- return intMin(intMax(v, minVal), maxVal);
24
- }
25
-
26
- vec2 index1DTo2DTexcoord(int index, ivec2 dimensions, vec2 uvScale)
10
+ vec3 index1DTo3DTexCoord(int index)
27
11
  {
28
- int indexX = intMod(index, dimensions.x);
29
- int indexY = index / dimensions.x;
30
- return vec2(indexX, indexY) * uvScale;
12
+ int tilesPerZ = u_megatextureTileCounts.x * u_megatextureTileCounts.y;
13
+ int iz = index / tilesPerZ;
14
+ int remainder = index - iz * tilesPerZ;
15
+ int iy = remainder / u_megatextureTileCounts.x;
16
+ int ix = remainder - iy * u_megatextureTileCounts.x;
17
+ return vec3(ix, iy, iz) / vec3(u_megatextureTileCounts);
31
18
  }
32
19
 
33
- /*
34
- How is 3D data stored in a 2D megatexture?
35
-
36
- In this example there is only one loaded tile and it has 2x2x2 voxels (8 voxels total).
37
- The data is sliced by Z. The data at Z = 0 is placed in texels (0,0), (0,1), (1,0), (1,1) and
38
- the data at Z = 1 is placed in texels (2,0), (2,1), (3,0), (3,1).
39
- Note that there could be empty space in the megatexture because it's a power of two.
40
-
41
- 0 1 2 3
42
- +---+---+---+---+
43
- | | | | | 3
44
- +---+---+---+---+
45
- | | | | | 2
46
- +-------+-------+
47
- |010|110|011|111| 1
48
- |--- ---|--- ---|
49
- |000|100|001|101| 0
50
- +-------+-------+
51
-
52
- When doing linear interpolation the megatexture needs to be sampled twice: once for
53
- the Z slice above the voxel coordinate and once for the slice below. The two slices
54
- are interpolated with fract(coord.z - 0.5). For example, a Z coordinate of 1.0 is
55
- halfway between two Z slices so the interpolation factor is 0.5. Below is a side view
56
- of the 3D voxel grid with voxel coordinates on the left side.
57
-
58
- 2 +---+
59
- |001|
60
- 1 +-z-+
61
- |000|
62
- 0 +---+
63
-
64
- When doing nearest neighbor the megatexture only needs to be sampled once at the closest Z slice.
65
- */
66
-
67
20
  Properties getPropertiesFromMegatexture(in SampleData sampleData) {
68
21
  int tileIndex = sampleData.megatextureIndex;
69
22
 
70
23
  vec3 voxelCoord = sampleData.inputCoordinate;
71
- #if defined(NEAREST_SAMPLING)
72
- // Round to the center of the nearest voxel
73
- voxelCoord = floor(voxelCoord) + vec3(0.5);
74
- #endif
75
24
 
76
- // Tile location
77
- vec2 tileUvOffset = index1DTo2DTexcoord(tileIndex, u_megatextureTileDimensions, u_megatextureTileSizeUv);
78
-
79
- // Slice location
80
- float slice = voxelCoord.z - 0.5;
81
- int sliceIndex = int(floor(slice));
82
- int sliceIndex0 = intClamp(sliceIndex, 0, u_inputDimensions.z - 1);
83
- vec2 sliceUvOffset0 = index1DTo2DTexcoord(sliceIndex0, u_megatextureSliceDimensions, u_megatextureSliceSizeUv);
25
+ // UV coordinate of the lower corner of the tile in the megatexture
26
+ vec3 tileUvOffset = index1DTo3DTexCoord(tileIndex);
84
27
 
85
28
  // Voxel location
86
- vec2 voxelUvOffset = clamp(voxelCoord.xy, vec2(0.5), vec2(u_inputDimensions.xy) - vec2(0.5)) * u_megatextureVoxelSizeUv;
87
-
88
- // Final location in the megatexture
89
- vec2 uv0 = tileUvOffset + sliceUvOffset0 + voxelUvOffset;
29
+ vec3 tileDimensions = vec3(u_inputDimensions);
30
+ vec3 clampedVoxelCoord = clamp(voxelCoord, vec3(0.5), tileDimensions - vec3(0.5));
31
+ vec3 voxelUv = clampedVoxelCoord / tileDimensions / vec3(u_megatextureTileCounts);
90
32
 
91
- #if defined(NEAREST_SAMPLING)
92
- return getPropertiesFromMegatextureAtUv(uv0);
93
- #else
94
- float sliceLerp = fract(slice);
95
- int sliceIndex1 = intMin(sliceIndex + 1, u_inputDimensions.z - 1);
96
- vec2 sliceUvOffset1 = index1DTo2DTexcoord(sliceIndex1, u_megatextureSliceDimensions, u_megatextureSliceSizeUv);
97
- vec2 uv1 = tileUvOffset + sliceUvOffset1 + voxelUvOffset;
98
- Properties properties0 = getPropertiesFromMegatextureAtUv(uv0);
99
- Properties properties1 = getPropertiesFromMegatextureAtUv(uv1);
100
- return mixProperties(properties0, properties1, sliceLerp);
101
- #endif
33
+ return getPropertiesFromMegatextureAtUv(tileUvOffset + voxelUv);
102
34
  }
103
35
 
104
36
  // Convert an array of sample datas to a final weighted properties.
@@ -1,105 +1,37 @@
1
1
  //This file is automatically rebuilt by the Cesium build process.
2
- export default "// See Octree.glsl for the definitions of SampleData and intMod\n\
2
+ export default "// See Octree.glsl for the definitions of SampleData\n\
3
3
  \n\
4
4
  /* Megatexture defines (set in Scene/VoxelRenderResources.js)\n\
5
5
  #define SAMPLE_COUNT ###\n\
6
- #define NEAREST_SAMPLING\n\
7
6
  #define PADDING\n\
8
7
  */\n\
9
8
  \n\
10
- uniform ivec2 u_megatextureSliceDimensions; // number of slices per tile, in two dimensions\n\
11
- uniform ivec2 u_megatextureTileDimensions; // number of tiles per megatexture, in two dimensions\n\
12
- uniform vec2 u_megatextureVoxelSizeUv;\n\
13
- uniform vec2 u_megatextureSliceSizeUv;\n\
14
- uniform vec2 u_megatextureTileSizeUv;\n\
9
+ uniform ivec3 u_megatextureTileCounts; // number of tiles in the megatexture, along each axis\n\
15
10
  \n\
16
- // Integer min, max, clamp: For WebGL1 only\n\
17
- int intMin(int a, int b) {\n\
18
- return a <= b ? a : b;\n\
19
- }\n\
20
- int intMax(int a, int b) {\n\
21
- return a >= b ? a : b;\n\
22
- }\n\
23
- int intClamp(int v, int minVal, int maxVal) {\n\
24
- return intMin(intMax(v, minVal), maxVal);\n\
25
- }\n\
26
- \n\
27
- vec2 index1DTo2DTexcoord(int index, ivec2 dimensions, vec2 uvScale)\n\
11
+ vec3 index1DTo3DTexCoord(int index)\n\
28
12
  {\n\
29
- int indexX = intMod(index, dimensions.x);\n\
30
- int indexY = index / dimensions.x;\n\
31
- return vec2(indexX, indexY) * uvScale;\n\
13
+ int tilesPerZ = u_megatextureTileCounts.x * u_megatextureTileCounts.y;\n\
14
+ int iz = index / tilesPerZ;\n\
15
+ int remainder = index - iz * tilesPerZ;\n\
16
+ int iy = remainder / u_megatextureTileCounts.x;\n\
17
+ int ix = remainder - iy * u_megatextureTileCounts.x;\n\
18
+ return vec3(ix, iy, iz) / vec3(u_megatextureTileCounts);\n\
32
19
  }\n\
33
20
  \n\
34
- /*\n\
35
- How is 3D data stored in a 2D megatexture?\n\
36
- \n\
37
- In this example there is only one loaded tile and it has 2x2x2 voxels (8 voxels total).\n\
38
- The data is sliced by Z. The data at Z = 0 is placed in texels (0,0), (0,1), (1,0), (1,1) and\n\
39
- the data at Z = 1 is placed in texels (2,0), (2,1), (3,0), (3,1).\n\
40
- Note that there could be empty space in the megatexture because it's a power of two.\n\
41
- \n\
42
- 0 1 2 3\n\
43
- +---+---+---+---+\n\
44
- | | | | | 3\n\
45
- +---+---+---+---+\n\
46
- | | | | | 2\n\
47
- +-------+-------+\n\
48
- |010|110|011|111| 1\n\
49
- |--- ---|--- ---|\n\
50
- |000|100|001|101| 0\n\
51
- +-------+-------+\n\
52
- \n\
53
- When doing linear interpolation the megatexture needs to be sampled twice: once for\n\
54
- the Z slice above the voxel coordinate and once for the slice below. The two slices\n\
55
- are interpolated with fract(coord.z - 0.5). For example, a Z coordinate of 1.0 is\n\
56
- halfway between two Z slices so the interpolation factor is 0.5. Below is a side view\n\
57
- of the 3D voxel grid with voxel coordinates on the left side.\n\
58
- \n\
59
- 2 +---+\n\
60
- |001|\n\
61
- 1 +-z-+\n\
62
- |000|\n\
63
- 0 +---+\n\
64
- \n\
65
- When doing nearest neighbor the megatexture only needs to be sampled once at the closest Z slice.\n\
66
- */\n\
67
- \n\
68
21
  Properties getPropertiesFromMegatexture(in SampleData sampleData) {\n\
69
22
  int tileIndex = sampleData.megatextureIndex;\n\
70
23
  \n\
71
24
  vec3 voxelCoord = sampleData.inputCoordinate;\n\
72
- #if defined(NEAREST_SAMPLING)\n\
73
- // Round to the center of the nearest voxel\n\
74
- voxelCoord = floor(voxelCoord) + vec3(0.5);\n\
75
- #endif\n\
76
25
  \n\
77
- // Tile location\n\
78
- vec2 tileUvOffset = index1DTo2DTexcoord(tileIndex, u_megatextureTileDimensions, u_megatextureTileSizeUv);\n\
79
- \n\
80
- // Slice location\n\
81
- float slice = voxelCoord.z - 0.5;\n\
82
- int sliceIndex = int(floor(slice));\n\
83
- int sliceIndex0 = intClamp(sliceIndex, 0, u_inputDimensions.z - 1);\n\
84
- vec2 sliceUvOffset0 = index1DTo2DTexcoord(sliceIndex0, u_megatextureSliceDimensions, u_megatextureSliceSizeUv);\n\
26
+ // UV coordinate of the lower corner of the tile in the megatexture\n\
27
+ vec3 tileUvOffset = index1DTo3DTexCoord(tileIndex);\n\
85
28
  \n\
86
29
  // Voxel location\n\
87
- vec2 voxelUvOffset = clamp(voxelCoord.xy, vec2(0.5), vec2(u_inputDimensions.xy) - vec2(0.5)) * u_megatextureVoxelSizeUv;\n\
88
- \n\
89
- // Final location in the megatexture\n\
90
- vec2 uv0 = tileUvOffset + sliceUvOffset0 + voxelUvOffset;\n\
30
+ vec3 tileDimensions = vec3(u_inputDimensions);\n\
31
+ vec3 clampedVoxelCoord = clamp(voxelCoord, vec3(0.5), tileDimensions - vec3(0.5));\n\
32
+ vec3 voxelUv = clampedVoxelCoord / tileDimensions / vec3(u_megatextureTileCounts);\n\
91
33
  \n\
92
- #if defined(NEAREST_SAMPLING)\n\
93
- return getPropertiesFromMegatextureAtUv(uv0);\n\
94
- #else\n\
95
- float sliceLerp = fract(slice);\n\
96
- int sliceIndex1 = intMin(sliceIndex + 1, u_inputDimensions.z - 1);\n\
97
- vec2 sliceUvOffset1 = index1DTo2DTexcoord(sliceIndex1, u_megatextureSliceDimensions, u_megatextureSliceSizeUv);\n\
98
- vec2 uv1 = tileUvOffset + sliceUvOffset1 + voxelUvOffset;\n\
99
- Properties properties0 = getPropertiesFromMegatextureAtUv(uv0);\n\
100
- Properties properties1 = getPropertiesFromMegatextureAtUv(uv1);\n\
101
- return mixProperties(properties0, properties1, sliceLerp);\n\
102
- #endif\n\
34
+ return getPropertiesFromMegatextureAtUv(tileUvOffset + voxelUv);\n\
103
35
  }\n\
104
36
  \n\
105
37
  // Convert an array of sample datas to a final weighted properties.\n\
@@ -44,10 +44,6 @@ struct SampleData {
44
44
  #endif
45
45
  };
46
46
 
47
- // Integer mod: For WebGL1 only
48
- int intMod(in int a, in int b) {
49
- return a - (b * (a / b));
50
- }
51
47
  int normU8_toInt(in float value) {
52
48
  return int(value * 255.0);
53
49
  }
@@ -69,14 +65,14 @@ OctreeNodeData getOctreeNodeData(in vec2 octreeUv) {
69
65
 
70
66
  OctreeNodeData getOctreeChildData(in int parentOctreeIndex, in ivec3 childCoord) {
71
67
  int childIndex = childCoord.z * 4 + childCoord.y * 2 + childCoord.x;
72
- int octreeCoordX = intMod(parentOctreeIndex, u_octreeInternalNodeTilesPerRow) * 9 + 1 + childIndex;
68
+ int octreeCoordX = (parentOctreeIndex % u_octreeInternalNodeTilesPerRow) * 9 + 1 + childIndex;
73
69
  int octreeCoordY = parentOctreeIndex / u_octreeInternalNodeTilesPerRow;
74
70
  vec2 octreeUv = u_octreeInternalNodeTexelSizeUv * vec2(float(octreeCoordX) + 0.5, float(octreeCoordY) + 0.5);
75
71
  return getOctreeNodeData(octreeUv);
76
72
  }
77
73
 
78
74
  int getOctreeParentIndex(in int octreeIndex) {
79
- int octreeCoordX = intMod(octreeIndex, u_octreeInternalNodeTilesPerRow) * 9;
75
+ int octreeCoordX = (octreeIndex % u_octreeInternalNodeTilesPerRow) * 9;
80
76
  int octreeCoordY = octreeIndex / u_octreeInternalNodeTilesPerRow;
81
77
  vec2 octreeUv = u_octreeInternalNodeTexelSizeUv * vec2(float(octreeCoordX) + 0.5, float(octreeCoordY) + 0.5);
82
78
  vec4 parentData = texture(u_octreeInternalNodeTexture, octreeUv);
@@ -106,8 +102,9 @@ void addSampleCoordinates(in TileAndUvCoordinate tileAndUv, inout SampleData sam
106
102
  #if defined(Y_UP_METADATA_ORDER)
107
103
  #if defined(SHAPE_BOX)
108
104
  float inputY = inputCoordinate.y;
109
- inputCoordinate.y = float(u_inputDimensions.y) - inputCoordinate.z;
110
- inputCoordinate.z = inputY;
105
+ inputCoordinate.y = inputCoordinate.z;
106
+ // u_inputDimensions.z is the y-up dimension along the 3D Tiles y-axis.
107
+ inputCoordinate.z = float(u_inputDimensions.z) - inputY;
111
108
  #elif defined(SHAPE_CYLINDER)
112
109
  float angle = inputCoordinate.y;
113
110
  float height = inputCoordinate.z;
@@ -139,7 +136,7 @@ void getOctreeLeafSampleDatas(in OctreeNodeData data, in ivec4 octreeCoords, out
139
136
  int leafIndex = data.data;
140
137
  int leafNodeTexelCount = 2;
141
138
  // Adding 0.5 moves to the center of the texel
142
- float leafCoordXStart = float(intMod(leafIndex, u_octreeLeafNodeTilesPerRow) * leafNodeTexelCount) + 0.5;
139
+ float leafCoordXStart = float((leafIndex % u_octreeLeafNodeTilesPerRow) * leafNodeTexelCount) + 0.5;
143
140
  float leafCoordY = float(leafIndex / u_octreeLeafNodeTilesPerRow) + 0.5;
144
141
 
145
142
  // Get an interpolation weight and a flag to determine whether to read the parent texture
@@ -45,10 +45,6 @@ struct SampleData {\n\
45
45
  #endif\n\
46
46
  };\n\
47
47
  \n\
48
- // Integer mod: For WebGL1 only\n\
49
- int intMod(in int a, in int b) {\n\
50
- return a - (b * (a / b));\n\
51
- }\n\
52
48
  int normU8_toInt(in float value) {\n\
53
49
  return int(value * 255.0);\n\
54
50
  }\n\
@@ -70,14 +66,14 @@ OctreeNodeData getOctreeNodeData(in vec2 octreeUv) {\n\
70
66
  \n\
71
67
  OctreeNodeData getOctreeChildData(in int parentOctreeIndex, in ivec3 childCoord) {\n\
72
68
  int childIndex = childCoord.z * 4 + childCoord.y * 2 + childCoord.x;\n\
73
- int octreeCoordX = intMod(parentOctreeIndex, u_octreeInternalNodeTilesPerRow) * 9 + 1 + childIndex;\n\
69
+ int octreeCoordX = (parentOctreeIndex % u_octreeInternalNodeTilesPerRow) * 9 + 1 + childIndex;\n\
74
70
  int octreeCoordY = parentOctreeIndex / u_octreeInternalNodeTilesPerRow;\n\
75
71
  vec2 octreeUv = u_octreeInternalNodeTexelSizeUv * vec2(float(octreeCoordX) + 0.5, float(octreeCoordY) + 0.5);\n\
76
72
  return getOctreeNodeData(octreeUv);\n\
77
73
  }\n\
78
74
  \n\
79
75
  int getOctreeParentIndex(in int octreeIndex) {\n\
80
- int octreeCoordX = intMod(octreeIndex, u_octreeInternalNodeTilesPerRow) * 9;\n\
76
+ int octreeCoordX = (octreeIndex % u_octreeInternalNodeTilesPerRow) * 9;\n\
81
77
  int octreeCoordY = octreeIndex / u_octreeInternalNodeTilesPerRow;\n\
82
78
  vec2 octreeUv = u_octreeInternalNodeTexelSizeUv * vec2(float(octreeCoordX) + 0.5, float(octreeCoordY) + 0.5);\n\
83
79
  vec4 parentData = texture(u_octreeInternalNodeTexture, octreeUv);\n\
@@ -107,8 +103,9 @@ void addSampleCoordinates(in TileAndUvCoordinate tileAndUv, inout SampleData sam
107
103
  #if defined(Y_UP_METADATA_ORDER)\n\
108
104
  #if defined(SHAPE_BOX)\n\
109
105
  float inputY = inputCoordinate.y;\n\
110
- inputCoordinate.y = float(u_inputDimensions.y) - inputCoordinate.z;\n\
111
- inputCoordinate.z = inputY;\n\
106
+ inputCoordinate.y = inputCoordinate.z;\n\
107
+ // u_inputDimensions.z is the y-up dimension along the 3D Tiles y-axis.\n\
108
+ inputCoordinate.z = float(u_inputDimensions.z) - inputY;\n\
112
109
  #elif defined(SHAPE_CYLINDER)\n\
113
110
  float angle = inputCoordinate.y;\n\
114
111
  float height = inputCoordinate.z;\n\
@@ -140,7 +137,7 @@ void getOctreeLeafSampleDatas(in OctreeNodeData data, in ivec4 octreeCoords, out
140
137
  int leafIndex = data.data;\n\
141
138
  int leafNodeTexelCount = 2;\n\
142
139
  // Adding 0.5 moves to the center of the texel\n\
143
- float leafCoordXStart = float(intMod(leafIndex, u_octreeLeafNodeTilesPerRow) * leafNodeTexelCount) + 0.5;\n\
140
+ float leafCoordXStart = float((leafIndex % u_octreeLeafNodeTilesPerRow) * leafNodeTexelCount) + 0.5;\n\
144
141
  float leafCoordY = float(leafIndex / u_octreeLeafNodeTilesPerRow) + 0.5;\n\
145
142
  \n\
146
143
  // Get an interpolation weight and a flag to determine whether to read the parent texture\n\
@@ -175,7 +175,7 @@ function configureCameraFrustum(widget) {
175
175
  *
176
176
  * @exception {DeveloperError} Element with id "container" does not exist in the document.
177
177
  *
178
- * @demo {@link https://sandcastle.cesium.com/index.html?src=Cesium%20Widget.html|Cesium Sandcastle Cesium Widget Demo}
178
+ * @demo {@link https://sandcastle.cesium.com/index.html?id=cesium-widget|Cesium Sandcastle Cesium Widget Demo}
179
179
  *
180
180
  * @example
181
181
  * // For each example, include a link to CesiumWidget.css stylesheet in HTML head,
@@ -12,6 +12,9 @@ const scratchTrianglePoints = [
12
12
  ];
13
13
  const scratchTriangleAABB = new AxisAlignedBoundingBox();
14
14
 
15
+ const TILE_AABB_MAX = new Cartesian3(0.5, 0.5, 0.5);
16
+ const TILE_AABB_MIN = new Cartesian3(-0.5, -0.5, -0.5);
17
+
15
18
  /**
16
19
  * Builds the next layer of the terrain picker's quadtree by determining which triangles intersect
17
20
  * each of the four child nodes. (Essentially distributing the parent's triangles to its children.)
@@ -42,7 +45,7 @@ function incrementallyBuildTerrainPicker(parameters, transferableObjects) {
42
45
  );
43
46
 
44
47
  const triangleIndices = new Uint32Array(parameters.triangleIndices);
45
- const trianglePositions = new Float32Array(parameters.trianglePositions);
48
+ const trianglePositions = new Float64Array(parameters.trianglePositions);
46
49
  const intersectingTrianglesArrays = Array.from({ length: 4 }, () => []);
47
50
 
48
51
  for (let j = 0; j < triangleIndices.length; j++) {
@@ -102,7 +105,18 @@ function createAABBFromTriangle(inverseTransform, trianglePoints) {
102
105
  trianglePoints[2],
103
106
  );
104
107
 
105
- return AxisAlignedBoundingBox.fromPoints(trianglePoints, scratchTriangleAABB);
108
+ const aabb = AxisAlignedBoundingBox.fromPoints(
109
+ trianglePoints,
110
+ scratchTriangleAABB,
111
+ );
112
+
113
+ // In 2D mode, sometimes the height-scale of a tile is 0. See {@link TerrainMesh#computeTransform2D}.
114
+ // This makes the inverseTransform degenerate, so we set the height-scale to 1 to be prevent that. However, this is artificial and
115
+ // can lead to the triangle's AABB extending beyond the (height) bounds of the tile's AABB.
116
+ // Thus, we clamp the triangle's AABB to the tile's local-space AABB.
117
+ Cartesian3.clamp(aabb.minimum, TILE_AABB_MIN, TILE_AABB_MAX, aabb.minimum);
118
+ Cartesian3.clamp(aabb.maximum, TILE_AABB_MIN, TILE_AABB_MAX, aabb.maximum);
119
+ return aabb;
106
120
  }
107
121
 
108
122
  export default createTaskProcessorWorker(incrementallyBuildTerrainPicker);
package/index.d.ts CHANGED
@@ -8801,7 +8801,7 @@ export namespace IntersectionTests {
8801
8801
  /**
8802
8802
  * Computes the intersection of a ray and a triangle as a parametric distance along the input ray. The result is negative when the triangle is behind the ray.
8803
8803
  *
8804
- * Implements {@link https://cadxfem.org/inf/Fast%20MinimumStorage%20RayTriangle%20Intersection.pdf|
8804
+ * Implements {@link https://cadxfem.org/inf/Fast MinimumStorage RayTriangle Intersection.pdf|
8805
8805
  * Fast Minimum Storage Ray/Triangle Intersection} by Tomas Moller and Ben Trumbore.
8806
8806
  * @param ray - The ray.
8807
8807
  * @param p0 - The first vertex of the triangle.
@@ -8815,7 +8815,7 @@ export namespace IntersectionTests {
8815
8815
  /**
8816
8816
  * Computes the intersection of a ray and a triangle as a Cartesian3 coordinate.
8817
8817
  *
8818
- * Implements {@link https://cadxfem.org/inf/Fast%20MinimumStorage%20RayTriangle%20Intersection.pdf|
8818
+ * Implements {@link https://cadxfem.org/inf/Fast MinimumStorage RayTriangle Intersection.pdf|
8819
8819
  * Fast Minimum Storage Ray/Triangle Intersection} by Tomas Moller and Ben Trumbore.
8820
8820
  * @param ray - The ray.
8821
8821
  * @param p0 - The first vertex of the triangle.
@@ -19065,6 +19065,15 @@ export function srgbToLinear(value: number): number;
19065
19065
  */
19066
19066
  export function subdivideArray(array: any[], numberOfArrays: number): void;
19067
19067
 
19068
+ /**
19069
+ * Computes dimensions for text, based on current canvas state.
19070
+ *
19071
+ * Rounds metrics, excluding width, to whole pixels. This is purely to minimize
19072
+ * rendering differences with migration to in-browser measureText(), and may be
19073
+ * revised in the future. See: github.com/CesiumGS/cesium/pull/13081
19074
+ */
19075
+ export function measureText(): void;
19076
+
19068
19077
  /**
19069
19078
  * Writes the given text into a new canvas. The canvas will be sized to fit the text.
19070
19079
  * If text is blank, returns undefined.
@@ -26427,27 +26436,24 @@ export enum Axis {
26427
26436
  export namespace Azure2DImageryProvider {
26428
26437
  /**
26429
26438
  * Initialization options for the Azure2DImageryProvider constructor
26430
- * @property options - Object with the following properties:
26431
- * @property [options.url = "https://atlas.microsoft.com/"] - The Azure server url.
26432
- * @property options.tilesetId - The Azure tileset ID. Valid options are {@link microsoft.imagery}, {@link microsoft.base.road}, and {@link microsoft.base.labels.road}
26433
- * @property options.subscriptionKey - The public subscription key for the imagery.
26434
- * @property [options.ellipsoid = Ellipsoid.default] - The ellipsoid. If not specified, the default ellipsoid is used.
26435
- * @property [options.minimumLevel = 0] - The minimum level-of-detail supported by the imagery provider. Take care when specifying
26439
+ * @property subscriptionKey - The public subscription key for the imagery.
26440
+ * @property [url = "https://atlas.microsoft.com/"] - The Azure server url.
26441
+ * @property [tilesetId = "microsoft.imagery"] - The Azure tileset ID. Valid options are {@link microsoft.imagery}, {@link microsoft.base.road}, and {@link microsoft.base.labels.road}
26442
+ * @property [ellipsoid = Ellipsoid.default] - The ellipsoid. If not specified, the default ellipsoid is used.
26443
+ * @property [minimumLevel = 0] - The minimum level-of-detail supported by the imagery provider. Take care when specifying
26436
26444
  * this that the number of tiles at the minimum level is small, such as four or less. A larger number is likely
26437
26445
  * to result in rendering problems.
26438
- * @property [options.maximumLevel = 22] - The maximum level-of-detail supported by the imagery provider.
26439
- * @property [options.rectangle = Rectangle.MAX_VALUE] - The rectangle, in radians, covered by the image.
26446
+ * @property [maximumLevel = 22] - The maximum level-of-detail supported by the imagery provider.
26447
+ * @property [rectangle = Rectangle.MAX_VALUE] - The rectangle, in radians, covered by the image.
26440
26448
  */
26441
26449
  type ConstructorOptions = {
26442
- options: {
26443
- url?: string;
26444
- tilesetId: string;
26445
- subscriptionKey: string;
26446
- ellipsoid?: Ellipsoid;
26447
- minimumLevel?: number;
26448
- maximumLevel?: number;
26449
- rectangle?: Rectangle;
26450
- };
26450
+ subscriptionKey: string;
26451
+ url?: string;
26452
+ tilesetId?: string;
26453
+ ellipsoid?: Ellipsoid;
26454
+ minimumLevel?: number;
26455
+ maximumLevel?: number;
26456
+ rectangle?: Rectangle;
26451
26457
  };
26452
26458
  }
26453
26459
 
@@ -32285,7 +32291,7 @@ export namespace DynamicEnvironmentMapManager {
32285
32291
  /**
32286
32292
  * Options for the DynamicEnvironmentMapManager constructor
32287
32293
  * @property [enabled = true] - If true, the environment map and related properties will continue to update.
32288
- * @property [mipmapLevels = 7] - The number of mipmap levels to generate for specular maps. More mipmap levels will produce a higher resolution specular reflection.
32294
+ * @property [mipmapLevels = 7] - The maximum desired number of mipmap levels to generate for specular maps. More mipmap levels will produce a higher resolution specular reflection. The actual number of mipmaps used will be bounded by the cubemap texture size supported on the client machine. The number of mipmaps must be at least one for the environment map to be generated.
32289
32295
  * @property [maximumSecondsDifference = 3600] - The maximum amount of elapsed seconds before a new environment map is created.
32290
32296
  * @property [maximumPositionEpsilon = 1000] - The maximum difference in position before a new environment map is created, in meters. Small differences in position will not visibly affect results.
32291
32297
  * @property [atmosphereScatteringIntensity = 2.0] - The intensity of the scattered light emitted from the atmosphere. This should be adjusted relative to the value of {@link Scene.light} intensity.
@@ -37316,6 +37322,11 @@ export namespace MaterialAppearance {
37316
37322
  }
37317
37323
  }
37318
37324
 
37325
+ /**
37326
+ * Gets or sets the nearest sampling flag.
37327
+ */
37328
+ export var nearestSampling: boolean;
37329
+
37319
37330
  /**
37320
37331
  * A metadata class.
37321
37332
  *
@@ -41209,7 +41220,7 @@ export class PostProcessStageCollection {
41209
41220
  readonly length: number;
41210
41221
  /**
41211
41222
  * Specifies the tonemapping algorithm used when rendering with high dynamic range.
41212
- * {@link https://sandcastle.cesium.com/?src=High%20Dynamic%20Range.html|Sandcastle Demo}
41223
+ * {@link https://sandcastle.cesium.com/?id=high-dynamic-range|Sandcastle Demo}
41213
41224
  * @example
41214
41225
  * viewer.scene.postProcessStages.tonemapper = Cesium.Tonemapper.ACES;
41215
41226
  */