@woosh/meep-engine 3.36.0 → 3.38.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/package.json +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +2 -0
- package/src/engine/ecs/transform/TRANSFORM64_EVENT_PLACED.d.ts +11 -0
- package/src/engine/ecs/transform/TRANSFORM64_EVENT_PLACED.d.ts.map +1 -0
- package/src/engine/ecs/transform/TRANSFORM64_EVENT_PLACED.js +10 -0
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts.map +1 -1
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.js +16 -0
- package/src/engine/graphics/ecs/water/Water.d.ts +30 -0
- package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/Water.js +125 -104
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.js +13 -1
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.d.ts +6 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.d.ts.map +1 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.js +18 -0
- package/src/engine/graphics3/WaterSystem.d.ts +22 -6
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem.js +314 -293
- package/src/engine/input/devices/XRInputDevice.d.ts +51 -23
- package/src/engine/input/devices/XRInputDevice.d.ts.map +1 -1
- package/src/engine/input/devices/XRInputDevice.js +145 -52
- package/src/engine/input/devices/xr/XRGamepadMapping.d.ts +14 -0
- package/src/engine/input/devices/xr/XRGamepadMapping.d.ts.map +1 -0
- package/src/engine/input/devices/xr/XRGamepadMapping.js +9 -0
- package/src/engine/input/devices/xr/XRHandedness.d.ts +15 -0
- package/src/engine/input/devices/xr/XRHandedness.d.ts.map +1 -0
- package/src/engine/input/devices/xr/XRHandedness.js +10 -0
- package/src/engine/input/devices/xr/XRInputAction.d.ts +24 -11
- package/src/engine/input/devices/xr/XRInputAction.d.ts.map +1 -1
- package/src/engine/input/devices/xr/XRInputAction.js +55 -24
- package/src/engine/input/devices/xr/XRInputButton.d.ts +7 -9
- package/src/engine/input/devices/xr/XRInputButton.d.ts.map +1 -1
- package/src/engine/input/devices/xr/XRInputButton.js +18 -8
- package/src/engine/input/devices/xr/XRInputCoordinates.d.ts +11 -3
- package/src/engine/input/devices/xr/XRInputCoordinates.d.ts.map +1 -1
- package/src/engine/input/devices/xr/XRInputCoordinates.js +17 -3
- package/src/engine/input/devices/xr/XRInputHandle.d.ts +41 -11
- package/src/engine/input/devices/xr/XRInputHandle.d.ts.map +1 -1
- package/src/engine/input/devices/xr/XRInputHandle.js +129 -32
- package/src/engine/input/devices/xr/XRInputPose.d.ts +41 -5
- package/src/engine/input/devices/xr/XRInputPose.d.ts.map +1 -1
- package/src/engine/input/devices/xr/XRInputPose.js +57 -16
- package/src/engine/input/devices/xr/XRInputTypes.d.ts +18 -18
- package/src/engine/input/devices/xr/XRInputTypes.js +3 -3
- package/src/engine/input/devices/xr/XRTargetRayMode.d.ts +17 -0
- package/src/engine/input/devices/xr/XRTargetRayMode.d.ts.map +1 -0
- package/src/engine/input/devices/xr/XRTargetRayMode.js +12 -0
- package/src/engine/input/devices/xr/XRVisibilityState.d.ts +15 -0
- package/src/engine/input/devices/xr/XRVisibilityState.d.ts.map +1 -0
- package/src/engine/input/devices/xr/XRVisibilityState.js +10 -0
- package/src/engine/input/ecs/ism/coordinate/InputCoordinateDevice.d.ts +3 -1
- package/src/engine/input/ecs/ism/coordinate/InputCoordinateDevice.d.ts.map +1 -1
- package/src/engine/input/ecs/ism/coordinate/InputCoordinateDevice.js +5 -1
- package/src/engine/input/ecs/ism/device/XRInputDeviceAdapter.d.ts +19 -5
- package/src/engine/input/ecs/ism/device/XRInputDeviceAdapter.d.ts.map +1 -1
- package/src/engine/input/ecs/ism/device/XRInputDeviceAdapter.js +42 -9
- package/src/engine/input/ecs/ism/device/XR_INPUT_DEVICE_IDS.d.ts +8 -2
- package/src/engine/input/ecs/ism/device/XR_INPUT_DEVICE_IDS.d.ts.map +1 -1
- package/src/engine/input/ecs/ism/device/XR_INPUT_DEVICE_IDS.js +19 -9
- package/src/engine/input/ecs/ism/trigger/InputTriggerXRButton.d.ts +10 -2
- package/src/engine/input/ecs/ism/trigger/InputTriggerXRButton.d.ts.map +1 -1
- package/src/engine/input/ecs/ism/trigger/InputTriggerXRButton.js +12 -2
- package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts +13 -14
- package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/ClothColliderIndex.js +137 -36
- package/src/engine/physics/cloth/collider/cloth_collider_bounds.d.ts +30 -0
- package/src/engine/physics/cloth/collider/cloth_collider_bounds.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/cloth_collider_bounds.js +33 -0
- package/src/engine/physics/cloth/ecs/ClothColliderFlags.js +2 -1
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts +10 -1
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.js +36 -14
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +15 -2
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothInstance.js +17 -2
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothWorld.js +19 -6
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts +18 -20
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.js +139 -89
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +32 -16
- package/src/shade/playground/water_refraction/README.md +149 -0
- package/src/shade/playground/water_refraction/index.html +42 -0
- package/src/shade/playground/water_refraction/main.d.ts +2 -0
- package/src/shade/playground/water_refraction/main.d.ts.map +1 -0
- package/src/shade/playground/water_refraction/main.js +201 -0
- package/src/shade/playground/water_refraction/world.d.ts +37 -0
- package/src/shade/playground/water_refraction/world.d.ts.map +1 -0
- package/src/shade/playground/water_refraction/world.js +137 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +4 -0
- package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts +2 -3
- package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts.map +1 -1
- package/src/shade/renderer/animation/chunk_pose_accumulator.js +14 -24
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.js +16 -15
- package/src/shade/renderer/deferred/indirect/chunk_lpv_sample_light.js +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +1123 -1122
- package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +202 -201
- package/src/shade/renderer/light/environment/chunk_roughness_to_mip_ratio.d.ts +8 -0
- package/src/shade/renderer/light/environment/chunk_roughness_to_mip_ratio.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/chunk_roughness_to_mip_ratio.js +24 -0
- package/src/shade/renderer/light/environment/chunk_sphere_probe_roughness_to_lod.d.ts +0 -6
- package/src/shade/renderer/light/environment/chunk_sphere_probe_roughness_to_lod.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/chunk_sphere_probe_roughness_to_lod.js +2 -25
- package/src/shade/renderer/light/environment/shader_project_environment_sh.d.ts +2 -2
- package/src/shade/renderer/light/environment/shader_project_environment_sh.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/shader_project_environment_sh.js +50 -19
- package/src/shade/renderer/particles/DESIGN.md +1 -1
- package/src/shade/renderer/particles/bounds/chunk_particle_bounds.d.ts +1 -1
- package/src/shade/renderer/particles/bounds/chunk_particle_bounds.d.ts.map +1 -1
- package/src/shade/renderer/particles/bounds/chunk_particle_bounds.js +10 -9
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +17 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +7 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_renormalization.d.ts +4 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_renormalization.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_renormalization.js +11 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_rgb_contribution.d.ts +4 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_rgb_contribution.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_rgb_contribution.js +19 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.js +5 -3
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_split_counts.d.ts +4 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_split_counts.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_split_counts.js +8 -0
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +21 -2
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.js +4 -8
- package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
- package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.js +10 -8
- package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_add_f32_storage.d.ts +12 -0
- package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_add_f32_storage.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_add_f32_storage.js +25 -0
- package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_max_f32_storage.d.ts +12 -0
- package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_max_f32_storage.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_max_f32_storage.js +28 -0
- package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_min_f32_storage.d.ts +12 -0
- package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_min_f32_storage.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_min_f32_storage.js +28 -0
- package/src/shade/renderer/shader/chunk/geometry/plane/{plane_ray_raycast.d.ts → chunk_plane_ray_raycast.d.ts} +2 -2
- package/src/shade/renderer/shader/chunk/geometry/plane/chunk_plane_ray_raycast.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/plane/{plane_ray_raycast.js → chunk_plane_ray_raycast.js} +1 -1
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.d.ts +4 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.js +101 -0
- package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.js +3 -3
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts +62 -29
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +235 -147
- package/src/shade/renderer/water/chunk_water_transport.d.ts +5 -0
- package/src/shade/renderer/water/chunk_water_transport.d.ts.map +1 -0
- package/src/shade/renderer/water/chunk_water_transport.js +94 -0
- package/src/shade/renderer/water/shader_water.d.ts +9 -26
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +384 -246
- package/src/shade/renderer/water/shader_water_avboit.d.ts +12 -0
- package/src/shade/renderer/water/shader_water_avboit.d.ts.map +1 -0
- package/src/shade/renderer/water/shader_water_avboit.js +258 -0
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +13 -0
- package/src/shade/renderer/animation/skinning/bounds_refresh/chunk_aabb_atomic_f32.d.ts +0 -29
- package/src/shade/renderer/animation/skinning/bounds_refresh/chunk_aabb_atomic_f32.d.ts.map +0 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/chunk_aabb_atomic_f32.js +0 -59
- package/src/shade/renderer/shader/chunk/geometry/plane/plane_ray_raycast.d.ts.map +0 -1
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
* Ported from meep
|
|
3
3
|
* @type {CodeChunk}
|
|
4
4
|
*/
|
|
5
|
-
export const
|
|
5
|
+
export const chunk_plane_ray_raycast: CodeChunk;
|
|
6
6
|
import { CodeChunk } from "../../../compiler/CodeChunk.js";
|
|
7
|
-
//# sourceMappingURL=
|
|
7
|
+
//# sourceMappingURL=chunk_plane_ray_raycast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_plane_ray_raycast.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/shader/chunk/geometry/plane/chunk_plane_ray_raycast.js"],"names":[],"mappings":"AAEA;;;GAGG;AACH,sCAFU,SAAS,CA2Cf;0BA/CsB,gCAAgC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_screen_space_newton_ray.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.js"],"names":[],"mappings":"AAWA,0FAA0F;AAC1F,sDAwFkF;0BApGxD,6BAA6B"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { CodeChunk } from "../../compiler/CodeChunk.js";
|
|
2
|
+
import { chunk_is_background } from "../depth/chunk_is_background.js";
|
|
3
|
+
import { chunk_decode_g_buffer_normal } from "../geometry/normal/chunk_decode_g_buffer_normal.js";
|
|
4
|
+
import { chunk_plane_from_normal_and_point } from "../geometry/plane/chunk_plane_from_normal_and_point.js";
|
|
5
|
+
import { chunk_plane_ray_raycast } from "../geometry/plane/chunk_plane_ray_raycast.js";
|
|
6
|
+
import { RAY_STRUCT } from "../geometry/ray/RAY_STRUCT.js";
|
|
7
|
+
import { chunk_ray_at } from "../geometry/ray/chunk_ray_at.js";
|
|
8
|
+
import { chunk_ray_nearest_point } from "../geometry/ray/chunk_ray_nearest_point.js";
|
|
9
|
+
import { chunk_inv_project_position } from "./chunk_inv_project_position.js";
|
|
10
|
+
import { chunk_project_position } from "./chunk_project_position.js";
|
|
11
|
+
|
|
12
|
+
/** Mayer et al. 2026 tangent-plane refinement. All arithmetic is in matrix view space. */
|
|
13
|
+
export const chunk_screen_space_newton_ray = CodeChunk.from(/* language=WGSL */ `
|
|
14
|
+
struct ScreenSpaceRayHit {
|
|
15
|
+
uv: vec2<f32>,
|
|
16
|
+
distance: f32,
|
|
17
|
+
residual: f32,
|
|
18
|
+
iterations: u32,
|
|
19
|
+
// 0 hit, 1 bounds/clip, 2 sky, 3 parallel/invalid, 4 interval, 5 exhausted/residual
|
|
20
|
+
status: u32,
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
fn screen_space_ray_in_bounds(uv: vec2<f32>) -> bool {
|
|
24
|
+
return all(uv >= vec2<f32>(0.0)) && all(uv < vec2<f32>(1.0));
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
fn screen_space_ray_projectable(p: vec3<f32>, projection: mat4x4<f32>) -> bool {
|
|
28
|
+
let clip = projection * vec4<f32>(p, 1.0);
|
|
29
|
+
return clip.w > 1e-6 && all(abs(clip) < vec4<f32>(1e30));
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Reconstruct the receiver at the subpixel lookup on its local tangent plane.
|
|
33
|
+
// A texel-center position is a different surface point: projecting its nearest
|
|
34
|
+
// point on the ray can exceed one pixel at grazing angles even for an exact hit.
|
|
35
|
+
fn screen_space_ray_validate(
|
|
36
|
+
ray: Ray, uv: vec2<f32>, depth: texture_2d<f32>, normals: texture_2d<u32>,
|
|
37
|
+
projection: mat4x4<f32>, inverse_projection: mat4x4<f32>, world_to_view: mat4x4<f32>,
|
|
38
|
+
distance_tolerance: f32,
|
|
39
|
+
) -> ScreenSpaceRayHit {
|
|
40
|
+
var hit = ScreenSpaceRayHit(uv, 0.0, 1e20, 0u, 1u);
|
|
41
|
+
if (!screen_space_ray_in_bounds(uv)) { return hit; }
|
|
42
|
+
let size = textureDimensions(depth, 0);
|
|
43
|
+
let coord = vec2<i32>(uv * vec2<f32>(size));
|
|
44
|
+
let d = textureLoad(depth, coord, 0).r;
|
|
45
|
+
if (is_background(d)) { hit.status = 2u; return hit; }
|
|
46
|
+
let center = (vec2<f32>(coord) + 0.5) / vec2<f32>(size);
|
|
47
|
+
let center_position = inv_project_position(vec3<f32>(center, d), inverse_projection);
|
|
48
|
+
let normal = (world_to_view * vec4f(decode_g_buffer_normal(textureLoad(normals, coord, 0).zw), 0.0)).xyz;
|
|
49
|
+
let lookup_ray = inv_project_position(vec3f(uv, d), inverse_projection);
|
|
50
|
+
let denominator = dot(normal, lookup_ray);
|
|
51
|
+
if (!(abs(denominator) > 1e-6)) { hit.status = 3u; return hit; }
|
|
52
|
+
let scale = dot(normal, center_position) / denominator;
|
|
53
|
+
if (!(scale > 0.0)) { hit.status = 3u; return hit; }
|
|
54
|
+
let p = lookup_ray * scale;
|
|
55
|
+
let travel = dot(p - ray.origin, ray.direction);
|
|
56
|
+
hit.distance = travel;
|
|
57
|
+
if (!(travel > 1e-4 && travel <= ray.tmax)) { hit.status = 4u; return hit; }
|
|
58
|
+
let nearest = ray_nearest_point(ray, p);
|
|
59
|
+
if (!screen_space_ray_projectable(nearest, projection)) { return hit; }
|
|
60
|
+
let pixel_error = length((project_position(nearest, projection).xy - uv) * vec2<f32>(size));
|
|
61
|
+
hit.residual = distance(p, nearest);
|
|
62
|
+
hit.status = 5u;
|
|
63
|
+
if (pixel_error <= 1.0 && hit.residual <= distance_tolerance) { hit.status = 0u; }
|
|
64
|
+
return hit;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
fn screen_space_newton_ray(
|
|
68
|
+
ray: Ray, seed_uv: vec2<f32>, depth: texture_2d<f32>, normals: texture_2d<u32>,
|
|
69
|
+
projection: mat4x4<f32>, inverse_projection: mat4x4<f32>, world_to_view: mat4x4<f32>,
|
|
70
|
+
max_updates: u32, distance_tolerance: f32,
|
|
71
|
+
) -> ScreenSpaceRayHit {
|
|
72
|
+
var uv = seed_uv;
|
|
73
|
+
var hit = ScreenSpaceRayHit(uv, 0.0, 1e20, 0u, 5u);
|
|
74
|
+
let size = textureDimensions(depth, 0);
|
|
75
|
+
for (var i = 0u; i < min(max_updates, 16u); i++) {
|
|
76
|
+
hit.iterations = i + 1u;
|
|
77
|
+
if (!screen_space_ray_in_bounds(uv)) { hit.status = 1u; return hit; }
|
|
78
|
+
let coord = vec2<i32>(uv * vec2<f32>(size));
|
|
79
|
+
let d = textureLoad(depth, coord, 0).r;
|
|
80
|
+
if (is_background(d)) { hit.status = 2u; return hit; }
|
|
81
|
+
let center = (vec2<f32>(coord) + 0.5) / vec2<f32>(size);
|
|
82
|
+
let receiver = inv_project_position(vec3<f32>(center, d), inverse_projection);
|
|
83
|
+
// .zw is the geometric face normal; .xy includes material normal mapping.
|
|
84
|
+
let world_normal = decode_g_buffer_normal(textureLoad(normals, coord, 0).zw);
|
|
85
|
+
let normal = (world_to_view * vec4<f32>(world_normal, 0.0)).xyz;
|
|
86
|
+
if (!(abs(dot(ray.direction, normal)) > 1e-4)) { hit.status = 3u; return hit; }
|
|
87
|
+
let plane = plane_from_normal_and_point(normal, receiver);
|
|
88
|
+
let travel = plane_ray_raycast(ray.origin, ray.direction, plane);
|
|
89
|
+
if (!(travel > 1e-4 && travel <= ray.tmax)) { hit.status = 4u; return hit; }
|
|
90
|
+
let next = ray_at(ray.origin, ray.direction, travel);
|
|
91
|
+
if (!screen_space_ray_projectable(next, projection)) { hit.status = 1u; return hit; }
|
|
92
|
+
uv = project_position(next, projection).xy;
|
|
93
|
+
hit = screen_space_ray_validate(ray, uv, depth, normals, projection, inverse_projection, world_to_view, distance_tolerance);
|
|
94
|
+
hit.iterations = i + 1u;
|
|
95
|
+
if (hit.status == 0u || hit.status == 1u || hit.status == 2u) { return hit; }
|
|
96
|
+
}
|
|
97
|
+
return hit;
|
|
98
|
+
}
|
|
99
|
+
`, [RAY_STRUCT.declaration_chunk, chunk_is_background, chunk_decode_g_buffer_normal,
|
|
100
|
+
chunk_plane_from_normal_and_point, chunk_plane_ray_raycast, chunk_ray_at,
|
|
101
|
+
chunk_ray_nearest_point, chunk_inv_project_position, chunk_project_position]);
|
|
@@ -6,7 +6,7 @@ import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
|
|
|
6
6
|
import { COMPUTE_SHADER_DEFAULT_GROUP_SIZE } from "../../../../shader/COMPUTE_SHADER_DEFAULT_GROUP_SIZE.js";
|
|
7
7
|
import { ComputeShader } from "../../../../shader/ComputeShader.js";
|
|
8
8
|
import { ShaderResourceSetDescriptor } from "../../../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
9
|
-
import {
|
|
9
|
+
import { chunk_atomic_min_f32_storage } from "../../../../shader/chunk/atomic/chunk_atomic_min_f32_storage.js";
|
|
10
10
|
import { LIGHT_DATABASE_SPEC } from "../../../../light/LIGHT_DATABASE_SPEC.js";
|
|
11
11
|
import { MESHES_TABLE } from "../../../../scene/chunk_scene_database_access.js";
|
|
12
12
|
import { CSM_CASTER_RANGE_UNKNOWN } from "../CSM_CASTER_RANGE_STRUCT.js";
|
|
@@ -124,13 +124,13 @@ fn main(
|
|
|
124
124
|
|
|
125
125
|
// one atomic per subgroup rather than one per row, and none where no row was inside
|
|
126
126
|
if lane_id == 0u && near < RANGE_UNKNOWN {
|
|
127
|
-
|
|
127
|
+
atomic_min_f32_storage(&ranges[settings.base + c], near);
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
130
|
}
|
|
131
131
|
`, [
|
|
132
132
|
MESHES_TABLE.chunk_iterate(WG),
|
|
133
|
-
|
|
133
|
+
chunk_atomic_min_f32_storage,
|
|
134
134
|
]);
|
|
135
135
|
|
|
136
136
|
accumulate_body.addExtension(WebGPUExtensionType.Subgroups);
|
|
@@ -1,33 +1,66 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Draws water surfaces over a lit frame.
|
|
3
|
-
*
|
|
4
|
-
* **Water is a transparent pass on top of opaque**, which is why it lives here rather than in the
|
|
5
|
-
* material system: it is not shaded, it does not write the G-buffer, and it needs the finished
|
|
6
|
-
* depth of everything behind it in order to know how much water the view is looking through.
|
|
7
|
-
*
|
|
8
|
-
* The pass reads scene depth and writes the frame's colour, so it belongs at
|
|
9
|
-
* {@link FramePhase.AfterLighting} — opaque surfaces lit and composited, transparency not yet run.
|
|
10
|
-
*/
|
|
1
|
+
/** Production water channel. Only AVBOIT's shared resolve composites its radiance. */
|
|
11
2
|
export class GPUWaterRenderer {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
3
|
+
surfaces: any[];
|
|
4
|
+
settings: {
|
|
5
|
+
enabled: boolean;
|
|
6
|
+
max_distance: number;
|
|
7
|
+
distance_tolerance: number;
|
|
8
|
+
max_updates: number;
|
|
9
|
+
fallback_steps: number;
|
|
10
|
+
mode: number;
|
|
11
|
+
reflections: number;
|
|
12
|
+
debug_view: number;
|
|
13
|
+
};
|
|
14
|
+
avboit_is_empty(): boolean;
|
|
15
|
+
/** Optional single-pixel readback on the next rendered water frame. No per-frame readback. */
|
|
16
|
+
request_probe(uv: any): Promise<any>;
|
|
17
|
+
dispose(): void;
|
|
18
|
+
avboit_prepare({ graph, view_ctx, camera, color_texture, depth_texture, normal_texture, hzb_texture, environment_texture }: {
|
|
19
|
+
graph: any;
|
|
20
|
+
view_ctx: any;
|
|
21
|
+
camera: any;
|
|
22
|
+
color_texture: any;
|
|
23
|
+
depth_texture: any;
|
|
24
|
+
normal_texture: any;
|
|
25
|
+
hzb_texture: any;
|
|
26
|
+
environment_texture: any;
|
|
27
|
+
}): {
|
|
28
|
+
background_color: any;
|
|
29
|
+
};
|
|
30
|
+
avboit_occupancy({ graph, camera, cluster_parameters, occupancy }: {
|
|
31
|
+
graph: any;
|
|
32
|
+
camera: any;
|
|
33
|
+
cluster_parameters: any;
|
|
34
|
+
occupancy: any;
|
|
35
|
+
}): any;
|
|
36
|
+
avboit_splat({ graph, camera, warp, voxel_resolution, volume }: {
|
|
37
|
+
graph: any;
|
|
38
|
+
camera: any;
|
|
39
|
+
warp: any;
|
|
40
|
+
voxel_resolution: any;
|
|
41
|
+
volume: any;
|
|
42
|
+
}): {
|
|
43
|
+
extinction: any;
|
|
44
|
+
overflow: any;
|
|
45
|
+
dummy: any;
|
|
46
|
+
};
|
|
47
|
+
avboit_draw({ graph, view_ctx, camera, warp, integral, volumetrics_lut, volumetrics_metadata, accumulators }: {
|
|
48
|
+
graph: any;
|
|
49
|
+
view_ctx: any;
|
|
50
|
+
camera: any;
|
|
51
|
+
warp: any;
|
|
52
|
+
integral: any;
|
|
53
|
+
volumetrics_lut: any;
|
|
54
|
+
volumetrics_metadata: any;
|
|
55
|
+
accumulators: any;
|
|
56
|
+
}): {
|
|
57
|
+
color: any;
|
|
58
|
+
norm: any;
|
|
59
|
+
extinction: any;
|
|
60
|
+
emission: any;
|
|
61
|
+
};
|
|
62
|
+
/** Debug presentation only: called after shared resolve, never sampled by production optics. */
|
|
63
|
+
inspect(graph: any, view_ctx: any, output_resolution: any): number;
|
|
31
64
|
#private;
|
|
32
65
|
}
|
|
33
66
|
//# sourceMappingURL=GPUWaterRenderer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUWaterRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/water/GPUWaterRenderer.js"],"names":[],"mappings":"AAaA
|
|
1
|
+
{"version":3,"file":"GPUWaterRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/water/GPUWaterRenderer.js"],"names":[],"mappings":"AAaA,sFAAsF;AACtF;IACI,gBAAc;IACd;;;;;;;;;MACiF;IAOjF,2BAEC;IAED,8FAA8F;IAC9F,qCAgBC;IAED,gBAKC;IAED;;;;;;;;;;;MA4GC;IAQD;;;;;YAMC;IAED;;;;;;;;;;MAOC;IAED;;;;;;;;;;;;;;MAwBC;IAED,gGAAgG;IAChG,mEAYC;;CA4BJ"}
|