@cesium/engine 10.1.0 → 11.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.
- package/Build/Workers/{chunk-N4QEHO3U.js → chunk-2EDC3QGH.js} +1 -1
- package/Build/Workers/{chunk-NVOABL76.js → chunk-2MKRG7L7.js} +5 -5
- package/Build/Workers/{chunk-X23FRWHJ.js → chunk-2RZYNSMR.js} +6 -6
- package/Build/Workers/{chunk-TO2PVHKI.js → chunk-4NBRIKB3.js} +2 -2
- package/Build/Workers/{chunk-5BLJ5ZM6.js → chunk-4TK5YR6Q.js} +5 -5
- package/Build/Workers/{chunk-TF776XCO.js → chunk-54VC7SCM.js} +7 -7
- package/Build/Workers/{chunk-2GEAGYUY.js → chunk-5IY5BXCT.js} +13 -13
- package/Build/Workers/{chunk-OXALEQPI.js → chunk-6FFGOENI.js} +10 -7
- package/Build/Workers/{chunk-65MZOUNU.js → chunk-6PJIHPQB.js} +13 -13
- package/Build/Workers/{chunk-FOZWUH4T.js → chunk-6ZREIBKS.js} +7 -7
- package/Build/Workers/{chunk-BY3E4ONI.js → chunk-AI3O7UN2.js} +6 -6
- package/Build/Workers/{chunk-XQI7XZHX.js → chunk-AS7P4BHI.js} +6 -6
- package/Build/Workers/{chunk-PNFHVBSF.js → chunk-AUM45VEG.js} +16 -15
- package/Build/Workers/{chunk-VRZ46QZ5.js → chunk-BBO6BGLC.js} +13 -13
- package/Build/Workers/{chunk-POSRARY7.js → chunk-BH5ZEN4I.js} +10 -10
- package/Build/Workers/{chunk-A5CODJ4M.js → chunk-BJ3WF5RW.js} +6 -6
- package/Build/Workers/{chunk-Q55ECN3Y.js → chunk-BUOFSNFW.js} +1 -1
- package/Build/Workers/{chunk-QX5XS4LC.js → chunk-BZXF3GNX.js} +2 -2
- package/Build/Workers/{chunk-T6LPN7RI.js → chunk-DJXXI7UF.js} +5 -5
- package/Build/Workers/{chunk-C3Z23UUJ.js → chunk-DVAIU7A4.js} +17 -17
- package/Build/Workers/{chunk-X2ZQ7RJR.js → chunk-FJT3ERV7.js} +9 -9
- package/Build/Workers/{chunk-UCIPJSZX.js → chunk-GOHDOWU5.js} +14 -14
- package/Build/Workers/{chunk-R4OIEIPE.js → chunk-HA6TZ3XT.js} +4 -4
- package/Build/Workers/{chunk-ACRTCBN5.js → chunk-HBZSCVZC.js} +11 -11
- package/Build/Workers/{chunk-BGE4QVG7.js → chunk-HC7RYWPZ.js} +12 -12
- package/Build/Workers/{chunk-VE7BFUIX.js → chunk-HFMJM3SX.js} +1 -1
- package/Build/Workers/{chunk-OOK53QUQ.js → chunk-HFPMX5L2.js} +1 -1
- package/Build/Workers/{chunk-6D66DPRV.js → chunk-HO2NTC7I.js} +6 -6
- package/Build/Workers/{chunk-F3NDOSTZ.js → chunk-HZPMWR4H.js} +7 -7
- package/Build/Workers/{chunk-I2RC4XVN.js → chunk-IBG5FVXC.js} +4 -4
- package/Build/Workers/{chunk-FEVVHITK.js → chunk-IXLNNST6.js} +4 -4
- package/Build/Workers/{chunk-4YSNMHZ4.js → chunk-JYUCC5NV.js} +6 -6
- package/Build/Workers/{chunk-FDCLACT5.js → chunk-KFW4UNQH.js} +10 -10
- package/Build/Workers/{chunk-R6B7UCQB.js → chunk-KKAEXHDY.js} +2 -2
- package/Build/Workers/{chunk-D2U4RI64.js → chunk-L6FARMF6.js} +7 -7
- package/Build/Workers/{chunk-OOMCT7OL.js → chunk-N3BIL6WA.js} +13 -13
- package/Build/Workers/{chunk-XZZNKIEV.js → chunk-O5SSW3B3.js} +6 -6
- package/Build/Workers/{chunk-S3PI2KFM.js → chunk-OC4MYPVW.js} +2 -2
- package/Build/Workers/{chunk-XLTOBCDI.js → chunk-OOA6GXKD.js} +7 -7
- package/Build/Workers/{chunk-GPJR7MPQ.js → chunk-OSCHEWSG.js} +7 -7
- package/Build/Workers/{chunk-RZLZWKFN.js → chunk-QGT2GMOK.js} +4 -4
- package/Build/Workers/{chunk-OWGTMVDB.js → chunk-RFQYEYAL.js} +17 -17
- package/Build/Workers/{chunk-LSSWVB2X.js → chunk-RJF5ZP76.js} +4 -4
- package/Build/Workers/{chunk-EB7PNZTK.js → chunk-SIZXFNJY.js} +6 -5
- package/Build/Workers/{chunk-G5V4GPZE.js → chunk-SRZJCF7G.js} +9 -9
- package/Build/Workers/{chunk-T77JILCU.js → chunk-T4MB73MC.js} +2 -2
- package/Build/Workers/{chunk-4RMIRG6T.js → chunk-TTI2SUWJ.js} +2 -2
- package/Build/Workers/{chunk-4VFBBNQ3.js → chunk-VHJ5ESXF.js} +1 -1
- package/Build/Workers/{chunk-2J3JKXCP.js → chunk-VSFFJGTA.js} +9 -5
- package/Build/Workers/{chunk-ZU334IDQ.js → chunk-WQRXRDCZ.js} +11 -11
- package/Build/Workers/{chunk-J7MQUQJY.js → chunk-WXDGOYTT.js} +12 -7
- package/Build/Workers/{chunk-76BYYG7N.js → chunk-XLCZE6DD.js} +10 -10
- package/Build/Workers/combineGeometry.js +22 -22
- package/Build/Workers/createBoxGeometry.js +16 -16
- package/Build/Workers/createBoxOutlineGeometry.js +14 -14
- package/Build/Workers/createCircleGeometry.js +24 -24
- package/Build/Workers/createCircleOutlineGeometry.js +17 -17
- package/Build/Workers/createCoplanarPolygonGeometry.js +31 -31
- package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +29 -29
- package/Build/Workers/createCorridorGeometry.js +27 -27
- package/Build/Workers/createCorridorOutlineGeometry.js +26 -26
- package/Build/Workers/createCylinderGeometry.js +18 -18
- package/Build/Workers/createCylinderOutlineGeometry.js +16 -16
- package/Build/Workers/createEllipseGeometry.js +24 -24
- package/Build/Workers/createEllipseOutlineGeometry.js +17 -17
- package/Build/Workers/createEllipsoidGeometry.js +17 -17
- package/Build/Workers/createEllipsoidOutlineGeometry.js +16 -16
- package/Build/Workers/createFrustumGeometry.js +16 -16
- package/Build/Workers/createFrustumOutlineGeometry.js +16 -16
- package/Build/Workers/createGeometry.js +22 -22
- package/Build/Workers/createGroundPolylineGeometry.js +20 -20
- package/Build/Workers/createPlaneGeometry.js +14 -14
- package/Build/Workers/createPlaneOutlineGeometry.js +13 -13
- package/Build/Workers/createPolygonGeometry.js +30 -30
- package/Build/Workers/createPolygonOutlineGeometry.js +28 -28
- package/Build/Workers/createPolylineGeometry.js +23 -23
- package/Build/Workers/createPolylineVolumeGeometry.js +29 -29
- package/Build/Workers/createPolylineVolumeOutlineGeometry.js +25 -25
- package/Build/Workers/createRectangleGeometry.js +25 -25
- package/Build/Workers/createRectangleOutlineGeometry.js +18 -18
- package/Build/Workers/createSimplePolylineGeometry.js +21 -21
- package/Build/Workers/createSphereGeometry.js +17 -17
- package/Build/Workers/createSphereOutlineGeometry.js +16 -16
- package/Build/Workers/createTaskProcessorWorker.js +3 -3
- package/Build/Workers/createVectorTileClampedPolylines.js +13 -13
- package/Build/Workers/createVectorTileGeometries.js +22 -22
- package/Build/Workers/createVectorTilePoints.js +12 -12
- package/Build/Workers/createVectorTilePolygons.js +20 -20
- package/Build/Workers/createVectorTilePolylines.js +13 -13
- package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +20 -20
- package/Build/Workers/createVerticesFromHeightmap.js +24 -20
- package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +17 -17
- package/Build/Workers/createWallGeometry.js +22 -22
- package/Build/Workers/createWallOutlineGeometry.js +21 -21
- package/Build/Workers/decodeDraco.js +11 -11
- package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +28 -5
- package/Build/Workers/decodeI3S.js +10 -10
- package/Build/Workers/transcodeKTX2.js +19 -18
- package/Build/Workers/transferTypedArrayTest.js +1 -1
- package/Build/Workers/upsampleQuantizedTerrainMesh.js +20 -20
- package/Source/Core/CompressedTextureBuffer.js +11 -0
- package/Source/Core/Ion.js +1 -1
- package/Source/Core/KTX2Transcoder.js +9 -16
- package/Source/Core/PixelFormat.js +1 -15
- package/Source/DataSources/CallbackProperty.js +8 -2
- package/Source/DataSources/CheckerboardMaterialProperty.js +7 -1
- package/Source/DataSources/ColorMaterialProperty.js +7 -1
- package/Source/DataSources/CompositeMaterialProperty.js +5 -4
- package/Source/DataSources/CompositePositionProperty.js +7 -1
- package/Source/DataSources/CompositeProperty.js +5 -5
- package/Source/DataSources/ConstantPositionProperty.js +7 -1
- package/Source/DataSources/Entity.js +1 -1
- package/Source/DataSources/GridMaterialProperty.js +7 -1
- package/Source/DataSources/ImageMaterialProperty.js +8 -1
- package/Source/DataSources/MaterialProperty.js +7 -1
- package/Source/DataSources/NodeTransformationProperty.js +7 -1
- package/Source/DataSources/PolylineArrowMaterialProperty.js +7 -1
- package/Source/DataSources/PolylineDashMaterialProperty.js +7 -1
- package/Source/DataSources/PolylineGlowMaterialProperty.js +7 -1
- package/Source/DataSources/PolylineOutlineMaterialProperty.js +7 -1
- package/Source/DataSources/PositionProperty.js +1 -1
- package/Source/DataSources/PositionPropertyArray.js +7 -1
- package/Source/DataSources/Property.js +1 -1
- package/Source/DataSources/PropertyArray.js +5 -5
- package/Source/DataSources/PropertyBag.js +5 -4
- package/Source/DataSources/ReferenceProperty.js +7 -1
- package/Source/DataSources/SampledPositionProperty.js +7 -1
- package/Source/DataSources/SampledProperty.js +6 -4
- package/Source/DataSources/ScaledPositionProperty.js +6 -0
- package/Source/DataSources/StripeMaterialProperty.js +7 -1
- package/Source/DataSources/TerrainOffsetProperty.js +9 -0
- package/Source/DataSources/TimeIntervalCollectionPositionProperty.js +7 -1
- package/Source/DataSources/TimeIntervalCollectionProperty.js +5 -5
- package/Source/DataSources/VelocityOrientationProperty.js +6 -1
- package/Source/DataSources/VelocityVectorProperty.js +3 -5
- package/Source/Renderer/AutomaticUniforms.js +2 -17
- package/Source/Renderer/Context.js +15 -0
- package/Source/Renderer/CubeMap.js +326 -348
- package/Source/Renderer/CubeMapFace.js +26 -48
- package/Source/Renderer/PixelDatatype.js +23 -0
- package/Source/Renderer/Sampler.js +7 -13
- package/Source/Renderer/ShaderProgram.js +7 -0
- package/Source/Renderer/Texture.js +396 -332
- package/Source/Renderer/UniformState.js +3 -22
- package/Source/Renderer/demodernizeShader.js +2 -0
- package/Source/Renderer/loadCubeMap.js +3 -8
- package/Source/Scene/ArcGisMapService.js +1 -1
- package/Source/Scene/CameraEventAggregator.js +49 -5
- package/Source/Scene/Globe.js +1 -1
- package/Source/Scene/GlobeSurfaceShaderSet.js +29 -24
- package/Source/Scene/GlobeSurfaceTileProvider.js +5 -3
- package/Source/Scene/ImageBasedLighting.js +34 -34
- package/Source/Scene/Label.js +2 -2
- package/Source/Scene/Material.js +24 -2
- package/Source/Scene/Model/ImageBasedLightingPipelineStage.js +7 -15
- package/Source/Scene/PostProcessStageCollection.js +45 -15
- package/Source/Scene/PostProcessStageLibrary.js +26 -0
- package/Source/Scene/Scene.js +20 -22
- package/Source/Scene/SceneTransforms.js +0 -62
- package/Source/Scene/ScreenSpaceCameraController.js +11 -4
- package/Source/Scene/SkyBox.js +13 -19
- package/Source/Scene/SpecularEnvironmentCubeMap.js +240 -0
- package/Source/Scene/Tonemapper.js +35 -23
- package/Source/Scene/VoxelPrimitive.js +0 -29
- package/Source/Scene/VoxelRenderResources.js +0 -3
- package/Source/Shaders/Builtin/CzmBuiltins.js +2 -2
- package/Source/Shaders/Builtin/Functions/pbrLighting.glsl +2 -2
- package/Source/Shaders/Builtin/Functions/pbrLighting.js +2 -2
- package/Source/Shaders/Builtin/Functions/pbrNeutralTonemapping.glsl +23 -0
- package/Source/Shaders/Builtin/Functions/pbrNeutralTonemapping.js +25 -0
- package/Source/Shaders/Builtin/Functions/textureCube.glsl +21 -2
- package/Source/Shaders/Builtin/Functions/textureCube.js +21 -2
- package/Source/Shaders/Builtin/Structs/materialInput.glsl +2 -0
- package/Source/Shaders/Builtin/Structs/materialInput.js +2 -0
- package/Source/Shaders/GlobeFS.glsl +10 -4
- package/Source/Shaders/GlobeFS.js +10 -4
- package/Source/Shaders/Materials/WaterMaskMaterial.glsl +15 -0
- package/Source/Shaders/Materials/WaterMaskMaterial.js +17 -0
- package/Source/Shaders/Model/AtmosphereStageFS.glsl +1 -1
- package/Source/Shaders/Model/AtmosphereStageFS.js +1 -1
- package/Source/Shaders/Model/ImageBasedLightingStageFS.glsl +40 -29
- package/Source/Shaders/Model/ImageBasedLightingStageFS.js +40 -29
- package/Source/Shaders/Model/LightingStageFS.glsl +2 -2
- package/Source/Shaders/Model/LightingStageFS.js +2 -2
- package/Source/Shaders/PostProcessStages/AcesTonemappingStage.glsl +4 -0
- package/Source/Shaders/PostProcessStages/AcesTonemappingStage.js +4 -0
- package/Source/Shaders/PostProcessStages/FilmicTonemapping.glsl +4 -0
- package/Source/Shaders/PostProcessStages/FilmicTonemapping.js +4 -0
- package/Source/Shaders/PostProcessStages/ModifiedReinhardTonemapping.glsl +4 -0
- package/Source/Shaders/PostProcessStages/ModifiedReinhardTonemapping.js +4 -0
- package/Source/Shaders/PostProcessStages/PbrNeutralTonemapping.glsl +25 -0
- package/Source/Shaders/PostProcessStages/PbrNeutralTonemapping.js +27 -0
- package/Source/Shaders/PostProcessStages/ReinhardTonemapping.glsl +4 -0
- package/Source/Shaders/PostProcessStages/ReinhardTonemapping.js +4 -0
- package/Source/Shaders/SkyAtmosphereFS.glsl +1 -1
- package/Source/Shaders/SkyAtmosphereFS.js +1 -1
- package/Source/Widget/CesiumWidget.js +1 -1
- package/index.d.ts +117 -101
- package/index.js +212 -213
- package/package.json +2 -2
- package/Build/Workers/chunk-3WUV74WM.js +0 -1800
- package/Build/Workers/chunk-4MSUJ4I7.js +0 -456
- package/Build/Workers/chunk-5KWHSZYL.js +0 -834
- package/Build/Workers/chunk-5O6JWQ4E.js +0 -398
- package/Build/Workers/chunk-6OFDHMHR.js +0 -1258
- package/Build/Workers/chunk-AA4GZKOT.js +0 -75
- package/Build/Workers/chunk-B75IEX2S.js +0 -390
- package/Build/Workers/chunk-BAVI3ZS2.js +0 -39
- package/Build/Workers/chunk-BBDZYSZB.js +0 -287
- package/Build/Workers/chunk-C45MU4GZ.js +0 -220
- package/Build/Workers/chunk-CF7P7K7E.js +0 -684
- package/Build/Workers/chunk-D4K27X2M.js +0 -305
- package/Build/Workers/chunk-DKVHRNFY.js +0 -100
- package/Build/Workers/chunk-ELI4BUOT.js +0 -963
- package/Build/Workers/chunk-FQPSOOPH.js +0 -258
- package/Build/Workers/chunk-GNHZH7HP.js +0 -37
- package/Build/Workers/chunk-GWT64LKY.js +0 -171
- package/Build/Workers/chunk-HGEEOMSC.js +0 -157
- package/Build/Workers/chunk-IUROUBPA.js +0 -300
- package/Build/Workers/chunk-JNLWLSTP.js +0 -476
- package/Build/Workers/chunk-JYQNWIQQ.js +0 -44
- package/Build/Workers/chunk-KUN2ZA5X.js +0 -138
- package/Build/Workers/chunk-KV4EQHK4.js +0 -1477
- package/Build/Workers/chunk-LXQ5QAEJ.js +0 -196
- package/Build/Workers/chunk-MBZH7YZ7.js +0 -945
- package/Build/Workers/chunk-MKXWJTFQ.js +0 -781
- package/Build/Workers/chunk-MMV6TO3P.js +0 -101
- package/Build/Workers/chunk-MSKXMXJI.js +0 -500
- package/Build/Workers/chunk-OAPA2RTG.js +0 -239
- package/Build/Workers/chunk-OE4MCOC7.js +0 -421
- package/Build/Workers/chunk-OJF4RTJG.js +0 -634
- package/Build/Workers/chunk-OXSI7N4C.js +0 -768
- package/Build/Workers/chunk-PYHLO636.js +0 -2857
- package/Build/Workers/chunk-QD4KM3GO.js +0 -138
- package/Build/Workers/chunk-QMLTCCYG.js +0 -55
- package/Build/Workers/chunk-QYQIVZBU.js +0 -117
- package/Build/Workers/chunk-R3TKLC6E.js +0 -1075
- package/Build/Workers/chunk-R4ZEWO4I.js +0 -122
- package/Build/Workers/chunk-RCK55EDX.js +0 -691
- package/Build/Workers/chunk-RHBWXX7C.js +0 -629
- package/Build/Workers/chunk-SAPFXU5X.js +0 -102
- package/Build/Workers/chunk-TBBFDFCS.js +0 -368
- package/Build/Workers/chunk-TGY6H6N6.js +0 -163
- package/Build/Workers/chunk-UOEUCKKU.js +0 -59
- package/Build/Workers/chunk-VFBNELXB.js +0 -353
- package/Build/Workers/chunk-VYWUFRRR.js +0 -1052
- package/Build/Workers/chunk-WVSELU6O.js +0 -2716
- package/Build/Workers/chunk-X43SJLQL.js +0 -10364
- package/Build/Workers/chunk-XUOJCLOH.js +0 -511
- package/Build/Workers/chunk-YLYBLJ3Y.js +0 -73
- package/Build/Workers/chunk-ZEE2EIFD.js +0 -430
- package/Build/Workers/chunk-ZIKGV7EL.js +0 -58
- package/Source/Scene/OctahedralProjectedCubeMap.js +0 -444
- package/Source/Shaders/Builtin/Functions/sampleOctahedralProjection.glsl +0 -78
- package/Source/Shaders/Builtin/Functions/sampleOctahedralProjection.js +0 -80
- package/Source/Shaders/OctahedralProjectionAtlasFS.glsl +0 -89
- package/Source/Shaders/OctahedralProjectionAtlasFS.js +0 -91
- package/Source/Shaders/OctahedralProjectionFS.glsl +0 -14
- package/Source/Shaders/OctahedralProjectionFS.js +0 -16
- package/Source/Shaders/OctahedralProjectionVS.glsl +0 -10
- package/Source/Shaders/OctahedralProjectionVS.js +0 -12
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import defined from "../Core/defined.js";
|
|
2
|
+
import destroyObject from "../Core/destroyObject.js";
|
|
3
|
+
import Event from "../Core/Event.js";
|
|
4
|
+
import loadKTX2 from "../Core/loadKTX2.js";
|
|
5
|
+
import PixelFormat from "../Core/PixelFormat.js";
|
|
6
|
+
import CubeMap from "../Renderer/CubeMap.js";
|
|
7
|
+
import PixelDatatype from "../Renderer/PixelDatatype.js";
|
|
8
|
+
import Sampler from "../Renderer/Sampler.js";
|
|
9
|
+
import TextureMinificationFilter from "../Renderer/TextureMinificationFilter.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Manages a cube map for use as a specular environment map.
|
|
13
|
+
*
|
|
14
|
+
* @alias SpecularEnvironmentCubeMap
|
|
15
|
+
* @constructor
|
|
16
|
+
*
|
|
17
|
+
* @param {string} url The url to the KTX2 file containing the specular environment map and convoluted mipmaps.
|
|
18
|
+
* @private
|
|
19
|
+
*/
|
|
20
|
+
function SpecularEnvironmentCubeMap(url) {
|
|
21
|
+
this._url = url;
|
|
22
|
+
|
|
23
|
+
this._cubeMapBuffers = undefined;
|
|
24
|
+
this._texture = undefined;
|
|
25
|
+
|
|
26
|
+
this._maximumMipmapLevel = undefined;
|
|
27
|
+
|
|
28
|
+
this._loading = false;
|
|
29
|
+
this._ready = false;
|
|
30
|
+
|
|
31
|
+
this._errorEvent = new Event();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
Object.defineProperties(SpecularEnvironmentCubeMap.prototype, {
|
|
35
|
+
/**
|
|
36
|
+
* The url to the KTX2 file containing the specular environment map and convoluted mipmaps.
|
|
37
|
+
* @memberof SpecularEnvironmentCubeMap.prototype
|
|
38
|
+
* @type {string}
|
|
39
|
+
* @readonly
|
|
40
|
+
*/
|
|
41
|
+
url: {
|
|
42
|
+
get: function () {
|
|
43
|
+
return this._url;
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
/**
|
|
47
|
+
* Gets an event that is raised when encountering an asynchronous error. By subscribing
|
|
48
|
+
* to the event, you will be notified of the error and can potentially recover from it.
|
|
49
|
+
* @memberof SpecularEnvironmentCubeMap.prototype
|
|
50
|
+
* @type {Event}
|
|
51
|
+
* @readonly
|
|
52
|
+
*/
|
|
53
|
+
errorEvent: {
|
|
54
|
+
get: function () {
|
|
55
|
+
return this._errorEvent;
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
/**
|
|
59
|
+
* A texture containing all the packed convolutions.
|
|
60
|
+
* @memberof SpecularEnvironmentCubeMap.prototype
|
|
61
|
+
* @type {Texture}
|
|
62
|
+
* @readonly
|
|
63
|
+
*/
|
|
64
|
+
texture: {
|
|
65
|
+
get: function () {
|
|
66
|
+
return this._texture;
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
/**
|
|
70
|
+
* The maximum number of mip levels with valid environment map data.
|
|
71
|
+
* This may differ from the number of mips in the WebGL cubemap.
|
|
72
|
+
* The data loaded at <code>maximumMipmapLevel</code> is suitable for
|
|
73
|
+
* PBR rendering of a material with maximum roughness (1.0).
|
|
74
|
+
* @memberOf SpecularEnvironmentCubeMap.prototype
|
|
75
|
+
* @type {number}
|
|
76
|
+
* @readonly
|
|
77
|
+
*/
|
|
78
|
+
maximumMipmapLevel: {
|
|
79
|
+
get: function () {
|
|
80
|
+
return this._maximumMipmapLevel;
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
/**
|
|
84
|
+
* Determines if the cube map is complete and ready to use.
|
|
85
|
+
* @memberof SpecularEnvironmentCubeMap.prototype
|
|
86
|
+
* @type {boolean}
|
|
87
|
+
* @readonly
|
|
88
|
+
*/
|
|
89
|
+
ready: {
|
|
90
|
+
get: function () {
|
|
91
|
+
return this._ready;
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
SpecularEnvironmentCubeMap.isSupported = function (context) {
|
|
97
|
+
const supportsFloatBuffersAndTextures =
|
|
98
|
+
(context.colorBufferHalfFloat && context.halfFloatingPointTexture) ||
|
|
99
|
+
(context.floatingPointTexture && context.colorBufferFloat);
|
|
100
|
+
return supportsFloatBuffersAndTextures && context.supportsTextureLod;
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
function cleanupResources(map) {
|
|
104
|
+
map._cubeMapBuffers = undefined;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Loads the environment map image and constructs the cube map for specular radiance calculations.
|
|
109
|
+
* <p>
|
|
110
|
+
* Once the image is loaded, the next call cleans up unused resources. Every call after that is a no-op.
|
|
111
|
+
* </p>
|
|
112
|
+
* @param {FrameState} frameState The frame state.
|
|
113
|
+
*
|
|
114
|
+
* @private
|
|
115
|
+
*/
|
|
116
|
+
SpecularEnvironmentCubeMap.prototype.update = function (frameState) {
|
|
117
|
+
const { context } = frameState;
|
|
118
|
+
|
|
119
|
+
if (!SpecularEnvironmentCubeMap.isSupported(context)) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if (defined(this._texture)) {
|
|
124
|
+
cleanupResources(this);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if (!defined(this._texture) && !this._loading) {
|
|
129
|
+
const cachedTexture = context.textureCache.getTexture(this._url);
|
|
130
|
+
if (defined(cachedTexture)) {
|
|
131
|
+
cleanupResources(this);
|
|
132
|
+
this._texture = cachedTexture;
|
|
133
|
+
this._maximumMipmapLevel = this._texture.maximumMipmapLevel;
|
|
134
|
+
this._ready = true;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const cubeMapBuffers = this._cubeMapBuffers;
|
|
139
|
+
if (!defined(cubeMapBuffers) && !this._loading) {
|
|
140
|
+
const that = this;
|
|
141
|
+
loadKTX2(this._url)
|
|
142
|
+
.then(function (buffers) {
|
|
143
|
+
that._cubeMapBuffers = buffers;
|
|
144
|
+
that._loading = false;
|
|
145
|
+
})
|
|
146
|
+
.catch(function (error) {
|
|
147
|
+
if (that.isDestroyed()) {
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
that._errorEvent.raiseEvent(error);
|
|
151
|
+
});
|
|
152
|
+
this._loading = true;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
if (!defined(this._cubeMapBuffers)) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// Datatype is defined if it is a normalized type (i.e. ..._UNORM, ..._SFLOAT)
|
|
160
|
+
let { pixelDatatype } = cubeMapBuffers[0].positiveX;
|
|
161
|
+
if (!defined(pixelDatatype)) {
|
|
162
|
+
pixelDatatype = context.halfFloatingPointTexture
|
|
163
|
+
? PixelDatatype.HALF_FLOAT
|
|
164
|
+
: PixelDatatype.FLOAT;
|
|
165
|
+
}
|
|
166
|
+
const pixelFormat = PixelFormat.RGBA;
|
|
167
|
+
|
|
168
|
+
const mipLevels = cubeMapBuffers.length;
|
|
169
|
+
this._maximumMipmapLevel = mipLevels - 1;
|
|
170
|
+
|
|
171
|
+
const faceSize = cubeMapBuffers[0].positiveX.width;
|
|
172
|
+
const expectedMipLevels = Math.log2(faceSize) + 1;
|
|
173
|
+
if (mipLevels !== expectedMipLevels) {
|
|
174
|
+
// We assume the last supplied mip level was computed as the specular radiance
|
|
175
|
+
// for roughness 1.0.
|
|
176
|
+
// Fill the remaining levels with null values, to avoid WebGL errors.
|
|
177
|
+
const dummyMipLevel = {};
|
|
178
|
+
Object.values(CubeMap.FaceName).forEach((faceName) => {
|
|
179
|
+
dummyMipLevel[faceName] = undefined;
|
|
180
|
+
});
|
|
181
|
+
for (let mipLevel = mipLevels; mipLevel < expectedMipLevels; mipLevel++) {
|
|
182
|
+
cubeMapBuffers.push(dummyMipLevel);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
const sampler = new Sampler({
|
|
187
|
+
minificationFilter: TextureMinificationFilter.LINEAR_MIPMAP_LINEAR,
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
const cubeMap = new CubeMap({
|
|
191
|
+
context: context,
|
|
192
|
+
source: cubeMapBuffers[0],
|
|
193
|
+
flipY: false,
|
|
194
|
+
pixelDatatype: pixelDatatype,
|
|
195
|
+
pixelFormat: pixelFormat,
|
|
196
|
+
sampler: sampler,
|
|
197
|
+
});
|
|
198
|
+
cubeMap.loadMipmaps(cubeMapBuffers.slice(1));
|
|
199
|
+
this._texture = cubeMap;
|
|
200
|
+
|
|
201
|
+
this._texture.maximumMipmapLevel = this._maximumMipmapLevel;
|
|
202
|
+
context.textureCache.addTexture(this._url, this._texture);
|
|
203
|
+
|
|
204
|
+
this._ready = true;
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Returns true if this object was destroyed; otherwise, false.
|
|
209
|
+
* <p>
|
|
210
|
+
* If this object was destroyed, it should not be used; calling any function other than
|
|
211
|
+
* <code>isDestroyed</code> will result in a {@link DeveloperError} exception.
|
|
212
|
+
* </p>
|
|
213
|
+
*
|
|
214
|
+
* @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.
|
|
215
|
+
*
|
|
216
|
+
* @see SpecularEnvironmentCubeMap#destroy
|
|
217
|
+
*/
|
|
218
|
+
SpecularEnvironmentCubeMap.prototype.isDestroyed = function () {
|
|
219
|
+
return false;
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Destroys the WebGL resources held by this object. Destroying an object allows for deterministic
|
|
224
|
+
* release of WebGL resources, instead of relying on the garbage collector to destroy this object.
|
|
225
|
+
* <p>
|
|
226
|
+
* Once an object is destroyed, it should not be used; calling any function other than
|
|
227
|
+
* <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,
|
|
228
|
+
* assign the return value (<code>undefined</code>) to the object as done in the example.
|
|
229
|
+
* </p>
|
|
230
|
+
*
|
|
231
|
+
* @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.
|
|
232
|
+
*
|
|
233
|
+
* @see SpecularEnvironmentCubeMap#isDestroyed
|
|
234
|
+
*/
|
|
235
|
+
SpecularEnvironmentCubeMap.prototype.destroy = function () {
|
|
236
|
+
cleanupResources(this);
|
|
237
|
+
this._texture = this._texture && this._texture.destroy();
|
|
238
|
+
return destroyObject(this);
|
|
239
|
+
};
|
|
240
|
+
export default SpecularEnvironmentCubeMap;
|
|
@@ -1,52 +1,64 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* A tonemapping algorithm when rendering with high dynamic range.
|
|
3
3
|
*
|
|
4
|
-
* @enum {
|
|
5
|
-
* @private
|
|
4
|
+
* @enum {string}
|
|
6
5
|
*/
|
|
7
6
|
const Tonemapper = {
|
|
8
7
|
/**
|
|
9
|
-
* Use the Reinhard tonemapping
|
|
8
|
+
* Use the Reinhard tonemapping.
|
|
10
9
|
*
|
|
11
|
-
* @type {
|
|
10
|
+
* @type {string}
|
|
12
11
|
* @constant
|
|
13
12
|
*/
|
|
14
|
-
REINHARD:
|
|
13
|
+
REINHARD: "REINHARD",
|
|
15
14
|
|
|
16
15
|
/**
|
|
17
|
-
* Use the modified Reinhard tonemapping
|
|
16
|
+
* Use the modified Reinhard tonemapping.
|
|
18
17
|
*
|
|
19
|
-
* @type {
|
|
18
|
+
* @type {string}
|
|
20
19
|
* @constant
|
|
21
20
|
*/
|
|
22
|
-
MODIFIED_REINHARD:
|
|
21
|
+
MODIFIED_REINHARD: "MODIFIED_REINHARD",
|
|
23
22
|
|
|
24
23
|
/**
|
|
25
|
-
* Use the Filmic tonemapping
|
|
24
|
+
* Use the Filmic tonemapping.
|
|
26
25
|
*
|
|
27
|
-
* @type {
|
|
26
|
+
* @type {string}
|
|
28
27
|
* @constant
|
|
29
28
|
*/
|
|
30
|
-
FILMIC:
|
|
29
|
+
FILMIC: "FILMIC",
|
|
31
30
|
|
|
32
31
|
/**
|
|
33
|
-
* Use the ACES tonemapping
|
|
32
|
+
* Use the ACES tonemapping.
|
|
34
33
|
*
|
|
35
|
-
* @type {
|
|
34
|
+
* @type {string}
|
|
36
35
|
* @constant
|
|
37
36
|
*/
|
|
38
|
-
ACES:
|
|
37
|
+
ACES: "ACES",
|
|
39
38
|
|
|
40
39
|
/**
|
|
41
|
-
* @
|
|
40
|
+
* Use the PBR Neutral tonemapping {@link https://github.com/KhronosGroup/ToneMapping/tree/main/PBR_Neutral|from Khronos}.
|
|
41
|
+
*
|
|
42
|
+
* @type {string}
|
|
43
|
+
* @constant
|
|
42
44
|
*/
|
|
43
|
-
|
|
44
|
-
return (
|
|
45
|
-
tonemapper === Tonemapper.REINHARD ||
|
|
46
|
-
tonemapper === Tonemapper.MODIFIED_REINHARD ||
|
|
47
|
-
tonemapper === Tonemapper.FILMIC ||
|
|
48
|
-
tonemapper === Tonemapper.ACES
|
|
49
|
-
);
|
|
50
|
-
},
|
|
45
|
+
PBR_NEUTRAL: "PBR_NEUTRAL",
|
|
51
46
|
};
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Validate whether the provided value is a known Tonemapper type
|
|
50
|
+
* @private
|
|
51
|
+
*
|
|
52
|
+
* @param {string} tonemapper
|
|
53
|
+
*/
|
|
54
|
+
export function validateTonemapper(tonemapper) {
|
|
55
|
+
return (
|
|
56
|
+
tonemapper === Tonemapper.REINHARD ||
|
|
57
|
+
tonemapper === Tonemapper.MODIFIED_REINHARD ||
|
|
58
|
+
tonemapper === Tonemapper.FILMIC ||
|
|
59
|
+
tonemapper === Tonemapper.ACES ||
|
|
60
|
+
tonemapper === Tonemapper.PBR_NEUTRAL
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
|
|
52
64
|
export default Object.freeze(Tonemapper);
|
|
@@ -332,12 +332,6 @@ function VoxelPrimitive(options) {
|
|
|
332
332
|
this._transformNormalLocalToWorld = new Matrix3();
|
|
333
333
|
|
|
334
334
|
// Rendering
|
|
335
|
-
/**
|
|
336
|
-
* @type {boolean}
|
|
337
|
-
* @private
|
|
338
|
-
*/
|
|
339
|
-
this._jitter = false;
|
|
340
|
-
|
|
341
335
|
/**
|
|
342
336
|
* @type {boolean}
|
|
343
337
|
* @private
|
|
@@ -704,29 +698,6 @@ Object.defineProperties(VoxelPrimitive.prototype, {
|
|
|
704
698
|
},
|
|
705
699
|
},
|
|
706
700
|
|
|
707
|
-
/**
|
|
708
|
-
* Gets or sets whether or not to jitter the view ray during the raymarch.
|
|
709
|
-
* This reduces stair-step artifacts but introduces noise.
|
|
710
|
-
*
|
|
711
|
-
* @memberof VoxelPrimitive.prototype
|
|
712
|
-
* @type {boolean}
|
|
713
|
-
*/
|
|
714
|
-
jitter: {
|
|
715
|
-
get: function () {
|
|
716
|
-
return this._jitter;
|
|
717
|
-
},
|
|
718
|
-
set: function (jitter) {
|
|
719
|
-
//>>includeStart('debug', pragmas.debug);
|
|
720
|
-
Check.typeOf.bool("jitter", jitter);
|
|
721
|
-
//>>includeEnd('debug');
|
|
722
|
-
|
|
723
|
-
if (this._jitter !== jitter) {
|
|
724
|
-
this._jitter = jitter;
|
|
725
|
-
this._shaderDirty = true;
|
|
726
|
-
}
|
|
727
|
-
},
|
|
728
|
-
},
|
|
729
|
-
|
|
730
701
|
/**
|
|
731
702
|
* Gets or sets the nearest sampling.
|
|
732
703
|
*
|
|
@@ -215,9 +215,6 @@ function VoxelRenderResources(primitive) {
|
|
|
215
215
|
ShaderDestination.FRAGMENT
|
|
216
216
|
);
|
|
217
217
|
}
|
|
218
|
-
if (primitive._jitter) {
|
|
219
|
-
shaderBuilder.addDefine("JITTER", undefined, ShaderDestination.FRAGMENT);
|
|
220
|
-
}
|
|
221
218
|
if (primitive._nearestSampling) {
|
|
222
219
|
shaderBuilder.addDefine(
|
|
223
220
|
"NEAREST_SAMPLING",
|
|
@@ -103,6 +103,7 @@ import czm_nearFarScalar from './Functions/nearFarScalar.js'
|
|
|
103
103
|
import czm_octDecode from './Functions/octDecode.js'
|
|
104
104
|
import czm_packDepth from './Functions/packDepth.js'
|
|
105
105
|
import czm_pbrLighting from './Functions/pbrLighting.js'
|
|
106
|
+
import czm_pbrNeutralTonemapping from './Functions/pbrNeutralTonemapping.js'
|
|
106
107
|
import czm_phong from './Functions/phong.js'
|
|
107
108
|
import czm_planeDistance from './Functions/planeDistance.js'
|
|
108
109
|
import czm_pointAlongRay from './Functions/pointAlongRay.js'
|
|
@@ -112,7 +113,6 @@ import czm_readDepth from './Functions/readDepth.js'
|
|
|
112
113
|
import czm_readNonPerspective from './Functions/readNonPerspective.js'
|
|
113
114
|
import czm_reverseLogDepth from './Functions/reverseLogDepth.js'
|
|
114
115
|
import czm_round from './Functions/round.js'
|
|
115
|
-
import czm_sampleOctahedralProjection from './Functions/sampleOctahedralProjection.js'
|
|
116
116
|
import czm_saturation from './Functions/saturation.js'
|
|
117
117
|
import czm_shadowDepthCompare from './Functions/shadowDepthCompare.js'
|
|
118
118
|
import czm_shadowVisibility from './Functions/shadowVisibility.js'
|
|
@@ -241,6 +241,7 @@ export default {
|
|
|
241
241
|
czm_octDecode : czm_octDecode,
|
|
242
242
|
czm_packDepth : czm_packDepth,
|
|
243
243
|
czm_pbrLighting : czm_pbrLighting,
|
|
244
|
+
czm_pbrNeutralTonemapping : czm_pbrNeutralTonemapping,
|
|
244
245
|
czm_phong : czm_phong,
|
|
245
246
|
czm_planeDistance : czm_planeDistance,
|
|
246
247
|
czm_pointAlongRay : czm_pointAlongRay,
|
|
@@ -250,7 +251,6 @@ export default {
|
|
|
250
251
|
czm_readNonPerspective : czm_readNonPerspective,
|
|
251
252
|
czm_reverseLogDepth : czm_reverseLogDepth,
|
|
252
253
|
czm_round : czm_round,
|
|
253
|
-
czm_sampleOctahedralProjection : czm_sampleOctahedralProjection,
|
|
254
254
|
czm_saturation : czm_saturation,
|
|
255
255
|
czm_shadowDepthCompare : czm_shadowDepthCompare,
|
|
256
256
|
czm_shadowVisibility : czm_shadowVisibility,
|
|
@@ -96,8 +96,8 @@ float GGX(float alphaRoughness, float NdotH)
|
|
|
96
96
|
*/
|
|
97
97
|
float computeDirectSpecularStrength(vec3 normal, vec3 lightDirection, vec3 viewDirection, vec3 halfwayDirection, float alphaRoughness)
|
|
98
98
|
{
|
|
99
|
-
float NdotL = dot(normal, lightDirection);
|
|
100
|
-
float NdotV =
|
|
99
|
+
float NdotL = clamp(dot(normal, lightDirection), 0.0, 1.0);
|
|
100
|
+
float NdotV = clamp(dot(normal, viewDirection), 0.0, 1.0);
|
|
101
101
|
float G = smithVisibilityGGX(alphaRoughness, NdotL, NdotV);
|
|
102
102
|
float NdotH = clamp(dot(normal, halfwayDirection), 0.0, 1.0);
|
|
103
103
|
float D = GGX(alphaRoughness, NdotH);
|
|
@@ -97,8 +97,8 @@ float GGX(float alphaRoughness, float NdotH)\n\
|
|
|
97
97
|
*/\n\
|
|
98
98
|
float computeDirectSpecularStrength(vec3 normal, vec3 lightDirection, vec3 viewDirection, vec3 halfwayDirection, float alphaRoughness)\n\
|
|
99
99
|
{\n\
|
|
100
|
-
float NdotL = dot(normal, lightDirection);\n\
|
|
101
|
-
float NdotV =
|
|
100
|
+
float NdotL = clamp(dot(normal, lightDirection), 0.0, 1.0);\n\
|
|
101
|
+
float NdotV = clamp(dot(normal, viewDirection), 0.0, 1.0);\n\
|
|
102
102
|
float G = smithVisibilityGGX(alphaRoughness, NdotL, NdotV);\n\
|
|
103
103
|
float NdotH = clamp(dot(normal, halfwayDirection), 0.0, 1.0);\n\
|
|
104
104
|
float D = GGX(alphaRoughness, NdotH);\n\
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// KhronosGroup https://github.com/KhronosGroup/ToneMapping/tree/main/PBR_Neutral
|
|
2
|
+
|
|
3
|
+
// Input color is non-negative and resides in the Linear Rec. 709 color space.
|
|
4
|
+
// Output color is also Linear Rec. 709, but in the [0, 1] range.
|
|
5
|
+
|
|
6
|
+
vec3 czm_pbrNeutralTonemapping(vec3 color) {
|
|
7
|
+
const float startCompression = 0.8 - 0.04;
|
|
8
|
+
const float desaturation = 0.15;
|
|
9
|
+
|
|
10
|
+
float x = min(color.r, min(color.g, color.b));
|
|
11
|
+
float offset = czm_branchFreeTernary(x < 0.08, x - 6.25 * x * x, 0.04);
|
|
12
|
+
color -= offset;
|
|
13
|
+
|
|
14
|
+
float peak = max(color.r, max(color.g, color.b));
|
|
15
|
+
if (peak < startCompression) return color;
|
|
16
|
+
|
|
17
|
+
const float d = 1.0 - startCompression;
|
|
18
|
+
float newPeak = 1.0 - d * d / (peak + d - startCompression);
|
|
19
|
+
color *= newPeak / peak;
|
|
20
|
+
|
|
21
|
+
float g = 1.0 - 1.0 / (desaturation * (peak - newPeak) + 1.0);
|
|
22
|
+
return mix(color, newPeak * vec3(1.0, 1.0, 1.0), g);
|
|
23
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//This file is automatically rebuilt by the Cesium build process.
|
|
2
|
+
export default "// KhronosGroup https://github.com/KhronosGroup/ToneMapping/tree/main/PBR_Neutral\n\
|
|
3
|
+
\n\
|
|
4
|
+
// Input color is non-negative and resides in the Linear Rec. 709 color space.\n\
|
|
5
|
+
// Output color is also Linear Rec. 709, but in the [0, 1] range.\n\
|
|
6
|
+
\n\
|
|
7
|
+
vec3 czm_pbrNeutralTonemapping(vec3 color) {\n\
|
|
8
|
+
const float startCompression = 0.8 - 0.04;\n\
|
|
9
|
+
const float desaturation = 0.15;\n\
|
|
10
|
+
\n\
|
|
11
|
+
float x = min(color.r, min(color.g, color.b));\n\
|
|
12
|
+
float offset = czm_branchFreeTernary(x < 0.08, x - 6.25 * x * x, 0.04);\n\
|
|
13
|
+
color -= offset;\n\
|
|
14
|
+
\n\
|
|
15
|
+
float peak = max(color.r, max(color.g, color.b));\n\
|
|
16
|
+
if (peak < startCompression) return color;\n\
|
|
17
|
+
\n\
|
|
18
|
+
const float d = 1.0 - startCompression;\n\
|
|
19
|
+
float newPeak = 1.0 - d * d / (peak + d - startCompression);\n\
|
|
20
|
+
color *= newPeak / peak;\n\
|
|
21
|
+
\n\
|
|
22
|
+
float g = 1.0 - 1.0 / (desaturation * (peak - newPeak) + 1.0);\n\
|
|
23
|
+
return mix(color, newPeak * vec3(1.0, 1.0, 1.0), g);\n\
|
|
24
|
+
}\n\
|
|
25
|
+
";
|
|
@@ -6,12 +6,31 @@
|
|
|
6
6
|
* @glslFunction
|
|
7
7
|
*
|
|
8
8
|
* @param {samplerCube} sampler The sampler.
|
|
9
|
-
* @param {vec3} p The
|
|
9
|
+
* @param {vec3} p The coordinate at which to sample the texture.
|
|
10
10
|
*/
|
|
11
11
|
vec4 czm_textureCube(samplerCube sampler, vec3 p) {
|
|
12
12
|
#if __VERSION__ == 300
|
|
13
13
|
return texture(sampler, p);
|
|
14
|
-
#else
|
|
14
|
+
#else
|
|
15
15
|
return textureCube(sampler, p);
|
|
16
16
|
#endif
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* A wrapper around the textureLod (WebGL2) / textureCube (WebGL1)
|
|
21
|
+
* function to allow for WebGL 1 support in fragment shaders.
|
|
22
|
+
*
|
|
23
|
+
* @name czm_textureCubeLod
|
|
24
|
+
* @glslFunction
|
|
25
|
+
*
|
|
26
|
+
* @param {samplerCube} sampler The sampler.
|
|
27
|
+
* @param {vec3} p The coordinate at which to sample the texture.
|
|
28
|
+
* @param {float} lod The mipmap level from which to sample.
|
|
29
|
+
*/
|
|
30
|
+
vec4 czm_textureCube(samplerCube sampler, vec3 p, float lod) {
|
|
31
|
+
#if __VERSION__ == 300
|
|
32
|
+
return textureLod(sampler, p, lod);
|
|
33
|
+
#elif defined(GL_EXT_shader_texture_lod)
|
|
34
|
+
return textureCubeLodEXT(sampler, p, lod);
|
|
35
|
+
#endif
|
|
17
36
|
}
|
|
@@ -7,12 +7,31 @@ export default "/**\n\
|
|
|
7
7
|
* @glslFunction\n\
|
|
8
8
|
*\n\
|
|
9
9
|
* @param {samplerCube} sampler The sampler.\n\
|
|
10
|
-
* @param {vec3} p The
|
|
10
|
+
* @param {vec3} p The coordinate at which to sample the texture.\n\
|
|
11
11
|
*/\n\
|
|
12
12
|
vec4 czm_textureCube(samplerCube sampler, vec3 p) {\n\
|
|
13
13
|
#if __VERSION__ == 300\n\
|
|
14
14
|
return texture(sampler, p);\n\
|
|
15
|
-
#else
|
|
15
|
+
#else\n\
|
|
16
16
|
return textureCube(sampler, p);\n\
|
|
17
17
|
#endif\n\
|
|
18
|
+
}\n\
|
|
19
|
+
\n\
|
|
20
|
+
/**\n\
|
|
21
|
+
* A wrapper around the textureLod (WebGL2) / textureCube (WebGL1)\n\
|
|
22
|
+
* function to allow for WebGL 1 support in fragment shaders.\n\
|
|
23
|
+
*\n\
|
|
24
|
+
* @name czm_textureCubeLod\n\
|
|
25
|
+
* @glslFunction\n\
|
|
26
|
+
*\n\
|
|
27
|
+
* @param {samplerCube} sampler The sampler.\n\
|
|
28
|
+
* @param {vec3} p The coordinate at which to sample the texture.\n\
|
|
29
|
+
* @param {float} lod The mipmap level from which to sample.\n\
|
|
30
|
+
*/\n\
|
|
31
|
+
vec4 czm_textureCube(samplerCube sampler, vec3 p, float lod) {\n\
|
|
32
|
+
#if __VERSION__ == 300\n\
|
|
33
|
+
return textureLod(sampler, p, lod);\n\
|
|
34
|
+
#elif defined(GL_EXT_shader_texture_lod)\n\
|
|
35
|
+
return textureCubeLodEXT(sampler, p, lod);\n\
|
|
36
|
+
#endif\n\
|
|
18
37
|
}";
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* @property {float} height The height of the terrain in meters above or below the ellipsoid. Only available for globe materials.
|
|
14
14
|
* @property {float} slope The slope of the terrain in radians. 0 is flat; pi/2 is vertical. Only available for globe materials.
|
|
15
15
|
* @property {float} aspect The aspect of the terrain in radians. 0 is East, pi/2 is North, pi is West, 3pi/2 is South. Only available for globe materials.
|
|
16
|
+
* @property {float} waterMask The value of the water mask. 0 is land, 1 is water. Only available for globe materials.
|
|
16
17
|
*/
|
|
17
18
|
struct czm_materialInput
|
|
18
19
|
{
|
|
@@ -25,4 +26,5 @@ struct czm_materialInput
|
|
|
25
26
|
float height;
|
|
26
27
|
float slope;
|
|
27
28
|
float aspect;
|
|
29
|
+
float waterMask;
|
|
28
30
|
};
|
|
@@ -14,6 +14,7 @@ export default "/**\n\
|
|
|
14
14
|
* @property {float} height The height of the terrain in meters above or below the ellipsoid. Only available for globe materials.\n\
|
|
15
15
|
* @property {float} slope The slope of the terrain in radians. 0 is flat; pi/2 is vertical. Only available for globe materials.\n\
|
|
16
16
|
* @property {float} aspect The aspect of the terrain in radians. 0 is East, pi/2 is North, pi is West, 3pi/2 is South. Only available for globe materials.\n\
|
|
17
|
+
* @property {float} waterMask The value of the water mask. 0 is land, 1 is water. Only available for globe materials.\n\
|
|
17
18
|
*/\n\
|
|
18
19
|
struct czm_materialInput\n\
|
|
19
20
|
{\n\
|
|
@@ -26,5 +27,6 @@ struct czm_materialInput\n\
|
|
|
26
27
|
float height;\n\
|
|
27
28
|
float slope;\n\
|
|
28
29
|
float aspect;\n\
|
|
30
|
+
float waterMask;\n\
|
|
29
31
|
};\n\
|
|
30
32
|
";
|
|
@@ -49,7 +49,7 @@ uniform vec4 u_colorsToAlpha[TEXTURE_UNITS];
|
|
|
49
49
|
uniform vec4 u_dayTextureTexCoordsRectangle[TEXTURE_UNITS];
|
|
50
50
|
#endif
|
|
51
51
|
|
|
52
|
-
#
|
|
52
|
+
#if defined(HAS_WATER_MASK) && (defined(SHOW_REFLECTIVE_OCEAN) || defined(APPLY_MATERIAL))
|
|
53
53
|
uniform sampler2D u_waterMask;
|
|
54
54
|
uniform vec4 u_waterMaskTranslationAndScale;
|
|
55
55
|
uniform float u_zoomedOutOceanSpecularIntensity;
|
|
@@ -362,7 +362,7 @@ void main()
|
|
|
362
362
|
float fade = 0.0;
|
|
363
363
|
#endif
|
|
364
364
|
|
|
365
|
-
#
|
|
365
|
+
#if defined(HAS_WATER_MASK) && (defined(SHOW_REFLECTIVE_OCEAN) || defined(APPLY_MATERIAL))
|
|
366
366
|
vec2 waterMaskTranslation = u_waterMaskTranslationAndScale.xy;
|
|
367
367
|
vec2 waterMaskScale = u_waterMaskTranslationAndScale.zw;
|
|
368
368
|
vec2 waterMaskTextureCoordinates = v_textureCoordinates.xy * waterMaskScale + waterMaskTranslation;
|
|
@@ -370,6 +370,7 @@ void main()
|
|
|
370
370
|
|
|
371
371
|
float mask = texture(u_waterMask, waterMaskTextureCoordinates).r;
|
|
372
372
|
|
|
373
|
+
#ifdef SHOW_REFLECTIVE_OCEAN
|
|
373
374
|
if (mask > 0.0)
|
|
374
375
|
{
|
|
375
376
|
mat3 enuToEye = czm_eastNorthUpToEyeCoordinates(v_positionMC, normalEC);
|
|
@@ -381,6 +382,7 @@ void main()
|
|
|
381
382
|
|
|
382
383
|
color = computeWaterColor(v_positionEC, textureCoordinates, enuToEye, color, mask, fade);
|
|
383
384
|
}
|
|
385
|
+
#endif
|
|
384
386
|
#endif
|
|
385
387
|
|
|
386
388
|
#ifdef APPLY_MATERIAL
|
|
@@ -392,6 +394,10 @@ void main()
|
|
|
392
394
|
materialInput.slope = v_slope;
|
|
393
395
|
materialInput.height = v_height;
|
|
394
396
|
materialInput.aspect = v_aspect;
|
|
397
|
+
#ifdef HAS_WATER_MASK
|
|
398
|
+
materialInput.waterMask = mask;
|
|
399
|
+
#endif
|
|
400
|
+
|
|
395
401
|
czm_material material = czm_getMaterial(materialInput);
|
|
396
402
|
vec4 materialColor = vec4(material.diffuse, material.alpha);
|
|
397
403
|
color = alphaBlend(materialColor, color);
|
|
@@ -422,7 +428,7 @@ void main()
|
|
|
422
428
|
#ifdef ENABLE_CLIPPING_POLYGONS
|
|
423
429
|
vec2 clippingPosition = v_clippingPosition;
|
|
424
430
|
int regionIndex = v_regionIndex;
|
|
425
|
-
clipPolygons(u_clippingDistance, CLIPPING_POLYGON_REGIONS_LENGTH, clippingPosition, regionIndex);
|
|
431
|
+
clipPolygons(u_clippingDistance, CLIPPING_POLYGON_REGIONS_LENGTH, clippingPosition, regionIndex);
|
|
426
432
|
#endif
|
|
427
433
|
|
|
428
434
|
#ifdef HIGHLIGHT_FILL_TILE
|
|
@@ -489,7 +495,7 @@ void main()
|
|
|
489
495
|
#endif
|
|
490
496
|
|
|
491
497
|
#ifndef HDR
|
|
492
|
-
fogColor.rgb =
|
|
498
|
+
fogColor.rgb = czm_pbrNeutralTonemapping(fogColor.rgb);
|
|
493
499
|
fogColor.rgb = czm_inverseGamma(fogColor.rgb);
|
|
494
500
|
#endif
|
|
495
501
|
|