@woosh/meep-engine 3.13.1 → 3.14.1
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/README.md +209 -109
- package/editor/prototypeEditorShell.js +26 -2
- package/package.json +4 -3
- package/src/engine/graphics/ecs/highlight/system/ShadedGeometryHighlightSystem.d.ts +47 -0
- package/src/engine/graphics/ecs/highlight/system/ShadedGeometryHighlightSystem.d.ts.map +1 -0
- package/src/engine/graphics/ecs/highlight/system/ShadedGeometryHighlightSystem.js +109 -0
- package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshHighlightSystem.d.ts +28 -16
- package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshHighlightSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshHighlightSystem.js +111 -92
- package/src/engine/graphics3/FogOfWarSystem.d.ts +1 -1
- package/src/engine/graphics3/FogOfWarSystem.d.ts.map +1 -1
- package/src/engine/graphics3/FogOfWarSystem.js +1 -1
- package/src/engine/graphics3/HighlightOutlineSystem.d.ts +99 -0
- package/src/engine/graphics3/HighlightOutlineSystem.d.ts.map +1 -0
- package/src/engine/graphics3/HighlightOutlineSystem.js +240 -0
- package/src/engine/graphics3/HighlightSystem.d.ts +14 -77
- package/src/engine/graphics3/HighlightSystem.d.ts.map +1 -1
- package/src/engine/graphics3/HighlightSystem.js +19 -233
- package/src/engine/graphics3/HighlightSystem3.d.ts +7 -4
- package/src/engine/graphics3/HighlightSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/HighlightSystem3.js +15 -10
- package/src/engine/graphics3/highlight/pack_highlight_table.d.ts +13 -8
- package/src/engine/graphics3/highlight/pack_highlight_table.d.ts.map +1 -1
- package/src/engine/graphics3/highlight/pack_highlight_table.js +14 -8
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/RENDERER_CONTRACT.md +579 -568
- package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.js +1 -1
- package/src/engine/graphics/ecs/highlight/plugin/HighlightRenderElementSource.d.ts +0 -9
- package/src/engine/graphics/ecs/highlight/plugin/HighlightRenderElementSource.d.ts.map +0 -1
- package/src/engine/graphics/ecs/highlight/plugin/HighlightRenderElementSource.js +0 -12
- package/src/engine/graphics/ecs/highlight/renderer/HighlightRenderElement.d.ts +0 -16
- package/src/engine/graphics/ecs/highlight/renderer/HighlightRenderElement.d.ts.map +0 -1
- package/src/engine/graphics/ecs/highlight/renderer/HighlightRenderElement.js +0 -44
- package/src/engine/graphics/ecs/highlight/renderer/HighlightRenderGroup.d.ts +0 -20
- package/src/engine/graphics/ecs/highlight/renderer/HighlightRenderGroup.d.ts.map +0 -1
- package/src/engine/graphics/ecs/highlight/renderer/HighlightRenderGroup.js +0 -29
- package/src/engine/graphics/ecs/highlight/renderer/makeGaussianBlurShader.d.ts +0 -8
- package/src/engine/graphics/ecs/highlight/renderer/makeGaussianBlurShader.d.ts.map +0 -1
- package/src/engine/graphics/ecs/highlight/renderer/makeGaussianBlurShader.js +0 -58
- package/src/engine/graphics/ecs/highlight/renderer/traverseThreeObject.d.ts +0 -8
- package/src/engine/graphics/ecs/highlight/renderer/traverseThreeObject.d.ts.map +0 -1
- package/src/engine/graphics/ecs/highlight/renderer/traverseThreeObject.js +0 -18
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1.mag.xy.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1.mag.xz.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_0.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_1.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_10.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_11.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_12.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_13.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_14.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_15.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_16.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_17.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_18.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_19.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_2.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_20.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_21.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_22.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_23.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_24.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_25.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_26.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_27.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_28.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_29.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_3.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_30.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_31.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_32.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_33.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_34.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_35.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_36.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_37.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_38.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_39.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_4.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_40.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_41.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_42.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_43.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_44.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_45.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_46.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_47.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_48.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_49.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_5.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_50.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_51.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_52.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_53.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_54.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_55.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_56.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_57.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_58.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_59.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_6.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_60.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_61.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_62.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_63.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_7.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_8.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_scalar_2Dx1Dx1D_128x128x64x1_9.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64.dat +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64.mag.xy.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64.mag.xz.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_0.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_1.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_10.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_11.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_12.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_13.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_14.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_15.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_16.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_17.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_18.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_19.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_2.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_20.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_21.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_22.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_23.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_24.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_25.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_26.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_27.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_28.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_29.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_3.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_30.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_31.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_32.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_33.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_34.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_35.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_36.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_37.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_38.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_39.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_4.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_40.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_41.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_42.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_43.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_44.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_45.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_46.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_47.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_48.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_49.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_5.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_50.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_51.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_52.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_53.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_54.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_55.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_56.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_57.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_58.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_59.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_6.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_60.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_61.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_62.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_63.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_7.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_8.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec1_2Dx1D_128x128x64_9.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64.dat +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64.mag.xy.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64.mag.xz.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_0.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_1.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_10.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_11.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_12.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_13.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_14.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_15.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_16.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_17.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_18.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_19.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_2.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_20.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_21.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_22.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_23.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_24.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_25.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_26.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_27.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_28.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_29.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_3.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_30.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_31.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_32.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_33.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_34.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_35.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_36.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_37.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_38.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_39.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_4.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_40.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_41.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_42.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_43.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_44.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_45.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_46.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_47.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_48.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_49.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_5.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_50.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_51.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_52.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_53.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_54.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_55.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_56.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_57.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_58.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_59.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_6.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_60.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_61.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_62.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_63.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_7.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_8.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec2_2Dx1D_128x128x64_9.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64.dat +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64.mag.xy.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64.mag.xz.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_0.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_1.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_10.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_11.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_12.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_13.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_14.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_15.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_16.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_17.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_18.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_19.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_2.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_20.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_21.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_22.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_23.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_24.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_25.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_26.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_27.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_28.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_29.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_3.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_30.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_31.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_32.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_33.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_34.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_35.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_36.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_37.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_38.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_39.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_4.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_40.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_41.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_42.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_43.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_44.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_45.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_46.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_47.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_48.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_49.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_5.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_50.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_51.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_52.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_53.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_54.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_55.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_56.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_57.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_58.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_59.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_6.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_60.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_61.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_62.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_63.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_7.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_8.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_2Dx1D_128x128x64_9.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64.dat +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64.mag.xy.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64.mag.xz.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_0.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_1.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_10.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_11.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_12.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_13.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_14.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_15.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_16.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_17.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_18.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_19.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_2.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_20.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_21.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_22.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_23.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_24.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_25.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_26.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_27.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_28.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_29.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_3.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_30.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_31.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_32.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_33.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_34.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_35.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_36.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_37.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_38.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_39.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_4.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_40.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_41.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_42.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_43.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_44.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_45.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_46.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_47.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_48.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_49.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_5.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_50.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_51.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_52.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_53.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_54.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_55.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_56.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_57.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_58.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_59.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_6.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_60.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_61.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_62.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_63.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_7.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_8.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_cosine_2Dx1D_128x128x64_9.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64.dat +0 -1
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64.mag.xy.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64.mag.xz.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_0.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_1.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_10.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_11.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_12.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_13.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_14.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_15.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_16.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_17.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_18.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_19.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_2.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_20.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_21.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_22.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_23.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_24.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_25.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_26.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_27.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_28.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_29.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_3.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_30.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_31.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_32.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_33.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_34.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_35.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_36.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_37.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_38.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_39.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_4.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_40.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_41.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_42.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_43.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_44.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_45.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_46.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_47.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_48.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_49.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_5.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_50.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_51.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_52.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_53.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_54.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_55.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_56.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_57.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_58.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_59.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_6.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_60.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_61.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_62.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_63.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_7.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_8.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_unitvec3_forest_2Dx1D_128x128x64_9.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64.dat +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64.mag.xy.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64.mag.xz.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_0.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_1.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_10.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_11.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_12.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_13.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_14.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_15.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_16.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_17.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_18.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_19.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_2.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_20.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_21.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_22.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_23.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_24.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_25.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_26.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_27.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_28.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_29.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_3.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_30.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_31.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_32.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_33.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_34.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_35.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_36.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_37.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_38.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_39.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_4.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_40.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_41.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_42.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_43.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_44.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_45.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_46.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_47.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_48.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_49.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_5.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_50.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_51.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_52.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_53.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_54.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_55.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_56.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_57.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_58.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_59.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_6.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_60.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_61.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_62.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_63.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_7.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_8.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec1_2Dx1D_128x128x64_9.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64.dat +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64.mag.xy.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64.mag.xz.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_0.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_1.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_10.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_11.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_12.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_13.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_14.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_15.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_16.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_17.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_18.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_19.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_2.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_20.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_21.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_22.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_23.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_24.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_25.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_26.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_27.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_28.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_29.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_3.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_30.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_31.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_32.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_33.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_34.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_35.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_36.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_37.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_38.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_39.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_4.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_40.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_41.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_42.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_43.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_44.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_45.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_46.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_47.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_48.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_49.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_5.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_50.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_51.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_52.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_53.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_54.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_55.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_56.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_57.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_58.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_59.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_6.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_60.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_61.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_62.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_63.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_7.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_8.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec2_2Dx1D_128x128x64_9.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64.dat +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64.mag.xy.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64.mag.xz.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_0.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_1.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_10.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_11.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_12.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_13.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_14.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_15.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_16.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_17.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_18.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_19.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_2.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_20.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_21.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_22.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_23.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_24.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_25.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_26.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_27.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_28.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_29.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_3.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_30.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_31.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_32.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_33.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_34.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_35.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_36.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_37.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_38.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_39.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_4.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_40.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_41.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_42.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_43.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_44.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_45.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_46.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_47.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_48.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_49.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_5.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_50.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_51.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_52.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_53.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_54.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_55.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_56.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_57.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_58.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_59.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_6.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_60.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_61.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_62.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_63.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_7.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_8.png +0 -0
- package/src/shade/renderer/texture/noise/stbn/images/stbn_vec3_2Dx1D_128x128x64_9.png +0 -0
package/README.md
CHANGED
|
@@ -1,134 +1,240 @@
|
|
|
1
1
|
# Meep Engine
|
|
2
|
-
**A pure-JavaScript, data-oriented game engine for WebGPU.**
|
|
3
2
|
|
|
4
|
-
|
|
3
|
+
**Desktop-grade real-time graphics in the browser, in a JavaScript engine you import from and drive in code.**
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
[🕹️Examples](https://meep.company-named.com/examples/) | [📚 Documentation](https://meep.company-named.com/docs/getting-started/) | [🚀 Quick Start Template](https://gitlab.company-named.com/travnik/dream-engine-template) | [📄 License](#license--copyright)
|
|
9
|
-
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
## Installation
|
|
5
|
+
[🕹️ Examples](https://meep.company-named.com/examples/) · [📚 Documentation](https://meep.company-named.com/docs/getting-started/) · [🚀 Quick Start Template](https://gitlab.company-named.com/travnik/dream-engine-template) · [📄 Licence](#licence--pricing)
|
|
13
6
|
|
|
14
7
|
```shell
|
|
15
8
|
npm install @woosh/meep-engine
|
|
16
9
|
```
|
|
17
10
|
|
|
18
|
-
**
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
## 💎 Architecture: Pure ECS
|
|
23
|
-
|
|
24
|
-
* **Strict data-oriented design:** one component instance per type per entity. That constraint is what keeps memory layout and query paths predictable.
|
|
25
|
-
* **Hierarchy without a scene graph:** `ParentEntity` and `EntityNode` give you the composability of a scene graph on top of flat component storage - the thing pure-ECS architectures usually punt on.
|
|
26
|
-
* **Tiered access:** abstraction layers for gameplay logic, raw typed arrays underneath. Physics bodies, geometry and transforms are all backed by them; the component store itself is index-addressed rather than a flat typed array.
|
|
27
|
-
* **Allocation-conscious throughout:** pooling, SoA storage and reuse on the hot paths, so frame times stay flat instead of sawtoothing against the collector.
|
|
11
|
+
**Proprietary and source-available.** You get all ~6,200 fine-grained ES modules, unobfuscated,
|
|
12
|
+
under a licence that lets you ship. Need a lerp function? Import the module that holds it and pay
|
|
13
|
+
for those four lines.
|
|
28
14
|
|
|
29
15
|
---
|
|
30
16
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
* **Lighting:** clustered point and spot lights, shadows, ReSTIR DI, brick4 volumetric GI.
|
|
17
|
+
meep has one renderer, not a kit of parts. Every feature is part of a single frame and works off
|
|
18
|
+
the same shared data, so a character's shadow, the decal on the wall behind it and the fog in
|
|
19
|
+
between are computed together and agree with each other. There is one path rather than a
|
|
20
|
+
combinatorial number of them, so it is tuned once - by the engine, not by you.
|
|
37
21
|
|
|
38
|
-
|
|
22
|
+
That is not how browser rendering usually goes. Most WebGPU and WebGL renderers are a rasterizer
|
|
23
|
+
plus an ecosystem: you assemble the frame yourself out of plugins written without knowledge of each
|
|
24
|
+
other, so a stack can have shadows, decals, global illumination, anti-aliasing and volumetric fog
|
|
25
|
+
on paper and still not have them working together - and every plugin is another set of numbers to
|
|
26
|
+
tune, per scene and per device.
|
|
39
27
|
|
|
40
|
-
|
|
28
|
+
**Shadows, ambient occlusion, indirect lighting, auto-exposure, anti-aliasing and transparency are
|
|
29
|
+
all on by default, and there is nothing to configure to get a correct-looking frame.** No quality
|
|
30
|
+
tiers to author, no per-device profiles, no exposure value to pick, no shadow cascade splits to
|
|
31
|
+
hand-tune. You put a scene together, it looks right, and it holds its frame rate across a wide
|
|
32
|
+
range of hardware without you doing anything about it.
|
|
41
33
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
* **Particles:** zero-allocation, fully lit, soft, automatically atlassed, drawn through the renderer's own billboard pipeline.
|
|
45
|
-
|
|
46
|
-
* **Resolution:** TAA/NSS upscaling and dynamic resolution scaling.
|
|
47
|
-
|
|
48
|
-
* **Path tracing:** a GPU path tracer in Shade, and a separate CPU one that runs off the engine's own BVH.
|
|
49
|
-
|
|
50
|
-
* **Extensible frames:** your own work goes in as a *render extension* - a declared phase, declared ordering, typed per-frame records - rather than as a patch to the pipeline.
|
|
51
|
-
|
|
52
|
-
* **Picking** is asynchronous and batched (`PickingQuery`); there is no synchronous entry point.
|
|
53
|
-
|
|
54
|
-
On top of Shade, `engine/graphics3` carries the ECS systems a game binds to: cameras, lights, animation, decals, particles, terrain, water, trails, highlights, fog of war and volumetric light maps.
|
|
55
|
-
|
|
56
|
-
Deliberately absent: compressed textures (DDS, Draco, Basis), double-sided drawing, and any second backend.
|
|
34
|
+
In development since 2013, shipped in a commercial Steam release, and held to **~15,000 tests** -
|
|
35
|
+
determinism, adversarial and shader-emulation suites among them.
|
|
57
36
|
|
|
58
37
|
---
|
|
59
38
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
39
|
+
# The renderer
|
|
40
|
+
|
|
41
|
+
A GPU-driven deferred renderer on WebGPU. It lives under `src/shade/`, which is where the `Shade*`
|
|
42
|
+
type names come from.
|
|
43
|
+
|
|
44
|
+
## What you get
|
|
45
|
+
|
|
46
|
+
* **Thousands of dynamic lights.** Lighting is one pass over the screen however many lights are in
|
|
47
|
+
the scene. A light adds work only on the pixels it actually touches - not another pass, not
|
|
48
|
+
another draw - so lights are something you place rather than something you budget.
|
|
49
|
+
* **Shadows from every light, with nothing to set up.** No fixed limit on how many lights cast
|
|
50
|
+
shadows. Cascade distances come from your camera, each shadow's resolution from how large that
|
|
51
|
+
light looks on screen, and refresh priority from what has changed. There is no per-light shadow
|
|
52
|
+
setting to get wrong.
|
|
53
|
+
* **Scene complexity is nearly free on the CPU.** All opaque geometry is submitted in a couple of
|
|
54
|
+
draw calls, whether the scene holds one object or a hundred thousand. Visibility is decided on
|
|
55
|
+
the GPU, so adding objects does not add CPU work per object.
|
|
56
|
+
* **You don't pay for what you can't see.** Geometry hidden behind other geometry is dropped on the
|
|
57
|
+
GPU before anything shades it, and this works below the level of whole objects - a mesh half
|
|
58
|
+
behind a wall does not cost its hidden half. A dense interior costs roughly what you can see of it.
|
|
59
|
+
* **Overlapping geometry doesn't multiply cost.** Deferred shading means a surface hidden behind
|
|
60
|
+
another is not shaded twice. Materials are evaluated once per visible pixel, after the scene is
|
|
61
|
+
drawn.
|
|
62
|
+
* **Features you turn off cost nothing.** The frame is assembled as a graph, and work that nothing
|
|
63
|
+
consumes is dropped before it reaches the GPU. That applies to passes you add as well - you
|
|
64
|
+
extend the frame by declaring where your work goes, not by patching the renderer.
|
|
65
|
+
|
|
66
|
+
If you want the mechanisms behind these - visibility buffer, meshlet clustering, clustered lighting,
|
|
67
|
+
occlusion culling, the frame graph - they are in **[the renderer contract](src/shade/RENDERER_CONTRACT.md)**,
|
|
68
|
+
which also covers how to put a model on the screen and how to add your own work to the frame.
|
|
69
|
+
|
|
70
|
+
## How the features interact
|
|
71
|
+
|
|
72
|
+
What a feature list cannot tell you is whether the features work together once they are in the same
|
|
73
|
+
scene. This can.
|
|
74
|
+
|
|
75
|
+
| | Lit by scene lights | Shadows | Stable when it moves | Indirect light |
|
|
76
|
+
|---|---|---|---|---|
|
|
77
|
+
| Static meshes | ✅ | casts + receives | ✅ | ✅ |
|
|
78
|
+
| **Skinned characters** | ✅ | casts + receives | ✅ **per-vertex** | ✅ |
|
|
79
|
+
| Terrain | ✅ | casts + receives | ✅ | ✅ |
|
|
80
|
+
| Decals | ✅ | receives | ✅ follows the surface | ✅ |
|
|
81
|
+
| Transparent surfaces | ✅ | receives | ❌ | ✅ |
|
|
82
|
+
| Volumetric fog | ✅ | shadowed by them | ✅ | n/a |
|
|
83
|
+
| Water, particles, trails, overlays | ❌ | ❌ | ❌ | ❌ |
|
|
84
|
+
|
|
85
|
+
Those top six are not six systems that were each taught about lighting. They read the same lighting,
|
|
86
|
+
the same shadows and the same motion data, because there is only one of each. Three consequences:
|
|
87
|
+
|
|
88
|
+
* **Animated characters are not a special case.** A skinned character goes down the same path as a
|
|
89
|
+
static one: same culling, same shadows, same lighting. It also produces motion data per vertex
|
|
90
|
+
rather than per object, so a swinging arm resolves cleanly under anti-aliasing instead of
|
|
91
|
+
smearing - which is the usual failure of bolt-on temporal AA.
|
|
92
|
+
* **A decal is lit like the surface it lands on.** Decals modify the surface itself rather than
|
|
93
|
+
painting over the finished image, so a scorch mark is lit, shadowed and bounced exactly like the
|
|
94
|
+
wall under it, and ambient occlusion and reflections see it too.
|
|
95
|
+
* **Ordering is declared, not accidental.** Systems state what they must come after, by name, and
|
|
96
|
+
the renderer resolves the order. Decals declare that they follow terrain, so scorch marks land on
|
|
97
|
+
textured ground - rather than depending on which system happened to register first.
|
|
98
|
+
|
|
99
|
+
Water, particles, trails and screen overlays are drawn after lighting, so they are not lit or
|
|
100
|
+
shadowed and contribute no motion data. They read the scene's depth, so they are correctly hidden
|
|
101
|
+
behind things in front of them.
|
|
102
|
+
|
|
103
|
+
## Scaling across hardware
|
|
104
|
+
|
|
105
|
+
**One build covers a wide hardware range, and you don't author the tiers.** When frames start
|
|
106
|
+
costing more than the budget - on a weaker GPU, or because the scene got busy - the engine renders
|
|
107
|
+
internally at a lower resolution and upscales back to the display, adjusting continuously as
|
|
108
|
+
conditions change. Nothing in your application is involved: this is wired up by default when you
|
|
109
|
+
construct an `Engine`.
|
|
110
|
+
|
|
111
|
+
Anti-aliasing is what does the upscaling, and it is on by default. Out of the box the internal and
|
|
112
|
+
display resolutions are the same, so you get anti-aliasing at native resolution and no upscaling
|
|
113
|
+
until something needs the headroom.
|
|
114
|
+
|
|
115
|
+
It holds a **floor rather than a target**: 30 FPS by default, taking no action on hardware that is
|
|
116
|
+
already clearing it, and trading resolution down to 43% before it runs out of room. What it costs
|
|
117
|
+
is one re-converging frame each time the resolution steps, since temporal history is discarded.
|
|
118
|
+
|
|
119
|
+
To override or opt out:
|
|
66
120
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
* **Inverse kinematics:** FABRIK and analytic two-joint solvers.
|
|
72
|
-
|
|
73
|
-
## 🔊 Audio
|
|
74
|
-
A data-driven sound engine built on Wwise / FMOD concepts - without the opaque middleware banks.
|
|
75
|
-
|
|
76
|
-
* **The middleware feature set:** events, a mixer bus tree, RTPC parameters, voice stealing, mixer snapshots and ducking - all authored as serializable engine data.
|
|
77
|
-
|
|
78
|
-
* **Two entry points:** `AudioEmitter` puts a sound on an entity; `AudioEventTrigger` fires authored events in response to entity events.
|
|
79
|
-
|
|
80
|
-
* **Acoustic simulation (opt-in):** geometry-driven occlusion, transmission, propagation pathing and baked reverb probes. What Steam Audio is to FMOD/Wwise, this layer is to the sound engine.
|
|
81
|
-
|
|
82
|
-
* **Scale:** custom culling and attenuation support 1,000s of positional sources.
|
|
83
|
-
|
|
84
|
-
## 🌐 Networking
|
|
85
|
-
|
|
86
|
-
* **Server-authoritative rollback:** client-side prediction and reconciliation over action-log replication and binary snapshots.
|
|
121
|
+
```js
|
|
122
|
+
engine.graphics.dynamic_resolution.enabled = false; // or .target_frame_rate / .min_scale
|
|
123
|
+
engine.graphics.renderer.feature_taa_enabled = false; // only valid after start()
|
|
124
|
+
```
|
|
87
125
|
|
|
88
|
-
|
|
126
|
+
Two things to know. Anti-aliasing is the only thing that upscales, so switching it off while the
|
|
127
|
+
resolution scale is below full leaves the frame un-upscaled. And if you drive the `Renderer`
|
|
128
|
+
directly rather than through `Engine`, none of this is wired for you.
|
|
89
129
|
|
|
90
|
-
|
|
130
|
+
A neural upscaler ships alongside the default one - a port of ARM's Neural Super Sampling, weights
|
|
131
|
+
included, no setup needed - one assignment away at `renderer.upscale_type = ShadeUpscalerType.NSS`.
|
|
91
132
|
|
|
92
|
-
##
|
|
133
|
+
## Correct by default
|
|
93
134
|
|
|
94
|
-
|
|
135
|
+
The out-of-the-box configuration is the expensive-and-correct one, not the safe-and-cheap one.
|
|
95
136
|
|
|
96
|
-
|
|
137
|
+
**On, with nothing to configure:** shadows · ambient occlusion · indirect lighting · anti-aliasing ·
|
|
138
|
+
auto-exposure · tonemapping · bloom · sharpening · order-independent transparency. Virtual texturing
|
|
139
|
+
is available system-wide and opts in per material.
|
|
97
140
|
|
|
98
|
-
* **
|
|
141
|
+
* **Shadows** need no numbers from you. Cascade distances come from your camera, shadow map sizes
|
|
142
|
+
from how large each light looks on screen, and depth bias from constants that work. There is no
|
|
143
|
+
cascade array to hand-tune and no shadow budget to apportion.
|
|
144
|
+
* **Auto-exposure** needs no exposure value. The engine meters the scene's brightness each frame,
|
|
145
|
+
weighted toward the centre of the image and ignoring the brightest and darkest few percent so a
|
|
146
|
+
bright sky or a dark corner does not drag the whole frame, then eases toward it - faster when the
|
|
147
|
+
scene brightens than when it darkens, the way an eye does. Walk from a dark interior into daylight
|
|
148
|
+
and it adjusts.
|
|
149
|
+
* **Tonemapping** picks its own operator from the display: ACES on SDR, and a dedicated HDR curve
|
|
150
|
+
when the display is HDR.
|
|
99
151
|
|
|
100
|
-
|
|
152
|
+
Opt-in, off by default: screen-space reflections, motion blur, depth of field, ReSTIR direct
|
|
153
|
+
lighting, and a reference path tracer.
|
|
101
154
|
|
|
102
|
-
|
|
155
|
+
**Global illumination** defaults to image-based. There is also a baked volumetric GI mode - probe
|
|
156
|
+
bricks through the scene volume, in the shape Unreal's volumetric lightmaps take - which dynamic and
|
|
157
|
+
skinned objects sample as they move through it. It bakes in-engine, from a live scene and renderer,
|
|
158
|
+
so the precompute is a call you make rather than a tool you leave the engine for. Opaque and
|
|
159
|
+
transparent surfaces both use it, so turning it on does not leave them lit differently.
|
|
103
160
|
|
|
104
|
-
##
|
|
105
|
-
`src/generation` is a rule-driven grid generator: cellular automata, layered grids with bitmask cell matchers, rule sets that place markers and spawn entities, filtering and placement passes, theme-driven selection. Generation is composable tasks over a shared `GridGenerationResource`, so building a world is a task graph rather than a script.
|
|
161
|
+
## WebGPU only
|
|
106
162
|
|
|
107
|
-
|
|
163
|
+
WebGPU is not a better WebGL - it is a different machine. Compute shaders, storage buffers and
|
|
164
|
+
indirect draw are what let visibility be decided on the GPU and a whole scene be submitted in a
|
|
165
|
+
couple of draw calls. None of that has an equivalent in WebGL, so supporting both would mean either
|
|
166
|
+
a second renderer to maintain or holding this one down to what the older API can express. meep
|
|
167
|
+
targets WebGPU, and everything above follows from that.
|
|
108
168
|
|
|
109
|
-
|
|
169
|
+
The floor is fixed and checked before anything is created: WebGPU plus a small set of capabilities
|
|
170
|
+
that mainstream desktop GPUs have had for years. Hardware that does not clear it gets a clear
|
|
171
|
+
failure message written to be shown to a person, rather than a degraded picture. The exact features
|
|
172
|
+
and limits are in [§2 of the contract](src/shade/RENDERER_CONTRACT.md).
|
|
110
173
|
|
|
111
|
-
|
|
174
|
+
## Numbers
|
|
112
175
|
|
|
113
|
-
|
|
176
|
+
There is no published benchmark for the renderer yet. What the pipeline does differently is
|
|
177
|
+
checkable in the source without running anything - draw count independent of object count, one
|
|
178
|
+
lighting pass independent of light count, material cost independent of overdraw - and the tools to
|
|
179
|
+
measure the rest ship with it.
|
|
114
180
|
|
|
115
|
-
|
|
181
|
+
The renderer records `.sgpt` GPU profile captures - per-pass timings, and at higher capture levels
|
|
182
|
+
the frame-graph structure, dispatch and draw counts. Assign a
|
|
183
|
+
`GPUProfileSession({ level: GPUProfileLevel.WORKLOAD })` to `renderer.profile_session`, call
|
|
184
|
+
`start()`, run frames, and `stop()` returns an `ArrayBuffer` to write out. The recorder and the
|
|
185
|
+
[format specification](src/shade/device/timing/profile/SGPT_FORMAT.md) both ship in this package.
|
|
116
186
|
|
|
117
187
|
---
|
|
118
188
|
|
|
119
|
-
##
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
* **
|
|
124
|
-
|
|
125
|
-
|
|
189
|
+
## Everything else
|
|
190
|
+
|
|
191
|
+
The rest of what a game needs, in the same package. Each links out to its own documentation.
|
|
192
|
+
|
|
193
|
+
* **Architecture.** A real ECS - one component per type per entity - with parent/child hierarchy
|
|
194
|
+
available without a scene graph. Allocation-conscious on the hot paths, so frame times stay flat
|
|
195
|
+
rather than sawtoothing against the garbage collector.
|
|
196
|
+
* **Physics.** Deterministic rigid bodies in pure JavaScript, no WebAssembly and no worker threads,
|
|
197
|
+
with the determinism covered by replay tests - which is what lets it sit under rollback netcode.
|
|
198
|
+
Convex and mesh collision, continuous collision detection for fast movers, and bodies that stop
|
|
199
|
+
costing anything once they settle. A raycast vehicle, a character controller that handles stairs
|
|
200
|
+
and slopes, and inverse kinematics. [Fluid simulation](src/engine/physics/mls-mpm/README.md) is
|
|
201
|
+
separate and can run off the main thread.
|
|
202
|
+
* **Audio.** The Wwise/FMOD feature set without the middleware: events, a mixer bus tree, real-time
|
|
203
|
+
parameters, voice stealing, snapshots and ducking, all authored as engine data you can serialize.
|
|
204
|
+
Opt-in [acoustic simulation](src/engine/sound/simulation/README.md) adds occlusion, transmission
|
|
205
|
+
and reverb driven by the scene's own geometry.
|
|
206
|
+
* **[Networking](src/engine/network/README.md).** Server-authoritative rollback: client-side
|
|
207
|
+
prediction, reconciliation, and binary snapshots. Transports for WebRTC, WebTransport, WebSocket
|
|
208
|
+
and Node UDP, plus loopback and deliberately lossy ones for tests. Bandwidth metering, packet
|
|
209
|
+
record and replay, and cross-peer desync detection.
|
|
210
|
+
* **Navigation & AI.** Grid A\*, and a [navigation mesh](src/engine/navigation/mesh/README.md) with
|
|
211
|
+
any-angle paths and obstacle carving at build time. Behaviour trees and blackboards, [Monte-Carlo
|
|
212
|
+
tree search](src/engine/intelligence/mcts/README.md) for agents that search a game tree rather
|
|
213
|
+
than follow one, and a planner for spending limited resources. Ray, box, frustum and point queries
|
|
214
|
+
against the scene.
|
|
215
|
+
* **Procedural generation.** [A rule-driven grid generator](src/generation): cellular automata,
|
|
216
|
+
layered grids, rule sets that place markers and spawn entities, theme-driven selection. Generation
|
|
217
|
+
composes as tasks over shared state, so building a world is a graph of steps rather than a script.
|
|
218
|
+
* **Assets & codecs.** glTF, including meshopt compression, loading into **entities** rather than
|
|
219
|
+
one opaque tree. PNG, JPEG and AVIF decoded in-engine - the AV1 codec is a from-scratch encoder
|
|
220
|
+
*and* decoder in pure JavaScript, no WebAssembly. Web-first asset streaming, and binary
|
|
221
|
+
serialization that upgrades across versions.
|
|
222
|
+
* **Tooling.** An in-app editor that attaches to and detaches from a running engine. [GPU profile
|
|
223
|
+
capture](src/shade/device/timing/profile/SGPT_FORMAT.md) that records per-pass timings and leaves
|
|
224
|
+
the build entirely when you don't import it. A software WebGPU implementation and a WGSL
|
|
225
|
+
interpreter, so shaders and pipelines are testable on machines with no GPU.
|
|
226
|
+
* **Everything smaller.** Input across touch, mouse, keyboard and gamepad behind one abstraction ·
|
|
227
|
+
an optional DOM UI layer, replaceable with React or Vue · colour management with perceptual
|
|
228
|
+
spaces, HDR transfer functions, tone mapping and gamut clipping · node graphs · achievements ·
|
|
229
|
+
localisation · key-value storage over IndexedDB.
|
|
126
230
|
|
|
127
231
|
---
|
|
128
232
|
|
|
129
|
-
##
|
|
233
|
+
## Shipping a build
|
|
130
234
|
|
|
131
|
-
The engine carries ~6,
|
|
235
|
+
The engine carries ~6,100 assertions. They throw while you develop, and
|
|
236
|
+
[`@rollup/plugin-strip`](https://github.com/rollup/plugins/tree/master/packages/strip) takes them
|
|
237
|
+
out of a production build - its defaults already cover `assert.*`:
|
|
132
238
|
|
|
133
239
|
```js
|
|
134
240
|
// vite.config.js
|
|
@@ -138,27 +244,21 @@ export default defineConfig({
|
|
|
138
244
|
});
|
|
139
245
|
```
|
|
140
246
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
## Additional Features
|
|
144
|
-
|
|
145
|
-
| Category | Features |
|
|
146
|
-
|------------------|-------------------------------------------------------------------------------------------------------------------|
|
|
147
|
-
| Input | Touch, mouse, keyboard and gamepad behind one abstraction. Event-driven and query-based APIs |
|
|
148
|
-
| UI | Zero-garbage DOM view system. Optional; replaceable with React/Vue |
|
|
149
|
-
| Color Management | OKLab/OkHSV, CIELAB, HSV/HCL, PQ, YCbCr/YCoCg, illuminants, spectral integration, tone mapping and gamut clipping |
|
|
150
|
-
| NodeGraph | A building block for node-graph systems, such as shader editors and workflow engines |
|
|
151
|
-
| Achievements | Achievement system driven by expressions and blackboards |
|
|
152
|
-
| Localization | Per-locale string catalogues with template variables and `Intl` number formatting |
|
|
153
|
-
| Storage | Key-value `Storage` abstraction with IndexedDB and in-memory backends |
|
|
247
|
+
Note that those defaults also strip `console.*`.
|
|
154
248
|
|
|
155
249
|
---
|
|
156
250
|
|
|
157
|
-
##
|
|
251
|
+
## Licence & pricing
|
|
252
|
+
|
|
158
253
|
Copyright © 2026 Company Named Limited. All rights reserved.
|
|
159
254
|
|
|
160
|
-
**Free for small projects.** You can build and ship commercially at no cost for as long as a project
|
|
255
|
+
**Free for small projects.** You can build and ship commercially at no cost for as long as a project
|
|
256
|
+
stays under US$50,000 in funding and US$50,000 in revenue. Evaluating the engine and building
|
|
257
|
+
internal prototypes are free whatever your funding. Paid tiers - Indie, Standard, and Enterprise -
|
|
258
|
+
raise that ceiling for a one-time fee per project, and add 24 months of major-version coverage.
|
|
161
259
|
|
|
162
|
-
Short version: ship anything you like, just don't redistribute the source and don't build a
|
|
260
|
+
Short version: ship anything you like, just don't redistribute the source and don't build a
|
|
261
|
+
competing engine.
|
|
163
262
|
|
|
164
|
-
See [LICENSE](LICENSE) for the terms covering this package, and the
|
|
263
|
+
See [LICENSE](LICENSE) for the terms covering this package, and the
|
|
264
|
+
[pricing page](https://meep.company-named.com/pricing/) for the tier ladder.
|
|
@@ -16,7 +16,16 @@ import { TransformAttachmentSystem } from "../src/engine/ecs/transform-attachmen
|
|
|
16
16
|
import { EngineHarness } from "../src/engine/EngineHarness.js";
|
|
17
17
|
import TopDownCameraController from "../src/engine/graphics/ecs/camera/topdown/TopDownCameraController.js";
|
|
18
18
|
import { DebugDrawSystem } from "../src/engine/graphics3/DebugDrawSystem.js";
|
|
19
|
+
import {
|
|
20
|
+
HighlightOutlineSystem
|
|
21
|
+
} from "../src/engine/graphics3/HighlightOutlineSystem.js";
|
|
19
22
|
import { MeshSystem } from "../src/engine/graphics3/MeshSystem.js";
|
|
23
|
+
import {
|
|
24
|
+
ShadedGeometryHighlightSystem
|
|
25
|
+
} from "../src/engine/graphics/ecs/highlight/system/ShadedGeometryHighlightSystem.js";
|
|
26
|
+
import {
|
|
27
|
+
SGMeshHighlightSystem
|
|
28
|
+
} from "../src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshHighlightSystem.js";
|
|
20
29
|
import {
|
|
21
30
|
ShadedGeometrySystem
|
|
22
31
|
} from "../src/engine/graphics3/ShadedGeometrySystem.js";
|
|
@@ -73,16 +82,31 @@ function addModelLoaders(config) {
|
|
|
73
82
|
async function addGraphicsSystems(engine) {
|
|
74
83
|
const em = engine.entityManager;
|
|
75
84
|
|
|
76
|
-
|
|
85
|
+
const meshes = new MeshSystem(
|
|
77
86
|
engine.graphics,
|
|
78
87
|
EngineHarness.shadeScene(engine),
|
|
79
88
|
url => load_model_scene_bundle(engine.assetManager, url)
|
|
80
|
-
)
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
await em.addSystem(meshes);
|
|
81
92
|
|
|
82
93
|
// a model with neither skin nor clip becomes entities, and its primitives are drawn by the
|
|
83
94
|
// system that owns primitives (D47)
|
|
84
95
|
await em.addSystem(new ShadedGeometrySystem(engine.graphics, EngineHarness.shadeScene(engine)));
|
|
85
96
|
|
|
97
|
+
/*
|
|
98
|
+
One outline pass and both of its sources, because the editor offers a `Highlight` editor and
|
|
99
|
+
either kind of thing can be carrying the component: a model placed from the mesh library is an
|
|
100
|
+
`SGMesh`, and anything built in place is a `ShadedGeometry`. The pass is registered once and
|
|
101
|
+
draws for both — a pass per kind would read the whole visibility buffer once per kind, and the
|
|
102
|
+
last would paint over the rest.
|
|
103
|
+
*/
|
|
104
|
+
const outline = new HighlightOutlineSystem(engine.graphics);
|
|
105
|
+
|
|
106
|
+
await em.addSystem(outline);
|
|
107
|
+
await em.addSystem(new SGMeshHighlightSystem(outline, meshes));
|
|
108
|
+
await em.addSystem(new ShadedGeometryHighlightSystem(outline));
|
|
109
|
+
|
|
86
110
|
await em.addSystem(new ParticleEmitterSystem(engine.graphics, engine.assetManager));
|
|
87
111
|
|
|
88
112
|
// the editor's selection box is the debug-draw pass's first consumer (V5)
|
package/package.json
CHANGED
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
"license": "SEE LICENSE IN LICENSE",
|
|
4
4
|
"productName": "Meep",
|
|
5
5
|
"homepage": "https://meep.company-named.com/",
|
|
6
|
-
"description": "
|
|
6
|
+
"description": "Advanced 3D game engine",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"author": "Alexander Goldring",
|
|
9
|
-
"version": "3.
|
|
9
|
+
"version": "3.14.1",
|
|
10
10
|
"exports": {
|
|
11
11
|
"./build/*": "./build/*",
|
|
12
12
|
"./src/*": "./src/*",
|
|
@@ -39,7 +39,8 @@
|
|
|
39
39
|
"README.md",
|
|
40
40
|
"!src/**/*.spec.js",
|
|
41
41
|
"!editor/**/*.spec.js",
|
|
42
|
-
"!src/**/__fixtures__/**"
|
|
42
|
+
"!src/**/__fixtures__/**",
|
|
43
|
+
"!src/shade/renderer/texture/noise/stbn/images/**"
|
|
43
44
|
],
|
|
44
45
|
"dependencies": {
|
|
45
46
|
"opentype.js": "1.3.3",
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Outlines a highlighted primitive — one that is not a model.
|
|
3
|
+
*
|
|
4
|
+
* **A `ShadedGeometry` is not an `SGMesh`, and {@link SGMeshHighlightSystem} reads only the latter.**
|
|
5
|
+
* A model is a file that expanded into entities, and the highlight sits on the root; a primitive is
|
|
6
|
+
* a geometry and a material some tool built directly, and the highlight sits on the thing itself.
|
|
7
|
+
* This tuple was the last `HighlightSystemBase` subclass still standing when the three renderer was
|
|
8
|
+
* deleted, and it went with it — so between then and now, everything built rather than loaded had no
|
|
9
|
+
* outline. This file is that path restored, at the import path it used to occupy.
|
|
10
|
+
*
|
|
11
|
+
* **It is a second source, not a second pass.** Everything about drawing the outline —
|
|
12
|
+
* the pass, the lookup table, the renderer — belongs to {@link HighlightOutlineSystem}, and this
|
|
13
|
+
* contributes entries to it through {@link HighlightOutlineSystem#add_entry}. Two passes would each
|
|
14
|
+
* read the whole visibility buffer and the later would paint over the earlier's outline wherever
|
|
15
|
+
* they named the same row.
|
|
16
|
+
*
|
|
17
|
+
* The walk is one node, because that is what the component is: `ShadedGeometry` is *"not a
|
|
18
|
+
* hierarchical data structure"* in its own words, and `ShadedGeometrySystem` gives it exactly one
|
|
19
|
+
* row. A primitive whose system has not linked it yet has no node and contributes nothing, which is
|
|
20
|
+
* the same silence every other reader of `ShadedGeometry.node` already tolerates.
|
|
21
|
+
*/
|
|
22
|
+
export class ShadedGeometryHighlightSystem extends System<any> {
|
|
23
|
+
/**
|
|
24
|
+
* @param {HighlightOutlineSystem} outline the system that owns the outline pass
|
|
25
|
+
*/
|
|
26
|
+
constructor(outline: HighlightOutlineSystem);
|
|
27
|
+
dependencies: (typeof ShadedGeometry | typeof Highlight)[];
|
|
28
|
+
startup(entityManager: any): Promise<void>;
|
|
29
|
+
shutdown(entityManager: any): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* @param {Highlight} highlight
|
|
32
|
+
* @param {ShadedGeometry} geometry
|
|
33
|
+
* @param {number} entity
|
|
34
|
+
*/
|
|
35
|
+
link(highlight: Highlight, geometry: ShadedGeometry, entity: number): void;
|
|
36
|
+
/**
|
|
37
|
+
* @param {Highlight} highlight
|
|
38
|
+
* @param {ShadedGeometry} geometry
|
|
39
|
+
* @param {number} entity
|
|
40
|
+
*/
|
|
41
|
+
unlink(highlight: Highlight, geometry: ShadedGeometry, entity: number): void;
|
|
42
|
+
#private;
|
|
43
|
+
}
|
|
44
|
+
import { System } from "../../../../ecs/System.js";
|
|
45
|
+
import { ShadedGeometry } from "../../mesh-v2/ShadedGeometry.js";
|
|
46
|
+
import Highlight from "../Highlight.js";
|
|
47
|
+
//# sourceMappingURL=ShadedGeometryHighlightSystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShadedGeometryHighlightSystem.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/graphics/ecs/highlight/system/ShadedGeometryHighlightSystem.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH;IAiBI;;OAEG;IACH,6CAMC;IAzBD,2DAA2C;IA2B3C,2CAEC;IAED,4CAWC;IAED;;;;OAIG;IACH,gBAJW,SAAS,YACT,cAAc,UACd,MAAM,QAgBhB;IAED;;;;OAIG;IACH,kBAJW,SAAS,YACT,cAAc,UACd,MAAM,QAYhB;;CACJ;uBA3GsB,2BAA2B;+BAEnB,iCAAiC;sBAD1C,iBAAiB"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { assert } from "../../../../../core/assert.js";
|
|
2
|
+
import { System } from "../../../../ecs/System.js";
|
|
3
|
+
import Highlight from "../Highlight.js";
|
|
4
|
+
import { ShadedGeometry } from "../../mesh-v2/ShadedGeometry.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Outlines a highlighted primitive — one that is not a model.
|
|
8
|
+
*
|
|
9
|
+
* **A `ShadedGeometry` is not an `SGMesh`, and {@link SGMeshHighlightSystem} reads only the latter.**
|
|
10
|
+
* A model is a file that expanded into entities, and the highlight sits on the root; a primitive is
|
|
11
|
+
* a geometry and a material some tool built directly, and the highlight sits on the thing itself.
|
|
12
|
+
* This tuple was the last `HighlightSystemBase` subclass still standing when the three renderer was
|
|
13
|
+
* deleted, and it went with it — so between then and now, everything built rather than loaded had no
|
|
14
|
+
* outline. This file is that path restored, at the import path it used to occupy.
|
|
15
|
+
*
|
|
16
|
+
* **It is a second source, not a second pass.** Everything about drawing the outline —
|
|
17
|
+
* the pass, the lookup table, the renderer — belongs to {@link HighlightOutlineSystem}, and this
|
|
18
|
+
* contributes entries to it through {@link HighlightOutlineSystem#add_entry}. Two passes would each
|
|
19
|
+
* read the whole visibility buffer and the later would paint over the earlier's outline wherever
|
|
20
|
+
* they named the same row.
|
|
21
|
+
*
|
|
22
|
+
* The walk is one node, because that is what the component is: `ShadedGeometry` is *"not a
|
|
23
|
+
* hierarchical data structure"* in its own words, and `ShadedGeometrySystem` gives it exactly one
|
|
24
|
+
* row. A primitive whose system has not linked it yet has no node and contributes nothing, which is
|
|
25
|
+
* the same silence every other reader of `ShadedGeometry.node` already tolerates.
|
|
26
|
+
*/
|
|
27
|
+
export class ShadedGeometryHighlightSystem extends System {
|
|
28
|
+
dependencies = [Highlight, ShadedGeometry];
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @type {HighlightOutlineSystem}
|
|
32
|
+
*/
|
|
33
|
+
#outline;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The entry each highlighted primitive has with {@link #outline}, which is the only handle on
|
|
37
|
+
* it: an entity that is both a model and a primitive has an entry from each contributing system,
|
|
38
|
+
* so the shared list cannot be keyed by entity and each contributor remembers its own.
|
|
39
|
+
*
|
|
40
|
+
* @type {Map<number, object>}
|
|
41
|
+
*/
|
|
42
|
+
#entries = new Map();
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* @param {HighlightOutlineSystem} outline the system that owns the outline pass
|
|
46
|
+
*/
|
|
47
|
+
constructor(outline) {
|
|
48
|
+
super();
|
|
49
|
+
|
|
50
|
+
assert.defined(outline, 'outline');
|
|
51
|
+
|
|
52
|
+
this.#outline = outline;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
async startup(entityManager) {
|
|
56
|
+
this.entityManager = entityManager;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
async shutdown(entityManager) {
|
|
60
|
+
/*
|
|
61
|
+
Handing every entry back rather than trusting the outline system to have cleared its list
|
|
62
|
+
makes shutdown order between the two free — and `remove_entry` tolerates an entry that is
|
|
63
|
+
already gone, which is the case when the outline system went down first.
|
|
64
|
+
*/
|
|
65
|
+
for (const entry of this.#entries.values()) {
|
|
66
|
+
this.#outline.remove_entry(entry);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
this.#entries.clear();
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* @param {Highlight} highlight
|
|
74
|
+
* @param {ShadedGeometry} geometry
|
|
75
|
+
* @param {number} entity
|
|
76
|
+
*/
|
|
77
|
+
link(highlight, geometry, entity) {
|
|
78
|
+
const entry = this.#outline.add_entry(entity, highlight, visitor => {
|
|
79
|
+
const node = geometry.node;
|
|
80
|
+
|
|
81
|
+
if (node === null || node === undefined) {
|
|
82
|
+
// not in the scene: either `ShadedGeometrySystem` has not linked it yet, or it is
|
|
83
|
+
// not running at all, and neither is this system's to complain about
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
visitor(node);
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
this.#entries.set(entity, entry);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* @param {Highlight} highlight
|
|
95
|
+
* @param {ShadedGeometry} geometry
|
|
96
|
+
* @param {number} entity
|
|
97
|
+
*/
|
|
98
|
+
unlink(highlight, geometry, entity) {
|
|
99
|
+
const entry = this.#entries.get(entity);
|
|
100
|
+
|
|
101
|
+
if (entry === undefined) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
this.#entries.delete(entity);
|
|
106
|
+
|
|
107
|
+
this.#outline.remove_entry(entry);
|
|
108
|
+
}
|
|
109
|
+
}
|