@navaramap/three 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (350) hide show
  1. package/LICENSE +8 -0
  2. package/dist/assets/atmosphere/README.md +1 -0
  3. package/dist/assets/atmosphere/higher_order_scattering.bin +0 -0
  4. package/dist/assets/atmosphere/higher_order_scattering.exr +0 -0
  5. package/dist/assets/atmosphere/irradiance.bin +0 -0
  6. package/dist/assets/atmosphere/irradiance.exr +0 -0
  7. package/dist/assets/atmosphere/scattering.bin +0 -0
  8. package/dist/assets/atmosphere/scattering.exr +0 -0
  9. package/dist/assets/atmosphere/single_mie_scattering.bin +0 -0
  10. package/dist/assets/atmosphere/single_mie_scattering.exr +0 -0
  11. package/dist/assets/atmosphere/stars.bin +0 -0
  12. package/dist/assets/atmosphere/transmittance.bin +0 -0
  13. package/dist/assets/atmosphere/transmittance.exr +0 -0
  14. package/dist/assets/cloud/README.md +1 -0
  15. package/dist/assets/cloud/local_weather.png +0 -0
  16. package/dist/assets/cloud/shape.bin +1 -0
  17. package/dist/assets/cloud/shape_detail.bin +1 -0
  18. package/dist/assets/cloud/turbulence.png +0 -0
  19. package/dist/assets/fontWorker-CEJEfRpb.js +2 -0
  20. package/dist/assets/fontWorker-CEJEfRpb.js.map +1 -0
  21. package/dist/assets/index-BUB-ijMO.js +12 -0
  22. package/dist/assets/index-BUB-ijMO.js.map +1 -0
  23. package/dist/assets/navara_wasm_font_worker_bg-665OLxjy.wasm +0 -0
  24. package/dist/assets/navara_wasm_worker_bg-BXhKC5bE.wasm +0 -0
  25. package/dist/assets/noise/README.md +1 -0
  26. package/dist/assets/noise/stbn.bin +0 -0
  27. package/dist/assets/water/README.md +3 -0
  28. package/dist/assets/water/waternormals.jpg +0 -0
  29. package/dist/index.d.ts +10114 -0
  30. package/dist/index.js +34481 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/index.umd.cjs +6345 -0
  33. package/dist/index.umd.cjs.map +1 -0
  34. package/package.json +95 -0
  35. package/src/Color.ts +111 -0
  36. package/src/ShadowMapViewers.ts +49 -0
  37. package/src/atmosphere.test.ts +76 -0
  38. package/src/atmosphere.ts +364 -0
  39. package/src/bufferView.ts +90 -0
  40. package/src/camera.ts +182 -0
  41. package/src/concurrency.ts +15 -0
  42. package/src/constants/assets.ts +30 -0
  43. package/src/constants/decoder.ts +7 -0
  44. package/src/constants/index.ts +2 -0
  45. package/src/core/BaseDesc.ts +142 -0
  46. package/src/core/BaseHandle.ts +126 -0
  47. package/src/core/DescRegistry.ts +88 -0
  48. package/src/core/EffectDesc.ts +343 -0
  49. package/src/core/EffectDescRegistry.ts +31 -0
  50. package/src/core/InstancedMeshDesc.ts +413 -0
  51. package/src/core/LightDesc.ts +216 -0
  52. package/src/core/LightDescRegistry.ts +32 -0
  53. package/src/core/MeshDesc.ts +457 -0
  54. package/src/core/MeshDescRegistry.ts +32 -0
  55. package/src/core/MeshDescWithSelectiveEffect.ts +129 -0
  56. package/src/core/Registries.ts +59 -0
  57. package/src/core/SelectiveEffectRegistry.ts +90 -0
  58. package/src/core/ViewContext.ts +235 -0
  59. package/src/core/errors.ts +16 -0
  60. package/src/core/index.ts +50 -0
  61. package/src/device.ts +414 -0
  62. package/src/effects/CustomEffectPass.ts +28 -0
  63. package/src/effects/copy.ts +10 -0
  64. package/src/effects/effect.ts +87 -0
  65. package/src/effects/index.ts +4 -0
  66. package/src/effects/render.ts +10 -0
  67. package/src/evaluations/FeatureEvaluator.ts +529 -0
  68. package/src/evaluations/index.ts +1 -0
  69. package/src/event/HillshadeContext.test.ts +232 -0
  70. package/src/event/HillshadeContext.ts +299 -0
  71. package/src/event/context.ts +279 -0
  72. package/src/event/feature.ts +357 -0
  73. package/src/event/featureEvent.ts +81 -0
  74. package/src/event/features/billboard.ts +30 -0
  75. package/src/event/features/model.ts +192 -0
  76. package/src/event/features/modelGpuBytes.test.ts +69 -0
  77. package/src/event/features/modelGpuBytes.ts +87 -0
  78. package/src/event/features/point.ts +25 -0
  79. package/src/event/features/polygon.ts +23 -0
  80. package/src/event/features/polygonOutline.ts +19 -0
  81. package/src/event/features/polyline.ts +19 -0
  82. package/src/event/features/text.ts +71 -0
  83. package/src/event/hillshade.test.ts +842 -0
  84. package/src/event/hillshade.ts +588 -0
  85. package/src/event/index.ts +700 -0
  86. package/src/event/loaders.ts +53 -0
  87. package/src/event/tile.ts +19 -0
  88. package/src/event/worker.ts +999 -0
  89. package/src/event/workerTaskSettlement.test.ts +243 -0
  90. package/src/event/workerTaskSettlement.ts +128 -0
  91. package/src/inMemoryBufferStore.test.ts +60 -0
  92. package/src/inMemoryBufferStore.ts +67 -0
  93. package/src/index.iife.ts +11 -0
  94. package/src/index.ts +2556 -0
  95. package/src/input.ts +144 -0
  96. package/src/layer.ts +183 -0
  97. package/src/layers/effect/FinalCopyEffectDesc.ts +29 -0
  98. package/src/layers/effect/MRTPassEffectDesc.ts +105 -0
  99. package/src/layers/effect/README.md +9 -0
  100. package/src/layers/effect/SelectiveEffectDesc.ts +113 -0
  101. package/src/layers/effect/SkyEnvMapEffectDesc.ts +58 -0
  102. package/src/layers/effect/TransparentPassEffectDesc.ts +62 -0
  103. package/src/layers/effect/index.ts +5 -0
  104. package/src/layers/index.ts +1 -0
  105. package/src/layersManager.ts +63 -0
  106. package/src/light.ts +15 -0
  107. package/src/loaders/AbortableImageLoader.ts +203 -0
  108. package/src/loaders/AbortableTextureLoader.ts +74 -0
  109. package/src/loaders/index.ts +5 -0
  110. package/src/material/enhancer/DESIGN.md +300 -0
  111. package/src/material/enhancer/MaterialEnhancer.ts +112 -0
  112. package/src/material/enhancer/ShaderReplacer.test.ts +114 -0
  113. package/src/material/enhancer/ShaderReplacer.ts +97 -0
  114. package/src/material/enhancer/batchTexture.ts +8 -0
  115. package/src/material/enhancer/index.ts +46 -0
  116. package/src/material/enhancer/instancedSprite/index.ts +7 -0
  117. package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/index.test.ts +214 -0
  118. package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/index.ts +134 -0
  119. package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/markers.ts +21 -0
  120. package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/material.ts +32 -0
  121. package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/mutates.test.ts +277 -0
  122. package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/mutates.ts +151 -0
  123. package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/shader.test.ts +114 -0
  124. package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/shader.ts +49 -0
  125. package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/state.test.ts +82 -0
  126. package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/state.ts +80 -0
  127. package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/types.ts +146 -0
  128. package/src/material/enhancer/instancedSprite/instancedSpriteMaterialEnhancer.ts +105 -0
  129. package/src/material/enhancer/model/index.ts +25 -0
  130. package/src/material/enhancer/model/modelBaseEnhancer/index.test.ts +74 -0
  131. package/src/material/enhancer/model/modelBaseEnhancer/index.ts +110 -0
  132. package/src/material/enhancer/model/modelBaseEnhancer/markers.ts +27 -0
  133. package/src/material/enhancer/model/modelBaseEnhancer/material.test.ts +66 -0
  134. package/src/material/enhancer/model/modelBaseEnhancer/material.ts +44 -0
  135. package/src/material/enhancer/model/modelBaseEnhancer/mutates.test.ts +84 -0
  136. package/src/material/enhancer/model/modelBaseEnhancer/mutates.ts +47 -0
  137. package/src/material/enhancer/model/modelBaseEnhancer/shader.test.ts +24 -0
  138. package/src/material/enhancer/model/modelBaseEnhancer/shader.ts +162 -0
  139. package/src/material/enhancer/model/modelBaseEnhancer/state.test.ts +103 -0
  140. package/src/material/enhancer/model/modelBaseEnhancer/state.ts +52 -0
  141. package/src/material/enhancer/model/modelBaseEnhancer/types.ts +89 -0
  142. package/src/material/enhancer/model/modelMaterialEnhancer.ts +91 -0
  143. package/src/material/enhancer/model/modelWaterEnhancer/index.test.ts +71 -0
  144. package/src/material/enhancer/model/modelWaterEnhancer/index.ts +175 -0
  145. package/src/material/enhancer/model/modelWaterEnhancer/material.test.ts +48 -0
  146. package/src/material/enhancer/model/modelWaterEnhancer/material.ts +25 -0
  147. package/src/material/enhancer/model/modelWaterEnhancer/mutates.test.ts +89 -0
  148. package/src/material/enhancer/model/modelWaterEnhancer/mutates.ts +89 -0
  149. package/src/material/enhancer/model/modelWaterEnhancer/shader.test.ts +34 -0
  150. package/src/material/enhancer/model/modelWaterEnhancer/shader.ts +111 -0
  151. package/src/material/enhancer/model/modelWaterEnhancer/state.test.ts +105 -0
  152. package/src/material/enhancer/model/modelWaterEnhancer/state.ts +59 -0
  153. package/src/material/enhancer/model/modelWaterEnhancer/types.ts +141 -0
  154. package/src/material/enhancer/model/pntsEnhancer/index.test.ts +96 -0
  155. package/src/material/enhancer/model/pntsEnhancer/index.ts +82 -0
  156. package/src/material/enhancer/model/pntsEnhancer/markers.ts +6 -0
  157. package/src/material/enhancer/model/pntsEnhancer/material.test.ts +37 -0
  158. package/src/material/enhancer/model/pntsEnhancer/material.ts +21 -0
  159. package/src/material/enhancer/model/pntsEnhancer/mutates.test.ts +80 -0
  160. package/src/material/enhancer/model/pntsEnhancer/mutates.ts +29 -0
  161. package/src/material/enhancer/model/pntsEnhancer/shader.test.ts +32 -0
  162. package/src/material/enhancer/model/pntsEnhancer/shader.ts +56 -0
  163. package/src/material/enhancer/model/pntsEnhancer/state.test.ts +87 -0
  164. package/src/material/enhancer/model/pntsEnhancer/state.ts +29 -0
  165. package/src/material/enhancer/model/pntsEnhancer/types.ts +38 -0
  166. package/src/material/enhancer/polygon/index.ts +22 -0
  167. package/src/material/enhancer/polygon/polygonBaseEnhancer/index.test.ts +101 -0
  168. package/src/material/enhancer/polygon/polygonBaseEnhancer/index.ts +130 -0
  169. package/src/material/enhancer/polygon/polygonBaseEnhancer/markers.ts +23 -0
  170. package/src/material/enhancer/polygon/polygonBaseEnhancer/material.test.ts +19 -0
  171. package/src/material/enhancer/polygon/polygonBaseEnhancer/material.ts +38 -0
  172. package/src/material/enhancer/polygon/polygonBaseEnhancer/mutates.test.ts +75 -0
  173. package/src/material/enhancer/polygon/polygonBaseEnhancer/mutates.ts +122 -0
  174. package/src/material/enhancer/polygon/polygonBaseEnhancer/shader.test.ts +25 -0
  175. package/src/material/enhancer/polygon/polygonBaseEnhancer/shader.ts +249 -0
  176. package/src/material/enhancer/polygon/polygonBaseEnhancer/state.test.ts +102 -0
  177. package/src/material/enhancer/polygon/polygonBaseEnhancer/state.ts +92 -0
  178. package/src/material/enhancer/polygon/polygonBaseEnhancer/types.ts +150 -0
  179. package/src/material/enhancer/polygon/polygonMaterialEnhancer.ts +97 -0
  180. package/src/material/enhancer/polygon/polygonWaterEnhancer/index.test.ts +72 -0
  181. package/src/material/enhancer/polygon/polygonWaterEnhancer/index.ts +164 -0
  182. package/src/material/enhancer/polygon/polygonWaterEnhancer/material.test.ts +48 -0
  183. package/src/material/enhancer/polygon/polygonWaterEnhancer/material.ts +35 -0
  184. package/src/material/enhancer/polygon/polygonWaterEnhancer/mutates.ts +61 -0
  185. package/src/material/enhancer/polygon/polygonWaterEnhancer/shader.test.ts +34 -0
  186. package/src/material/enhancer/polygon/polygonWaterEnhancer/shader.ts +96 -0
  187. package/src/material/enhancer/polygon/polygonWaterEnhancer/state.test.ts +98 -0
  188. package/src/material/enhancer/polygon/polygonWaterEnhancer/state.ts +57 -0
  189. package/src/material/enhancer/polygon/polygonWaterEnhancer/types.ts +115 -0
  190. package/src/material/enhancer/polyline/index.ts +7 -0
  191. package/src/material/enhancer/polyline/polylineBaseEnhancer/index.test.ts +157 -0
  192. package/src/material/enhancer/polyline/polylineBaseEnhancer/index.ts +154 -0
  193. package/src/material/enhancer/polyline/polylineBaseEnhancer/markers.ts +19 -0
  194. package/src/material/enhancer/polyline/polylineBaseEnhancer/material.test.ts +42 -0
  195. package/src/material/enhancer/polyline/polylineBaseEnhancer/material.ts +38 -0
  196. package/src/material/enhancer/polyline/polylineBaseEnhancer/mutates.test.ts +120 -0
  197. package/src/material/enhancer/polyline/polylineBaseEnhancer/mutates.ts +169 -0
  198. package/src/material/enhancer/polyline/polylineBaseEnhancer/shader.test.ts +67 -0
  199. package/src/material/enhancer/polyline/polylineBaseEnhancer/shader.ts +75 -0
  200. package/src/material/enhancer/polyline/polylineBaseEnhancer/state.test.ts +55 -0
  201. package/src/material/enhancer/polyline/polylineBaseEnhancer/state.ts +91 -0
  202. package/src/material/enhancer/polyline/polylineBaseEnhancer/types.ts +170 -0
  203. package/src/material/enhancer/polyline/polylineMaterialEnhancer.ts +102 -0
  204. package/src/material/enhancer/sdfText/index.ts +7 -0
  205. package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/index.ts +125 -0
  206. package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/markers.ts +19 -0
  207. package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/material.test.ts +35 -0
  208. package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/material.ts +32 -0
  209. package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/mutates.test.ts +381 -0
  210. package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/mutates.ts +232 -0
  211. package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/shader.ts +36 -0
  212. package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/state.test.ts +118 -0
  213. package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/state.ts +107 -0
  214. package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/types.ts +184 -0
  215. package/src/material/enhancer/sdfText/sdfTextMaterialEnhancer.ts +100 -0
  216. package/src/material/enhancer/shadowMap/index.ts +7 -0
  217. package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/index.ts +97 -0
  218. package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/markers.ts +10 -0
  219. package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/material.ts +31 -0
  220. package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/mutates.ts +8 -0
  221. package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/shader.test.ts +17 -0
  222. package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/shader.ts +53 -0
  223. package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/state.ts +17 -0
  224. package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/types.ts +26 -0
  225. package/src/material/enhancer/test-utils/shaderCompatibility.ts +124 -0
  226. package/src/material/enhancer/tileComposite/compose.test.ts +95 -0
  227. package/src/material/enhancer/tileComposite/compose.ts +112 -0
  228. package/src/material/enhancer/tileComposite/index.ts +23 -0
  229. package/src/material/enhancer/tileComposite/tileCompositeBaseEnhancer/index.ts +11 -0
  230. package/src/material/enhancer/tileComposite/tileCompositeBaseEnhancer/mutates.ts +132 -0
  231. package/src/material/enhancer/tileComposite/tileCompositeBaseEnhancer/shader.ts +245 -0
  232. package/src/material/enhancer/tileComposite/tileCompositeBaseEnhancer/types.ts +43 -0
  233. package/src/material/enhancer/tileComposite/tileElevationHeatmapEnhancer/index.ts +29 -0
  234. package/src/material/enhancer/tileComposite/tileElevationHeatmapEnhancer/mutates.ts +68 -0
  235. package/src/material/enhancer/tileComposite/tileElevationHeatmapEnhancer/shader.ts +24 -0
  236. package/src/material/enhancer/tileComposite/tileHillshadeEnhancer/index.ts +29 -0
  237. package/src/material/enhancer/tileComposite/tileHillshadeEnhancer/mutates.ts +34 -0
  238. package/src/material/enhancer/tileComposite/tileHillshadeEnhancer/shader.ts +36 -0
  239. package/src/material/enhancer/tileComposite/tileWaterEnhancer/index.ts +23 -0
  240. package/src/material/enhancer/tileComposite/tileWaterEnhancer/mutates.ts +23 -0
  241. package/src/material/enhancer/tileComposite/tileWaterEnhancer/shader.ts +8 -0
  242. package/src/material/enhancer/tileComposite/tileWatermaskEnhancer/index.ts +23 -0
  243. package/src/material/enhancer/tileComposite/tileWatermaskEnhancer/mutates.ts +34 -0
  244. package/src/material/enhancer/tileComposite/tileWatermaskEnhancer/shader.ts +13 -0
  245. package/src/material/enhancer/tileComposite/types.ts +58 -0
  246. package/src/material/index.ts +3 -0
  247. package/src/material/macro/index.ts +1 -0
  248. package/src/material/macro/tileShader.test.ts +136 -0
  249. package/src/material/macro/tileShader.ts +287 -0
  250. package/src/material/overrideMaterialsForMRT.ts +439 -0
  251. package/src/material/selectiveEffectMaterialSetup.test.ts +52 -0
  252. package/src/material/selectiveEffectMaterialSetup.ts +53 -0
  253. package/src/material/types/index.ts +1 -0
  254. package/src/material/types/uniform.ts +1 -0
  255. package/src/mesh/DrapedMesh.ts +101 -0
  256. package/src/mesh/batchTexture.test.ts +646 -0
  257. package/src/mesh/batchTexture.ts +437 -0
  258. package/src/mesh/batchedFeature.ts +186 -0
  259. package/src/mesh/batchedSdfText.ts +484 -0
  260. package/src/mesh/featureMesh.ts +43 -0
  261. package/src/mesh/index.ts +16 -0
  262. package/src/mesh/instanced.ts +117 -0
  263. package/src/mesh/model.ts +483 -0
  264. package/src/mesh/pickableMesh.ts +55 -0
  265. package/src/mesh/pickableMeshWrapper.ts +529 -0
  266. package/src/mesh/polygon.ts +699 -0
  267. package/src/mesh/polygonOutline.ts +393 -0
  268. package/src/mesh/polyline.ts +523 -0
  269. package/src/mesh/releaseGeometryArrays.ts +57 -0
  270. package/src/mesh/rtcRteHelper.ts +211 -0
  271. package/src/mesh/sdfText.test.ts +200 -0
  272. package/src/mesh/sdfText.ts +1019 -0
  273. package/src/mesh/sprite/billboardAtlas.test.ts +177 -0
  274. package/src/mesh/sprite/billboardAtlas.ts +210 -0
  275. package/src/mesh/sprite/billboardAtlasImageLoader.ts +29 -0
  276. package/src/mesh/sprite/index.ts +1 -0
  277. package/src/mesh/sprite/instancedSprite.ts +694 -0
  278. package/src/mesh/tile.test.ts +393 -0
  279. package/src/mesh/tile.ts +1790 -0
  280. package/src/object3DEvent.ts +6 -0
  281. package/src/orchestrators/RenderPassOrchestrator.ts +147 -0
  282. package/src/orchestrators/index.ts +1 -0
  283. package/src/passes/AllDepthCopyPass.ts +165 -0
  284. package/src/passes/CustomRenderPass.ts +279 -0
  285. package/src/passes/NormalCopyPass.ts +125 -0
  286. package/src/passes/RenderTargetCopyPass.ts +91 -0
  287. package/src/passes/SkyEnvMapPass.ts +58 -0
  288. package/src/passes/index.ts +5 -0
  289. package/src/pick/pickHelper.ts +273 -0
  290. package/src/pick/pickTerrain.ts +254 -0
  291. package/src/plugins/AttributionPlugin/AttributionPlugin.test.ts +210 -0
  292. package/src/plugins/AttributionPlugin/attribution.test.ts +225 -0
  293. package/src/plugins/AttributionPlugin/attribution.ts +355 -0
  294. package/src/plugins/AttributionPlugin/attributionStyles.ts +163 -0
  295. package/src/plugins/AttributionPlugin/index.ts +702 -0
  296. package/src/plugins/index.ts +1 -0
  297. package/src/quality.ts +1 -0
  298. package/src/renderOrder.ts +3 -0
  299. package/src/scene.test.ts +164 -0
  300. package/src/scene.ts +127 -0
  301. package/src/shaders/index.ts +1 -0
  302. package/src/solar.test.ts +81 -0
  303. package/src/solar.ts +101 -0
  304. package/src/source.ts +80 -0
  305. package/src/stats.ts +102 -0
  306. package/src/tasks/computeVertexNormalsAsync.ts +15 -0
  307. package/src/tasks/constructPolygonBatchedFeature.ts +34 -0
  308. package/src/tasks/constructPolylineBatchedFeature.ts +27 -0
  309. package/src/tasks/constructQuantizedMeshTerrainMesh.ts +24 -0
  310. package/src/tasks/constructTerrainMesh.ts +25 -0
  311. package/src/tasks/getImageDataFromBlob.ts +13 -0
  312. package/src/tasks/getImageDataFromImageBitmap.ts +12 -0
  313. package/src/tasks/parseMvtTile.ts +22 -0
  314. package/src/tasks/queueTask.ts +19 -0
  315. package/src/tasks/toCreasedNormalsAsync.ts +18 -0
  316. package/src/tasks/upsampleQuantizedMeshTerrainMesh.ts +44 -0
  317. package/src/tasks/upsampleTerrainMesh.ts +39 -0
  318. package/src/texture.ts +19 -0
  319. package/src/textures.ts +13 -0
  320. package/src/tileTexture/CompositeShader.snapshot.test.ts +59 -0
  321. package/src/tileTexture/CompositeShader.test.ts +168 -0
  322. package/src/tileTexture/CompositeShader.ts +53 -0
  323. package/src/tileTexture/SlotPlanner.test.ts +105 -0
  324. package/src/tileTexture/SlotPlanner.ts +102 -0
  325. package/src/tileTexture/TileTextureCache.test.ts +227 -0
  326. package/src/tileTexture/TileTextureCache.ts +192 -0
  327. package/src/tileTexture/TileTextureCompositor.test.ts +260 -0
  328. package/src/tileTexture/TileTextureCompositor.ts +421 -0
  329. package/src/tileTexture/__snapshots__/CompositeShader.snapshot.test.ts.snap +2649 -0
  330. package/src/tileTexture/index.ts +8 -0
  331. package/src/tileTexture/types.ts +150 -0
  332. package/src/type/index.ts +261 -0
  333. package/src/uniforms.ts +20 -0
  334. package/src/utils/arraysEqual.ts +9 -0
  335. package/src/utils/blendModes.ts +80 -0
  336. package/src/utils/geometry.ts +53 -0
  337. package/src/utils/hillshadeNormalMapGenerator.ts +193 -0
  338. package/src/utils/index.ts +8 -0
  339. package/src/utils/object.test.ts +14 -0
  340. package/src/utils/object.ts +7 -0
  341. package/src/utils/replacer.test.ts +42 -0
  342. package/src/utils/replacer.ts +89 -0
  343. package/src/utils/screen.ts +29 -0
  344. package/src/utils/textureFragmentIndex.test.ts +224 -0
  345. package/src/utils/textureFragmentIndex.ts +97 -0
  346. package/src/utils/worker.ts +3 -0
  347. package/src/vite-env.d.ts +2 -0
  348. package/src/worker/index.ts +13 -0
  349. package/src/worker/tasks/computeVertexNormals.ts +15 -0
  350. package/src/worker/tasks/toCreasedNormals.ts +22 -0
