@luma.gl/shaders 0.0.0-stage → 10.0.0-alpha.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +38 -0
- package/README.md +25 -2
- package/dist/dist.dev.js +21598 -0
- package/dist/dist.min.js +13439 -0
- package/dist/glsl.cjs +33 -0
- package/dist/glsl.cjs.map +6 -0
- package/dist/glsl.d.ts +6 -0
- package/dist/glsl.d.ts.map +1 -0
- package/dist/glsl.js +7 -0
- package/dist/glsl.js.map +1 -0
- package/dist/index.cjs +278 -0
- package/dist/index.cjs.map +6 -0
- package/dist/index.d.ts +108 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +74 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/color/normalize-byte-colors.cjs +50 -0
- package/dist/lib/color/normalize-byte-colors.d.ts +23 -0
- package/dist/lib/color/normalize-byte-colors.d.ts.map +1 -0
- package/dist/lib/color/normalize-byte-colors.js +42 -0
- package/dist/lib/color/normalize-byte-colors.js.map +1 -0
- package/dist/lib/filters/prop-types.cjs +90 -0
- package/dist/lib/filters/prop-types.d.ts +44 -0
- package/dist/lib/filters/prop-types.d.ts.map +1 -0
- package/dist/lib/filters/prop-types.js +96 -0
- package/dist/lib/filters/prop-types.js.map +1 -0
- package/dist/lib/glsl-shader-assembler.cjs +50 -0
- package/dist/lib/glsl-shader-assembler.d.ts +19 -0
- package/dist/lib/glsl-shader-assembler.d.ts.map +1 -0
- package/dist/lib/glsl-shader-assembler.js +29 -0
- package/dist/lib/glsl-shader-assembler.js.map +1 -0
- package/dist/lib/glsl-utils/get-shader-info.cjs +52 -0
- package/dist/lib/glsl-utils/get-shader-info.d.ts +9 -0
- package/dist/lib/glsl-utils/get-shader-info.d.ts.map +1 -0
- package/dist/lib/glsl-utils/get-shader-info.js +33 -0
- package/dist/lib/glsl-utils/get-shader-info.js.map +1 -0
- package/dist/lib/glsl-utils/shader-utils.cjs +126 -0
- package/dist/lib/glsl-utils/shader-utils.d.ts +23 -0
- package/dist/lib/glsl-utils/shader-utils.d.ts.map +1 -0
- package/dist/lib/glsl-utils/shader-utils.js +92 -0
- package/dist/lib/glsl-utils/shader-utils.js.map +1 -0
- package/dist/lib/preprocessor/preprocessor.cjs +128 -0
- package/dist/lib/preprocessor/preprocessor.d.ts +15 -0
- package/dist/lib/preprocessor/preprocessor.d.ts.map +1 -0
- package/dist/lib/preprocessor/preprocessor.js +120 -0
- package/dist/lib/preprocessor/preprocessor.js.map +1 -0
- package/dist/lib/shader-assembler-base.cjs +132 -0
- package/dist/lib/shader-assembler-base.d.ts +51 -0
- package/dist/lib/shader-assembler-base.d.ts.map +1 -0
- package/dist/lib/shader-assembler-base.js +127 -0
- package/dist/lib/shader-assembler-base.js.map +1 -0
- package/dist/lib/shader-assembler.cjs +33 -0
- package/dist/lib/shader-assembler.d.ts +4 -0
- package/dist/lib/shader-assembler.d.ts.map +1 -0
- package/dist/lib/shader-assembler.js +7 -0
- package/dist/lib/shader-assembler.js.map +1 -0
- package/dist/lib/shader-assembly/assemble-glsl-shaders.cjs +181 -0
- package/dist/lib/shader-assembly/assemble-glsl-shaders.d.ts +70 -0
- package/dist/lib/shader-assembly/assemble-glsl-shaders.d.ts.map +1 -0
- package/dist/lib/shader-assembly/assemble-glsl-shaders.js +208 -0
- package/dist/lib/shader-assembly/assemble-glsl-shaders.js.map +1 -0
- package/dist/lib/shader-assembly/assemble-shaders.cjs +42 -0
- package/dist/lib/shader-assembly/assemble-shaders.d.ts +10 -0
- package/dist/lib/shader-assembly/assemble-shaders.d.ts.map +1 -0
- package/dist/lib/shader-assembly/assemble-shaders.js +10 -0
- package/dist/lib/shader-assembly/assemble-shaders.js.map +1 -0
- package/dist/lib/shader-assembly/assemble-wgsl-shaders.cjs +498 -0
- package/dist/lib/shader-assembly/assemble-wgsl-shaders.d.ts +70 -0
- package/dist/lib/shader-assembly/assemble-wgsl-shaders.d.ts.map +1 -0
- package/dist/lib/shader-assembly/assemble-wgsl-shaders.js +480 -0
- package/dist/lib/shader-assembly/assemble-wgsl-shaders.js.map +1 -0
- package/dist/lib/shader-assembly/platform-defines.cjs +79 -0
- package/dist/lib/shader-assembly/platform-defines.d.ts +4 -0
- package/dist/lib/shader-assembly/platform-defines.d.ts.map +1 -0
- package/dist/lib/shader-assembly/platform-defines.js +52 -0
- package/dist/lib/shader-assembly/platform-defines.js.map +1 -0
- package/dist/lib/shader-assembly/platform-info.cjs +15 -0
- package/dist/lib/shader-assembly/platform-info.d.ts +20 -0
- package/dist/lib/shader-assembly/platform-info.d.ts.map +1 -0
- package/dist/lib/shader-assembly/platform-info.js +5 -0
- package/dist/lib/shader-assembly/platform-info.js.map +1 -0
- package/dist/lib/shader-assembly/shader-assembly-shared.cjs +96 -0
- package/dist/lib/shader-assembly/shader-assembly-shared.d.ts +16 -0
- package/dist/lib/shader-assembly/shader-assembly-shared.d.ts.map +1 -0
- package/dist/lib/shader-assembly/shader-assembly-shared.js +79 -0
- package/dist/lib/shader-assembly/shader-assembly-shared.js.map +1 -0
- package/dist/lib/shader-assembly/shader-assembly-types.cjs +15 -0
- package/dist/lib/shader-assembly/shader-assembly-types.d.ts +132 -0
- package/dist/lib/shader-assembly/shader-assembly-types.d.ts.map +1 -0
- package/dist/lib/shader-assembly/shader-assembly-types.js +5 -0
- package/dist/lib/shader-assembly/shader-assembly-types.js.map +1 -0
- package/dist/lib/shader-assembly/shader-injection-targets.cjs +103 -0
- package/dist/lib/shader-assembly/shader-injection-targets.d.ts +46 -0
- package/dist/lib/shader-assembly/shader-injection-targets.d.ts.map +1 -0
- package/dist/lib/shader-assembly/shader-injection-targets.js +83 -0
- package/dist/lib/shader-assembly/shader-injection-targets.js.map +1 -0
- package/dist/lib/shader-assembly/shader-injections.cjs +204 -0
- package/dist/lib/shader-assembly/shader-injections.d.ts +49 -0
- package/dist/lib/shader-assembly/shader-injections.d.ts.map +1 -0
- package/dist/lib/shader-assembly/shader-injections.js +207 -0
- package/dist/lib/shader-assembly/shader-injections.js.map +1 -0
- package/dist/lib/shader-assembly/shader-plugin-varyings.cjs +434 -0
- package/dist/lib/shader-assembly/shader-plugin-varyings.d.ts +15 -0
- package/dist/lib/shader-assembly/shader-plugin-varyings.d.ts.map +1 -0
- package/dist/lib/shader-assembly/shader-plugin-varyings.js +438 -0
- package/dist/lib/shader-assembly/shader-plugin-varyings.js.map +1 -0
- package/dist/lib/shader-assembly/shader-plugin-vertex-inputs.cjs +254 -0
- package/dist/lib/shader-assembly/shader-plugin-vertex-inputs.d.ts +12 -0
- package/dist/lib/shader-assembly/shader-plugin-vertex-inputs.d.ts.map +1 -0
- package/dist/lib/shader-assembly/shader-plugin-vertex-inputs.js +237 -0
- package/dist/lib/shader-assembly/shader-plugin-vertex-inputs.js.map +1 -0
- package/dist/lib/shader-assembly/wgsl-binding-debug.cjs +166 -0
- package/dist/lib/shader-assembly/wgsl-binding-debug.d.ts +37 -0
- package/dist/lib/shader-assembly/wgsl-binding-debug.d.ts.map +1 -0
- package/dist/lib/shader-assembly/wgsl-binding-debug.js +144 -0
- package/dist/lib/shader-assembly/wgsl-binding-debug.js.map +1 -0
- package/dist/lib/shader-assembly/wgsl-binding-scan.cjs +184 -0
- package/dist/lib/shader-assembly/wgsl-binding-scan.d.ts +19 -0
- package/dist/lib/shader-assembly/wgsl-binding-scan.d.ts.map +1 -0
- package/dist/lib/shader-assembly/wgsl-binding-scan.js +151 -0
- package/dist/lib/shader-assembly/wgsl-binding-scan.js.map +1 -0
- package/dist/lib/shader-assembly/wgsl-injection-target-names.cjs +163 -0
- package/dist/lib/shader-assembly/wgsl-injection-target-names.d.ts +8 -0
- package/dist/lib/shader-assembly/wgsl-injection-target-names.d.ts.map +1 -0
- package/dist/lib/shader-assembly/wgsl-injection-target-names.js +145 -0
- package/dist/lib/shader-assembly/wgsl-injection-target-names.js.map +1 -0
- package/dist/lib/shader-assembly/wgsl-interface-scan.cjs +502 -0
- package/dist/lib/shader-assembly/wgsl-interface-scan.d.ts +14 -0
- package/dist/lib/shader-assembly/wgsl-interface-scan.d.ts.map +1 -0
- package/dist/lib/shader-assembly/wgsl-interface-scan.js +498 -0
- package/dist/lib/shader-assembly/wgsl-interface-scan.js.map +1 -0
- package/dist/lib/shader-generator/generate-shader.cjs +36 -0
- package/dist/lib/shader-generator/generate-shader.d.ts +8 -0
- package/dist/lib/shader-generator/generate-shader.d.ts.map +1 -0
- package/dist/lib/shader-generator/generate-shader.js +15 -0
- package/dist/lib/shader-generator/generate-shader.js.map +1 -0
- package/dist/lib/shader-generator/glsl/generate-glsl.cjs +94 -0
- package/dist/lib/shader-generator/glsl/generate-glsl.d.ts +7 -0
- package/dist/lib/shader-generator/glsl/generate-glsl.d.ts.map +1 -0
- package/dist/lib/shader-generator/glsl/generate-glsl.js +79 -0
- package/dist/lib/shader-generator/glsl/generate-glsl.js.map +1 -0
- package/dist/lib/shader-generator/utils/capitalize.cjs +29 -0
- package/dist/lib/shader-generator/utils/capitalize.d.ts +7 -0
- package/dist/lib/shader-generator/utils/capitalize.d.ts.map +1 -0
- package/dist/lib/shader-generator/utils/capitalize.js +12 -0
- package/dist/lib/shader-generator/utils/capitalize.js.map +1 -0
- package/dist/lib/shader-generator/wgsl/generate-wgsl.cjs +46 -0
- package/dist/lib/shader-generator/wgsl/generate-wgsl.d.ts +7 -0
- package/dist/lib/shader-generator/wgsl/generate-wgsl.d.ts.map +1 -0
- package/dist/lib/shader-generator/wgsl/generate-wgsl.js +23 -0
- package/dist/lib/shader-generator/wgsl/generate-wgsl.js.map +1 -0
- package/dist/lib/shader-module/composite-shader-pass.cjs +15 -0
- package/dist/lib/shader-module/composite-shader-pass.d.ts +41 -0
- package/dist/lib/shader-module/composite-shader-pass.d.ts.map +1 -0
- package/dist/lib/shader-module/composite-shader-pass.js +5 -0
- package/dist/lib/shader-module/composite-shader-pass.js.map +1 -0
- package/dist/lib/shader-module/shader-module-dependencies.cjs +83 -0
- package/dist/lib/shader-module/shader-module-dependencies.d.ts +39 -0
- package/dist/lib/shader-module/shader-module-dependencies.d.ts.map +1 -0
- package/dist/lib/shader-module/shader-module-dependencies.js +103 -0
- package/dist/lib/shader-module/shader-module-dependencies.js.map +1 -0
- package/dist/lib/shader-module/shader-module-uniform-layout.cjs +224 -0
- package/dist/lib/shader-module/shader-module-uniform-layout.d.ts +91 -0
- package/dist/lib/shader-module/shader-module-uniform-layout.d.ts.map +1 -0
- package/dist/lib/shader-module/shader-module-uniform-layout.js +253 -0
- package/dist/lib/shader-module/shader-module-uniform-layout.js.map +1 -0
- package/dist/lib/shader-module/shader-module.cjs +99 -0
- package/dist/lib/shader-module/shader-module.d.ts +94 -0
- package/dist/lib/shader-module/shader-module.d.ts.map +1 -0
- package/dist/lib/shader-module/shader-module.js +101 -0
- package/dist/lib/shader-module/shader-module.js.map +1 -0
- package/dist/lib/shader-module/shader-pass.cjs +15 -0
- package/dist/lib/shader-module/shader-pass.d.ts +48 -0
- package/dist/lib/shader-module/shader-pass.d.ts.map +1 -0
- package/dist/lib/shader-module/shader-pass.js +5 -0
- package/dist/lib/shader-module/shader-pass.js.map +1 -0
- package/dist/lib/shader-plugin.cjs +156 -0
- package/dist/lib/shader-plugin.d.ts +61 -0
- package/dist/lib/shader-plugin.d.ts.map +1 -0
- package/dist/lib/shader-plugin.js +147 -0
- package/dist/lib/shader-plugin.js.map +1 -0
- package/dist/lib/shader-transpiler/shader-transpiler.cjs +15 -0
- package/dist/lib/shader-transpiler/shader-transpiler.d.ts +27 -0
- package/dist/lib/shader-transpiler/shader-transpiler.d.ts.map +1 -0
- package/dist/lib/shader-transpiler/shader-transpiler.js +5 -0
- package/dist/lib/shader-transpiler/shader-transpiler.js.map +1 -0
- package/dist/lib/shader-transpiler/transpile-glsl-shader.cjs +71 -0
- package/dist/lib/shader-transpiler/transpile-glsl-shader.d.ts +9 -0
- package/dist/lib/shader-transpiler/transpile-glsl-shader.d.ts.map +1 -0
- package/dist/lib/shader-transpiler/transpile-glsl-shader.js +69 -0
- package/dist/lib/shader-transpiler/transpile-glsl-shader.js.map +1 -0
- package/dist/lib/utils/assert.cjs +34 -0
- package/dist/lib/utils/assert.d.ts +2 -0
- package/dist/lib/utils/assert.d.ts.map +1 -0
- package/dist/lib/utils/assert.js +13 -0
- package/dist/lib/utils/assert.js.map +1 -0
- package/dist/lib/utils/uniform-types.cjs +15 -0
- package/dist/lib/utils/uniform-types.d.ts +18 -0
- package/dist/lib/utils/uniform-types.d.ts.map +1 -0
- package/dist/lib/utils/uniform-types.js +5 -0
- package/dist/lib/utils/uniform-types.js.map +1 -0
- package/dist/lib/wgsl-shader-assembler.cjs +99 -0
- package/dist/lib/wgsl-shader-assembler.d.ts +34 -0
- package/dist/lib/wgsl-shader-assembler.d.ts.map +1 -0
- package/dist/lib/wgsl-shader-assembler.js +84 -0
- package/dist/lib/wgsl-shader-assembler.js.map +1 -0
- package/dist/module-injectors.cjs +59 -0
- package/dist/module-injectors.d.ts +3 -0
- package/dist/module-injectors.d.ts.map +1 -0
- package/dist/module-injectors.js +31 -0
- package/dist/module-injectors.js.map +1 -0
- package/dist/modules/color/float-colors.cjs +275 -0
- package/dist/modules/color/float-colors.d.ts +132 -0
- package/dist/modules/color/float-colors.d.ts.map +1 -0
- package/dist/modules/color/float-colors.js +248 -0
- package/dist/modules/color/float-colors.js.map +1 -0
- package/dist/modules/engine/clip/clip.cjs +142 -0
- package/dist/modules/engine/clip/clip.d.ts +12 -0
- package/dist/modules/engine/clip/clip.d.ts.map +1 -0
- package/dist/modules/engine/clip/clip.js +119 -0
- package/dist/modules/engine/clip/clip.js.map +1 -0
- package/dist/modules/engine/filter/filter.cjs +103 -0
- package/dist/modules/engine/filter/filter.d.ts +12 -0
- package/dist/modules/engine/filter/filter.d.ts.map +1 -0
- package/dist/modules/engine/filter/filter.js +80 -0
- package/dist/modules/engine/filter/filter.js.map +1 -0
- package/dist/modules/engine/geometry/geometry.cjs +63 -0
- package/dist/modules/engine/geometry/geometry.d.ts +9 -0
- package/dist/modules/engine/geometry/geometry.d.ts.map +1 -0
- package/dist/modules/engine/geometry/geometry.js +42 -0
- package/dist/modules/engine/geometry/geometry.js.map +1 -0
- package/dist/modules/engine/gpu-animation/gpu-animation.cjs +255 -0
- package/dist/modules/engine/gpu-animation/gpu-animation.d.ts +34 -0
- package/dist/modules/engine/gpu-animation/gpu-animation.d.ts.map +1 -0
- package/dist/modules/engine/gpu-animation/gpu-animation.js +228 -0
- package/dist/modules/engine/gpu-animation/gpu-animation.js.map +1 -0
- package/dist/modules/engine/picking/picking.cjs +210 -0
- package/dist/modules/engine/picking/picking.d.ts +77 -0
- package/dist/modules/engine/picking/picking.d.ts.map +1 -0
- package/dist/modules/engine/picking/picking.js +198 -0
- package/dist/modules/engine/picking/picking.js.map +1 -0
- package/dist/modules/engine/project/project.cjs +138 -0
- package/dist/modules/engine/project/project.d.ts +39 -0
- package/dist/modules/engine/project/project.d.ts.map +1 -0
- package/dist/modules/engine/project/project.js +129 -0
- package/dist/modules/engine/project/project.js.map +1 -0
- package/dist/modules/engine/skin/skin.cjs +212 -0
- package/dist/modules/engine/skin/skin.d.ts +52 -0
- package/dist/modules/engine/skin/skin.d.ts.map +1 -0
- package/dist/modules/engine/skin/skin.js +179 -0
- package/dist/modules/engine/skin/skin.js.map +1 -0
- package/dist/modules/engine/transform/transform.cjs +72 -0
- package/dist/modules/engine/transform/transform.d.ts +6 -0
- package/dist/modules/engine/transform/transform.d.ts.map +1 -0
- package/dist/modules/engine/transform/transform.js +49 -0
- package/dist/modules/engine/transform/transform.js.map +1 -0
- package/dist/modules/geometry/path-dash/path-dash.cjs +93 -0
- package/dist/modules/geometry/path-dash/path-dash.d.ts +10 -0
- package/dist/modules/geometry/path-dash/path-dash.d.ts.map +1 -0
- package/dist/modules/geometry/path-dash/path-dash.js +66 -0
- package/dist/modules/geometry/path-dash/path-dash.js.map +1 -0
- package/dist/modules/geometry/pattern-fill/pattern-fill-shaders.cjs +117 -0
- package/dist/modules/geometry/pattern-fill/pattern-fill-shaders.d.ts +3 -0
- package/dist/modules/geometry/pattern-fill/pattern-fill-shaders.d.ts.map +1 -0
- package/dist/modules/geometry/pattern-fill/pattern-fill-shaders.js +87 -0
- package/dist/modules/geometry/pattern-fill/pattern-fill-shaders.js.map +1 -0
- package/dist/modules/geometry/pattern-fill/pattern-fill.cjs +64 -0
- package/dist/modules/geometry/pattern-fill/pattern-fill.d.ts +14 -0
- package/dist/modules/geometry/pattern-fill/pattern-fill.d.ts.map +1 -0
- package/dist/modules/geometry/pattern-fill/pattern-fill.js +43 -0
- package/dist/modules/geometry/pattern-fill/pattern-fill.js.map +1 -0
- package/dist/modules/geometry/point-glow/point-glow.cjs +104 -0
- package/dist/modules/geometry/point-glow/point-glow.d.ts +11 -0
- package/dist/modules/geometry/point-glow/point-glow.d.ts.map +1 -0
- package/dist/modules/geometry/point-glow/point-glow.js +77 -0
- package/dist/modules/geometry/point-glow/point-glow.js.map +1 -0
- package/dist/modules/geometry/precipitation/precipitation.cjs +122 -0
- package/dist/modules/geometry/precipitation/precipitation.d.ts +40 -0
- package/dist/modules/geometry/precipitation/precipitation.d.ts.map +1 -0
- package/dist/modules/geometry/precipitation/precipitation.js +95 -0
- package/dist/modules/geometry/precipitation/precipitation.js.map +1 -0
- package/dist/modules/geometry/sketch-stroke/sketch-stroke.cjs +158 -0
- package/dist/modules/geometry/sketch-stroke/sketch-stroke.d.ts +60 -0
- package/dist/modules/geometry/sketch-stroke/sketch-stroke.d.ts.map +1 -0
- package/dist/modules/geometry/sketch-stroke/sketch-stroke.js +137 -0
- package/dist/modules/geometry/sketch-stroke/sketch-stroke.js.map +1 -0
- package/dist/modules/geospatial/dggs/dggs-wgsl.cjs +2304 -0
- package/dist/modules/geospatial/dggs/dggs-wgsl.d.ts +3 -0
- package/dist/modules/geospatial/dggs/dggs-wgsl.d.ts.map +1 -0
- package/dist/modules/geospatial/dggs/dggs-wgsl.js +2283 -0
- package/dist/modules/geospatial/dggs/dggs-wgsl.js.map +1 -0
- package/dist/modules/geospatial/dggs/dggs.cjs +31 -0
- package/dist/modules/geospatial/dggs/dggs.d.ts +6 -0
- package/dist/modules/geospatial/dggs/dggs.d.ts.map +1 -0
- package/dist/modules/geospatial/dggs/dggs.js +10 -0
- package/dist/modules/geospatial/dggs/dggs.js.map +1 -0
- package/dist/modules/lighting/area-lighting/area-light-types.cjs +68 -0
- package/dist/modules/lighting/area-lighting/area-light-types.d.ts +34 -0
- package/dist/modules/lighting/area-lighting/area-light-types.d.ts.map +1 -0
- package/dist/modules/lighting/area-lighting/area-light-types.js +40 -0
- package/dist/modules/lighting/area-lighting/area-light-types.js.map +1 -0
- package/dist/modules/lighting/area-lighting/area-lighting-shaders.cjs +101 -0
- package/dist/modules/lighting/area-lighting/area-lighting-shaders.d.ts +3 -0
- package/dist/modules/lighting/area-lighting/area-lighting-shaders.d.ts.map +1 -0
- package/dist/modules/lighting/area-lighting/area-lighting-shaders.js +71 -0
- package/dist/modules/lighting/area-lighting/area-lighting-shaders.js.map +1 -0
- package/dist/modules/lighting/area-lighting/area-lighting.cjs +62 -0
- package/dist/modules/lighting/area-lighting/area-lighting.d.ts +89 -0
- package/dist/modules/lighting/area-lighting/area-lighting.d.ts.map +1 -0
- package/dist/modules/lighting/area-lighting/area-lighting.js +41 -0
- package/dist/modules/lighting/area-lighting/area-lighting.js.map +1 -0
- package/dist/modules/lighting/area-lighting/ltc-shaders.cjs +192 -0
- package/dist/modules/lighting/area-lighting/ltc-shaders.d.ts +3 -0
- package/dist/modules/lighting/area-lighting/ltc-shaders.d.ts.map +1 -0
- package/dist/modules/lighting/area-lighting/ltc-shaders.js +162 -0
- package/dist/modules/lighting/area-lighting/ltc-shaders.js.map +1 -0
- package/dist/modules/lighting/atmosphere/atmosphere.cjs +253 -0
- package/dist/modules/lighting/atmosphere/atmosphere.d.ts +45 -0
- package/dist/modules/lighting/atmosphere/atmosphere.d.ts.map +1 -0
- package/dist/modules/lighting/atmosphere/atmosphere.js +228 -0
- package/dist/modules/lighting/atmosphere/atmosphere.js.map +1 -0
- package/dist/modules/lighting/clouds/clouds.cjs +216 -0
- package/dist/modules/lighting/clouds/clouds.d.ts +58 -0
- package/dist/modules/lighting/clouds/clouds.d.ts.map +1 -0
- package/dist/modules/lighting/clouds/clouds.js +192 -0
- package/dist/modules/lighting/clouds/clouds.js.map +1 -0
- package/dist/modules/lighting/clustered-light-grid/clustered-light-grid.cjs +40 -0
- package/dist/modules/lighting/clustered-light-grid/clustered-light-grid.d.ts +6 -0
- package/dist/modules/lighting/clustered-light-grid/clustered-light-grid.d.ts.map +1 -0
- package/dist/modules/lighting/clustered-light-grid/clustered-light-grid.js +15 -0
- package/dist/modules/lighting/clustered-light-grid/clustered-light-grid.js.map +1 -0
- package/dist/modules/lighting/contact-shadow/contact-shadow.cjs +348 -0
- package/dist/modules/lighting/contact-shadow/contact-shadow.d.ts +188 -0
- package/dist/modules/lighting/contact-shadow/contact-shadow.d.ts.map +1 -0
- package/dist/modules/lighting/contact-shadow/contact-shadow.js +307 -0
- package/dist/modules/lighting/contact-shadow/contact-shadow.js.map +1 -0
- package/dist/modules/lighting/firefly/firefly.cjs +74 -0
- package/dist/modules/lighting/firefly/firefly.d.ts +36 -0
- package/dist/modules/lighting/firefly/firefly.d.ts.map +1 -0
- package/dist/modules/lighting/firefly/firefly.js +53 -0
- package/dist/modules/lighting/firefly/firefly.js.map +1 -0
- package/dist/modules/lighting/globe-clouds/globe-clouds.cjs +143 -0
- package/dist/modules/lighting/globe-clouds/globe-clouds.d.ts +53 -0
- package/dist/modules/lighting/globe-clouds/globe-clouds.d.ts.map +1 -0
- package/dist/modules/lighting/globe-clouds/globe-clouds.js +119 -0
- package/dist/modules/lighting/globe-clouds/globe-clouds.js.map +1 -0
- package/dist/modules/lighting/gouraud-material/gouraud-material.cjs +61 -0
- package/dist/modules/lighting/gouraud-material/gouraud-material.d.ts +12 -0
- package/dist/modules/lighting/gouraud-material/gouraud-material.d.ts.map +1 -0
- package/dist/modules/lighting/gouraud-material/gouraud-material.js +40 -0
- package/dist/modules/lighting/gouraud-material/gouraud-material.js.map +1 -0
- package/dist/modules/lighting/height-fog/height-fog-functions.cjs +139 -0
- package/dist/modules/lighting/height-fog/height-fog-functions.d.ts +14 -0
- package/dist/modules/lighting/height-fog/height-fog-functions.d.ts.map +1 -0
- package/dist/modules/lighting/height-fog/height-fog-functions.js +114 -0
- package/dist/modules/lighting/height-fog/height-fog-functions.js.map +1 -0
- package/dist/modules/lighting/height-fog/height-fog.cjs +104 -0
- package/dist/modules/lighting/height-fog/height-fog.d.ts +60 -0
- package/dist/modules/lighting/height-fog/height-fog.d.ts.map +1 -0
- package/dist/modules/lighting/height-fog/height-fog.js +77 -0
- package/dist/modules/lighting/height-fog/height-fog.js.map +1 -0
- package/dist/modules/lighting/ibl/ibl.cjs +63 -0
- package/dist/modules/lighting/ibl/ibl.d.ts +25 -0
- package/dist/modules/lighting/ibl/ibl.d.ts.map +1 -0
- package/dist/modules/lighting/ibl/ibl.js +33 -0
- package/dist/modules/lighting/ibl/ibl.js.map +1 -0
- package/dist/modules/lighting/lambert-material/lambert-material.cjs +54 -0
- package/dist/modules/lighting/lambert-material/lambert-material.d.ts +10 -0
- package/dist/modules/lighting/lambert-material/lambert-material.d.ts.map +1 -0
- package/dist/modules/lighting/lambert-material/lambert-material.js +33 -0
- package/dist/modules/lighting/lambert-material/lambert-material.js.map +1 -0
- package/dist/modules/lighting/lambert-material/lambert-shaders-glsl.cjs +88 -0
- package/dist/modules/lighting/lambert-material/lambert-shaders-glsl.d.ts +3 -0
- package/dist/modules/lighting/lambert-material/lambert-shaders-glsl.d.ts.map +1 -0
- package/dist/modules/lighting/lambert-material/lambert-shaders-glsl.js +60 -0
- package/dist/modules/lighting/lambert-material/lambert-shaders-glsl.js.map +1 -0
- package/dist/modules/lighting/lambert-material/lambert-shaders-wgsl.cjs +97 -0
- package/dist/modules/lighting/lambert-material/lambert-shaders-wgsl.d.ts +2 -0
- package/dist/modules/lighting/lambert-material/lambert-shaders-wgsl.d.ts.map +1 -0
- package/dist/modules/lighting/lambert-material/lambert-shaders-wgsl.js +73 -0
- package/dist/modules/lighting/lambert-material/lambert-shaders-wgsl.js.map +1 -0
- package/dist/modules/lighting/lights/lighting-glsl.cjs +116 -0
- package/dist/modules/lighting/lights/lighting-glsl.d.ts +2 -0
- package/dist/modules/lighting/lights/lighting-glsl.d.ts.map +1 -0
- package/dist/modules/lighting/lights/lighting-glsl.js +92 -0
- package/dist/modules/lighting/lights/lighting-glsl.js.map +1 -0
- package/dist/modules/lighting/lights/lighting-wgsl.cjs +115 -0
- package/dist/modules/lighting/lights/lighting-wgsl.d.ts +2 -0
- package/dist/modules/lighting/lights/lighting-wgsl.d.ts.map +1 -0
- package/dist/modules/lighting/lights/lighting-wgsl.js +91 -0
- package/dist/modules/lighting/lights/lighting-wgsl.js.map +1 -0
- package/dist/modules/lighting/lights/lighting.cjs +210 -0
- package/dist/modules/lighting/lights/lighting.d.ts +163 -0
- package/dist/modules/lighting/lights/lighting.d.ts.map +1 -0
- package/dist/modules/lighting/lights/lighting.js +208 -0
- package/dist/modules/lighting/lights/lighting.js.map +1 -0
- package/dist/modules/lighting/no-material/dirlight.cjs +112 -0
- package/dist/modules/lighting/no-material/dirlight.d.ts +33 -0
- package/dist/modules/lighting/no-material/dirlight.d.ts.map +1 -0
- package/dist/modules/lighting/no-material/dirlight.js +86 -0
- package/dist/modules/lighting/no-material/dirlight.js.map +1 -0
- package/dist/modules/lighting/pbr-ambient-occlusion/pbr-ambient-occlusion.cjs +87 -0
- package/dist/modules/lighting/pbr-ambient-occlusion/pbr-ambient-occlusion.d.ts +21 -0
- package/dist/modules/lighting/pbr-ambient-occlusion/pbr-ambient-occlusion.d.ts.map +1 -0
- package/dist/modules/lighting/pbr-ambient-occlusion/pbr-ambient-occlusion.js +61 -0
- package/dist/modules/lighting/pbr-ambient-occlusion/pbr-ambient-occlusion.js.map +1 -0
- package/dist/modules/lighting/pbr-contact-shadow/pbr-contact-shadow.cjs +87 -0
- package/dist/modules/lighting/pbr-contact-shadow/pbr-contact-shadow.d.ts +21 -0
- package/dist/modules/lighting/pbr-contact-shadow/pbr-contact-shadow.d.ts.map +1 -0
- package/dist/modules/lighting/pbr-contact-shadow/pbr-contact-shadow.js +61 -0
- package/dist/modules/lighting/pbr-contact-shadow/pbr-contact-shadow.js.map +1 -0
- package/dist/modules/lighting/pbr-material/pbr-material-glsl.cjs +1789 -0
- package/dist/modules/lighting/pbr-material/pbr-material-glsl.d.ts +3 -0
- package/dist/modules/lighting/pbr-material/pbr-material-glsl.d.ts.map +1 -0
- package/dist/modules/lighting/pbr-material/pbr-material-glsl.js +1767 -0
- package/dist/modules/lighting/pbr-material/pbr-material-glsl.js.map +1 -0
- package/dist/modules/lighting/pbr-material/pbr-material-wgsl.cjs +2084 -0
- package/dist/modules/lighting/pbr-material/pbr-material-wgsl.d.ts +3 -0
- package/dist/modules/lighting/pbr-material/pbr-material-wgsl.d.ts.map +1 -0
- package/dist/modules/lighting/pbr-material/pbr-material-wgsl.js +2062 -0
- package/dist/modules/lighting/pbr-material/pbr-material-wgsl.js.map +1 -0
- package/dist/modules/lighting/pbr-material/pbr-material.cjs +315 -0
- package/dist/modules/lighting/pbr-material/pbr-material.d.ts +516 -0
- package/dist/modules/lighting/pbr-material/pbr-material.d.ts.map +1 -0
- package/dist/modules/lighting/pbr-material/pbr-material.js +292 -0
- package/dist/modules/lighting/pbr-material/pbr-material.js.map +1 -0
- package/dist/modules/lighting/pbr-material/pbr-projection.cjs +63 -0
- package/dist/modules/lighting/pbr-material/pbr-projection.d.ts +10 -0
- package/dist/modules/lighting/pbr-material/pbr-projection.d.ts.map +1 -0
- package/dist/modules/lighting/pbr-material/pbr-projection.js +37 -0
- package/dist/modules/lighting/pbr-material/pbr-projection.js.map +1 -0
- package/dist/modules/lighting/pbr-material/pbr-scene.cjs +109 -0
- package/dist/modules/lighting/pbr-material/pbr-scene.d.ts +52 -0
- package/dist/modules/lighting/pbr-material/pbr-scene.d.ts.map +1 -0
- package/dist/modules/lighting/pbr-material/pbr-scene.js +83 -0
- package/dist/modules/lighting/pbr-material/pbr-scene.js.map +1 -0
- package/dist/modules/lighting/pbr-shadow/pbr-shadow.cjs +97 -0
- package/dist/modules/lighting/pbr-shadow/pbr-shadow.d.ts +15 -0
- package/dist/modules/lighting/pbr-shadow/pbr-shadow.d.ts.map +1 -0
- package/dist/modules/lighting/pbr-shadow/pbr-shadow.js +69 -0
- package/dist/modules/lighting/pbr-shadow/pbr-shadow.js.map +1 -0
- package/dist/modules/lighting/pbr-surface/pbr-surface.cjs +114 -0
- package/dist/modules/lighting/pbr-surface/pbr-surface.d.ts +15 -0
- package/dist/modules/lighting/pbr-surface/pbr-surface.d.ts.map +1 -0
- package/dist/modules/lighting/pbr-surface/pbr-surface.js +88 -0
- package/dist/modules/lighting/pbr-surface/pbr-surface.js.map +1 -0
- package/dist/modules/lighting/phong-material/phong-material.cjs +61 -0
- package/dist/modules/lighting/phong-material/phong-material.d.ts +13 -0
- package/dist/modules/lighting/phong-material/phong-material.d.ts.map +1 -0
- package/dist/modules/lighting/phong-material/phong-material.js +40 -0
- package/dist/modules/lighting/phong-material/phong-material.js.map +1 -0
- package/dist/modules/lighting/phong-material/phong-shaders-glsl.cjs +100 -0
- package/dist/modules/lighting/phong-material/phong-shaders-glsl.d.ts +3 -0
- package/dist/modules/lighting/phong-material/phong-shaders-glsl.d.ts.map +1 -0
- package/dist/modules/lighting/phong-material/phong-shaders-glsl.js +72 -0
- package/dist/modules/lighting/phong-material/phong-shaders-glsl.js.map +1 -0
- package/dist/modules/lighting/phong-material/phong-shaders-wgsl.cjs +153 -0
- package/dist/modules/lighting/phong-material/phong-shaders-wgsl.d.ts +2 -0
- package/dist/modules/lighting/phong-material/phong-shaders-wgsl.d.ts.map +1 -0
- package/dist/modules/lighting/phong-material/phong-shaders-wgsl.js +129 -0
- package/dist/modules/lighting/phong-material/phong-shaders-wgsl.js.map +1 -0
- package/dist/modules/lighting/prefiltered-environment/prefiltered-environment.cjs +379 -0
- package/dist/modules/lighting/prefiltered-environment/prefiltered-environment.d.ts +41 -0
- package/dist/modules/lighting/prefiltered-environment/prefiltered-environment.d.ts.map +1 -0
- package/dist/modules/lighting/prefiltered-environment/prefiltered-environment.js +345 -0
- package/dist/modules/lighting/prefiltered-environment/prefiltered-environment.js.map +1 -0
- package/dist/modules/lighting/shadow/shadow-glsl.cjs +228 -0
- package/dist/modules/lighting/shadow/shadow-glsl.d.ts +3 -0
- package/dist/modules/lighting/shadow/shadow-glsl.d.ts.map +1 -0
- package/dist/modules/lighting/shadow/shadow-glsl.js +204 -0
- package/dist/modules/lighting/shadow/shadow-glsl.js.map +1 -0
- package/dist/modules/lighting/shadow/shadow-types.cjs +15 -0
- package/dist/modules/lighting/shadow/shadow-types.d.ts +63 -0
- package/dist/modules/lighting/shadow/shadow-types.d.ts.map +1 -0
- package/dist/modules/lighting/shadow/shadow-types.js +5 -0
- package/dist/modules/lighting/shadow/shadow-types.js.map +1 -0
- package/dist/modules/lighting/shadow/shadow.cjs +458 -0
- package/dist/modules/lighting/shadow/shadow.d.ts +117 -0
- package/dist/modules/lighting/shadow/shadow.d.ts.map +1 -0
- package/dist/modules/lighting/shadow/shadow.js +450 -0
- package/dist/modules/lighting/shadow/shadow.js.map +1 -0
- package/dist/modules/lighting/surface-weather/surface-weather.cjs +199 -0
- package/dist/modules/lighting/surface-weather/surface-weather.d.ts +54 -0
- package/dist/modules/lighting/surface-weather/surface-weather.d.ts.map +1 -0
- package/dist/modules/lighting/surface-weather/surface-weather.js +175 -0
- package/dist/modules/lighting/surface-weather/surface-weather.js.map +1 -0
- package/dist/modules/lighting/unlit-material/unlit-material.cjs +60 -0
- package/dist/modules/lighting/unlit-material/unlit-material.d.ts +9 -0
- package/dist/modules/lighting/unlit-material/unlit-material.d.ts.map +1 -0
- package/dist/modules/lighting/unlit-material/unlit-material.js +40 -0
- package/dist/modules/lighting/unlit-material/unlit-material.js.map +1 -0
- package/dist/modules/lighting/water-material/river-water-material.cjs +56 -0
- package/dist/modules/lighting/water-material/river-water-material.d.ts +21 -0
- package/dist/modules/lighting/water-material/river-water-material.d.ts.map +1 -0
- package/dist/modules/lighting/water-material/river-water-material.js +36 -0
- package/dist/modules/lighting/water-material/river-water-material.js.map +1 -0
- package/dist/modules/lighting/water-material/river-water-shaders.cjs +261 -0
- package/dist/modules/lighting/water-material/river-water-shaders.d.ts +3 -0
- package/dist/modules/lighting/water-material/river-water-shaders.d.ts.map +1 -0
- package/dist/modules/lighting/water-material/river-water-shaders.js +233 -0
- package/dist/modules/lighting/water-material/river-water-shaders.js.map +1 -0
- package/dist/modules/lighting/water-material/water-material.cjs +188 -0
- package/dist/modules/lighting/water-material/water-material.d.ts +28 -0
- package/dist/modules/lighting/water-material/water-material.d.ts.map +1 -0
- package/dist/modules/lighting/water-material/water-material.js +179 -0
- package/dist/modules/lighting/water-material/water-material.js.map +1 -0
- package/dist/modules/lighting/water-material/water-shaders-glsl.cjs +260 -0
- package/dist/modules/lighting/water-material/water-shaders-glsl.d.ts +3 -0
- package/dist/modules/lighting/water-material/water-shaders-glsl.d.ts.map +1 -0
- package/dist/modules/lighting/water-material/water-shaders-glsl.js +232 -0
- package/dist/modules/lighting/water-material/water-shaders-glsl.js.map +1 -0
- package/dist/modules/lighting/water-material/water-shaders-wgsl.cjs +254 -0
- package/dist/modules/lighting/water-material/water-shaders-wgsl.d.ts +2 -0
- package/dist/modules/lighting/water-material/water-shaders-wgsl.d.ts.map +1 -0
- package/dist/modules/lighting/water-material/water-shaders-wgsl.js +230 -0
- package/dist/modules/lighting/water-material/water-shaders-wgsl.js.map +1 -0
- package/dist/modules/math/fp16/fp16-utils.cjs +112 -0
- package/dist/modules/math/fp16/fp16-utils.d.ts +13 -0
- package/dist/modules/math/fp16/fp16-utils.d.ts.map +1 -0
- package/dist/modules/math/fp16/fp16-utils.js +118 -0
- package/dist/modules/math/fp16/fp16-utils.js.map +1 -0
- package/dist/modules/math/fp32/fp32.cjs +310 -0
- package/dist/modules/math/fp32/fp32.d.ts +9 -0
- package/dist/modules/math/fp32/fp32.d.ts.map +1 -0
- package/dist/modules/math/fp32/fp32.js +288 -0
- package/dist/modules/math/fp32/fp32.js.map +1 -0
- package/dist/modules/math/fp64/fp64-arithmetic-glsl.cjs +229 -0
- package/dist/modules/math/fp64/fp64-arithmetic-glsl.d.ts +2 -0
- package/dist/modules/math/fp64/fp64-arithmetic-glsl.d.ts.map +1 -0
- package/dist/modules/math/fp64/fp64-arithmetic-glsl.js +205 -0
- package/dist/modules/math/fp64/fp64-arithmetic-glsl.js.map +1 -0
- package/dist/modules/math/fp64/fp64-arithmetic-wgsl-hybrid.cjs +144 -0
- package/dist/modules/math/fp64/fp64-arithmetic-wgsl-hybrid.d.ts +10 -0
- package/dist/modules/math/fp64/fp64-arithmetic-wgsl-hybrid.d.ts.map +1 -0
- package/dist/modules/math/fp64/fp64-arithmetic-wgsl-hybrid.js +128 -0
- package/dist/modules/math/fp64/fp64-arithmetic-wgsl-hybrid.js.map +1 -0
- package/dist/modules/math/fp64/fp64-arithmetic-wgsl-integer.cjs +583 -0
- package/dist/modules/math/fp64/fp64-arithmetic-wgsl-integer.d.ts +11 -0
- package/dist/modules/math/fp64/fp64-arithmetic-wgsl-integer.d.ts.map +1 -0
- package/dist/modules/math/fp64/fp64-arithmetic-wgsl-integer.js +563 -0
- package/dist/modules/math/fp64/fp64-arithmetic-wgsl-integer.js.map +1 -0
- package/dist/modules/math/fp64/fp64-arithmetic-wgsl.cjs +946 -0
- package/dist/modules/math/fp64/fp64-arithmetic-wgsl.d.ts +3 -0
- package/dist/modules/math/fp64/fp64-arithmetic-wgsl.d.ts.map +1 -0
- package/dist/modules/math/fp64/fp64-arithmetic-wgsl.js +923 -0
- package/dist/modules/math/fp64/fp64-arithmetic-wgsl.js.map +1 -0
- package/dist/modules/math/fp64/fp64-functions-glsl.cjs +699 -0
- package/dist/modules/math/fp64/fp64-functions-glsl.d.ts +2 -0
- package/dist/modules/math/fp64/fp64-functions-glsl.d.ts.map +1 -0
- package/dist/modules/math/fp64/fp64-functions-glsl.js +675 -0
- package/dist/modules/math/fp64/fp64-functions-glsl.js.map +1 -0
- package/dist/modules/math/fp64/fp64-functions-wgsl.cjs +180 -0
- package/dist/modules/math/fp64/fp64-functions-wgsl.d.ts +3 -0
- package/dist/modules/math/fp64/fp64-functions-wgsl.d.ts.map +1 -0
- package/dist/modules/math/fp64/fp64-functions-wgsl.js +157 -0
- package/dist/modules/math/fp64/fp64-functions-wgsl.js.map +1 -0
- package/dist/modules/math/fp64/fp64-utils.cjs +50 -0
- package/dist/modules/math/fp64/fp64-utils.d.ts +22 -0
- package/dist/modules/math/fp64/fp64-utils.d.ts.map +1 -0
- package/dist/modules/math/fp64/fp64-utils.js +42 -0
- package/dist/modules/math/fp64/fp64-utils.js.map +1 -0
- package/dist/modules/math/fp64/fp64.cjs +68 -0
- package/dist/modules/math/fp64/fp64.d.ts +24 -0
- package/dist/modules/math/fp64/fp64.d.ts.map +1 -0
- package/dist/modules/math/fp64/fp64.js +46 -0
- package/dist/modules/math/fp64/fp64.js.map +1 -0
- package/dist/modules/math/random/random.cjs +46 -0
- package/dist/modules/math/random/random.d.ts +7 -0
- package/dist/modules/math/random/random.d.ts.map +1 -0
- package/dist/modules/math/random/random.js +21 -0
- package/dist/modules/math/random/random.js.map +1 -0
- package/dist/modules/math/value-noise/value-noise.cjs +95 -0
- package/dist/modules/math/value-noise/value-noise.d.ts +7 -0
- package/dist/modules/math/value-noise/value-noise.d.ts.map +1 -0
- package/dist/modules/math/value-noise/value-noise.js +68 -0
- package/dist/modules/math/value-noise/value-noise.js.map +1 -0
- package/dist/modules/volume/volume-raymarch.cjs +107 -0
- package/dist/modules/volume/volume-raymarch.d.ts +6 -0
- package/dist/modules/volume/volume-raymarch.d.ts.map +1 -0
- package/dist/modules/volume/volume-raymarch.js +84 -0
- package/dist/modules/volume/volume-raymarch.js.map +1 -0
- package/dist/types/align-to.cjs +38 -0
- package/dist/types/align-to.d.ts +3 -0
- package/dist/types/align-to.d.ts.map +1 -0
- package/dist/types/align-to.js +13 -0
- package/dist/types/align-to.js.map +1 -0
- package/dist/types/primitive-data-types.cjs +15 -0
- package/dist/types/primitive-data-types.d.ts +7 -0
- package/dist/types/primitive-data-types.d.ts.map +1 -0
- package/dist/types/primitive-data-types.js +5 -0
- package/dist/types/primitive-data-types.js.map +1 -0
- package/dist/types/sampler-props.cjs +15 -0
- package/dist/types/sampler-props.d.ts +26 -0
- package/dist/types/sampler-props.d.ts.map +1 -0
- package/dist/types/sampler-props.js +5 -0
- package/dist/types/sampler-props.js.map +1 -0
- package/dist/types/shader-block-layout.cjs +184 -0
- package/dist/types/shader-block-layout.d.ts +72 -0
- package/dist/types/shader-block-layout.d.ts.map +1 -0
- package/dist/types/shader-block-layout.js +209 -0
- package/dist/types/shader-block-layout.js.map +1 -0
- package/dist/types/shader-layout.cjs +15 -0
- package/dist/types/shader-layout.d.ts +178 -0
- package/dist/types/shader-layout.d.ts.map +1 -0
- package/dist/types/shader-layout.js +5 -0
- package/dist/types/shader-layout.js.map +1 -0
- package/dist/types/shader-type-decoder.cjs +240 -0
- package/dist/types/shader-type-decoder.d.ts +41 -0
- package/dist/types/shader-type-decoder.d.ts.map +1 -0
- package/dist/types/shader-type-decoder.js +210 -0
- package/dist/types/shader-type-decoder.js.map +1 -0
- package/dist/types/shader-types.cjs +15 -0
- package/dist/types/shader-types.d.ts +101 -0
- package/dist/types/shader-types.d.ts.map +1 -0
- package/dist/types/shader-types.js +30 -0
- package/dist/types/shader-types.js.map +1 -0
- package/dist/types/texture-formats.cjs +15 -0
- package/dist/types/texture-formats.d.ts +24 -0
- package/dist/types/texture-formats.d.ts.map +1 -0
- package/dist/types/texture-formats.js +5 -0
- package/dist/types/texture-formats.js.map +1 -0
- package/dist/types.cjs +53 -0
- package/dist/types.cjs.map +6 -0
- package/dist/types.d.ts +14 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/dist/wgsl.cjs +55 -0
- package/dist/wgsl.cjs.map +6 -0
- package/dist/wgsl.d.ts +8 -0
- package/dist/wgsl.d.ts.map +1 -0
- package/dist/wgsl.js +9 -0
- package/dist/wgsl.js.map +1 -0
- package/package.json +65 -4
- package/src/glsl.ts +13 -0
- package/src/index.ts +307 -0
- package/src/lib/color/normalize-byte-colors.ts +57 -0
- package/src/lib/filters/prop-types.ts +150 -0
- package/src/lib/glsl-shader-assembler.ts +39 -0
- package/src/lib/glsl-utils/get-shader-info.ts +42 -0
- package/src/lib/glsl-utils/shader-utils.ts +110 -0
- package/src/lib/preprocessor/preprocessor.ts +157 -0
- package/src/lib/shader-assembler-base.ts +169 -0
- package/src/lib/shader-assembler.ts +7 -0
- package/src/lib/shader-assembly/assemble-glsl-shaders.ts +305 -0
- package/src/lib/shader-assembly/assemble-shaders.ts +13 -0
- package/src/lib/shader-assembly/assemble-wgsl-shaders.ts +830 -0
- package/src/lib/shader-assembly/platform-defines.ts +58 -0
- package/src/lib/shader-assembly/platform-info.ts +23 -0
- package/src/lib/shader-assembly/shader-assembly-shared.ts +95 -0
- package/src/lib/shader-assembly/shader-assembly-types.ts +146 -0
- package/src/lib/shader-assembly/shader-injection-targets.ts +148 -0
- package/src/lib/shader-assembly/shader-injections.ts +298 -0
- package/src/lib/shader-assembly/shader-plugin-varyings.ts +555 -0
- package/src/lib/shader-assembly/shader-plugin-vertex-inputs.ts +279 -0
- package/src/lib/shader-assembly/wgsl-binding-debug.ts +227 -0
- package/src/lib/shader-assembly/wgsl-binding-scan.ts +228 -0
- package/src/lib/shader-assembly/wgsl-injection-target-names.ts +180 -0
- package/src/lib/shader-assembly/wgsl-interface-scan.ts +676 -0
- package/src/lib/shader-generator/generate-shader.ts +27 -0
- package/src/lib/shader-generator/glsl/generate-glsl.ts +101 -0
- package/src/lib/shader-generator/utils/capitalize.ts +12 -0
- package/src/lib/shader-generator/wgsl/generate-wgsl.ts +40 -0
- package/src/lib/shader-module/composite-shader-pass.ts +47 -0
- package/src/lib/shader-module/shader-module-dependencies.ts +128 -0
- package/src/lib/shader-module/shader-module-uniform-layout.ts +420 -0
- package/src/lib/shader-module/shader-module.ts +237 -0
- package/src/lib/shader-module/shader-pass.ts +69 -0
- package/src/lib/shader-plugin.ts +236 -0
- package/src/lib/shader-transpiler/shader-transpiler.ts +34 -0
- package/src/lib/shader-transpiler/transpile-glsl-shader.ts +78 -0
- package/src/lib/utils/assert.ts +13 -0
- package/src/lib/utils/uniform-types.ts +89 -0
- package/src/lib/wgsl-shader-assembler.ts +122 -0
- package/src/module-injectors.ts +32 -0
- package/src/modules/color/float-colors.ts +334 -0
- package/src/modules/engine/clip/clip.ts +139 -0
- package/src/modules/engine/filter/filter.ts +99 -0
- package/src/modules/engine/geometry/geometry.ts +45 -0
- package/src/modules/engine/gpu-animation/gpu-animation.ts +244 -0
- package/src/modules/engine/picking/README.md +88 -0
- package/src/modules/engine/picking/picking.ts +252 -0
- package/src/modules/engine/project/project.ts +166 -0
- package/src/modules/engine/skin/skin.ts +233 -0
- package/src/modules/engine/transform/transform.ts +50 -0
- package/src/modules/geometry/path-dash/path-dash.ts +68 -0
- package/src/modules/geometry/pattern-fill/pattern-fill-shaders.ts +88 -0
- package/src/modules/geometry/pattern-fill/pattern-fill.ts +54 -0
- package/src/modules/geometry/point-glow/point-glow.ts +87 -0
- package/src/modules/geometry/precipitation/README.md +19 -0
- package/src/modules/geometry/precipitation/precipitation.ts +108 -0
- package/src/modules/geometry/sketch-stroke/sketch-stroke.ts +160 -0
- package/src/modules/geospatial/dggs/dggs-wgsl.ts +2284 -0
- package/src/modules/geospatial/dggs/dggs.ts +12 -0
- package/src/modules/lighting/area-lighting/area-light-types.ts +71 -0
- package/src/modules/lighting/area-lighting/area-lighting-shaders.ts +72 -0
- package/src/modules/lighting/area-lighting/area-lighting.ts +63 -0
- package/src/modules/lighting/area-lighting/ltc-shaders.ts +163 -0
- package/src/modules/lighting/atmosphere/README.md +25 -0
- package/src/modules/lighting/atmosphere/atmosphere.ts +246 -0
- package/src/modules/lighting/clouds/README.md +24 -0
- package/src/modules/lighting/clouds/clouds.ts +216 -0
- package/src/modules/lighting/clustered-light-grid/clustered-light-grid.ts +17 -0
- package/src/modules/lighting/contact-shadow/contact-shadow.ts +365 -0
- package/src/modules/lighting/firefly/firefly.ts +64 -0
- package/src/modules/lighting/globe-clouds/globe-clouds.ts +124 -0
- package/src/modules/lighting/gouraud-material/gouraud-material.ts +55 -0
- package/src/modules/lighting/height-fog/README.md +36 -0
- package/src/modules/lighting/height-fog/height-fog-functions.ts +116 -0
- package/src/modules/lighting/height-fog/height-fog.ts +96 -0
- package/src/modules/lighting/ibl/ibl.ts +43 -0
- package/src/modules/lighting/lambert-material/lambert-material.ts +42 -0
- package/src/modules/lighting/lambert-material/lambert-shaders-glsl.ts +61 -0
- package/src/modules/lighting/lambert-material/lambert-shaders-wgsl.ts +73 -0
- package/src/modules/lighting/lights/lighting-glsl.ts +92 -0
- package/src/modules/lighting/lights/lighting-wgsl.ts +91 -0
- package/src/modules/lighting/lights/lighting.ts +385 -0
- package/src/modules/lighting/no-material/dirlight.ts +101 -0
- package/src/modules/lighting/pbr-ambient-occlusion/pbr-ambient-occlusion.ts +78 -0
- package/src/modules/lighting/pbr-contact-shadow/pbr-contact-shadow.ts +78 -0
- package/src/modules/lighting/pbr-material/pbr-material-glsl.ts +1770 -0
- package/src/modules/lighting/pbr-material/pbr-material-wgsl.ts +2065 -0
- package/src/modules/lighting/pbr-material/pbr-material.ts +517 -0
- package/src/modules/lighting/pbr-material/pbr-projection.ts +50 -0
- package/src/modules/lighting/pbr-material/pbr-scene.ts +112 -0
- package/src/modules/lighting/pbr-shadow/pbr-shadow.ts +85 -0
- package/src/modules/lighting/pbr-surface/pbr-surface.ts +103 -0
- package/src/modules/lighting/phong-material/phong-material.ts +53 -0
- package/src/modules/lighting/phong-material/phong-shaders-glsl.ts +73 -0
- package/src/modules/lighting/phong-material/phong-shaders-wgsl.ts +129 -0
- package/src/modules/lighting/prefiltered-environment/prefiltered-environment.ts +370 -0
- package/src/modules/lighting/shadow/shadow-glsl.ts +204 -0
- package/src/modules/lighting/shadow/shadow-types.ts +68 -0
- package/src/modules/lighting/shadow/shadow.ts +536 -0
- package/src/modules/lighting/surface-weather/README.md +28 -0
- package/src/modules/lighting/surface-weather/surface-weather.ts +198 -0
- package/src/modules/lighting/unlit-material/unlit-material.ts +44 -0
- package/src/modules/lighting/water-material/river-water-material.ts +58 -0
- package/src/modules/lighting/water-material/river-water-shaders.ts +234 -0
- package/src/modules/lighting/water-material/water-material.ts +234 -0
- package/src/modules/lighting/water-material/water-shaders-glsl.ts +233 -0
- package/src/modules/lighting/water-material/water-shaders-wgsl.ts +230 -0
- package/src/modules/math/fp16/fp16-utils.ts +156 -0
- package/src/modules/math/fp32/fp32.ts +291 -0
- package/src/modules/math/fp64/fp64-arithmetic-glsl.ts +205 -0
- package/src/modules/math/fp64/fp64-arithmetic-wgsl-hybrid.ts +129 -0
- package/src/modules/math/fp64/fp64-arithmetic-wgsl-integer.ts +564 -0
- package/src/modules/math/fp64/fp64-arithmetic-wgsl.ts +924 -0
- package/src/modules/math/fp64/fp64-functions-glsl.ts +675 -0
- package/src/modules/math/fp64/fp64-functions-wgsl.ts +157 -0
- package/src/modules/math/fp64/fp64-utils.ts +46 -0
- package/src/modules/math/fp64/fp64.ts +64 -0
- package/src/modules/math/random/random.ts +25 -0
- package/src/modules/math/value-noise/value-noise.ts +70 -0
- package/src/modules/volume/volume-raymarch.ts +87 -0
- package/src/types/align-to.ts +13 -0
- package/src/types/primitive-data-types.ts +10 -0
- package/src/types/sampler-props.ts +39 -0
- package/src/types/shader-block-layout.ts +340 -0
- package/src/types/shader-layout.ts +208 -0
- package/src/types/shader-type-decoder.ts +285 -0
- package/src/types/shader-types.ts +207 -0
- package/src/types/texture-formats.ts +157 -0
- package/src/types.ts +116 -0
- package/src/wgsl.ts +34 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export type GlobeCloudUniforms = {
|
|
2
|
+
planetRadius: number;
|
|
3
|
+
};
|
|
4
|
+
export type GlobeCloudProps = Partial<GlobeCloudUniforms>;
|
|
5
|
+
/** Spherical cloud shell using the existing cloud density, noise and sunlight model.
|
|
6
|
+
* Camera and rays are globe-centered, with the planet's surface at unit radius.
|
|
7
|
+
* The shared clouds uniforms retain metre/second units; sunDirection is globe-centered XYZ.
|
|
8
|
+
*/
|
|
9
|
+
export declare const globeClouds: {
|
|
10
|
+
readonly name: "globeClouds";
|
|
11
|
+
readonly dependencies: [{
|
|
12
|
+
readonly name: "clouds";
|
|
13
|
+
readonly dependencies: [{
|
|
14
|
+
readonly name: "valueNoise";
|
|
15
|
+
readonly fs: "\nfloat valueNoise_hash(vec2 cell) {\n vec3 value = fract(vec3(cell.x, cell.y, cell.x) * 0.1031);\n value += dot(value, value.yzx + 33.33);\n return fract((value.x + value.y) * value.z);\n}\nfloat valueNoise_noise(vec2 position) {\n vec2 cell = floor(position);\n vec2 fraction = fract(position);\n vec2 blend = fraction * fraction * (3.0 - 2.0 * fraction);\n return mix(mix(valueNoise_hash(cell), valueNoise_hash(cell + vec2(1.0, 0.0)), blend.x),\n mix(valueNoise_hash(cell + vec2(0.0, 1.0)), valueNoise_hash(cell + vec2(1.0)), blend.x), blend.y);\n}\n\nfloat valueNoise_hash3(vec3 cell) {\n vec3 value = fract(cell * 0.1031);\n value += dot(value, value.yzx + 33.33);\n return fract((value.x + value.y) * value.z);\n}\nfloat valueNoise_noise3(vec3 position) {\n vec3 cell = floor(position);\n vec3 fraction = fract(position);\n vec3 blend = fraction * fraction * (3.0 - 2.0 * fraction);\n float bottom = mix(mix(valueNoise_hash3(cell), valueNoise_hash3(cell + vec3(1.0, 0.0, 0.0)), blend.x),\n mix(valueNoise_hash3(cell + vec3(0.0, 1.0, 0.0)), valueNoise_hash3(cell + vec3(1.0, 1.0, 0.0)), blend.x), blend.y);\n float top = mix(mix(valueNoise_hash3(cell + vec3(0.0, 0.0, 1.0)), valueNoise_hash3(cell + vec3(1.0, 0.0, 1.0)), blend.x),\n mix(valueNoise_hash3(cell + vec3(0.0, 1.0, 1.0)), valueNoise_hash3(cell + vec3(1.0)), blend.x), blend.y);\n return mix(bottom, top, blend.z);\n}\n";
|
|
16
|
+
readonly source: "\nfn valueNoise_hash(cell: vec2f) -> f32 {\n var value = fract(vec3f(cell.x, cell.y, cell.x) * 0.1031);\n value += vec3f(dot(value, value.yzx + vec3f(33.33)));\n return fract((value.x + value.y) * value.z);\n}\nfn valueNoise_noise(position: vec2f) -> f32 {\n let cell = floor(position);\n let fraction = fract(position);\n let blend = fraction * fraction * (vec2f(3.0) - 2.0 * fraction);\n return mix(mix(valueNoise_hash(cell), valueNoise_hash(cell + vec2f(1.0, 0.0)), blend.x),\n mix(valueNoise_hash(cell + vec2f(0.0, 1.0)), valueNoise_hash(cell + vec2f(1.0)), blend.x), blend.y);\n}\n\nfn valueNoise_hash3(cell: vec3f) -> f32 {\n var value = fract(cell * 0.1031);\n value += vec3f(dot(value, value.yzx + vec3f(33.33)));\n return fract((value.x + value.y) * value.z);\n}\nfn valueNoise_noise3(position: vec3f) -> f32 {\n let cell = floor(position);\n let fraction = fract(position);\n let blend = fraction * fraction * (vec3f(3.0) - 2.0 * fraction);\n let bottom = mix(mix(valueNoise_hash3(cell), valueNoise_hash3(cell + vec3f(1.0, 0.0, 0.0)), blend.x),\n mix(valueNoise_hash3(cell + vec3f(0.0, 1.0, 0.0)), valueNoise_hash3(cell + vec3f(1.0, 1.0, 0.0)), blend.x), blend.y);\n let top = mix(mix(valueNoise_hash3(cell + vec3f(0.0, 0.0, 1.0)), valueNoise_hash3(cell + vec3f(1.0, 0.0, 1.0)), blend.x),\n mix(valueNoise_hash3(cell + vec3f(0.0, 1.0, 1.0)), valueNoise_hash3(cell + vec3f(1.0)), blend.x), blend.y);\n return mix(bottom, top, blend.z);\n}\n";
|
|
17
|
+
}];
|
|
18
|
+
readonly uniformTypes: {
|
|
19
|
+
readonly cover: "f32";
|
|
20
|
+
readonly altitude: "f32";
|
|
21
|
+
readonly thickness: "f32";
|
|
22
|
+
readonly scale: "f32";
|
|
23
|
+
readonly density: "f32";
|
|
24
|
+
readonly time: "f32";
|
|
25
|
+
readonly velocity: "vec2<f32>";
|
|
26
|
+
readonly sunDirection: "vec3<f32>";
|
|
27
|
+
readonly sunColor: "vec3<f32>";
|
|
28
|
+
};
|
|
29
|
+
readonly defaultUniforms: import("../clouds/clouds").CloudUniforms;
|
|
30
|
+
readonly getUniforms: (props?: Partial<Partial<import("../clouds/clouds").CloudUniforms>>, previousUniforms?: import("../clouds/clouds").CloudUniforms | undefined) => {
|
|
31
|
+
cover: number;
|
|
32
|
+
altitude: number;
|
|
33
|
+
thickness: number;
|
|
34
|
+
scale: number;
|
|
35
|
+
density: number;
|
|
36
|
+
time: number;
|
|
37
|
+
velocity: [number, number];
|
|
38
|
+
sunDirection: [number, number, number];
|
|
39
|
+
sunColor: [number, number, number];
|
|
40
|
+
};
|
|
41
|
+
readonly fs: "\nlayout(std140) uniform cloudsUniforms {\n float cover;\n float altitude;\n float thickness;\n float scale;\n float density;\n float time;\n vec2 velocity;\n vec3 sunDirection;\n vec3 sunColor;\n} clouds;\n// Shared normalized density field for planar slabs and spherical shells.\nfloat clouds_getDensityAt(vec3 coordinate, float height) {\n float envelope = smoothstep(0.0, 0.2, height) * (1.0 - smoothstep(0.65, 1.0, height));\n coordinate += vec3(8.7, 3.2, clouds.time * 0.003);\n float broad = valueNoise_noise3(coordinate);\n float detail = valueNoise_noise3(coordinate * 2.07 + vec3(13.1, 7.3, 2.8));\n float fine = valueNoise_noise3(coordinate * 4.23 + vec3(5.4, 11.7, 8.1));\n float threshold = mix(0.78, 0.18, clamp(clouds.cover, 0.0, 1.0));\n return envelope * smoothstep(threshold, threshold + 0.16, broad * 0.72 + detail * 0.2 + fine * 0.08);\n}\n\nfloat clouds_getDensity(vec3 position) {\n float height = (position.z - clouds.altitude) / max(clouds.thickness, 1.0);\n return clouds_getDensityAt(vec3((position.xy - clouds.velocity * clouds.time) / max(clouds.scale, 1.0), height * 0.8), height);\n}\nvec3 clouds_getLighting(float density, float sunDensity, float daylight, float silver) {\n vec3 ambient = mix(vec3(0.035, 0.05, 0.085), vec3(0.28, 0.34, 0.42), daylight);\n float sunlight = exp(-(density + sunDensity) * 2.0);\n return ambient + clouds.sunColor * daylight * sunlight * (0.5 + silver * 0.3);\n}\n\n// Beer-Lambert extinction toward the sun through the same density used for sky rendering.\nfloat clouds_getTransmittance(vec3 position) {\n if (clouds.cover <= 0.0 || clouds.density <= 0.0) return 1.0;\n vec3 direction = normalize(clouds.sunDirection);\n if (direction.z <= 0.02) return 1.0;\n float start = max((clouds.altitude - position.z) / direction.z, 0.0);\n float end = min((clouds.altitude + clouds.thickness - position.z) / direction.z, 40000.0);\n if (end <= start) return 1.0;\n float stepLength = (end - start) / 16.0;\n float opticalDepth = 0.0;\n for (int sampleIndex = 0; sampleIndex < 16; sampleIndex++) {\n opticalDepth += clouds_getDensity(position + direction * (start + (float(sampleIndex) + 0.5) * stepLength)) * stepLength;\n }\n return exp(-opticalDepth * max(clouds.density, 0.0));\n}\n\nvec4 clouds_getColor(vec3 camera, vec3 rayDirection) {\n if (clouds.cover <= 0.0 || clouds.density <= 0.0 || abs(rayDirection.z) < 0.0001) return vec4(0.0);\n float bottom = (clouds.altitude - camera.z) / rayDirection.z;\n float top = (clouds.altitude + max(clouds.thickness, 1.0) - camera.z) / rayDirection.z;\n float start = max(min(bottom, top), 0.0);\n float end = min(max(bottom, top), 20000.0);\n if (end <= start) return vec4(0.0);\n float jitter = valueNoise_hash(rayDirection.xy * 4096.0);\n float stepLength = (end - start) / 64.0;\n vec3 sunDirection = normalize(clouds.sunDirection);\n float daylight = smoothstep(-0.08, 0.18, sunDirection.z);\n float silver = pow(max(dot(rayDirection, sunDirection), 0.0), 12.0);\n vec3 radiance = vec3(0.0);\n float transmittance = 1.0;\n for (int sampleIndex = 0; sampleIndex < 64; sampleIndex++) {\n vec3 position = camera + rayDirection * (start + (float(sampleIndex) + jitter) * stepLength);\n float density = clouds_getDensity(position);\n float sunDensity = clouds_getDensity(position + sunDirection * clouds.thickness * 0.28);\n float alpha = 1.0 - exp(-density * max(clouds.density, 0.0) * stepLength);\n vec3 color = clouds_getLighting(density, sunDensity, daylight, silver);\n radiance += transmittance * alpha * color;\n transmittance *= 1.0 - alpha;\n }\n float distanceFade = 1.0 - smoothstep(10000.0, 20000.0, start);\n return vec4(radiance, 1.0 - transmittance) * distanceFade;\n}\n";
|
|
42
|
+
readonly source: "\nstruct cloudsUniforms {\n cover: f32,\n altitude: f32,\n thickness: f32,\n scale: f32,\n density: f32,\n time: f32,\n velocity: vec2f,\n sunDirection: vec3f,\n sunColor: vec3f,\n};\n@group(3) @binding(auto) var<uniform> clouds: cloudsUniforms;\nfn clouds_getDensityAt(inputCoordinate: vec3f, height: f32) -> f32 {\n let envelope = smoothstep(0.0, 0.2, height) * (1.0 - smoothstep(0.65, 1.0, height));\n var coordinate = inputCoordinate;\n coordinate += vec3f(8.7, 3.2, clouds.time * 0.003);\n let broad = valueNoise_noise3(coordinate);\n let detail = valueNoise_noise3(coordinate * 2.07 + vec3f(13.1, 7.3, 2.8));\n let fine = valueNoise_noise3(coordinate * 4.23 + vec3f(5.4, 11.7, 8.1));\n let threshold = mix(0.78, 0.18, clamp(clouds.cover, 0.0, 1.0));\n return envelope * smoothstep(threshold, threshold + 0.16, broad * 0.72 + detail * 0.2 + fine * 0.08);\n}\n\nfn clouds_getDensity(position: vec3f) -> f32 {\n let height = (position.z - clouds.altitude) / max(clouds.thickness, 1.0);\n return clouds_getDensityAt(vec3f((position.xy - clouds.velocity * clouds.time) / max(clouds.scale, 1.0), height * 0.8), height);\n}\nfn clouds_getLighting(density: f32, sunDensity: f32, daylight: f32, silver: f32) -> vec3f {\n let ambient = mix(vec3f(0.035, 0.05, 0.085), vec3f(0.28, 0.34, 0.42), daylight);\n let sunlight = exp(-(density + sunDensity) * 2.0);\n return ambient + clouds.sunColor * daylight * sunlight * (0.5 + silver * 0.3);\n}\n\n// Beer-Lambert extinction toward the sun through the same density used for sky rendering.\nfn clouds_getTransmittance(position: vec3f) -> f32 {\n if (clouds.cover <= 0.0 || clouds.density <= 0.0) { return 1.0; }\n var direction: vec3f = normalize(clouds.sunDirection);\n if (direction.z <= 0.02) { return 1.0; }\n var start: f32 = max((clouds.altitude - position.z) / direction.z, 0.0);\n var end: f32 = min((clouds.altitude + clouds.thickness - position.z) / direction.z, 40000.0);\n if (end <= start) { return 1.0; }\n var stepLength: f32 = (end - start) / 16.0;\n var opticalDepth: f32 = 0.0;\n for (var sampleIndex: i32 = 0; sampleIndex < 16; sampleIndex++) {\n opticalDepth += clouds_getDensity(position + direction * (start + (f32(sampleIndex) + 0.5) * stepLength)) * stepLength;\n }\n return exp(-opticalDepth * max(clouds.density, 0.0));\n}\n\nfn clouds_getColor(camera: vec3f, rayDirection: vec3f) -> vec4f {\n if (clouds.cover <= 0.0 || clouds.density <= 0.0 || abs(rayDirection.z) < 0.0001) { return vec4f(0.0); }\n let bottom = (clouds.altitude - camera.z) / rayDirection.z;\n let top = (clouds.altitude + max(clouds.thickness, 1.0) - camera.z) / rayDirection.z;\n let start = max(min(bottom, top), 0.0);\n let end = min(max(bottom, top), 20000.0);\n if (end <= start) { return vec4f(0.0); }\n let jitter = valueNoise_hash(rayDirection.xy * 4096.0);\n let stepLength = (end - start) / 64.0;\n let sunDirection = normalize(clouds.sunDirection);\n let daylight = smoothstep(-0.08, 0.18, sunDirection.z);\n let silver = pow(max(dot(rayDirection, sunDirection), 0.0), 12.0);\n var radiance = vec3f(0.0);\n var transmittance = 1.0;\n for (var sampleIndex = 0; sampleIndex < 64; sampleIndex++) {\n let position = camera + rayDirection * (start + (f32(sampleIndex) + jitter) * stepLength);\n let density = clouds_getDensity(position);\n let sunDensity = clouds_getDensity(position + sunDirection * clouds.thickness * 0.28);\n let alpha = 1.0 - exp(-density * max(clouds.density, 0.0) * stepLength);\n let color = clouds_getLighting(density, sunDensity, daylight, silver);\n radiance += transmittance * alpha * color;\n transmittance *= 1.0 - alpha;\n }\n let distanceFade = 1.0 - smoothstep(10000.0, 20000.0, start);\n return vec4f(radiance, 1.0 - transmittance) * distanceFade;\n}\n";
|
|
43
|
+
}];
|
|
44
|
+
readonly uniformTypes: {
|
|
45
|
+
readonly planetRadius: "f32";
|
|
46
|
+
};
|
|
47
|
+
readonly defaultUniforms: {
|
|
48
|
+
readonly planetRadius: 6370972;
|
|
49
|
+
};
|
|
50
|
+
readonly fs: "\nlayout(std140) uniform globeCloudsUniforms { float planetRadius; } globeClouds;\nvec2 globeClouds_intersectSphere(vec3 camera, vec3 direction, float radius) {\n float projected = dot(camera, direction);\n float discriminant = projected * projected - dot(camera, camera) + radius * radius;\n if (discriminant < 0.0) return vec2(-1.0);\n float root = sqrt(discriminant);\n return vec2(-projected - root, -projected + root);\n}\nfloat globeClouds_getDensity(vec3 position) {\n float height = ((length(position) - 1.0) * globeClouds.planetRadius - clouds.altitude) / max(clouds.thickness, 1.0);\n // Rotate a 3D field rather than wrapping longitude UVs: no seams or pinched poles.\n vec2 angle = clouds.velocity * clouds.time / globeClouds.planetRadius;\n vec3 rotated = vec3(cos(angle.x) * position.x + sin(angle.x) * position.y,\n -sin(angle.x) * position.x + cos(angle.x) * position.y, position.z);\n rotated = vec3(rotated.x, cos(angle.y) * rotated.y + sin(angle.y) * rotated.z,\n -sin(angle.y) * rotated.y + cos(angle.y) * rotated.z);\n return clouds_getDensityAt(rotated * globeClouds.planetRadius / max(clouds.scale, 1.0), height);\n}\nvec4 globeClouds_getColor(vec3 camera, vec3 direction) {\n if (clouds.cover <= 0.0 || clouds.density <= 0.0) return vec4(0.0);\n float bottom = 1.0 + clouds.altitude / globeClouds.planetRadius;\n float top = bottom + max(clouds.thickness, 1.0) / globeClouds.planetRadius;\n vec2 outer = globeClouds_intersectSphere(camera, direction, top);\n if (outer.y <= 0.0) return vec4(0.0);\n float start = max(outer.x, 0.0);\n float end = outer.y;\n vec2 inner = globeClouds_intersectSphere(camera, direction, bottom);\n if (length(camera) < bottom) start = max(start, inner.y);\n else if (inner.x >= start) end = min(end, inner.x);\n vec2 ground = globeClouds_intersectSphere(camera, direction, 1.0);\n if (ground.x >= 0.0) end = min(end, ground.x);\n if (end <= start) return vec4(0.0);\n float stepLength = (end - start) / 32.0;\n float jitter = valueNoise_hash(direction.xy * 4096.0);\n vec3 sunlightDirection = normalize(clouds.sunDirection);\n float silver = pow(max(dot(direction, sunlightDirection), 0.0), 12.0);\n vec3 radiance = vec3(0.0);\n float transmittance = 1.0;\n for (int sampleIndex = 0; sampleIndex < 32; sampleIndex++) {\n vec3 position = camera + direction * (start + (float(sampleIndex) + jitter) * stepLength);\n float density = globeClouds_getDensity(position);\n float sunDensity = globeClouds_getDensity(position + sunlightDirection * clouds.thickness * 0.28 / globeClouds.planetRadius);\n float daylight = smoothstep(-0.08, 0.18, dot(normalize(position), sunlightDirection));\n float alpha = 1.0 - exp(-density * clouds.density * stepLength * globeClouds.planetRadius);\n radiance += transmittance * alpha * clouds_getLighting(density * 0.25, sunDensity * 0.25, daylight, silver);\n transmittance *= 1.0 - alpha;\n if (transmittance < 0.01) break;\n }\n return vec4(radiance, 1.0 - transmittance);\n}\n";
|
|
51
|
+
readonly source: "\nstruct globeCloudsUniforms { planetRadius: f32 };\n@group(3) @binding(auto) var<uniform> globeClouds: globeCloudsUniforms;\nfn globeClouds_intersectSphere(camera: vec3f, direction: vec3f, radius: f32) -> vec2f {\n let projected = dot(camera, direction);\n let discriminant = projected * projected - dot(camera, camera) + radius * radius;\n if (discriminant < 0.0) { return vec2f(-1.0); }\n let root = sqrt(discriminant);\n return vec2f(-projected - root, -projected + root);\n}\nfn globeClouds_getDensity(position: vec3f) -> f32 {\n let height = ((length(position) - 1.0) * globeClouds.planetRadius - clouds.altitude) / max(clouds.thickness, 1.0);\n let angle = clouds.velocity * clouds.time / globeClouds.planetRadius;\n var rotated = vec3f(cos(angle.x) * position.x + sin(angle.x) * position.y,\n -sin(angle.x) * position.x + cos(angle.x) * position.y, position.z);\n rotated = vec3f(rotated.x, cos(angle.y) * rotated.y + sin(angle.y) * rotated.z,\n -sin(angle.y) * rotated.y + cos(angle.y) * rotated.z);\n return clouds_getDensityAt(rotated * globeClouds.planetRadius / max(clouds.scale, 1.0), height);\n}\nfn globeClouds_getColor(camera: vec3f, direction: vec3f) -> vec4f {\n if (clouds.cover <= 0.0 || clouds.density <= 0.0) { return vec4f(0.0); }\n let bottom = 1.0 + clouds.altitude / globeClouds.planetRadius;\n let top = bottom + max(clouds.thickness, 1.0) / globeClouds.planetRadius;\n let outer = globeClouds_intersectSphere(camera, direction, top);\n if (outer.y <= 0.0) { return vec4f(0.0); }\n var start = max(outer.x, 0.0);\n var end = outer.y;\n let inner = globeClouds_intersectSphere(camera, direction, bottom);\n if (length(camera) < bottom) { start = max(start, inner.y); }\n else if (inner.x >= start) { end = min(end, inner.x); }\n let ground = globeClouds_intersectSphere(camera, direction, 1.0);\n if (ground.x >= 0.0) { end = min(end, ground.x); }\n if (end <= start) { return vec4f(0.0); }\n let stepLength = (end - start) / 32.0;\n let jitter = valueNoise_hash(direction.xy * 4096.0);\n let sunlightDirection = normalize(clouds.sunDirection);\n let silver = pow(max(dot(direction, sunlightDirection), 0.0), 12.0);\n var radiance = vec3f(0.0);\n var transmittance = 1.0;\n for (var sampleIndex = 0; sampleIndex < 32; sampleIndex++) {\n let position = camera + direction * (start + (f32(sampleIndex) + jitter) * stepLength);\n let density = globeClouds_getDensity(position);\n let sunDensity = globeClouds_getDensity(position + sunlightDirection * clouds.thickness * 0.28 / globeClouds.planetRadius);\n let daylight = smoothstep(-0.08, 0.18, dot(normalize(position), sunlightDirection));\n let alpha = 1.0 - exp(-density * clouds.density * stepLength * globeClouds.planetRadius);\n radiance += transmittance * alpha * clouds_getLighting(density * 0.25, sunDensity * 0.25, daylight, silver);\n transmittance *= 1.0 - alpha;\n if (transmittance < 0.01) { break; }\n }\n return vec4f(radiance, 1.0 - transmittance);\n}\n";
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=globe-clouds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"globe-clouds.d.ts","sourceRoot":"","sources":["../../../../src/modules/lighting/globe-clouds/globe-clouds.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,kBAAkB,GAAG;IAAC,YAAY,EAAE,MAAM,CAAA;CAAC,CAAC;AACxD,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6G8C,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
|
|
4
|
+
import { clouds } from "../clouds/clouds.js";
|
|
5
|
+
/** Spherical cloud shell using the existing cloud density, noise and sunlight model.
|
|
6
|
+
* Camera and rays are globe-centered, with the planet's surface at unit radius.
|
|
7
|
+
* The shared clouds uniforms retain metre/second units; sunDirection is globe-centered XYZ.
|
|
8
|
+
*/
|
|
9
|
+
export const globeClouds = {
|
|
10
|
+
name: 'globeClouds',
|
|
11
|
+
dependencies: [clouds],
|
|
12
|
+
uniformTypes: { planetRadius: 'f32' },
|
|
13
|
+
defaultUniforms: { planetRadius: 6370972 },
|
|
14
|
+
fs: /* glsl */ `
|
|
15
|
+
layout(std140) uniform globeCloudsUniforms { float planetRadius; } globeClouds;
|
|
16
|
+
vec2 globeClouds_intersectSphere(vec3 camera, vec3 direction, float radius) {
|
|
17
|
+
float projected = dot(camera, direction);
|
|
18
|
+
float discriminant = projected * projected - dot(camera, camera) + radius * radius;
|
|
19
|
+
if (discriminant < 0.0) return vec2(-1.0);
|
|
20
|
+
float root = sqrt(discriminant);
|
|
21
|
+
return vec2(-projected - root, -projected + root);
|
|
22
|
+
}
|
|
23
|
+
float globeClouds_getDensity(vec3 position) {
|
|
24
|
+
float height = ((length(position) - 1.0) * globeClouds.planetRadius - clouds.altitude) / max(clouds.thickness, 1.0);
|
|
25
|
+
// Rotate a 3D field rather than wrapping longitude UVs: no seams or pinched poles.
|
|
26
|
+
vec2 angle = clouds.velocity * clouds.time / globeClouds.planetRadius;
|
|
27
|
+
vec3 rotated = vec3(cos(angle.x) * position.x + sin(angle.x) * position.y,
|
|
28
|
+
-sin(angle.x) * position.x + cos(angle.x) * position.y, position.z);
|
|
29
|
+
rotated = vec3(rotated.x, cos(angle.y) * rotated.y + sin(angle.y) * rotated.z,
|
|
30
|
+
-sin(angle.y) * rotated.y + cos(angle.y) * rotated.z);
|
|
31
|
+
return clouds_getDensityAt(rotated * globeClouds.planetRadius / max(clouds.scale, 1.0), height);
|
|
32
|
+
}
|
|
33
|
+
vec4 globeClouds_getColor(vec3 camera, vec3 direction) {
|
|
34
|
+
if (clouds.cover <= 0.0 || clouds.density <= 0.0) return vec4(0.0);
|
|
35
|
+
float bottom = 1.0 + clouds.altitude / globeClouds.planetRadius;
|
|
36
|
+
float top = bottom + max(clouds.thickness, 1.0) / globeClouds.planetRadius;
|
|
37
|
+
vec2 outer = globeClouds_intersectSphere(camera, direction, top);
|
|
38
|
+
if (outer.y <= 0.0) return vec4(0.0);
|
|
39
|
+
float start = max(outer.x, 0.0);
|
|
40
|
+
float end = outer.y;
|
|
41
|
+
vec2 inner = globeClouds_intersectSphere(camera, direction, bottom);
|
|
42
|
+
if (length(camera) < bottom) start = max(start, inner.y);
|
|
43
|
+
else if (inner.x >= start) end = min(end, inner.x);
|
|
44
|
+
vec2 ground = globeClouds_intersectSphere(camera, direction, 1.0);
|
|
45
|
+
if (ground.x >= 0.0) end = min(end, ground.x);
|
|
46
|
+
if (end <= start) return vec4(0.0);
|
|
47
|
+
float stepLength = (end - start) / 32.0;
|
|
48
|
+
float jitter = valueNoise_hash(direction.xy * 4096.0);
|
|
49
|
+
vec3 sunlightDirection = normalize(clouds.sunDirection);
|
|
50
|
+
float silver = pow(max(dot(direction, sunlightDirection), 0.0), 12.0);
|
|
51
|
+
vec3 radiance = vec3(0.0);
|
|
52
|
+
float transmittance = 1.0;
|
|
53
|
+
for (int sampleIndex = 0; sampleIndex < 32; sampleIndex++) {
|
|
54
|
+
vec3 position = camera + direction * (start + (float(sampleIndex) + jitter) * stepLength);
|
|
55
|
+
float density = globeClouds_getDensity(position);
|
|
56
|
+
float sunDensity = globeClouds_getDensity(position + sunlightDirection * clouds.thickness * 0.28 / globeClouds.planetRadius);
|
|
57
|
+
float daylight = smoothstep(-0.08, 0.18, dot(normalize(position), sunlightDirection));
|
|
58
|
+
float alpha = 1.0 - exp(-density * clouds.density * stepLength * globeClouds.planetRadius);
|
|
59
|
+
radiance += transmittance * alpha * clouds_getLighting(density * 0.25, sunDensity * 0.25, daylight, silver);
|
|
60
|
+
transmittance *= 1.0 - alpha;
|
|
61
|
+
if (transmittance < 0.01) break;
|
|
62
|
+
}
|
|
63
|
+
return vec4(radiance, 1.0 - transmittance);
|
|
64
|
+
}
|
|
65
|
+
`,
|
|
66
|
+
source: /* wgsl */ `
|
|
67
|
+
struct globeCloudsUniforms { planetRadius: f32 };
|
|
68
|
+
@group(3) @binding(auto) var<uniform> globeClouds: globeCloudsUniforms;
|
|
69
|
+
fn globeClouds_intersectSphere(camera: vec3f, direction: vec3f, radius: f32) -> vec2f {
|
|
70
|
+
let projected = dot(camera, direction);
|
|
71
|
+
let discriminant = projected * projected - dot(camera, camera) + radius * radius;
|
|
72
|
+
if (discriminant < 0.0) { return vec2f(-1.0); }
|
|
73
|
+
let root = sqrt(discriminant);
|
|
74
|
+
return vec2f(-projected - root, -projected + root);
|
|
75
|
+
}
|
|
76
|
+
fn globeClouds_getDensity(position: vec3f) -> f32 {
|
|
77
|
+
let height = ((length(position) - 1.0) * globeClouds.planetRadius - clouds.altitude) / max(clouds.thickness, 1.0);
|
|
78
|
+
let angle = clouds.velocity * clouds.time / globeClouds.planetRadius;
|
|
79
|
+
var rotated = vec3f(cos(angle.x) * position.x + sin(angle.x) * position.y,
|
|
80
|
+
-sin(angle.x) * position.x + cos(angle.x) * position.y, position.z);
|
|
81
|
+
rotated = vec3f(rotated.x, cos(angle.y) * rotated.y + sin(angle.y) * rotated.z,
|
|
82
|
+
-sin(angle.y) * rotated.y + cos(angle.y) * rotated.z);
|
|
83
|
+
return clouds_getDensityAt(rotated * globeClouds.planetRadius / max(clouds.scale, 1.0), height);
|
|
84
|
+
}
|
|
85
|
+
fn globeClouds_getColor(camera: vec3f, direction: vec3f) -> vec4f {
|
|
86
|
+
if (clouds.cover <= 0.0 || clouds.density <= 0.0) { return vec4f(0.0); }
|
|
87
|
+
let bottom = 1.0 + clouds.altitude / globeClouds.planetRadius;
|
|
88
|
+
let top = bottom + max(clouds.thickness, 1.0) / globeClouds.planetRadius;
|
|
89
|
+
let outer = globeClouds_intersectSphere(camera, direction, top);
|
|
90
|
+
if (outer.y <= 0.0) { return vec4f(0.0); }
|
|
91
|
+
var start = max(outer.x, 0.0);
|
|
92
|
+
var end = outer.y;
|
|
93
|
+
let inner = globeClouds_intersectSphere(camera, direction, bottom);
|
|
94
|
+
if (length(camera) < bottom) { start = max(start, inner.y); }
|
|
95
|
+
else if (inner.x >= start) { end = min(end, inner.x); }
|
|
96
|
+
let ground = globeClouds_intersectSphere(camera, direction, 1.0);
|
|
97
|
+
if (ground.x >= 0.0) { end = min(end, ground.x); }
|
|
98
|
+
if (end <= start) { return vec4f(0.0); }
|
|
99
|
+
let stepLength = (end - start) / 32.0;
|
|
100
|
+
let jitter = valueNoise_hash(direction.xy * 4096.0);
|
|
101
|
+
let sunlightDirection = normalize(clouds.sunDirection);
|
|
102
|
+
let silver = pow(max(dot(direction, sunlightDirection), 0.0), 12.0);
|
|
103
|
+
var radiance = vec3f(0.0);
|
|
104
|
+
var transmittance = 1.0;
|
|
105
|
+
for (var sampleIndex = 0; sampleIndex < 32; sampleIndex++) {
|
|
106
|
+
let position = camera + direction * (start + (f32(sampleIndex) + jitter) * stepLength);
|
|
107
|
+
let density = globeClouds_getDensity(position);
|
|
108
|
+
let sunDensity = globeClouds_getDensity(position + sunlightDirection * clouds.thickness * 0.28 / globeClouds.planetRadius);
|
|
109
|
+
let daylight = smoothstep(-0.08, 0.18, dot(normalize(position), sunlightDirection));
|
|
110
|
+
let alpha = 1.0 - exp(-density * clouds.density * stepLength * globeClouds.planetRadius);
|
|
111
|
+
radiance += transmittance * alpha * clouds_getLighting(density * 0.25, sunDensity * 0.25, daylight, silver);
|
|
112
|
+
transmittance *= 1.0 - alpha;
|
|
113
|
+
if (transmittance < 0.01) { break; }
|
|
114
|
+
}
|
|
115
|
+
return vec4f(radiance, 1.0 - transmittance);
|
|
116
|
+
}
|
|
117
|
+
`
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=globe-clouds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"globe-clouds.js","sourceRoot":"","sources":["../../../../src/modules/lighting/globe-clouds/globe-clouds.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,4DAA4D;AAG5D,OAAO,EAAC,MAAM,EAAC,4BAAyB;AAKxC;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,aAAa;IACnB,YAAY,EAAE,CAAC,MAAM,CAAC;IACtB,YAAY,EAAE,EAAC,YAAY,EAAE,KAAK,EAAC;IACnC,eAAe,EAAE,EAAC,YAAY,EAAE,OAAO,EAAC;IACxC,EAAE,EAAE,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmDhB;IACC,MAAM,EAAE,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmDpB;CACqE,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var gouraud_material_exports = {};
|
|
19
|
+
__export(gouraud_material_exports, {
|
|
20
|
+
gouraudMaterial: () => gouraudMaterial
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(gouraud_material_exports);
|
|
23
|
+
var import_float_colors = require("../../color/float-colors.cjs");
|
|
24
|
+
var import_lighting = require("../lights/lighting.cjs");
|
|
25
|
+
var import_phong_shaders_glsl = require("../phong-material/phong-shaders-glsl.cjs");
|
|
26
|
+
var import_phong_shaders_wgsl = require("../phong-material/phong-shaders-wgsl.cjs");
|
|
27
|
+
const DEFAULT_SPECULAR_COLOR = [38.25, 38.25, 38.25];
|
|
28
|
+
const gouraudMaterial = {
|
|
29
|
+
props: {},
|
|
30
|
+
name: "gouraudMaterial",
|
|
31
|
+
bindingLayout: [{ name: "gouraudMaterial", group: 3 }],
|
|
32
|
+
// Note these are switched between phong and gouraud
|
|
33
|
+
vs: import_phong_shaders_glsl.PHONG_FS.replace("phongMaterial", "gouraudMaterial"),
|
|
34
|
+
fs: import_phong_shaders_glsl.PHONG_VS.replace("phongMaterial", "gouraudMaterial"),
|
|
35
|
+
source: import_phong_shaders_wgsl.PHONG_WGSL.replaceAll("phongMaterial", "gouraudMaterial"),
|
|
36
|
+
defines: {
|
|
37
|
+
LIGHTING_VERTEX: true
|
|
38
|
+
},
|
|
39
|
+
dependencies: [import_lighting.lighting, import_float_colors.floatColors],
|
|
40
|
+
uniformTypes: {
|
|
41
|
+
unlit: "i32",
|
|
42
|
+
ambient: "f32",
|
|
43
|
+
diffuse: "f32",
|
|
44
|
+
shininess: "f32",
|
|
45
|
+
specularColor: "vec3<f32>"
|
|
46
|
+
},
|
|
47
|
+
defaultUniforms: {
|
|
48
|
+
unlit: false,
|
|
49
|
+
ambient: 0.35,
|
|
50
|
+
diffuse: 0.6,
|
|
51
|
+
shininess: 32,
|
|
52
|
+
specularColor: DEFAULT_SPECULAR_COLOR
|
|
53
|
+
},
|
|
54
|
+
getUniforms(props) {
|
|
55
|
+
return { ...gouraudMaterial.defaultUniforms, ...props };
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
59
|
+
0 && (module.exports = {
|
|
60
|
+
gouraudMaterial
|
|
61
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ShaderModule } from "../../../lib/shader-module/shader-module.js";
|
|
2
|
+
export type GouraudMaterialProps = {
|
|
3
|
+
unlit?: boolean;
|
|
4
|
+
ambient?: number;
|
|
5
|
+
diffuse?: number;
|
|
6
|
+
/** Specularity exponent */
|
|
7
|
+
shininess?: number;
|
|
8
|
+
specularColor?: [number, number, number];
|
|
9
|
+
};
|
|
10
|
+
/** In Gouraud shading, color is calculated for each triangle vertex normal, and then color is interpolated colors across the triangle */
|
|
11
|
+
export declare const gouraudMaterial: ShaderModule<GouraudMaterialProps>;
|
|
12
|
+
//# sourceMappingURL=gouraud-material.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gouraud-material.d.ts","sourceRoot":"","sources":["../../../../src/modules/lighting/gouraud-material/gouraud-material.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,YAAY,EAAC,oDAAiD;AAMtE,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C,CAAC;AAIF,yIAAyI;AACzI,eAAO,MAAM,eAAe,EAAE,YAAY,CAAC,oBAAoB,CA+B9D,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
|
|
4
|
+
import { floatColors } from "../../color/float-colors.js";
|
|
5
|
+
import { lighting } from "../lights/lighting.js";
|
|
6
|
+
import { PHONG_VS, PHONG_FS } from "../phong-material/phong-shaders-glsl.js";
|
|
7
|
+
import { PHONG_WGSL } from "../phong-material/phong-shaders-wgsl.js";
|
|
8
|
+
const DEFAULT_SPECULAR_COLOR = [38.25, 38.25, 38.25];
|
|
9
|
+
/** In Gouraud shading, color is calculated for each triangle vertex normal, and then color is interpolated colors across the triangle */
|
|
10
|
+
export const gouraudMaterial = {
|
|
11
|
+
props: {},
|
|
12
|
+
name: 'gouraudMaterial',
|
|
13
|
+
bindingLayout: [{ name: 'gouraudMaterial', group: 3 }],
|
|
14
|
+
// Note these are switched between phong and gouraud
|
|
15
|
+
vs: PHONG_FS.replace('phongMaterial', 'gouraudMaterial'),
|
|
16
|
+
fs: PHONG_VS.replace('phongMaterial', 'gouraudMaterial'),
|
|
17
|
+
source: PHONG_WGSL.replaceAll('phongMaterial', 'gouraudMaterial'),
|
|
18
|
+
defines: {
|
|
19
|
+
LIGHTING_VERTEX: true
|
|
20
|
+
},
|
|
21
|
+
dependencies: [lighting, floatColors],
|
|
22
|
+
uniformTypes: {
|
|
23
|
+
unlit: 'i32',
|
|
24
|
+
ambient: 'f32',
|
|
25
|
+
diffuse: 'f32',
|
|
26
|
+
shininess: 'f32',
|
|
27
|
+
specularColor: 'vec3<f32>'
|
|
28
|
+
},
|
|
29
|
+
defaultUniforms: {
|
|
30
|
+
unlit: false,
|
|
31
|
+
ambient: 0.35,
|
|
32
|
+
diffuse: 0.6,
|
|
33
|
+
shininess: 32,
|
|
34
|
+
specularColor: DEFAULT_SPECULAR_COLOR
|
|
35
|
+
},
|
|
36
|
+
getUniforms(props) {
|
|
37
|
+
return { ...gouraudMaterial.defaultUniforms, ...props };
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=gouraud-material.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gouraud-material.js","sourceRoot":"","sources":["../../../../src/modules/lighting/gouraud-material/gouraud-material.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,4DAA4D;AAI5D,OAAO,EAAC,WAAW,EAAC,oCAAiC;AACrD,OAAO,EAAC,QAAQ,EAAC,8BAA2B;AAC5C,OAAO,EAAC,QAAQ,EAAE,QAAQ,EAAC,gDAA6C;AACxE,OAAO,EAAC,UAAU,EAAC,gDAA6C;AAWhE,MAAM,sBAAsB,GAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAEnE,yIAAyI;AACzI,MAAM,CAAC,MAAM,eAAe,GAAuC;IACjE,KAAK,EAAE,EAA0B;IAEjC,IAAI,EAAE,iBAAiB;IACvB,aAAa,EAAE,CAAC,EAAC,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAC,CAAC;IACpD,oDAAoD;IACpD,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,iBAAiB,CAAC;IACxD,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,iBAAiB,CAAC;IACxD,MAAM,EAAE,UAAU,CAAC,UAAU,CAAC,eAAe,EAAE,iBAAiB,CAAC;IACjE,OAAO,EAAE;QACP,eAAe,EAAE,IAAI;KACtB;IACD,YAAY,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC;IACrC,YAAY,EAAE;QACZ,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,KAAK;QAChB,aAAa,EAAE,WAAW;KAC3B;IACD,eAAe,EAAE;QACf,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,GAAG;QACZ,SAAS,EAAE,EAAE;QACb,aAAa,EAAE,sBAAsB;KACtC;IAED,WAAW,CAAC,KAA2B;QACrC,OAAO,EAAC,GAAG,eAAe,CAAC,eAAe,EAAE,GAAG,KAAK,EAAC,CAAC;IACxD,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var height_fog_functions_exports = {};
|
|
19
|
+
__export(height_fog_functions_exports, {
|
|
20
|
+
heightFogFunctions: () => heightFogFunctions
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(height_fog_functions_exports);
|
|
23
|
+
var import_value_noise = require("../../math/value-noise/value-noise.cjs");
|
|
24
|
+
const heightFogFunctions = {
|
|
25
|
+
name: "heightFogFunctions",
|
|
26
|
+
dependencies: [import_value_noise.valueNoise],
|
|
27
|
+
fs: (
|
|
28
|
+
/* glsl */
|
|
29
|
+
`
|
|
30
|
+
float heightFog_getRayTransmittance(float rayLength, float cameraHeight, float fragmentHeight, float density, float baseHeight, float heightFalloff) {
|
|
31
|
+
float startHeight = (cameraHeight - baseHeight) * max(heightFalloff, 0.0);
|
|
32
|
+
float endHeight = (fragmentHeight - baseHeight) * max(heightFalloff, 0.0);
|
|
33
|
+
float lowerHeight = min(startHeight, endHeight);
|
|
34
|
+
float upperHeight = max(startHeight, endHeight);
|
|
35
|
+
float averageDensity = 1.0;
|
|
36
|
+
if (upperHeight > 0.0) {
|
|
37
|
+
float heightSpan = upperHeight - lowerHeight;
|
|
38
|
+
if (heightSpan < 0.001) {
|
|
39
|
+
averageDensity = exp(-max((startHeight + endHeight) * 0.5, 0.0));
|
|
40
|
+
} else if (lowerHeight >= 0.0) {
|
|
41
|
+
averageDensity = (exp(-lowerHeight) - exp(-upperHeight)) / heightSpan;
|
|
42
|
+
} else {
|
|
43
|
+
averageDensity = (-lowerHeight + 1.0 - exp(-upperHeight)) / heightSpan;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return exp(-max(density, 0.0) * rayLength * averageDensity);
|
|
47
|
+
}
|
|
48
|
+
float heightFog_hash(vec2 cell) { return valueNoise_hash(cell); }
|
|
49
|
+
float heightFog_noise(vec2 position) { return valueNoise_noise(position); }
|
|
50
|
+
// Integrate drifting density along the ray so wisps occupy space rather than coat surfaces.
|
|
51
|
+
float heightFog_getSpatialTransmittance(vec3 camera, vec3 position, vec3 upDirection,
|
|
52
|
+
float density, float baseHeight, float heightFalloff, float variation, float wispScale,
|
|
53
|
+
float time, vec3 velocity, float evolutionSpeed) {
|
|
54
|
+
if (density <= 0.0) return 1.0;
|
|
55
|
+
float rayLength = distance(camera, position);
|
|
56
|
+
if (variation <= 0.0) return heightFog_getRayTransmittance(rayLength, dot(camera, upDirection),
|
|
57
|
+
dot(position, upDirection), density, baseHeight, heightFalloff);
|
|
58
|
+
vec3 reference = abs(upDirection.z) < 0.9 ? vec3(0.0, 0.0, 1.0) : vec3(0.0, 1.0, 0.0);
|
|
59
|
+
vec3 horizontal = normalize(cross(reference, upDirection));
|
|
60
|
+
vec3 forward = cross(upDirection, horizontal);
|
|
61
|
+
float transmittance = 1.0;
|
|
62
|
+
for (int sampleIndex = 0; sampleIndex < 12; sampleIndex++) {
|
|
63
|
+
float fraction = float(sampleIndex) / 12.0;
|
|
64
|
+
vec3 start = mix(camera, position, fraction);
|
|
65
|
+
vec3 end = mix(camera, position, fraction + 1.0 / 12.0);
|
|
66
|
+
vec3 samplePosition = (start + end) * 0.5 - velocity * time;
|
|
67
|
+
vec2 coordinate = vec2(dot(samplePosition, horizontal), dot(samplePosition, forward)) / max(wispScale, 1.0);
|
|
68
|
+
coordinate.y = coordinate.y * 1.8 + dot(samplePosition, upDirection) / max(wispScale, 1.0);
|
|
69
|
+
float warp = heightFog_noise(coordinate * 0.45 + vec2(8.3, 2.7) + time * evolutionSpeed * vec2(1.0, 0.37));
|
|
70
|
+
float broad = heightFog_noise(coordinate + vec2(warp * 2.0, warp * 0.8));
|
|
71
|
+
float detail = heightFog_noise(mat2(0.8, 0.6, -0.6, 0.8) * coordinate * 2.17 + vec2(17.1, 9.2) + broad * 0.7);
|
|
72
|
+
float modulation = mix(1.0, 1.8 * smoothstep(0.15, 0.85, broad * 0.7 + detail * 0.3), clamp(variation, 0.0, 1.0));
|
|
73
|
+
transmittance *= heightFog_getRayTransmittance(rayLength / 12.0, dot(start, upDirection),
|
|
74
|
+
dot(end, upDirection), density * modulation, baseHeight, heightFalloff);
|
|
75
|
+
}
|
|
76
|
+
return transmittance;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
`
|
|
80
|
+
),
|
|
81
|
+
source: (
|
|
82
|
+
/* wgsl */
|
|
83
|
+
`
|
|
84
|
+
fn heightFog_getRayTransmittance(rayLength: f32, cameraHeight: f32, fragmentHeight: f32, density: f32, baseHeight: f32, heightFalloff: f32) -> f32 {
|
|
85
|
+
let startHeight = (cameraHeight - baseHeight) * max(heightFalloff, 0.0);
|
|
86
|
+
let endHeight = (fragmentHeight - baseHeight) * max(heightFalloff, 0.0);
|
|
87
|
+
let lowerHeight = min(startHeight, endHeight);
|
|
88
|
+
let upperHeight = max(startHeight, endHeight);
|
|
89
|
+
var averageDensity = 1.0;
|
|
90
|
+
if (upperHeight > 0.0) {
|
|
91
|
+
let heightSpan = upperHeight - lowerHeight;
|
|
92
|
+
if (heightSpan < 0.001) {
|
|
93
|
+
averageDensity = exp(-max((startHeight + endHeight) * 0.5, 0.0));
|
|
94
|
+
} else if (lowerHeight >= 0.0) {
|
|
95
|
+
averageDensity = (exp(-lowerHeight) - exp(-upperHeight)) / heightSpan;
|
|
96
|
+
} else {
|
|
97
|
+
averageDensity = (-lowerHeight + 1.0 - exp(-upperHeight)) / heightSpan;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return exp(-max(density, 0.0) * rayLength * averageDensity);
|
|
101
|
+
}
|
|
102
|
+
fn heightFog_hash(cell: vec2f) -> f32 { return valueNoise_hash(cell); }
|
|
103
|
+
fn heightFog_noise(position: vec2f) -> f32 { return valueNoise_noise(position); }
|
|
104
|
+
// Integrate drifting density along the ray so wisps occupy space rather than coat surfaces.
|
|
105
|
+
fn heightFog_getSpatialTransmittance(camera: vec3f, position: vec3f, upDirection: vec3f,
|
|
106
|
+
density: f32, baseHeight: f32, heightFalloff: f32, variation: f32, wispScale: f32,
|
|
107
|
+
time: f32, velocity: vec3f, evolutionSpeed: f32) -> f32 {
|
|
108
|
+
if (density <= 0.0) { return 1.0; }
|
|
109
|
+
let rayLength = distance(camera, position);
|
|
110
|
+
if (variation <= 0.0) { return heightFog_getRayTransmittance(rayLength, dot(camera, upDirection),
|
|
111
|
+
dot(position, upDirection), density, baseHeight, heightFalloff); }
|
|
112
|
+
let reference = select(vec3f(0.0, 1.0, 0.0), vec3f(0.0, 0.0, 1.0), abs(upDirection.z) < 0.9);
|
|
113
|
+
let horizontal = normalize(cross(reference, upDirection));
|
|
114
|
+
let forward = cross(upDirection, horizontal);
|
|
115
|
+
var transmittance = 1.0;
|
|
116
|
+
for (var sampleIndex = 0; sampleIndex < 12; sampleIndex++) {
|
|
117
|
+
let fraction = f32(sampleIndex) / 12.0;
|
|
118
|
+
let start = mix(camera, position, fraction);
|
|
119
|
+
let end = mix(camera, position, fraction + 1.0 / 12.0);
|
|
120
|
+
let samplePosition = (start + end) * 0.5 - velocity * time;
|
|
121
|
+
var coordinate = vec2f(dot(samplePosition, horizontal), dot(samplePosition, forward)) / max(wispScale, 1.0);
|
|
122
|
+
coordinate.y = coordinate.y * 1.8 + dot(samplePosition, upDirection) / max(wispScale, 1.0);
|
|
123
|
+
let warp = heightFog_noise(coordinate * 0.45 + vec2f(8.3, 2.7) + time * evolutionSpeed * vec2f(1.0, 0.37));
|
|
124
|
+
let broad = heightFog_noise(coordinate + vec2f(warp * 2.0, warp * 0.8));
|
|
125
|
+
let detail = heightFog_noise(mat2x2f(vec2f(0.8, 0.6), vec2f(-0.6, 0.8)) * coordinate * 2.17 + vec2f(17.1, 9.2) + vec2f(broad * 0.7));
|
|
126
|
+
let modulation = mix(1.0, 1.8 * smoothstep(0.15, 0.85, broad * 0.7 + detail * 0.3), clamp(variation, 0.0, 1.0));
|
|
127
|
+
transmittance *= heightFog_getRayTransmittance(rayLength / 12.0, dot(start, upDirection),
|
|
128
|
+
dot(end, upDirection), density * modulation, baseHeight, heightFalloff);
|
|
129
|
+
}
|
|
130
|
+
return transmittance;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
`
|
|
134
|
+
)
|
|
135
|
+
};
|
|
136
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
137
|
+
0 && (module.exports = {
|
|
138
|
+
heightFogFunctions
|
|
139
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Uniform-free analytic extinction shared by materials and screen-space effects.
|
|
2
|
+
* Lengths and heights are metres; density and falloff are inverse metres.
|
|
3
|
+
*/
|
|
4
|
+
export declare const heightFogFunctions: {
|
|
5
|
+
readonly name: "heightFogFunctions";
|
|
6
|
+
readonly dependencies: [{
|
|
7
|
+
readonly name: "valueNoise";
|
|
8
|
+
readonly fs: "\nfloat valueNoise_hash(vec2 cell) {\n vec3 value = fract(vec3(cell.x, cell.y, cell.x) * 0.1031);\n value += dot(value, value.yzx + 33.33);\n return fract((value.x + value.y) * value.z);\n}\nfloat valueNoise_noise(vec2 position) {\n vec2 cell = floor(position);\n vec2 fraction = fract(position);\n vec2 blend = fraction * fraction * (3.0 - 2.0 * fraction);\n return mix(mix(valueNoise_hash(cell), valueNoise_hash(cell + vec2(1.0, 0.0)), blend.x),\n mix(valueNoise_hash(cell + vec2(0.0, 1.0)), valueNoise_hash(cell + vec2(1.0)), blend.x), blend.y);\n}\n\nfloat valueNoise_hash3(vec3 cell) {\n vec3 value = fract(cell * 0.1031);\n value += dot(value, value.yzx + 33.33);\n return fract((value.x + value.y) * value.z);\n}\nfloat valueNoise_noise3(vec3 position) {\n vec3 cell = floor(position);\n vec3 fraction = fract(position);\n vec3 blend = fraction * fraction * (3.0 - 2.0 * fraction);\n float bottom = mix(mix(valueNoise_hash3(cell), valueNoise_hash3(cell + vec3(1.0, 0.0, 0.0)), blend.x),\n mix(valueNoise_hash3(cell + vec3(0.0, 1.0, 0.0)), valueNoise_hash3(cell + vec3(1.0, 1.0, 0.0)), blend.x), blend.y);\n float top = mix(mix(valueNoise_hash3(cell + vec3(0.0, 0.0, 1.0)), valueNoise_hash3(cell + vec3(1.0, 0.0, 1.0)), blend.x),\n mix(valueNoise_hash3(cell + vec3(0.0, 1.0, 1.0)), valueNoise_hash3(cell + vec3(1.0)), blend.x), blend.y);\n return mix(bottom, top, blend.z);\n}\n";
|
|
9
|
+
readonly source: "\nfn valueNoise_hash(cell: vec2f) -> f32 {\n var value = fract(vec3f(cell.x, cell.y, cell.x) * 0.1031);\n value += vec3f(dot(value, value.yzx + vec3f(33.33)));\n return fract((value.x + value.y) * value.z);\n}\nfn valueNoise_noise(position: vec2f) -> f32 {\n let cell = floor(position);\n let fraction = fract(position);\n let blend = fraction * fraction * (vec2f(3.0) - 2.0 * fraction);\n return mix(mix(valueNoise_hash(cell), valueNoise_hash(cell + vec2f(1.0, 0.0)), blend.x),\n mix(valueNoise_hash(cell + vec2f(0.0, 1.0)), valueNoise_hash(cell + vec2f(1.0)), blend.x), blend.y);\n}\n\nfn valueNoise_hash3(cell: vec3f) -> f32 {\n var value = fract(cell * 0.1031);\n value += vec3f(dot(value, value.yzx + vec3f(33.33)));\n return fract((value.x + value.y) * value.z);\n}\nfn valueNoise_noise3(position: vec3f) -> f32 {\n let cell = floor(position);\n let fraction = fract(position);\n let blend = fraction * fraction * (vec3f(3.0) - 2.0 * fraction);\n let bottom = mix(mix(valueNoise_hash3(cell), valueNoise_hash3(cell + vec3f(1.0, 0.0, 0.0)), blend.x),\n mix(valueNoise_hash3(cell + vec3f(0.0, 1.0, 0.0)), valueNoise_hash3(cell + vec3f(1.0, 1.0, 0.0)), blend.x), blend.y);\n let top = mix(mix(valueNoise_hash3(cell + vec3f(0.0, 0.0, 1.0)), valueNoise_hash3(cell + vec3f(1.0, 0.0, 1.0)), blend.x),\n mix(valueNoise_hash3(cell + vec3f(0.0, 1.0, 1.0)), valueNoise_hash3(cell + vec3f(1.0)), blend.x), blend.y);\n return mix(bottom, top, blend.z);\n}\n";
|
|
10
|
+
}];
|
|
11
|
+
readonly fs: "\nfloat heightFog_getRayTransmittance(float rayLength, float cameraHeight, float fragmentHeight, float density, float baseHeight, float heightFalloff) {\n float startHeight = (cameraHeight - baseHeight) * max(heightFalloff, 0.0);\n float endHeight = (fragmentHeight - baseHeight) * max(heightFalloff, 0.0);\n float lowerHeight = min(startHeight, endHeight);\n float upperHeight = max(startHeight, endHeight);\n float averageDensity = 1.0;\n if (upperHeight > 0.0) {\n float heightSpan = upperHeight - lowerHeight;\n if (heightSpan < 0.001) {\n averageDensity = exp(-max((startHeight + endHeight) * 0.5, 0.0));\n } else if (lowerHeight >= 0.0) {\n averageDensity = (exp(-lowerHeight) - exp(-upperHeight)) / heightSpan;\n } else {\n averageDensity = (-lowerHeight + 1.0 - exp(-upperHeight)) / heightSpan;\n }\n }\n return exp(-max(density, 0.0) * rayLength * averageDensity);\n}\nfloat heightFog_hash(vec2 cell) { return valueNoise_hash(cell); }\nfloat heightFog_noise(vec2 position) { return valueNoise_noise(position); }\n// Integrate drifting density along the ray so wisps occupy space rather than coat surfaces.\nfloat heightFog_getSpatialTransmittance(vec3 camera, vec3 position, vec3 upDirection,\n float density, float baseHeight, float heightFalloff, float variation, float wispScale,\n float time, vec3 velocity, float evolutionSpeed) {\n if (density <= 0.0) return 1.0;\n float rayLength = distance(camera, position);\n if (variation <= 0.0) return heightFog_getRayTransmittance(rayLength, dot(camera, upDirection),\n dot(position, upDirection), density, baseHeight, heightFalloff);\n vec3 reference = abs(upDirection.z) < 0.9 ? vec3(0.0, 0.0, 1.0) : vec3(0.0, 1.0, 0.0);\n vec3 horizontal = normalize(cross(reference, upDirection));\n vec3 forward = cross(upDirection, horizontal);\n float transmittance = 1.0;\n for (int sampleIndex = 0; sampleIndex < 12; sampleIndex++) {\n float fraction = float(sampleIndex) / 12.0;\n vec3 start = mix(camera, position, fraction);\n vec3 end = mix(camera, position, fraction + 1.0 / 12.0);\n vec3 samplePosition = (start + end) * 0.5 - velocity * time;\n vec2 coordinate = vec2(dot(samplePosition, horizontal), dot(samplePosition, forward)) / max(wispScale, 1.0);\n coordinate.y = coordinate.y * 1.8 + dot(samplePosition, upDirection) / max(wispScale, 1.0);\n float warp = heightFog_noise(coordinate * 0.45 + vec2(8.3, 2.7) + time * evolutionSpeed * vec2(1.0, 0.37));\n float broad = heightFog_noise(coordinate + vec2(warp * 2.0, warp * 0.8));\n float detail = heightFog_noise(mat2(0.8, 0.6, -0.6, 0.8) * coordinate * 2.17 + vec2(17.1, 9.2) + broad * 0.7);\n float modulation = mix(1.0, 1.8 * smoothstep(0.15, 0.85, broad * 0.7 + detail * 0.3), clamp(variation, 0.0, 1.0));\n transmittance *= heightFog_getRayTransmittance(rayLength / 12.0, dot(start, upDirection),\n dot(end, upDirection), density * modulation, baseHeight, heightFalloff);\n }\n return transmittance;\n}\n\n";
|
|
12
|
+
readonly source: "\nfn heightFog_getRayTransmittance(rayLength: f32, cameraHeight: f32, fragmentHeight: f32, density: f32, baseHeight: f32, heightFalloff: f32) -> f32 {\n let startHeight = (cameraHeight - baseHeight) * max(heightFalloff, 0.0);\n let endHeight = (fragmentHeight - baseHeight) * max(heightFalloff, 0.0);\n let lowerHeight = min(startHeight, endHeight);\n let upperHeight = max(startHeight, endHeight);\n var averageDensity = 1.0;\n if (upperHeight > 0.0) {\n let heightSpan = upperHeight - lowerHeight;\n if (heightSpan < 0.001) {\n averageDensity = exp(-max((startHeight + endHeight) * 0.5, 0.0));\n } else if (lowerHeight >= 0.0) {\n averageDensity = (exp(-lowerHeight) - exp(-upperHeight)) / heightSpan;\n } else {\n averageDensity = (-lowerHeight + 1.0 - exp(-upperHeight)) / heightSpan;\n }\n }\n return exp(-max(density, 0.0) * rayLength * averageDensity);\n}\nfn heightFog_hash(cell: vec2f) -> f32 { return valueNoise_hash(cell); }\nfn heightFog_noise(position: vec2f) -> f32 { return valueNoise_noise(position); }\n// Integrate drifting density along the ray so wisps occupy space rather than coat surfaces.\nfn heightFog_getSpatialTransmittance(camera: vec3f, position: vec3f, upDirection: vec3f,\n density: f32, baseHeight: f32, heightFalloff: f32, variation: f32, wispScale: f32,\n time: f32, velocity: vec3f, evolutionSpeed: f32) -> f32 {\n if (density <= 0.0) { return 1.0; }\n let rayLength = distance(camera, position);\n if (variation <= 0.0) { return heightFog_getRayTransmittance(rayLength, dot(camera, upDirection),\n dot(position, upDirection), density, baseHeight, heightFalloff); }\n let reference = select(vec3f(0.0, 1.0, 0.0), vec3f(0.0, 0.0, 1.0), abs(upDirection.z) < 0.9);\n let horizontal = normalize(cross(reference, upDirection));\n let forward = cross(upDirection, horizontal);\n var transmittance = 1.0;\n for (var sampleIndex = 0; sampleIndex < 12; sampleIndex++) {\n let fraction = f32(sampleIndex) / 12.0;\n let start = mix(camera, position, fraction);\n let end = mix(camera, position, fraction + 1.0 / 12.0);\n let samplePosition = (start + end) * 0.5 - velocity * time;\n var coordinate = vec2f(dot(samplePosition, horizontal), dot(samplePosition, forward)) / max(wispScale, 1.0);\n coordinate.y = coordinate.y * 1.8 + dot(samplePosition, upDirection) / max(wispScale, 1.0);\n let warp = heightFog_noise(coordinate * 0.45 + vec2f(8.3, 2.7) + time * evolutionSpeed * vec2f(1.0, 0.37));\n let broad = heightFog_noise(coordinate + vec2f(warp * 2.0, warp * 0.8));\n let detail = heightFog_noise(mat2x2f(vec2f(0.8, 0.6), vec2f(-0.6, 0.8)) * coordinate * 2.17 + vec2f(17.1, 9.2) + vec2f(broad * 0.7));\n let modulation = mix(1.0, 1.8 * smoothstep(0.15, 0.85, broad * 0.7 + detail * 0.3), clamp(variation, 0.0, 1.0));\n transmittance *= heightFog_getRayTransmittance(rayLength / 12.0, dot(start, upDirection),\n dot(end, upDirection), density * modulation, baseHeight, heightFalloff);\n }\n return transmittance;\n}\n\n";
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=height-fog-functions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"height-fog-functions.d.ts","sourceRoot":"","sources":["../../../../src/modules/lighting/height-fog/height-fog-functions.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;CAyGE,CAAC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
// luma.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// SPDX-FileCopyrightText: Copyright (c) vis.gl contributors
|
|
4
|
+
import { valueNoise } from "../../math/value-noise/value-noise.js";
|
|
5
|
+
/** Uniform-free analytic extinction shared by materials and screen-space effects.
|
|
6
|
+
* Lengths and heights are metres; density and falloff are inverse metres.
|
|
7
|
+
*/
|
|
8
|
+
export const heightFogFunctions = {
|
|
9
|
+
name: 'heightFogFunctions',
|
|
10
|
+
dependencies: [valueNoise],
|
|
11
|
+
fs: /* glsl */ `
|
|
12
|
+
float heightFog_getRayTransmittance(float rayLength, float cameraHeight, float fragmentHeight, float density, float baseHeight, float heightFalloff) {
|
|
13
|
+
float startHeight = (cameraHeight - baseHeight) * max(heightFalloff, 0.0);
|
|
14
|
+
float endHeight = (fragmentHeight - baseHeight) * max(heightFalloff, 0.0);
|
|
15
|
+
float lowerHeight = min(startHeight, endHeight);
|
|
16
|
+
float upperHeight = max(startHeight, endHeight);
|
|
17
|
+
float averageDensity = 1.0;
|
|
18
|
+
if (upperHeight > 0.0) {
|
|
19
|
+
float heightSpan = upperHeight - lowerHeight;
|
|
20
|
+
if (heightSpan < 0.001) {
|
|
21
|
+
averageDensity = exp(-max((startHeight + endHeight) * 0.5, 0.0));
|
|
22
|
+
} else if (lowerHeight >= 0.0) {
|
|
23
|
+
averageDensity = (exp(-lowerHeight) - exp(-upperHeight)) / heightSpan;
|
|
24
|
+
} else {
|
|
25
|
+
averageDensity = (-lowerHeight + 1.0 - exp(-upperHeight)) / heightSpan;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return exp(-max(density, 0.0) * rayLength * averageDensity);
|
|
29
|
+
}
|
|
30
|
+
float heightFog_hash(vec2 cell) { return valueNoise_hash(cell); }
|
|
31
|
+
float heightFog_noise(vec2 position) { return valueNoise_noise(position); }
|
|
32
|
+
// Integrate drifting density along the ray so wisps occupy space rather than coat surfaces.
|
|
33
|
+
float heightFog_getSpatialTransmittance(vec3 camera, vec3 position, vec3 upDirection,
|
|
34
|
+
float density, float baseHeight, float heightFalloff, float variation, float wispScale,
|
|
35
|
+
float time, vec3 velocity, float evolutionSpeed) {
|
|
36
|
+
if (density <= 0.0) return 1.0;
|
|
37
|
+
float rayLength = distance(camera, position);
|
|
38
|
+
if (variation <= 0.0) return heightFog_getRayTransmittance(rayLength, dot(camera, upDirection),
|
|
39
|
+
dot(position, upDirection), density, baseHeight, heightFalloff);
|
|
40
|
+
vec3 reference = abs(upDirection.z) < 0.9 ? vec3(0.0, 0.0, 1.0) : vec3(0.0, 1.0, 0.0);
|
|
41
|
+
vec3 horizontal = normalize(cross(reference, upDirection));
|
|
42
|
+
vec3 forward = cross(upDirection, horizontal);
|
|
43
|
+
float transmittance = 1.0;
|
|
44
|
+
for (int sampleIndex = 0; sampleIndex < 12; sampleIndex++) {
|
|
45
|
+
float fraction = float(sampleIndex) / 12.0;
|
|
46
|
+
vec3 start = mix(camera, position, fraction);
|
|
47
|
+
vec3 end = mix(camera, position, fraction + 1.0 / 12.0);
|
|
48
|
+
vec3 samplePosition = (start + end) * 0.5 - velocity * time;
|
|
49
|
+
vec2 coordinate = vec2(dot(samplePosition, horizontal), dot(samplePosition, forward)) / max(wispScale, 1.0);
|
|
50
|
+
coordinate.y = coordinate.y * 1.8 + dot(samplePosition, upDirection) / max(wispScale, 1.0);
|
|
51
|
+
float warp = heightFog_noise(coordinate * 0.45 + vec2(8.3, 2.7) + time * evolutionSpeed * vec2(1.0, 0.37));
|
|
52
|
+
float broad = heightFog_noise(coordinate + vec2(warp * 2.0, warp * 0.8));
|
|
53
|
+
float detail = heightFog_noise(mat2(0.8, 0.6, -0.6, 0.8) * coordinate * 2.17 + vec2(17.1, 9.2) + broad * 0.7);
|
|
54
|
+
float modulation = mix(1.0, 1.8 * smoothstep(0.15, 0.85, broad * 0.7 + detail * 0.3), clamp(variation, 0.0, 1.0));
|
|
55
|
+
transmittance *= heightFog_getRayTransmittance(rayLength / 12.0, dot(start, upDirection),
|
|
56
|
+
dot(end, upDirection), density * modulation, baseHeight, heightFalloff);
|
|
57
|
+
}
|
|
58
|
+
return transmittance;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
`,
|
|
62
|
+
source: /* wgsl */ `
|
|
63
|
+
fn heightFog_getRayTransmittance(rayLength: f32, cameraHeight: f32, fragmentHeight: f32, density: f32, baseHeight: f32, heightFalloff: f32) -> f32 {
|
|
64
|
+
let startHeight = (cameraHeight - baseHeight) * max(heightFalloff, 0.0);
|
|
65
|
+
let endHeight = (fragmentHeight - baseHeight) * max(heightFalloff, 0.0);
|
|
66
|
+
let lowerHeight = min(startHeight, endHeight);
|
|
67
|
+
let upperHeight = max(startHeight, endHeight);
|
|
68
|
+
var averageDensity = 1.0;
|
|
69
|
+
if (upperHeight > 0.0) {
|
|
70
|
+
let heightSpan = upperHeight - lowerHeight;
|
|
71
|
+
if (heightSpan < 0.001) {
|
|
72
|
+
averageDensity = exp(-max((startHeight + endHeight) * 0.5, 0.0));
|
|
73
|
+
} else if (lowerHeight >= 0.0) {
|
|
74
|
+
averageDensity = (exp(-lowerHeight) - exp(-upperHeight)) / heightSpan;
|
|
75
|
+
} else {
|
|
76
|
+
averageDensity = (-lowerHeight + 1.0 - exp(-upperHeight)) / heightSpan;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return exp(-max(density, 0.0) * rayLength * averageDensity);
|
|
80
|
+
}
|
|
81
|
+
fn heightFog_hash(cell: vec2f) -> f32 { return valueNoise_hash(cell); }
|
|
82
|
+
fn heightFog_noise(position: vec2f) -> f32 { return valueNoise_noise(position); }
|
|
83
|
+
// Integrate drifting density along the ray so wisps occupy space rather than coat surfaces.
|
|
84
|
+
fn heightFog_getSpatialTransmittance(camera: vec3f, position: vec3f, upDirection: vec3f,
|
|
85
|
+
density: f32, baseHeight: f32, heightFalloff: f32, variation: f32, wispScale: f32,
|
|
86
|
+
time: f32, velocity: vec3f, evolutionSpeed: f32) -> f32 {
|
|
87
|
+
if (density <= 0.0) { return 1.0; }
|
|
88
|
+
let rayLength = distance(camera, position);
|
|
89
|
+
if (variation <= 0.0) { return heightFog_getRayTransmittance(rayLength, dot(camera, upDirection),
|
|
90
|
+
dot(position, upDirection), density, baseHeight, heightFalloff); }
|
|
91
|
+
let reference = select(vec3f(0.0, 1.0, 0.0), vec3f(0.0, 0.0, 1.0), abs(upDirection.z) < 0.9);
|
|
92
|
+
let horizontal = normalize(cross(reference, upDirection));
|
|
93
|
+
let forward = cross(upDirection, horizontal);
|
|
94
|
+
var transmittance = 1.0;
|
|
95
|
+
for (var sampleIndex = 0; sampleIndex < 12; sampleIndex++) {
|
|
96
|
+
let fraction = f32(sampleIndex) / 12.0;
|
|
97
|
+
let start = mix(camera, position, fraction);
|
|
98
|
+
let end = mix(camera, position, fraction + 1.0 / 12.0);
|
|
99
|
+
let samplePosition = (start + end) * 0.5 - velocity * time;
|
|
100
|
+
var coordinate = vec2f(dot(samplePosition, horizontal), dot(samplePosition, forward)) / max(wispScale, 1.0);
|
|
101
|
+
coordinate.y = coordinate.y * 1.8 + dot(samplePosition, upDirection) / max(wispScale, 1.0);
|
|
102
|
+
let warp = heightFog_noise(coordinate * 0.45 + vec2f(8.3, 2.7) + time * evolutionSpeed * vec2f(1.0, 0.37));
|
|
103
|
+
let broad = heightFog_noise(coordinate + vec2f(warp * 2.0, warp * 0.8));
|
|
104
|
+
let detail = heightFog_noise(mat2x2f(vec2f(0.8, 0.6), vec2f(-0.6, 0.8)) * coordinate * 2.17 + vec2f(17.1, 9.2) + vec2f(broad * 0.7));
|
|
105
|
+
let modulation = mix(1.0, 1.8 * smoothstep(0.15, 0.85, broad * 0.7 + detail * 0.3), clamp(variation, 0.0, 1.0));
|
|
106
|
+
transmittance *= heightFog_getRayTransmittance(rayLength / 12.0, dot(start, upDirection),
|
|
107
|
+
dot(end, upDirection), density * modulation, baseHeight, heightFalloff);
|
|
108
|
+
}
|
|
109
|
+
return transmittance;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
`
|
|
113
|
+
};
|
|
114
|
+
//# sourceMappingURL=height-fog-functions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"height-fog-functions.js","sourceRoot":"","sources":["../../../../src/modules/lighting/height-fog/height-fog-functions.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,4DAA4D;AAG5D,OAAO,EAAC,UAAU,EAAC,8CAA2C;AAE9D;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,oBAAoB;IAC1B,YAAY,EAAE,CAAC,UAAU,CAAC;IAC1B,EAAE,EAAE,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkDhB;IACC,MAAM,EAAE,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkDpB;CACgC,CAAC"}
|