@woosh/meep-engine 3.30.0 → 3.32.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/build/bundle-worker-image-decoder.js +1 -1
- package/build/bundle-worker-terrain.js +1 -1
- package/package.json +3 -1
- package/src/core/binary/BinaryBuffer.d.ts.map +1 -1
- package/src/core/binary/BinaryBuffer.js +42 -14
- package/src/core/binary/BitImage2.d.ts.map +1 -1
- package/src/core/binary/BitImage2.js +2 -6
- package/src/core/binary/BitSet.js +5 -5
- package/src/core/binary/compression/chunks_to_stream.d.ts +24 -0
- package/src/core/binary/compression/chunks_to_stream.d.ts.map +1 -0
- package/src/core/binary/compression/chunks_to_stream.js +35 -0
- package/src/core/binary/compression/compress_bytes.d.ts +3 -4
- package/src/core/binary/compression/compress_bytes.d.ts.map +1 -1
- package/src/core/binary/compression/compress_bytes.js +6 -17
- package/src/core/binary/compression/decompress_bytes.d.ts +1 -2
- package/src/core/binary/compression/decompress_bytes.d.ts.map +1 -1
- package/src/core/binary/compression/decompress_bytes.js +4 -15
- package/src/core/binary/compression/decompress_bytes_into.d.ts.map +1 -1
- package/src/core/binary/compression/decompress_bytes_into.js +2 -13
- package/src/core/binary/ctz32.d.ts +12 -4
- package/src/core/binary/ctz32.d.ts.map +1 -1
- package/src/core/binary/ctz32.js +23 -41
- package/src/core/binary/lsb_32.d.ts +10 -2
- package/src/core/binary/lsb_32.d.ts.map +1 -1
- package/src/core/binary/lsb_32.js +17 -12
- package/src/core/binary/lz4/lz4_compress_block_hc.js +2 -2
- package/src/core/binary/type/DataTypeIndices.d.ts +39 -0
- package/src/core/binary/type/DataTypeIndices.d.ts.map +1 -1
- package/src/core/binary/type/DataTypeIndices.js +38 -1
- package/src/core/binary/type/Type.d.ts.map +1 -1
- package/src/core/binary/type/Type.js +6 -1
- package/src/core/bvh2/bvh3/ebvh_optimize_treelet.js +3 -3
- package/src/core/bvh8/bvh8_geometry_validate.d.ts.map +1 -1
- package/src/core/bvh8/bvh8_geometry_validate.js +2 -88
- package/src/core/bvh8/bvh8_geometry_validate_bounds.d.ts +25 -0
- package/src/core/bvh8/bvh8_geometry_validate_bounds.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_geometry_validate_bounds.js +105 -0
- package/src/core/bvh8/bvh8_geometry_validate_indirect.d.ts.map +1 -1
- package/src/core/bvh8/bvh8_geometry_validate_indirect.js +2 -91
- package/src/core/clipboard/obtainClipBoard.d.ts +4 -0
- package/src/core/clipboard/obtainClipBoard.d.ts.map +1 -1
- package/src/core/clipboard/obtainClipBoard.js +29 -8
- package/src/core/clipboard/safeClipboardReadText.d.ts.map +1 -1
- package/src/core/clipboard/safeClipboardReadText.js +73 -38
- package/src/core/clipboard/safeClipboardWriteText.d.ts.map +1 -1
- package/src/core/clipboard/safeClipboardWriteText.js +11 -9
- package/src/core/collection/array/iterator/ArrayIteratorRandom.d.ts.map +1 -1
- package/src/core/collection/array/iterator/ArrayIteratorRandom.js +6 -0
- package/src/core/collection/heap/IndexedFloatMinHeap.d.ts +6 -0
- package/src/core/collection/heap/IndexedFloatMinHeap.d.ts.map +1 -1
- package/src/core/collection/heap/IndexedFloatMinHeap.js +14 -0
- package/src/core/collection/list/FilteredListProjection.d.ts.map +1 -1
- package/src/core/collection/list/FilteredListProjection.js +7 -54
- package/src/core/collection/list/List.d.ts +4 -0
- package/src/core/collection/list/List.d.ts.map +1 -1
- package/src/core/collection/list/List.js +10 -52
- package/src/core/collection/list/SortedListProjection.d.ts +7 -0
- package/src/core/collection/list/SortedListProjection.d.ts.map +1 -1
- package/src/core/collection/list/SortedListProjection.js +12 -0
- package/src/core/collection/list/list_apply_ordered_diff.d.ts +37 -0
- package/src/core/collection/list/list_apply_ordered_diff.d.ts.map +1 -0
- package/src/core/collection/list/list_apply_ordered_diff.js +87 -0
- package/src/core/collection/map/BiMap.d.ts.map +1 -1
- package/src/core/collection/map/BiMap.js +19 -6
- package/src/core/collection/map/HashMap.d.ts.map +1 -1
- package/src/core/collection/map/HashMap.js +38 -11
- package/src/core/collection/queue/Deque.d.ts +2 -2
- package/src/core/collection/queue/Deque.d.ts.map +1 -1
- package/src/core/collection/queue/Deque.js +12 -1
- package/src/core/collection/table/RowFirstTable.d.ts.map +1 -1
- package/src/core/collection/table/RowFirstTable.js +15 -2
- package/src/core/collection/table/serializeRowFirstTable.d.ts.map +1 -1
- package/src/core/collection/table/serializeRowFirstTable.js +2 -3
- package/src/core/color/operations/color_lerp.d.ts.map +1 -1
- package/src/core/color/operations/color_lerp.js +77 -55
- package/src/core/color/sRGB/linear_to_sRGB.d.ts.map +1 -1
- package/src/core/color/sRGB/linear_to_sRGB.js +3 -1
- package/src/core/debug/matchers/AllOf.d.ts +2 -1
- package/src/core/debug/matchers/AllOf.d.ts.map +1 -1
- package/src/core/debug/matchers/AllOf.js +1 -1
- package/src/core/debug/matchers/AnyOf.d.ts +2 -1
- package/src/core/debug/matchers/AnyOf.d.ts.map +1 -1
- package/src/core/debug/matchers/AnyOf.js +1 -1
- package/src/core/debug/matchers/CombinableMatcher.d.ts +2 -1
- package/src/core/debug/matchers/CombinableMatcher.d.ts.map +1 -1
- package/src/core/debug/matchers/CombinableMatcher.js +1 -1
- package/src/core/debug/matchers/DescribeAs.d.ts +2 -1
- package/src/core/debug/matchers/DescribeAs.d.ts.map +1 -1
- package/src/core/debug/matchers/DescribeAs.js +2 -1
- package/src/core/debug/matchers/IsAnything.d.ts +2 -1
- package/src/core/debug/matchers/IsAnything.d.ts.map +1 -1
- package/src/core/debug/matchers/IsAnything.js +2 -1
- package/src/core/debug/matchers/IsEqual.d.ts +2 -1
- package/src/core/debug/matchers/IsEqual.d.ts.map +1 -1
- package/src/core/debug/matchers/IsEqual.js +2 -1
- package/src/core/debug/matchers/IsFinite.d.ts +2 -1
- package/src/core/debug/matchers/IsFinite.d.ts.map +1 -1
- package/src/core/debug/matchers/IsFinite.js +2 -1
- package/src/core/debug/matchers/IsIn.d.ts +2 -1
- package/src/core/debug/matchers/IsIn.d.ts.map +1 -1
- package/src/core/debug/matchers/IsIn.js +2 -1
- package/src/core/debug/matchers/IsInteger.d.ts +2 -1
- package/src/core/debug/matchers/IsInteger.d.ts.map +1 -1
- package/src/core/debug/matchers/IsInteger.js +2 -1
- package/src/core/debug/matchers/IsIterableContaining.d.ts +2 -1
- package/src/core/debug/matchers/IsIterableContaining.d.ts.map +1 -1
- package/src/core/debug/matchers/IsIterableContaining.js +1 -1
- package/src/core/debug/matchers/IsNot.d.ts +2 -1
- package/src/core/debug/matchers/IsNot.d.ts.map +1 -1
- package/src/core/debug/matchers/IsNot.js +2 -1
- package/src/core/debug/matchers/IsNull.d.ts +2 -1
- package/src/core/debug/matchers/IsNull.d.ts.map +1 -1
- package/src/core/debug/matchers/IsNull.js +2 -1
- package/src/core/debug/matchers/IsUndefined.d.ts +2 -1
- package/src/core/debug/matchers/IsUndefined.d.ts.map +1 -1
- package/src/core/debug/matchers/IsUndefined.js +2 -1
- package/src/core/events/signal/Signal.d.ts +15 -0
- package/src/core/events/signal/Signal.d.ts.map +1 -1
- package/src/core/events/signal/Signal.js +857 -820
- package/src/core/fsm/simple/SimpleStateMachineDescription.d.ts.map +1 -1
- package/src/core/fsm/simple/SimpleStateMachineDescription.js +4 -3
- package/src/core/geom/2d/convex-hull/convex_hull_fixed_count_2d_bruteforce.d.ts.map +1 -1
- package/src/core/geom/2d/convex-hull/convex_hull_fixed_count_2d_bruteforce.js +6 -1
- package/src/core/geom/2d/convex-hull/convex_hull_fixed_count_2d_relaxation.d.ts +1 -1
- package/src/core/geom/2d/convex-hull/convex_hull_fixed_count_2d_relaxation.d.ts.map +1 -1
- package/src/core/geom/2d/convex-hull/convex_hull_fixed_count_2d_relaxation.js +6 -7
- package/src/core/geom/2d/hash-grid/SpatialHashGrid.d.ts.map +1 -1
- package/src/core/geom/2d/hash-grid/SpatialHashGrid.js +23 -6
- package/src/core/geom/2d/line/ray2_ray2_compute_intersection_array_2d.d.ts.map +1 -1
- package/src/core/geom/2d/line/ray2_ray2_compute_intersection_array_2d.js +13 -1
- package/src/core/geom/3d/aabb/aabb3_raycast_hit_point.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/aabb3_raycast_hit_point.js +53 -32
- package/src/core/geom/3d/atlas/segment/atlas_chart_growth_cost.d.ts +40 -0
- package/src/core/geom/3d/atlas/segment/atlas_chart_growth_cost.d.ts.map +1 -0
- package/src/core/geom/3d/atlas/segment/atlas_chart_growth_cost.js +54 -0
- package/src/core/geom/3d/atlas/segment/atlas_segment_charts.d.ts +21 -3
- package/src/core/geom/3d/atlas/segment/atlas_segment_charts.d.ts.map +1 -1
- package/src/core/geom/3d/atlas/segment/atlas_segment_charts.js +24 -15
- package/src/core/geom/3d/atlas/segment/atlas_segment_charts_atomic.d.ts +6 -3
- package/src/core/geom/3d/atlas/segment/atlas_segment_charts_atomic.d.ts.map +1 -1
- package/src/core/geom/3d/atlas/segment/atlas_segment_charts_atomic.js +9 -15
- package/src/core/geom/3d/cone/cone_compute_plane_side.d.ts.map +1 -1
- package/src/core/geom/3d/cone/cone_compute_plane_side.js +31 -19
- package/src/core/geom/3d/equirectangular/equirectangular_direction_to_uv.d.ts +11 -1
- package/src/core/geom/3d/equirectangular/equirectangular_direction_to_uv.d.ts.map +1 -1
- package/src/core/geom/3d/equirectangular/equirectangular_direction_to_uv.js +11 -1
- package/src/core/geom/3d/equirectangular/equirectangular_uv_to_direction.d.ts +11 -1
- package/src/core/geom/3d/equirectangular/equirectangular_uv_to_direction.d.ts.map +1 -1
- package/src/core/geom/3d/equirectangular/equirectangular_uv_to_direction.js +11 -1
- package/src/core/geom/3d/frustum/frustum3_compute_closest_point.d.ts.map +1 -1
- package/src/core/geom/3d/frustum/frustum3_compute_closest_point.js +55 -0
- package/src/core/geom/3d/frustum/frustum_from_projection_matrix_array.d.ts +14 -0
- package/src/core/geom/3d/frustum/frustum_from_projection_matrix_array.d.ts.map +1 -1
- package/src/core/geom/3d/frustum/frustum_from_projection_matrix_array.js +17 -1
- package/src/core/geom/3d/gjk/gjk.d.ts +15 -0
- package/src/core/geom/3d/gjk/gjk.d.ts.map +1 -1
- package/src/core/geom/3d/gjk/gjk.js +15 -0
- package/src/core/geom/3d/gjk/gjk_epa_penetration.d.ts.map +1 -1
- package/src/core/geom/3d/gjk/gjk_epa_penetration.js +18 -0
- package/src/core/geom/3d/hash-grid/PointHashGrid3.d.ts +32 -3
- package/src/core/geom/3d/hash-grid/PointHashGrid3.d.ts.map +1 -1
- package/src/core/geom/3d/hash-grid/PointHashGrid3.js +36 -3
- package/src/core/geom/3d/morton/v3_morton_encode_lut.d.ts.map +1 -1
- package/src/core/geom/3d/morton/v3_morton_encode_lut.js +11 -4
- package/src/core/geom/3d/morton/v3_morton_encode_normalized.d.ts +16 -4
- package/src/core/geom/3d/morton/v3_morton_encode_normalized.d.ts.map +1 -1
- package/src/core/geom/3d/morton/v3_morton_encode_normalized.js +21 -8
- package/src/core/geom/3d/normal/spherical/encode_unit_to_spheremap.d.ts.map +1 -1
- package/src/core/geom/3d/normal/spherical/encode_unit_to_spheremap.js +17 -3
- package/src/core/geom/3d/octahedra/octahedral_direction_to_uv.d.ts +10 -0
- package/src/core/geom/3d/octahedra/octahedral_direction_to_uv.d.ts.map +1 -1
- package/src/core/geom/3d/octahedra/octahedral_direction_to_uv.js +46 -49
- package/src/core/geom/3d/octahedra/octahedral_uv_to_direction.d.ts +13 -1
- package/src/core/geom/3d/octahedra/octahedral_uv_to_direction.d.ts.map +1 -1
- package/src/core/geom/3d/octahedra/octahedral_uv_to_direction.js +36 -39
- package/src/core/geom/3d/quadric/quadric3_to_tensor_m3_inverse.d.ts +4 -1
- package/src/core/geom/3d/quadric/quadric3_to_tensor_m3_inverse.d.ts.map +1 -1
- package/src/core/geom/3d/quadric/quadric3_to_tensor_m3_inverse.js +22 -4
- package/src/core/geom/3d/quaternion/quat3_canonicalize_sign_run.d.ts +38 -0
- package/src/core/geom/3d/quaternion/quat3_canonicalize_sign_run.d.ts.map +1 -0
- package/src/core/geom/3d/quaternion/quat3_canonicalize_sign_run.js +76 -0
- package/src/core/geom/3d/quaternion/quat3_encode_to_uint32.d.ts +11 -0
- package/src/core/geom/3d/quaternion/quat3_encode_to_uint32.d.ts.map +1 -1
- package/src/core/geom/3d/quaternion/quat3_encode_to_uint32.js +14 -34
- package/src/core/geom/3d/shape/PosedShape3D.d.ts +9 -0
- package/src/core/geom/3d/shape/PosedShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/PosedShape3D.js +43 -0
- package/src/core/geom/3d/shape/UnionShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/UnionShape3D.js +20 -3
- package/src/core/geom/3d/shape/json/type_adapters.d.ts +11 -2
- package/src/core/geom/3d/shape/json/type_adapters.d.ts.map +1 -1
- package/src/core/geom/3d/shape/json/type_adapters.js +36 -12
- package/src/core/geom/3d/sphere/harmonics/sh3_sample_irradiance_by_direction.d.ts +13 -0
- package/src/core/geom/3d/sphere/harmonics/sh3_sample_irradiance_by_direction.d.ts.map +1 -1
- package/src/core/geom/3d/sphere/harmonics/sh3_sample_irradiance_by_direction.js +17 -4
- package/src/core/geom/3d/tetrahedra/tetrahedral_flip_layouts.d.ts +88 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_flip_layouts.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_flip_layouts.js +108 -0
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_23.js +13 -31
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_flip_32.js +14 -22
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.js +96 -26
- package/src/core/geom/3d/tetrahedra/tetrahedron_contains_point.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/tetrahedron_contains_point.js +17 -6
- package/src/core/geom/3d/topology/struct/binary/io/bt_boundary_loop.d.ts +27 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_boundary_loop.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_boundary_loop.js +101 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.d.ts +3 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_close_boundary_holes.js +5 -57
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadrics.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadrics.js +2 -34
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_fill_small_holes.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_fill_small_holes.js +2 -43
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts +54 -33
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.js +229 -68
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_kill_parallels.js +4 -15
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_mesh_split_pinched_vertices.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_mesh_split_pinched_vertices.js +13 -1
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_fuse_duplicate_edges.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_fuse_duplicate_edges.js +3 -1
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.js +22 -3
- package/src/core/geom/3d/topology/struct/binary/query/bt_edge_count_faces.d.ts +17 -2
- package/src/core/geom/3d/topology/struct/binary/query/bt_edge_count_faces.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_edge_count_faces.js +28 -4
- package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_edge_get.js +8 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_edge_adjacent_faces_weighted.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_edge_adjacent_faces_weighted.js +10 -2
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_island_flood_fill.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_island_flood_fill.js +2 -0
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_build_boundary_distance_field.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_build_boundary_distance_field.js +25 -5
- package/src/core/geom/3d/triangle/tri3_compute_normal.d.ts +5 -1
- package/src/core/geom/3d/triangle/tri3_compute_normal.d.ts.map +1 -1
- package/src/core/geom/3d/triangle/tri3_compute_normal.js +8 -1
- package/src/core/geom/3d/triangle/tri3_ray_intersection.d.ts.map +1 -1
- package/src/core/geom/3d/triangle/tri3_ray_intersection.js +15 -3
- package/src/core/geom/3d/triangle/tri3_ray_intersection_barycentric.d.ts +2 -1
- package/src/core/geom/3d/triangle/tri3_ray_intersection_barycentric.d.ts.map +1 -1
- package/src/core/geom/3d/triangle/tri3_ray_intersection_barycentric.js +2 -1
- package/src/core/geom/3d/triangle/tri3_ray_intersection_barycentric_edge.d.ts +1 -1
- package/src/core/geom/3d/triangle/tri3_ray_intersection_barycentric_edge.d.ts.map +1 -1
- package/src/core/geom/3d/triangle/tri3_ray_intersection_barycentric_edge.js +8 -1
- package/src/core/geom/vec/vector_normalize.d.ts.map +1 -1
- package/src/core/geom/vec/vector_normalize.js +5 -1
- package/src/core/geom/vec3/v3_slerp.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_slerp.js +69 -4
- package/src/core/geom/vec4/v4_max_axis.d.ts +28 -0
- package/src/core/geom/vec4/v4_max_axis.d.ts.map +1 -0
- package/src/core/geom/vec4/v4_max_axis.js +41 -0
- package/src/core/graph/coloring/colorizeGraph.js +10 -7
- package/src/core/graph/layout/graph_peel_topological_layer.d.ts.map +1 -1
- package/src/core/graph/layout/graph_peel_topological_layer.js +16 -2
- package/src/core/json/JsonUtils.d.ts.map +1 -1
- package/src/core/json/JsonUtils.js +6 -2
- package/src/core/json/abstractJSONSerializer.d.ts.map +1 -1
- package/src/core/json/abstractJSONSerializer.js +5 -1
- package/src/core/lang/reactive/ReactiveOperatorType.d.ts +20 -0
- package/src/core/lang/reactive/ReactiveOperatorType.d.ts.map +1 -1
- package/src/core/lang/reactive/ReactiveOperatorType.js +34 -12
- package/src/core/localization/LanguageMetadata.d.ts +2 -1
- package/src/core/localization/LanguageMetadata.d.ts.map +1 -1
- package/src/core/localization/LanguageMetadata.js +6 -0
- package/src/core/localization/Localization.d.ts.map +1 -1
- package/src/core/localization/Localization.js +23 -10
- package/src/core/localization/LocalizationEngine.d.ts.map +1 -1
- package/src/core/localization/LocalizationEngine.js +4 -0
- package/src/core/math/fract.d.ts.map +1 -1
- package/src/core/math/fract.js +4 -3
- package/src/core/math/hash/squirrel3.d.ts +10 -2
- package/src/core/math/hash/squirrel3.d.ts.map +1 -1
- package/src/core/math/hash/squirrel3.js +16 -8
- package/src/core/math/linalg/m2/m2_polar_decomp_noS.d.ts +7 -0
- package/src/core/math/linalg/m2/m2_polar_decomp_noS.d.ts.map +1 -1
- package/src/core/math/linalg/m2/m2_polar_decomp_noS.js +20 -1
- package/src/core/math/physics/pdf/pdf_normal.d.ts +11 -3
- package/src/core/math/physics/pdf/pdf_normal.d.ts.map +1 -1
- package/src/core/math/physics/pdf/pdf_normal.js +25 -11
- package/src/core/math/solveQuadratic.d.ts.map +1 -1
- package/src/core/math/solveQuadratic.js +22 -3
- package/src/core/math/statistics/computeStatisticalPartialMedian.d.ts +9 -2
- package/src/core/math/statistics/computeStatisticalPartialMedian.d.ts.map +1 -1
- package/src/core/math/statistics/computeStatisticalPartialMedian.js +12 -6
- package/src/core/math/statistics/computeStatisticalPercentile.d.ts.map +1 -1
- package/src/core/math/statistics/computeStatisticalPercentile.js +9 -2
- package/src/core/math/statistics/gaussian_amplitude.d.ts +10 -1
- package/src/core/math/statistics/gaussian_amplitude.d.ts.map +1 -1
- package/src/core/math/statistics/gaussian_amplitude.js +20 -15
- package/src/core/model/BooleanVector3.d.ts.map +1 -1
- package/src/core/model/BooleanVector3.js +18 -2
- package/src/core/model/BoundedValue.d.ts +9 -0
- package/src/core/model/BoundedValue.d.ts.map +1 -1
- package/src/core/model/BoundedValue.js +30 -3
- package/src/core/model/ObservedBoolean.d.ts.map +1 -1
- package/src/core/model/ObservedBoolean.js +22 -2
- package/src/core/model/ObservedEnum.d.ts.map +1 -1
- package/src/core/model/ObservedEnum.js +6 -2
- package/src/core/model/node-graph/NodeGraph.d.ts +6 -1
- package/src/core/model/node-graph/NodeGraph.d.ts.map +1 -1
- package/src/core/model/node-graph/NodeGraph.js +22 -4
- package/src/core/model/node-graph/json/deserializeNodeGraphFromJSON.d.ts.map +1 -1
- package/src/core/model/node-graph/json/deserializeNodeGraphFromJSON.js +3 -1
- package/src/core/model/node-graph/json/serializeNodeGraphToJSON.d.ts.map +1 -1
- package/src/core/model/node-graph/json/serializeNodeGraphToJSON.js +5 -0
- package/src/core/model/node-graph/type/DataType.d.ts.map +1 -1
- package/src/core/model/node-graph/type/DataType.js +8 -0
- package/src/core/model/node-graph/type/ParametricDataType.d.ts.map +1 -1
- package/src/core/model/node-graph/type/ParametricDataType.js +19 -0
- package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/NodeGraphVisualData.js +5 -0
- package/src/core/model/reactive/js/compileReactiveToJS.d.ts +22 -0
- package/src/core/model/reactive/js/compileReactiveToJS.d.ts.map +1 -1
- package/src/core/model/reactive/js/compileReactiveToJS.js +113 -219
- package/src/core/model/reactive/model/ReactiveBinaryExpression.d.ts.map +1 -1
- package/src/core/model/reactive/model/ReactiveBinaryExpression.js +8 -2
- package/src/core/model/reactive/model/comparative/ReactiveEquals.d.ts.map +1 -1
- package/src/core/model/reactive/model/comparative/ReactiveEquals.js +3 -1
- package/src/core/model/reactive/model/comparative/ReactiveNotEquals.d.ts.map +1 -1
- package/src/core/model/reactive/model/comparative/ReactiveNotEquals.js +2 -1
- package/src/core/model/reactive/model/terminal/ReactiveLiteralString.d.ts.map +1 -1
- package/src/core/model/reactive/model/terminal/ReactiveLiteralString.js +4 -2
- package/src/core/model/stat/Stat.d.ts.map +1 -1
- package/src/core/model/stat/Stat.js +4 -0
- package/src/core/parser/seedVariablesIntoTemplateString.d.ts.map +1 -1
- package/src/core/parser/seedVariablesIntoTemplateString.js +5 -0
- package/src/core/parser/simple/readArrayLiteral.d.ts.map +1 -1
- package/src/core/parser/simple/readArrayLiteral.js +7 -0
- package/src/core/parser/simple/readHexToken.d.ts +3 -0
- package/src/core/parser/simple/readHexToken.d.ts.map +1 -1
- package/src/core/parser/simple/readHexToken.js +39 -106
- package/src/core/parser/simple/readNumberToken.d.ts.map +1 -1
- package/src/core/parser/simple/readNumberToken.js +13 -4
- package/src/core/parser/simple/readUnsignedIntegerToken.d.ts +2 -0
- package/src/core/parser/simple/readUnsignedIntegerToken.d.ts.map +1 -1
- package/src/core/parser/simple/readUnsignedIntegerToken.js +31 -71
- package/src/core/parser/simple/read_digits.d.ts +31 -0
- package/src/core/parser/simple/read_digits.d.ts.map +1 -0
- package/src/core/parser/simple/read_digits.js +74 -0
- package/src/core/primitives/numbers/number_format_by_thousands.d.ts.map +1 -1
- package/src/core/primitives/numbers/number_format_by_thousands.js +16 -1
- package/src/core/primitives/numbers/number_pretty_print.d.ts.map +1 -1
- package/src/core/primitives/numbers/number_pretty_print.js +6 -1
- package/src/core/process/executor/ConcurrentExecutor.d.ts.map +1 -1
- package/src/core/process/executor/ConcurrentExecutor.js +36 -0
- package/src/core/process/task/Task.d.ts +8 -0
- package/src/core/process/task/Task.d.ts.map +1 -1
- package/src/core/process/task/Task.js +12 -1
- package/src/core/process/task/TaskGroup.d.ts +6 -0
- package/src/core/process/task/TaskGroup.d.ts.map +1 -1
- package/src/core/process/task/TaskGroup.js +7 -1
- package/src/core/process/undo/ActionProcessor.d.ts +12 -0
- package/src/core/process/undo/ActionProcessor.d.ts.map +1 -1
- package/src/core/process/undo/ActionProcessor.js +41 -15
- package/src/core/process/worker/OnDemandWorkerManager.d.ts.map +1 -1
- package/src/core/process/worker/OnDemandWorkerManager.js +6 -1
- package/src/core/process/worker/WorkerBuilder.d.ts.map +1 -1
- package/src/core/process/worker/WorkerBuilder.js +27 -5
- package/src/engine/Clock.d.ts.map +1 -1
- package/src/engine/Clock.js +11 -0
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +107 -6
- package/src/engine/achievements/AchievementManager.d.ts.map +1 -1
- package/src/engine/achievements/AchievementManager.js +16 -1
- package/src/engine/animation/clip/ecd_bind_animation_curve.d.ts.map +1 -1
- package/src/engine/animation/clip/ecd_bind_animation_curve.js +17 -6
- package/src/engine/animation/clip/hemisphere_align_quaternion_values.d.ts +19 -10
- package/src/engine/animation/clip/hemisphere_align_quaternion_values.d.ts.map +1 -1
- package/src/engine/animation/clip/hemisphere_align_quaternion_values.js +19 -23
- package/src/engine/animation/keyed2/AnimationTrackPlayback.d.ts +1 -1
- package/src/engine/animation/keyed2/AnimationTrackPlayback.d.ts.map +1 -1
- package/src/engine/animation/keyed2/AnimationTrackPlayback.js +21 -4
- package/src/engine/asset/AssetManager.d.ts.map +1 -1
- package/src/engine/asset/AssetManager.js +11 -3
- package/src/engine/control/first-person/FirstPersonPlayerController.d.ts +1 -0
- package/src/engine/control/first-person/FirstPersonPlayerController.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts +28 -0
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.js +14 -0
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +23 -2
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +2122 -2078
- package/src/engine/ecs/Entity.d.ts.map +1 -1
- package/src/engine/ecs/Entity.js +43 -7
- package/src/engine/ecs/EntityBlueprint.d.ts.map +1 -1
- package/src/engine/ecs/EntityBlueprint.js +13 -4
- package/src/engine/ecs/EntityComponentDataset.d.ts.map +1 -1
- package/src/engine/ecs/EntityComponentDataset.js +95 -9
- package/src/engine/ecs/EntityManager.d.ts +16 -0
- package/src/engine/ecs/EntityManager.d.ts.map +1 -1
- package/src/engine/ecs/EntityManager.js +112 -37
- package/src/engine/ecs/EntityObserver.d.ts +7 -0
- package/src/engine/ecs/EntityObserver.d.ts.map +1 -1
- package/src/engine/ecs/EntityObserver.js +8 -1
- package/src/engine/ecs/System.d.ts +23 -0
- package/src/engine/ecs/System.d.ts.map +1 -1
- package/src/engine/ecs/System.js +25 -0
- package/src/engine/ecs/components/Tag.d.ts.map +1 -1
- package/src/engine/ecs/components/Tag.js +4 -1
- package/src/engine/ecs/computeComponentClassName.d.ts +13 -1
- package/src/engine/ecs/computeComponentClassName.d.ts.map +1 -1
- package/src/engine/ecs/computeComponentClassName.js +11 -1
- package/src/engine/ecs/dynamic_actions/DynamicActorSystem.d.ts.map +1 -1
- package/src/engine/ecs/dynamic_actions/DynamicActorSystem.js +11 -0
- package/src/engine/ecs/fow/FogOfWar.d.ts.map +1 -1
- package/src/engine/ecs/fow/FogOfWar.js +37 -11
- package/src/engine/ecs/parent/EntityNode.d.ts.map +1 -1
- package/src/engine/ecs/parent/EntityNode.js +8 -0
- package/src/engine/ecs/speaker/VoiceSystem.d.ts.map +1 -1
- package/src/engine/ecs/speaker/VoiceSystem.js +9 -0
- package/src/engine/ecs/storage/binary/BinaryClassSerializationAdapter.d.ts +15 -0
- package/src/engine/ecs/storage/binary/BinaryClassSerializationAdapter.d.ts.map +1 -1
- package/src/engine/ecs/storage/binary/BinaryClassSerializationAdapter.js +18 -0
- package/src/engine/ecs/system/AbstractContextSystem.d.ts.map +1 -1
- package/src/engine/ecs/system/AbstractContextSystem.js +14 -4
- package/src/engine/ecs/system/SystemEntityContext.d.ts +12 -0
- package/src/engine/ecs/system/SystemEntityContext.d.ts.map +1 -1
- package/src/engine/ecs/system/SystemEntityContext.js +23 -0
- package/src/engine/ecs/system_validate_class.d.ts.map +1 -1
- package/src/engine/ecs/system_validate_class.js +6 -2
- package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.js +37 -8
- package/src/engine/ecs/terrain/tiles/TerrainTile.d.ts.map +1 -1
- package/src/engine/ecs/terrain/tiles/TerrainTile.js +45 -3
- package/src/engine/ecs/terrain/tiles/TerrainTileManager.d.ts.map +1 -1
- package/src/engine/ecs/terrain/tiles/TerrainTileManager.js +5 -8
- package/src/engine/graphics/ecs/camera/pp/PerfectPanner.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/pp/PerfectPanner.js +62 -7
- package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMesh.d.ts +9 -0
- package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMesh.d.ts.map +1 -1
- package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMesh.js +13 -0
- package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshAnimationControllerSystem.d.ts +11 -0
- package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshAnimationControllerSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshAnimationControllerSystem.js +78 -13
- package/src/engine/graphics/ecs/path/tube/build/make_ring_vertices.d.ts.map +1 -1
- package/src/engine/graphics/ecs/path/tube/build/make_ring_vertices.js +22 -8
- package/src/engine/graphics/geometry/buffered/geometry_compute_vertex_normals_indexed.d.ts.map +1 -1
- package/src/engine/graphics/geometry/buffered/geometry_compute_vertex_normals_indexed.js +18 -2
- package/src/engine/graphics/geometry/geometry_construct_triangle_normal.d.ts +3 -1
- package/src/engine/graphics/geometry/geometry_construct_triangle_normal.d.ts.map +1 -1
- package/src/engine/graphics/geometry/geometry_construct_triangle_normal.js +3 -1
- package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.d.ts +32 -0
- package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.d.ts.map +1 -0
- package/src/engine/graphics/geometry/geometry_construct_triangle_normal_area_weighted.js +53 -0
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +22 -2
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +1201 -1160
- package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.d.ts +0 -1
- package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.js +10 -5
- package/src/engine/graphics/particles/particular/engine/simulator/update_parameters.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/simulator/update_parameters.js +23 -0
- package/src/engine/graphics/particles/particular/group/itemSizeFromAttributeType.d.ts +1 -1
- package/src/engine/graphics/sh3/path_tracer/texture/apply_texture_clamping_to_coordinate.d.ts.map +1 -1
- package/src/engine/graphics/sh3/path_tracer/texture/apply_texture_clamping_to_coordinate.js +6 -1
- package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.d.ts.map +1 -1
- package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.js +20 -0
- package/src/engine/graphics/texture/atlas/TextureAtlas.d.ts +1 -0
- package/src/engine/graphics/texture/atlas/TextureAtlas.d.ts.map +1 -1
- package/src/engine/graphics/texture/atlas/TextureAtlas.js +24 -5
- package/src/engine/graphics/texture/sampler/Sampler2D.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/Sampler2D.js +14 -1
- package/src/engine/graphics/texture/sampler/sampler2d_sub_copy_same_item_size.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/sampler2d_sub_copy_same_item_size.js +16 -5
- package/src/engine/graphics/texture/sampler/sampler2d_to_uint8_RGBA.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/sampler2d_to_uint8_RGBA.js +29 -8
- package/src/engine/graphics/texture/sampler/serialization/TextureBinaryBufferSerializer.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/serialization/TextureBinaryBufferSerializer.js +8 -3
- package/src/engine/graphics3/DebugDrawSystem.d.ts.map +1 -1
- package/src/engine/graphics3/DebugDrawSystem.js +6 -2
- package/src/engine/graphics3/DecalSystem.d.ts +5 -4
- package/src/engine/graphics3/DecalSystem.d.ts.map +1 -1
- package/src/engine/graphics3/DecalSystem.js +5 -4
- package/src/engine/graphics3/GraphicsEngine.d.ts +40 -7
- package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -1
- package/src/engine/graphics3/GraphicsEngine.js +92 -7
- package/src/engine/graphics3/MeshSystem.d.ts +7 -0
- package/src/engine/graphics3/MeshSystem.d.ts.map +1 -1
- package/src/engine/graphics3/MeshSystem.js +681 -661
- package/src/engine/graphics3/ParticleEmitterSystem.d.ts +1 -0
- package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/ParticleEmitterSystem.js +1 -0
- package/src/engine/graphics3/PathDisplaySystem.d.ts.map +1 -1
- package/src/engine/graphics3/PathDisplaySystem.js +311 -307
- package/src/engine/graphics3/TerrainSystem.d.ts +10 -40
- package/src/engine/graphics3/TerrainSystem.d.ts.map +1 -1
- package/src/engine/graphics3/TerrainSystem.js +186 -185
- package/src/engine/graphics3/Trail3DSystem.d.ts +28 -19
- package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -1
- package/src/engine/graphics3/Trail3DSystem.js +57 -64
- package/src/engine/graphics3/debug/gizmo_write_geometry.d.ts.map +1 -1
- package/src/engine/graphics3/debug/gizmo_write_geometry.js +7 -59
- package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts.map +1 -1
- package/src/engine/graphics3/decal/GPUDecalRenderer.js +23 -7
- package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_cluster_assign_decals.js +29 -6
- package/src/engine/graphics3/path/tube_stream_write_geometry.d.ts.map +1 -1
- package/src/engine/graphics3/path/tube_stream_write_geometry.js +7 -56
- package/src/engine/graphics3/register_instance_animation.d.ts +3 -3
- package/src/engine/graphics3/register_instance_animation.js +3 -3
- package/src/engine/graphics3/terrain/TERRAIN_MATERIAL_TEMPLATE.d.ts +77 -0
- package/src/engine/graphics3/terrain/TERRAIN_MATERIAL_TEMPLATE.d.ts.map +1 -0
- package/src/engine/graphics3/terrain/TERRAIN_MATERIAL_TEMPLATE.js +485 -0
- package/src/engine/graphics3/terrain/TerrainShadeMaterial.d.ts +103 -0
- package/src/engine/graphics3/terrain/TerrainShadeMaterial.d.ts.map +1 -0
- package/src/engine/graphics3/terrain/TerrainShadeMaterial.js +130 -0
- package/src/engine/graphics3/terrain/chunk_terrain_material_surface.d.ts +23 -0
- package/src/engine/graphics3/terrain/chunk_terrain_material_surface.d.ts.map +1 -0
- package/src/engine/graphics3/terrain/chunk_terrain_material_surface.js +68 -0
- package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts.map +1 -1
- package/src/engine/graphics3/trail/trail_tube_write_geometry.js +8 -59
- package/src/engine/grid/transform2grid/Transform2GridPositionSystem.d.ts.map +1 -1
- package/src/engine/grid/transform2grid/Transform2GridPositionSystem.js +10 -0
- package/src/engine/input/devices/PointerDevice.d.ts.map +1 -1
- package/src/engine/input/devices/PointerDevice.js +58 -5
- package/src/engine/input/ecs/ism/InputMapProgram.d.ts.map +1 -1
- package/src/engine/input/ecs/ism/InputMapProgram.js +13 -0
- package/src/engine/input/ecs/systems/InputControllerSystem.d.ts +1 -0
- package/src/engine/input/ecs/systems/InputControllerSystem.d.ts.map +1 -1
- package/src/engine/input/ecs/systems/InputControllerSystem.js +52 -2
- package/src/engine/intelligence/behavior/composite/ParallelBehavior.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/composite/ParallelBehavior.js +8 -0
- package/src/engine/intelligence/behavior/decorator/RepeatBehavior.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/decorator/RepeatBehavior.js +7 -0
- package/src/engine/intelligence/behavior/decorator/RepeatUntilSuccessBehavior.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/decorator/RepeatUntilSuccessBehavior.js +14 -0
- package/src/engine/intelligence/behavior/ecs/BehaviorSystem.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/ecs/BehaviorSystem.js +13 -0
- package/src/engine/interpolation/InterpolationLog.d.ts +51 -4
- package/src/engine/interpolation/InterpolationLog.d.ts.map +1 -1
- package/src/engine/interpolation/InterpolationLog.js +132 -2
- package/src/engine/interpolation/InterpolationSystem.d.ts +113 -35
- package/src/engine/interpolation/InterpolationSystem.d.ts.map +1 -1
- package/src/engine/interpolation/InterpolationSystem.js +674 -50
- package/src/engine/network/NetworkSession.d.ts +176 -47
- package/src/engine/network/NetworkSession.d.ts.map +1 -1
- package/src/engine/network/NetworkSession.js +1462 -272
- package/src/engine/network/README.md +106 -3
- package/src/engine/network/SMOOTHNESS_DESIGN.md +392 -0
- package/src/engine/network/adapters/PoseCorrection.d.ts +50 -0
- package/src/engine/network/adapters/PoseCorrection.d.ts.map +1 -0
- package/src/engine/network/adapters/PoseCorrection.js +211 -0
- package/src/engine/network/adapters/TransformReplicationAdapter.d.ts +1 -0
- package/src/engine/network/adapters/TransformReplicationAdapter.d.ts.map +1 -1
- package/src/engine/network/adapters/TransformReplicationAdapter.js +17 -0
- package/src/engine/network/adapters/VelocityCorrection.d.ts +31 -0
- package/src/engine/network/adapters/VelocityCorrection.d.ts.map +1 -0
- package/src/engine/network/adapters/VelocityCorrection.js +71 -0
- package/src/engine/network/adapters/replicate_transform64.d.ts +13 -0
- package/src/engine/network/adapters/replicate_transform64.d.ts.map +1 -0
- package/src/engine/network/adapters/replicate_transform64.js +18 -0
- package/src/engine/network/adapters/rigid_body_of.d.ts +22 -0
- package/src/engine/network/adapters/rigid_body_of.d.ts.map +1 -0
- package/src/engine/network/adapters/rigid_body_of.js +33 -0
- package/src/engine/network/correction/Correction.d.ts +120 -0
- package/src/engine/network/correction/Correction.d.ts.map +1 -0
- package/src/engine/network/correction/Correction.js +143 -0
- package/src/engine/network/ecs/NetworkSystem.d.ts +36 -7
- package/src/engine/network/ecs/NetworkSystem.d.ts.map +1 -1
- package/src/engine/network/ecs/NetworkSystem.js +49 -7
- package/src/engine/network/orchestrator/NetworkPeer.d.ts +50 -1
- package/src/engine/network/orchestrator/NetworkPeer.d.ts.map +1 -1
- package/src/engine/network/orchestrator/NetworkPeer.js +143 -10
- package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts +38 -2
- package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts.map +1 -1
- package/src/engine/network/orchestrator/ServerAuthoritativeClient.js +58 -10
- package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts +68 -2
- package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts.map +1 -1
- package/src/engine/network/orchestrator/ServerAuthoritativeServer.js +299 -18
- package/src/engine/network/replication/Replicator.d.ts +8 -1
- package/src/engine/network/replication/Replicator.d.ts.map +1 -1
- package/src/engine/network/replication/Replicator.js +50 -6
- package/src/engine/network/sim/ActionLog.d.ts +5 -2
- package/src/engine/network/sim/ActionLog.d.ts.map +1 -1
- package/src/engine/network/sim/ActionLog.js +5 -2
- package/src/engine/network/sim/RewindEngine.d.ts.map +1 -1
- package/src/engine/network/sim/RewindEngine.js +6 -0
- package/src/engine/network/sim/SimActionExecutor.d.ts +48 -3
- package/src/engine/network/sim/SimActionExecutor.d.ts.map +1 -1
- package/src/engine/network/sim/SimActionExecutor.js +152 -6
- package/src/engine/network/sim/SmoothingState.d.ts +54 -2
- package/src/engine/network/sim/SmoothingState.d.ts.map +1 -1
- package/src/engine/network/sim/SmoothingState.js +107 -3
- package/src/engine/network/state/MutationLedger.d.ts.map +1 -1
- package/src/engine/network/state/MutationLedger.js +18 -2
- package/src/engine/network/state/PredictionHistory.d.ts +67 -0
- package/src/engine/network/state/PredictionHistory.d.ts.map +1 -0
- package/src/engine/network/state/PredictionHistory.js +145 -0
- package/src/engine/network/time/RenderPlayout.d.ts +2 -1
- package/src/engine/network/time/RenderPlayout.d.ts.map +1 -1
- package/src/engine/network/time/RenderPlayout.js +174 -163
- package/src/engine/network/transport/DeferredTransport.d.ts +57 -0
- package/src/engine/network/transport/DeferredTransport.d.ts.map +1 -0
- package/src/engine/network/transport/DeferredTransport.js +143 -0
- package/src/engine/network/transport/LoopbackTransport.d.ts +8 -0
- package/src/engine/network/transport/LoopbackTransport.d.ts.map +1 -1
- package/src/engine/network/transport/LoopbackTransport.js +12 -1
- package/src/engine/network/transport/ReliableCommandPipeline.d.ts.map +1 -1
- package/src/engine/network/transport/ReliableCommandPipeline.js +20 -0
- package/src/engine/network/transport/adapters/NodeUDPTransport.d.ts.map +1 -1
- package/src/engine/network/transport/adapters/NodeUDPTransport.js +11 -2
- package/src/engine/network/transport/adapters/WebTransportTransport.d.ts.map +1 -1
- package/src/engine/network/transport/adapters/WebTransportTransport.js +8 -1
- package/src/engine/network/transport/fragments/FragmentAssembler.d.ts +2 -1
- package/src/engine/network/transport/fragments/FragmentAssembler.d.ts.map +1 -1
- package/src/engine/network/transport/fragments/FragmentAssembler.js +67 -3
- package/src/engine/network/transport/fragments/fragment_send.d.ts +8 -0
- package/src/engine/network/transport/fragments/fragment_send.d.ts.map +1 -1
- package/src/engine/network/transport/fragments/fragment_send.js +17 -7
- package/src/engine/network/transport/fragments/packet_size.d.ts +6 -0
- package/src/engine/network/transport/fragments/packet_size.d.ts.map +1 -1
- package/src/engine/network/transport/fragments/packet_size.js +6 -0
- package/src/engine/physics/ccd/linear_sweep.d.ts.map +1 -1
- package/src/engine/physics/ccd/linear_sweep.js +19 -1
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts +7 -3
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothWorld.js +34 -4
- package/src/engine/physics/cloth/solver/cloth_self_find.js +17 -0
- package/src/engine/physics/contact/ManifoldStore.d.ts +20 -1
- package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -1
- package/src/engine/physics/contact/ManifoldStore.js +24 -2
- package/src/engine/physics/ecs/PhysicsSystem.d.ts +51 -88
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +82 -217
- package/src/engine/physics/ecs/is_sensor.d.ts +24 -0
- package/src/engine/physics/ecs/is_sensor.d.ts.map +1 -1
- package/src/engine/physics/ecs/is_sensor.js +39 -0
- package/src/engine/physics/fluid/ecs/FluidComponent.d.ts +18 -4
- package/src/engine/physics/fluid/ecs/FluidComponent.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidComponent.js +29 -8
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +8 -0
- package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +8 -0
- package/src/engine/physics/fluid/solver/NOTES.md +46 -0
- package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_scalar.js +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.js +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.js +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.js +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_apply_scalar_advection.js +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_apply_vorticity_confinement.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_apply_vorticity_confinement.js +8 -0
- package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_compute_divergence.js +8 -0
- package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.js +8 -0
- package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.d.ts +5 -0
- package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.js +5 -0
- package/src/engine/physics/integration/integrate_velocity.d.ts +15 -0
- package/src/engine/physics/integration/integrate_velocity.d.ts.map +1 -1
- package/src/engine/physics/integration/integrate_velocity.js +15 -0
- package/src/engine/physics/island/IslandBuilder.d.ts.map +1 -1
- package/src/engine/physics/island/IslandBuilder.js +6 -7
- package/src/engine/physics/mls-mpm/MLS_MPM.d.ts.map +1 -1
- package/src/engine/physics/mls-mpm/MLS_MPM.js +29 -13
- package/src/engine/physics/mls-mpm/mls_mpm_demo_scene.d.ts +29 -0
- package/src/engine/physics/mls-mpm/mls_mpm_demo_scene.d.ts.map +1 -0
- package/src/engine/physics/mls-mpm/mls_mpm_demo_scene.js +44 -0
- package/src/engine/physics/mls-mpm/testMLS_MPM.js +3 -3
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/narrowphase_step.js +74 -11
- package/src/engine/physics/queries/overlap_shape.d.ts.map +1 -1
- package/src/engine/physics/queries/overlap_shape.js +92 -45
- package/src/engine/physics/queries/raycast.d.ts.map +1 -1
- package/src/engine/physics/queries/raycast.js +55 -43
- package/src/engine/physics/queries/shape_cast.d.ts.map +1 -1
- package/src/engine/physics/queries/shape_cast.js +185 -174
- package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -1
- package/src/engine/physics/solver/solve_contacts.js +42 -19
- package/src/engine/plugin/EnginePluginManager.d.ts +10 -0
- package/src/engine/plugin/EnginePluginManager.d.ts.map +1 -1
- package/src/engine/plugin/EnginePluginManager.js +54 -1
- package/src/engine/plugin/PluginReferenceContext.d.ts.map +1 -1
- package/src/engine/plugin/PluginReferenceContext.js +7 -3
- package/src/engine/reference/v2/Reference.d.ts +9 -0
- package/src/engine/reference/v2/Reference.d.ts.map +1 -1
- package/src/engine/reference/v2/Reference.js +39 -2
- package/src/engine/simulation/Ticker.d.ts.map +1 -1
- package/src/engine/simulation/Ticker.js +20 -1
- package/src/engine/sound/ecs/SoundListenerSystem.d.ts +27 -0
- package/src/engine/sound/ecs/SoundListenerSystem.d.ts.map +1 -1
- package/src/engine/sound/ecs/SoundListenerSystem.js +82 -21
- package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts.map +1 -1
- package/src/engine/sound/ecs/audio/LiveEmitterSet.js +394 -356
- package/src/engine/sound/material/concrete/SoundMaterialComposition.d.ts.map +1 -1
- package/src/engine/sound/material/concrete/SoundMaterialComposition.js +54 -17
- package/src/engine/sound/material/detector/terrain/TerrainSoundMaterialSurfaceDetector.d.ts.map +1 -1
- package/src/engine/sound/material/detector/terrain/TerrainSoundMaterialSurfaceDetector.js +34 -3
- package/src/engine/sound/simulation/core/AcousticSolution.d.ts +5 -0
- package/src/engine/sound/simulation/core/AcousticSolution.d.ts.map +1 -1
- package/src/engine/sound/simulation/core/AcousticSolution.js +5 -0
- package/src/engine/sound/simulation/definition/AcousticMaterial.d.ts +8 -0
- package/src/engine/sound/simulation/definition/AcousticMaterial.d.ts.map +1 -1
- package/src/engine/sound/simulation/definition/AcousticMaterial.js +8 -0
- package/src/engine/sound/simulation/probe/probe_visibility_augment.d.ts +6 -4
- package/src/engine/sound/simulation/probe/probe_visibility_augment.d.ts.map +1 -1
- package/src/engine/sound/simulation/probe/probe_visibility_augment.js +19 -7
- package/src/engine/sound/simulation/render/FoaProbeReverbRenderer.d.ts +39 -0
- package/src/engine/sound/simulation/render/FoaProbeReverbRenderer.d.ts.map +1 -1
- package/src/engine/sound/simulation/render/FoaProbeReverbRenderer.js +130 -1
- package/src/engine/sound/simulation/render/ProbeReverbRenderer.d.ts +3 -2
- package/src/engine/sound/simulation/render/ProbeReverbRenderer.d.ts.map +1 -1
- package/src/engine/sound/simulation/render/ProbeReverbRenderer.js +15 -1
- package/src/engine/sound/sopra/SopraEngine.d.ts +10 -0
- package/src/engine/sound/sopra/SopraEngine.d.ts.map +1 -1
- package/src/engine/sound/sopra/SopraEngine.js +486 -440
- package/src/engine/sound/sopra/runtime/BusGraph.d.ts +29 -0
- package/src/engine/sound/sopra/runtime/BusGraph.d.ts.map +1 -1
- package/src/engine/sound/sopra/runtime/BusGraph.js +69 -2
- package/src/engine/sound/sopra/runtime/EventInstance.d.ts.map +1 -1
- package/src/engine/sound/sopra/runtime/EventInstance.js +130 -9
- package/src/engine/ui/GUIEngine.d.ts +14 -0
- package/src/engine/ui/GUIEngine.d.ts.map +1 -1
- package/src/engine/ui/GUIEngine.js +52 -4
- package/src/format/image/avif/api/apply_transformations.d.ts +2 -1
- package/src/format/image/avif/api/apply_transformations.d.ts.map +1 -1
- package/src/format/image/avif/api/apply_transformations.js +129 -120
- package/src/format/image/avif/api/convert_to_rgba.d.ts.map +1 -1
- package/src/format/image/avif/api/convert_to_rgba.js +35 -2
- package/src/format/image/avif/api/decode_image_item.d.ts +2 -1
- package/src/format/image/avif/api/decode_image_item.d.ts.map +1 -1
- package/src/format/image/avif/api/decode_image_item.js +322 -234
- package/src/format/image/avif/av1/decode/decode_av1_still.js +329 -309
- package/src/format/image/avif/av1/encode/encode_tile.js +2349 -2331
- package/src/format/image/avif/av1/entropy/symbol_cost.d.ts.map +1 -1
- package/src/format/image/avif/av1/entropy/symbol_cost.js +86 -76
- package/src/format/image/avif/heif/AvifFile.d.ts +11 -0
- package/src/format/image/avif/heif/AvifFile.d.ts.map +1 -1
- package/src/format/image/avif/heif/AvifFile.js +154 -142
- package/src/format/image/avif/heif/find_item_properties.d.ts +23 -0
- package/src/format/image/avif/heif/find_item_properties.d.ts.map +1 -0
- package/src/format/image/avif/heif/find_item_properties.js +36 -0
- package/src/format/image/avif/heif/parse_avif_file.js +6 -3
- package/src/format/image/avif/heif/read_item_data.d.ts.map +1 -1
- package/src/format/image/avif/heif/read_item_data.js +131 -97
- package/src/format/image/jpeg/decodeScan.d.ts.map +1 -1
- package/src/format/image/jpeg/decodeScan.js +17 -0
- package/src/format/scene/gltf/gltf_parse_container.d.ts.map +1 -1
- package/src/format/scene/gltf/gltf_parse_container.js +61 -41
- package/src/format/scene/gltf/gltf_read_accessor.d.ts +21 -0
- package/src/format/scene/gltf/gltf_read_accessor.d.ts.map +1 -1
- package/src/format/scene/gltf/gltf_read_accessor.js +37 -0
- package/src/format/scene/usd/usd_compose_transform.d.ts.map +1 -1
- package/src/format/scene/usd/usd_compose_transform.js +56 -6
- package/src/format/texture/basis/transcode/fit_endpoints.d.ts +6 -0
- package/src/format/texture/basis/transcode/fit_endpoints.d.ts.map +1 -1
- package/src/format/texture/basis/transcode/fit_endpoints.js +33 -39
- package/src/generation/filtering/numeric/CellFilterCache.d.ts +17 -0
- package/src/generation/filtering/numeric/CellFilterCache.d.ts.map +1 -1
- package/src/generation/filtering/numeric/CellFilterCache.js +36 -3
- package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainObstacle.d.ts +9 -0
- package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainObstacle.d.ts.map +1 -1
- package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainObstacle.js +37 -6
- package/src/generation/grid/actions/ContinuousGridCellActionWriteObstacle.d.ts.map +1 -1
- package/src/generation/grid/actions/ContinuousGridCellActionWriteObstacle.js +8 -21
- package/src/generation/grid/actions/grid_obstacle_write_grid_point.d.ts +28 -0
- package/src/generation/grid/actions/grid_obstacle_write_grid_point.d.ts.map +1 -0
- package/src/generation/grid/actions/grid_obstacle_write_grid_point.js +41 -0
- package/src/generation/grid/generation/GridTaskDensityMarkerDistribution.d.ts +15 -1
- package/src/generation/grid/generation/GridTaskDensityMarkerDistribution.d.ts.map +1 -1
- package/src/generation/grid/generation/GridTaskDensityMarkerDistribution.js +17 -3
- package/src/generation/markers/actions/MarkerNodeProcessingRuleSet.d.ts.map +1 -1
- package/src/generation/markers/actions/MarkerNodeProcessingRuleSet.js +16 -1
- package/src/generation/placement/action/GridCellActionWriteFilterToLayer.d.ts.map +1 -1
- package/src/generation/placement/action/GridCellActionWriteFilterToLayer.js +8 -1
- package/src/generation/theme/TerrainTheme.d.ts.map +1 -1
- package/src/generation/theme/TerrainTheme.js +20 -1
- package/src/shade/RENDERER_CONTRACT.md +63 -8
- package/src/shade/descriptor/texture/format/gpu_texture_formats_copy_compatible.d.ts +23 -0
- package/src/shade/descriptor/texture/format/gpu_texture_formats_copy_compatible.d.ts.map +1 -0
- package/src/shade/descriptor/texture/format/gpu_texture_formats_copy_compatible.js +28 -0
- package/src/shade/descriptor/texture/format/gpu_texture_formats_view_compatible.d.ts +25 -0
- package/src/shade/descriptor/texture/format/gpu_texture_formats_view_compatible.d.ts.map +1 -0
- package/src/shade/descriptor/texture/format/gpu_texture_formats_view_compatible.js +42 -0
- package/src/shade/device/IMMEDIATE_DATA_PLAN_2026_08_28.md +5 -0
- package/src/shade/device/ShadeGPUCommandContext.d.ts +15 -2
- package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
- package/src/shade/device/ShadeGPUCommandContext.js +1003 -857
- package/src/shade/device/mock/SoftwareGPUBindGroup.d.ts +38 -1
- package/src/shade/device/mock/SoftwareGPUBindGroup.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUBindGroup.js +73 -1
- package/src/shade/device/mock/SoftwareGPUBuffer.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUBuffer.js +5 -0
- package/src/shade/device/mock/SoftwareGPUCommandBuffer.d.ts +34 -0
- package/src/shade/device/mock/SoftwareGPUCommandBuffer.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUCommandBuffer.js +71 -1
- package/src/shade/device/mock/SoftwareGPUCommandEncoder.d.ts +15 -0
- package/src/shade/device/mock/SoftwareGPUCommandEncoder.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUCommandEncoder.js +109 -1
- package/src/shade/device/mock/SoftwareGPUComputePassEncoder.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUComputePassEncoder.js +51 -0
- package/src/shade/device/mock/SoftwareGPUDevice.d.ts +5 -1
- package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUDevice.js +58 -1
- package/src/shade/device/mock/SoftwareGPUPipeline.d.ts +1 -0
- package/src/shade/device/mock/SoftwareGPUPipeline.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUPipeline.js +17 -11
- package/src/shade/device/mock/SoftwareGPUQueue.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUQueue.js +41 -0
- package/src/shade/device/mock/SoftwareGPURenderPassEncoder.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPURenderPassEncoder.js +24 -0
- package/src/shade/device/mock/SoftwareGPUTexture.d.ts +11 -1
- package/src/shade/device/mock/SoftwareGPUTexture.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUTexture.js +45 -8
- package/src/shade/device/mock/SoftwareGPUTextureView.d.ts +20 -1
- package/src/shade/device/mock/SoftwareGPUTextureView.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUTextureView.js +28 -1
- package/src/shade/device/mock/recorded_binding_kind_mismatches.d.ts +20 -0
- package/src/shade/device/mock/recorded_binding_kind_mismatches.d.ts.map +1 -0
- package/src/shade/device/mock/recorded_binding_kind_mismatches.js +84 -0
- package/src/shade/device/mock/texture_copy.d.ts.map +1 -1
- package/src/shade/device/mock/texture_copy.js +41 -3
- package/src/shade/device/mock/texture_view_resource.d.ts +26 -0
- package/src/shade/device/mock/texture_view_resource.d.ts.map +1 -0
- package/src/shade/device/mock/texture_view_resource.js +47 -0
- package/src/shade/device/timing/GPUTimer.d.ts.map +1 -1
- package/src/shade/device/timing/GPUTimer.js +35 -21
- package/src/shade/playground/caldera/caldera_format.d.ts +28 -1
- package/src/shade/playground/caldera/caldera_format.d.ts.map +1 -1
- package/src/shade/playground/caldera/caldera_format.js +37 -0
- package/src/shade/playground/caldera/main.js +12 -2
- package/src/shade/playground/frame_rate_meter.d.ts +92 -0
- package/src/shade/playground/frame_rate_meter.d.ts.map +1 -0
- package/src/shade/playground/frame_rate_meter.js +147 -0
- package/src/shade/playground/particle_ecs/main.js +53 -7
- package/src/shade/playground/particle_ecs/moonlit_environment.js +2 -2
- package/src/shade/playground/particle_stats_readback.d.ts +58 -0
- package/src/shade/playground/particle_stats_readback.d.ts.map +1 -0
- package/src/shade/playground/particle_stats_readback.js +83 -0
- package/src/shade/playground/particle_system/main.js +378 -325
- package/src/shade/playground/skinned_blas_refit/main.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/main.js +7 -2
- package/src/shade/playground/sponza_path_trace/main.d.ts.map +1 -1
- package/src/shade/playground/sponza_path_trace/main.js +398 -393
- package/src/shade/playground/volumetrics_froxel/main.d.ts.map +1 -1
- package/src/shade/playground/volumetrics_froxel/main.js +941 -936
- package/src/shade/renderer/GraphicsContext.d.ts +9 -1
- package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
- package/src/shade/renderer/GraphicsContext.js +61 -17
- package/src/shade/renderer/Renderer.d.ts +66 -5
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +337 -29
- package/src/shade/renderer/animation/ANIMATION_CLIP_STATE_STRUCT.d.ts +4 -7
- package/src/shade/renderer/animation/ANIMATION_CLIP_STATE_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/animation/ANIMATION_CLIP_STATE_STRUCT.js +19 -16
- package/src/shade/renderer/animation/ANIMATION_CURVE_HEADER_STRUCT.js +11 -11
- package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.d.ts +14 -18
- package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.js +95 -24
- package/src/shade/renderer/animation/ANIMATION_SKIN_JOINT_STRUCT.d.ts +5 -4
- package/src/shade/renderer/animation/ANIMATION_SKIN_JOINT_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/animation/ANIMATION_SKIN_JOINT_STRUCT.js +7 -4
- package/src/shade/renderer/animation/ANIMATION_SKIN_STRUCT.d.ts +6 -12
- package/src/shade/renderer/animation/ANIMATION_SKIN_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/animation/ANIMATION_SKIN_STRUCT.js +9 -16
- package/src/shade/renderer/animation/ANIMATION_TRACK_BINDING_STRUCT.d.ts +6 -5
- package/src/shade/renderer/animation/ANIMATION_TRACK_BINDING_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/animation/ANIMATION_TRACK_BINDING_STRUCT.js +12 -5
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts +83 -95
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +496 -629
- package/src/shade/renderer/animation/chunk_animation_curve_evaluate.d.ts +10 -14
- package/src/shade/renderer/animation/chunk_animation_curve_evaluate.d.ts.map +1 -1
- package/src/shade/renderer/animation/chunk_animation_curve_evaluate.js +40 -67
- package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts.map +1 -1
- package/src/shade/renderer/animation/chunk_pose_accumulator.js +13 -4
- package/src/shade/renderer/animation/shader_animation_apply.d.ts +14 -8
- package/src/shade/renderer/animation/shader_animation_apply.d.ts.map +1 -1
- package/src/shade/renderer/animation/shader_animation_apply.js +129 -128
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +2 -2
- package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.d.ts +3 -2
- package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.js +3 -2
- package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.d.ts +12 -7
- package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.js +107 -104
- package/src/shade/renderer/binding/BindingResource.d.ts +36 -1
- package/src/shade/renderer/binding/BindingResource.d.ts.map +1 -1
- package/src/shade/renderer/binding/BindingResource.js +36 -3
- package/src/shade/renderer/binding/BufferBinding.d.ts +8 -0
- package/src/shade/renderer/binding/BufferBinding.d.ts.map +1 -1
- package/src/shade/renderer/binding/BufferBinding.js +21 -0
- package/src/shade/renderer/buffer/GPUBufferStagingAllocator.d.ts +11 -2
- package/src/shade/renderer/buffer/GPUBufferStagingAllocator.d.ts.map +1 -1
- package/src/shade/renderer/buffer/GPUBufferStagingAllocator.js +95 -13
- package/src/shade/renderer/buffer/GPUBufferUploadAllocator.d.ts +60 -0
- package/src/shade/renderer/buffer/GPUBufferUploadAllocator.d.ts.map +1 -0
- package/src/shade/renderer/buffer/GPUBufferUploadAllocator.js +202 -0
- package/src/shade/renderer/buffer/GPUUploadBlock.d.ts +68 -0
- package/src/shade/renderer/buffer/GPUUploadBlock.d.ts.map +1 -0
- package/src/shade/renderer/buffer/GPUUploadBlock.js +97 -0
- package/src/shade/renderer/buffer/table/GPUDatabase.d.ts +19 -0
- package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUDatabase.js +114 -1
- package/src/shade/renderer/buffer/table/GPUDatabaseDefinition.d.ts +132 -1
- package/src/shade/renderer/buffer/table/GPUDatabaseDefinition.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUDatabaseDefinition.js +384 -1
- package/src/shade/renderer/buffer/table/GPUDatabaseReadback.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUDatabaseReadback.js +1332 -1323
- package/src/shade/renderer/buffer/table/GPUTableLink.d.ts +67 -0
- package/src/shade/renderer/buffer/table/GPUTableLink.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/GPUTableLink.js +76 -0
- package/src/shade/renderer/buffer/table/GPUTableRange.d.ts +72 -0
- package/src/shade/renderer/buffer/table/GPUTableRange.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/GPUTableRange.js +82 -0
- package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts +106 -5
- package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUTypedTable.js +444 -28
- package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.js +28 -5
- package/src/shade/renderer/buffer/table/GPU_DATABASE_NULL.d.ts +14 -0
- package/src/shade/renderer/buffer/table/GPU_DATABASE_NULL.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/GPU_DATABASE_NULL.js +13 -0
- package/src/shade/renderer/buffer/table/gpu_database_check_links.d.ts +80 -0
- package/src/shade/renderer/buffer/table/gpu_database_check_links.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/gpu_database_check_links.js +456 -0
- package/src/shade/renderer/buffer/table/gpu_table_field_word.d.ts +17 -0
- package/src/shade/renderer/buffer/table/gpu_table_field_word.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/gpu_table_field_word.js +111 -0
- package/src/shade/renderer/buffer/table/gpu_table_range_well_formed.d.ts +20 -0
- package/src/shade/renderer/buffer/table/gpu_table_range_well_formed.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/gpu_table_range_well_formed.js +27 -0
- package/src/shade/renderer/camera/CameraManager.d.ts +11 -0
- package/src/shade/renderer/camera/CameraManager.d.ts.map +1 -1
- package/src/shade/renderer/camera/CameraManager.js +18 -0
- package/src/shade/renderer/create_frame_loop.d.ts +16 -0
- package/src/shade/renderer/create_frame_loop.d.ts.map +1 -1
- package/src/shade/renderer/create_frame_loop.js +16 -0
- package/src/shade/renderer/deferred/chunk_shade_standard_material_direct.d.ts +23 -0
- package/src/shade/renderer/deferred/chunk_shade_standard_material_direct.d.ts.map +1 -1
- package/src/shade/renderer/deferred/chunk_shade_standard_material_direct.js +27 -32
- package/src/shade/renderer/deferred/chunk_shade_standard_material_direct_heavy.d.ts +9 -7
- package/src/shade/renderer/deferred/chunk_shade_standard_material_direct_heavy.d.ts.map +1 -1
- package/src/shade/renderer/deferred/chunk_shade_standard_material_direct_heavy.js +16 -108
- package/src/shade/renderer/dynamic/DynamicMeshAVBOITChannel.d.ts +135 -0
- package/src/shade/renderer/dynamic/DynamicMeshAVBOITChannel.d.ts.map +1 -0
- package/src/shade/renderer/dynamic/DynamicMeshAVBOITChannel.js +296 -0
- package/src/shade/renderer/dynamic/GPUDynamicMeshRenderer.d.ts +22 -9
- package/src/shade/renderer/dynamic/GPUDynamicMeshRenderer.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/GPUDynamicMeshRenderer.js +30 -138
- package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +185 -167
- package/src/shade/renderer/dynamic/GPUDynamicMeshResidencyTable.d.ts +49 -0
- package/src/shade/renderer/dynamic/GPUDynamicMeshResidencyTable.d.ts.map +1 -0
- package/src/shade/renderer/dynamic/GPUDynamicMeshResidencyTable.js +185 -0
- package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.d.ts +24 -0
- package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.d.ts.map +1 -0
- package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.js +49 -0
- package/src/shade/renderer/dynamic/chunk_dynamic_mesh_vertex.d.ts +18 -0
- package/src/shade/renderer/dynamic/chunk_dynamic_mesh_vertex.d.ts.map +1 -0
- package/src/shade/renderer/dynamic/chunk_dynamic_mesh_vertex.js +54 -0
- package/src/shade/renderer/dynamic/dynamic_mesh_live_bounds.d.ts +26 -0
- package/src/shade/renderer/dynamic/dynamic_mesh_live_bounds.d.ts.map +1 -0
- package/src/shade/renderer/dynamic/dynamic_mesh_live_bounds.js +96 -0
- package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.d.ts +102 -0
- package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.d.ts.map +1 -0
- package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.js +364 -0
- package/src/shade/renderer/dynamic/shader_dynamic_mesh.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/shader_dynamic_mesh.js +153 -177
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts +20 -0
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts.map +1 -0
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.js +136 -0
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_occupancy.d.ts +20 -0
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_occupancy.d.ts.map +1 -0
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_occupancy.js +106 -0
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.d.ts +32 -0
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.d.ts.map +1 -0
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.js +163 -0
- package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +13 -2
- package/src/shade/renderer/fow/GPUFogOfWarRenderer.d.ts.map +1 -1
- package/src/shade/renderer/fow/GPUFogOfWarRenderer.js +5 -14
- package/src/shade/renderer/fow/fow_obtain_mask.d.ts +17 -0
- package/src/shade/renderer/fow/fow_obtain_mask.d.ts.map +1 -0
- package/src/shade/renderer/fow/fow_obtain_mask.js +41 -0
- package/src/shade/renderer/frame_jitter_applies.d.ts +21 -0
- package/src/shade/renderer/frame_jitter_applies.d.ts.map +1 -0
- package/src/shade/renderer/frame_jitter_applies.js +23 -0
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +128 -3
- package/src/shade/renderer/geometry/geometry_obtain_attribute.d.ts +42 -0
- package/src/shade/renderer/geometry/geometry_obtain_attribute.d.ts.map +1 -0
- package/src/shade/renderer/geometry/geometry_obtain_attribute.js +83 -0
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts +12 -0
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +65 -0
- package/src/shade/renderer/geometry/meshlet/build/geometry_to_meshlets_greedy.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/build/geometry_to_meshlets_greedy.js +4 -1
- package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.d.ts +5 -0
- package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.js +23 -1
- package/src/shade/renderer/geometry/normals/encode_normals_to_octahedral_u32.d.ts.map +1 -1
- package/src/shade/renderer/geometry/normals/encode_normals_to_octahedral_u32.js +4 -1
- package/src/shade/renderer/geometry/normals/geometry_build_tangents.d.ts.map +1 -1
- package/src/shade/renderer/geometry/normals/geometry_build_tangents.js +39 -1
- package/src/shade/renderer/geometry/util/geometry_merge.d.ts.map +1 -1
- package/src/shade/renderer/geometry/util/geometry_merge.js +18 -2
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +77 -39
- package/src/shade/renderer/geometry/virtual/build/gltf/gltf_collect_geometries.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/gltf/gltf_collect_geometries.js +31 -2
- package/src/shade/renderer/geometry/virtual/build/level/VGeoFrontier.d.ts +18 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoFrontier.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/VGeoFrontier.js +19 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupStep.d.ts +8 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupStep.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupStep.js +9 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.js +10 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.js +4 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.js +12 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.js +10 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.js +21 -0
- package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.js +33 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.js +63 -2
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.js +39 -0
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +7 -0
- package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v1/chunk_brick4_sh3_color_decode.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v1/chunk_brick4_sh3_color_decode.js +23 -2
- package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v1/chunk_brick4_sh3_color_decode_from_storage.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v1/chunk_brick4_sh3_color_decode_from_storage.js +22 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v1/chunk_brick4_sh3_color_encode.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v1/chunk_brick4_sh3_color_encode.js +23 -2
- package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v1/chunk_brick4_sh3_color_encode_to_storage.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v1/chunk_brick4_sh3_color_encode_to_storage.js +22 -1
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts +2 -1
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.js +12 -53
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +2 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/sample/chunk_lpv_atlas_patch_texel_coord.d.ts +17 -0
- package/src/shade/renderer/global_illumination/probe/octahedral/sample/chunk_lpv_atlas_patch_texel_coord.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe/octahedral/sample/chunk_lpv_atlas_patch_texel_coord.js +38 -0
- package/src/shade/renderer/global_illumination/probe/octahedral/sample/chunk_lpv_atlas_read_patch_texel.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/sample/chunk_lpv_atlas_read_patch_texel.js +16 -10
- package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.d.ts +1 -1
- package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.js +25 -14
- package/src/shade/renderer/gpu_primitive/indirect/NOTES.md +94 -0
- package/src/shade/renderer/gpu_primitive/indirect/WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION.d.ts +10 -7
- package/src/shade/renderer/gpu_primitive/indirect/WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/indirect/WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION.js +10 -7
- package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
- package/src/shade/renderer/light/GPULightCollection.js +22 -1
- package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.js +26 -0
- package/src/shade/renderer/light/cluster/chunk_cluster_keep_smallest.d.ts +21 -0
- package/src/shade/renderer/light/cluster/chunk_cluster_keep_smallest.d.ts.map +1 -0
- package/src/shade/renderer/light/cluster/chunk_cluster_keep_smallest.js +47 -0
- package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.js +12 -8
- package/src/shade/renderer/light/environment/equirectangular_zenith_first_direction_to_uv.d.ts +36 -0
- package/src/shade/renderer/light/environment/equirectangular_zenith_first_direction_to_uv.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/equirectangular_zenith_first_direction_to_uv.js +41 -0
- package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/execute_filter_environment_map.js +17 -1
- package/src/shade/renderer/light/environment/octahedral_uv_to_direction.d.ts +5 -13
- package/src/shade/renderer/light/environment/octahedral_uv_to_direction.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/octahedral_uv_to_direction.js +10 -30
- package/src/shade/renderer/light/environment/octahedral_z_pole_uv_to_direction.d.ts +31 -0
- package/src/shade/renderer/light/environment/octahedral_z_pole_uv_to_direction.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/octahedral_z_pole_uv_to_direction.js +45 -0
- package/src/shade/renderer/light/environment/resample_cube_to_octahedral.js +2 -2
- package/src/shade/renderer/light/environment/resample_equirectangular_to_octahedral.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/resample_equirectangular_to_octahedral.js +11 -8
- package/src/shade/renderer/light/model/SpotLight.d.ts +10 -1
- package/src/shade/renderer/light/model/SpotLight.d.ts.map +1 -1
- package/src/shade/renderer/light/model/SpotLight.js +11 -3
- package/src/shade/renderer/light/model/io/light_record_directional.d.ts.map +1 -1
- package/src/shade/renderer/light/model/io/light_record_directional.js +3 -1
- package/src/shade/renderer/light/model/io/light_record_point.d.ts.map +1 -1
- package/src/shade/renderer/light/model/io/light_record_point.js +3 -1
- package/src/shade/renderer/light/model/io/light_record_spot.d.ts.map +1 -1
- package/src/shade/renderer/light/model/io/light_record_spot.js +3 -1
- package/src/shade/renderer/loader/gltf/gltf_base_url.d.ts +20 -0
- package/src/shade/renderer/loader/gltf/gltf_base_url.d.ts.map +1 -0
- package/src/shade/renderer/loader/gltf/gltf_base_url.js +27 -0
- package/src/shade/renderer/loader/gltf/gltf_create_material.d.ts.map +1 -1
- package/src/shade/renderer/loader/gltf/gltf_create_material.js +50 -10
- package/src/shade/renderer/loader/gltf/load_gltf.d.ts +4 -0
- package/src/shade/renderer/loader/gltf/load_gltf.d.ts.map +1 -1
- package/src/shade/renderer/loader/gltf/load_gltf.js +28 -56
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts.map +1 -1
- package/src/shade/renderer/loader/gltf/tiny-gltf.js +843 -843
- package/src/shade/renderer/material/GPUMaterialContext.d.ts +63 -26
- package/src/shade/renderer/material/GPUMaterialContext.d.ts.map +1 -1
- package/src/shade/renderer/material/GPUMaterialContext.js +255 -390
- package/src/shade/renderer/material/GPUMaterialManager.d.ts +51 -1
- package/src/shade/renderer/material/GPUMaterialManager.d.ts.map +1 -1
- package/src/shade/renderer/material/GPUMaterialManager.js +345 -91
- package/src/shade/renderer/material/ShadeMaterial.d.ts +21 -0
- package/src/shade/renderer/material/ShadeMaterial.d.ts.map +1 -1
- package/src/shade/renderer/material/ShadeMaterial.js +31 -0
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +25 -6
- package/src/shade/renderer/material/standard/SHADING_MATERIAL_RESOURCE_GROUP.d.ts +10 -0
- package/src/shade/renderer/material/standard/SHADING_MATERIAL_RESOURCE_GROUP.d.ts.map +1 -1
- package/src/shade/renderer/material/standard/SHADING_MATERIAL_RESOURCE_GROUP.js +14 -2
- package/src/shade/renderer/material/standard/STANDARD_MATERIAL_TEMPLATE.d.ts +12 -0
- package/src/shade/renderer/material/standard/STANDARD_MATERIAL_TEMPLATE.d.ts.map +1 -0
- package/src/shade/renderer/material/standard/STANDARD_MATERIAL_TEMPLATE.js +166 -0
- package/src/shade/renderer/material/standard/VT_MATERIAL_TEMPLATE.d.ts +10 -0
- package/src/shade/renderer/material/standard/VT_MATERIAL_TEMPLATE.d.ts.map +1 -0
- package/src/shade/renderer/material/standard/VT_MATERIAL_TEMPLATE.js +141 -0
- package/src/shade/renderer/material/standard/chunk_standard_material_surface.d.ts +29 -0
- package/src/shade/renderer/material/standard/chunk_standard_material_surface.d.ts.map +1 -0
- package/src/shade/renderer/material/standard/chunk_standard_material_surface.js +92 -0
- package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts +74 -28
- package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts.map +1 -1
- package/src/shade/renderer/material/standard/fragment_gbuffer.js +165 -67
- package/src/shade/renderer/material/standard/fragment_gbuffer_vt.d.ts +27 -18
- package/src/shade/renderer/material/standard/fragment_gbuffer_vt.d.ts.map +1 -1
- package/src/shade/renderer/material/standard/fragment_gbuffer_vt.js +70 -91
- package/src/shade/renderer/material/standard/material_gbuffer_vertex.d.ts +9 -6
- package/src/shade/renderer/material/standard/material_gbuffer_vertex.d.ts.map +1 -1
- package/src/shade/renderer/material/standard/material_gbuffer_vertex.js +13 -14
- package/src/shade/renderer/material/template/GPUMaterialServices.d.ts +73 -0
- package/src/shade/renderer/material/template/GPUMaterialServices.d.ts.map +1 -0
- package/src/shade/renderer/material/template/GPUMaterialServices.js +79 -0
- package/src/shade/renderer/material/template/ShadeMaterialTemplate.d.ts +170 -0
- package/src/shade/renderer/material/template/ShadeMaterialTemplate.d.ts.map +1 -0
- package/src/shade/renderer/material/template/ShadeMaterialTemplate.js +234 -0
- package/src/shade/renderer/material/template/chunk_material_surface.d.ts +47 -0
- package/src/shade/renderer/material/template/chunk_material_surface.d.ts.map +1 -0
- package/src/shade/renderer/material/template/chunk_material_surface.js +116 -0
- package/src/shade/renderer/material/template/flat_material_template_spec_support.d.ts +22 -0
- package/src/shade/renderer/material/template/flat_material_template_spec_support.d.ts.map +1 -0
- package/src/shade/renderer/material/template/flat_material_template_spec_support.js +78 -0
- package/src/shade/renderer/material/template/material_metadata_neutral.d.ts +15 -0
- package/src/shade/renderer/material/template/material_metadata_neutral.d.ts.map +1 -0
- package/src/shade/renderer/material/template/material_metadata_neutral.js +46 -0
- package/src/shade/renderer/material/template/material_template_of.d.ts +10 -0
- package/src/shade/renderer/material/template/material_template_of.d.ts.map +1 -0
- package/src/shade/renderer/material/template/material_template_of.js +20 -0
- package/src/shade/renderer/object_property/chunk_write_object_property.d.ts +5 -0
- package/src/shade/renderer/object_property/chunk_write_object_property.d.ts.map +1 -1
- package/src/shade/renderer/object_property/chunk_write_object_property.js +7 -1
- package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts +7 -1
- package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts.map +1 -1
- package/src/shade/renderer/object_property/chunk_write_object_property_node3d.js +9 -2
- package/src/shade/renderer/particles/DESIGN.md +7 -0
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.js +81 -68
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts +22 -3
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleVMISA.js +30 -3
- package/src/shade/renderer/particles/isa/particle_assembly.js +41 -1
- package/src/shade/renderer/particles/optimizer/particle_program_analysis.d.ts +7 -1
- package/src/shade/renderer/particles/optimizer/particle_program_analysis.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/particle_program_analysis.js +23 -17
- package/src/shade/renderer/particles/optimizer/pass_allocate_registers.js +1 -1
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.js +10 -9
- package/src/shade/renderer/particles/optimizer/pass_inline_constants.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_inline_constants.js +4 -3
- package/src/shade/renderer/particles/optimizer/pass_narrow_widths.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_narrow_widths.js +1 -1
- package/src/shade/renderer/particles/optimizer/pass_pack_registers.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_pack_registers.js +12 -4
- package/src/shade/renderer/particles/optimizer/pass_peephole.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_peephole.js +11 -10
- package/src/shade/renderer/particles/optimizer/pass_propagate_copies.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_propagate_copies.js +12 -10
- package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.js +12 -4
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ParticleEmitter.js +7 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_avboit_contribution.d.ts +4 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_avboit_contribution.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_avboit_contribution.js +47 -88
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_occupancy.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_occupancy.js +22 -68
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.js +5 -3
- package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/ParticleVMReference.js +17 -1
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.js +12 -2
- package/src/shade/renderer/postprocess/TemporalJitterSequence.d.ts +44 -0
- package/src/shade/renderer/postprocess/TemporalJitterSequence.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/TemporalJitterSequence.js +104 -0
- package/src/shade/renderer/postprocess/chunk_find_nearest_depth.d.ts +25 -0
- package/src/shade/renderer/postprocess/chunk_find_nearest_depth.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/chunk_find_nearest_depth.js +74 -0
- package/src/shade/renderer/postprocess/denoise/shader_temporal_reprojection_luma.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/denoise/shader_temporal_reprojection_luma.js +19 -4
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.js +12 -1
- package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.js +8 -0
- package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.js +18 -3
- package/src/shade/renderer/postprocess/eye/shader_autoexposure_read_histogram.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/eye/shader_autoexposure_read_histogram.js +17 -4
- package/src/shade/renderer/postprocess/gtao/GTAO_CONSTANTS.d.ts +29 -0
- package/src/shade/renderer/postprocess/gtao/GTAO_CONSTANTS.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/gtao/GTAO_CONSTANTS.js +69 -0
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts +4 -16
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +10 -52
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.d.ts +0 -16
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +23 -55
- package/src/shade/renderer/postprocess/motion_blur/MotionBlur.d.ts +4 -1
- package/src/shade/renderer/postprocess/motion_blur/MotionBlur.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/motion_blur/MotionBlur.js +4 -1
- package/src/shade/renderer/postprocess/motion_blur/chunk_motion_blur_resolution.d.ts +18 -0
- package/src/shade/renderer/postprocess/motion_blur/chunk_motion_blur_resolution.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/motion_blur/chunk_motion_blur_resolution.js +43 -0
- package/src/shade/renderer/postprocess/motion_blur/graph_postprocess_motion_blur.d.ts +5 -1
- package/src/shade/renderer/postprocess/motion_blur/graph_postprocess_motion_blur.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/motion_blur/graph_postprocess_motion_blur.js +12 -2
- package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.js +33 -6
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +16 -8
- package/src/shade/renderer/postprocess/nss/NSS.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.js +37 -35
- package/src/shade/renderer/postprocess/nss/chunk_nss_find_nearest_depth.d.ts +2 -2
- package/src/shade/renderer/postprocess/nss/chunk_nss_find_nearest_depth.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/chunk_nss_find_nearest_depth.js +28 -61
- package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.js +296 -291
- package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.js +13 -0
- package/src/shade/renderer/postprocess/ssr/SSR.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/SSR.js +9 -7
- package/src/shade/renderer/postprocess/ssr/depth_max_shader.d.ts +14 -0
- package/src/shade/renderer/postprocess/ssr/depth_max_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/depth_max_shader.js +53 -25
- package/src/shade/renderer/postprocess/ssr/graph_build_depth_max_pyramid.d.ts +11 -1
- package/src/shade/renderer/postprocess/ssr/graph_build_depth_max_pyramid.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/graph_build_depth_max_pyramid.js +11 -1
- package/src/shade/renderer/postprocess/ssr/prefilter/NOTES.md +46 -0
- package/src/shade/renderer/postprocess/ssr/prefilter/shader_ssr_prefilter.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/prefilter/shader_ssr_prefilter.js +7 -0
- package/src/shade/renderer/postprocess/ssr/shader/chunk_ssr_depth_thickness.d.ts +32 -0
- package/src/shade/renderer/postprocess/ssr/shader/chunk_ssr_depth_thickness.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/ssr/shader/chunk_ssr_depth_thickness.js +41 -0
- package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.js +11 -6
- package/src/shade/renderer/postprocess/taa/TAA.d.ts +13 -4
- package/src/shade/renderer/postprocess/taa/TAA.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/TAA.js +29 -48
- package/src/shade/renderer/postprocess/taa/chunk_taa_tonemap.d.ts +11 -0
- package/src/shade/renderer/postprocess/taa/chunk_taa_tonemap.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/chunk_taa_tonemap.js +25 -4
- package/src/shade/renderer/postprocess/taa/shader_depth_occlusion_clip.d.ts +8 -0
- package/src/shade/renderer/postprocess/taa/shader_depth_occlusion_clip.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/shader_depth_occlusion_clip.js +14 -42
- package/src/shade/renderer/rasterize/RasterizationJob.d.ts +4 -2
- package/src/shade/renderer/rasterize/RasterizationJob.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/RasterizationJob.js +3 -1
- package/src/shade/renderer/rasterize/TemplatePassDescriptor.d.ts +57 -0
- package/src/shade/renderer/rasterize/TemplatePassDescriptor.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/TemplatePassDescriptor.js +133 -0
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.js +17 -0
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +30 -4
- package/src/shade/renderer/rasterize/bucket/rasterization_has_opaque_bucket.d.ts +3 -1
- package/src/shade/renderer/rasterize/bucket/rasterization_has_opaque_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/rasterization_has_opaque_bucket.js +3 -1
- package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.js +74 -68
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +11 -1
- package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.js +70 -64
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way.js +3 -4
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +8 -2
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.js +134 -88
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.js +3 -4
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +7 -5
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.js +59 -29
- package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.js +3 -4
- package/src/shade/renderer/rasterize/expand/mesh/shader_prefix_sum_to_command.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/shader_prefix_sum_to_command.js +5 -2
- package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.js +3 -4
- package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js +28 -20
- package/src/shade/renderer/rasterize/forward/SHADING_SCENE_RESOURCE_GROUP.d.ts +20 -0
- package/src/shade/renderer/rasterize/forward/SHADING_SCENE_RESOURCE_GROUP.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/SHADING_SCENE_RESOURCE_GROUP.js +25 -0
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.js +2 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.js +2 -1
- package/src/shade/renderer/rasterize/forward/forward_template_pipeline.d.ts +40 -0
- package/src/shade/renderer/rasterize/forward/forward_template_pipeline.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/forward/forward_template_pipeline.js +86 -0
- package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.d.ts +11 -0
- package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.js +13 -2
- package/src/shade/renderer/rasterize/graph_clear_raster_targets.d.ts +38 -0
- package/src/shade/renderer/rasterize/graph_clear_raster_targets.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/graph_clear_raster_targets.js +105 -0
- package/src/shade/renderer/rasterize/native/alpha_tested_pass_resources.d.ts +59 -1
- package/src/shade/renderer/rasterize/native/alpha_tested_pass_resources.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/alpha_tested_pass_resources.js +109 -7
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +16 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +13 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +247 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +20 -2
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +1 -1
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_coverage.d.ts +17 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_coverage.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_coverage.js +25 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_fold_pairs.d.ts +4 -5
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_fold_pairs.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_fold_pairs.js +7 -6
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_mark.d.ts +17 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_mark.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_mark.js +51 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_premultiplied_contribution.d.ts +23 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_premultiplied_contribution.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_premultiplied_contribution.js +77 -0
- 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 +16 -20
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.d.ts +8 -2
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.js +57 -43
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.d.ts +8 -2
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.js +57 -43
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_occupancy.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_occupancy.js +8 -2
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts +7 -2
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.js +67 -58
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.d.ts +8 -2
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.js +186 -156
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.d.ts +2 -2
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.js +36 -28
- package/src/shade/renderer/rasterize/native/material_draw_indirect.d.ts +14 -12
- package/src/shade/renderer/rasterize/native/material_draw_indirect.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/material_draw_indirect.js +29 -23
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +16 -22
- package/src/shade/renderer/rasterize/native/oit/oit_resolve_fragment_body.d.ts +33 -0
- package/src/shade/renderer/rasterize/native/oit/oit_resolve_fragment_body.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/oit/oit_resolve_fragment_body.js +123 -0
- package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.d.ts +7 -2
- package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +227 -218
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.d.ts +8 -2
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +112 -180
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.d.ts +8 -2
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.js +110 -178
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.d.ts +7 -2
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +242 -204
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +21 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +12 -20
- package/src/shade/renderer/restir/reservoir/shader.d.ts.map +1 -1
- package/src/shade/renderer/restir/reservoir/shader.js +27 -1
- package/src/shade/renderer/scene/GPUSceneContext.d.ts +2 -1
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +11 -9
- package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.js +22 -0
- package/src/shade/renderer/scene/SceneManager.d.ts +10 -0
- package/src/shade/renderer/scene/SceneManager.d.ts.map +1 -1
- package/src/shade/renderer/scene/SceneManager.js +17 -0
- package/src/shade/renderer/scene/rows/GPUEntityBoundsReadback.d.ts.map +1 -1
- package/src/shade/renderer/scene/rows/GPUEntityBoundsReadback.js +164 -144
- package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts +10 -0
- package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -1
- package/src/shade/renderer/scene/rows/GPUSceneRows.js +14 -0
- package/src/shade/renderer/scene/serialization/serialize_scene.d.ts.map +1 -1
- package/src/shade/renderer/scene/serialization/serialize_scene.js +2 -6
- package/src/shade/renderer/shader/ComputeShader.d.ts +5 -0
- package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
- package/src/shade/renderer/shader/ComputeShader.js +358 -353
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_scattering.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_scattering.js +15 -1
- package/src/shade/renderer/shader/chunk/binary/chunk_encode_f16.d.ts +11 -2
- package/src/shade/renderer/shader/chunk/binary/chunk_encode_f16.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/binary/chunk_encode_f16.js +33 -13
- package/src/shade/renderer/shader/chunk/brdf/chunk_D_GGX.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/brdf/chunk_D_GGX.js +31 -3
- package/src/shade/renderer/shader/chunk/bvh/morton/chunk_decode32_morton2.d.ts +10 -1
- package/src/shade/renderer/shader/chunk/bvh/morton/chunk_decode32_morton2.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/bvh/morton/chunk_decode32_morton2.js +23 -8
- package/src/shade/renderer/shader/chunk/camera/chunk_pixel_radius_to_world.d.ts +8 -1
- package/src/shade/renderer/shader/chunk/camera/chunk_pixel_radius_to_world.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/camera/chunk_pixel_radius_to_world.js +12 -5
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_distance_to_ray.d.ts +15 -1
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_distance_to_ray.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_distance_to_ray.js +24 -28
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_distance_to_ray_v2.d.ts +5 -0
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_distance_to_ray_v2.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_distance_to_ray_v2.js +18 -13
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_intersects_ray.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_intersects_ray.js +1 -47
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_raycast.d.ts +10 -0
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_raycast.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_raycast.js +23 -8
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_raycast_positive.d.ts +7 -0
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_raycast_positive.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_raycast_positive.js +12 -25
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_slab_span.d.ts +32 -0
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_slab_span.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_slab_span.js +52 -0
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_view_depth_range.d.ts +20 -0
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_view_depth_range.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_view_depth_range.js +42 -0
- package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_octahedral_uv_wrap.d.ts +10 -1
- package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_octahedral_uv_wrap.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_octahedral_uv_wrap.js +18 -3
- package/src/shade/renderer/shader/chunk/geometry/quaternion/chunk_quat_encode_u32.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/quaternion/chunk_quat_encode_u32.js +8 -4
- package/src/shade/renderer/shader/chunk/grid/chunk_folded_workgroup_index.d.ts +24 -0
- package/src/shade/renderer/shader/chunk/grid/chunk_folded_workgroup_index.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/grid/chunk_folded_workgroup_index.js +36 -0
- package/src/shade/renderer/shader/chunk/grid/chunk_grid3d_to_index.d.ts +6 -0
- package/src/shade/renderer/shader/chunk/grid/chunk_grid3d_to_index.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/grid/chunk_grid3d_to_index.js +6 -0
- package/src/shade/renderer/shader/chunk/light/INCIDENT_LIGHT_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/INCIDENT_LIGHT_STRUCT.js +6 -1
- package/src/shade/renderer/shader/chunk/light/io/chunk_get_spot_light_info.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/io/chunk_get_spot_light_info.js +6 -1
- package/src/shade/renderer/shader/chunk/material/chunk_albedo_unpremultiply.d.ts +24 -0
- package/src/shade/renderer/shader/chunk/material/chunk_albedo_unpremultiply.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/material/chunk_albedo_unpremultiply.js +31 -0
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg2d.js +2 -2
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg3d16.js +1 -1
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg4d.js +1 -1
- package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_validate_hit.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_validate_hit.js +8 -4
- package/src/shade/renderer/shader/chunk/sdf/chunk_mesh_sdf_soft_shadow.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/sdf/chunk_mesh_sdf_soft_shadow.js +17 -3
- package/src/shade/renderer/shader/graph/compute/graph_compute_indirect_pass.d.ts +4 -0
- package/src/shade/renderer/shader/graph/compute/graph_compute_indirect_pass.d.ts.map +1 -1
- package/src/shade/renderer/shader/graph/compute/graph_compute_indirect_pass.js +4 -0
- package/src/shade/renderer/shader/graph/graph_import_typed_buffer.d.ts +2 -1
- package/src/shade/renderer/shader/graph/graph_import_typed_buffer.d.ts.map +1 -1
- package/src/shade/renderer/shader/graph/graph_import_typed_buffer.js +15 -28
- package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts +8 -0
- package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/pass/RenderPassDescriptor.js +203 -192
- package/src/shade/renderer/shader/resource/ShaderResourceGroupDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/resource/ShaderResourceGroupDescriptor.js +12 -0
- package/src/shade/renderer/shader/type/WebGPUArray.d.ts.map +1 -1
- package/src/shade/renderer/shader/type/WebGPUArray.js +25 -1
- package/src/shade/renderer/shader/type/queue_typed_buffer_update.d.ts.map +1 -1
- package/src/shade/renderer/shader/type/queue_typed_buffer_update.js +15 -0
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +10 -9
- package/src/shade/renderer/shadow/map/ShadowmapDrawSelector.d.ts +12 -2
- package/src/shade/renderer/shadow/map/ShadowmapDrawSelector.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/ShadowmapDrawSelector.js +210 -196
- package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts +10 -3
- package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.js +219 -194
- package/src/shade/renderer/shadow/map/shadowmap_budget_carry_over.d.ts +32 -0
- package/src/shade/renderer/shadow/map/shadowmap_budget_carry_over.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/shadowmap_budget_carry_over.js +47 -0
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.js +11 -1
- package/src/shade/renderer/texture/ShadeTexture.d.ts +16 -0
- package/src/shade/renderer/texture/ShadeTexture.d.ts.map +1 -1
- package/src/shade/renderer/texture/ShadeTexture.js +17 -0
- package/src/shade/renderer/texture/TextureManager.d.ts +22 -5
- package/src/shade/renderer/texture/TextureManager.d.ts.map +1 -1
- package/src/shade/renderer/texture/TextureManager.js +109 -6
- package/src/shade/renderer/texture/bindless/GPUBindlessTextureManager.d.ts.map +1 -1
- package/src/shade/renderer/texture/bindless/GPUBindlessTextureManager.js +8 -2
- package/src/shade/renderer/texture/download_texture_data.d.ts.map +1 -1
- package/src/shade/renderer/texture/download_texture_data.js +12 -4
- package/src/shade/renderer/texture/encode/shader_texture_encode_astc_4x4.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/shader_texture_encode_astc_4x4.js +66 -63
- package/src/shade/renderer/texture/encode/shader_texture_encode_bc1.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/shader_texture_encode_bc1.js +63 -60
- package/src/shade/renderer/texture/encode/shader_texture_encode_bc4.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/shader_texture_encode_bc4.js +79 -76
- package/src/shade/renderer/texture/encode/shader_texture_encode_bc4_snorm.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/shader_texture_encode_bc4_snorm.js +67 -64
- package/src/shade/renderer/texture/encode/shader_texture_encode_bc5.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/shader_texture_encode_bc5.js +70 -67
- package/src/shade/renderer/texture/encode/shader_texture_encode_bc5_snorm.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/shader_texture_encode_bc5_snorm.js +66 -63
- package/src/shade/renderer/texture/encode/shader_texture_encode_bc6h.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/shader_texture_encode_bc6h.js +65 -62
- package/src/shade/renderer/texture/encode/shader_texture_encode_bc7.d.ts.map +1 -1
- package/src/shade/renderer/texture/encode/shader_texture_encode_bc7.js +61 -58
- package/src/shade/renderer/texture/format/texture_format_from_shade_image.d.ts +7 -1
- package/src/shade/renderer/texture/format/texture_format_from_shade_image.d.ts.map +1 -1
- package/src/shade/renderer/texture/format/texture_format_from_shade_image.js +100 -95
- package/src/shade/renderer/texture/mipmaps/WebGPUMipmapGenerator.d.ts.map +1 -1
- package/src/shade/renderer/texture/mipmaps/WebGPUMipmapGenerator.js +59 -68
- package/src/shade/renderer/texture/mipmaps/filters/mipmap_shader_code_wronski2021.d.ts +30 -1
- package/src/shade/renderer/texture/mipmaps/filters/mipmap_shader_code_wronski2021.d.ts.map +1 -1
- package/src/shade/renderer/texture/mipmaps/filters/mipmap_shader_code_wronski2021.js +37 -20
- package/src/shade/renderer/texture/texture_descriptor_from_texture_shade.js +73 -73
- package/src/shade/renderer/view/ViewManager.d.ts +8 -0
- package/src/shade/renderer/view/ViewManager.d.ts.map +1 -1
- package/src/shade/renderer/view/ViewManager.js +15 -0
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +516 -507
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.js +272 -260
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js +160 -134
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts +3 -0
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +243 -62
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +110 -7
- package/src/shade/wgsl/validate_wgsl_source.d.ts.map +1 -1
- package/src/shade/wgsl/validate_wgsl_source.js +57 -0
- package/src/view/asset/AssetLoaderStatusView.d.ts.map +1 -1
- package/src/view/asset/AssetLoaderStatusView.js +8 -0
- package/src/view/common/LabelView.d.ts.map +1 -1
- package/src/view/common/LabelView.js +4 -0
- package/src/view/common/ListView.d.ts +6 -2
- package/src/view/common/ListView.d.ts.map +1 -1
- package/src/view/common/ListView.js +27 -7
- package/src/view/common/TabbedView.d.ts.map +1 -1
- package/src/view/common/TabbedView.js +8 -0
- package/src/view/common/VirtualListView.d.ts.map +1 -1
- package/src/view/common/VirtualListView.js +17 -1
- package/src/view/common/dnd/DropTarget.d.ts.map +1 -1
- package/src/view/common/dnd/DropTarget.js +18 -0
- package/src/view/elements/DropDownSelectionView.d.ts.map +1 -1
- package/src/view/elements/DropDownSelectionView.js +8 -0
- package/src/view/elements/image/SvgImageView.d.ts.map +1 -1
- package/src/view/elements/image/SvgImageView.js +8 -0
- package/src/view/elements/navigation/ViewStack.d.ts.map +1 -1
- package/src/view/elements/navigation/ViewStack.js +4 -0
- package/src/view/elements/notify/NotificationView.d.ts.map +1 -1
- package/src/view/elements/notify/NotificationView.js +4 -0
- package/src/view/elements/progress/segmented/SegmentedResourceBarView.d.ts.map +1 -1
- package/src/view/elements/progress/segmented/SegmentedResourceBarView.js +8 -0
- package/src/view/elements/radial/RadialMenu.d.ts.map +1 -1
- package/src/view/elements/radial/RadialMenu.js +4 -0
- package/src/view/minimap/Minimap.d.ts.map +1 -1
- package/src/view/minimap/Minimap.js +8 -0
- package/src/view/minimap/MinimapCanvasView.d.ts.map +1 -1
- package/src/view/minimap/MinimapCanvasView.js +21 -1
- package/src/view/minimap/dom/MinimapCameraView.d.ts.map +1 -1
- package/src/view/minimap/dom/MinimapCameraView.js +232 -220
- package/src/view/minimap/dom/MinimapMarkerView.d.ts.map +1 -1
- package/src/view/minimap/dom/MinimapMarkerView.js +8 -0
- package/src/view/minimap/minimap_focus_area.d.ts +5 -0
- package/src/view/minimap/minimap_focus_area.d.ts.map +1 -1
- package/src/view/minimap/minimap_focus_area.js +22 -0
- package/src/view/tooltip/TooltipManager.d.ts.map +1 -1
- package/src/view/tooltip/TooltipManager.js +16 -4
- package/src/core/geom/3d/atlas/atlas_bench_lib.d.ts +0 -73
- package/src/core/geom/3d/atlas/atlas_bench_lib.d.ts.map +0 -1
- package/src/core/geom/3d/atlas/atlas_bench_lib.js +0 -315
- package/src/engine/graphics/ecs/mesh/MeshEvents.d.ts +0 -6
- package/src/engine/graphics/ecs/mesh/MeshEvents.d.ts.map +0 -1
- package/src/engine/graphics/ecs/mesh/MeshEvents.js +0 -16
- package/src/engine/graphics/ecs/mesh/commonObject3DFastMatrixUpdate.d.ts +0 -2
- package/src/engine/graphics/ecs/mesh/commonObject3DFastMatrixUpdate.d.ts.map +0 -1
- package/src/engine/graphics/ecs/mesh/commonObject3DFastMatrixUpdate.js +0 -37
- package/src/engine/graphics/ecs/mesh/copyToVector3.d.ts +0 -8
- package/src/engine/graphics/ecs/mesh/copyToVector3.d.ts.map +0 -1
- package/src/engine/graphics/ecs/mesh/copyToVector3.js +0 -18
- package/src/engine/graphics/ecs/mesh/object3DFastMatrixUpdate.d.ts +0 -6
- package/src/engine/graphics/ecs/mesh/object3DFastMatrixUpdate.d.ts.map +0 -1
- package/src/engine/graphics/ecs/mesh/object3DFastMatrixUpdate.js +0 -18
- package/src/engine/graphics/ecs/mesh/rootObject3DFastMatrixUpdate.d.ts +0 -6
- package/src/engine/graphics/ecs/mesh/rootObject3DFastMatrixUpdate.d.ts.map +0 -1
- package/src/engine/graphics/ecs/mesh/rootObject3DFastMatrixUpdate.js +0 -14
- package/src/engine/graphics/ecs/mesh/setMesh.d.ts +0 -16
- package/src/engine/graphics/ecs/mesh/setMesh.d.ts.map +0 -1
- package/src/engine/graphics/ecs/mesh/setMesh.js +0 -55
- package/src/engine/graphics/ecs/mesh/skeleton/BoneMapping.d.ts +0 -13
- package/src/engine/graphics/ecs/mesh/skeleton/BoneMapping.d.ts.map +0 -1
- package/src/engine/graphics/ecs/mesh/skeleton/BoneMapping.js +0 -99
- package/src/engine/graphics/ecs/mesh/skeleton/HumanoidBoneType.d.ts +0 -25
- package/src/engine/graphics/ecs/mesh/skeleton/HumanoidBoneType.d.ts.map +0 -1
- package/src/engine/graphics/ecs/mesh/skeleton/HumanoidBoneType.js +0 -29
- package/src/engine/graphics/ecs/mesh/updateMeshTransform.d.ts +0 -6
- package/src/engine/graphics/ecs/mesh/updateMeshTransform.d.ts.map +0 -1
- package/src/engine/graphics/ecs/mesh/updateMeshTransform.js +0 -15
- package/src/engine/graphics/ecs/mesh/updateNodeByTransformAndBBB.d.ts +0 -8
- package/src/engine/graphics/ecs/mesh/updateNodeByTransformAndBBB.d.ts.map +0 -1
- package/src/engine/graphics/ecs/mesh/updateNodeByTransformAndBBB.js +0 -14
- package/src/engine/graphics3/terrain/GPUTerrainSplatRenderer.d.ts +0 -59
- package/src/engine/graphics3/terrain/GPUTerrainSplatRenderer.d.ts.map +0 -1
- package/src/engine/graphics3/terrain/GPUTerrainSplatRenderer.js +0 -481
- package/src/engine/graphics3/terrain/pack_terrain_row_table.d.ts +0 -22
- package/src/engine/graphics3/terrain/pack_terrain_row_table.d.ts.map +0 -1
- package/src/engine/graphics3/terrain/pack_terrain_row_table.js +0 -48
- package/src/engine/graphics3/terrain/shader_terrain_splat.d.ts +0 -26
- package/src/engine/graphics3/terrain/shader_terrain_splat.d.ts.map +0 -1
- package/src/engine/graphics3/terrain/shader_terrain_splat.js +0 -215
- package/src/shade/renderer/animation/ANIMATION_BOUND_TRACK_GROUP_STRUCT.d.ts +0 -25
- package/src/shade/renderer/animation/ANIMATION_BOUND_TRACK_GROUP_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/animation/ANIMATION_BOUND_TRACK_GROUP_STRUCT.js +0 -57
- package/src/shade/renderer/animation/ANIMATION_KEYFRAME_BLOCK_STRUCT.d.ts +0 -26
- package/src/shade/renderer/animation/ANIMATION_KEYFRAME_BLOCK_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/animation/ANIMATION_KEYFRAME_BLOCK_STRUCT.js +0 -50
- package/src/shade/renderer/animation/ANIMATION_SKIN_JOINT_BLOCK_STRUCT.d.ts +0 -29
- package/src/shade/renderer/animation/ANIMATION_SKIN_JOINT_BLOCK_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/animation/ANIMATION_SKIN_JOINT_BLOCK_STRUCT.js +0 -62
- package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_CREASE_ANGLE.d.ts +0 -46
- package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_CREASE_ANGLE.d.ts.map +0 -1
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
import { assert } from "../../../core/assert.js";
|
|
2
2
|
import { FrameGraph } from "../../../engine/graphics/render/frame_graph/FrameGraph.js";
|
|
3
3
|
import { GPUDatabase } from "../buffer/table/GPUDatabase.js";
|
|
4
|
+
import { GPU_DATABASE_NULL } from "../buffer/table/GPU_DATABASE_NULL.js";
|
|
5
|
+
import { generate_record_writer } from "../buffer/table/serde/generate_record_writer.js";
|
|
4
6
|
import {
|
|
5
7
|
graph_scene_update_transform_hierarchy
|
|
6
8
|
} from "../scene/hierarchy/graph_scene_update_transform_hierarchy.js";
|
|
7
9
|
import { graph_import_buffer } from "../shader/graph/graph_import_buffer.js";
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
TRACKS_PER_GROUP_NODE,
|
|
11
|
-
} from "./ANIMATION_BOUND_TRACK_GROUP_STRUCT.js";
|
|
10
|
+
import { ANIMATION_CLIP_STATE_STRUCT } from "./ANIMATION_CLIP_STATE_STRUCT.js";
|
|
11
|
+
import { ANIMATION_CURVE_KEYFRAME_STRUCT } from "./ANIMATION_CURVE_KEYFRAME_STRUCT.js";
|
|
12
12
|
import { ANIMATION_DATABASE_SPEC } from "./ANIMATION_DATABASE_SPEC.js";
|
|
13
|
+
import { ANIMATION_SKIN_JOINT_STRUCT } from "./ANIMATION_SKIN_JOINT_STRUCT.js";
|
|
14
|
+
import { ANIMATION_SKIN_STRUCT } from "./ANIMATION_SKIN_STRUCT.js";
|
|
15
|
+
import { ANIMATION_TRACK_BINDING_STRUCT } from "./ANIMATION_TRACK_BINDING_STRUCT.js";
|
|
13
16
|
import { AnimationClipFlags } from "./AnimationClipFlags.js";
|
|
14
|
-
import { KEYFRAMES_PER_BLOCK } from "./ANIMATION_KEYFRAME_BLOCK_STRUCT.js";
|
|
15
|
-
import {
|
|
16
|
-
ANIMATION_SKIN_JOINT_BLOCK_NULL,
|
|
17
|
-
JOINTS_PER_SKIN_BLOCK,
|
|
18
|
-
} from "./ANIMATION_SKIN_JOINT_BLOCK_STRUCT.js";
|
|
19
17
|
import { POSE_ACCUMULATOR_SLOT_BYTES } from "./POSE_ACCUMULATOR_LAYOUT.js";
|
|
20
18
|
import { GPUStateAuthorityFlags } from "../../../engine/ecs/gpu/GPUStateAuthorityFlags.js";
|
|
21
19
|
import { gpu_authority_grant } from "../../../engine/ecs/gpu/gpu_authority_grant.js";
|
|
@@ -45,23 +43,13 @@ import {
|
|
|
45
43
|
|
|
46
44
|
/**
|
|
47
45
|
* @typedef {import("../../../engine/animation/curve/AnimationCurve.js").AnimationCurve} AnimationCurve
|
|
46
|
+
* @typedef {import("../buffer/table/serde/generate_record_writer.js").GPURecordWriter} GPURecordWriter
|
|
48
47
|
* @typedef {import("../../device/ShadeGPUCommandContext.js").ShadeGPUCommandContext} ShadeGPUCommandContext
|
|
49
48
|
* @typedef {import("../scene/GPUSceneContext.js").GPUSceneContext} GPUSceneContext
|
|
50
49
|
* @typedef {import("./ShadeAnimationClip.js").ShadeAnimationClip} ShadeAnimationClip
|
|
51
50
|
* @typedef {import("./Skin.js").Skin} Skin
|
|
52
51
|
*/
|
|
53
52
|
|
|
54
|
-
/**
|
|
55
|
-
* Tail-slot placeholders for the fixed-size inline arrays in chain
|
|
56
|
-
* nodes. The shader's `count` guard means these bytes are never read,
|
|
57
|
-
* but the upload buffer doesn't zero unwritten ranges and
|
|
58
|
-
* `write_struct_value` skips undefined fields — so explicit zeros are
|
|
59
|
-
* the only way to keep tail bytes deterministic. Frozen so a stray
|
|
60
|
-
* mutation can't bleed into multiple slots that share the reference.
|
|
61
|
-
*/
|
|
62
|
-
const ZERO_KEYFRAME = Object.freeze({ time: 0, value: 0, inTangent: 0, outTangent: 0 });
|
|
63
|
-
const ZERO_BINDING = Object.freeze({ track: 0, instance: 0, property: 0 });
|
|
64
|
-
|
|
65
53
|
/**
|
|
66
54
|
* Scratch for seeding a released joint's offset — see {@link GPUAnimationManager#release_targets}.
|
|
67
55
|
*
|
|
@@ -78,17 +66,50 @@ const SEED = new Transform64();
|
|
|
78
66
|
const SEED_PLAYBACK = { clip: null, time: 0, weight: 1 };
|
|
79
67
|
|
|
80
68
|
const SEED_PLAYBACKS = [SEED_PLAYBACK];
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
69
|
+
|
|
70
|
+
/*
|
|
71
|
+
Generated writers for the rows a registration adds as a run. Through `add_run` every row is a
|
|
72
|
+
reflective walk of its type, and a run is one row per keyframe, binding or joint where a chain
|
|
73
|
+
block used to hold eight: a 60-joint skin measured 1.7x the cost of the chain it replaced until
|
|
74
|
+
its joints went through a writer.
|
|
75
|
+
*/
|
|
76
|
+
|
|
77
|
+
const KEYFRAME_WRITER = generate_record_writer(ANIMATION_CURVE_KEYFRAME_STRUCT);
|
|
78
|
+
const BINDING_WRITER = generate_record_writer(ANIMATION_TRACK_BINDING_STRUCT);
|
|
79
|
+
const SKIN_JOINT_WRITER = generate_record_writer(ANIMATION_SKIN_JOINT_STRUCT);
|
|
80
|
+
|
|
81
|
+
/*
|
|
82
|
+
Writers for the fields of a clip that change after registration, each owning only its own words.
|
|
83
|
+
A playing clip's time is the GPU's — the tick advances it in the database buffer, and the CPU's
|
|
84
|
+
copy of the record never hears of it — so a mutator uploads the words it changes and nothing
|
|
85
|
+
else: a whole record would put the CPU's stale time back over the GPU's.
|
|
86
|
+
*/
|
|
87
|
+
|
|
88
|
+
const CLIP_TIME_WRITER = generate_record_writer(ANIMATION_CLIP_STATE_STRUCT, ['time']);
|
|
89
|
+
const CLIP_PLAYBACK_RATE_WRITER = generate_record_writer(ANIMATION_CLIP_STATE_STRUCT, ['playback_rate']);
|
|
90
|
+
const CLIP_PLAYBACK_WEIGHT_WRITER = generate_record_writer(ANIMATION_CLIP_STATE_STRUCT, ['playback_weight']);
|
|
91
|
+
const CLIP_FLAGS_WRITER = generate_record_writer(ANIMATION_CLIP_STATE_STRUCT, ['flags']);
|
|
92
|
+
const CLIP_BINDINGS_WRITER = generate_record_writer(ANIMATION_CLIP_STATE_STRUCT, ['bindings_first', 'bindings_count']);
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Word of a clip record holding its flags — read back to set or clear a bit of them.
|
|
96
|
+
*/
|
|
97
|
+
const CLIP_FLAGS_WORD = ANIMATION_CLIP_STATE_STRUCT.get('flags').offset / 4;
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Word of a skin record holding its first joint row — where its matrices start.
|
|
101
|
+
*/
|
|
102
|
+
const SKIN_JOINTS_FIRST_WORD = ANIMATION_SKIN_STRUCT.get('joints_first').offset / 4;
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* A joint's `node` alone — what naming a pending skin's nodes writes, and all it uploads.
|
|
106
|
+
*/
|
|
107
|
+
const SKIN_JOINT_NODE_WRITER = generate_record_writer(ANIMATION_SKIN_JOINT_STRUCT, ['node']);
|
|
87
108
|
|
|
88
109
|
/**
|
|
89
110
|
* One skinning matrix is a `mat4x4f` — 16 f32s, 64 bytes. The
|
|
90
|
-
* `skin_matrices` scratch buffer holds one entry per
|
|
91
|
-
*
|
|
111
|
+
* `skin_matrices` scratch buffer holds one entry per row of
|
|
112
|
+
* `animation_skin_joints`, at the joint's row.
|
|
92
113
|
*/
|
|
93
114
|
const SKIN_MATRIX_BYTES = 64;
|
|
94
115
|
|
|
@@ -120,57 +141,21 @@ const POSE_ACCUMULATOR_INITIAL_CAPACITY = 256;
|
|
|
120
141
|
*/
|
|
121
142
|
const MAX_DT_SECONDS = 1 / 15;
|
|
122
143
|
|
|
123
|
-
/**
|
|
124
|
-
* Allocate a singly-linked chain of fixed-capacity nodes into `table`,
|
|
125
|
-
* one node per `items_per_chunk`-sized window of `items`. Builds
|
|
126
|
-
* tail-first so each node's successor id is known at `add()` time —
|
|
127
|
-
* the alternative (forward + back-patch) would mean a second `set()`
|
|
128
|
-
* per node.
|
|
129
|
-
*
|
|
130
|
-
* `build_node(start, count, next_id)` constructs the record to add: it
|
|
131
|
-
* populates the inline array from `items[start..start+count]`, pads
|
|
132
|
-
* tail slots, and assembles any extra payload the table expects
|
|
133
|
-
* (including embedding `next_id` as the node's `next` field).
|
|
134
|
-
*
|
|
135
|
-
* Returns the head id (the last `add()`'s slot id), or `0xFFFFFFFF` if
|
|
136
|
-
* `items` is empty.
|
|
137
|
-
*
|
|
138
|
-
* @template T
|
|
139
|
-
* @template R
|
|
140
|
-
* @param {{ add: (record: R) => number }} table
|
|
141
|
-
* @param {T[]} items
|
|
142
|
-
* @param {number} items_per_chunk
|
|
143
|
-
* @param {(start: number, count: number, next_id: number) => R} build_node
|
|
144
|
-
* @returns {number}
|
|
145
|
-
*/
|
|
146
|
-
function add_linked_chain(table, items, items_per_chunk, build_node) {
|
|
147
|
-
const node_count = Math.ceil(items.length / items_per_chunk);
|
|
148
|
-
let next_id = 0xFFFFFFFF;
|
|
149
|
-
|
|
150
|
-
for (let n = node_count - 1; n >= 0; n--) {
|
|
151
|
-
const start = n * items_per_chunk;
|
|
152
|
-
const this_count = Math.min(items_per_chunk, items.length - start);
|
|
153
|
-
next_id = table.add(build_node(start, this_count, next_id));
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
return next_id;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
144
|
/**
|
|
160
145
|
* Top-level coordinator for GPU-resident animation.
|
|
161
146
|
*
|
|
162
147
|
* Owns a single {@link GPUDatabase} keyed by {@link ANIMATION_DATABASE_SPEC}
|
|
163
|
-
* with
|
|
164
|
-
* `animation_tracks`, `animation_clips`, `
|
|
165
|
-
*
|
|
166
|
-
*
|
|
148
|
+
* with its tables: `animation_curves`, `animation_keyframes`,
|
|
149
|
+
* `animation_tracks`, `animation_clips`, `animation_bindings`,
|
|
150
|
+
* `animation_skins` and `animation_skin_joints`.
|
|
151
|
+
* Every record — including individual keyframes (a run of rows per
|
|
152
|
+
* curve) and individual bindings (a run of rows per clip) — lives in
|
|
167
153
|
* the database, so the dispatch shader needs only one storage binding.
|
|
168
154
|
*
|
|
169
155
|
* Animation *data* (curves, keyframes, tracks) is independent from
|
|
170
|
-
* *bound clips* (each carrying a `time` and
|
|
171
|
-
*
|
|
172
|
-
*
|
|
173
|
-
* and back-references its owning clip.
|
|
156
|
+
* *bound clips* (each carrying a `time` and the run of its bindings).
|
|
157
|
+
* Each binding row names its clip, so the apply pass, one thread per
|
|
158
|
+
* binding, finds the clip's time from the binding alone.
|
|
174
159
|
*
|
|
175
160
|
* Usage:
|
|
176
161
|
* 1. (Once at setup) Either low-level (`add_curve`, `add_track`,
|
|
@@ -215,8 +200,8 @@ export class GPUAnimationManager {
|
|
|
215
200
|
*
|
|
216
201
|
* Lazily allocated on first {@link add_skin}; both grow together
|
|
217
202
|
* by doubling. After a grow both buffers are zero-initialised and
|
|
218
|
-
* {@link #
|
|
219
|
-
*
|
|
203
|
+
* {@link #skin_matrix_seed_all} is set so the next prep dispatch
|
|
204
|
+
* seeds all of the "previous" buffer with a copy of the freshly
|
|
220
205
|
* written "current" — without this, the first velocity readback
|
|
221
206
|
* after a grow would interpolate against zero matrices.
|
|
222
207
|
*
|
|
@@ -232,14 +217,31 @@ export class GPUAnimationManager {
|
|
|
232
217
|
#skin_matrices_current_index = 0;
|
|
233
218
|
|
|
234
219
|
/**
|
|
235
|
-
*
|
|
236
|
-
*
|
|
237
|
-
*
|
|
238
|
-
*
|
|
239
|
-
* matrices
|
|
220
|
+
* The runs of matrix rows the next prep dispatch seeds "previous" from "current" over, each
|
|
221
|
+
* `[first_row, count]`: a run handed out, and a pending skin's run whose joints were just
|
|
222
|
+
* named. The frame before either is not a pose — "previous" over those rows holds zeros, or
|
|
223
|
+
* the last pose of a skin that had them — so the first velocity read over them has to see
|
|
224
|
+
* matching matrices, which is zero velocity.
|
|
225
|
+
*
|
|
226
|
+
* Only those rows: a settled skin's rows of "previous" hold its pose last frame, which is what
|
|
227
|
+
* its motion is measured from.
|
|
228
|
+
*
|
|
229
|
+
* A skin given back takes its queued runs with it ({@link unregister_skin}), so every run here
|
|
230
|
+
* belongs to a skin still registered and not yet seeded — however long no prep runs, as while
|
|
231
|
+
* a loading screen draws nothing and the game goes on spawning.
|
|
232
|
+
*
|
|
233
|
+
* @type {Array<[number, number]>}
|
|
234
|
+
*/
|
|
235
|
+
#skin_matrix_seed_runs = [];
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* When true, the next prep dispatch seeds all of "previous" from "current", whatever
|
|
239
|
+
* {@link #skin_matrix_seed_runs} holds. Set when the buffers grow: both are made again,
|
|
240
|
+
* zeroed, so no row has a last frame left to keep.
|
|
241
|
+
*
|
|
240
242
|
* @type {boolean}
|
|
241
243
|
*/
|
|
242
|
-
#
|
|
244
|
+
#skin_matrix_seed_all = false;
|
|
243
245
|
|
|
244
246
|
/**
|
|
245
247
|
* Capacity of each of {@link #skin_matrices_buffers} in matrices
|
|
@@ -249,56 +251,13 @@ export class GPUAnimationManager {
|
|
|
249
251
|
#skin_matrices_capacity = 0;
|
|
250
252
|
|
|
251
253
|
/**
|
|
252
|
-
*
|
|
253
|
-
*
|
|
254
|
-
*
|
|
255
|
-
*
|
|
256
|
-
* Monotonic, but no longer the whole allocator — a range given back is reused before
|
|
257
|
-
* this advances again, so it tracks peak concurrent joints rather than total
|
|
258
|
-
* registrations.
|
|
254
|
+
* One past the highest joint row any skin has been given — how many matrices the buffers have
|
|
255
|
+
* to address, since a joint's matrix sits at its row. Only grows: first fit hands the rows a
|
|
256
|
+
* skin gave back to any skin they fit before it reaches past the end.
|
|
259
257
|
*
|
|
260
258
|
* @type {number}
|
|
261
259
|
*/
|
|
262
|
-
#
|
|
263
|
-
|
|
264
|
-
/**
|
|
265
|
-
* CPU-side `skin_id → skin_matrix_offset` map. Each registered
|
|
266
|
-
* skin's base address in the shared `skin_matrices` scratch
|
|
267
|
-
* buffer; the per-block absolute offset (the prep shader's hot
|
|
268
|
-
* path) is derived as `base + chain_position *
|
|
269
|
-
* JOINTS_PER_SKIN_BLOCK` at registration. Storing the base on
|
|
270
|
-
* GPU would duplicate it — the block records already carry the
|
|
271
|
-
* per-block absolute address, and only the CPU (the skinning-
|
|
272
|
-
* binding upload path) needs the skin's base value.
|
|
273
|
-
*
|
|
274
|
-
* @type {Map<number, number>}
|
|
275
|
-
*/
|
|
276
|
-
#skin_matrix_offsets = new Map();
|
|
277
|
-
|
|
278
|
-
/**
|
|
279
|
-
* Matrix ranges handed back by {@link unregister_skin}, bucketed by their length in
|
|
280
|
-
* matrices. Each bucket is a stack of base indices free to give out again.
|
|
281
|
-
*
|
|
282
|
-
* A range's base is baked into its skin's joint-block rows on the GPU, so a range can
|
|
283
|
-
* never be *moved* once handed out — which is what made compaction hard enough to skip,
|
|
284
|
-
* and left the offset a bump pointer with no way back. Reuse needs no movement: the hole
|
|
285
|
-
* a despawned character leaves is exactly the size of the next character wearing that
|
|
286
|
-
* rig, so matching a request to a hole of the same length hands the range straight back
|
|
287
|
-
* with nothing relocated and nothing to patch.
|
|
288
|
-
*
|
|
289
|
-
* Bucketed by length because the match has to be **exact**. The prep pass writes
|
|
290
|
-
* `base + joint` for `joint` in `[0, joint_count)`, so a skin placed in a shorter hole
|
|
291
|
-
* would write over whatever lives after it. Splitting a longer hole would fit, but every
|
|
292
|
-
* split leaves a fragment only an exactly-as-small skin can ever use; a game's rigs come
|
|
293
|
-
* in a handful of joint counts, so exact buckets stay few and nearly always hit.
|
|
294
|
-
*
|
|
295
|
-
* What this does not reclaim is bounded by the number of distinct joint counts ever
|
|
296
|
-
* registered rather than by the number of registrations: a rig retired for good leaves
|
|
297
|
-
* its ranges behind, a rig still in use passes the same ranges around forever.
|
|
298
|
-
*
|
|
299
|
-
* @type {Map<number, number[]>}
|
|
300
|
-
*/
|
|
301
|
-
#free_skin_matrix_ranges = new Map();
|
|
260
|
+
#skin_matrix_count = 0;
|
|
302
261
|
|
|
303
262
|
/**
|
|
304
263
|
* How many bound clips drive each entity, by entity. An entity's local TRS is the GPU's for
|
|
@@ -371,9 +330,9 @@ export class GPUAnimationManager {
|
|
|
371
330
|
* {@link register_clip}. Lets multiple clips whose channels share
|
|
372
331
|
* the same curve instance (e.g. one base clip retargeted across
|
|
373
332
|
* many character instances) reuse the same GPU rows for the
|
|
374
|
-
* curve header +
|
|
333
|
+
* curve header + keyframes rather than uploading
|
|
375
334
|
* duplicates. At grid-of-dancers scale duplication would balloon
|
|
376
|
-
* the
|
|
335
|
+
* the keyframes table past its page-table limits.
|
|
377
336
|
*
|
|
378
337
|
* Low-level `add_curve` deliberately stays uncached — every call
|
|
379
338
|
* uploads — so existing callers that pre-build curves with
|
|
@@ -390,7 +349,7 @@ export class GPUAnimationManager {
|
|
|
390
349
|
*
|
|
391
350
|
* An instance cache alone shares nothing between two parses of one file, and a character
|
|
392
351
|
* instanced a few hundred times is a few hundred parses — each with its own instances of the
|
|
393
|
-
* same keys, filling the
|
|
352
|
+
* same keys, filling the keyframes table with copies of one dance until its page limit
|
|
394
353
|
* refuses the next dancer. Curves are read-only once uploaded and nothing here releases them,
|
|
395
354
|
* so equal content can safely mean one upload.
|
|
396
355
|
*
|
|
@@ -418,35 +377,32 @@ export class GPUAnimationManager {
|
|
|
418
377
|
#track_id_cache = new Map();
|
|
419
378
|
|
|
420
379
|
/**
|
|
421
|
-
* Skins registered via {@link register_skin} whose
|
|
422
|
-
*
|
|
423
|
-
*
|
|
424
|
-
*
|
|
425
|
-
*
|
|
426
|
-
*
|
|
427
|
-
*
|
|
428
|
-
*
|
|
429
|
-
*
|
|
430
|
-
*
|
|
431
|
-
* reserved at register time, and the `inverse_bind_matrices`
|
|
432
|
-
* typed array.
|
|
380
|
+
* Skins registered via {@link register_skin} whose joints name no node yet, because at least
|
|
381
|
+
* one joint entity has not taken its row. The skin's record and its run of joints exist — each
|
|
382
|
+
* joint with its inverse bind and a NULL node, which the prep pass skips — so the id, the
|
|
383
|
+
* matrix offset and {@link unregister_skin} work from the start. The skin's meshes are bound
|
|
384
|
+
* to it only when {@link update} names the nodes: until then its matrices are not written,
|
|
385
|
+
* and a mesh deformed by them would read zeros or another skin's last pose.
|
|
386
|
+
*
|
|
387
|
+
* Each entry: `skin_id`; the CPU {@link Skin}, whose `joints` are the entities whose rows
|
|
388
|
+
* become the nodes and whose `meshes` are bound then; `joints_first`, the first row of the
|
|
389
|
+
* skin's joints; and `joint_count`, how many rows the run has.
|
|
433
390
|
*
|
|
434
391
|
* @type {Array<{
|
|
435
392
|
* skin_id: number,
|
|
436
393
|
* skin: Skin,
|
|
437
|
-
*
|
|
438
|
-
*
|
|
394
|
+
* joints_first: number,
|
|
395
|
+
* joint_count: number,
|
|
439
396
|
* }>}
|
|
440
397
|
*/
|
|
441
398
|
#pending_skins = [];
|
|
442
399
|
|
|
443
400
|
/**
|
|
444
401
|
* Clips registered via {@link register_clip} whose bindings
|
|
445
|
-
*
|
|
402
|
+
* haven't been added yet because one or more channel
|
|
446
403
|
* targets has not taken its row yet. The clip's GPU table row
|
|
447
|
-
* exists (
|
|
448
|
-
*
|
|
449
|
-
* unregister already work.
|
|
404
|
+
* exists (an empty range, no bindings driving the apply pass
|
|
405
|
+
* yet); time/state mutators and unregister already work.
|
|
450
406
|
*
|
|
451
407
|
* Each entry: `clip_id` plus the per-channel `(track_id,
|
|
452
408
|
* target, property)` triples — the curves and tracks were
|
|
@@ -491,8 +447,8 @@ export class GPUAnimationManager {
|
|
|
491
447
|
* Per-frame skinning-matrix scratch buffer for the *current*
|
|
492
448
|
* frame. `null` until the first skin is registered. The
|
|
493
449
|
* skin-matrix-prep pass writes to it; the skinning compute pass
|
|
494
|
-
* reads from it to deform current-frame positions.
|
|
495
|
-
*
|
|
450
|
+
* reads from it to deform current-frame positions. Joint `j` of
|
|
451
|
+
* skin `s` is at matrix index `s.joints_first + j` — the joint's row.
|
|
496
452
|
*
|
|
497
453
|
* The buffer reference is invalidated on grow AND flips role
|
|
498
454
|
* every frame as part of the ping-pong with
|
|
@@ -520,17 +476,16 @@ export class GPUAnimationManager {
|
|
|
520
476
|
}
|
|
521
477
|
|
|
522
478
|
/**
|
|
523
|
-
* Matrices the buffer has to address: the
|
|
524
|
-
*
|
|
525
|
-
* of buffer capacity, which is at least this big.
|
|
479
|
+
* Matrices the buffer has to address: one past the highest joint row any skin has been
|
|
480
|
+
* given. Independent of buffer capacity, which is at least this big.
|
|
526
481
|
*
|
|
527
|
-
* Not a count of live joints — a skin
|
|
528
|
-
*
|
|
482
|
+
* Not a count of live joints — rows a skin gives back stay addressable for the next skin
|
|
483
|
+
* that fits in them, so this never falls.
|
|
529
484
|
*
|
|
530
485
|
* @returns {number}
|
|
531
486
|
*/
|
|
532
487
|
get skin_matrix_count() {
|
|
533
|
-
return this.#
|
|
488
|
+
return this.#skin_matrix_count;
|
|
534
489
|
}
|
|
535
490
|
|
|
536
491
|
/**
|
|
@@ -594,7 +549,7 @@ export class GPUAnimationManager {
|
|
|
594
549
|
* Read back a skin's record from the database's CPU shadow.
|
|
595
550
|
*
|
|
596
551
|
* @param {number} skin_id
|
|
597
|
-
* @returns {{
|
|
552
|
+
* @returns {{joints_first: number, joint_count: number}}
|
|
598
553
|
*/
|
|
599
554
|
get_skin(skin_id) {
|
|
600
555
|
assert.isNonNegativeInteger(skin_id, 'skin_id');
|
|
@@ -602,30 +557,32 @@ export class GPUAnimationManager {
|
|
|
602
557
|
}
|
|
603
558
|
|
|
604
559
|
/**
|
|
605
|
-
* Base address of the skin's
|
|
560
|
+
* Base address of the skin's matrices in the shared
|
|
606
561
|
* `skin_matrices` scratch buffer — matrix `j` of the skin lives
|
|
607
|
-
* at `skin_matrices[get_skin_matrix_offset(skin_id) + j]`.
|
|
562
|
+
* at `skin_matrices[get_skin_matrix_offset(skin_id) + j]`. A joint's
|
|
563
|
+
* matrix sits at the joint's row, so this is the skin's first joint
|
|
564
|
+
* row, read from its record — one word of it, not the record.
|
|
608
565
|
*
|
|
609
|
-
*
|
|
610
|
-
*
|
|
611
|
-
*
|
|
612
|
-
* (cheaper than a per-thread skin lookup for that hot path).
|
|
566
|
+
* A run never moves once handed out, so the offset holds for as long
|
|
567
|
+
* as the skin is registered; the skinning context reads it only when
|
|
568
|
+
* its bindings change.
|
|
613
569
|
*
|
|
614
570
|
* @param {number} skin_id
|
|
615
571
|
* @returns {number}
|
|
616
572
|
*/
|
|
617
573
|
get_skin_matrix_offset(skin_id) {
|
|
618
574
|
assert.isNonNegativeInteger(skin_id, 'skin_id');
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
575
|
+
|
|
576
|
+
const joints_first = this.#database.get('animation_skins').get_word(skin_id, SKIN_JOINTS_FIRST_WORD);
|
|
577
|
+
|
|
578
|
+
assert.defined(joints_first, `unknown skin_id ${skin_id}`);
|
|
579
|
+
|
|
580
|
+
return joints_first;
|
|
622
581
|
}
|
|
623
582
|
|
|
624
583
|
/**
|
|
625
|
-
* Add an animation curve.
|
|
626
|
-
*
|
|
627
|
-
* points at the head block, and each block's `next` field chains
|
|
628
|
-
* forward.
|
|
584
|
+
* Add an animation curve. Its keyframes go into `animation_keyframes` as one run of rows, in
|
|
585
|
+
* order, and the curve's header names the run.
|
|
629
586
|
*
|
|
630
587
|
* The curve is a cubic Hermite spline — step, linear, and arbitrary
|
|
631
588
|
* cubic shapes are all expressible by choosing tangents on each keyframe.
|
|
@@ -639,25 +596,13 @@ export class GPUAnimationManager {
|
|
|
639
596
|
assert.greaterThanOrEqual(curve.length, 1, 'curve must have at least one keyframe');
|
|
640
597
|
|
|
641
598
|
const keys = curve.keys;
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
const head_block_id = add_linked_chain(
|
|
645
|
-
blocks_table,
|
|
646
|
-
keys,
|
|
647
|
-
KEYFRAMES_PER_BLOCK,
|
|
648
|
-
(start, count, next) => {
|
|
649
|
-
const keyframes = new Array(KEYFRAMES_PER_BLOCK);
|
|
650
|
-
for (let j = 0; j < KEYFRAMES_PER_BLOCK; j++) {
|
|
651
|
-
keyframes[j] = j < count ? keys[start + j] : ZERO_KEYFRAME;
|
|
652
|
-
}
|
|
653
|
-
return { keyframes, count, next };
|
|
654
|
-
}
|
|
655
|
-
);
|
|
599
|
+
|
|
600
|
+
const keyframes_first = this.#database.get('animation_keyframes').add_run_records(keys, KEYFRAME_WRITER);
|
|
656
601
|
|
|
657
602
|
const curves_table = this.#database.get('animation_curves');
|
|
658
603
|
return curves_table.add({
|
|
659
604
|
kind: 0,
|
|
660
|
-
|
|
605
|
+
keyframes_first,
|
|
661
606
|
keyframe_count: keys.length,
|
|
662
607
|
time_min: curve.start_time,
|
|
663
608
|
time_max: curve.end_time,
|
|
@@ -695,11 +640,12 @@ export class GPUAnimationManager {
|
|
|
695
640
|
|
|
696
641
|
assert.notEqual(mask, 0, 'track must have at least one channel');
|
|
697
642
|
|
|
643
|
+
// a lane with its mask bit clear names no curve
|
|
698
644
|
const curves = [
|
|
699
|
-
cx ??
|
|
700
|
-
cy ??
|
|
701
|
-
cz ??
|
|
702
|
-
cw ??
|
|
645
|
+
cx ?? GPU_DATABASE_NULL,
|
|
646
|
+
cy ?? GPU_DATABASE_NULL,
|
|
647
|
+
cz ?? GPU_DATABASE_NULL,
|
|
648
|
+
cw ?? GPU_DATABASE_NULL,
|
|
703
649
|
];
|
|
704
650
|
|
|
705
651
|
const table = this.#database.get('animation_tracks');
|
|
@@ -708,11 +654,9 @@ export class GPUAnimationManager {
|
|
|
708
654
|
|
|
709
655
|
/**
|
|
710
656
|
* Create a bound clip — a group of bound tracks that share a single
|
|
711
|
-
* `time`.
|
|
712
|
-
*
|
|
713
|
-
*
|
|
714
|
-
* (one thread per group node) can fetch the clip without walking the
|
|
715
|
-
* chain from the clip end.
|
|
657
|
+
* `time`. The bindings go into `animation_bindings` as one run of
|
|
658
|
+
* rows, each naming the clip, so the apply shader (one thread per
|
|
659
|
+
* binding) fetches the clip's time from the binding alone.
|
|
716
660
|
*
|
|
717
661
|
* Tracks may be authored on a clock that doesn't align with
|
|
718
662
|
* `[time_start, time_end]` — their curves are clamped to their own
|
|
@@ -741,90 +685,62 @@ export class GPUAnimationManager {
|
|
|
741
685
|
const time_end = clip.time_end ?? 0;
|
|
742
686
|
const bindings = clip.bindings;
|
|
743
687
|
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
// Reserve the clip slot up front so group nodes can back-reference
|
|
748
|
-
// it via `clip`. The head pointer is patched in once the chain is
|
|
749
|
-
// built (we don't know its first id until we've allocated every
|
|
750
|
-
// group node).
|
|
751
|
-
const clip_id = clips_table.add({
|
|
688
|
+
// Reserve the clip row first, so every binding can name it. The range is filled in once
|
|
689
|
+
// the run exists.
|
|
690
|
+
const clip_id = this.#database.get('animation_clips').add({
|
|
752
691
|
time,
|
|
753
692
|
time_start,
|
|
754
693
|
time_end,
|
|
755
|
-
|
|
694
|
+
bindings_first: GPU_DATABASE_NULL,
|
|
695
|
+
bindings_count: 0,
|
|
756
696
|
playback_rate: 1,
|
|
757
697
|
flags: 0,
|
|
758
698
|
playback_weight: 1,
|
|
759
699
|
});
|
|
760
700
|
|
|
761
|
-
const
|
|
762
|
-
groups_table,
|
|
763
|
-
bindings,
|
|
764
|
-
TRACKS_PER_GROUP_NODE,
|
|
765
|
-
(start, count, next) => {
|
|
766
|
-
const inline_bindings = new Array(TRACKS_PER_GROUP_NODE);
|
|
767
|
-
for (let j = 0; j < TRACKS_PER_GROUP_NODE; j++) {
|
|
768
|
-
if (j < count) {
|
|
769
|
-
const b = bindings[start + j];
|
|
770
|
-
|
|
771
|
-
assert.isNonNegativeInteger(b.track, `clip.bindings[${start + j}].track`);
|
|
772
|
-
assert.isNonNegativeInteger(b.instance, `clip.bindings[${start + j}].instance`);
|
|
773
|
-
assert.isNonNegativeInteger(b.property, `clip.bindings[${start + j}].property`);
|
|
774
|
-
|
|
775
|
-
inline_bindings[j] = b;
|
|
776
|
-
} else {
|
|
777
|
-
inline_bindings[j] = ZERO_BINDING;
|
|
778
|
-
}
|
|
779
|
-
}
|
|
780
|
-
return { bindings: inline_bindings, count, next, clip: clip_id };
|
|
781
|
-
}
|
|
782
|
-
);
|
|
701
|
+
const rows = new Array(bindings.length);
|
|
783
702
|
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
703
|
+
for (let i = 0; i < bindings.length; i++) {
|
|
704
|
+
const b = bindings[i];
|
|
705
|
+
|
|
706
|
+
assert.isNonNegativeInteger(b.track, `clip.bindings[${i}].track`);
|
|
707
|
+
assert.isNonNegativeInteger(b.instance, `clip.bindings[${i}].instance`);
|
|
708
|
+
assert.isNonNegativeInteger(b.property, `clip.bindings[${i}].property`);
|
|
709
|
+
|
|
710
|
+
rows[i] = { track: b.track, instance: b.instance, property: b.property, clip: clip_id };
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
const bindings_first = this.#database.get('animation_bindings').add_run_records(rows, BINDING_WRITER);
|
|
714
|
+
|
|
715
|
+
this.#write_clip(clip_id, { bindings_first, bindings_count: rows.length }, CLIP_BINDINGS_WRITER);
|
|
796
716
|
|
|
797
717
|
return clip_id;
|
|
798
718
|
}
|
|
799
719
|
|
|
800
720
|
/**
|
|
801
|
-
*
|
|
802
|
-
*
|
|
803
|
-
*
|
|
804
|
-
* round-trip through a full record; the upload-buffer dedupe
|
|
805
|
-
* collapses the resulting per-frame write into a single GPU touch
|
|
806
|
-
* when nothing else changed.
|
|
721
|
+
* Write the fields of a clip's record that `writer` owns, on the CPU shadow and on the GPU, and
|
|
722
|
+
* nothing else: the rest of the record — a playing clip's `time` above all, which the GPU tick
|
|
723
|
+
* advances where the shadow never sees it — stays as the GPU has it.
|
|
807
724
|
*
|
|
808
725
|
* @param {number} clip_id
|
|
809
|
-
* @param {string}
|
|
810
|
-
* @param {
|
|
726
|
+
* @param {Object<string, number>} value the fields the writer owns
|
|
727
|
+
* @param {GPURecordWriter} writer one of the clip field writers above
|
|
811
728
|
*/
|
|
812
|
-
#
|
|
729
|
+
#write_clip(clip_id, value, writer) {
|
|
813
730
|
assert.isNonNegativeInteger(clip_id, 'clip_id');
|
|
814
731
|
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
});
|
|
732
|
+
this.#database.get('animation_clips').set_fields(clip_id, value, writer);
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
/**
|
|
736
|
+
* A clip's flags as the CPU last wrote them. Only the host changes them, so the shadow's are the
|
|
737
|
+
* GPU's.
|
|
738
|
+
*
|
|
739
|
+
* @param {number} clip_id
|
|
740
|
+
* @returns {number}
|
|
741
|
+
*/
|
|
742
|
+
#clip_flags(clip_id) {
|
|
743
|
+
return this.#database.get('animation_clips').get_word(clip_id, CLIP_FLAGS_WORD);
|
|
828
744
|
}
|
|
829
745
|
|
|
830
746
|
/**
|
|
@@ -847,7 +763,7 @@ export class GPUAnimationManager {
|
|
|
847
763
|
*/
|
|
848
764
|
set_time(clip_id, time) {
|
|
849
765
|
assert.isNumber(time, 'time');
|
|
850
|
-
this.#
|
|
766
|
+
this.#write_clip(clip_id, { time }, CLIP_TIME_WRITER);
|
|
851
767
|
|
|
852
768
|
const shadow = this.#playback_by_clip.get(clip_id);
|
|
853
769
|
|
|
@@ -867,7 +783,7 @@ export class GPUAnimationManager {
|
|
|
867
783
|
*/
|
|
868
784
|
set_playback_rate(clip_id, rate) {
|
|
869
785
|
assert.isNumber(rate, 'rate');
|
|
870
|
-
this.#
|
|
786
|
+
this.#write_clip(clip_id, { playback_rate: rate }, CLIP_PLAYBACK_RATE_WRITER);
|
|
871
787
|
}
|
|
872
788
|
|
|
873
789
|
/**
|
|
@@ -887,7 +803,7 @@ export class GPUAnimationManager {
|
|
|
887
803
|
*/
|
|
888
804
|
set_playback_weight(clip_id, weight) {
|
|
889
805
|
assert.isNumber(weight, 'weight');
|
|
890
|
-
this.#
|
|
806
|
+
this.#write_clip(clip_id, { playback_weight: weight }, CLIP_PLAYBACK_WEIGHT_WRITER);
|
|
891
807
|
|
|
892
808
|
const shadow = this.#playback_by_clip.get(clip_id);
|
|
893
809
|
|
|
@@ -916,10 +832,7 @@ export class GPUAnimationManager {
|
|
|
916
832
|
set_flags(clip_id, flags) {
|
|
917
833
|
assert.isNonNegativeInteger(flags, 'flags');
|
|
918
834
|
|
|
919
|
-
|
|
920
|
-
const current = clips_table.get(clip_id);
|
|
921
|
-
|
|
922
|
-
this.#patch_clip_field(clip_id, 'flags', current.flags | flags);
|
|
835
|
+
this.#write_clip(clip_id, { flags: this.#clip_flags(clip_id) | flags }, CLIP_FLAGS_WRITER);
|
|
923
836
|
}
|
|
924
837
|
|
|
925
838
|
/**
|
|
@@ -933,10 +846,7 @@ export class GPUAnimationManager {
|
|
|
933
846
|
clear_flags(clip_id, flags) {
|
|
934
847
|
assert.isNonNegativeInteger(flags, 'flags');
|
|
935
848
|
|
|
936
|
-
|
|
937
|
-
const current = clips_table.get(clip_id);
|
|
938
|
-
|
|
939
|
-
this.#patch_clip_field(clip_id, 'flags', current.flags & ~flags);
|
|
849
|
+
this.#write_clip(clip_id, { flags: this.#clip_flags(clip_id) & ~flags }, CLIP_FLAGS_WRITER);
|
|
940
850
|
}
|
|
941
851
|
|
|
942
852
|
/**
|
|
@@ -954,10 +864,7 @@ export class GPUAnimationManager {
|
|
|
954
864
|
start(clip_id) {
|
|
955
865
|
assert.isNonNegativeInteger(clip_id, 'clip_id');
|
|
956
866
|
|
|
957
|
-
|
|
958
|
-
const current = clips_table.get(clip_id);
|
|
959
|
-
|
|
960
|
-
this.#patch_clip_field(clip_id, 'flags', current.flags | AnimationClipFlags.Playing);
|
|
867
|
+
this.#write_clip(clip_id, { flags: this.#clip_flags(clip_id) | AnimationClipFlags.Playing }, CLIP_FLAGS_WRITER);
|
|
961
868
|
}
|
|
962
869
|
|
|
963
870
|
/**
|
|
@@ -973,20 +880,18 @@ export class GPUAnimationManager {
|
|
|
973
880
|
stop(clip_id) {
|
|
974
881
|
assert.isNonNegativeInteger(clip_id, 'clip_id');
|
|
975
882
|
|
|
976
|
-
|
|
977
|
-
const current = clips_table.get(clip_id);
|
|
978
|
-
|
|
979
|
-
this.#patch_clip_field(clip_id, 'flags', current.flags & ~AnimationClipFlags.Playing);
|
|
883
|
+
this.#write_clip(clip_id, { flags: this.#clip_flags(clip_id) & ~AnimationClipFlags.Playing }, CLIP_FLAGS_WRITER);
|
|
980
884
|
}
|
|
981
885
|
|
|
982
886
|
/**
|
|
983
887
|
* Register a skin: an ordered list of joints, each pinning a
|
|
984
888
|
* Node3D row that drives the joint plus the inverse-bind matrix
|
|
985
889
|
* that takes vertex positions from mesh space into the joint's
|
|
986
|
-
* bind-pose local space. The
|
|
987
|
-
*
|
|
988
|
-
* scratch buffer
|
|
989
|
-
*
|
|
890
|
+
* bind-pose local space. The joints go into `animation_skin_joints`
|
|
891
|
+
* as one run of rows, and a joint's matrix in the
|
|
892
|
+
* {@link #skin_matrices_buffer} scratch buffer sits at its row — so the
|
|
893
|
+
* skin's matrices are the same run of the buffer, which the prep pass
|
|
894
|
+
* fills each frame with `node.global × inverse_bind` for every joint.
|
|
990
895
|
*
|
|
991
896
|
* The skin record carries no mesh-world factor. The rasterizer
|
|
992
897
|
* applies `mesh.transform_global` to the skinned clone vertex
|
|
@@ -996,13 +901,6 @@ export class GPUAnimationManager {
|
|
|
996
901
|
* double-cancel against that re-application and shrink the rig
|
|
997
902
|
* back to mesh-local coordinates rendered as world.
|
|
998
903
|
*
|
|
999
|
-
* Joints are split into linked-list blocks of up to
|
|
1000
|
-
* {@link JOINTS_PER_SKIN_BLOCK} each — same chain pattern used for
|
|
1001
|
-
* bound-track groups and keyframe blocks. Each block records the
|
|
1002
|
-
* absolute write offset for its slots, so the prep shader's
|
|
1003
|
-
* per-thread work is one block load + a bounded inner loop with no
|
|
1004
|
-
* indirection back through the skin record.
|
|
1005
|
-
*
|
|
1006
904
|
* @param {{
|
|
1007
905
|
* joints: Array<{ node: number, inverse_bind: Float32Array | number[] }>,
|
|
1008
906
|
* }} skin
|
|
@@ -1014,64 +912,21 @@ export class GPUAnimationManager {
|
|
|
1014
912
|
assert.greaterThanOrEqual(skin.joints.length, 1, 'skin must have at least one joint');
|
|
1015
913
|
|
|
1016
914
|
const joints = skin.joints;
|
|
1017
|
-
const joint_count = joints.length;
|
|
1018
915
|
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
916
|
+
for (let i = 0; i < joints.length; i++) {
|
|
917
|
+
// named now: a joint whose node comes later is register_skin's, which binds no mesh
|
|
918
|
+
// until it has come
|
|
919
|
+
assert.isNonNegativeInteger(joints[i].node, `skin.joints[${i}].node`);
|
|
920
|
+
assert.notEqual(joints[i].node, GPU_DATABASE_NULL, `skin.joints[${i}].node`);
|
|
921
|
+
assert.defined(joints[i].inverse_bind, `skin.joints[${i}].inverse_bind`);
|
|
922
|
+
}
|
|
1026
923
|
|
|
1027
|
-
const
|
|
1028
|
-
const blocks_table = this.#database.get('animation_skin_joint_blocks');
|
|
1029
|
-
|
|
1030
|
-
// Reserve the skin row up front. The head pointer is patched
|
|
1031
|
-
// in once the chain exists. NULL placeholder — 0 is a valid
|
|
1032
|
-
// block row id (the first allocation in an empty table).
|
|
1033
|
-
const skin_id = skins_table.add({
|
|
1034
|
-
joint_block_head: ANIMATION_SKIN_JOINT_BLOCK_NULL,
|
|
1035
|
-
joint_count,
|
|
1036
|
-
});
|
|
1037
|
-
this.#skin_matrix_offsets.set(skin_id, skin_matrix_offset);
|
|
1038
|
-
|
|
1039
|
-
const head_block_id = add_linked_chain(
|
|
1040
|
-
blocks_table,
|
|
1041
|
-
joints,
|
|
1042
|
-
JOINTS_PER_SKIN_BLOCK,
|
|
1043
|
-
(start, count, next) => {
|
|
1044
|
-
const inline_joints = new Array(JOINTS_PER_SKIN_BLOCK);
|
|
1045
|
-
for (let j = 0; j < JOINTS_PER_SKIN_BLOCK; j++) {
|
|
1046
|
-
if (j < count) {
|
|
1047
|
-
const joint = joints[start + j];
|
|
1048
|
-
|
|
1049
|
-
assert.isNonNegativeInteger(joint.node, `skin.joints[${start + j}].node`);
|
|
1050
|
-
assert.defined(joint.inverse_bind, `skin.joints[${start + j}].inverse_bind`);
|
|
1051
|
-
|
|
1052
|
-
inline_joints[j] = joint;
|
|
1053
|
-
} else {
|
|
1054
|
-
inline_joints[j] = ZERO_SKIN_JOINT;
|
|
1055
|
-
}
|
|
1056
|
-
}
|
|
1057
|
-
return {
|
|
1058
|
-
joints: inline_joints,
|
|
1059
|
-
count,
|
|
1060
|
-
next,
|
|
1061
|
-
skin_matrix_offset: skin_matrix_offset + start,
|
|
1062
|
-
};
|
|
1063
|
-
}
|
|
1064
|
-
);
|
|
924
|
+
const joints_first = this.#add_joints(joints);
|
|
1065
925
|
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
skins_table.set(skin_id, {
|
|
1070
|
-
joint_block_head: head_block_id,
|
|
1071
|
-
joint_count,
|
|
926
|
+
return this.#database.get('animation_skins').add({
|
|
927
|
+
joints_first,
|
|
928
|
+
joint_count: joints.length,
|
|
1072
929
|
});
|
|
1073
|
-
|
|
1074
|
-
return skin_id;
|
|
1075
930
|
}
|
|
1076
931
|
|
|
1077
932
|
/**
|
|
@@ -1079,12 +934,12 @@ export class GPUAnimationManager {
|
|
|
1079
934
|
* **entities**, allocates a GPU skin record, and binds every mesh entity through the
|
|
1080
935
|
* skinning context.
|
|
1081
936
|
*
|
|
1082
|
-
* **Eventual consistency.** The `skin_id` is allocated and returned synchronously
|
|
1083
|
-
*
|
|
1084
|
-
*
|
|
1085
|
-
*
|
|
1086
|
-
*
|
|
1087
|
-
*
|
|
937
|
+
* **Eventual consistency.** The `skin_id` is allocated and returned synchronously, and the
|
|
938
|
+
* skin's joints take their rows at once, so {@link get_skin_matrix_offset} and
|
|
939
|
+
* {@link unregister_skin} work from here on. If any joint's entity has not taken its
|
|
940
|
+
* transforms row yet (see `GPUSceneRows.acquire`), the joints name no node, and the meshes
|
|
941
|
+
* are not bound, until the next {@link update} that sees every joint there. Until then the
|
|
942
|
+
* skin's matrices are not written, and its meshes draw undeformed, as they were modelled.
|
|
1088
943
|
*
|
|
1089
944
|
* The frame a skin's meshes are deformed in is the prefab's business, fixed once at compile
|
|
1090
945
|
* (`prefab_normalize_skin_frames`); nothing about it is decided here.
|
|
@@ -1095,128 +950,129 @@ export class GPUAnimationManager {
|
|
|
1095
950
|
register_skin(skin) {
|
|
1096
951
|
assert.defined(skin, 'skin');
|
|
1097
952
|
assert.equal(skin.isSkin, true, 'skin.isSkin !== true');
|
|
953
|
+
assert.greaterThanOrEqual(skin.joints.length, 1, 'skin must have at least one joint');
|
|
1098
954
|
assert.greaterThanOrEqual(skin.meshes.length, 1, 'skin.meshes must contain at least one mesh');
|
|
1099
955
|
|
|
956
|
+
for (let i = 0; i < skin.meshes.length; i++) {
|
|
957
|
+
assert.isNonNegativeInteger(skin.meshes[i], `skin.meshes[${i}]`);
|
|
958
|
+
}
|
|
959
|
+
|
|
960
|
+
const complete = this.#joint_rows_ready(skin);
|
|
961
|
+
|
|
962
|
+
// The joints take their rows now, named nodes and all if every joint is there already.
|
|
963
|
+
const joints_first = this.#add_joints(this.#skin_joints(skin, complete));
|
|
1100
964
|
const joint_count = skin.joints.length;
|
|
1101
|
-
const inverse_bind_matrices = skin.inverse_bind_matrices;
|
|
1102
965
|
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
// this point on; the joint chain gets patched in once
|
|
1112
|
-
// every joint has its row (possibly synchronously below,
|
|
1113
|
-
// possibly deferred via the pending queue).
|
|
1114
|
-
const skins_table = this.#database.get('animation_skins');
|
|
1115
|
-
const skin_id = skins_table.add({
|
|
1116
|
-
// NULL placeholder — 0 is a valid block row id
|
|
1117
|
-
joint_block_head: ANIMATION_SKIN_JOINT_BLOCK_NULL,
|
|
1118
|
-
joint_count,
|
|
1119
|
-
});
|
|
1120
|
-
this.#skin_matrix_offsets.set(skin_id, skin_matrix_offset);
|
|
966
|
+
const skin_id = this.#database.get('animation_skins').add({ joints_first, joint_count });
|
|
967
|
+
|
|
968
|
+
if (complete) {
|
|
969
|
+
this.#bind_meshes(skin, skin_id);
|
|
970
|
+
} else {
|
|
971
|
+
// the next update() that sees every joint's row names the nodes and binds the meshes
|
|
972
|
+
this.#pending_skins.push({ skin_id, skin, joints_first, joint_count });
|
|
973
|
+
}
|
|
1121
974
|
|
|
1122
|
-
|
|
1123
|
-
|
|
975
|
+
return skin_id;
|
|
976
|
+
}
|
|
977
|
+
|
|
978
|
+
/**
|
|
979
|
+
* Bind every mesh entity of `skin` into the skinning context. The clone a binding deforms is
|
|
980
|
+
* made when the entity's mesh row is written — before or after this — and the binding
|
|
981
|
+
* follows.
|
|
982
|
+
*
|
|
983
|
+
* @param {Skin} skin
|
|
984
|
+
* @param {number} skin_id
|
|
985
|
+
*/
|
|
986
|
+
#bind_meshes(skin, skin_id) {
|
|
1124
987
|
const skinning = this.#scene_context.skinning;
|
|
1125
988
|
const meshes = skin.meshes;
|
|
1126
|
-
for (let i = 0; i < meshes.length; i++) {
|
|
1127
|
-
assert.isNonNegativeInteger(meshes[i], `skin.meshes[${i}]`);
|
|
1128
989
|
|
|
990
|
+
for (let i = 0; i < meshes.length; i++) {
|
|
1129
991
|
skinning.bind(meshes[i], skin_id);
|
|
1130
992
|
}
|
|
1131
|
-
|
|
1132
|
-
// Try to complete now. If every joint has its row, the chain gets built and patched in.
|
|
1133
|
-
// Otherwise the skin lands on #pending_skins and the next update() drain retries.
|
|
1134
|
-
const pending = {
|
|
1135
|
-
skin_id,
|
|
1136
|
-
skin,
|
|
1137
|
-
skin_matrix_offset,
|
|
1138
|
-
inverse_bind_matrices,
|
|
1139
|
-
};
|
|
1140
|
-
if (!this.#try_complete_skin(pending)) {
|
|
1141
|
-
this.#pending_skins.push(pending);
|
|
1142
|
-
}
|
|
1143
|
-
|
|
1144
|
-
return skin_id;
|
|
1145
993
|
}
|
|
1146
994
|
|
|
1147
995
|
/**
|
|
1148
|
-
*
|
|
1149
|
-
*
|
|
1150
|
-
* every joint entity holds its transforms row (and the chain was
|
|
1151
|
-
* built); `false` when at least one joint has not taken it yet.
|
|
996
|
+
* Whether every joint entity of `skin` holds its transforms row. All or nothing: a skin
|
|
997
|
+
* whose joints were only partly named would deform with some of its matrices missing.
|
|
1152
998
|
*
|
|
1153
|
-
* @param {
|
|
1154
|
-
* skin_id: number,
|
|
1155
|
-
* skin: Skin,
|
|
1156
|
-
* skin_matrix_offset: number,
|
|
1157
|
-
* inverse_bind_matrices: Float32Array,
|
|
1158
|
-
* }} pending
|
|
999
|
+
* @param {Skin} skin
|
|
1159
1000
|
* @returns {boolean}
|
|
1160
1001
|
*/
|
|
1161
|
-
#
|
|
1002
|
+
#joint_rows_ready(skin) {
|
|
1162
1003
|
const rows = this.#scene_context.rows;
|
|
1163
|
-
const
|
|
1164
|
-
const joint_count = joint_nodes.length;
|
|
1165
|
-
const inverse_bind_matrices = pending.inverse_bind_matrices;
|
|
1166
|
-
const skin_matrix_offset = pending.skin_matrix_offset;
|
|
1167
|
-
const skin_id = pending.skin_id;
|
|
1004
|
+
const joints = skin.joints;
|
|
1168
1005
|
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
// walks every block).
|
|
1172
|
-
const joints = new Array(joint_count);
|
|
1173
|
-
for (let i = 0; i < joint_count; i++) {
|
|
1174
|
-
const joint = joint_nodes[i];
|
|
1006
|
+
for (let i = 0; i < joints.length; i++) {
|
|
1007
|
+
assert.isNonNegativeInteger(joints[i], `skin.joints[${i}]`);
|
|
1175
1008
|
|
|
1176
|
-
|
|
1009
|
+
if (!rows.has(joints[i])) {
|
|
1010
|
+
return false;
|
|
1011
|
+
}
|
|
1012
|
+
}
|
|
1013
|
+
|
|
1014
|
+
return true;
|
|
1015
|
+
}
|
|
1177
1016
|
|
|
1178
|
-
|
|
1017
|
+
/**
|
|
1018
|
+
* The joint records of `skin`: each joint's inverse bind, and its node — the joint entity's
|
|
1019
|
+
* transforms row when `with_nodes`, {@link GPU_DATABASE_NULL} otherwise.
|
|
1020
|
+
*
|
|
1021
|
+
* @param {Skin} skin
|
|
1022
|
+
* @param {boolean} with_nodes
|
|
1023
|
+
* @returns {Array<{node: number, inverse_bind: Float32Array}>}
|
|
1024
|
+
*/
|
|
1025
|
+
#skin_joints(skin, with_nodes) {
|
|
1026
|
+
const entities = skin.joints;
|
|
1027
|
+
const inverse_bind_matrices = skin.inverse_bind_matrices;
|
|
1028
|
+
const joints = new Array(entities.length);
|
|
1179
1029
|
|
|
1030
|
+
for (let i = 0; i < entities.length; i++) {
|
|
1180
1031
|
joints[i] = {
|
|
1181
|
-
node: row_of_entity(
|
|
1182
|
-
// Per-joint slice of the flat matrix array.
|
|
1183
|
-
// marshaller
|
|
1184
|
-
// block record; sub-array views are fine — they
|
|
1185
|
-
// share the underlying buffer but write_struct_value
|
|
1186
|
-
// reads by length, not by offset.
|
|
1032
|
+
node: with_nodes ? row_of_entity(entities[i]) : GPU_DATABASE_NULL,
|
|
1033
|
+
// Per-joint slice of the flat matrix array. Sub-array views are fine — they share
|
|
1034
|
+
// the underlying buffer, but the marshaller reads by length, not by offset.
|
|
1187
1035
|
inverse_bind: inverse_bind_matrices.subarray(i * 16, (i + 1) * 16),
|
|
1188
1036
|
};
|
|
1189
1037
|
}
|
|
1190
1038
|
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
blocks_table,
|
|
1194
|
-
joints,
|
|
1195
|
-
JOINTS_PER_SKIN_BLOCK,
|
|
1196
|
-
(start, count, next) => {
|
|
1197
|
-
const inline_joints = new Array(JOINTS_PER_SKIN_BLOCK);
|
|
1198
|
-
for (let j = 0; j < JOINTS_PER_SKIN_BLOCK; j++) {
|
|
1199
|
-
inline_joints[j] = j < count ? joints[start + j] : ZERO_SKIN_JOINT;
|
|
1200
|
-
}
|
|
1201
|
-
return {
|
|
1202
|
-
joints: inline_joints,
|
|
1203
|
-
count,
|
|
1204
|
-
next,
|
|
1205
|
-
skin_matrix_offset: skin_matrix_offset + start,
|
|
1206
|
-
};
|
|
1207
|
-
}
|
|
1208
|
-
);
|
|
1039
|
+
return joints;
|
|
1040
|
+
}
|
|
1209
1041
|
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1042
|
+
/**
|
|
1043
|
+
* Name the nodes of a pending skin's joints, once every joint entity holds its transforms row,
|
|
1044
|
+
* and bind its meshes. Returns `true` when it did; `false` when at least one joint has not
|
|
1045
|
+
* taken its row yet.
|
|
1046
|
+
*
|
|
1047
|
+
* Only each joint's `node` is written, and only that word is uploaded: the inverse bind went
|
|
1048
|
+
* in at registration.
|
|
1049
|
+
*
|
|
1050
|
+
* @param {{skin_id: number, skin: Skin, joints_first: number, joint_count: number}} pending
|
|
1051
|
+
* @returns {boolean}
|
|
1052
|
+
*/
|
|
1053
|
+
#try_complete_skin(pending) {
|
|
1054
|
+
const skin = pending.skin;
|
|
1055
|
+
|
|
1056
|
+
if (!this.#joint_rows_ready(skin)) {
|
|
1057
|
+
return false;
|
|
1058
|
+
}
|
|
1059
|
+
|
|
1060
|
+
const joints_table = this.#database.get('animation_skin_joints');
|
|
1061
|
+
const entities = skin.joints;
|
|
1062
|
+
|
|
1063
|
+
// the run was cut to the skin as it registered; a joint added since has no row in it
|
|
1064
|
+
assert.equal(entities.length, pending.joint_count, 'skin.joints changed after register_skin');
|
|
1065
|
+
|
|
1066
|
+
for (let i = 0; i < entities.length; i++) {
|
|
1067
|
+
joints_table.set_fields(pending.joints_first + i, { node: row_of_entity(entities[i]) }, SKIN_JOINT_NODE_WRITER);
|
|
1068
|
+
}
|
|
1069
|
+
|
|
1070
|
+
this.#bind_meshes(skin, pending.skin_id);
|
|
1071
|
+
|
|
1072
|
+
// The joints' matrices are written from the next prep on, and "previous" over their rows
|
|
1073
|
+
// holds whatever was there before — zeros, or the last pose of a skin that had them — so
|
|
1074
|
+
// it is seeded, as it is for a run just handed out.
|
|
1075
|
+
this.#skin_matrix_seed_runs.push([pending.joints_first, pending.joint_count]);
|
|
1220
1076
|
|
|
1221
1077
|
return true;
|
|
1222
1078
|
}
|
|
@@ -1228,14 +1084,14 @@ export class GPUAnimationManager {
|
|
|
1228
1084
|
* **Eventual consistency.** The `clip_id` is allocated and returned synchronously — callers
|
|
1229
1085
|
* can immediately call {@link start} / {@link stop} / {@link set_time} / {@link set_playback_rate}
|
|
1230
1086
|
* / {@link set_flags} / {@link clear_flags} / {@link set_playback_weight} /
|
|
1231
|
-
* {@link unregister_clip}. If any target has not taken its row yet, the bindings
|
|
1232
|
-
*
|
|
1233
|
-
*
|
|
1234
|
-
*
|
|
1235
|
-
*
|
|
1236
|
-
*
|
|
1237
|
-
* **Binding is what hands a target to the GPU.** When the
|
|
1238
|
-
*
|
|
1087
|
+
* {@link unregister_clip}. If any target has not taken its row yet, the bindings that drive
|
|
1088
|
+
* the apply pass are queued and added on the next {@link update} that sees every target there.
|
|
1089
|
+
* The clip's table row holds an empty range until then — apply produces no contributions, so
|
|
1090
|
+
* the clip is observationally inert (still subject to time advancement via the tick shader if
|
|
1091
|
+
* `Playing` is set).
|
|
1092
|
+
*
|
|
1093
|
+
* **Binding is what hands a target to the GPU.** When the bindings are added, every entity
|
|
1094
|
+
* they drive has its `GPUStateAuthority` TransformAttachment bit granted, so the CPU stops
|
|
1239
1095
|
* writing its local TRS; the last clip to leave revokes it. The entity has to have declared
|
|
1240
1096
|
* the component — a prefab does, on every node a clip reaches — because a grant that could
|
|
1241
1097
|
* silently do nothing would be a claim nobody could see.
|
|
@@ -1277,18 +1133,18 @@ export class GPUAnimationManager {
|
|
|
1277
1133
|
};
|
|
1278
1134
|
}
|
|
1279
1135
|
|
|
1280
|
-
// Reserve the clip row immediately with
|
|
1281
|
-
//
|
|
1282
|
-
//
|
|
1283
|
-
//
|
|
1284
|
-
//
|
|
1285
|
-
// shader does `effective_time = clip.time + clip.time_start`).
|
|
1136
|
+
// Reserve the clip row immediately with an empty range. State
|
|
1137
|
+
// mutators and the public id are usable from this point on; the
|
|
1138
|
+
// bindings get added once every target has its row. `time`
|
|
1139
|
+
// defaults to 0 (the playback offset relative to `time_start`;
|
|
1140
|
+
// the apply shader does `effective_time = clip.time + clip.time_start`).
|
|
1286
1141
|
const clips_table = this.#database.get('animation_clips');
|
|
1287
1142
|
const clip_id = clips_table.add({
|
|
1288
1143
|
time: 0,
|
|
1289
1144
|
time_start: clip.start_time,
|
|
1290
1145
|
time_end: clip.end_time,
|
|
1291
|
-
|
|
1146
|
+
bindings_first: GPU_DATABASE_NULL,
|
|
1147
|
+
bindings_count: 0,
|
|
1292
1148
|
playback_rate: 1,
|
|
1293
1149
|
flags: 0,
|
|
1294
1150
|
playback_weight: 1,
|
|
@@ -1305,10 +1161,10 @@ export class GPUAnimationManager {
|
|
|
1305
1161
|
}
|
|
1306
1162
|
|
|
1307
1163
|
/**
|
|
1308
|
-
* Attempt to
|
|
1309
|
-
*
|
|
1310
|
-
*
|
|
1311
|
-
*
|
|
1164
|
+
* Attempt to add the bindings of a pending clip and name them in
|
|
1165
|
+
* the clip's range. Returns `true` when every channel target holds
|
|
1166
|
+
* its transforms row (and the bindings were added); `false` when at
|
|
1167
|
+
* least one has not taken it yet.
|
|
1312
1168
|
*
|
|
1313
1169
|
* Completing is also when the targets are handed to the GPU — see {@link register_clip}.
|
|
1314
1170
|
*
|
|
@@ -1336,28 +1192,15 @@ export class GPUAnimationManager {
|
|
|
1336
1192
|
track: ch.track,
|
|
1337
1193
|
instance: row_of_entity(target),
|
|
1338
1194
|
property: ch.property,
|
|
1195
|
+
clip: clip_id,
|
|
1339
1196
|
};
|
|
1340
1197
|
}
|
|
1341
1198
|
|
|
1342
|
-
const
|
|
1343
|
-
const head_group_id = add_linked_chain(
|
|
1344
|
-
groups_table,
|
|
1345
|
-
bindings,
|
|
1346
|
-
TRACKS_PER_GROUP_NODE,
|
|
1347
|
-
(start, count, next) => {
|
|
1348
|
-
const inline_bindings = new Array(TRACKS_PER_GROUP_NODE);
|
|
1349
|
-
for (let j = 0; j < TRACKS_PER_GROUP_NODE; j++) {
|
|
1350
|
-
inline_bindings[j] = j < count ? bindings[start + j] : ZERO_BINDING;
|
|
1351
|
-
}
|
|
1352
|
-
return { bindings: inline_bindings, count, next, clip: clip_id };
|
|
1353
|
-
}
|
|
1354
|
-
);
|
|
1199
|
+
const bindings_first = this.#database.get('animation_bindings').add_run_records(bindings, BINDING_WRITER);
|
|
1355
1200
|
|
|
1356
|
-
//
|
|
1357
|
-
//
|
|
1358
|
-
|
|
1359
|
-
// register_clip and the drain.
|
|
1360
|
-
this.#patch_clip_field(clip_id, 'bound_track_group_head', head_group_id);
|
|
1201
|
+
// Name the run in the already-allocated clip row — the range's words alone, so neither
|
|
1202
|
+
// the host's changes since register_clip nor the time the GPU has advanced are touched.
|
|
1203
|
+
this.#write_clip(clip_id, { bindings_first, bindings_count: bindings.length }, CLIP_BINDINGS_WRITER);
|
|
1361
1204
|
|
|
1362
1205
|
this.#take_targets(clip_id, channels);
|
|
1363
1206
|
|
|
@@ -1528,10 +1371,9 @@ export class GPUAnimationManager {
|
|
|
1528
1371
|
}
|
|
1529
1372
|
|
|
1530
1373
|
/**
|
|
1531
|
-
* Drop a clip from the manager
|
|
1532
|
-
*
|
|
1533
|
-
*
|
|
1534
|
-
* touches besides the original row removal).
|
|
1374
|
+
* Drop a clip from the manager: its row, and with it the run of its bindings — the clip's range
|
|
1375
|
+
* owns the run, so the table removes it. Tolerates the clip still being pending (drains it from
|
|
1376
|
+
* the queue without GPU touches besides the original row removal).
|
|
1535
1377
|
*
|
|
1536
1378
|
* Curves and tracks the clip referenced stay alive — they're
|
|
1537
1379
|
* shared via {@link #intern_curve} / {@link #intern_track} and
|
|
@@ -1539,7 +1381,7 @@ export class GPUAnimationManager {
|
|
|
1539
1381
|
* reference-counting the manager doesn't carry.
|
|
1540
1382
|
*
|
|
1541
1383
|
* Safe to call repeatedly on the same id: the second call finds the row unoccupied and
|
|
1542
|
-
* returns without
|
|
1384
|
+
* returns without touching anything.
|
|
1543
1385
|
*
|
|
1544
1386
|
* @param {number} clip_id
|
|
1545
1387
|
*/
|
|
@@ -1557,27 +1399,13 @@ export class GPUAnimationManager {
|
|
|
1557
1399
|
}
|
|
1558
1400
|
|
|
1559
1401
|
const clips_table = this.#database.get('animation_clips');
|
|
1560
|
-
const groups_table = this.#database.get('animation_bound_track_groups');
|
|
1561
1402
|
|
|
1562
|
-
// Occupancy
|
|
1563
|
-
//
|
|
1564
|
-
// chase into itself forever.
|
|
1403
|
+
// Occupancy is what says the row is still this clip's; a second call finds it free and has
|
|
1404
|
+
// nothing to hand back twice.
|
|
1565
1405
|
if (!clips_table.occupancy.get(clip_id)) return;
|
|
1566
1406
|
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
// Walk the bindings chain and remove every node. The chain
|
|
1570
|
-
// may be empty (placeholder head NULL) if the clip is still
|
|
1571
|
-
// pending or has been registered then drained but never
|
|
1572
|
-
// completed; both cases skip the loop.
|
|
1573
|
-
let block_id = clip_record.bound_track_group_head;
|
|
1574
|
-
while (block_id !== ANIMATION_BOUND_TRACK_GROUP_NULL) {
|
|
1575
|
-
const block = groups_table.get(block_id);
|
|
1576
|
-
const next_id = block !== undefined ? block.next : ANIMATION_BOUND_TRACK_GROUP_NULL;
|
|
1577
|
-
groups_table.remove(block_id);
|
|
1578
|
-
block_id = next_id;
|
|
1579
|
-
}
|
|
1580
|
-
|
|
1407
|
+
// The bindings go with the clip. A clip still pending holds an empty range and takes
|
|
1408
|
+
// nothing.
|
|
1581
1409
|
clips_table.remove(clip_id);
|
|
1582
1410
|
|
|
1583
1411
|
this.#release_targets(clip_id);
|
|
@@ -1586,18 +1414,18 @@ export class GPUAnimationManager {
|
|
|
1586
1414
|
}
|
|
1587
1415
|
|
|
1588
1416
|
/**
|
|
1589
|
-
* Drop a skin from the manager
|
|
1590
|
-
*
|
|
1591
|
-
* skinning
|
|
1592
|
-
*
|
|
1593
|
-
* offset on its next upload).
|
|
1417
|
+
* Drop a skin from the manager: its row, and with it the run of its joints — the skin's range
|
|
1418
|
+
* owns the run, so the table removes it — and every skinning binding pointing at this skin (so
|
|
1419
|
+
* the skinning context doesn't try to read the now-freed skin's matrix offset on its next
|
|
1420
|
+
* upload).
|
|
1594
1421
|
*
|
|
1595
|
-
* The
|
|
1596
|
-
*
|
|
1597
|
-
*
|
|
1422
|
+
* The joints' rows, and the matrices at them, are free for the next skin that fits. A
|
|
1423
|
+
* respawn of the same rig fits the rows it left, and first fit takes them unless an earlier
|
|
1424
|
+
* hole fits too — so a spawn/despawn loop over a fixed cast costs what the cast costs, not
|
|
1425
|
+
* what the loop has run.
|
|
1598
1426
|
*
|
|
1599
1427
|
* Tolerates the skin still being pending. Safe to call repeatedly on the same id: the
|
|
1600
|
-
* second call finds the row unoccupied and
|
|
1428
|
+
* second call finds the row unoccupied and removes nothing.
|
|
1601
1429
|
*
|
|
1602
1430
|
* @param {number} skin_id
|
|
1603
1431
|
*/
|
|
@@ -1617,47 +1445,39 @@ export class GPUAnimationManager {
|
|
|
1617
1445
|
this.#scene_context.skinning.unbind_all_by_skin(skin_id);
|
|
1618
1446
|
|
|
1619
1447
|
const skins_table = this.#database.get('animation_skins');
|
|
1620
|
-
const blocks_table = this.#database.get('animation_skin_joint_blocks');
|
|
1621
1448
|
|
|
1622
|
-
// Occupancy
|
|
1623
|
-
//
|
|
1624
|
-
// find a record whose `joint_block_head` is 0 — a valid block id, not the NULL sentinel —
|
|
1625
|
-
// and the walk below would follow block 0 to block 0 for as long as the process lives.
|
|
1449
|
+
// Occupancy is what says the row is still this skin's; a second call finds it free and
|
|
1450
|
+
// removes nothing.
|
|
1626
1451
|
if (!skins_table.occupancy.get(skin_id)) {
|
|
1627
|
-
this.#skin_matrix_offsets.delete(skin_id);
|
|
1628
1452
|
return;
|
|
1629
1453
|
}
|
|
1630
1454
|
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
// sentinel (also the placeholder for a not-yet-patched head).
|
|
1635
|
-
// Note: 0 is a VALID block row id — the first single-block
|
|
1636
|
-
// skin registered into an empty table gets head 0, and
|
|
1637
|
-
// treating it as a placeholder would leak its block, leaving
|
|
1638
|
-
// the prep shader processing it against a recycled
|
|
1639
|
-
// transforms-table row every frame.
|
|
1640
|
-
let block_id = skin_record.joint_block_head;
|
|
1641
|
-
while (block_id !== ANIMATION_SKIN_JOINT_BLOCK_NULL) {
|
|
1642
|
-
const block = blocks_table.get(block_id);
|
|
1643
|
-
const next_id = block !== undefined ? block.next : ANIMATION_SKIN_JOINT_BLOCK_NULL;
|
|
1644
|
-
blocks_table.remove(block_id);
|
|
1645
|
-
block_id = next_id;
|
|
1646
|
-
}
|
|
1455
|
+
// Its rows go back owed no seed. Left queued, a run outlives its skin until the next prep,
|
|
1456
|
+
// and while nothing draws that is every spawn since drawing stopped.
|
|
1457
|
+
this.#drop_seed_runs(skins_table.get_word(skin_id, SKIN_JOINTS_FIRST_WORD));
|
|
1647
1458
|
|
|
1459
|
+
// The joints go with the skin — a pending skin's too, nodes or not.
|
|
1648
1460
|
skins_table.remove(skin_id);
|
|
1461
|
+
}
|
|
1649
1462
|
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1463
|
+
/**
|
|
1464
|
+
* Drop every queued seed run starting at `first_row`: the run of a skin being given back,
|
|
1465
|
+
* queued when it was handed out, and again if its joints have been named since.
|
|
1466
|
+
*
|
|
1467
|
+
* No other skin's run can start there, since a skin's rows are its own until it is given back.
|
|
1468
|
+
*
|
|
1469
|
+
* @param {number} first_row
|
|
1470
|
+
*/
|
|
1471
|
+
#drop_seed_runs(first_row) {
|
|
1472
|
+
const runs = this.#skin_matrix_seed_runs;
|
|
1473
|
+
|
|
1474
|
+
// the prep sorts what it finds, so a dropped run's place goes to the last one
|
|
1475
|
+
for (let i = runs.length - 1; i >= 0; i--) {
|
|
1476
|
+
if (runs[i][0] === first_row) {
|
|
1477
|
+
runs[i] = runs[runs.length - 1];
|
|
1478
|
+
runs.pop();
|
|
1479
|
+
}
|
|
1480
|
+
}
|
|
1661
1481
|
}
|
|
1662
1482
|
|
|
1663
1483
|
/**
|
|
@@ -1736,60 +1556,56 @@ export class GPUAnimationManager {
|
|
|
1736
1556
|
}
|
|
1737
1557
|
|
|
1738
1558
|
/**
|
|
1739
|
-
*
|
|
1559
|
+
* Put a skin's joints into `animation_skin_joints` as one run, and make sure the matrix
|
|
1560
|
+
* buffers reach its end — a joint's matrix sits at the joint's row.
|
|
1740
1561
|
*
|
|
1741
|
-
*
|
|
1742
|
-
*
|
|
1743
|
-
* {@link #free_skin_matrix_ranges} for why the match is exact and never split.
|
|
1744
|
-
*
|
|
1745
|
-
* @param {number} joint_count length of the range, in matrices
|
|
1746
|
-
* @returns {number} base matrix index of the reserved range
|
|
1562
|
+
* @param {Array<{node: number, inverse_bind: Float32Array | number[]}>} joints
|
|
1563
|
+
* @returns {number} the run's first row
|
|
1747
1564
|
*/
|
|
1748
|
-
#
|
|
1749
|
-
const
|
|
1565
|
+
#add_joints(joints) {
|
|
1566
|
+
const joints_first = this.#database.get('animation_skin_joints').add_run_records(joints, SKIN_JOINT_WRITER);
|
|
1750
1567
|
|
|
1751
|
-
if (
|
|
1752
|
-
//
|
|
1753
|
-
|
|
1754
|
-
return reusable.pop();
|
|
1568
|
+
if (joints_first === GPU_DATABASE_NULL) {
|
|
1569
|
+
// no joints: the empty range, and no rows for the buffers to reach
|
|
1570
|
+
return joints_first;
|
|
1755
1571
|
}
|
|
1756
1572
|
|
|
1757
|
-
const
|
|
1758
|
-
|
|
1759
|
-
this.#next_skin_matrix_offset += joint_count;
|
|
1760
|
-
this.#ensure_skin_matrices_capacity(this.#next_skin_matrix_offset);
|
|
1761
|
-
|
|
1762
|
-
return skin_matrix_offset;
|
|
1763
|
-
}
|
|
1573
|
+
const end = joints_first + joints.length;
|
|
1764
1574
|
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
* The bytes are left as they are: the prep pass rewrites every matrix of a live skin each
|
|
1769
|
-
* frame, so what a dead skin left behind is only ever read by a pass that no longer has a
|
|
1770
|
-
* block pointing at it.
|
|
1771
|
-
*
|
|
1772
|
-
* @param {number} skin_matrix_offset base matrix index of the range
|
|
1773
|
-
* @param {number} joint_count length of the range, in matrices
|
|
1774
|
-
*/
|
|
1775
|
-
#free_skin_matrix_range(skin_matrix_offset, joint_count) {
|
|
1776
|
-
let bucket = this.#free_skin_matrix_ranges.get(joint_count);
|
|
1777
|
-
|
|
1778
|
-
if (bucket === undefined) {
|
|
1779
|
-
bucket = [];
|
|
1780
|
-
|
|
1781
|
-
this.#free_skin_matrix_ranges.set(joint_count, bucket);
|
|
1575
|
+
if (end > this.#skin_matrix_count) {
|
|
1576
|
+
this.#skin_matrix_count = end;
|
|
1577
|
+
this.#ensure_skin_matrices_capacity(end);
|
|
1782
1578
|
}
|
|
1783
1579
|
|
|
1784
|
-
|
|
1580
|
+
// A run that is being handed out has no meaningful history in the matrix buffers, whether
|
|
1581
|
+
// its rows are fresh or some despawned skin's, so the next prep dispatch has to seed
|
|
1582
|
+
// "previous" from "current" for it.
|
|
1583
|
+
//
|
|
1584
|
+
// Whether or not the buffers grew: rows given back by another skin never grow them, and
|
|
1585
|
+
// neither do fresh rows below the capacity, so "previous" over the run holds all-zero
|
|
1586
|
+
// matrices or the last pose of the skin that had those rows before. The skinning pass
|
|
1587
|
+
// reads `prev_skin_matrices[skin_base + j]` unconditionally, so unseeded, the new
|
|
1588
|
+
// character's first frame would take its motion vectors from someone else's pose — a
|
|
1589
|
+
// screen-crossing smear through TAA and motion blur — on exactly the spawn/despawn loop
|
|
1590
|
+
// that reuses rows.
|
|
1591
|
+
this.#skin_matrix_seed_runs.push([joints_first, joints.length]);
|
|
1592
|
+
|
|
1593
|
+
return joints_first;
|
|
1785
1594
|
}
|
|
1786
1595
|
|
|
1787
1596
|
/**
|
|
1788
|
-
* Grow the skinning-matrix
|
|
1789
|
-
*
|
|
1790
|
-
*
|
|
1791
|
-
*
|
|
1792
|
-
*
|
|
1597
|
+
* Grow the skinning-matrix buffers if `required_count` exceeds
|
|
1598
|
+
* current capacity. Doubles on grow until the requirement fits.
|
|
1599
|
+
*
|
|
1600
|
+
* Nothing is copied across. "Current" would be rewritten by the
|
|
1601
|
+
* next prep anyway, but "previous" held every skin's pose last
|
|
1602
|
+
* frame, which its motion is measured from: the grow loses that,
|
|
1603
|
+
* and the next prep seeds all of "previous" from "current" instead
|
|
1604
|
+
* ({@link #skin_matrix_seed_all}), so every skinned character has
|
|
1605
|
+
* zero motion vectors for that one frame. Capacity doubles, so
|
|
1606
|
+
* that is a handful of frames over a session.
|
|
1607
|
+
*
|
|
1608
|
+
* The grow also invalidates the {@link #skin_matrices_buffer}
|
|
1793
1609
|
* reference, which is why callers re-fetch through the getter.
|
|
1794
1610
|
*
|
|
1795
1611
|
* @param {number} required_count number of matrices that must fit
|
|
@@ -1808,8 +1624,9 @@ export class GPUAnimationManager {
|
|
|
1808
1624
|
// capacity. After grow both are zero-initialised, so the next
|
|
1809
1625
|
// prep dispatch needs to seed "previous" from "current"
|
|
1810
1626
|
// (otherwise velocity would interpolate against zero
|
|
1811
|
-
// matrices)
|
|
1812
|
-
//
|
|
1627
|
+
// matrices), and all of it: no row has a last frame left to
|
|
1628
|
+
// keep. The flag below tells dispatch_skin_matrix_prep to
|
|
1629
|
+
// issue that copy.
|
|
1813
1630
|
for (let i = 0; i < 2; i++) {
|
|
1814
1631
|
if (this.#skin_matrices_buffers[i] !== null) {
|
|
1815
1632
|
this.#skin_matrices_buffers[i].destroy();
|
|
@@ -1821,22 +1638,20 @@ export class GPUAnimationManager {
|
|
|
1821
1638
|
});
|
|
1822
1639
|
}
|
|
1823
1640
|
this.#skin_matrices_capacity = new_capacity;
|
|
1824
|
-
this.#
|
|
1641
|
+
this.#skin_matrix_seed_all = true;
|
|
1825
1642
|
}
|
|
1826
1643
|
|
|
1827
1644
|
/**
|
|
1828
|
-
* Flush all pending uploads (curves,
|
|
1829
|
-
*
|
|
1645
|
+
* Flush all pending uploads (curves, keyframes, tracks, clips,
|
|
1646
|
+
* bindings, skins, skin joints) into the GPU
|
|
1830
1647
|
* database. Call once per frame, before any shader that reads from
|
|
1831
1648
|
* `database.buffer`.
|
|
1832
1649
|
*
|
|
1833
|
-
*
|
|
1834
|
-
* whose dependencies (joint rows, channel-target rows)
|
|
1835
|
-
*
|
|
1836
|
-
*
|
|
1837
|
-
*
|
|
1838
|
-
* observationally complete — the next-frame `database.update`
|
|
1839
|
-
* picks up the patched head pointer.
|
|
1650
|
+
* Drains the pending-registration queues first: skins and clips
|
|
1651
|
+
* whose dependencies (joint rows, channel-target rows) weren't
|
|
1652
|
+
* ready at register time get one shot per `update` to complete.
|
|
1653
|
+
* Once every entity has taken its row, the deferred build runs,
|
|
1654
|
+
* and this same call's `database.update` uploads what it wrote.
|
|
1840
1655
|
*
|
|
1841
1656
|
* Does not touch the skin-matrices ping-pong buffers — those
|
|
1842
1657
|
* are scratch populated each frame by
|
|
@@ -1875,31 +1690,34 @@ export class GPUAnimationManager {
|
|
|
1875
1690
|
* correct ping-pong behaviour across frames without leaking the
|
|
1876
1691
|
* buffer-role bookkeeping into every caller.
|
|
1877
1692
|
*
|
|
1878
|
-
* No-op when no
|
|
1693
|
+
* No-op when the joints table has no page for it to walk
|
|
1694
|
+
* (`group_count_x === 0`), which is never while a skin is
|
|
1695
|
+
* registered: a page emptied of joints goes at the next database
|
|
1696
|
+
* update.
|
|
1879
1697
|
*
|
|
1880
1698
|
* Per-frame ordering:
|
|
1881
|
-
* 1. Flip {@link #skin_matrices_current_index}
|
|
1882
|
-
*
|
|
1883
|
-
*
|
|
1884
|
-
*
|
|
1885
|
-
*
|
|
1886
|
-
*
|
|
1887
|
-
*
|
|
1888
|
-
* the
|
|
1889
|
-
*
|
|
1890
|
-
*
|
|
1891
|
-
*
|
|
1892
|
-
* 4. On the very first frame (or after a grow), copy current →
|
|
1893
|
-
* previous so the first velocity reads see matching matrices
|
|
1894
|
-
* and produce zero velocity.
|
|
1699
|
+
* 1. Flip {@link #skin_matrices_current_index}: last frame's
|
|
1700
|
+
* "current" becomes this frame's "previous"
|
|
1701
|
+
* ({@link prev_skin_matrices_buffer}), and the buffer that
|
|
1702
|
+
* held the frame before it becomes the write target.
|
|
1703
|
+
* 2. Dispatch the prep shader into the new "current".
|
|
1704
|
+
* 3. Copy "current" over "previous" on the rows that have no last
|
|
1705
|
+
* frame — every run handed out and every pending skin's run
|
|
1706
|
+
* named since the last dispatch, or all of it after a grow —
|
|
1707
|
+
* so the first velocity read over those rows sees matching
|
|
1708
|
+
* matrices and produces zero velocity. Every other row of
|
|
1709
|
+
* "previous" keeps last frame's matrices.
|
|
1895
1710
|
*
|
|
1896
1711
|
* @param {ShadeGPUCommandContext} cmd_ctx
|
|
1897
1712
|
*/
|
|
1898
1713
|
dispatch_skin_matrix_prep(cmd_ctx) {
|
|
1899
1714
|
const groups = this.#database
|
|
1900
|
-
.get('
|
|
1715
|
+
.get('animation_skin_joints')
|
|
1901
1716
|
.dispatch_group_count(SKIN_MATRIX_PREP_WORKGROUP_SIZE);
|
|
1902
1717
|
if (groups === 0) {
|
|
1718
|
+
// no page to walk means no skin registered, and a skin given back takes its runs
|
|
1719
|
+
assert.equal(this.#skin_matrix_seed_runs.length, 0, 'seed runs queued for skins no longer registered');
|
|
1720
|
+
|
|
1903
1721
|
return;
|
|
1904
1722
|
}
|
|
1905
1723
|
|
|
@@ -1924,20 +1742,69 @@ export class GPUAnimationManager {
|
|
|
1924
1742
|
},
|
|
1925
1743
|
});
|
|
1926
1744
|
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1933
|
-
|
|
1745
|
+
this.#seed_previous_skin_matrices(cmd_ctx, current, previous);
|
|
1746
|
+
}
|
|
1747
|
+
|
|
1748
|
+
/**
|
|
1749
|
+
* Copy "current" over "previous" on the rows where "previous" holds no pose of the frame
|
|
1750
|
+
* before: all of it after a grow, otherwise the runs queued since the last prep. Zeros there,
|
|
1751
|
+
* or the last pose of a skin that had the rows, would have the velocity pass produce huge
|
|
1752
|
+
* nonsense on the first frame the skin appears; seeded, the first velocity read yields zero,
|
|
1753
|
+
* which is the right answer — no motion has happened yet.
|
|
1754
|
+
*
|
|
1755
|
+
* Every other row is left alone: a settled skin's rows hold its pose last frame, which its
|
|
1756
|
+
* motion is measured from, and the rest are read by no one. Seeded too, every skinned
|
|
1757
|
+
* character on screen would lose its motion vectors for the frame whenever one spawned.
|
|
1758
|
+
*
|
|
1759
|
+
* Runs are coalesced by sorting — a frame's worth of spawns is a handful of runs — and adjacent
|
|
1760
|
+
* or overlapping ones go as one copy.
|
|
1761
|
+
*
|
|
1762
|
+
* @param {ShadeGPUCommandContext} cmd_ctx
|
|
1763
|
+
* @param {GPUBuffer} current
|
|
1764
|
+
* @param {GPUBuffer} previous
|
|
1765
|
+
*/
|
|
1766
|
+
#seed_previous_skin_matrices(cmd_ctx, current, previous) {
|
|
1767
|
+
const runs = this.#skin_matrix_seed_runs;
|
|
1768
|
+
|
|
1769
|
+
if (this.#skin_matrix_seed_all) {
|
|
1770
|
+
cmd_ctx.copyBufferToBuffer(current, 0, previous, 0, current.size);
|
|
1771
|
+
|
|
1772
|
+
this.#skin_matrix_seed_all = false;
|
|
1773
|
+
runs.length = 0;
|
|
1774
|
+
|
|
1775
|
+
return;
|
|
1776
|
+
}
|
|
1777
|
+
|
|
1778
|
+
if (runs.length === 0) {
|
|
1779
|
+
// a settled frame: every row of "previous" is last frame's
|
|
1780
|
+
return;
|
|
1781
|
+
}
|
|
1782
|
+
|
|
1783
|
+
runs.sort((a, b) => a[0] - b[0]);
|
|
1784
|
+
|
|
1785
|
+
let i = 0;
|
|
1786
|
+
|
|
1787
|
+
while (i < runs.length) {
|
|
1788
|
+
const first = runs[i][0];
|
|
1789
|
+
let end = first + runs[i][1];
|
|
1790
|
+
|
|
1791
|
+
i++;
|
|
1792
|
+
|
|
1793
|
+
// a run starting at or before this copy's end is part of it
|
|
1794
|
+
while (i < runs.length && runs[i][0] <= end) {
|
|
1795
|
+
end = Math.max(end, runs[i][0] + runs[i][1]);
|
|
1796
|
+
|
|
1797
|
+
i++;
|
|
1798
|
+
}
|
|
1799
|
+
|
|
1934
1800
|
cmd_ctx.copyBufferToBuffer(
|
|
1935
|
-
current,
|
|
1936
|
-
previous,
|
|
1937
|
-
|
|
1801
|
+
current, first * SKIN_MATRIX_BYTES,
|
|
1802
|
+
previous, first * SKIN_MATRIX_BYTES,
|
|
1803
|
+
(end - first) * SKIN_MATRIX_BYTES,
|
|
1938
1804
|
);
|
|
1939
|
-
this.#first_frame_skin_matrices = false;
|
|
1940
1805
|
}
|
|
1806
|
+
|
|
1807
|
+
runs.length = 0;
|
|
1941
1808
|
}
|
|
1942
1809
|
|
|
1943
1810
|
/**
|
|
@@ -1982,7 +1849,7 @@ export class GPUAnimationManager {
|
|
|
1982
1849
|
|
|
1983
1850
|
// Only clip evaluation is conditional. Every scene needs current globals.
|
|
1984
1851
|
const apply_groups = this.#database
|
|
1985
|
-
.get('
|
|
1852
|
+
.get('animation_bindings')
|
|
1986
1853
|
.dispatch_group_count(ANIMATION_APPLY_WORKGROUP_SIZE);
|
|
1987
1854
|
|
|
1988
1855
|
if (apply_groups > 0) {
|