@@ -0,0 +1,48 @@
1
+ import { MeshLambertMaterial } from "three";
2
+ import { describe, expect, it } from "vitest";
3
+
4
+ import { applyWaterMaterialConfig } from "./material";
5
+ import { DEFAULT_WATER_STATE } from "./state";
6
+ import type { PolygonWaterState } from "./types";
7
+
8
+ describe("polygonWaterEnhancer/material", () => {
9
+ describe("applyWaterMaterialConfig", () => {
10
+ it("should trigger material.needsUpdate when water flag changes", () => {
11
+ const material = new MeshLambertMaterial();
12
+ const state: PolygonWaterState = {
13
+ ...DEFAULT_WATER_STATE,
14
+ useWater: true,
15
+ };
16
+
17
+ let needsUpdateCalled = false;
18
+ Object.defineProperty(material, "needsUpdate", {
19
+ set: (value: boolean) => {
20
+ if (value) needsUpdateCalled = true;
21
+ },
22
+ configurable: true,
23
+ });
24
+
25
+ applyWaterMaterialConfig(material, state, false, false);
26
+ expect(needsUpdateCalled).toBe(true);
27
+ });
28
+
29
+ it("should not trigger material.needsUpdate when water flag stays the same", () => {
30
+ const material = new MeshLambertMaterial();
31
+ const state: PolygonWaterState = {
32
+ ...DEFAULT_WATER_STATE,
33
+ useWater: true,
34
+ };
35
+
36
+ let needsUpdateCalled = false;
37
+ Object.defineProperty(material, "needsUpdate", {
38
+ set: (value: boolean) => {
39
+ if (value) needsUpdateCalled = true;
40
+ },
41
+ configurable: true,
42
+ });
43
+
44
+ applyWaterMaterialConfig(material, state, false, true);
45
+ expect(needsUpdateCalled).toBe(false);
46
+ });
47
+ });
48
+ });
@@ -0,0 +1,35 @@
1
+ import { AddOperation } from "three";
2
+
3
+ import type { MaterialsFromShaders, ShaderName } from "../../MaterialEnhancer";
4
+
5
+ import type { PolygonWaterState } from "./types";
6
+
7
+ // Shaders this enhancer supports
8
+ export const AVAILABLE_SHADERS = ["lambert"] satisfies ShaderName[];
9
+ export type SupportedMaterial = MaterialsFromShaders<typeof AVAILABLE_SHADERS>;
10
+
11
+ /**
12
+ * Apply water-related material configuration.
13
+ * Side effect function - mutates material directly.
14
+ */
15
+ export const applyWaterMaterialConfig = (
16
+ material: SupportedMaterial,
17
+ state: PolygonWaterState,
18
+ isTexturized: boolean,
19
+ prevUseWater: boolean,
20
+ ): void => {
21
+ // Trigger shader recompilation if water flag changed
22
+ if (state.useWater !== prevUseWater) {
23
+ material.needsUpdate = true;
24
+ }
25
+
26
+ // Update envMap based on water state
27
+ if (!isTexturized && state.useWater) {
28
+ material.envMap = state.skyEnvMap;
29
+ if ("combine" in material) {
30
+ material.combine = AddOperation;
31
+ }
32
+ } else {
33
+ material.envMap = null;
34
+ }
35
+ };
@@ -0,0 +1,61 @@
1
+ import type { UniformValue } from "../../../types";
2
+
3
+ import type { PolygonWaterRefs, WaterMutates } from "./types";
4
+
5
+ /**
6
+ * Default refs with initial values.
7
+ * These are cloned in createWaterMutates and synced from state via update().
8
+ * Note: timeUniform is an external ref assigned via setter (identity doesn't change).
9
+ */
10
+ const DEFAULT_WATER_REFS: Omit<PolygonWaterRefs, "timeUniform"> = {
11
+ uWaterNormalMap: { value: null },
12
+ uWaterScaleNormal: { value: 0 },
13
+ uWaterSpeed: { value: 0 },
14
+ uShininess: { value: 0 },
15
+ uSpecularStrength: { value: 0 },
16
+ uApplyWaterNormal: { value: 0 },
17
+ uSpecular: { value: false },
18
+ uIor: { value: 1.33333 },
19
+ };
20
+
21
+ /**
22
+ * Create mutation functions for the water enhancer.
23
+ * Refs are created internally and captured via closure.
24
+ */
25
+ export const createWaterMutates = (): WaterMutates => {
26
+ // Clone defaults so each enhancer instance gets independent ref objects
27
+ // timeUniform is an external ref assigned via setter (identity doesn't change)
28
+ const refs: PolygonWaterRefs = structuredClone(DEFAULT_WATER_REFS);
29
+
30
+ return {
31
+ update: (state) => {
32
+ // Sync refs from state
33
+ refs.uWaterNormalMap.value = state.waterNormalMap;
34
+ refs.uWaterScaleNormal.value = state.waterScaleNormal;
35
+ refs.uWaterSpeed.value = state.waterSpeed;
36
+ refs.uShininess.value = state.shininess;
37
+ refs.uSpecularStrength.value = state.specularStrength;
38
+ refs.uApplyWaterNormal.value = state.applyWaterNormal ? 1 : 0;
39
+ refs.uSpecular.value = state.specular;
40
+ refs.uIor.value = state.ior;
41
+ },
42
+ updateUniforms: (uniforms) => {
43
+ // Assign water uniform refs to shader.uniforms
44
+ uniforms.uWaterNormalMap = refs.uWaterNormalMap;
45
+ uniforms.uWaterScaleNormal = refs.uWaterScaleNormal;
46
+ uniforms.uWaterSpeed = refs.uWaterSpeed;
47
+ uniforms.uShininess = refs.uShininess;
48
+ uniforms.uSpecularStrength = refs.uSpecularStrength;
49
+ uniforms.uApplyWaterNormal = refs.uApplyWaterNormal;
50
+ uniforms.uSpecular = refs.uSpecular;
51
+ uniforms.uIor = refs.uIor;
52
+ if (refs.uTime) {
53
+ uniforms.uTime = refs.uTime;
54
+ }
55
+ },
56
+ setTimeUniform: (timeUniform: UniformValue<number>): void => {
57
+ // Assign external ref object (identity doesn't change after mount)
58
+ refs.uTime = timeUniform;
59
+ },
60
+ };
61
+ };
@@ -0,0 +1,34 @@
1
+ import { testShaderCompatibility } from "../../test-utils/shaderCompatibility";
2
+ import {
3
+ POLYGON_BASE_SHADER_MARKERS,
4
+ createPolygonBaseEnhancer,
5
+ } from "../polygonBaseEnhancer";
6
+
7
+ import { createPolygonWaterEnhancer, type SupportedMaterial } from ".";
8
+
9
+ testShaderCompatibility(
10
+ "polygonWaterEnhancer",
11
+ (material) =>
12
+ createPolygonWaterEnhancer(
13
+ createPolygonBaseEnhancer(material as SupportedMaterial),
14
+ ),
15
+ [
16
+ {
17
+ name: "With water",
18
+ props: {
19
+ water: {
20
+ water: true,
21
+ },
22
+ },
23
+ },
24
+ {
25
+ name: "Without water",
26
+ props: {
27
+ water: {
28
+ water: false,
29
+ },
30
+ },
31
+ },
32
+ ],
33
+ POLYGON_BASE_SHADER_MARKERS,
34
+ );
@@ -0,0 +1,96 @@
1
+ import WaterParsFragment from "@shaders/glsl/chunks/water_pars_fragment.glsl?raw";
2
+ import type { WebGLProgramParametersWithUniforms } from "three";
3
+
4
+ import {
5
+ POLYGON_BASE_SHADER_MARKERS,
6
+ createPolygonBaseShaderReplacer,
7
+ } from "../polygonBaseEnhancer/markers";
8
+
9
+ import type { PolygonWaterState, WaterMutates } from "./types";
10
+
11
+ /**
12
+ * Transform shader with water-specific modifications.
13
+ * Uniform assignment is handled by mutates.updateUniforms().
14
+ */
15
+ export const transformWaterShader = (
16
+ shader: WebGLProgramParametersWithUniforms,
17
+ state: PolygonWaterState,
18
+ mutates: WaterMutates,
19
+ ): void => {
20
+ const { useWater } = state;
21
+
22
+ // Derive shader defines from semantic state flags
23
+ shader.defines ??= {};
24
+ if (useWater) {
25
+ shader.defines.WATER = 1;
26
+ shader.defines.USE_UV = 1;
27
+ } else {
28
+ delete shader.defines.WATER;
29
+ }
30
+
31
+ // Assign water uniform refs to shader.uniforms via mutates
32
+ mutates.updateUniforms(shader.uniforms, state);
33
+
34
+ // Insert WaterParsFragment before the computeSpecular function (non-marker-based)
35
+ const computeSpecularMarker = "vec3 computeSpecular(";
36
+ const specularIdx = shader.fragmentShader.indexOf(computeSpecularMarker);
37
+ if (specularIdx !== -1) {
38
+ const beforeSpecular = shader.fragmentShader.substring(0, specularIdx);
39
+ const afterSpecular = shader.fragmentShader.substring(specularIdx);
40
+ shader.fragmentShader =
41
+ beforeSpecular + WaterParsFragment + "\n\n" + afterSpecular;
42
+ }
43
+
44
+ shader.fragmentShader = createPolygonBaseShaderReplacer(shader.fragmentShader)
45
+ // Add water uniform declarations after base's UNIFORM_END
46
+ .insertAfter(
47
+ POLYGON_BASE_SHADER_MARKERS.fragment.UNIFORM_END,
48
+ `uniform sampler2D uWaterNormalMap;
49
+ uniform float uWaterScaleNormal;
50
+ uniform float uWaterSpeed;
51
+ uniform float uShininess;
52
+ uniform float uSpecularStrength;
53
+ uniform float uApplyWaterNormal;
54
+ uniform bool uSpecular;
55
+ uniform float uIor;
56
+ uniform float uTime;`,
57
+ )
58
+ // Insert specular computation after base's NORMAL_END
59
+ .insertAfter(
60
+ POLYGON_BASE_SHADER_MARKERS.fragment.NORMAL_END,
61
+ useWater
62
+ ? `
63
+ if(!uIsTexturized) {
64
+ specular = computeWaterSpecular(
65
+ uWaterNormalMap,
66
+ (vPosition.xy + vPosition.zy + vPosition.xz) / 3.0 * uWaterScaleNormal,
67
+ uTime * uWaterSpeed,
68
+ vViewPosition,
69
+ normalMatrix,
70
+ origNormal,
71
+ uShininess,
72
+ uSpecularStrength,
73
+ diffuseColor.rgb,
74
+ normal
75
+ );
76
+ }`
77
+ : `
78
+ if(uSpecular && !uIsTexturized) {
79
+ specular = computeSpecular(
80
+ vViewPosition,
81
+ origNormal,
82
+ uShininess,
83
+ uSpecularStrength,
84
+ uIor
85
+ );
86
+ }`,
87
+ )
88
+ // Replace final normal block with water version
89
+ .replaceBlock(
90
+ {
91
+ start: POLYGON_BASE_SHADER_MARKERS.fragment.FINAL_NORMAL_START,
92
+ end: POLYGON_BASE_SHADER_MARKERS.fragment.FINAL_NORMAL_END,
93
+ },
94
+ `vec3 finalNormal = mix(origNormal, normalize(origNormal * 0.7 + normal), uApplyWaterNormal);`,
95
+ ).source;
96
+ };
@@ -0,0 +1,98 @@
1
+ import { Texture } from "three";
2
+ import { describe, expect, it } from "vitest";
3
+
4
+ import { DEFAULT_WATER_STATE, updateWaterState } from "./state";
5
+ import type { PolygonWaterState } from "./types";
6
+
7
+ /**
8
+ * Helper to create expected water state by merging with defaults.
9
+ */
10
+ const createExpectedState = (
11
+ overrides: Partial<PolygonWaterState> = {},
12
+ ): PolygonWaterState => ({
13
+ ...DEFAULT_WATER_STATE,
14
+ ...overrides,
15
+ });
16
+
17
+ describe("polygonWaterEnhancer/state", () => {
18
+ describe("updateWaterState", () => {
19
+ it("returns default state when given empty props", () => {
20
+ const result = updateWaterState({}, DEFAULT_WATER_STATE);
21
+ expect(result).toEqual(createExpectedState());
22
+ });
23
+
24
+ it("applies all props", () => {
25
+ const mockTexture = new Texture();
26
+ const mockSkyEnvMap = new Texture();
27
+
28
+ const result = updateWaterState(
29
+ {
30
+ water: true,
31
+ waterNormalMap: mockTexture,
32
+ waterScaleNormal: 0.5,
33
+ waterSpeed: 1.0,
34
+ shininess: 30,
35
+ specularStrength: 0.8,
36
+ applyWaterNormal: true,
37
+ specular: true,
38
+ ior: 1.5,
39
+ skyEnvMap: mockSkyEnvMap,
40
+ },
41
+ DEFAULT_WATER_STATE,
42
+ );
43
+
44
+ expect(result).toEqual(
45
+ createExpectedState({
46
+ useWater: true,
47
+ waterNormalMap: mockTexture,
48
+ waterScaleNormal: 0.5,
49
+ waterSpeed: 1.0,
50
+ shininess: 30,
51
+ specularStrength: 0.8,
52
+ applyWaterNormal: true,
53
+ specular: true,
54
+ ior: 1.5,
55
+ skyEnvMap: mockSkyEnvMap,
56
+ }),
57
+ );
58
+ });
59
+
60
+ it("falls back to currentState for missing props", () => {
61
+ const currentState: PolygonWaterState = {
62
+ ...DEFAULT_WATER_STATE,
63
+ useWater: true,
64
+ waterScaleNormal: 0.3,
65
+ shininess: 25,
66
+ };
67
+
68
+ const result = updateWaterState({ waterSpeed: 5.0 }, currentState);
69
+
70
+ expect(result.useWater).toBe(true);
71
+ expect(result.waterScaleNormal).toBe(0.3);
72
+ expect(result.shininess).toBe(25);
73
+ expect(result.waterSpeed).toBe(5.0);
74
+ });
75
+
76
+ it("preserves waterNormalMap when not provided in props", () => {
77
+ const mockTexture = new Texture();
78
+ const currentState: PolygonWaterState = {
79
+ ...DEFAULT_WATER_STATE,
80
+ waterNormalMap: mockTexture,
81
+ };
82
+
83
+ const result = updateWaterState({ waterSpeed: 2.0 }, currentState);
84
+ expect(result.waterNormalMap).toBe(mockTexture);
85
+ });
86
+
87
+ it("sets waterNormalMap to null when explicitly set to null", () => {
88
+ const mockTexture = new Texture();
89
+ const currentState: PolygonWaterState = {
90
+ ...DEFAULT_WATER_STATE,
91
+ waterNormalMap: mockTexture,
92
+ };
93
+
94
+ const result = updateWaterState({ waterNormalMap: null }, currentState);
95
+ expect(result.waterNormalMap).toBeNull();
96
+ });
97
+ });
98
+ });
@@ -0,0 +1,57 @@
1
+ import type { PolygonWaterState, WaterOnlyProps } from "./types";
2
+
3
+ export const DEFAULT_WATER_PROPS: Required<WaterOnlyProps> = {
4
+ water: false,
5
+ waterScaleNormal: 0,
6
+ waterSpeed: 0,
7
+ shininess: 0,
8
+ specularStrength: 0,
9
+ applyWaterNormal: false,
10
+ specular: false,
11
+ ior: 1.33333,
12
+ skyEnvMap: null,
13
+ waterNormalMap: null,
14
+ timeUniform: { value: 0 },
15
+ };
16
+
17
+ /** Default state derived from DEFAULT_WATER_PROPS */
18
+ export const DEFAULT_WATER_STATE: PolygonWaterState = {
19
+ useWater: DEFAULT_WATER_PROPS.water,
20
+ skyEnvMap: DEFAULT_WATER_PROPS.skyEnvMap,
21
+ waterNormalMap: DEFAULT_WATER_PROPS.waterNormalMap,
22
+ waterScaleNormal: DEFAULT_WATER_PROPS.waterScaleNormal,
23
+ waterSpeed: DEFAULT_WATER_PROPS.waterSpeed,
24
+ shininess: DEFAULT_WATER_PROPS.shininess,
25
+ specularStrength: DEFAULT_WATER_PROPS.specularStrength,
26
+ applyWaterNormal: DEFAULT_WATER_PROPS.applyWaterNormal,
27
+ specular: DEFAULT_WATER_PROPS.specular,
28
+ ior: DEFAULT_WATER_PROPS.ior,
29
+ };
30
+
31
+ /**
32
+ * Update immutable state from props.
33
+ * Props override currentState values; missing props fall back to currentState.
34
+ * Pass DEFAULT_WATER_STATE as currentState for initial mount.
35
+ *
36
+ * @param props - The props to apply
37
+ * @param currentState - The current state to use as fallback (use DEFAULT_WATER_STATE for mount)
38
+ */
39
+ export const updateWaterState = (
40
+ props: WaterOnlyProps,
41
+ currentState: PolygonWaterState,
42
+ ): PolygonWaterState => ({
43
+ useWater: props.water ?? currentState.useWater,
44
+ skyEnvMap: props.skyEnvMap ?? currentState.skyEnvMap,
45
+ // Only update waterNormalMap when explicitly provided (not undefined)
46
+ waterNormalMap:
47
+ props.waterNormalMap !== undefined
48
+ ? props.waterNormalMap
49
+ : currentState.waterNormalMap,
50
+ waterScaleNormal: props.waterScaleNormal ?? currentState.waterScaleNormal,
51
+ waterSpeed: props.waterSpeed ?? currentState.waterSpeed,
52
+ shininess: props.shininess ?? currentState.shininess,
53
+ specularStrength: props.specularStrength ?? currentState.specularStrength,
54
+ applyWaterNormal: props.applyWaterNormal ?? currentState.applyWaterNormal,
55
+ specular: props.specular ?? currentState.specular,
56
+ ior: props.ior ?? currentState.ior,
57
+ });
@@ -0,0 +1,115 @@
1
+ import type { Texture } from "three";
2
+
3
+ import type { UniformValue } from "../../../types";
4
+ import type { Mutates } from "../../MaterialEnhancer";
5
+ import type {
6
+ PolygonBaseMutates,
7
+ PolygonBaseProps,
8
+ PolygonBaseState,
9
+ } from "../polygonBaseEnhancer";
10
+
11
+ /**
12
+ * Water-only props (excluding base props).
13
+ */
14
+ export type WaterOnlyProps = {
15
+ water?: boolean;
16
+ waterScaleNormal?: number;
17
+ waterSpeed?: number;
18
+ shininess?: number;
19
+ specularStrength?: number;
20
+ applyWaterNormal?: boolean;
21
+ specular?: boolean;
22
+ ior?: number;
23
+ skyEnvMap?: Texture | null;
24
+
25
+ // Water normal map texture (value-based, not ref-based)
26
+ // This is set dynamically and may change identity, so we mutate the internal ref's value
27
+ waterNormalMap?: Texture | null;
28
+
29
+ // External uniform ref (ref-based, shared with CommonUniforms)
30
+ // This ref identity doesn't change, so we assign the ref object itself
31
+ timeUniform?: UniformValue<number>;
32
+ };
33
+
34
+ /**
35
+ * Combined props for the polygon water enhancer.
36
+ * Props are explicitly separated into base and water sections for clarity.
37
+ */
38
+ export type PolygonWaterProps = {
39
+ base?: PolygonBaseProps;
40
+ water?: WaterOnlyProps;
41
+ };
42
+
43
+ /**
44
+ * Immutable state for the water enhancer.
45
+ * This state is always replaced as a whole (never mutated).
46
+ * Returned directly via states() - refresh after updates.
47
+ */
48
+ export type PolygonWaterState = Readonly<{
49
+ useWater: boolean;
50
+ skyEnvMap: Texture | null;
51
+ waterNormalMap: Texture | null;
52
+ waterScaleNormal: number;
53
+ waterSpeed: number;
54
+ shininess: number;
55
+ specularStrength: number;
56
+ applyWaterNormal: boolean;
57
+ specular: boolean;
58
+ ior: number;
59
+ }>;
60
+
61
+ /**
62
+ * Combined state for the polygon water enhancer.
63
+ * Includes both base state and water-specific state.
64
+ */
65
+ export type PolygonWaterCombinedStates = {
66
+ readonly base: PolygonBaseState;
67
+ readonly water: PolygonWaterState;
68
+ };
69
+
70
+ /**
71
+ * Combined mutation functions for the polygon water enhancer.
72
+ */
73
+ export type PolygonWaterCombinedMutates = {
74
+ readonly base: PolygonBaseMutates;
75
+ readonly water: WaterMutates;
76
+ };
77
+
78
+ /**
79
+ * Mutable references (uniforms) for the water enhancer.
80
+ *
81
+ * These are shared references with shader.uniforms and can be mutated directly
82
+ * for efficient GPU uniform updates without shader recompilation.
83
+ * Internal type - not exposed externally.
84
+ */
85
+ export type PolygonWaterRefs = {
86
+ // Internal refs (value-based updates)
87
+ uWaterNormalMap: UniformValue<Texture | null>;
88
+ uWaterScaleNormal: UniformValue<number>;
89
+ uWaterSpeed: UniformValue<number>;
90
+ uShininess: UniformValue<number>;
91
+ uSpecularStrength: UniformValue<number>;
92
+ uApplyWaterNormal: UniformValue<number>;
93
+ uSpecular: UniformValue<boolean>;
94
+ uIor: UniformValue<number>;
95
+
96
+ // External uniform ref (assigned as ref object, identity doesn't change)
97
+ uTime?: UniformValue<number>;
98
+ };
99
+
100
+ export type PolygonWaterUniforms = Partial<PolygonWaterRefs>;
101
+
102
+ /**
103
+ * Mutation functions for the water enhancer (internal only).
104
+ */
105
+ export type WaterMutates = Mutates<
106
+ PolygonWaterState,
107
+ PolygonWaterUniforms,
108
+ {
109
+ /**
110
+ * Set the time uniform ref.
111
+ * Assigns the external ref object (identity doesn't change after mount).
112
+ */
113
+ setTimeUniform: (timeUniform: UniformValue<number>) => void;
114
+ }
115
+ >;
@@ -0,0 +1,7 @@
1
+ export { createPolylineMaterialEnhancer } from "./polylineMaterialEnhancer";
2
+ export type { PolylineMaterialProps } from "./polylineMaterialEnhancer";
3
+ export type {
4
+ PolylineBaseMutates,
5
+ PolylineBaseProps,
6
+ PolylineBaseState,
7
+ } from "./polylineMaterialEnhancer";