@aura3d/rendering 2.0.4 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AtmosphereWetness.d.ts +61 -0
- package/dist/AtmosphereWetness.d.ts.map +1 -0
- package/dist/AtmosphereWetness.js +99 -0
- package/dist/AtmosphereWetness.js.map +1 -0
- package/dist/ClusteredForwardLighting.d.ts +25 -1
- package/dist/ClusteredForwardLighting.d.ts.map +1 -1
- package/dist/ClusteredForwardLighting.js +80 -3
- package/dist/ClusteredForwardLighting.js.map +1 -1
- package/dist/DayNightSky.d.ts +63 -0
- package/dist/DayNightSky.d.ts.map +1 -0
- package/dist/DayNightSky.js +156 -0
- package/dist/DayNightSky.js.map +1 -0
- package/dist/EnvironmentPresetPack.d.ts +30 -0
- package/dist/EnvironmentPresetPack.d.ts.map +1 -0
- package/dist/EnvironmentPresetPack.js +49 -0
- package/dist/EnvironmentPresetPack.js.map +1 -0
- package/dist/ForwardPass.d.ts +65 -0
- package/dist/ForwardPass.d.ts.map +1 -1
- package/dist/ForwardPass.js +196 -2
- package/dist/ForwardPass.js.map +1 -1
- package/dist/InstancedPBRMaterial.d.ts +1 -0
- package/dist/InstancedPBRMaterial.d.ts.map +1 -1
- package/dist/InstancedPBRMaterial.js +3 -0
- package/dist/InstancedPBRMaterial.js.map +1 -1
- package/dist/InstancingDiagnostics.d.ts +69 -0
- package/dist/InstancingDiagnostics.d.ts.map +1 -0
- package/dist/InstancingDiagnostics.js +98 -0
- package/dist/InstancingDiagnostics.js.map +1 -0
- package/dist/LightingRig.d.ts +19 -1
- package/dist/LightingRig.d.ts.map +1 -1
- package/dist/LightingRig.js +61 -1
- package/dist/LightingRig.js.map +1 -1
- package/dist/MeshConsolidation.d.ts +12 -0
- package/dist/MeshConsolidation.d.ts.map +1 -1
- package/dist/MeshConsolidation.js +28 -0
- package/dist/MeshConsolidation.js.map +1 -1
- package/dist/MorphTargetPlan.d.ts +29 -2
- package/dist/MorphTargetPlan.d.ts.map +1 -1
- package/dist/MorphTargetPlan.js +23 -4
- package/dist/MorphTargetPlan.js.map +1 -1
- package/dist/NormalMappedPBRMaterial.d.ts.map +1 -1
- package/dist/NormalMappedPBRMaterial.js +22 -2
- package/dist/NormalMappedPBRMaterial.js.map +1 -1
- package/dist/OceanSurface.d.ts +75 -0
- package/dist/OceanSurface.d.ts.map +1 -1
- package/dist/OceanSurface.js +211 -0
- package/dist/OceanSurface.js.map +1 -1
- package/dist/PBRMaterial.d.ts +1 -0
- package/dist/PBRMaterial.d.ts.map +1 -1
- package/dist/PBRMaterial.js +23 -2
- package/dist/PBRMaterial.js.map +1 -1
- package/dist/PbrReference.d.ts +48 -0
- package/dist/PbrReference.d.ts.map +1 -1
- package/dist/PbrReference.js +126 -0
- package/dist/PbrReference.js.map +1 -1
- package/dist/PlanarReflection.d.ts +221 -0
- package/dist/PlanarReflection.d.ts.map +1 -0
- package/dist/PlanarReflection.js +541 -0
- package/dist/PlanarReflection.js.map +1 -0
- package/dist/PostProcessPass.d.ts +13 -0
- package/dist/PostProcessPass.d.ts.map +1 -1
- package/dist/PostProcessPass.js +15 -4
- package/dist/PostProcessPass.js.map +1 -1
- package/dist/ReflectionSurfaces.d.ts +14 -0
- package/dist/ReflectionSurfaces.d.ts.map +1 -1
- package/dist/ReflectionSurfaces.js +93 -0
- package/dist/ReflectionSurfaces.js.map +1 -1
- package/dist/RenderDevice.d.ts +87 -0
- package/dist/RenderDevice.d.ts.map +1 -1
- package/dist/RenderDevice.js +85 -0
- package/dist/RenderDevice.js.map +1 -1
- package/dist/Renderer.js +3 -1
- package/dist/Renderer.js.map +1 -1
- package/dist/RendererPostprocessPlan.d.ts +48 -0
- package/dist/RendererPostprocessPlan.d.ts.map +1 -1
- package/dist/RendererPostprocessPlan.js +101 -11
- package/dist/RendererPostprocessPlan.js.map +1 -1
- package/dist/RendererVisualPipelineReport.d.ts.map +1 -1
- package/dist/RendererVisualPipelineReport.js +3 -1
- package/dist/RendererVisualPipelineReport.js.map +1 -1
- package/dist/Sampler.d.ts +29 -0
- package/dist/Sampler.d.ts.map +1 -1
- package/dist/Sampler.js +47 -0
- package/dist/Sampler.js.map +1 -1
- package/dist/SdfText.d.ts +250 -0
- package/dist/SdfText.d.ts.map +1 -0
- package/dist/SdfText.js +551 -0
- package/dist/SdfText.js.map +1 -0
- package/dist/ShaderChunks.d.ts.map +1 -1
- package/dist/ShaderChunks.js +30 -12
- package/dist/ShaderChunks.js.map +1 -1
- package/dist/ShaderLibrary.d.ts.map +1 -1
- package/dist/ShaderLibrary.js +478 -34
- package/dist/ShaderLibrary.js.map +1 -1
- package/dist/ShaderLibraryCore.d.ts.map +1 -1
- package/dist/ShaderLibraryCore.js +70 -12
- package/dist/ShaderLibraryCore.js.map +1 -1
- package/dist/ShadowMap.d.ts +24 -0
- package/dist/ShadowMap.d.ts.map +1 -1
- package/dist/ShadowMap.js +43 -0
- package/dist/ShadowMap.js.map +1 -1
- package/dist/SkinnedLitMaterial.d.ts.map +1 -1
- package/dist/SkinnedLitMaterial.js +2 -0
- package/dist/SkinnedLitMaterial.js.map +1 -1
- package/dist/SkinningBounds.d.ts +10 -0
- package/dist/SkinningBounds.d.ts.map +1 -1
- package/dist/SkinningBounds.js +27 -0
- package/dist/SkinningBounds.js.map +1 -1
- package/dist/SpriteFlipbook.d.ts +60 -0
- package/dist/SpriteFlipbook.d.ts.map +1 -0
- package/dist/SpriteFlipbook.js +128 -0
- package/dist/SpriteFlipbook.js.map +1 -0
- package/dist/TerrainTiles.d.ts +120 -0
- package/dist/TerrainTiles.d.ts.map +1 -0
- package/dist/TerrainTiles.js +221 -0
- package/dist/TerrainTiles.js.map +1 -0
- package/dist/TexturedPBRMaterial.d.ts +1 -0
- package/dist/TexturedPBRMaterial.d.ts.map +1 -1
- package/dist/TexturedPBRMaterial.js +23 -2
- package/dist/TexturedPBRMaterial.js.map +1 -1
- package/dist/TexturedUnlitMaterial.d.ts.map +1 -1
- package/dist/TexturedUnlitMaterial.js +20 -2
- package/dist/TexturedUnlitMaterial.js.map +1 -1
- package/dist/UnlitMaterial.d.ts.map +1 -1
- package/dist/UnlitMaterial.js +20 -2
- package/dist/UnlitMaterial.js.map +1 -1
- package/dist/VertexFormat.d.ts +6 -0
- package/dist/VertexFormat.d.ts.map +1 -1
- package/dist/VertexFormat.js +12 -0
- package/dist/VertexFormat.js.map +1 -1
- package/dist/VolumetricFog.d.ts +55 -0
- package/dist/VolumetricFog.d.ts.map +1 -0
- package/dist/VolumetricFog.js +91 -0
- package/dist/VolumetricFog.js.map +1 -0
- package/dist/WaterSurface.d.ts +77 -0
- package/dist/WaterSurface.d.ts.map +1 -0
- package/dist/WaterSurface.js +133 -0
- package/dist/WaterSurface.js.map +1 -0
- package/dist/WebGL2Device.d.ts +58 -0
- package/dist/WebGL2Device.d.ts.map +1 -1
- package/dist/WebGL2Device.js +536 -17
- package/dist/WebGL2Device.js.map +1 -1
- package/dist/WebGPUDevice.d.ts +50 -0
- package/dist/WebGPUDevice.d.ts.map +1 -1
- package/dist/WebGPUDevice.js +504 -10
- package/dist/WebGPUDevice.js.map +1 -1
- package/dist/WebGPUSkinningLimits.d.ts +40 -0
- package/dist/WebGPUSkinningLimits.d.ts.map +1 -1
- package/dist/WebGPUSkinningLimits.js +32 -0
- package/dist/WebGPUSkinningLimits.js.map +1 -1
- package/dist/effects/CollisionModule.d.ts +9 -0
- package/dist/effects/CollisionModule.d.ts.map +1 -1
- package/dist/effects/CollisionModule.js +10 -0
- package/dist/effects/CollisionModule.js.map +1 -1
- package/dist/effects/ColorModule.d.ts +7 -0
- package/dist/effects/ColorModule.d.ts.map +1 -1
- package/dist/effects/ColorModule.js +23 -0
- package/dist/effects/ColorModule.js.map +1 -1
- package/dist/effects/ForceModule.d.ts +35 -0
- package/dist/effects/ForceModule.d.ts.map +1 -1
- package/dist/effects/ForceModule.js +49 -0
- package/dist/effects/ForceModule.js.map +1 -1
- package/dist/effects/GPUParticleBackend.d.ts +186 -0
- package/dist/effects/GPUParticleBackend.d.ts.map +1 -1
- package/dist/effects/GPUParticleBackend.js +692 -1
- package/dist/effects/GPUParticleBackend.js.map +1 -1
- package/dist/effects/HeightfieldModule.d.ts +58 -0
- package/dist/effects/HeightfieldModule.d.ts.map +1 -0
- package/dist/effects/HeightfieldModule.js +129 -0
- package/dist/effects/HeightfieldModule.js.map +1 -0
- package/dist/effects/LightingModule.d.ts +34 -0
- package/dist/effects/LightingModule.d.ts.map +1 -0
- package/dist/effects/LightingModule.js +54 -0
- package/dist/effects/LightingModule.js.map +1 -0
- package/dist/effects/ParticleDiagnostics.d.ts +8 -0
- package/dist/effects/ParticleDiagnostics.d.ts.map +1 -1
- package/dist/effects/ParticleDiagnostics.js +3 -0
- package/dist/effects/ParticleDiagnostics.js.map +1 -1
- package/dist/effects/ParticleModule.d.ts +8 -0
- package/dist/effects/ParticleModule.d.ts.map +1 -1
- package/dist/effects/ParticleModule.js.map +1 -1
- package/dist/effects/ParticleRenderer.d.ts +20 -0
- package/dist/effects/ParticleRenderer.d.ts.map +1 -1
- package/dist/effects/ParticleRenderer.js +57 -7
- package/dist/effects/ParticleRenderer.js.map +1 -1
- package/dist/effects/ParticleSystem.d.ts +45 -1
- package/dist/effects/ParticleSystem.d.ts.map +1 -1
- package/dist/effects/ParticleSystem.js +373 -4
- package/dist/effects/ParticleSystem.js.map +1 -1
- package/dist/effects/SizeModule.d.ts +4 -0
- package/dist/effects/SizeModule.d.ts.map +1 -1
- package/dist/effects/SizeModule.js +16 -0
- package/dist/effects/SizeModule.js.map +1 -1
- package/dist/effects/SubEmitterModule.d.ts +61 -0
- package/dist/effects/SubEmitterModule.d.ts.map +1 -0
- package/dist/effects/SubEmitterModule.js +119 -0
- package/dist/effects/SubEmitterModule.js.map +1 -0
- package/dist/effects/TrailModule.d.ts +38 -0
- package/dist/effects/TrailModule.d.ts.map +1 -1
- package/dist/effects/TrailModule.js +95 -2
- package/dist/effects/TrailModule.js.map +1 -1
- package/dist/effects/TurbulenceModule.d.ts +43 -0
- package/dist/effects/TurbulenceModule.d.ts.map +1 -0
- package/dist/effects/TurbulenceModule.js +130 -0
- package/dist/effects/TurbulenceModule.js.map +1 -0
- package/dist/effects/index.d.ts +4 -0
- package/dist/effects/index.d.ts.map +1 -1
- package/dist/effects/index.js +4 -0
- package/dist/effects/index.js.map +1 -1
- package/dist/index.d.ts +57 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +31 -10
- package/dist/index.js.map +1 -1
- package/dist/materials/MaterialExtensions.js +3 -3
- package/dist/materials/MaterialExtensions.js.map +1 -1
- package/dist/postprocess/NativeBloomPyramid.d.ts +28 -0
- package/dist/postprocess/NativeBloomPyramid.d.ts.map +1 -0
- package/dist/postprocess/NativeBloomPyramid.js +54 -0
- package/dist/postprocess/NativeBloomPyramid.js.map +1 -0
- package/dist/postprocess/NativeLdrEffectLuts.d.ts +10 -1
- package/dist/postprocess/NativeLdrEffectLuts.d.ts.map +1 -1
- package/dist/postprocess/NativeLdrEffectLuts.js +19 -2
- package/dist/postprocess/NativeLdrEffectLuts.js.map +1 -1
- package/dist/postprocess/index.d.ts +2 -0
- package/dist/postprocess/index.d.ts.map +1 -1
- package/dist/postprocess/index.js +1 -0
- package/dist/postprocess/index.js.map +1 -1
- package/dist/production-runtime/PBRHDRPipeline.d.ts +22 -0
- package/dist/production-runtime/PBRHDRPipeline.d.ts.map +1 -1
- package/dist/production-runtime/PBRHDRPipeline.js +125 -0
- package/dist/production-runtime/PBRHDRPipeline.js.map +1 -1
- package/dist/production-runtime/ProductionWebGPURenderer.d.ts +52 -0
- package/dist/production-runtime/ProductionWebGPURenderer.d.ts.map +1 -1
- package/dist/production-runtime/ProductionWebGPURenderer.js +101 -0
- package/dist/production-runtime/ProductionWebGPURenderer.js.map +1 -1
- package/dist/production-runtime/index.d.ts +5 -4
- package/dist/production-runtime/index.d.ts.map +1 -1
- package/dist/production-runtime/index.js +3 -2
- package/dist/production-runtime/index.js.map +1 -1
- package/dist/production-runtime/passes/DepthPrepass.d.ts +26 -1
- package/dist/production-runtime/passes/DepthPrepass.d.ts.map +1 -1
- package/dist/production-runtime/passes/DepthPrepass.js +49 -2
- package/dist/production-runtime/passes/DepthPrepass.js.map +1 -1
- package/dist/production-runtime/passes/FramegraphTopology.d.ts +13 -0
- package/dist/production-runtime/passes/FramegraphTopology.d.ts.map +1 -0
- package/dist/production-runtime/passes/FramegraphTopology.js +59 -0
- package/dist/production-runtime/passes/FramegraphTopology.js.map +1 -0
- package/dist/production-runtime/passes/OpaquePass.d.ts +24 -1
- package/dist/production-runtime/passes/OpaquePass.d.ts.map +1 -1
- package/dist/production-runtime/passes/OpaquePass.js +41 -2
- package/dist/production-runtime/passes/OpaquePass.js.map +1 -1
- package/dist/production-runtime/passes/ShadowPass.d.ts +24 -1
- package/dist/production-runtime/passes/ShadowPass.d.ts.map +1 -1
- package/dist/production-runtime/passes/ShadowPass.js +43 -2
- package/dist/production-runtime/passes/ShadowPass.js.map +1 -1
- package/dist/production-runtime/passes/SkyboxPass.d.ts +21 -1
- package/dist/production-runtime/passes/SkyboxPass.d.ts.map +1 -1
- package/dist/production-runtime/passes/SkyboxPass.js +39 -2
- package/dist/production-runtime/passes/SkyboxPass.js.map +1 -1
- package/dist/production-runtime/passes/ToneMappingPass.d.ts +29 -1
- package/dist/production-runtime/passes/ToneMappingPass.d.ts.map +1 -1
- package/dist/production-runtime/passes/ToneMappingPass.js +53 -2
- package/dist/production-runtime/passes/ToneMappingPass.js.map +1 -1
- package/dist/production-runtime/passes/TransparentPass.d.ts +24 -1
- package/dist/production-runtime/passes/TransparentPass.d.ts.map +1 -1
- package/dist/production-runtime/passes/TransparentPass.js +42 -2
- package/dist/production-runtime/passes/TransparentPass.js.map +1 -1
- package/dist/shadows/CascadeHysteresis.d.ts +67 -0
- package/dist/shadows/CascadeHysteresis.d.ts.map +1 -0
- package/dist/shadows/CascadeHysteresis.js +104 -0
- package/dist/shadows/CascadeHysteresis.js.map +1 -0
- package/dist/shadows/ContactShadows.d.ts +52 -0
- package/dist/shadows/ContactShadows.d.ts.map +1 -1
- package/dist/shadows/ContactShadows.js +122 -0
- package/dist/shadows/ContactShadows.js.map +1 -1
- package/dist/shadows/SpotShadowMaps.d.ts +77 -0
- package/dist/shadows/SpotShadowMaps.d.ts.map +1 -0
- package/dist/shadows/SpotShadowMaps.js +106 -0
- package/dist/shadows/SpotShadowMaps.js.map +1 -0
- package/dist/webgpu/WebGPUPostProcess.d.ts +2 -0
- package/dist/webgpu/WebGPUPostProcess.d.ts.map +1 -1
- package/dist/webgpu/WebGPUPostProcess.js +1 -0
- package/dist/webgpu/WebGPUPostProcess.js.map +1 -1
- package/dist/webgpu/WebGPUPostShaders.d.ts +78 -0
- package/dist/webgpu/WebGPUPostShaders.d.ts.map +1 -0
- package/dist/webgpu/WebGPUPostShaders.js +262 -0
- package/dist/webgpu/WebGPUPostShaders.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* D3 wetness + lightning descriptors (PRD D3 box 2).
|
|
3
|
+
*
|
|
4
|
+
* Pure deterministic helpers driven by `createWeatherState`:
|
|
5
|
+
* - albedo darkening + roughness response for a wetness uniform in [0, 1],
|
|
6
|
+
* - puddle-mask sampling over `WeatherPuddlePatch` discs,
|
|
7
|
+
* - lightning-flash envelope for the thunderstorm light hook.
|
|
8
|
+
*
|
|
9
|
+
* The rendered wetness path applies these values to ordinary PBR material
|
|
10
|
+
* inputs (base color multiplied down, roughness scaled down); no new shader
|
|
11
|
+
* claim is made here.
|
|
12
|
+
*/
|
|
13
|
+
import { type WeatherPuddlePatch, type WeatherState, type WeatherType } from "./Weather.js";
|
|
14
|
+
export interface WetnessMaterialResponse {
|
|
15
|
+
/** Wetness in [0, 1] taken from the weather state. */
|
|
16
|
+
readonly wetness: number;
|
|
17
|
+
/** Darkened base color hex. */
|
|
18
|
+
readonly albedoColor: string;
|
|
19
|
+
/** Roughness after the wet response (never above the dry input). */
|
|
20
|
+
readonly roughness: number;
|
|
21
|
+
/** Mean puddle-mask value over the sampled patches in [0, 1]. */
|
|
22
|
+
readonly puddleMask: number;
|
|
23
|
+
}
|
|
24
|
+
export interface LightningFlashSample {
|
|
25
|
+
readonly elapsedSeconds: number;
|
|
26
|
+
/** Flash intensity in [0, 1]; 0 unless the weather type is thunderstorm. */
|
|
27
|
+
readonly intensity: number;
|
|
28
|
+
}
|
|
29
|
+
export interface WetnessProbe {
|
|
30
|
+
readonly weather: WeatherState;
|
|
31
|
+
readonly response: WetnessMaterialResponse;
|
|
32
|
+
readonly flash: LightningFlashSample;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Describe the wet look for one ground material under a weather type.
|
|
36
|
+
* `dryColor` is a `#rrggbb` hex string; `dryRoughness` is in [0, 1].
|
|
37
|
+
*/
|
|
38
|
+
export declare function describeWetMaterial(options: {
|
|
39
|
+
readonly type?: WeatherType;
|
|
40
|
+
readonly dryColor?: string;
|
|
41
|
+
readonly dryRoughness?: number;
|
|
42
|
+
readonly elapsedSeconds?: number;
|
|
43
|
+
readonly seed?: number;
|
|
44
|
+
}): WetnessProbe;
|
|
45
|
+
/** Multiply a hex albedo toward dark by up to 45% at full wetness. */
|
|
46
|
+
export declare function applyWetnessToColor(hex: string, wetness: number): string;
|
|
47
|
+
/** Scale roughness down by up to 55% at full wetness (never increases). */
|
|
48
|
+
export declare function applyWetnessToRoughness(dryRoughness: number, wetness: number): number;
|
|
49
|
+
/** Smooth puddle-mask falloff over patch discs at a ground sample point. */
|
|
50
|
+
export declare function samplePuddleMask(patches: readonly WeatherPuddlePatch[], x: number, z: number): number;
|
|
51
|
+
/**
|
|
52
|
+
* Deterministic lightning-flash envelope. Non-thunderstorm types always
|
|
53
|
+
* return 0; thunderstorms return sparse sub-second spikes usable as a light
|
|
54
|
+
* intensity hook.
|
|
55
|
+
*/
|
|
56
|
+
export declare function sampleLightningFlash(options: {
|
|
57
|
+
readonly type: WeatherType;
|
|
58
|
+
readonly elapsedSeconds: number;
|
|
59
|
+
readonly seed?: number;
|
|
60
|
+
}): LightningFlashSample;
|
|
61
|
+
//# sourceMappingURL=AtmosphereWetness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AtmosphereWetness.d.ts","sourceRoot":"","sources":["../../../../packages/rendering/src/AtmosphereWetness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAsB,KAAK,kBAAkB,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7G,MAAM,WAAW,uBAAuB;IACtC,sDAAsD;IACtD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,+BAA+B;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,oEAAoE;IACpE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,iEAAiE;IACjE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,4EAA4E;IAC5E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,CAAC;IAC3C,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;CACtC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAC3C,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,YAAY,CAkBf;AAED,sEAAsE;AACtE,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAKxE;AAED,2EAA2E;AAC3E,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAGrF;AAED,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,kBAAkB,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAQrG;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,oBAAoB,CAUvB"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* D3 wetness + lightning descriptors (PRD D3 box 2).
|
|
3
|
+
*
|
|
4
|
+
* Pure deterministic helpers driven by `createWeatherState`:
|
|
5
|
+
* - albedo darkening + roughness response for a wetness uniform in [0, 1],
|
|
6
|
+
* - puddle-mask sampling over `WeatherPuddlePatch` discs,
|
|
7
|
+
* - lightning-flash envelope for the thunderstorm light hook.
|
|
8
|
+
*
|
|
9
|
+
* The rendered wetness path applies these values to ordinary PBR material
|
|
10
|
+
* inputs (base color multiplied down, roughness scaled down); no new shader
|
|
11
|
+
* claim is made here.
|
|
12
|
+
*/
|
|
13
|
+
import { createWeatherState } from "./Weather.js";
|
|
14
|
+
/**
|
|
15
|
+
* Describe the wet look for one ground material under a weather type.
|
|
16
|
+
* `dryColor` is a `#rrggbb` hex string; `dryRoughness` is in [0, 1].
|
|
17
|
+
*/
|
|
18
|
+
export function describeWetMaterial(options) {
|
|
19
|
+
const type = options.type ?? "rain";
|
|
20
|
+
const dryColor = options.dryColor ?? "#5b6b4f";
|
|
21
|
+
const dryRoughness = clamp(options.dryRoughness ?? 0.9, 0, 1);
|
|
22
|
+
const elapsedSeconds = Math.max(0, options.elapsedSeconds ?? 1);
|
|
23
|
+
const seed = Math.floor(options.seed ?? 0xd3e7);
|
|
24
|
+
const weather = createWeatherState({ type, elapsedSeconds, seed });
|
|
25
|
+
const albedoColor = applyWetnessToColor(dryColor, weather.wetness);
|
|
26
|
+
const roughness = applyWetnessToRoughness(dryRoughness, weather.wetness);
|
|
27
|
+
const puddleMask = weather.puddlePatches.length === 0
|
|
28
|
+
? 0
|
|
29
|
+
: Number((weather.puddlePatches.reduce((sum, patch) => sum + Math.min(1, patch.depth * 2), 0) /
|
|
30
|
+
weather.puddlePatches.length).toFixed(4));
|
|
31
|
+
return {
|
|
32
|
+
weather,
|
|
33
|
+
response: { wetness: weather.wetness, albedoColor, roughness, puddleMask },
|
|
34
|
+
flash: sampleLightningFlash({ type, elapsedSeconds, seed })
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/** Multiply a hex albedo toward dark by up to 45% at full wetness. */
|
|
38
|
+
export function applyWetnessToColor(hex, wetness) {
|
|
39
|
+
const wet = clamp(wetness, 0, 1);
|
|
40
|
+
const rgb = parseHex(hex);
|
|
41
|
+
const factor = 1 - 0.45 * wet;
|
|
42
|
+
return rgbToHex([rgb[0] * factor, rgb[1] * factor, rgb[2] * factor]);
|
|
43
|
+
}
|
|
44
|
+
/** Scale roughness down by up to 55% at full wetness (never increases). */
|
|
45
|
+
export function applyWetnessToRoughness(dryRoughness, wetness) {
|
|
46
|
+
const wet = clamp(wetness, 0, 1);
|
|
47
|
+
return Number((clamp(dryRoughness, 0, 1) * (1 - 0.55 * wet)).toFixed(4));
|
|
48
|
+
}
|
|
49
|
+
/** Smooth puddle-mask falloff over patch discs at a ground sample point. */
|
|
50
|
+
export function samplePuddleMask(patches, x, z) {
|
|
51
|
+
let mask = 0;
|
|
52
|
+
for (const patch of patches) {
|
|
53
|
+
const distance = Math.hypot(x - patch.x, z - patch.z);
|
|
54
|
+
const t = 1 - distance / Math.max(1e-6, patch.radius * 1.6);
|
|
55
|
+
if (t > 0)
|
|
56
|
+
mask = Math.max(mask, t * t * (3 - 2 * t));
|
|
57
|
+
}
|
|
58
|
+
return Number(clamp(mask, 0, 1).toFixed(4));
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Deterministic lightning-flash envelope. Non-thunderstorm types always
|
|
62
|
+
* return 0; thunderstorms return sparse sub-second spikes usable as a light
|
|
63
|
+
* intensity hook.
|
|
64
|
+
*/
|
|
65
|
+
export function sampleLightningFlash(options) {
|
|
66
|
+
const elapsedSeconds = Math.max(0, options.elapsedSeconds);
|
|
67
|
+
if (options.type !== "thunderstorm")
|
|
68
|
+
return { elapsedSeconds, intensity: 0 };
|
|
69
|
+
const seed = Math.floor(options.seed ?? 0xd3e7);
|
|
70
|
+
const windowIndex = Math.floor(elapsedSeconds * 2);
|
|
71
|
+
const strike = seeded01(seed ^ (windowIndex * 0x9e3779b9)) > 0.62;
|
|
72
|
+
if (!strike)
|
|
73
|
+
return { elapsedSeconds, intensity: 0 };
|
|
74
|
+
const phase = elapsedSeconds * 2 - windowIndex;
|
|
75
|
+
const envelope = Math.exp(-phase * 9) * (0.55 + 0.45 * Math.sin(phase * 40));
|
|
76
|
+
return { elapsedSeconds, intensity: Number(clamp(envelope, 0, 1).toFixed(4)) };
|
|
77
|
+
}
|
|
78
|
+
function parseHex(hex) {
|
|
79
|
+
const match = /^#([0-9a-fA-F]{6})$/.exec(hex.trim());
|
|
80
|
+
if (!match?.[1])
|
|
81
|
+
throw new RangeError(`Wetness albedo must be a #rrggbb hex string, got "${hex}".`);
|
|
82
|
+
const value = match[1];
|
|
83
|
+
return [parseInt(value.slice(0, 2), 16), parseInt(value.slice(2, 4), 16), parseInt(value.slice(4, 6), 16)];
|
|
84
|
+
}
|
|
85
|
+
function rgbToHex(rgb) {
|
|
86
|
+
const toHex = (v) => Math.max(0, Math.min(255, Math.round(v))).toString(16).padStart(2, "0");
|
|
87
|
+
return `#${toHex(rgb[0])}${toHex(rgb[1])}${toHex(rgb[2])}`;
|
|
88
|
+
}
|
|
89
|
+
function seeded01(seed) {
|
|
90
|
+
let value = seed >>> 0;
|
|
91
|
+
value ^= value << 13;
|
|
92
|
+
value ^= value >>> 17;
|
|
93
|
+
value ^= value << 5;
|
|
94
|
+
return ((value >>> 0) % 10_000) / 10_000;
|
|
95
|
+
}
|
|
96
|
+
function clamp(value, min, max) {
|
|
97
|
+
return Math.max(min, Math.min(max, value));
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=AtmosphereWetness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AtmosphereWetness.js","sourceRoot":"","sources":["../../../../packages/rendering/src/AtmosphereWetness.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,22 @@ import { type CollectedLight } from "./LightCollector.js";
|
|
|
2
2
|
import { TextureBinding } from "./TextureBinding.js";
|
|
3
3
|
export declare const CLUSTER_TILE_SIZE = 64;
|
|
4
4
|
export declare const MAX_LIGHTS_PER_CLUSTER = 64;
|
|
5
|
+
export type ClusteredForwardFallbackPolicy = "none" | "nearest-observer" | "input-order-no-observer";
|
|
6
|
+
export interface ClusteredForwardLightingOptions {
|
|
7
|
+
/**
|
|
8
|
+
* World-space reference point for the nearest-N over-budget policy (normally
|
|
9
|
+
* the camera position). When omitted, over-budget clusters keep input order
|
|
10
|
+
* and the diagnostics record `input-order-no-observer` so the weaker policy
|
|
11
|
+
* is visible instead of silent.
|
|
12
|
+
*/
|
|
13
|
+
readonly observerPosition?: readonly [number, number, number];
|
|
14
|
+
/**
|
|
15
|
+
* Warning sink for the over-budget fallback. A custom sink is always called
|
|
16
|
+
* when the fallback applies; the default `console.warn` is deduplicated per
|
|
17
|
+
* grid configuration so per-frame clustered builds do not spam the console.
|
|
18
|
+
*/
|
|
19
|
+
readonly onWarning?: (message: string) => void;
|
|
20
|
+
}
|
|
5
21
|
export interface ClusteredForwardLightingDiagnostics {
|
|
6
22
|
readonly source: "createClusteredForwardLighting";
|
|
7
23
|
readonly mode: "screen-tile-texture-grid";
|
|
@@ -17,6 +33,12 @@ export interface ClusteredForwardLightingDiagnostics {
|
|
|
17
33
|
readonly totalLightReferences: number;
|
|
18
34
|
readonly culledLightCount: number;
|
|
19
35
|
readonly droppedLightCount: number;
|
|
36
|
+
readonly overBudgetClusterCount: number;
|
|
37
|
+
readonly maxRequestedLightsInCluster: number;
|
|
38
|
+
readonly requestedPerCluster: readonly number[];
|
|
39
|
+
readonly indexedPerCluster: readonly number[];
|
|
40
|
+
readonly fallbackPolicy: ClusteredForwardFallbackPolicy;
|
|
41
|
+
readonly warnings: readonly string[];
|
|
20
42
|
}
|
|
21
43
|
export interface ClusteredForwardLightingResources {
|
|
22
44
|
readonly lightData: TextureBinding;
|
|
@@ -24,5 +46,7 @@ export interface ClusteredForwardLightingResources {
|
|
|
24
46
|
readonly diagnostics: ClusteredForwardLightingDiagnostics;
|
|
25
47
|
dispose(): void;
|
|
26
48
|
}
|
|
27
|
-
export declare function createClusteredForwardLighting(lights: readonly CollectedLight[], viewportWidth: number, viewportHeight: number, viewProjectionMatrix?: Float32Array | readonly number[]): ClusteredForwardLightingResources;
|
|
49
|
+
export declare function createClusteredForwardLighting(lights: readonly CollectedLight[], viewportWidth: number, viewportHeight: number, viewProjectionMatrix?: Float32Array | readonly number[], options?: ClusteredForwardLightingOptions): ClusteredForwardLightingResources;
|
|
50
|
+
/** Clears the once-per-configuration warning memory (tests + device reset). */
|
|
51
|
+
export declare function resetClusteredForwardLightingWarnings(): void;
|
|
28
52
|
//# sourceMappingURL=ClusteredForwardLighting.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClusteredForwardLighting.d.ts","sourceRoot":"","sources":["../../../../packages/rendering/src/ClusteredForwardLighting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,MAAM,EAAE,gCAAgC,CAAC;IAClD,QAAQ,CAAC,IAAI,EAAE,0BAA0B,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,yBAAyB,EAAE,MAAM,CAAC;IAC3C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ClusteredForwardLighting.d.ts","sourceRoot":"","sources":["../../../../packages/rendering/src/ClusteredForwardLighting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,MAAM,MAAM,8BAA8B,GAAG,MAAM,GAAG,kBAAkB,GAAG,yBAAyB,CAAC;AAErG,MAAM,WAAW,+BAA+B;IAC9C;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9D;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD;AAED,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,MAAM,EAAE,gCAAgC,CAAC;IAClD,QAAQ,CAAC,IAAI,EAAE,0BAA0B,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,yBAAyB,EAAE,MAAM,CAAC;IAC3C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,2BAA2B,EAAE,MAAM,CAAC;IAC7C,QAAQ,CAAC,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IAChD,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,QAAQ,CAAC,cAAc,EAAE,8BAA8B,CAAC;IACxD,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,mCAAmC,CAAC;IAC1D,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,SAAS,cAAc,EAAE,EACjC,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,oBAAoB,CAAC,EAAE,YAAY,GAAG,SAAS,MAAM,EAAE,EACvD,OAAO,GAAE,+BAAoC,GAC5C,iCAAiC,CAmJnC;AA2FD,+EAA+E;AAC/E,wBAAgB,qCAAqC,IAAI,IAAI,CAE5D"}
|
|
@@ -4,13 +4,18 @@ import { Texture } from "./Texture.js";
|
|
|
4
4
|
import { TextureBinding } from "./TextureBinding.js";
|
|
5
5
|
export const CLUSTER_TILE_SIZE = 64;
|
|
6
6
|
export const MAX_LIGHTS_PER_CLUSTER = 64;
|
|
7
|
-
export function createClusteredForwardLighting(lights, viewportWidth, viewportHeight, viewProjectionMatrix) {
|
|
7
|
+
export function createClusteredForwardLighting(lights, viewportWidth, viewportHeight, viewProjectionMatrix, options = {}) {
|
|
8
8
|
if (!Number.isInteger(viewportWidth) || viewportWidth <= 0 || !Number.isInteger(viewportHeight) || viewportHeight <= 0) {
|
|
9
9
|
throw new RangeError("Clustered-forward viewport dimensions must be positive integers.");
|
|
10
10
|
}
|
|
11
11
|
if (viewProjectionMatrix && viewProjectionMatrix.length < 16) {
|
|
12
12
|
throw new RangeError("Clustered-forward view-projection matrix must contain 16 values.");
|
|
13
13
|
}
|
|
14
|
+
const observerPosition = options.observerPosition;
|
|
15
|
+
if (observerPosition !== undefined &&
|
|
16
|
+
(observerPosition.length !== 3 || observerPosition.some((component) => !Number.isFinite(component)))) {
|
|
17
|
+
throw new RangeError("Clustered-forward observerPosition must be three finite numbers.");
|
|
18
|
+
}
|
|
14
19
|
const gridWidth = Math.max(1, Math.ceil(viewportWidth / CLUSTER_TILE_SIZE));
|
|
15
20
|
const gridHeight = Math.max(1, Math.ceil(viewportHeight / CLUSTER_TILE_SIZE));
|
|
16
21
|
const clusterCount = gridWidth * gridHeight;
|
|
@@ -49,8 +54,29 @@ export function createClusteredForwardLighting(lights, viewportWidth, viewportHe
|
|
|
49
54
|
const referencedLights = new Set();
|
|
50
55
|
let totalLightReferences = 0;
|
|
51
56
|
let maxIndexedLightsInCluster = 0;
|
|
57
|
+
let overBudgetClusterCount = 0;
|
|
58
|
+
let maxRequestedLightsInCluster = 0;
|
|
59
|
+
let fallbackPolicy = "none";
|
|
60
|
+
const requestedPerCluster = [];
|
|
61
|
+
const indexedPerCluster = [];
|
|
52
62
|
for (let cluster = 0; cluster < clusterCount; cluster += 1) {
|
|
53
|
-
const
|
|
63
|
+
const candidates = clusterLists[cluster];
|
|
64
|
+
requestedPerCluster.push(candidates.length);
|
|
65
|
+
maxRequestedLightsInCluster = Math.max(maxRequestedLightsInCluster, candidates.length);
|
|
66
|
+
// Over-budget clusters keep at most MAX_LIGHTS_PER_CLUSTER entries. With an
|
|
67
|
+
// observer the survivors are the nearest N by emitter distance (stable
|
|
68
|
+
// tie-break on input order); without one the input order is kept and the
|
|
69
|
+
// weaker policy is recorded in diagnostics instead of applied silently.
|
|
70
|
+
const selected = candidates.length > MAX_LIGHTS_PER_CLUSTER
|
|
71
|
+
? (() => {
|
|
72
|
+
overBudgetClusterCount += 1;
|
|
73
|
+
fallbackPolicy = observerPosition ? "nearest-observer" : "input-order-no-observer";
|
|
74
|
+
return observerPosition
|
|
75
|
+
? nearestLightIndicesFirst(candidates, lights, observerPosition).slice(0, MAX_LIGHTS_PER_CLUSTER)
|
|
76
|
+
: candidates.slice(0, MAX_LIGHTS_PER_CLUSTER);
|
|
77
|
+
})()
|
|
78
|
+
: candidates;
|
|
79
|
+
indexedPerCluster.push(selected.length);
|
|
54
80
|
maxIndexedLightsInCluster = Math.max(maxIndexedLightsInCluster, selected.length);
|
|
55
81
|
totalLightReferences += selected.length;
|
|
56
82
|
for (const [index, lightIndex] of selected.entries()) {
|
|
@@ -60,6 +86,15 @@ export function createClusteredForwardLighting(lights, viewportWidth, viewportHe
|
|
|
60
86
|
referencedLights.add(lightIndex);
|
|
61
87
|
}
|
|
62
88
|
}
|
|
89
|
+
const warnings = [];
|
|
90
|
+
if (overBudgetClusterCount > 0) {
|
|
91
|
+
const basis = observerPosition
|
|
92
|
+
? `nearest ${MAX_LIGHTS_PER_CLUSTER} to the observer per over-budget cluster`
|
|
93
|
+
: `first ${MAX_LIGHTS_PER_CLUSTER} in input order per over-budget cluster (no observerPosition supplied; pass the camera position for distance-ranked fallback)`;
|
|
94
|
+
warnings.push(`Clustered-forward light budget exceeded: ${overBudgetClusterCount} of ${clusterCount} clusters ` +
|
|
95
|
+
`requested more than ${MAX_LIGHTS_PER_CLUSTER} lights (peak ${maxRequestedLightsInCluster}); kept the ${basis}.`);
|
|
96
|
+
emitClusteredForwardWarning(warnings[0], options.onWarning, gridWidth, gridHeight, maxRequestedLightsInCluster, fallbackPolicy);
|
|
97
|
+
}
|
|
63
98
|
const lightTexture = new Texture({
|
|
64
99
|
width: 6,
|
|
65
100
|
height: Math.max(1, lights.length),
|
|
@@ -99,7 +134,13 @@ export function createClusteredForwardLighting(lights, viewportWidth, viewportHe
|
|
|
99
134
|
maxIndexedLightsInCluster,
|
|
100
135
|
totalLightReferences,
|
|
101
136
|
culledLightCount: culledLights.size,
|
|
102
|
-
droppedLightCount: lights.length - culledLights.size - referencedLights.size
|
|
137
|
+
droppedLightCount: lights.length - culledLights.size - referencedLights.size,
|
|
138
|
+
overBudgetClusterCount,
|
|
139
|
+
maxRequestedLightsInCluster,
|
|
140
|
+
requestedPerCluster,
|
|
141
|
+
indexedPerCluster,
|
|
142
|
+
fallbackPolicy,
|
|
143
|
+
warnings
|
|
103
144
|
},
|
|
104
145
|
dispose() {
|
|
105
146
|
lightTexture.dispose();
|
|
@@ -153,4 +194,40 @@ function clampTile(value, size) {
|
|
|
153
194
|
function lightKind(kind) {
|
|
154
195
|
return kind === "directional" ? 0 : kind === "point" ? 1 : kind === "spot" ? 2 : 3;
|
|
155
196
|
}
|
|
197
|
+
function nearestLightIndicesFirst(candidates, lights, observerPosition) {
|
|
198
|
+
return candidates
|
|
199
|
+
.map((lightIndex, order) => ({
|
|
200
|
+
lightIndex,
|
|
201
|
+
order,
|
|
202
|
+
distanceSquared: distanceSquaredToObserver(lights[lightIndex].position, observerPosition)
|
|
203
|
+
}))
|
|
204
|
+
.sort((left, right) => left.distanceSquared !== right.distanceSquared
|
|
205
|
+
? left.distanceSquared - right.distanceSquared
|
|
206
|
+
: left.order - right.order)
|
|
207
|
+
.map((entry) => entry.lightIndex);
|
|
208
|
+
}
|
|
209
|
+
function distanceSquaredToObserver(position, observerPosition) {
|
|
210
|
+
const dx = position[0] - observerPosition[0];
|
|
211
|
+
const dy = position[1] - observerPosition[1];
|
|
212
|
+
const dz = position[2] - observerPosition[2];
|
|
213
|
+
const squared = dx * dx + dy * dy + dz * dz;
|
|
214
|
+
return Number.isFinite(squared) ? squared : Number.POSITIVE_INFINITY;
|
|
215
|
+
}
|
|
216
|
+
const warnedClusterConfigurations = new Set();
|
|
217
|
+
/** Clears the once-per-configuration warning memory (tests + device reset). */
|
|
218
|
+
export function resetClusteredForwardLightingWarnings() {
|
|
219
|
+
warnedClusterConfigurations.clear();
|
|
220
|
+
}
|
|
221
|
+
function emitClusteredForwardWarning(message, onWarning, gridWidth, gridHeight, maxRequestedLightsInCluster, fallbackPolicy) {
|
|
222
|
+
if (onWarning) {
|
|
223
|
+
onWarning(message);
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
const signature = `${gridWidth}x${gridHeight}|peak${maxRequestedLightsInCluster}|${fallbackPolicy}`;
|
|
227
|
+
if (warnedClusterConfigurations.has(signature))
|
|
228
|
+
return;
|
|
229
|
+
warnedClusterConfigurations.add(signature);
|
|
230
|
+
if (typeof console !== "undefined" && typeof console.warn === "function")
|
|
231
|
+
console.warn(message);
|
|
232
|
+
}
|
|
156
233
|
//# sourceMappingURL=ClusteredForwardLighting.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClusteredForwardLighting.js","sourceRoot":"","sources":["../../../../packages/rendering/src/ClusteredForwardLighting.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ClusteredForwardLighting.js","sourceRoot":"","sources":["../../../../packages/rendering/src/ClusteredForwardLighting.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* D3 day/night sky descriptor (PRD D3 box 1).
|
|
3
|
+
*
|
|
4
|
+
* Pure deterministic descriptor for a time-of-day sky: gradient keyframes
|
|
5
|
+
* (zenith/horizon hex), a sun disc, a moon disc with phase, a seeded star
|
|
6
|
+
* field, and 2D value-noise cloud cells.
|
|
7
|
+
*
|
|
8
|
+
* Claim boundary: this is a color-gradient dome with sprite/disc overlays.
|
|
9
|
+
* There is no scattering simulation here — Rayleigh/Mie models are excluded
|
|
10
|
+
* and must not be claimed from this module.
|
|
11
|
+
*/
|
|
12
|
+
export interface DayNightSkyOptions {
|
|
13
|
+
/** Hour of day in [0, 24). 12 is solar noon, 0 is midnight. */
|
|
14
|
+
readonly hour?: number;
|
|
15
|
+
readonly seed?: number;
|
|
16
|
+
readonly starCount?: number;
|
|
17
|
+
readonly cloudCellCount?: number;
|
|
18
|
+
}
|
|
19
|
+
export interface DayNightSkyDisc {
|
|
20
|
+
readonly azimuthRadians: number;
|
|
21
|
+
readonly elevationRadians: number;
|
|
22
|
+
readonly angularRadius: number;
|
|
23
|
+
readonly color: string;
|
|
24
|
+
readonly intensity: number;
|
|
25
|
+
}
|
|
26
|
+
export interface DayNightSkyStar {
|
|
27
|
+
readonly x: number;
|
|
28
|
+
readonly y: number;
|
|
29
|
+
readonly size: number;
|
|
30
|
+
readonly brightness: number;
|
|
31
|
+
}
|
|
32
|
+
export interface DayNightSkyCloudCell {
|
|
33
|
+
readonly x: number;
|
|
34
|
+
readonly y: number;
|
|
35
|
+
readonly radius: number;
|
|
36
|
+
readonly coverage: number;
|
|
37
|
+
readonly alpha: number;
|
|
38
|
+
}
|
|
39
|
+
export interface DayNightSkyState {
|
|
40
|
+
readonly hour: number;
|
|
41
|
+
readonly seed: number;
|
|
42
|
+
/** 0 at midnight, 1 at solar noon. */
|
|
43
|
+
readonly dayFactor: number;
|
|
44
|
+
/** 1 at midnight, 0 at solar noon. */
|
|
45
|
+
readonly nightFactor: number;
|
|
46
|
+
readonly zenithColor: string;
|
|
47
|
+
readonly horizonColor: string;
|
|
48
|
+
readonly sun: DayNightSkyDisc;
|
|
49
|
+
readonly moon: DayNightSkyDisc & {
|
|
50
|
+
readonly phase: number;
|
|
51
|
+
};
|
|
52
|
+
readonly stars: readonly DayNightSkyStar[];
|
|
53
|
+
readonly visibleStarCount: number;
|
|
54
|
+
readonly clouds: readonly DayNightSkyCloudCell[];
|
|
55
|
+
readonly averageCloudCoverage: number;
|
|
56
|
+
readonly claimBoundary: string;
|
|
57
|
+
readonly hash: string;
|
|
58
|
+
}
|
|
59
|
+
export declare const DAY_NIGHT_SKY_CLAIM_BOUNDARY: string;
|
|
60
|
+
export declare function createDayNightSky(options?: DayNightSkyOptions): DayNightSkyState;
|
|
61
|
+
/** Seeded 2D value-noise cloud density in [0, 1]. Exported for route builders. */
|
|
62
|
+
export declare function sampleCloudNoise(x: number, y: number, seed: number): number;
|
|
63
|
+
//# sourceMappingURL=DayNightSky.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DayNightSky.d.ts","sourceRoot":"","sources":["../../../../packages/rendering/src/DayNightSky.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,kBAAkB;IACjC,+DAA+D;IAC/D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,sCAAsC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,sCAAsC;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,QAAQ,CAAC,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;IAC3C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACjD,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,4BAA4B,QAEsD,CAAC;AAqBhG,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,kBAAuB,GAAG,gBAAgB,CAmFpF;AAED,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAW3E"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* D3 day/night sky descriptor (PRD D3 box 1).
|
|
3
|
+
*
|
|
4
|
+
* Pure deterministic descriptor for a time-of-day sky: gradient keyframes
|
|
5
|
+
* (zenith/horizon hex), a sun disc, a moon disc with phase, a seeded star
|
|
6
|
+
* field, and 2D value-noise cloud cells.
|
|
7
|
+
*
|
|
8
|
+
* Claim boundary: this is a color-gradient dome with sprite/disc overlays.
|
|
9
|
+
* There is no scattering simulation here — Rayleigh/Mie models are excluded
|
|
10
|
+
* and must not be claimed from this module.
|
|
11
|
+
*/
|
|
12
|
+
export const DAY_NIGHT_SKY_CLAIM_BOUNDARY = "Time-of-day gradient dome with sun/moon discs, seeded stars, and 2D-noise clouds. " +
|
|
13
|
+
"Scattering-simulation claims are excluded: no Rayleigh/Mie model is implemented or implied.";
|
|
14
|
+
const skyKeyframes = [
|
|
15
|
+
{ hour: 0, dayFactor: 0, zenith: [0x02, 0x06, 0x17], horizon: [0x0a, 0x14, 0x33] },
|
|
16
|
+
{ hour: 5, dayFactor: 0, zenith: [0x02, 0x06, 0x17], horizon: [0x0a, 0x14, 0x33] },
|
|
17
|
+
{ hour: 6.5, dayFactor: 0.35, zenith: [0x2b, 0x4a, 0x7a], horizon: [0xf5, 0x9e, 0x5c] },
|
|
18
|
+
{ hour: 8, dayFactor: 0.8, zenith: [0x3f, 0x7d, 0xd6], horizon: [0xbf, 0xe2, 0xff] },
|
|
19
|
+
{ hour: 12, dayFactor: 1, zenith: [0x1f, 0x5f, 0xc4], horizon: [0x8f, 0xc9, 0xff] },
|
|
20
|
+
{ hour: 16, dayFactor: 0.8, zenith: [0x3f, 0x7d, 0xd6], horizon: [0xbf, 0xe2, 0xff] },
|
|
21
|
+
{ hour: 17.5, dayFactor: 0.35, zenith: [0x2b, 0x4a, 0x7a], horizon: [0xf5, 0x9e, 0x5c] },
|
|
22
|
+
{ hour: 19, dayFactor: 0, zenith: [0x02, 0x06, 0x17], horizon: [0x0a, 0x14, 0x33] },
|
|
23
|
+
{ hour: 24, dayFactor: 0, zenith: [0x02, 0x06, 0x17], horizon: [0x0a, 0x14, 0x33] }
|
|
24
|
+
];
|
|
25
|
+
export function createDayNightSky(options = {}) {
|
|
26
|
+
const hour = options.hour ?? 12;
|
|
27
|
+
if (!Number.isFinite(hour) || hour < 0 || hour >= 24) {
|
|
28
|
+
throw new RangeError("Day/night sky hour must be in [0, 24).");
|
|
29
|
+
}
|
|
30
|
+
const seed = Math.floor(options.seed ?? 0xd3a7);
|
|
31
|
+
if (!Number.isInteger(seed))
|
|
32
|
+
throw new RangeError("Day/night sky seed must be an integer.");
|
|
33
|
+
const starCount = rangeInt(options.starCount ?? 90, 0, 400, "starCount");
|
|
34
|
+
const cloudCellCount = rangeInt(options.cloudCellCount ?? 14, 0, 64, "cloudCellCount");
|
|
35
|
+
const lower = [...skyKeyframes].reverse().find((key) => key.hour <= hour) ?? skyKeyframes[0];
|
|
36
|
+
const upper = skyKeyframes.find((key) => key.hour > hour) ?? skyKeyframes[skyKeyframes.length - 1];
|
|
37
|
+
const span = Math.max(1e-6, upper.hour - lower.hour);
|
|
38
|
+
const t = (hour - lower.hour) / span;
|
|
39
|
+
const dayFactor = lower.dayFactor + (upper.dayFactor - lower.dayFactor) * t;
|
|
40
|
+
const nightFactor = 1 - dayFactor;
|
|
41
|
+
const zenith = lerpRgb(lower.zenith, upper.zenith, t);
|
|
42
|
+
const horizon = lerpRgb(lower.horizon, upper.horizon, t);
|
|
43
|
+
const sunAngle = ((hour - 6) / 12) * Math.PI;
|
|
44
|
+
const sun = {
|
|
45
|
+
azimuthRadians: round4(sunAngle),
|
|
46
|
+
elevationRadians: round4(Math.sin(sunAngle) * 1.1),
|
|
47
|
+
angularRadius: 0.055,
|
|
48
|
+
color: dayFactor > 0.25 ? "#fff7d6" : "#ff9e5c",
|
|
49
|
+
intensity: round4(0.25 + dayFactor * 0.75)
|
|
50
|
+
};
|
|
51
|
+
const moonAngle = sunAngle + Math.PI;
|
|
52
|
+
const phase = (seeded01(seed ^ 0x9e37) * 0.9 + 0.1);
|
|
53
|
+
const moon = {
|
|
54
|
+
azimuthRadians: round4(moonAngle),
|
|
55
|
+
elevationRadians: round4(Math.sin(moonAngle) * 1.1),
|
|
56
|
+
angularRadius: 0.042,
|
|
57
|
+
color: "#dbeafe",
|
|
58
|
+
intensity: round4(0.2 + nightFactor * 0.8),
|
|
59
|
+
phase: round4(phase)
|
|
60
|
+
};
|
|
61
|
+
const stars = Array.from({ length: starCount }, (_, index) => ({
|
|
62
|
+
x: round4(seeded01(seed + index * 101) * 2 - 1),
|
|
63
|
+
y: round4(seeded01(seed + index * 331) * 1.4 - 0.15),
|
|
64
|
+
size: round4(0.004 + seeded01(seed + index * 557) * 0.01),
|
|
65
|
+
brightness: round4((0.35 + seeded01(seed + index * 733) * 0.65) * nightFactor)
|
|
66
|
+
}));
|
|
67
|
+
const visibleStarCount = stars.filter((star) => star.brightness > 0.05 && star.y > 0).length;
|
|
68
|
+
const clouds = Array.from({ length: cloudCellCount }, (_, index) => {
|
|
69
|
+
const x = seeded01(seed + index * 37) * 2 - 1;
|
|
70
|
+
const y = 0.12 + seeded01(seed + index * 71) * 0.62;
|
|
71
|
+
const coverage = sampleCloudNoise(x, y, seed);
|
|
72
|
+
return {
|
|
73
|
+
x: round4(x),
|
|
74
|
+
y: round4(y),
|
|
75
|
+
radius: round4(0.1 + seeded01(seed + index * 113) * 0.22),
|
|
76
|
+
coverage: round4(coverage),
|
|
77
|
+
alpha: round4(coverage * (0.25 + dayFactor * 0.55))
|
|
78
|
+
};
|
|
79
|
+
});
|
|
80
|
+
const averageCloudCoverage = clouds.length === 0
|
|
81
|
+
? 0
|
|
82
|
+
: round4(clouds.reduce((sum, cell) => sum + cell.coverage, 0) / clouds.length);
|
|
83
|
+
const hash = hashValues([
|
|
84
|
+
hour, dayFactor, zenith[0], zenith[1], zenith[2], horizon[0], horizon[1], horizon[2],
|
|
85
|
+
sun.elevationRadians, moon.elevationRadians, visibleStarCount, averageCloudCoverage,
|
|
86
|
+
stars.length, clouds.length
|
|
87
|
+
]);
|
|
88
|
+
return {
|
|
89
|
+
hour,
|
|
90
|
+
seed,
|
|
91
|
+
dayFactor: round4(dayFactor),
|
|
92
|
+
nightFactor: round4(nightFactor),
|
|
93
|
+
zenithColor: rgbToHex(zenith),
|
|
94
|
+
horizonColor: rgbToHex(horizon),
|
|
95
|
+
sun,
|
|
96
|
+
moon,
|
|
97
|
+
stars,
|
|
98
|
+
visibleStarCount,
|
|
99
|
+
clouds,
|
|
100
|
+
averageCloudCoverage,
|
|
101
|
+
claimBoundary: DAY_NIGHT_SKY_CLAIM_BOUNDARY,
|
|
102
|
+
hash
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/** Seeded 2D value-noise cloud density in [0, 1]. Exported for route builders. */
|
|
106
|
+
export function sampleCloudNoise(x, y, seed) {
|
|
107
|
+
const xi = Math.floor(x * 4);
|
|
108
|
+
const yi = Math.floor(y * 4);
|
|
109
|
+
const xf = x * 4 - xi;
|
|
110
|
+
const yf = y * 4 - yi;
|
|
111
|
+
const smooth = (v) => v * v * (3 - 2 * v);
|
|
112
|
+
const corner = (dx, dy) => seeded01((seed ^ (xi + dx) * 374761393 ^ (yi + dy) * 668265263) >>> 0);
|
|
113
|
+
const top = corner(0, 0) + (corner(1, 0) - corner(0, 0)) * smooth(xf);
|
|
114
|
+
const bottom = corner(0, 1) + (corner(1, 1) - corner(0, 1)) * smooth(xf);
|
|
115
|
+
const value = top + (bottom - top) * smooth(yf);
|
|
116
|
+
return Math.max(0, Math.min(1, (value - 0.32) / 0.36));
|
|
117
|
+
}
|
|
118
|
+
function lerpRgb(a, b, t) {
|
|
119
|
+
return [
|
|
120
|
+
Math.round(a[0] + (b[0] - a[0]) * t),
|
|
121
|
+
Math.round(a[1] + (b[1] - a[1]) * t),
|
|
122
|
+
Math.round(a[2] + (b[2] - a[2]) * t)
|
|
123
|
+
];
|
|
124
|
+
}
|
|
125
|
+
function rgbToHex(rgb) {
|
|
126
|
+
const toHex = (v) => Math.max(0, Math.min(255, Math.round(v))).toString(16).padStart(2, "0");
|
|
127
|
+
return `#${toHex(rgb[0])}${toHex(rgb[1])}${toHex(rgb[2])}`;
|
|
128
|
+
}
|
|
129
|
+
function seeded01(seed) {
|
|
130
|
+
let value = seed >>> 0;
|
|
131
|
+
value ^= value << 13;
|
|
132
|
+
value ^= value >>> 17;
|
|
133
|
+
value ^= value << 5;
|
|
134
|
+
return ((value >>> 0) % 10_000) / 10_000;
|
|
135
|
+
}
|
|
136
|
+
function rangeInt(value, min, max, label) {
|
|
137
|
+
if (!Number.isInteger(value) || value < min || value > max) {
|
|
138
|
+
throw new RangeError(`Day/night sky ${label} must be an integer in [${min}, ${max}].`);
|
|
139
|
+
}
|
|
140
|
+
return value;
|
|
141
|
+
}
|
|
142
|
+
function round4(value) {
|
|
143
|
+
return Number(value.toFixed(4));
|
|
144
|
+
}
|
|
145
|
+
function hashValues(values) {
|
|
146
|
+
let hash = 0x811c9dc5;
|
|
147
|
+
for (const value of values) {
|
|
148
|
+
const scaled = Math.round(value * 10_000);
|
|
149
|
+
hash ^= scaled & 0xff;
|
|
150
|
+
hash = Math.imul(hash, 0x01000193) >>> 0;
|
|
151
|
+
hash ^= (scaled >>> 8) & 0xff;
|
|
152
|
+
hash = Math.imul(hash, 0x01000193) >>> 0;
|
|
153
|
+
}
|
|
154
|
+
return hash.toString(16).padStart(8, "0");
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=DayNightSky.js.map
|