@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,393 @@
1
+ import {
2
+ PolygonMesh as NavaraPolygonMesh,
3
+ PolygonMaterial,
4
+ } from "@navaramap/engine";
5
+ import BatchTextureParsVertex from "@shaders/glsl/chunks/batch_texture_pars_vertex.glsl";
6
+ import BranchFreeTernary from "@shaders/glsl/chunks/branchFreeTernary.glsl";
7
+ import ExtrudedHeightParsVertex from "@shaders/glsl/chunks/extruded_height_pars_vertex.glsl";
8
+ import ExtrudedHeightVertex from "@shaders/glsl/chunks/extruded_height_vertex.glsl";
9
+ import HeightParsVertex from "@shaders/glsl/chunks/height_pars_vertex.glsl";
10
+ import HeightVertex from "@shaders/glsl/chunks/height_vertex.glsl";
11
+ import { Color, type DataTexture, InstancedBufferAttribute } from "three";
12
+ import {
13
+ Line2,
14
+ LineGeometry,
15
+ LineMaterial,
16
+ LineSegmentsGeometry,
17
+ } from "three-stdlib";
18
+
19
+ import type { EventContext } from "../event/context";
20
+ import { setupMaterialForMRT } from "../material";
21
+ import { createReplacer } from "../utils/replacer";
22
+
23
+ import { POLYGON_BATCH_TEXTURE_ROWS } from "./batchedFeature";
24
+ import { initBatchedMaterial } from "./batchTexture";
25
+ import type { FeatureMesh } from "./featureMesh";
26
+
27
+ class NvLineGeometry extends LineGeometry {
28
+ setPositions(
29
+ array: Float32Array,
30
+ skipIdx: Uint32Array = new Uint32Array(),
31
+ ): this {
32
+ const positions: number[] = [];
33
+ const skipSet = new Set(skipIdx);
34
+
35
+ for (let i = 0; i < array.length - 3; i += 3) {
36
+ const currentIndex = i / 3;
37
+ if (skipSet.has(currentIndex)) {
38
+ continue;
39
+ }
40
+
41
+ // segment start
42
+ positions.push(array[i], array[i + 1], array[i + 2]);
43
+ // segment end
44
+ positions.push(array[i + 3], array[i + 4], array[i + 5]);
45
+ }
46
+
47
+ const points = new Float32Array(positions);
48
+
49
+ // This function is used to override LineGeometry's setPositions,
50
+ // so we don't call super.setPositions.
51
+ LineSegmentsGeometry.prototype.setPositions.call(this, points);
52
+ return this;
53
+ }
54
+ }
55
+
56
+ export class PolygonOutlineMesh extends Line2 implements FeatureMesh {
57
+ readonly ctx: EventContext;
58
+ private resizeEventUnsubscribe?: () => void;
59
+
60
+ constructor(ctx: EventContext, mesh: NavaraPolygonMesh) {
61
+ super(new NvLineGeometry(), new LineMaterial());
62
+ this.ctx = ctx;
63
+ this.initGeometry(mesh);
64
+ this.initMaterial(mesh);
65
+ }
66
+
67
+ private initGeometry(mesh: NavaraPolygonMesh) {
68
+ const g = mesh.outline_geometry;
69
+ if (!g || !g.position) {
70
+ return;
71
+ }
72
+ const position = this.ctx.buf.removeF32(g.position.data);
73
+ if (!position) {
74
+ return;
75
+ }
76
+
77
+ const scale_normal_and_cap = g.scale_normal_and_cap
78
+ ? this.ctx.buf.removeF32(g.scale_normal_and_cap.data)
79
+ : undefined;
80
+
81
+ const skipIdx = g.skip_indices
82
+ ? (this.ctx.buf.removeU32(g.skip_indices) ?? undefined)
83
+ : undefined;
84
+
85
+ const batchIndex = g.batch_index
86
+ ? this.ctx.buf.removeF32(g.batch_index.data)
87
+ : undefined;
88
+
89
+ // Convert position buffer to Line2 format
90
+ const lineGeometry = this.geometry as NvLineGeometry;
91
+ lineGeometry.setPositions(position, skipIdx);
92
+
93
+ // Add scale_normal_and_cap attributes if available
94
+ if (g.scale_normal_and_cap && scale_normal_and_cap) {
95
+ const size = g.scale_normal_and_cap.size;
96
+ this.initScaleNormalCapAttributes(
97
+ scale_normal_and_cap,
98
+ skipIdx,
99
+ size,
100
+ lineGeometry,
101
+ );
102
+ }
103
+
104
+ // Add per-segment batch index attribute for batch texture lookups
105
+ if (batchIndex) {
106
+ const segmentBatchIds: number[] = [];
107
+ const skipSet = new Set(skipIdx ?? []);
108
+ for (let i = 0; i < batchIndex.length - 1; i++) {
109
+ if (skipSet.has(i)) continue;
110
+ segmentBatchIds.push(batchIndex[i]);
111
+ }
112
+ lineGeometry.setAttribute(
113
+ "_batchid",
114
+ new InstancedBufferAttribute(new Float32Array(segmentBatchIds), 1),
115
+ );
116
+ }
117
+ }
118
+
119
+ private initScaleNormalCapAttributes(
120
+ scale_normal_and_cap: Float32Array<ArrayBufferLike>,
121
+ skipIdx: Uint32Array<ArrayBufferLike> | undefined,
122
+ size: number,
123
+ lineGeometry: LineGeometry,
124
+ ) {
125
+ // Create separate arrays for start and end points of line segments
126
+ const scaleDataStart: number[] = [];
127
+ const scaleDataEnd: number[] = [];
128
+ const skipSet = new Set(skipIdx ?? []);
129
+
130
+ for (let i = 0; i < scale_normal_and_cap.length / size - 1; i++) {
131
+ if (skipSet.has(i)) {
132
+ continue;
133
+ }
134
+
135
+ // For each line segment, add start and end scale normal data
136
+ const startIdx = i * size;
137
+ const endIdx = (i + 1) * size;
138
+
139
+ // Start point data
140
+ for (let j = 0; j < size; j++) {
141
+ scaleDataStart.push(scale_normal_and_cap[startIdx + j]);
142
+ }
143
+
144
+ // End point data
145
+ for (let j = 0; j < size; j++) {
146
+ scaleDataEnd.push(scale_normal_and_cap[endIdx + j]);
147
+ }
148
+ }
149
+
150
+ lineGeometry.setAttribute(
151
+ "scaleNormalAndCapStart",
152
+ new InstancedBufferAttribute(new Float32Array(scaleDataStart), size),
153
+ );
154
+ lineGeometry.setAttribute(
155
+ "scaleNormalAndCapEnd",
156
+ new InstancedBufferAttribute(new Float32Array(scaleDataEnd), size),
157
+ );
158
+ }
159
+
160
+ private initMaterial(mesh: NavaraPolygonMesh) {
161
+ const meshMaterial = mesh.material;
162
+ const material = this.material;
163
+
164
+ // Set basic material properties
165
+ material.color.set(meshMaterial.outlineColor ?? 0xffffff);
166
+ material.linewidth = meshMaterial.outlineWidth ?? 1;
167
+
168
+ const resizeHandler = (w: number, h: number) => {
169
+ material.resolution.set(w, h);
170
+ };
171
+
172
+ this.ctx.viewEvents.on("resize", resizeHandler);
173
+ this.resizeEventUnsubscribe = () =>
174
+ this.ctx.viewEvents.off("resize", resizeHandler);
175
+
176
+ // Set up height adjustment uniforms
177
+ const uMinMaxHeights = meshMaterial.__internal__?.minMaxHeights;
178
+ material.userData.uMinMaxHeight = {
179
+ value: uMinMaxHeights,
180
+ };
181
+ material.userData.uAddExtrudedHeight = {
182
+ value: 0.0,
183
+ };
184
+ material.userData.uAddHeight = {
185
+ value: 0.0,
186
+ };
187
+
188
+ // Set up batch texture material defines (row indices, row count).
189
+ // The rows must match PolygonMesh's — the batch data texture is shared.
190
+ initBatchedMaterial(material, {
191
+ rows: POLYGON_BATCH_TEXTURE_ROWS,
192
+ batchLength: 0,
193
+ });
194
+
195
+ material.onBeforeCompile = (shader) => {
196
+ // Merge user-defined defines (batch texture, color/show, height, etc.)
197
+ shader.defines ??= {};
198
+ Object.assign(shader.defines, material.userData.defines || {});
199
+
200
+ shader.uniforms.uMinMaxHeight = material.userData.uMinMaxHeight;
201
+ shader.uniforms.uAddExtrudedHeight = material.userData.uAddExtrudedHeight;
202
+ shader.uniforms.uAddHeight = material.userData.uAddHeight;
203
+
204
+ // Batch texture uniform (shared from parent PolygonMesh)
205
+ if (material.userData.batchDataTexture) {
206
+ shader.uniforms.batchDataTexture = material.userData.batchDataTexture;
207
+ }
208
+
209
+ shader.vertexShader = createReplacer(shader.vertexShader)
210
+ .replace(
211
+ "attribute vec3 instanceEnd;",
212
+ `
213
+ attribute vec3 instanceEnd;
214
+ attribute vec4 scaleNormalAndCapStart;
215
+ attribute vec4 scaleNormalAndCapEnd;
216
+ varying float nvr_vShow;
217
+ uniform vec2 uMinMaxHeight;
218
+ ${ExtrudedHeightParsVertex}
219
+ ${HeightParsVertex}
220
+ ${BranchFreeTernary}
221
+ ${BatchTextureParsVertex}
222
+ `,
223
+ )
224
+ .replace(
225
+ "vec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );",
226
+ `
227
+ ${ExtrudedHeightVertex}
228
+ ${HeightVertex}
229
+
230
+ nvr_vShow = 1.0;
231
+ #ifdef USE_BATCH_TEXTURE
232
+ float batchId = _batchid;
233
+ #ifdef USE_BATCH_COLOR_SHOW
234
+ // Color is ignored.
235
+ vec4 batchColorShow = getBatchColorShow(batchId);
236
+ nvr_vShow = batchColorShow.a;
237
+ #endif
238
+ #ifdef USE_BATCH_EXTRUDED_HEIGHT
239
+ addExtrudedHeight = getBatchExtrudedHeight(batchId);
240
+ #endif
241
+ #ifdef USE_BATCH_HEIGHT
242
+ addHeight = getBatchHeight(batchId);
243
+ #endif
244
+ #endif
245
+
246
+ vec3 adjustedInstanceStart = instanceStart;
247
+ adjustedInstanceStart.xyz += scaleNormalAndCapStart.xyz * nvr_branchFreeTernary(
248
+ scaleNormalAndCapStart.w == 0.0,
249
+ uMinMaxHeight.x + addHeight,
250
+ uMinMaxHeight.y + addExtrudedHeight
251
+ );
252
+ vec4 start = modelViewMatrix * vec4( adjustedInstanceStart, 1.0 );
253
+ `,
254
+ )
255
+ .replace(
256
+ "vec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );",
257
+ `
258
+ vec3 adjustedInstanceEnd = instanceEnd;
259
+ adjustedInstanceEnd.xyz += scaleNormalAndCapEnd.xyz * nvr_branchFreeTernary(
260
+ scaleNormalAndCapEnd.w == 0.0,
261
+ uMinMaxHeight.x + addHeight,
262
+ uMinMaxHeight.y + addExtrudedHeight
263
+ );
264
+ vec4 end = modelViewMatrix * vec4( adjustedInstanceEnd, 1.0 );
265
+ `,
266
+ ).source;
267
+
268
+ shader.fragmentShader = createReplacer(shader.fragmentShader).replace(
269
+ "void main() {",
270
+ `
271
+ varying float nvr_vShow;
272
+ varying float nvr_vHasBatchColor;
273
+ void main() {
274
+ if (nvr_vShow < 0.5) discard;
275
+ `,
276
+ ).source;
277
+ };
278
+
279
+ // Apply MRT compatibility
280
+ setupMaterialForMRT(material);
281
+
282
+ // Update based on initial state
283
+ this._update(meshMaterial, mesh.active);
284
+ }
285
+
286
+ _update(material: PolygonMaterial, active: boolean) {
287
+ if (!this.userData.prev) {
288
+ this.userData.prev = {};
289
+ }
290
+ const prev = this.userData.prev;
291
+ const lineMaterial = this.material;
292
+
293
+ // Update color
294
+ if (prev.color !== material.outlineColor) {
295
+ const nextColor = material.outlineColor ?? 0xffffff;
296
+ lineMaterial.color.set(nextColor);
297
+ prev.color = nextColor;
298
+ }
299
+
300
+ // Update visibility
301
+ const nextVisible =
302
+ (material.show ?? true) && (material.outlineShow ?? true) && active;
303
+ if (prev.visible !== nextVisible) {
304
+ this.visible = nextVisible;
305
+ prev.visible = nextVisible;
306
+ }
307
+
308
+ // Update line width
309
+ if (prev.width !== material.outlineWidth) {
310
+ const nextWidth = material.outlineWidth ?? 1;
311
+ lineMaterial.linewidth = nextWidth;
312
+ prev.width = nextWidth;
313
+ }
314
+
315
+ // Update height values for shader-based adjustment
316
+ const [min, max] = material.__internal__?.minMaxHeights ?? [];
317
+ if (prev.min !== min || prev.max !== max) {
318
+ lineMaterial.userData.uMinMaxHeight.value = [min, max];
319
+ prev.min = min;
320
+ prev.max = max;
321
+ }
322
+ }
323
+
324
+ _setFeatureColor(color: Color) {
325
+ this.material.color.set(color);
326
+ }
327
+
328
+ _getFeatureColor() {
329
+ return this.material.color;
330
+ }
331
+
332
+ _setFeatureShow(visible: boolean): void {
333
+ this.visible = visible;
334
+ }
335
+
336
+ _setFrustumCulled(culled: boolean): void {
337
+ this.frustumCulled = culled;
338
+ }
339
+
340
+ _setFeatureExtrudedHeight(height: number): void {
341
+ this.material.userData.uAddExtrudedHeight.value = height;
342
+ }
343
+
344
+ _setFeatureHeight(height: number): void {
345
+ this.material.userData.uAddHeight.value = height;
346
+ }
347
+
348
+ _setFeatureWidth(_width: number): void {
349
+ // Width is not applicable to polygon outlines.
350
+ // This method is intentionally a no-op to satisfy the FeatureMesh interface.
351
+ }
352
+
353
+ _setFeatureOpacity(_opacity: number): void {
354
+ // Opacity adjustment is not applicable to polygon outlines.
355
+ // This method is intentionally a no-op to satisfy the FeatureMesh interface.
356
+ }
357
+
358
+ // Utility method to update resolution (should be called when renderer size changes)
359
+ updateResolution(width: number, height: number): void {
360
+ this.material.resolution.set(width, height);
361
+ }
362
+
363
+ initBatchTexture(texture: DataTexture) {
364
+ this.material.userData.batchDataTexture = { value: texture };
365
+ this.material.userData.defines ??= {};
366
+ this.material.userData.defines.USE_BATCH_TEXTURE = true;
367
+ this.material.needsUpdate = true;
368
+ }
369
+
370
+ enableBatchColorShow() {
371
+ this.material.userData.defines ??= {};
372
+ this.material.userData.defines.USE_BATCH_COLOR_SHOW = true;
373
+ this.material.needsUpdate = true;
374
+ }
375
+
376
+ enableBatchHeight() {
377
+ this.material.userData.defines ??= {};
378
+ this.material.userData.defines.USE_BATCH_HEIGHT = true;
379
+ this.material.needsUpdate = true;
380
+ }
381
+
382
+ enableBatchExtrudedHeight() {
383
+ this.material.userData.defines ??= {};
384
+ this.material.userData.defines.USE_BATCH_EXTRUDED_HEIGHT = true;
385
+ this.material.needsUpdate = true;
386
+ }
387
+
388
+ // Clean up event listeners when the object is destroyed
389
+ dispose(): void {
390
+ this.resizeEventUnsubscribe?.();
391
+ this.resizeEventUnsubscribe = undefined;
392
+ }
393
+ }