@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.
- package/LICENSE +8 -0
- package/dist/assets/atmosphere/README.md +1 -0
- package/dist/assets/atmosphere/higher_order_scattering.bin +0 -0
- package/dist/assets/atmosphere/higher_order_scattering.exr +0 -0
- package/dist/assets/atmosphere/irradiance.bin +0 -0
- package/dist/assets/atmosphere/irradiance.exr +0 -0
- package/dist/assets/atmosphere/scattering.bin +0 -0
- package/dist/assets/atmosphere/scattering.exr +0 -0
- package/dist/assets/atmosphere/single_mie_scattering.bin +0 -0
- package/dist/assets/atmosphere/single_mie_scattering.exr +0 -0
- package/dist/assets/atmosphere/stars.bin +0 -0
- package/dist/assets/atmosphere/transmittance.bin +0 -0
- package/dist/assets/atmosphere/transmittance.exr +0 -0
- package/dist/assets/cloud/README.md +1 -0
- package/dist/assets/cloud/local_weather.png +0 -0
- package/dist/assets/cloud/shape.bin +1 -0
- package/dist/assets/cloud/shape_detail.bin +1 -0
- package/dist/assets/cloud/turbulence.png +0 -0
- package/dist/assets/fontWorker-CEJEfRpb.js +2 -0
- package/dist/assets/fontWorker-CEJEfRpb.js.map +1 -0
- package/dist/assets/index-BUB-ijMO.js +12 -0
- package/dist/assets/index-BUB-ijMO.js.map +1 -0
- package/dist/assets/navara_wasm_font_worker_bg-665OLxjy.wasm +0 -0
- package/dist/assets/navara_wasm_worker_bg-BXhKC5bE.wasm +0 -0
- package/dist/assets/noise/README.md +1 -0
- package/dist/assets/noise/stbn.bin +0 -0
- package/dist/assets/water/README.md +3 -0
- package/dist/assets/water/waternormals.jpg +0 -0
- package/dist/index.d.ts +10114 -0
- package/dist/index.js +34481 -0
- package/dist/index.js.map +1 -0
- package/dist/index.umd.cjs +6345 -0
- package/dist/index.umd.cjs.map +1 -0
- package/package.json +95 -0
- package/src/Color.ts +111 -0
- package/src/ShadowMapViewers.ts +49 -0
- package/src/atmosphere.test.ts +76 -0
- package/src/atmosphere.ts +364 -0
- package/src/bufferView.ts +90 -0
- package/src/camera.ts +182 -0
- package/src/concurrency.ts +15 -0
- package/src/constants/assets.ts +30 -0
- package/src/constants/decoder.ts +7 -0
- package/src/constants/index.ts +2 -0
- package/src/core/BaseDesc.ts +142 -0
- package/src/core/BaseHandle.ts +126 -0
- package/src/core/DescRegistry.ts +88 -0
- package/src/core/EffectDesc.ts +343 -0
- package/src/core/EffectDescRegistry.ts +31 -0
- package/src/core/InstancedMeshDesc.ts +413 -0
- package/src/core/LightDesc.ts +216 -0
- package/src/core/LightDescRegistry.ts +32 -0
- package/src/core/MeshDesc.ts +457 -0
- package/src/core/MeshDescRegistry.ts +32 -0
- package/src/core/MeshDescWithSelectiveEffect.ts +129 -0
- package/src/core/Registries.ts +59 -0
- package/src/core/SelectiveEffectRegistry.ts +90 -0
- package/src/core/ViewContext.ts +235 -0
- package/src/core/errors.ts +16 -0
- package/src/core/index.ts +50 -0
- package/src/device.ts +414 -0
- package/src/effects/CustomEffectPass.ts +28 -0
- package/src/effects/copy.ts +10 -0
- package/src/effects/effect.ts +87 -0
- package/src/effects/index.ts +4 -0
- package/src/effects/render.ts +10 -0
- package/src/evaluations/FeatureEvaluator.ts +529 -0
- package/src/evaluations/index.ts +1 -0
- package/src/event/HillshadeContext.test.ts +232 -0
- package/src/event/HillshadeContext.ts +299 -0
- package/src/event/context.ts +279 -0
- package/src/event/feature.ts +357 -0
- package/src/event/featureEvent.ts +81 -0
- package/src/event/features/billboard.ts +30 -0
- package/src/event/features/model.ts +192 -0
- package/src/event/features/modelGpuBytes.test.ts +69 -0
- package/src/event/features/modelGpuBytes.ts +87 -0
- package/src/event/features/point.ts +25 -0
- package/src/event/features/polygon.ts +23 -0
- package/src/event/features/polygonOutline.ts +19 -0
- package/src/event/features/polyline.ts +19 -0
- package/src/event/features/text.ts +71 -0
- package/src/event/hillshade.test.ts +842 -0
- package/src/event/hillshade.ts +588 -0
- package/src/event/index.ts +700 -0
- package/src/event/loaders.ts +53 -0
- package/src/event/tile.ts +19 -0
- package/src/event/worker.ts +999 -0
- package/src/event/workerTaskSettlement.test.ts +243 -0
- package/src/event/workerTaskSettlement.ts +128 -0
- package/src/inMemoryBufferStore.test.ts +60 -0
- package/src/inMemoryBufferStore.ts +67 -0
- package/src/index.iife.ts +11 -0
- package/src/index.ts +2556 -0
- package/src/input.ts +144 -0
- package/src/layer.ts +183 -0
- package/src/layers/effect/FinalCopyEffectDesc.ts +29 -0
- package/src/layers/effect/MRTPassEffectDesc.ts +105 -0
- package/src/layers/effect/README.md +9 -0
- package/src/layers/effect/SelectiveEffectDesc.ts +113 -0
- package/src/layers/effect/SkyEnvMapEffectDesc.ts +58 -0
- package/src/layers/effect/TransparentPassEffectDesc.ts +62 -0
- package/src/layers/effect/index.ts +5 -0
- package/src/layers/index.ts +1 -0
- package/src/layersManager.ts +63 -0
- package/src/light.ts +15 -0
- package/src/loaders/AbortableImageLoader.ts +203 -0
- package/src/loaders/AbortableTextureLoader.ts +74 -0
- package/src/loaders/index.ts +5 -0
- package/src/material/enhancer/DESIGN.md +300 -0
- package/src/material/enhancer/MaterialEnhancer.ts +112 -0
- package/src/material/enhancer/ShaderReplacer.test.ts +114 -0
- package/src/material/enhancer/ShaderReplacer.ts +97 -0
- package/src/material/enhancer/batchTexture.ts +8 -0
- package/src/material/enhancer/index.ts +46 -0
- package/src/material/enhancer/instancedSprite/index.ts +7 -0
- package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/index.test.ts +214 -0
- package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/index.ts +134 -0
- package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/markers.ts +21 -0
- package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/material.ts +32 -0
- package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/mutates.test.ts +277 -0
- package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/mutates.ts +151 -0
- package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/shader.test.ts +114 -0
- package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/shader.ts +49 -0
- package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/state.test.ts +82 -0
- package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/state.ts +80 -0
- package/src/material/enhancer/instancedSprite/instancedSpriteBaseEnhancer/types.ts +146 -0
- package/src/material/enhancer/instancedSprite/instancedSpriteMaterialEnhancer.ts +105 -0
- package/src/material/enhancer/model/index.ts +25 -0
- package/src/material/enhancer/model/modelBaseEnhancer/index.test.ts +74 -0
- package/src/material/enhancer/model/modelBaseEnhancer/index.ts +110 -0
- package/src/material/enhancer/model/modelBaseEnhancer/markers.ts +27 -0
- package/src/material/enhancer/model/modelBaseEnhancer/material.test.ts +66 -0
- package/src/material/enhancer/model/modelBaseEnhancer/material.ts +44 -0
- package/src/material/enhancer/model/modelBaseEnhancer/mutates.test.ts +84 -0
- package/src/material/enhancer/model/modelBaseEnhancer/mutates.ts +47 -0
- package/src/material/enhancer/model/modelBaseEnhancer/shader.test.ts +24 -0
- package/src/material/enhancer/model/modelBaseEnhancer/shader.ts +162 -0
- package/src/material/enhancer/model/modelBaseEnhancer/state.test.ts +103 -0
- package/src/material/enhancer/model/modelBaseEnhancer/state.ts +52 -0
- package/src/material/enhancer/model/modelBaseEnhancer/types.ts +89 -0
- package/src/material/enhancer/model/modelMaterialEnhancer.ts +91 -0
- package/src/material/enhancer/model/modelWaterEnhancer/index.test.ts +71 -0
- package/src/material/enhancer/model/modelWaterEnhancer/index.ts +175 -0
- package/src/material/enhancer/model/modelWaterEnhancer/material.test.ts +48 -0
- package/src/material/enhancer/model/modelWaterEnhancer/material.ts +25 -0
- package/src/material/enhancer/model/modelWaterEnhancer/mutates.test.ts +89 -0
- package/src/material/enhancer/model/modelWaterEnhancer/mutates.ts +89 -0
- package/src/material/enhancer/model/modelWaterEnhancer/shader.test.ts +34 -0
- package/src/material/enhancer/model/modelWaterEnhancer/shader.ts +111 -0
- package/src/material/enhancer/model/modelWaterEnhancer/state.test.ts +105 -0
- package/src/material/enhancer/model/modelWaterEnhancer/state.ts +59 -0
- package/src/material/enhancer/model/modelWaterEnhancer/types.ts +141 -0
- package/src/material/enhancer/model/pntsEnhancer/index.test.ts +96 -0
- package/src/material/enhancer/model/pntsEnhancer/index.ts +82 -0
- package/src/material/enhancer/model/pntsEnhancer/markers.ts +6 -0
- package/src/material/enhancer/model/pntsEnhancer/material.test.ts +37 -0
- package/src/material/enhancer/model/pntsEnhancer/material.ts +21 -0
- package/src/material/enhancer/model/pntsEnhancer/mutates.test.ts +80 -0
- package/src/material/enhancer/model/pntsEnhancer/mutates.ts +29 -0
- package/src/material/enhancer/model/pntsEnhancer/shader.test.ts +32 -0
- package/src/material/enhancer/model/pntsEnhancer/shader.ts +56 -0
- package/src/material/enhancer/model/pntsEnhancer/state.test.ts +87 -0
- package/src/material/enhancer/model/pntsEnhancer/state.ts +29 -0
- package/src/material/enhancer/model/pntsEnhancer/types.ts +38 -0
- package/src/material/enhancer/polygon/index.ts +22 -0
- package/src/material/enhancer/polygon/polygonBaseEnhancer/index.test.ts +101 -0
- package/src/material/enhancer/polygon/polygonBaseEnhancer/index.ts +130 -0
- package/src/material/enhancer/polygon/polygonBaseEnhancer/markers.ts +23 -0
- package/src/material/enhancer/polygon/polygonBaseEnhancer/material.test.ts +19 -0
- package/src/material/enhancer/polygon/polygonBaseEnhancer/material.ts +38 -0
- package/src/material/enhancer/polygon/polygonBaseEnhancer/mutates.test.ts +75 -0
- package/src/material/enhancer/polygon/polygonBaseEnhancer/mutates.ts +122 -0
- package/src/material/enhancer/polygon/polygonBaseEnhancer/shader.test.ts +25 -0
- package/src/material/enhancer/polygon/polygonBaseEnhancer/shader.ts +249 -0
- package/src/material/enhancer/polygon/polygonBaseEnhancer/state.test.ts +102 -0
- package/src/material/enhancer/polygon/polygonBaseEnhancer/state.ts +92 -0
- package/src/material/enhancer/polygon/polygonBaseEnhancer/types.ts +150 -0
- package/src/material/enhancer/polygon/polygonMaterialEnhancer.ts +97 -0
- package/src/material/enhancer/polygon/polygonWaterEnhancer/index.test.ts +72 -0
- package/src/material/enhancer/polygon/polygonWaterEnhancer/index.ts +164 -0
- package/src/material/enhancer/polygon/polygonWaterEnhancer/material.test.ts +48 -0
- package/src/material/enhancer/polygon/polygonWaterEnhancer/material.ts +35 -0
- package/src/material/enhancer/polygon/polygonWaterEnhancer/mutates.ts +61 -0
- package/src/material/enhancer/polygon/polygonWaterEnhancer/shader.test.ts +34 -0
- package/src/material/enhancer/polygon/polygonWaterEnhancer/shader.ts +96 -0
- package/src/material/enhancer/polygon/polygonWaterEnhancer/state.test.ts +98 -0
- package/src/material/enhancer/polygon/polygonWaterEnhancer/state.ts +57 -0
- package/src/material/enhancer/polygon/polygonWaterEnhancer/types.ts +115 -0
- package/src/material/enhancer/polyline/index.ts +7 -0
- package/src/material/enhancer/polyline/polylineBaseEnhancer/index.test.ts +157 -0
- package/src/material/enhancer/polyline/polylineBaseEnhancer/index.ts +154 -0
- package/src/material/enhancer/polyline/polylineBaseEnhancer/markers.ts +19 -0
- package/src/material/enhancer/polyline/polylineBaseEnhancer/material.test.ts +42 -0
- package/src/material/enhancer/polyline/polylineBaseEnhancer/material.ts +38 -0
- package/src/material/enhancer/polyline/polylineBaseEnhancer/mutates.test.ts +120 -0
- package/src/material/enhancer/polyline/polylineBaseEnhancer/mutates.ts +169 -0
- package/src/material/enhancer/polyline/polylineBaseEnhancer/shader.test.ts +67 -0
- package/src/material/enhancer/polyline/polylineBaseEnhancer/shader.ts +75 -0
- package/src/material/enhancer/polyline/polylineBaseEnhancer/state.test.ts +55 -0
- package/src/material/enhancer/polyline/polylineBaseEnhancer/state.ts +91 -0
- package/src/material/enhancer/polyline/polylineBaseEnhancer/types.ts +170 -0
- package/src/material/enhancer/polyline/polylineMaterialEnhancer.ts +102 -0
- package/src/material/enhancer/sdfText/index.ts +7 -0
- package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/index.ts +125 -0
- package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/markers.ts +19 -0
- package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/material.test.ts +35 -0
- package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/material.ts +32 -0
- package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/mutates.test.ts +381 -0
- package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/mutates.ts +232 -0
- package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/shader.ts +36 -0
- package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/state.test.ts +118 -0
- package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/state.ts +107 -0
- package/src/material/enhancer/sdfText/sdfTextBaseEnhancer/types.ts +184 -0
- package/src/material/enhancer/sdfText/sdfTextMaterialEnhancer.ts +100 -0
- package/src/material/enhancer/shadowMap/index.ts +7 -0
- package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/index.ts +97 -0
- package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/markers.ts +10 -0
- package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/material.ts +31 -0
- package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/mutates.ts +8 -0
- package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/shader.test.ts +17 -0
- package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/shader.ts +53 -0
- package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/state.ts +17 -0
- package/src/material/enhancer/shadowMap/shadowMapDepthEnhancer/types.ts +26 -0
- package/src/material/enhancer/test-utils/shaderCompatibility.ts +124 -0
- package/src/material/enhancer/tileComposite/compose.test.ts +95 -0
- package/src/material/enhancer/tileComposite/compose.ts +112 -0
- package/src/material/enhancer/tileComposite/index.ts +23 -0
- package/src/material/enhancer/tileComposite/tileCompositeBaseEnhancer/index.ts +11 -0
- package/src/material/enhancer/tileComposite/tileCompositeBaseEnhancer/mutates.ts +132 -0
- package/src/material/enhancer/tileComposite/tileCompositeBaseEnhancer/shader.ts +245 -0
- package/src/material/enhancer/tileComposite/tileCompositeBaseEnhancer/types.ts +43 -0
- package/src/material/enhancer/tileComposite/tileElevationHeatmapEnhancer/index.ts +29 -0
- package/src/material/enhancer/tileComposite/tileElevationHeatmapEnhancer/mutates.ts +68 -0
- package/src/material/enhancer/tileComposite/tileElevationHeatmapEnhancer/shader.ts +24 -0
- package/src/material/enhancer/tileComposite/tileHillshadeEnhancer/index.ts +29 -0
- package/src/material/enhancer/tileComposite/tileHillshadeEnhancer/mutates.ts +34 -0
- package/src/material/enhancer/tileComposite/tileHillshadeEnhancer/shader.ts +36 -0
- package/src/material/enhancer/tileComposite/tileWaterEnhancer/index.ts +23 -0
- package/src/material/enhancer/tileComposite/tileWaterEnhancer/mutates.ts +23 -0
- package/src/material/enhancer/tileComposite/tileWaterEnhancer/shader.ts +8 -0
- package/src/material/enhancer/tileComposite/tileWatermaskEnhancer/index.ts +23 -0
- package/src/material/enhancer/tileComposite/tileWatermaskEnhancer/mutates.ts +34 -0
- package/src/material/enhancer/tileComposite/tileWatermaskEnhancer/shader.ts +13 -0
- package/src/material/enhancer/tileComposite/types.ts +58 -0
- package/src/material/index.ts +3 -0
- package/src/material/macro/index.ts +1 -0
- package/src/material/macro/tileShader.test.ts +136 -0
- package/src/material/macro/tileShader.ts +287 -0
- package/src/material/overrideMaterialsForMRT.ts +439 -0
- package/src/material/selectiveEffectMaterialSetup.test.ts +52 -0
- package/src/material/selectiveEffectMaterialSetup.ts +53 -0
- package/src/material/types/index.ts +1 -0
- package/src/material/types/uniform.ts +1 -0
- package/src/mesh/DrapedMesh.ts +101 -0
- package/src/mesh/batchTexture.test.ts +646 -0
- package/src/mesh/batchTexture.ts +437 -0
- package/src/mesh/batchedFeature.ts +186 -0
- package/src/mesh/batchedSdfText.ts +484 -0
- package/src/mesh/featureMesh.ts +43 -0
- package/src/mesh/index.ts +16 -0
- package/src/mesh/instanced.ts +117 -0
- package/src/mesh/model.ts +483 -0
- package/src/mesh/pickableMesh.ts +55 -0
- package/src/mesh/pickableMeshWrapper.ts +529 -0
- package/src/mesh/polygon.ts +699 -0
- package/src/mesh/polygonOutline.ts +393 -0
- package/src/mesh/polyline.ts +523 -0
- package/src/mesh/releaseGeometryArrays.ts +57 -0
- package/src/mesh/rtcRteHelper.ts +211 -0
- package/src/mesh/sdfText.test.ts +200 -0
- package/src/mesh/sdfText.ts +1019 -0
- package/src/mesh/sprite/billboardAtlas.test.ts +177 -0
- package/src/mesh/sprite/billboardAtlas.ts +210 -0
- package/src/mesh/sprite/billboardAtlasImageLoader.ts +29 -0
- package/src/mesh/sprite/index.ts +1 -0
- package/src/mesh/sprite/instancedSprite.ts +694 -0
- package/src/mesh/tile.test.ts +393 -0
- package/src/mesh/tile.ts +1790 -0
- package/src/object3DEvent.ts +6 -0
- package/src/orchestrators/RenderPassOrchestrator.ts +147 -0
- package/src/orchestrators/index.ts +1 -0
- package/src/passes/AllDepthCopyPass.ts +165 -0
- package/src/passes/CustomRenderPass.ts +279 -0
- package/src/passes/NormalCopyPass.ts +125 -0
- package/src/passes/RenderTargetCopyPass.ts +91 -0
- package/src/passes/SkyEnvMapPass.ts +58 -0
- package/src/passes/index.ts +5 -0
- package/src/pick/pickHelper.ts +273 -0
- package/src/pick/pickTerrain.ts +254 -0
- package/src/plugins/AttributionPlugin/AttributionPlugin.test.ts +210 -0
- package/src/plugins/AttributionPlugin/attribution.test.ts +225 -0
- package/src/plugins/AttributionPlugin/attribution.ts +355 -0
- package/src/plugins/AttributionPlugin/attributionStyles.ts +163 -0
- package/src/plugins/AttributionPlugin/index.ts +702 -0
- package/src/plugins/index.ts +1 -0
- package/src/quality.ts +1 -0
- package/src/renderOrder.ts +3 -0
- package/src/scene.test.ts +164 -0
- package/src/scene.ts +127 -0
- package/src/shaders/index.ts +1 -0
- package/src/solar.test.ts +81 -0
- package/src/solar.ts +101 -0
- package/src/source.ts +80 -0
- package/src/stats.ts +102 -0
- package/src/tasks/computeVertexNormalsAsync.ts +15 -0
- package/src/tasks/constructPolygonBatchedFeature.ts +34 -0
- package/src/tasks/constructPolylineBatchedFeature.ts +27 -0
- package/src/tasks/constructQuantizedMeshTerrainMesh.ts +24 -0
- package/src/tasks/constructTerrainMesh.ts +25 -0
- package/src/tasks/getImageDataFromBlob.ts +13 -0
- package/src/tasks/getImageDataFromImageBitmap.ts +12 -0
- package/src/tasks/parseMvtTile.ts +22 -0
- package/src/tasks/queueTask.ts +19 -0
- package/src/tasks/toCreasedNormalsAsync.ts +18 -0
- package/src/tasks/upsampleQuantizedMeshTerrainMesh.ts +44 -0
- package/src/tasks/upsampleTerrainMesh.ts +39 -0
- package/src/texture.ts +19 -0
- package/src/textures.ts +13 -0
- package/src/tileTexture/CompositeShader.snapshot.test.ts +59 -0
- package/src/tileTexture/CompositeShader.test.ts +168 -0
- package/src/tileTexture/CompositeShader.ts +53 -0
- package/src/tileTexture/SlotPlanner.test.ts +105 -0
- package/src/tileTexture/SlotPlanner.ts +102 -0
- package/src/tileTexture/TileTextureCache.test.ts +227 -0
- package/src/tileTexture/TileTextureCache.ts +192 -0
- package/src/tileTexture/TileTextureCompositor.test.ts +260 -0
- package/src/tileTexture/TileTextureCompositor.ts +421 -0
- package/src/tileTexture/__snapshots__/CompositeShader.snapshot.test.ts.snap +2649 -0
- package/src/tileTexture/index.ts +8 -0
- package/src/tileTexture/types.ts +150 -0
- package/src/type/index.ts +261 -0
- package/src/uniforms.ts +20 -0
- package/src/utils/arraysEqual.ts +9 -0
- package/src/utils/blendModes.ts +80 -0
- package/src/utils/geometry.ts +53 -0
- package/src/utils/hillshadeNormalMapGenerator.ts +193 -0
- package/src/utils/index.ts +8 -0
- package/src/utils/object.test.ts +14 -0
- package/src/utils/object.ts +7 -0
- package/src/utils/replacer.test.ts +42 -0
- package/src/utils/replacer.ts +89 -0
- package/src/utils/screen.ts +29 -0
- package/src/utils/textureFragmentIndex.test.ts +224 -0
- package/src/utils/textureFragmentIndex.ts +97 -0
- package/src/utils/worker.ts +3 -0
- package/src/vite-env.d.ts +2 -0
- package/src/worker/index.ts +13 -0
- package/src/worker/tasks/computeVertexNormals.ts +15 -0
- 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
|
+
}
|