@cesium/engine 20.0.2-ion.0 → 21.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/ThirdParty/Workers/zip-web-worker.js +637 -0
- package/Build/Workers/{chunk-WZKTQZUW.js → chunk-2T4WAVWX.js} +6 -6
- package/Build/Workers/{chunk-6LULWCX3.js → chunk-3G5XEUPY.js} +1 -1
- package/Build/Workers/{chunk-OIMV4OE5.js → chunk-3MSNTCHW.js} +9 -9
- package/Build/Workers/{chunk-VZNF2GT7.js → chunk-3OPG2FGI.js} +4 -4
- package/Build/Workers/{chunk-MTBXKKSQ.js → chunk-3PUG3T2H.js} +12 -12
- package/Build/Workers/{chunk-XWRUYDF6.js → chunk-4PH27XAL.js} +2 -2
- package/Build/Workers/{chunk-P2V7PVDH.js → chunk-4VJYMLR6.js} +8 -8
- package/Build/Workers/{chunk-MFXTB5I4.js → chunk-5B3PGBQW.js} +11 -11
- package/Build/Workers/{chunk-USK6ZAY2.js → chunk-5GHCWGC4.js} +1 -1
- package/Build/Workers/{chunk-AHFTST3Q.js → chunk-5PEQUMCB.js} +12 -12
- package/Build/Workers/{chunk-23B3EYUM.js → chunk-64WSG7AT.js} +4 -4
- package/Build/Workers/{chunk-CEA3L7M7.js → chunk-6J6WGCWP.js} +4 -4
- package/Build/Workers/{chunk-VSMKMGX4.js → chunk-75B34CC6.js} +5 -5
- package/Build/Workers/{chunk-IS5FETN7.js → chunk-7PLX65MV.js} +5 -5
- package/Build/Workers/{chunk-FNUSHLOY.js → chunk-AR2FUSG6.js} +1 -1
- package/Build/Workers/{chunk-VLGVUVJY.js → chunk-ARYRHDEB.js} +6 -6
- package/Build/Workers/{chunk-FHLPYFIW.js → chunk-B7INTBBB.js} +13 -13
- package/Build/Workers/{chunk-BHAATGZA.js → chunk-BDPSQXLX.js} +5 -5
- package/Build/Workers/{chunk-QZGZIAK2.js → chunk-BU4CGMHO.js} +6 -6
- package/Build/Workers/{chunk-YNPZU55A.js → chunk-BUBVUXDO.js} +6 -6
- package/Build/Workers/{chunk-LS63ERFB.js → chunk-CF72FAKC.js} +4 -4
- package/Build/Workers/{chunk-D4XRQNUO.js → chunk-DJ4ROETJ.js} +5 -5
- package/Build/Workers/{chunk-ABTG74AR.js → chunk-E5XCZVIY.js} +1 -1
- package/Build/Workers/{chunk-AFKNTEMH.js → chunk-EAYW4CFP.js} +16 -16
- package/Build/Workers/{chunk-YXTWHLJA.js → chunk-EHFMZFVC.js} +4 -4
- package/Build/Workers/{chunk-H7HFDM3G.js → chunk-FFCKCQPK.js} +5 -5
- package/Build/Workers/{chunk-V6ZGOX4I.js → chunk-GKCZ2G36.js} +7 -7
- package/Build/Workers/{chunk-VODCZKV2.js → chunk-HJ7IZBEI.js} +4 -4
- package/Build/Workers/{chunk-66MGJQFZ.js → chunk-JJZWDROM.js} +2 -2
- package/Build/Workers/{chunk-F4PS6RFF.js → chunk-JUOEBO4F.js} +10 -10
- package/Build/Workers/{chunk-WORBFT5H.js → chunk-K4IDXMIZ.js} +9 -9
- package/Build/Workers/{chunk-Q3OWKSC5.js → chunk-LL6HN3W4.js} +10 -10
- package/Build/Workers/{chunk-YUHWFX5H.js → chunk-LNTUIO55.js} +2 -2
- package/Build/Workers/{chunk-VA7LWA5Q.js → chunk-LWOCFJEH.js} +9 -9
- package/Build/Workers/{chunk-5DF5RVIO.js → chunk-MMUISYW4.js} +16 -16
- package/Build/Workers/{chunk-K6THSIDU.js → chunk-MXYW4BQ3.js} +2 -2
- package/Build/Workers/{chunk-X55ZOYMS.js → chunk-N6DVKXZD.js} +12 -12
- package/Build/Workers/{chunk-NKKNQMEH.js → chunk-NP46ZIBY.js} +3 -3
- package/Build/Workers/{chunk-QID3DXQA.js → chunk-OW6F6CPZ.js} +7 -7
- package/Build/Workers/{chunk-CYC7JX3P.js → chunk-P6OAOFBU.js} +8 -8
- package/Build/Workers/{chunk-FYYP46TF.js → chunk-PXDMWXO5.js} +2 -2
- package/Build/Workers/{chunk-TZDR2BAP.js → chunk-QS7623NH.js} +6 -6
- package/Build/Workers/{chunk-D5X2LOJ2.js → chunk-ROH45IXJ.js} +7 -7
- package/Build/Workers/{chunk-UR36KLNW.js → chunk-S2P6LCIB.js} +4 -4
- package/Build/Workers/{chunk-Z2W7ZIGV.js → chunk-S4NZVXU6.js} +2 -2
- package/Build/Workers/{chunk-YSDOO7AG.js → chunk-SGGO5WVA.js} +5 -5
- package/Build/Workers/{chunk-H5IQLAJP.js → chunk-TG7N7TPY.js} +47 -50
- package/Build/Workers/{chunk-XIDMFHR4.js → chunk-TUZQG4RW.js} +14 -14
- package/Build/Workers/{chunk-JVG6T2WE.js → chunk-UHVE7V65.js} +12 -12
- package/Build/Workers/{chunk-FAQ2XNFV.js → chunk-UY2HVPDL.js} +5 -5
- package/Build/Workers/{chunk-CUU3WGXJ.js → chunk-YNLPRFUQ.js} +6 -6
- package/Build/Workers/{chunk-X6GXYB3M.js → chunk-ZYOHBCCE.js} +1 -1
- package/Build/Workers/combineGeometry.js +21 -21
- package/Build/Workers/createBoxGeometry.js +15 -15
- package/Build/Workers/createBoxOutlineGeometry.js +13 -13
- package/Build/Workers/createCircleGeometry.js +23 -23
- package/Build/Workers/createCircleOutlineGeometry.js +16 -16
- package/Build/Workers/createCoplanarPolygonGeometry.js +30 -30
- package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +28 -28
- package/Build/Workers/createCorridorGeometry.js +26 -26
- package/Build/Workers/createCorridorOutlineGeometry.js +25 -25
- package/Build/Workers/createCylinderGeometry.js +17 -17
- package/Build/Workers/createCylinderOutlineGeometry.js +15 -15
- package/Build/Workers/createEllipseGeometry.js +23 -23
- package/Build/Workers/createEllipseOutlineGeometry.js +16 -16
- package/Build/Workers/createEllipsoidGeometry.js +16 -16
- package/Build/Workers/createEllipsoidOutlineGeometry.js +15 -15
- package/Build/Workers/createFrustumGeometry.js +15 -15
- package/Build/Workers/createFrustumOutlineGeometry.js +15 -15
- package/Build/Workers/createGeometry.js +21 -21
- package/Build/Workers/createGroundPolylineGeometry.js +19 -19
- package/Build/Workers/createPlaneGeometry.js +13 -13
- package/Build/Workers/createPlaneOutlineGeometry.js +12 -12
- package/Build/Workers/createPolygonGeometry.js +29 -29
- package/Build/Workers/createPolygonOutlineGeometry.js +27 -27
- package/Build/Workers/createPolylineGeometry.js +22 -22
- package/Build/Workers/createPolylineVolumeGeometry.js +28 -28
- package/Build/Workers/createPolylineVolumeOutlineGeometry.js +24 -24
- package/Build/Workers/createRectangleGeometry.js +24 -24
- package/Build/Workers/createRectangleOutlineGeometry.js +17 -17
- package/Build/Workers/createSimplePolylineGeometry.js +20 -20
- package/Build/Workers/createSphereGeometry.js +16 -16
- package/Build/Workers/createSphereOutlineGeometry.js +15 -15
- package/Build/Workers/createTaskProcessorWorker.js +3 -3
- package/Build/Workers/createVectorTileClampedPolylines.js +12 -12
- package/Build/Workers/createVectorTileGeometries.js +21 -21
- package/Build/Workers/createVectorTilePoints.js +11 -11
- package/Build/Workers/createVectorTilePolygons.js +19 -19
- package/Build/Workers/createVectorTilePolylines.js +12 -12
- package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +19 -19
- package/Build/Workers/createVerticesFromHeightmap.js +19 -19
- package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +16 -16
- package/Build/Workers/createWallGeometry.js +21 -21
- package/Build/Workers/createWallOutlineGeometry.js +20 -20
- package/Build/Workers/decodeDraco.js +10 -10
- package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
- package/Build/Workers/decodeI3S.js +9 -9
- package/Build/Workers/gaussianSplatSorter.js +4 -4
- package/Build/Workers/gaussianSplatTextureGenerator.js +4 -4
- package/Build/Workers/transcodeKTX2.js +6 -6
- package/Build/Workers/transferTypedArrayTest.js +1 -1
- package/Build/Workers/upsampleQuantizedTerrainMesh.js +19 -19
- package/Source/Core/Event.js +41 -49
- package/Source/Core/GoogleMaps.js +2 -2
- package/Source/Core/Ion.js +1 -1
- package/Source/Core/IonResource.js +30 -4
- package/Source/Core/Resource.js +5 -1
- package/Source/DataSources/KmlDataSource.js +62 -63
- package/Source/DataSources/exportKml.js +27 -30
- package/Source/Scene/ArcGisMapService.js +1 -1
- package/Source/Scene/Azure2DImageryProvider.js +308 -0
- package/Source/Scene/Billboard.js +4 -0
- package/Source/Scene/BillboardCollection.js +9 -2
- package/Source/Scene/ClippingPlaneCollection.js +3 -3
- package/Source/Scene/ClippingPolygon.js +91 -2
- package/Source/Scene/CreditDisplay.js +1 -1
- package/Source/Scene/GaussianSplat3DTileContent.js +54 -9
- package/Source/Scene/GaussianSplatPrimitive.js +49 -50
- package/Source/Scene/Google2DImageryProvider.js +614 -0
- package/Source/Scene/IonImageryProvider.js +22 -1
- package/Source/Scene/LabelCollection.js +1 -0
- package/Source/Scene/Material.js +248 -80
- package/Source/Scene/Primitive.js +6 -0
- package/Source/Scene/PrimitiveState.js +123 -0
- package/Source/Scene/Scene.js +2 -2
- package/Source/Scene/VoxelBoundsCollection.js +494 -0
- package/Source/Scene/VoxelBoxShape.js +236 -101
- package/Source/Scene/VoxelCylinderShape.js +315 -204
- package/Source/Scene/VoxelEllipsoidShape.js +402 -119
- package/Source/Scene/VoxelPrimitive.js +119 -84
- package/Source/Scene/VoxelRenderResources.js +17 -10
- package/Source/Scene/VoxelShape.js +21 -6
- package/Source/Scene/buildVoxelDrawCommands.js +61 -20
- package/Source/Scene/createGooglePhotorealistic3DTileset.js +1 -1
- package/Source/Scene/getClippingFunction.js +79 -88
- package/Source/Shaders/BillboardCollectionVS.glsl +2 -0
- package/Source/Shaders/BillboardCollectionVS.js +2 -0
- package/Source/Shaders/Voxels/IntersectBox.glsl +20 -33
- package/Source/Shaders/Voxels/IntersectBox.js +20 -33
- package/Source/Shaders/Voxels/IntersectCylinder.glsl +28 -32
- package/Source/Shaders/Voxels/IntersectCylinder.js +28 -32
- package/Source/Shaders/Voxels/IntersectDepth.glsl +1 -4
- package/Source/Shaders/Voxels/IntersectDepth.js +1 -4
- package/Source/Shaders/Voxels/IntersectEllipsoid.glsl +12 -20
- package/Source/Shaders/Voxels/IntersectEllipsoid.js +12 -20
- package/Source/Shaders/Voxels/IntersectLongitude.glsl +21 -9
- package/Source/Shaders/Voxels/IntersectLongitude.js +21 -9
- package/Source/Shaders/Voxels/{IntersectClippingPlanes.glsl → IntersectPlane.glsl} +5 -3
- package/Source/Shaders/Voxels/{IntersectClippingPlanes.js → IntersectPlane.js} +5 -3
- package/Source/Shaders/Voxels/Intersection.glsl +3 -3
- package/Source/Shaders/Voxels/Intersection.js +3 -3
- package/Source/Shaders/Voxels/Octree.glsl +46 -51
- package/Source/Shaders/Voxels/Octree.js +46 -51
- package/Source/Shaders/Voxels/VoxelFS.glsl +50 -48
- package/Source/Shaders/Voxels/VoxelFS.js +50 -48
- package/Source/Shaders/Voxels/VoxelUtils.glsl +0 -19
- package/Source/Shaders/Voxels/VoxelUtils.js +0 -19
- package/Source/Shaders/Voxels/convertLocalToBoxUv.glsl +30 -0
- package/Source/Shaders/Voxels/convertLocalToBoxUv.js +32 -0
- package/Source/Shaders/Voxels/convertLocalToCylinderUv.glsl +97 -0
- package/Source/Shaders/Voxels/convertLocalToCylinderUv.js +99 -0
- package/Source/Shaders/Voxels/convertLocalToEllipsoidUv.glsl +193 -0
- package/Source/Shaders/Voxels/convertLocalToEllipsoidUv.js +195 -0
- package/Source/ThirdParty/Workers/zip-web-worker.js +1 -0
- package/Source/ThirdParty/zip-module.wasm +0 -0
- package/index.d.ts +317 -14
- package/index.js +141 -139
- package/package.json +2 -2
- package/Build/ThirdParty/Workers/pako_deflate.min.js +0 -503
- package/Build/ThirdParty/Workers/pako_inflate.min.js +0 -698
- package/Build/ThirdParty/Workers/z-worker-pako.js +0 -601
- package/Source/Core/defaultValue.js +0 -48
- package/Source/Shaders/Voxels/convertUvToBox.glsl +0 -45
- package/Source/Shaders/Voxels/convertUvToBox.js +0 -46
- package/Source/Shaders/Voxels/convertUvToCylinder.glsl +0 -99
- package/Source/Shaders/Voxels/convertUvToCylinder.js +0 -101
- package/Source/Shaders/Voxels/convertUvToEllipsoid.glsl +0 -139
- package/Source/Shaders/Voxels/convertUvToEllipsoid.js +0 -141
- package/Source/ThirdParty/Workers/pako_deflate.min.js +0 -2
- package/Source/ThirdParty/Workers/pako_inflate.min.js +0 -2
- package/Source/ThirdParty/Workers/z-worker-pako.js +0 -1
|
@@ -30,6 +30,11 @@ struct TraversalData {\n\
|
|
|
30
30
|
int parentOctreeIndex;\n\
|
|
31
31
|
};\n\
|
|
32
32
|
\n\
|
|
33
|
+
struct TileAndUvCoordinate {\n\
|
|
34
|
+
ivec4 tileCoords;\n\
|
|
35
|
+
vec3 tileUv;\n\
|
|
36
|
+
};\n\
|
|
37
|
+
\n\
|
|
33
38
|
struct SampleData {\n\
|
|
34
39
|
int megatextureIndex;\n\
|
|
35
40
|
ivec4 tileCoords;\n\
|
|
@@ -80,23 +85,20 @@ int getOctreeParentIndex(in int octreeIndex) {\n\
|
|
|
80
85
|
return parentOctreeIndex;\n\
|
|
81
86
|
}\n\
|
|
82
87
|
\n\
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
// PERFORMANCE_IDEA: use bit-shifting (only in WebGL2)\n\
|
|
89
|
-
float dimAtLevel = exp2(float(octreeCoords.w));\n\
|
|
90
|
-
return shapePosition * dimAtLevel - vec3(octreeCoords.xyz);\n\
|
|
88
|
+
vec3 getTileUv(in TileAndUvCoordinate tileAndUv, in ivec4 octreeCoords) {\n\
|
|
89
|
+
int levelDifference = tileAndUv.tileCoords.w - octreeCoords.w;\n\
|
|
90
|
+
float scalar = exp2(-1.0 * float(levelDifference));\n\
|
|
91
|
+
vec3 originShift = vec3(tileAndUv.tileCoords.xyz - (octreeCoords.xyz << levelDifference)) * scalar;\n\
|
|
92
|
+
return tileAndUv.tileUv * scalar + originShift;\n\
|
|
91
93
|
}\n\
|
|
92
94
|
\n\
|
|
93
|
-
vec3 getClampedTileUv(in
|
|
94
|
-
vec3 tileUv = getTileUv(
|
|
95
|
+
vec3 getClampedTileUv(in TileAndUvCoordinate tileAndUv, in ivec4 octreeCoords) {\n\
|
|
96
|
+
vec3 tileUv = getTileUv(tileAndUv, octreeCoords);\n\
|
|
95
97
|
return clamp(tileUv, vec3(0.0), vec3(1.0));\n\
|
|
96
98
|
}\n\
|
|
97
99
|
\n\
|
|
98
|
-
void addSampleCoordinates(in
|
|
99
|
-
vec3 tileUv = getClampedTileUv(
|
|
100
|
+
void addSampleCoordinates(in TileAndUvCoordinate tileAndUv, inout SampleData sampleData) {\n\
|
|
101
|
+
vec3 tileUv = getClampedTileUv(tileAndUv, sampleData.tileCoords);\n\
|
|
100
102
|
\n\
|
|
101
103
|
vec3 inputCoordinate = tileUv * vec3(u_dimensions);\n\
|
|
102
104
|
#if defined(PADDING)\n\
|
|
@@ -163,32 +165,25 @@ void getOctreeLeafSampleDatas(in OctreeNodeData data, in ivec4 octreeCoords, out
|
|
|
163
165
|
}\n\
|
|
164
166
|
#endif\n\
|
|
165
167
|
\n\
|
|
166
|
-
OctreeNodeData traverseOctreeDownwards(in
|
|
167
|
-
float sizeAtLevel = exp2(-1.0 * float(traversalData.octreeCoords.w));\n\
|
|
168
|
-
vec3 start = vec3(traversalData.octreeCoords.xyz) * sizeAtLevel;\n\
|
|
169
|
-
vec3 end = start + vec3(sizeAtLevel);\n\
|
|
168
|
+
OctreeNodeData traverseOctreeDownwards(in ivec4 tileCoordinate, inout TraversalData traversalData) {\n\
|
|
170
169
|
OctreeNodeData childData;\n\
|
|
171
170
|
\n\
|
|
172
171
|
for (int i = 0; i < OCTREE_MAX_LEVELS; ++i) {\n\
|
|
173
|
-
//
|
|
174
|
-
//
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
ivec4 octreeCoords = traversalData.octreeCoords;\n\
|
|
180
|
-
traversalData.octreeCoords = ivec4(octreeCoords.xyz * 2 + ivec3(childCoord), octreeCoords.w + 1);\n\
|
|
172
|
+
// tileCoordinate.xyz is defined at the level of detail tileCoordinate.w.\n\
|
|
173
|
+
// Find the corresponding coordinate at the level traversalData.octreeCoords.w\n\
|
|
174
|
+
int level = traversalData.octreeCoords.w + 1;\n\
|
|
175
|
+
int levelDifference = tileCoordinate.w - level;\n\
|
|
176
|
+
ivec3 coordinateAtLevel = tileCoordinate.xyz >> levelDifference;\n\
|
|
177
|
+
traversalData.octreeCoords = ivec4(coordinateAtLevel, level);\n\
|
|
181
178
|
\n\
|
|
182
|
-
|
|
179
|
+
ivec3 childCoordinate = coordinateAtLevel & 1;\n\
|
|
180
|
+
childData = getOctreeChildData(traversalData.parentOctreeIndex, childCoordinate);\n\
|
|
183
181
|
\n\
|
|
184
182
|
if (childData.flag != OCTREE_FLAG_INTERNAL) {\n\
|
|
185
183
|
// leaf tile - stop traversing\n\
|
|
186
184
|
break;\n\
|
|
187
185
|
}\n\
|
|
188
186
|
\n\
|
|
189
|
-
// interior tile - keep going deeper\n\
|
|
190
|
-
start = mix(start, center, childCoord);\n\
|
|
191
|
-
end = mix(center, end, childCoord);\n\
|
|
192
187
|
traversalData.parentOctreeIndex = childData.data;\n\
|
|
193
188
|
}\n\
|
|
194
189
|
\n\
|
|
@@ -199,50 +194,50 @@ OctreeNodeData traverseOctreeDownwards(in vec3 shapePosition, inout TraversalDat
|
|
|
199
194
|
* Transform a given position to an octree tile coordinate and a position within that tile,\n\
|
|
200
195
|
* and find the corresponding megatexture index and texture coordinates\n\
|
|
201
196
|
*/\n\
|
|
202
|
-
void traverseOctreeFromBeginning(in
|
|
197
|
+
void traverseOctreeFromBeginning(in TileAndUvCoordinate tileAndUv, out TraversalData traversalData, out SampleData sampleDatas[SAMPLE_COUNT]) {\n\
|
|
203
198
|
traversalData.octreeCoords = ivec4(0);\n\
|
|
204
199
|
traversalData.parentOctreeIndex = 0;\n\
|
|
205
200
|
\n\
|
|
206
201
|
OctreeNodeData nodeData = getOctreeNodeData(vec2(0.0));\n\
|
|
207
202
|
if (nodeData.flag != OCTREE_FLAG_LEAF) {\n\
|
|
208
|
-
nodeData = traverseOctreeDownwards(
|
|
203
|
+
nodeData = traverseOctreeDownwards(tileAndUv.tileCoords, traversalData);\n\
|
|
209
204
|
}\n\
|
|
210
205
|
\n\
|
|
211
206
|
#if (SAMPLE_COUNT == 1)\n\
|
|
212
207
|
getOctreeLeafSampleData(nodeData, traversalData.octreeCoords, sampleDatas[0]);\n\
|
|
213
|
-
addSampleCoordinates(
|
|
208
|
+
addSampleCoordinates(tileAndUv, sampleDatas[0]);\n\
|
|
214
209
|
#else\n\
|
|
215
210
|
getOctreeLeafSampleDatas(nodeData, traversalData.octreeCoords, sampleDatas);\n\
|
|
216
|
-
addSampleCoordinates(
|
|
217
|
-
addSampleCoordinates(
|
|
211
|
+
addSampleCoordinates(tileAndUv, sampleDatas[0]);\n\
|
|
212
|
+
addSampleCoordinates(tileAndUv, sampleDatas[1]);\n\
|
|
218
213
|
#endif\n\
|
|
219
214
|
}\n\
|
|
220
215
|
\n\
|
|
221
|
-
bool
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
// Assume (!) the position is always inside the root tile.\n\
|
|
229
|
-
return inside || octreeCoords.w == 0;\n\
|
|
216
|
+
bool insideTile(in ivec4 tileCoordinate, in ivec4 octreeCoords) {\n\
|
|
217
|
+
int levelDifference = tileCoordinate.w - octreeCoords.w;\n\
|
|
218
|
+
if (levelDifference < 0) {\n\
|
|
219
|
+
return false;\n\
|
|
220
|
+
}\n\
|
|
221
|
+
ivec3 coordinateAtLevel = tileCoordinate.xyz >> levelDifference;\n\
|
|
222
|
+
return coordinateAtLevel == octreeCoords.xyz;\n\
|
|
230
223
|
}\n\
|
|
231
224
|
\n\
|
|
232
|
-
void traverseOctreeFromExisting(in
|
|
233
|
-
|
|
225
|
+
void traverseOctreeFromExisting(in TileAndUvCoordinate tileAndUv, inout TraversalData traversalData, inout SampleData sampleDatas[SAMPLE_COUNT]) {\n\
|
|
226
|
+
ivec4 tileCoords = tileAndUv.tileCoords;\n\
|
|
227
|
+
if (insideTile(tileCoords, traversalData.octreeCoords)) {\n\
|
|
234
228
|
for (int i = 0; i < SAMPLE_COUNT; i++) {\n\
|
|
235
|
-
addSampleCoordinates(
|
|
229
|
+
addSampleCoordinates(tileAndUv, sampleDatas[i]);\n\
|
|
236
230
|
}\n\
|
|
237
231
|
return;\n\
|
|
238
232
|
}\n\
|
|
239
233
|
\n\
|
|
240
|
-
// Go up tree until we find a parent tile containing
|
|
234
|
+
// Go up tree until we find a parent tile containing tileCoords.\n\
|
|
235
|
+
// Assumes all parents are available all they way up to the root.\n\
|
|
241
236
|
for (int i = 0; i < OCTREE_MAX_LEVELS; ++i) {\n\
|
|
242
237
|
traversalData.octreeCoords.xyz /= 2;\n\
|
|
243
238
|
traversalData.octreeCoords.w -= 1;\n\
|
|
244
239
|
\n\
|
|
245
|
-
if (insideTile(
|
|
240
|
+
if (insideTile(tileCoords, traversalData.octreeCoords)) {\n\
|
|
246
241
|
break;\n\
|
|
247
242
|
}\n\
|
|
248
243
|
\n\
|
|
@@ -250,15 +245,15 @@ void traverseOctreeFromExisting(in vec3 shapePosition, inout TraversalData trave
|
|
|
250
245
|
}\n\
|
|
251
246
|
\n\
|
|
252
247
|
// Go down tree\n\
|
|
253
|
-
OctreeNodeData nodeData = traverseOctreeDownwards(
|
|
248
|
+
OctreeNodeData nodeData = traverseOctreeDownwards(tileCoords, traversalData);\n\
|
|
254
249
|
\n\
|
|
255
250
|
#if (SAMPLE_COUNT == 1)\n\
|
|
256
251
|
getOctreeLeafSampleData(nodeData, traversalData.octreeCoords, sampleDatas[0]);\n\
|
|
257
|
-
addSampleCoordinates(
|
|
252
|
+
addSampleCoordinates(tileAndUv, sampleDatas[0]);\n\
|
|
258
253
|
#else\n\
|
|
259
254
|
getOctreeLeafSampleDatas(nodeData, traversalData.octreeCoords, sampleDatas);\n\
|
|
260
|
-
addSampleCoordinates(
|
|
261
|
-
addSampleCoordinates(
|
|
255
|
+
addSampleCoordinates(tileAndUv, sampleDatas[0]);\n\
|
|
256
|
+
addSampleCoordinates(tileAndUv, sampleDatas[1]);\n\
|
|
262
257
|
#endif\n\
|
|
263
258
|
}\n\
|
|
264
259
|
";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// See Intersection.glsl for the definition of intersectScene
|
|
2
2
|
// See IntersectionUtils.glsl for the definition of nextIntersection
|
|
3
|
-
// See
|
|
4
|
-
// for the
|
|
5
|
-
// selected based on the VoxelPrimitive shape type,
|
|
6
|
-
// Scene/VoxelRenderResources.js.
|
|
3
|
+
// See convertLocalToBoxUv.glsl, convertLocalToCylinderUv.glsl, or convertLocalToEllipsoidUv.glsl
|
|
4
|
+
// for the definitions of convertLocalToShapeSpaceDerivative and getTileAndUvCoordinate.
|
|
5
|
+
// The appropriate functions are selected based on the VoxelPrimitive shape type,
|
|
6
|
+
// and added to the shader in Scene/VoxelRenderResources.js.
|
|
7
7
|
// See Octree.glsl for the definitions of TraversalData, SampleData,
|
|
8
8
|
// traverseOctreeFromBeginning, and traverseOctreeFromExisting
|
|
9
9
|
// See Megatexture.glsl for the definition of accumulatePropertiesFromMegatexture
|
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
#define ALPHA_ACCUM_MAX 0.98 // Must be > 0.0 and <= 1.0
|
|
16
16
|
#endif
|
|
17
17
|
|
|
18
|
-
uniform mat4
|
|
18
|
+
uniform mat4 u_transformPositionViewToLocal;
|
|
19
19
|
uniform mat3 u_transformDirectionViewToLocal;
|
|
20
|
-
uniform vec3
|
|
21
|
-
uniform vec3
|
|
20
|
+
uniform vec3 u_cameraPositionLocal;
|
|
21
|
+
uniform vec3 u_cameraDirectionLocal;
|
|
22
22
|
uniform float u_stepSize;
|
|
23
23
|
|
|
24
24
|
#if defined(PICKING)
|
|
@@ -63,16 +63,15 @@ RayShapeIntersection getVoxelIntersection(in vec3 tileUv, in vec3 sampleSizeAlon
|
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
vec4 getStepSize(in SampleData sampleData, in Ray viewRay, in RayShapeIntersection shapeIntersection, in mat3 jacobianT, in float currentT) {
|
|
66
|
-
|
|
67
|
-
// But the ray is marched in a space where the shape fills [0, 1].
|
|
68
|
-
// So we need to scale the Jacobian by 2.
|
|
69
|
-
vec3 gradient = 2.0 * viewRay.rawDir * jacobianT;
|
|
66
|
+
vec3 gradient = viewRay.dir * jacobianT;
|
|
70
67
|
vec3 sampleSizeAlongRay = getSampleSize(sampleData.tileCoords.w) / gradient;
|
|
71
68
|
|
|
72
69
|
RayShapeIntersection voxelIntersection = getVoxelIntersection(sampleData.tileUv, sampleSizeAlongRay);
|
|
73
70
|
|
|
74
|
-
// Transform normal from shape space to Cartesian space
|
|
75
|
-
vec3 voxelNormal =
|
|
71
|
+
// Transform normal from shape space to Cartesian space to eye space
|
|
72
|
+
vec3 voxelNormal = jacobianT * voxelIntersection.entry.xyz;
|
|
73
|
+
voxelNormal = normalize(czm_normal * voxelNormal);
|
|
74
|
+
|
|
76
75
|
// Compare with the shape intersection, to choose the appropriate normal
|
|
77
76
|
vec4 voxelEntry = vec4(voxelNormal, currentT + voxelIntersection.entry.w);
|
|
78
77
|
vec4 entry = intersectionMax(shapeIntersection.entry, voxelEntry);
|
|
@@ -114,37 +113,40 @@ int getSampleIndex(in SampleData sampleData) {
|
|
|
114
113
|
}
|
|
115
114
|
|
|
116
115
|
/**
|
|
117
|
-
* Compute the view ray at the current fragment, in the local
|
|
116
|
+
* Compute the view ray at the current fragment, in the local coordinates of the shape.
|
|
118
117
|
*/
|
|
119
|
-
Ray
|
|
118
|
+
Ray getViewRayLocal() {
|
|
120
119
|
vec4 eyeCoordinates = czm_windowToEyeCoordinates(gl_FragCoord);
|
|
121
|
-
vec3
|
|
122
|
-
vec3
|
|
120
|
+
vec3 origin;
|
|
121
|
+
vec3 direction;
|
|
123
122
|
if (czm_orthographicIn3D == 1.0) {
|
|
124
123
|
eyeCoordinates.z = 0.0;
|
|
125
|
-
|
|
126
|
-
|
|
124
|
+
origin = (u_transformPositionViewToLocal * eyeCoordinates).xyz;
|
|
125
|
+
direction = u_cameraDirectionLocal;
|
|
127
126
|
} else {
|
|
128
|
-
|
|
129
|
-
|
|
127
|
+
origin = u_cameraPositionLocal;
|
|
128
|
+
direction = u_transformDirectionViewToLocal * normalize(eyeCoordinates.xyz);
|
|
130
129
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
130
|
+
return Ray(origin, direction);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
Ray getViewRayEC() {
|
|
134
|
+
vec4 eyeCoordinates = czm_windowToEyeCoordinates(gl_FragCoord);
|
|
135
|
+
vec3 viewPosEC = (czm_orthographicIn3D == 1.0)
|
|
136
|
+
? vec3(eyeCoordinates.xy, 0.0)
|
|
137
|
+
: vec3(0.0);
|
|
138
|
+
vec3 viewDirEC = normalize(eyeCoordinates.xyz);
|
|
139
|
+
return Ray(viewPosEC, viewDirEC);
|
|
139
140
|
}
|
|
140
141
|
|
|
141
142
|
void main()
|
|
142
143
|
{
|
|
143
|
-
Ray
|
|
144
|
+
Ray viewRayLocal = getViewRayLocal();
|
|
145
|
+
Ray viewRayEC = getViewRayEC();
|
|
144
146
|
|
|
145
147
|
Intersections ix;
|
|
146
148
|
vec2 screenCoord = (gl_FragCoord.xy - czm_viewport.xy) / czm_viewport.zw; // [0,1]
|
|
147
|
-
RayShapeIntersection shapeIntersection = intersectScene(screenCoord,
|
|
149
|
+
RayShapeIntersection shapeIntersection = intersectScene(screenCoord, viewRayLocal, viewRayEC, ix);
|
|
148
150
|
// Exit early if the scene was completely missed.
|
|
149
151
|
if (shapeIntersection.entry.w == NO_HIT) {
|
|
150
152
|
discard;
|
|
@@ -152,20 +154,17 @@ void main()
|
|
|
152
154
|
|
|
153
155
|
float currentT = shapeIntersection.entry.w;
|
|
154
156
|
float endT = shapeIntersection.exit.w;
|
|
155
|
-
|
|
156
|
-
|
|
157
|
+
|
|
158
|
+
vec3 positionEC = viewRayEC.pos + currentT * viewRayEC.dir;
|
|
159
|
+
TileAndUvCoordinate tileAndUv = getTileAndUvCoordinate(positionEC);
|
|
160
|
+
vec3 positionLocal = viewRayLocal.pos + currentT * viewRayLocal.dir;
|
|
161
|
+
mat3 jacobianT = convertLocalToShapeSpaceDerivative(positionLocal);
|
|
157
162
|
|
|
158
163
|
// Traverse the tree from the start position
|
|
159
164
|
TraversalData traversalData;
|
|
160
165
|
SampleData sampleDatas[SAMPLE_COUNT];
|
|
161
|
-
traverseOctreeFromBeginning(
|
|
162
|
-
vec4 step = getStepSize(sampleDatas[0],
|
|
163
|
-
|
|
164
|
-
#if defined(JITTER)
|
|
165
|
-
float noise = hash(screenCoord); // [0,1]
|
|
166
|
-
currentT += noise * step.w;
|
|
167
|
-
positionUv += noise * step.w * viewRayUv.dir;
|
|
168
|
-
#endif
|
|
166
|
+
traverseOctreeFromBeginning(tileAndUv, traversalData, sampleDatas);
|
|
167
|
+
vec4 step = getStepSize(sampleDatas[0], viewRayLocal, shapeIntersection, jacobianT, currentT);
|
|
169
168
|
|
|
170
169
|
FragmentInput fragmentInput;
|
|
171
170
|
#if defined(STATISTICS)
|
|
@@ -182,10 +181,11 @@ void main()
|
|
|
182
181
|
// Prepare the custom shader inputs
|
|
183
182
|
copyPropertiesToMetadata(properties, fragmentInput.metadata);
|
|
184
183
|
|
|
185
|
-
fragmentInput.attributes.positionEC =
|
|
186
|
-
|
|
184
|
+
fragmentInput.attributes.positionEC = positionEC;
|
|
185
|
+
// Re-normalize normals: some shape intersections may have been scaled to encode positive/negative shapes
|
|
186
|
+
fragmentInput.attributes.normalEC = normalize(step.xyz);
|
|
187
187
|
|
|
188
|
-
fragmentInput.voxel.viewDirUv =
|
|
188
|
+
fragmentInput.voxel.viewDirUv = viewRayLocal.dir;
|
|
189
189
|
|
|
190
190
|
fragmentInput.voxel.travelDistance = step.w;
|
|
191
191
|
fragmentInput.voxel.stepCount = stepCount;
|
|
@@ -233,13 +233,15 @@ void main()
|
|
|
233
233
|
}
|
|
234
234
|
#endif
|
|
235
235
|
}
|
|
236
|
-
|
|
236
|
+
positionEC = viewRayEC.pos + currentT * viewRayEC.dir;
|
|
237
|
+
tileAndUv = getTileAndUvCoordinate(positionEC);
|
|
238
|
+
positionLocal = viewRayLocal.pos + currentT * viewRayLocal.dir;
|
|
239
|
+
jacobianT = convertLocalToShapeSpaceDerivative(positionLocal);
|
|
237
240
|
|
|
238
241
|
// Traverse the tree from the current ray position.
|
|
239
242
|
// This is similar to traverseOctreeFromBeginning but is faster when the ray is in the same tile as the previous step.
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
step = getStepSize(sampleDatas[0], viewRayUv, shapeIntersection, pointJacobian.jacobianT, currentT);
|
|
243
|
+
traverseOctreeFromExisting(tileAndUv, traversalData, sampleDatas);
|
|
244
|
+
step = getStepSize(sampleDatas[0], viewRayLocal, shapeIntersection, jacobianT, currentT);
|
|
243
245
|
}
|
|
244
246
|
|
|
245
247
|
// Convert the alpha from [0,ALPHA_ACCUM_MAX] to [0,1]
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
//This file is automatically rebuilt by the Cesium build process.
|
|
2
2
|
export default "// See Intersection.glsl for the definition of intersectScene\n\
|
|
3
3
|
// See IntersectionUtils.glsl for the definition of nextIntersection\n\
|
|
4
|
-
// See
|
|
5
|
-
// for the
|
|
6
|
-
// selected based on the VoxelPrimitive shape type,
|
|
7
|
-
// Scene/VoxelRenderResources.js.\n\
|
|
4
|
+
// See convertLocalToBoxUv.glsl, convertLocalToCylinderUv.glsl, or convertLocalToEllipsoidUv.glsl\n\
|
|
5
|
+
// for the definitions of convertLocalToShapeSpaceDerivative and getTileAndUvCoordinate. \n\
|
|
6
|
+
// The appropriate functions are selected based on the VoxelPrimitive shape type, \n\
|
|
7
|
+
// and added to the shader in Scene/VoxelRenderResources.js.\n\
|
|
8
8
|
// See Octree.glsl for the definitions of TraversalData, SampleData,\n\
|
|
9
9
|
// traverseOctreeFromBeginning, and traverseOctreeFromExisting\n\
|
|
10
10
|
// See Megatexture.glsl for the definition of accumulatePropertiesFromMegatexture\n\
|
|
@@ -16,10 +16,10 @@ export default "// See Intersection.glsl for the definition of intersectScene\n\
|
|
|
16
16
|
#define ALPHA_ACCUM_MAX 0.98 // Must be > 0.0 and <= 1.0\n\
|
|
17
17
|
#endif\n\
|
|
18
18
|
\n\
|
|
19
|
-
uniform mat4
|
|
19
|
+
uniform mat4 u_transformPositionViewToLocal;\n\
|
|
20
20
|
uniform mat3 u_transformDirectionViewToLocal;\n\
|
|
21
|
-
uniform vec3
|
|
22
|
-
uniform vec3
|
|
21
|
+
uniform vec3 u_cameraPositionLocal;\n\
|
|
22
|
+
uniform vec3 u_cameraDirectionLocal;\n\
|
|
23
23
|
uniform float u_stepSize;\n\
|
|
24
24
|
\n\
|
|
25
25
|
#if defined(PICKING)\n\
|
|
@@ -64,16 +64,15 @@ RayShapeIntersection getVoxelIntersection(in vec3 tileUv, in vec3 sampleSizeAlon
|
|
|
64
64
|
}\n\
|
|
65
65
|
\n\
|
|
66
66
|
vec4 getStepSize(in SampleData sampleData, in Ray viewRay, in RayShapeIntersection shapeIntersection, in mat3 jacobianT, in float currentT) {\n\
|
|
67
|
-
|
|
68
|
-
// But the ray is marched in a space where the shape fills [0, 1].\n\
|
|
69
|
-
// So we need to scale the Jacobian by 2.\n\
|
|
70
|
-
vec3 gradient = 2.0 * viewRay.rawDir * jacobianT;\n\
|
|
67
|
+
vec3 gradient = viewRay.dir * jacobianT;\n\
|
|
71
68
|
vec3 sampleSizeAlongRay = getSampleSize(sampleData.tileCoords.w) / gradient;\n\
|
|
72
69
|
\n\
|
|
73
70
|
RayShapeIntersection voxelIntersection = getVoxelIntersection(sampleData.tileUv, sampleSizeAlongRay);\n\
|
|
74
71
|
\n\
|
|
75
|
-
// Transform normal from shape space to Cartesian space\n\
|
|
76
|
-
vec3 voxelNormal =
|
|
72
|
+
// Transform normal from shape space to Cartesian space to eye space\n\
|
|
73
|
+
vec3 voxelNormal = jacobianT * voxelIntersection.entry.xyz;\n\
|
|
74
|
+
voxelNormal = normalize(czm_normal * voxelNormal);\n\
|
|
75
|
+
\n\
|
|
77
76
|
// Compare with the shape intersection, to choose the appropriate normal\n\
|
|
78
77
|
vec4 voxelEntry = vec4(voxelNormal, currentT + voxelIntersection.entry.w);\n\
|
|
79
78
|
vec4 entry = intersectionMax(shapeIntersection.entry, voxelEntry);\n\
|
|
@@ -115,37 +114,40 @@ int getSampleIndex(in SampleData sampleData) {\n\
|
|
|
115
114
|
}\n\
|
|
116
115
|
\n\
|
|
117
116
|
/**\n\
|
|
118
|
-
* Compute the view ray at the current fragment, in the local
|
|
117
|
+
* Compute the view ray at the current fragment, in the local coordinates of the shape.\n\
|
|
119
118
|
*/\n\
|
|
120
|
-
Ray
|
|
119
|
+
Ray getViewRayLocal() {\n\
|
|
121
120
|
vec4 eyeCoordinates = czm_windowToEyeCoordinates(gl_FragCoord);\n\
|
|
122
|
-
vec3
|
|
123
|
-
vec3
|
|
121
|
+
vec3 origin;\n\
|
|
122
|
+
vec3 direction;\n\
|
|
124
123
|
if (czm_orthographicIn3D == 1.0) {\n\
|
|
125
124
|
eyeCoordinates.z = 0.0;\n\
|
|
126
|
-
|
|
127
|
-
|
|
125
|
+
origin = (u_transformPositionViewToLocal * eyeCoordinates).xyz;\n\
|
|
126
|
+
direction = u_cameraDirectionLocal;\n\
|
|
128
127
|
} else {\n\
|
|
129
|
-
|
|
130
|
-
|
|
128
|
+
origin = u_cameraPositionLocal;\n\
|
|
129
|
+
direction = u_transformDirectionViewToLocal * normalize(eyeCoordinates.xyz);\n\
|
|
131
130
|
}\n\
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
131
|
+
return Ray(origin, direction);\n\
|
|
132
|
+
}\n\
|
|
133
|
+
\n\
|
|
134
|
+
Ray getViewRayEC() {\n\
|
|
135
|
+
vec4 eyeCoordinates = czm_windowToEyeCoordinates(gl_FragCoord);\n\
|
|
136
|
+
vec3 viewPosEC = (czm_orthographicIn3D == 1.0)\n\
|
|
137
|
+
? vec3(eyeCoordinates.xy, 0.0)\n\
|
|
138
|
+
: vec3(0.0);\n\
|
|
139
|
+
vec3 viewDirEC = normalize(eyeCoordinates.xyz);\n\
|
|
140
|
+
return Ray(viewPosEC, viewDirEC);\n\
|
|
140
141
|
}\n\
|
|
141
142
|
\n\
|
|
142
143
|
void main()\n\
|
|
143
144
|
{\n\
|
|
144
|
-
Ray
|
|
145
|
+
Ray viewRayLocal = getViewRayLocal();\n\
|
|
146
|
+
Ray viewRayEC = getViewRayEC();\n\
|
|
145
147
|
\n\
|
|
146
148
|
Intersections ix;\n\
|
|
147
149
|
vec2 screenCoord = (gl_FragCoord.xy - czm_viewport.xy) / czm_viewport.zw; // [0,1]\n\
|
|
148
|
-
RayShapeIntersection shapeIntersection = intersectScene(screenCoord,
|
|
150
|
+
RayShapeIntersection shapeIntersection = intersectScene(screenCoord, viewRayLocal, viewRayEC, ix);\n\
|
|
149
151
|
// Exit early if the scene was completely missed.\n\
|
|
150
152
|
if (shapeIntersection.entry.w == NO_HIT) {\n\
|
|
151
153
|
discard;\n\
|
|
@@ -153,20 +155,17 @@ void main()\n\
|
|
|
153
155
|
\n\
|
|
154
156
|
float currentT = shapeIntersection.entry.w;\n\
|
|
155
157
|
float endT = shapeIntersection.exit.w;\n\
|
|
156
|
-
|
|
157
|
-
|
|
158
|
+
\n\
|
|
159
|
+
vec3 positionEC = viewRayEC.pos + currentT * viewRayEC.dir;\n\
|
|
160
|
+
TileAndUvCoordinate tileAndUv = getTileAndUvCoordinate(positionEC);\n\
|
|
161
|
+
vec3 positionLocal = viewRayLocal.pos + currentT * viewRayLocal.dir;\n\
|
|
162
|
+
mat3 jacobianT = convertLocalToShapeSpaceDerivative(positionLocal);\n\
|
|
158
163
|
\n\
|
|
159
164
|
// Traverse the tree from the start position\n\
|
|
160
165
|
TraversalData traversalData;\n\
|
|
161
166
|
SampleData sampleDatas[SAMPLE_COUNT];\n\
|
|
162
|
-
traverseOctreeFromBeginning(
|
|
163
|
-
vec4 step = getStepSize(sampleDatas[0],
|
|
164
|
-
\n\
|
|
165
|
-
#if defined(JITTER)\n\
|
|
166
|
-
float noise = hash(screenCoord); // [0,1]\n\
|
|
167
|
-
currentT += noise * step.w;\n\
|
|
168
|
-
positionUv += noise * step.w * viewRayUv.dir;\n\
|
|
169
|
-
#endif\n\
|
|
167
|
+
traverseOctreeFromBeginning(tileAndUv, traversalData, sampleDatas);\n\
|
|
168
|
+
vec4 step = getStepSize(sampleDatas[0], viewRayLocal, shapeIntersection, jacobianT, currentT);\n\
|
|
170
169
|
\n\
|
|
171
170
|
FragmentInput fragmentInput;\n\
|
|
172
171
|
#if defined(STATISTICS)\n\
|
|
@@ -183,10 +182,11 @@ void main()\n\
|
|
|
183
182
|
// Prepare the custom shader inputs\n\
|
|
184
183
|
copyPropertiesToMetadata(properties, fragmentInput.metadata);\n\
|
|
185
184
|
\n\
|
|
186
|
-
fragmentInput.attributes.positionEC =
|
|
187
|
-
|
|
185
|
+
fragmentInput.attributes.positionEC = positionEC;\n\
|
|
186
|
+
// Re-normalize normals: some shape intersections may have been scaled to encode positive/negative shapes\n\
|
|
187
|
+
fragmentInput.attributes.normalEC = normalize(step.xyz);\n\
|
|
188
188
|
\n\
|
|
189
|
-
fragmentInput.voxel.viewDirUv =
|
|
189
|
+
fragmentInput.voxel.viewDirUv = viewRayLocal.dir;\n\
|
|
190
190
|
\n\
|
|
191
191
|
fragmentInput.voxel.travelDistance = step.w;\n\
|
|
192
192
|
fragmentInput.voxel.stepCount = stepCount;\n\
|
|
@@ -234,13 +234,15 @@ void main()\n\
|
|
|
234
234
|
}\n\
|
|
235
235
|
#endif\n\
|
|
236
236
|
}\n\
|
|
237
|
-
|
|
237
|
+
positionEC = viewRayEC.pos + currentT * viewRayEC.dir;\n\
|
|
238
|
+
tileAndUv = getTileAndUvCoordinate(positionEC);\n\
|
|
239
|
+
positionLocal = viewRayLocal.pos + currentT * viewRayLocal.dir;\n\
|
|
240
|
+
jacobianT = convertLocalToShapeSpaceDerivative(positionLocal);\n\
|
|
238
241
|
\n\
|
|
239
242
|
// Traverse the tree from the current ray position.\n\
|
|
240
243
|
// This is similar to traverseOctreeFromBeginning but is faster when the ray is in the same tile as the previous step.\n\
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
step = getStepSize(sampleDatas[0], viewRayUv, shapeIntersection, pointJacobian.jacobianT, currentT);\n\
|
|
244
|
+
traverseOctreeFromExisting(tileAndUv, traversalData, sampleDatas);\n\
|
|
245
|
+
step = getStepSize(sampleDatas[0], viewRayLocal, shapeIntersection, jacobianT, currentT);\n\
|
|
244
246
|
}\n\
|
|
245
247
|
\n\
|
|
246
248
|
// Convert the alpha from [0,ALPHA_ACCUM_MAX] to [0,1]\n\
|
|
@@ -1,22 +1,8 @@
|
|
|
1
1
|
struct Ray {
|
|
2
2
|
vec3 pos;
|
|
3
3
|
vec3 dir;
|
|
4
|
-
vec3 rawDir;
|
|
5
4
|
};
|
|
6
5
|
|
|
7
|
-
#if defined(JITTER)
|
|
8
|
-
/**
|
|
9
|
-
* Generate a pseudo-random value for a given 2D screen coordinate.
|
|
10
|
-
* Similar to https://www.shadertoy.com/view/4djSRW with a modified hashscale.
|
|
11
|
-
*/
|
|
12
|
-
float hash(vec2 p)
|
|
13
|
-
{
|
|
14
|
-
vec3 p3 = fract(vec3(p.xyx) * 50.0);
|
|
15
|
-
p3 += dot(p3, p3.yzx + 19.19);
|
|
16
|
-
return fract((p3.x + p3.y) * p3.z);
|
|
17
|
-
}
|
|
18
|
-
#endif
|
|
19
|
-
|
|
20
6
|
float minComponent(in vec3 v) {
|
|
21
7
|
return min(min(v.x, v.y), v.z);
|
|
22
8
|
}
|
|
@@ -24,8 +10,3 @@ float minComponent(in vec3 v) {
|
|
|
24
10
|
float maxComponent(in vec3 v) {
|
|
25
11
|
return max(max(v.x, v.y), v.z);
|
|
26
12
|
}
|
|
27
|
-
|
|
28
|
-
struct PointJacobianT {
|
|
29
|
-
vec3 point;
|
|
30
|
-
mat3 jacobianT;
|
|
31
|
-
};
|
|
@@ -2,22 +2,8 @@
|
|
|
2
2
|
export default "struct Ray {\n\
|
|
3
3
|
vec3 pos;\n\
|
|
4
4
|
vec3 dir;\n\
|
|
5
|
-
vec3 rawDir;\n\
|
|
6
5
|
};\n\
|
|
7
6
|
\n\
|
|
8
|
-
#if defined(JITTER)\n\
|
|
9
|
-
/**\n\
|
|
10
|
-
* Generate a pseudo-random value for a given 2D screen coordinate.\n\
|
|
11
|
-
* Similar to https://www.shadertoy.com/view/4djSRW with a modified hashscale.\n\
|
|
12
|
-
*/\n\
|
|
13
|
-
float hash(vec2 p)\n\
|
|
14
|
-
{\n\
|
|
15
|
-
vec3 p3 = fract(vec3(p.xyx) * 50.0);\n\
|
|
16
|
-
p3 += dot(p3, p3.yzx + 19.19);\n\
|
|
17
|
-
return fract((p3.x + p3.y) * p3.z);\n\
|
|
18
|
-
}\n\
|
|
19
|
-
#endif\n\
|
|
20
|
-
\n\
|
|
21
7
|
float minComponent(in vec3 v) {\n\
|
|
22
8
|
return min(min(v.x, v.y), v.z);\n\
|
|
23
9
|
}\n\
|
|
@@ -25,9 +11,4 @@ float minComponent(in vec3 v) {\n\
|
|
|
25
11
|
float maxComponent(in vec3 v) {\n\
|
|
26
12
|
return max(max(v.x, v.y), v.z);\n\
|
|
27
13
|
}\n\
|
|
28
|
-
\n\
|
|
29
|
-
struct PointJacobianT {\n\
|
|
30
|
-
vec3 point;\n\
|
|
31
|
-
mat3 jacobianT;\n\
|
|
32
|
-
};\n\
|
|
33
14
|
";
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
uniform vec3 u_boxLocalToShapeUvScale;
|
|
2
|
+
uniform vec3 u_boxLocalToShapeUvTranslate;
|
|
3
|
+
|
|
4
|
+
uniform ivec4 u_cameraTileCoordinates;
|
|
5
|
+
uniform vec3 u_cameraTileUv;
|
|
6
|
+
uniform mat3 u_boxEcToXyz;
|
|
7
|
+
|
|
8
|
+
mat3 convertLocalToShapeSpaceDerivative(in vec3 positionLocal) {
|
|
9
|
+
// For BOX, local space = shape space, so the Jacobian is the identity matrix.
|
|
10
|
+
return mat3(1.0);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
vec3 scaleShapeUvToShapeSpace(in vec3 shapeUv) {
|
|
14
|
+
return shapeUv / u_boxLocalToShapeUvScale;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
vec3 convertEcToDeltaTile(in vec3 positionEC) {
|
|
18
|
+
vec3 dPosition = u_boxEcToXyz * positionEC;
|
|
19
|
+
return u_boxLocalToShapeUvScale * dPosition * float(1 << u_cameraTileCoordinates.w);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
TileAndUvCoordinate getTileAndUvCoordinate(in vec3 positionEC) {
|
|
23
|
+
vec3 deltaTileCoordinate = convertEcToDeltaTile(positionEC);
|
|
24
|
+
vec3 tileUvSum = u_cameraTileUv + deltaTileCoordinate;
|
|
25
|
+
ivec3 tileCoordinate = u_cameraTileCoordinates.xyz + ivec3(floor(tileUvSum));
|
|
26
|
+
tileCoordinate = min(max(ivec3(0), tileCoordinate), ivec3((1 << u_cameraTileCoordinates.w) - 1));
|
|
27
|
+
ivec3 tileCoordinateChange = tileCoordinate - u_cameraTileCoordinates.xyz;
|
|
28
|
+
vec3 tileUv = clamp(tileUvSum - vec3(tileCoordinateChange), 0.0, 1.0);
|
|
29
|
+
return TileAndUvCoordinate(ivec4(tileCoordinate, u_cameraTileCoordinates.w), tileUv);
|
|
30
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
//This file is automatically rebuilt by the Cesium build process.
|
|
2
|
+
export default "uniform vec3 u_boxLocalToShapeUvScale;\n\
|
|
3
|
+
uniform vec3 u_boxLocalToShapeUvTranslate;\n\
|
|
4
|
+
\n\
|
|
5
|
+
uniform ivec4 u_cameraTileCoordinates;\n\
|
|
6
|
+
uniform vec3 u_cameraTileUv;\n\
|
|
7
|
+
uniform mat3 u_boxEcToXyz;\n\
|
|
8
|
+
\n\
|
|
9
|
+
mat3 convertLocalToShapeSpaceDerivative(in vec3 positionLocal) {\n\
|
|
10
|
+
// For BOX, local space = shape space, so the Jacobian is the identity matrix.\n\
|
|
11
|
+
return mat3(1.0);\n\
|
|
12
|
+
}\n\
|
|
13
|
+
\n\
|
|
14
|
+
vec3 scaleShapeUvToShapeSpace(in vec3 shapeUv) {\n\
|
|
15
|
+
return shapeUv / u_boxLocalToShapeUvScale;\n\
|
|
16
|
+
}\n\
|
|
17
|
+
\n\
|
|
18
|
+
vec3 convertEcToDeltaTile(in vec3 positionEC) {\n\
|
|
19
|
+
vec3 dPosition = u_boxEcToXyz * positionEC;\n\
|
|
20
|
+
return u_boxLocalToShapeUvScale * dPosition * float(1 << u_cameraTileCoordinates.w);\n\
|
|
21
|
+
}\n\
|
|
22
|
+
\n\
|
|
23
|
+
TileAndUvCoordinate getTileAndUvCoordinate(in vec3 positionEC) {\n\
|
|
24
|
+
vec3 deltaTileCoordinate = convertEcToDeltaTile(positionEC);\n\
|
|
25
|
+
vec3 tileUvSum = u_cameraTileUv + deltaTileCoordinate;\n\
|
|
26
|
+
ivec3 tileCoordinate = u_cameraTileCoordinates.xyz + ivec3(floor(tileUvSum));\n\
|
|
27
|
+
tileCoordinate = min(max(ivec3(0), tileCoordinate), ivec3((1 << u_cameraTileCoordinates.w) - 1));\n\
|
|
28
|
+
ivec3 tileCoordinateChange = tileCoordinate - u_cameraTileCoordinates.xyz;\n\
|
|
29
|
+
vec3 tileUv = clamp(tileUvSum - vec3(tileCoordinateChange), 0.0, 1.0);\n\
|
|
30
|
+
return TileAndUvCoordinate(ivec4(tileCoordinate, u_cameraTileCoordinates.w), tileUv);\n\
|
|
31
|
+
}\n\
|
|
32
|
+
";
|