@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,343 @@
1
+ import {
2
+ Pass as PostProcessingPass,
3
+ Effect as PostProcessingEffect,
4
+ } from "postprocessing";
5
+ import invariant from "tiny-invariant";
6
+
7
+ import { Pass } from "../effects";
8
+ import type ThreeView from "../index";
9
+
10
+ import {
11
+ BaseDesc,
12
+ type BaseInstance,
13
+ type BaseDescConfig,
14
+ type BaseDescConfigUpdate,
15
+ } from "./BaseDesc";
16
+ import type { ViewContext } from "./ViewContext";
17
+
18
+ type EffectInstance =
19
+ | PostProcessingPass
20
+ | Pass<PostProcessingPass, PostProcessingEffect>;
21
+
22
+ export type EffectConfig = {
23
+ type?: "effect";
24
+ } & BaseDescConfig;
25
+
26
+ export type EffectUpdate = BaseDescConfigUpdate;
27
+
28
+ export type EffectBaseInstance<Instance extends object = object> =
29
+ Instance extends EffectInstance
30
+ ? Instance & BaseInstance
31
+ : Instance extends {
32
+ raw: infer Raw extends PostProcessingPass;
33
+ }
34
+ ? Instance & { raw: Raw } & BaseInstance
35
+ : BaseInstance;
36
+
37
+ /**
38
+ * Abstract base class for creating custom post-processing effect descriptors.
39
+ *
40
+ * Extend this class to integrate custom effects from the `postprocessing` library into
41
+ * Navara's render pipeline. The base class handles pass insertion, ordering, and lifecycle.
42
+ *
43
+ * ## Implementing a Custom Effect Descriptor
44
+ *
45
+ * ### 1. (Optional) Create an Effect wrapper class
46
+ *
47
+ * If your effect has configurable parameters, wrap the `postprocessing` effect in a
48
+ * Navara {@link Effect} class with typed options and reactive setters:
49
+ *
50
+ * ```typescript
51
+ * import { Effect } from "@navaramap/three";
52
+ * import { VignetteEffect } from "postprocessing";
53
+ *
54
+ * type VignetteOptions = {
55
+ * offset?: number;
56
+ * darkness?: number;
57
+ * };
58
+ *
59
+ * class Vignette extends Effect<VignetteEffect, VignetteOptions> {
60
+ * constructor(camera: Camera, options?: VignetteOptions) {
61
+ * super(camera, new VignetteEffect({ ... }), options);
62
+ * }
63
+ *
64
+ * protected onMounted(): void {
65
+ * this.offset = this.options.offset ?? 0.5;
66
+ * }
67
+ *
68
+ * get offset(): number { return this.options.offset ?? 0.5; }
69
+ * set offset(v: number) {
70
+ * this.options.offset = v;
71
+ * if (this.rawEffect) this.rawEffect.offset = v;
72
+ * this.emit("needsUpdate");
73
+ * }
74
+ * }
75
+ * ```
76
+ *
77
+ * ### 2. Define configuration types
78
+ *
79
+ * Create a description type for your effect-specific options, then merge it with
80
+ * the base config and update types:
81
+ *
82
+ * ```typescript
83
+ * type VignetteDescription = {
84
+ * vignette?: { offset?: number; darkness?: number };
85
+ * };
86
+ *
87
+ * type VignetteEffectConfig = EffectConfig & VignetteDescription;
88
+ * type VignetteEffectUpdate = EffectUpdate & VignetteDescription;
89
+ * ```
90
+ *
91
+ * ### 3. Extend `EffectDesc`
92
+ *
93
+ * Implement the {@link createPass} factory method and configure the static properties
94
+ * for pipeline ordering:
95
+ *
96
+ * ```typescript
97
+ * class VignetteEffectDesc extends EffectDesc<
98
+ * VignetteEffectConfig,
99
+ * VignetteEffectUpdate,
100
+ * Vignette
101
+ * > {
102
+ * // Unique key identifying this effect type in the render pipeline.
103
+ * static key = "vignette";
104
+ *
105
+ * // Insert this effect before these passes (tries each in order).
106
+ * static insertBefore = ["smaa", "fxaa", "final"];
107
+ *
108
+ * // Set to true if multiple instances of this effect are allowed.
109
+ * static allowDuplication = true;
110
+ *
111
+ * private config: VignetteEffectConfig;
112
+ *
113
+ * constructor(view: ThreeView, ctx: ViewContext, config: VignetteEffectConfig) {
114
+ * super(view, ctx, config);
115
+ * this.config = config;
116
+ * }
117
+ *
118
+ * createPass() {
119
+ * return new Vignette(this.view.camera.raw, this.config.vignette);
120
+ * }
121
+ *
122
+ * onUpdateConfig(updates: VignetteEffectUpdate): void {
123
+ * super.onUpdateConfig(updates);
124
+ * if (updates.vignette && this._instance) {
125
+ * if (updates.vignette.offset !== undefined) {
126
+ * this._instance.offset = updates.vignette.offset;
127
+ * }
128
+ * }
129
+ * }
130
+ * }
131
+ * ```
132
+ *
133
+ * ### 4. Register and use the descriptor
134
+ *
135
+ * ```typescript
136
+ * view.registerEffect("vignette", VignetteEffectDesc);
137
+ *
138
+ * const handle = view.addEffect<VignetteEffectDesc>({
139
+ * vignette: { offset: 0.5, darkness: 0.5 },
140
+ * visible: true,
141
+ * });
142
+ *
143
+ * // Update dynamically
144
+ * handle.update({ vignette: { offset: 0.7 } });
145
+ *
146
+ * // Remove the descriptor
147
+ * handle.delete();
148
+ * ```
149
+ *
150
+ * ## Static Properties for Pipeline Ordering
151
+ *
152
+ * - {@link key} - **(Required)** Unique string identifier for this effect type.
153
+ * - {@link insertAfter} - Array of effect keys. The pass is inserted after the first
154
+ * matching key found in the pipeline.
155
+ * - {@link insertBefore} - Array of effect keys. Used as fallback if no `insertAfter`
156
+ * target is found; inserts before the first matching key.
157
+ * - {@link allowDuplication} - Set to `true` to allow multiple instances of this effect.
158
+ * Each instance gets a unique internal ID.
159
+ *
160
+ * If neither `insertAfter` nor `insertBefore` matches an existing pass, the effect is
161
+ * appended to the end of the pipeline.
162
+ *
163
+ * ## Lifecycle
164
+ *
165
+ * 1. **Construction** - The descriptor is instantiated with the view context and config.
166
+ * 2. **{@link createPass}** - Called during {@link onCreate} to create the post-processing pass.
167
+ * The base class inserts it into the render pipeline based on the static ordering properties.
168
+ * 3. **{@link onUpdateConfig}** - Called when `handle.update()` is invoked. The base class
169
+ * handles `visible`; override to handle your custom properties.
170
+ * 4. **{@link update}** - Optional per-frame callback for animating effect parameters.
171
+ * 5. **{@link onDestroy}** - Called on `handle.delete()`. The base class removes the pass
172
+ * from the render pipeline.
173
+ *
174
+ * @see The `custom-effect` example page for a complete custom effect descriptor tutorial
175
+ * implementing a vignette effect.
176
+ *
177
+ * @typeParam Config - Configuration type (extends {@link EffectConfig})
178
+ * @typeParam UpdateConfig - Updatable properties (extends {@link EffectUpdate})
179
+ * @typeParam InstanceObj - The postprocessing Pass type or a wrapper with a `raw` property
180
+ * @typeParam Instance - Resolved instance type (inferred automatically)
181
+ */
182
+ export abstract class EffectDesc<
183
+ Config extends EffectConfig = EffectConfig,
184
+ UpdateConfig extends EffectUpdate = EffectUpdate,
185
+ InstanceObj extends EffectInstance | { raw: EffectInstance } =
186
+ | EffectInstance
187
+ | { raw: EffectInstance },
188
+ Instance extends EffectBaseInstance<InstanceObj> =
189
+ EffectBaseInstance<InstanceObj>,
190
+ > extends BaseDesc<Config, UpdateConfig, Instance> {
191
+ /** Unique identifier for this effect type in the render pipeline. Must be defined by subclasses. */
192
+ static key: string;
193
+ /** Insert this pass after the first matching key found in the pipeline. */
194
+ static insertAfter?: string[];
195
+ /** Insert this pass before the first matching key found (fallback if no `insertAfter` match). */
196
+ static insertBefore?: string[];
197
+ /** Set to `true` to allow multiple instances of this effect in the pipeline. */
198
+ static allowDuplication?: boolean;
199
+
200
+ private instanceId: string;
201
+
202
+ constructor(
203
+ view: ThreeView,
204
+ ctx: ViewContext,
205
+ config: Config = {} as Config,
206
+ ) {
207
+ super(view, ctx, config);
208
+ // Generate unique instance ID for layers that allow duplication
209
+ this.instanceId = this.getConstructor().allowDuplication
210
+ ? `${this.getKey()}_${Math.random().toString(36).slice(2, 9)}`
211
+ : this.getKey();
212
+ }
213
+
214
+ /**
215
+ * Factory method to create the post-processing pass instance.
216
+ *
217
+ * Override this to return your custom effect. The returned object can be either:
218
+ * - A `postprocessing` `Pass` directly
219
+ * - A Navara {@link Pass} wrapper (extends `postprocessing` Pass with typed options)
220
+ * - A wrapper object with a `raw` property containing the pass
221
+ *
222
+ * The base class calls this during {@link onCreate} and automatically inserts
223
+ * the pass into the render pipeline.
224
+ */
225
+ abstract createPass(): Instance;
226
+
227
+ get raw() {
228
+ if (!this._instance) return;
229
+
230
+ if (
231
+ this._instance instanceof PostProcessingPass ||
232
+ this._instance instanceof Pass
233
+ ) {
234
+ return this._instance as Instance extends EffectInstance
235
+ ? Instance
236
+ : never;
237
+ }
238
+
239
+ if ("raw" in this._instance) {
240
+ return this._instance.raw as Instance;
241
+ }
242
+ }
243
+
244
+ getConstructor() {
245
+ return this.constructor as typeof EffectDesc;
246
+ }
247
+
248
+ getKey(): string {
249
+ return this.getConstructor().key;
250
+ }
251
+
252
+ getInsertAfter() {
253
+ return this.getConstructor().insertAfter;
254
+ }
255
+
256
+ getInsertBefore() {
257
+ return this.getConstructor().insertBefore;
258
+ }
259
+
260
+ onCreate() {
261
+ this._instance = this.createPass();
262
+
263
+ if (this._instance) {
264
+ this._instance.visible = this.visible;
265
+ }
266
+
267
+ // Insert the pass with proper ordering
268
+ if (this.raw) {
269
+ this.insertPass();
270
+ }
271
+ }
272
+
273
+ private insertPass(): void {
274
+ if (!this.raw) return;
275
+
276
+ // Use instanceId for pass registration to allow duplicates
277
+ const key = this.instanceId;
278
+ const insertAfter = this.getInsertAfter() || [];
279
+ const insertBefore = this.getInsertBefore() || [];
280
+
281
+ const raw = this.raw;
282
+ const c =
283
+ raw instanceof Pass
284
+ ? raw.rawPass
285
+ : raw instanceof PostProcessingPass
286
+ ? raw
287
+ : undefined;
288
+ invariant(c);
289
+
290
+ // Try insertAfter first
291
+ for (const target of insertAfter) {
292
+ if (this.ctx.getPass(target)) {
293
+ this.ctx.insertPassAfter(target, key, c);
294
+ return;
295
+ }
296
+ }
297
+
298
+ // Try insertBefore if no insertAfter worked
299
+ for (const target of insertBefore) {
300
+ if (this.ctx.getPass(target)) {
301
+ this.ctx.insertPassBefore(target, key, c);
302
+ return;
303
+ }
304
+ }
305
+
306
+ // Default: add to end
307
+ this.ctx.addPass(key, c);
308
+ }
309
+
310
+ onUpdateConfig(updates: UpdateConfig): void {
311
+ super.onUpdateConfig(updates);
312
+ }
313
+
314
+ onDestroy(): void {
315
+ // Remove from orchestrator using the instance ID
316
+ this.ctx.removePass(this.instanceId);
317
+
318
+ this._instance = undefined;
319
+ }
320
+
321
+ /**
322
+ * Optional per-frame update callback.
323
+ * Override this to animate effect parameters over time.
324
+ * @param time - Render-loop timestamp in milliseconds (same as the `requestAnimationFrame` time).
325
+ */
326
+ update?(time: number): void;
327
+
328
+ /**
329
+ * Finds another effect descriptor in the pipeline by its static `key`.
330
+ * Useful for cross-effect communication (e.g. reading another effect's state).
331
+ * @param key - The static `key` of the effect descriptor to find.
332
+ * @returns The effect descriptor instance, or `undefined` if not found.
333
+ */
334
+ find<T extends EffectDesc = EffectDesc>(key: string) {
335
+ for (const handle of this.ctx._getEffects()) {
336
+ const desc = handle.ref;
337
+ if (desc.getKey() !== key) {
338
+ continue;
339
+ }
340
+ return desc as T;
341
+ }
342
+ }
343
+ }
@@ -0,0 +1,31 @@
1
+ import type ThreeView from "../index";
2
+
3
+ import { DescRegistry } from "./DescRegistry";
4
+ import { EffectDesc, type EffectConfig } from "./EffectDesc";
5
+ import type { ViewContext } from "./ViewContext";
6
+
7
+ export type EffectDescConstructor = new (
8
+ view: ThreeView,
9
+ ctx: ViewContext,
10
+ config: EffectConfig,
11
+ ) => EffectDesc;
12
+
13
+ export class EffectDescRegistry extends DescRegistry<
14
+ EffectDescConstructor,
15
+ EffectDesc
16
+ > {
17
+ create(effectType: string, config: EffectConfig): EffectDesc {
18
+ const EffectClass = this.getConstructor(effectType);
19
+ if (!EffectClass) {
20
+ throw new Error(`Unknown effect type: ${effectType}`);
21
+ }
22
+ return new EffectClass(this.view, this.ctx, config);
23
+ }
24
+
25
+ /**
26
+ * Find mesh type from config (alias for findTypeFromConfig for backward compatibility)
27
+ */
28
+ findEffectType(config: Record<string, unknown>): string | null {
29
+ return this.findTypeFromConfig(config);
30
+ }
31
+ }