@woosh/meep-engine 3.11.3 → 3.12.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/README.md +14 -18
- package/editor/SelectionVisualizer.js +127 -127
- package/editor/entity_world_bounds.js +27 -27
- package/editor/particles/rebuildParticleEmitter.js +31 -31
- package/editor/process/SymbolicDisplayProcess.js +1 -1
- package/editor/process/symbolic/CameraSymbolicDisplay.js +146 -146
- package/editor/process/symbolic/LightSymbolicDisplay.js +172 -172
- package/editor/prototypeEditorShell.js +156 -156
- package/editor/selection/editor_pick.js +130 -130
- package/editor/selection/screen_rect_frustum.js +119 -119
- package/editor/tools/v2/TransformControls.js +971 -971
- package/package.json +1 -1
- package/src/engine/Engine.d.ts +3 -3
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +726 -726
- package/src/engine/EngineHarness.d.ts +1 -1
- package/src/engine/EngineHarness.js +590 -590
- package/src/engine/ecs/HIERARCHY_REVIEW.md +717 -717
- package/src/engine/ecs/terrain/ecs/BuildLightTexture.d.ts +1 -1
- package/src/engine/ecs/terrain/ecs/BuildLightTexture.js +27 -27
- package/src/engine/ecs/terrain/ecs/Terrain.d.ts +1 -5
- package/src/engine/ecs/terrain/ecs/Terrain.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/Terrain.js +790 -790
- package/src/engine/ecs/terrain/util/loadVisibleTerrainTiles.js +129 -129
- package/src/engine/graphics/ecs/camera/camera_find_active.d.ts +1 -1
- package/src/engine/graphics/ecs/camera/camera_find_active.js +28 -28
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +1 -1
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +428 -428
- package/src/engine/graphics/ecs/water/Water.d.ts +1 -1
- package/src/engine/graphics/ecs/water/Water.js +104 -104
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +1 -1
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +1 -1
- package/src/engine/graphics3/AnimationGraphSystem.d.ts +65 -0
- package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -0
- package/src/engine/graphics3/AnimationGraphSystem.js +329 -0
- package/src/engine/graphics3/AnimationGraphSystem3.d.ts +6 -61
- package/src/engine/graphics3/AnimationGraphSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationGraphSystem3.js +6 -325
- package/src/engine/graphics3/AnimationSystem.d.ts +76 -0
- package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -0
- package/src/engine/graphics3/AnimationSystem.js +352 -0
- package/src/engine/graphics3/AnimationSystem3.d.ts +6 -72
- package/src/engine/graphics3/AnimationSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationSystem3.js +6 -348
- package/src/engine/graphics3/CameraSystem.d.ts +49 -0
- package/src/engine/graphics3/CameraSystem.d.ts.map +1 -0
- package/src/engine/graphics3/CameraSystem.js +170 -0
- package/src/engine/graphics3/CameraSystem3.d.ts +6 -45
- package/src/engine/graphics3/CameraSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/CameraSystem3.js +6 -166
- package/src/engine/graphics3/DebugDrawSystem.d.ts +72 -0
- package/src/engine/graphics3/DebugDrawSystem.d.ts.map +1 -0
- package/src/engine/graphics3/DebugDrawSystem.js +205 -0
- package/src/engine/graphics3/DebugDrawSystem3.d.ts +6 -68
- package/src/engine/graphics3/DebugDrawSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/DebugDrawSystem3.js +6 -201
- package/src/engine/graphics3/DecalSystem.d.ts +81 -0
- package/src/engine/graphics3/DecalSystem.d.ts.map +1 -0
- package/src/engine/graphics3/DecalSystem.js +441 -0
- package/src/engine/graphics3/DecalSystem3.d.ts +6 -77
- package/src/engine/graphics3/DecalSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/DecalSystem3.js +6 -437
- package/src/engine/graphics3/FogOfWarSystem.d.ts +74 -0
- package/src/engine/graphics3/FogOfWarSystem.d.ts.map +1 -0
- package/src/engine/graphics3/FogOfWarSystem.js +265 -0
- package/src/engine/graphics3/FogOfWarSystem3.d.ts +6 -70
- package/src/engine/graphics3/FogOfWarSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/FogOfWarSystem3.js +6 -261
- package/src/engine/graphics3/GraphicsEngine.d.ts +340 -0
- package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -0
- package/src/engine/graphics3/GraphicsEngine.js +790 -0
- package/src/engine/graphics3/GraphicsEngine3.d.ts +6 -336
- package/src/engine/graphics3/GraphicsEngine3.d.ts.map +1 -1
- package/src/engine/graphics3/GraphicsEngine3.js +6 -786
- package/src/engine/graphics3/HighlightSystem.d.ts +82 -0
- package/src/engine/graphics3/HighlightSystem.d.ts.map +1 -0
- package/src/engine/graphics3/HighlightSystem.js +241 -0
- package/src/engine/graphics3/HighlightSystem3.d.ts +6 -78
- package/src/engine/graphics3/HighlightSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/HighlightSystem3.js +6 -237
- package/src/engine/graphics3/LightSystem.d.ts +40 -0
- package/src/engine/graphics3/LightSystem.d.ts.map +1 -0
- package/src/engine/graphics3/LightSystem.js +211 -0
- package/src/engine/graphics3/LightSystem3.d.ts +6 -36
- package/src/engine/graphics3/LightSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/LightSystem3.js +6 -207
- package/src/engine/graphics3/MeshSystem.d.ts +106 -0
- package/src/engine/graphics3/MeshSystem.d.ts.map +1 -0
- package/src/engine/graphics3/MeshSystem.js +647 -0
- package/src/engine/graphics3/MeshSystem3.d.ts +6 -102
- package/src/engine/graphics3/MeshSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/MeshSystem3.js +6 -642
- package/src/engine/graphics3/ParticipatingMedia.d.ts +2 -2
- package/src/engine/graphics3/ParticipatingMedia.js +203 -203
- package/src/engine/graphics3/ParticipatingMediaSystem.d.ts +87 -0
- package/src/engine/graphics3/ParticipatingMediaSystem.d.ts.map +1 -0
- package/src/engine/graphics3/ParticipatingMediaSystem.js +184 -0
- package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts +6 -83
- package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/ParticipatingMediaSystem3.js +6 -180
- package/src/engine/graphics3/ParticleEmitterSystem.d.ts +76 -0
- package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +1 -0
- package/src/engine/graphics3/ParticleEmitterSystem.js +289 -0
- package/src/engine/graphics3/ParticleEmitterSystem3.d.ts +6 -72
- package/src/engine/graphics3/ParticleEmitterSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/ParticleEmitterSystem3.js +6 -285
- package/src/engine/graphics3/PathDisplaySystem.d.ts +70 -0
- package/src/engine/graphics3/PathDisplaySystem.d.ts.map +1 -0
- package/src/engine/graphics3/PathDisplaySystem.js +309 -0
- package/src/engine/graphics3/PathDisplaySystem3.d.ts +6 -66
- package/src/engine/graphics3/PathDisplaySystem3.d.ts.map +1 -1
- package/src/engine/graphics3/PathDisplaySystem3.js +6 -305
- package/src/engine/graphics3/Pickable.d.ts +1 -1
- package/src/engine/graphics3/Pickable.js +65 -65
- package/src/engine/graphics3/PickingQuery.d.ts +1 -1
- package/src/engine/graphics3/PickingQuery.js +48 -48
- package/src/engine/graphics3/PickingSystem.d.ts +67 -0
- package/src/engine/graphics3/PickingSystem.d.ts.map +1 -0
- package/src/engine/graphics3/PickingSystem.js +273 -0
- package/src/engine/graphics3/PickingSystem3.d.ts +6 -63
- package/src/engine/graphics3/PickingSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/PickingSystem3.js +6 -269
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts +47 -0
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -0
- package/src/engine/graphics3/ShadedGeometrySystem.js +169 -0
- package/src/engine/graphics3/ShadedGeometrySystem3.d.ts +6 -43
- package/src/engine/graphics3/ShadedGeometrySystem3.d.ts.map +1 -1
- package/src/engine/graphics3/ShadedGeometrySystem3.js +6 -165
- package/src/engine/graphics3/TerrainSystem.d.ts +80 -0
- package/src/engine/graphics3/TerrainSystem.d.ts.map +1 -0
- package/src/engine/graphics3/TerrainSystem.js +566 -0
- package/src/engine/graphics3/TerrainSystem3.d.ts +6 -76
- package/src/engine/graphics3/TerrainSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/TerrainSystem3.js +6 -562
- package/src/engine/graphics3/TooltipComponentSystem.d.ts +65 -0
- package/src/engine/graphics3/TooltipComponentSystem.d.ts.map +1 -0
- package/src/engine/graphics3/TooltipComponentSystem.js +328 -0
- package/src/engine/graphics3/TooltipComponentSystem3.d.ts +6 -61
- package/src/engine/graphics3/TooltipComponentSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/TooltipComponentSystem3.js +6 -324
- package/src/engine/graphics3/Trail3DSystem.d.ts +73 -0
- package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -0
- package/src/engine/graphics3/Trail3DSystem.js +221 -0
- package/src/engine/graphics3/Trail3DSystem3.d.ts +6 -69
- package/src/engine/graphics3/Trail3DSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/Trail3DSystem3.js +6 -217
- package/src/engine/graphics3/VolumetricLightMap.d.ts +2 -2
- package/src/engine/graphics3/VolumetricLightMap.js +2 -2
- package/src/engine/graphics3/VolumetricLightMapSystem.d.ts +98 -0
- package/src/engine/graphics3/VolumetricLightMapSystem.d.ts.map +1 -0
- package/src/engine/graphics3/VolumetricLightMapSystem.js +261 -0
- package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts +6 -94
- package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/VolumetricLightMapSystem3.js +10 -261
- package/src/engine/graphics3/WaterSystem.d.ts +59 -0
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -0
- package/src/engine/graphics3/WaterSystem.js +293 -0
- package/src/engine/graphics3/WaterSystem3.d.ts +6 -55
- package/src/engine/graphics3/WaterSystem3.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem3.js +6 -289
- package/src/engine/graphics3/animation/AnimationGraphController.d.ts +1 -1
- package/src/engine/graphics3/animation/AnimationGraphController.js +518 -518
- package/src/engine/graphics3/animation/ClipListPlayer.d.ts +1 -1
- package/src/engine/graphics3/animation/ClipListPlayer.js +263 -263
- package/src/engine/graphics3/animation/ClipPlayback.d.ts +2 -2
- package/src/engine/graphics3/animation/ClipPlayback.js +84 -84
- package/src/engine/graphics3/decal/graph_build_decal_clusters.d.ts.map +1 -1
- package/src/engine/graphics3/decal/graph_build_decal_clusters.js +6 -8
- package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts +0 -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 +1 -1
- package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts +0 -4
- package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_cull_decals_frustum.js +1 -1
- package/src/engine/graphics3/highlight/pack_highlight_table.d.ts +2 -2
- package/src/engine/graphics3/highlight/pack_highlight_table.d.ts.map +1 -1
- package/src/engine/graphics3/highlight/pack_highlight_table.js +74 -74
- package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts +1 -1
- package/src/engine/graphics3/pose/query_entity_node_world_pose.js +101 -101
- package/src/engine/graphics3/preview/make_model_thumbnail.d.ts +3 -3
- package/src/engine/graphics3/preview/make_model_thumbnail.d.ts.map +1 -1
- package/src/engine/graphics3/preview/make_model_thumbnail.js +48 -48
- package/src/engine/graphics3/shade_camera_projection_ray.d.ts +1 -1
- package/src/engine/graphics3/shade_camera_projection_ray.js +77 -77
- package/src/engine/graphics3/shade_node_to_entity_composition.d.ts +1 -1
- package/src/engine/graphics3/shade_node_to_entity_composition.js +84 -84
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +0 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +0 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +133 -134
- package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +202 -202
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +249 -249
- package/src/shade/renderer/STATIC_GRAPHICS_ENGINE_ASSETS.js +1 -1
- package/src/shade/renderer/animation/pose/PosePlayback.d.ts +2 -1
- package/src/shade/renderer/animation/pose/PosePlayback.d.ts.map +1 -1
- package/src/shade/renderer/animation/pose/PosePlayback.js +2 -1
- package/src/shade/renderer/animation/shader_animation_apply.d.ts.map +1 -1
- package/src/shade/renderer/animation/shader_animation_apply.js +128 -129
- package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts.map +1 -1
- package/src/shade/renderer/animation/shader_animation_pose_resolve.js +176 -177
- package/src/shade/renderer/animation/shader_animation_tick.d.ts.map +1 -1
- package/src/shade/renderer/animation/shader_animation_tick.js +125 -126
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.js +98 -99
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.js +212 -213
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.js +120 -121
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.js +75 -76
- package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.js +371 -372
- 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 +104 -105
- package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/shader_multiscatter_lut.js +0 -1
- package/src/shade/renderer/buffer/graph_inspect_gpu_buffer.js +136 -136
- package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUDatabase.js +2 -3
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +319 -319
- package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.d.ts.map +1 -1
- package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.js +41 -42
- package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.d.ts.map +1 -1
- package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.js +83 -84
- package/src/shade/renderer/dynamic/shader_dynamic_mesh.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/shader_dynamic_mesh.js +177 -170
- package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +918 -918
- package/src/shade/renderer/geometry/bvh/record_blas_refit.js +4 -4
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.js +121 -122
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +774 -774
- package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts +1 -1
- package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.js +69 -70
- package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +367 -367
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +184 -184
- package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +1115 -1115
- package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +217 -217
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +142 -143
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +0 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js +140 -141
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +0 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +0 -1
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.js +191 -198
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts +0 -6
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.js +120 -120
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts +0 -4
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.js +112 -112
- package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/graph_assign_clsuters.js +4 -7
- package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts +0 -6
- 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 +1 -1
- package/src/shade/renderer/lightmap/bake/raster/shader_lightmap_to_viz_buffer.js +222 -222
- package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_tile_composit.js +81 -81
- package/src/shade/renderer/material/GPUMaterialContext.js +380 -380
- package/src/shade/renderer/material/standard/fragment_gbuffer_vt.js +169 -169
- package/src/shade/renderer/object_property/shader_object_property_process.d.ts.map +1 -1
- package/src/shade/renderer/object_property/shader_object_property_process.js +83 -84
- package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts.map +1 -1
- package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.js +57 -58
- package/src/shade/renderer/particles/prototypeParticleSystem.js +2 -3
- package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit.js +117 -118
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +77 -79
- package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_render.js +190 -183
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +99 -100
- package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
- package/src/shade/renderer/particles/sort/shader_particle_sort.js +158 -161
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +184 -184
- package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js +119 -119
- package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.js +3 -4
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js +266 -267
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js +270 -271
- package/src/shade/renderer/postprocess/nss/shader_nss_concat.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_concat.js +68 -69
- package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.js +225 -226
- package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.js +49 -50
- package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.js +291 -292
- package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.js +230 -231
- package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts +16 -2
- package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.js +12 -12
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +2 -2
- 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 +68 -69
- package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.js +59 -60
- 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 +0 -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 +64 -65
- package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.js +168 -169
- package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.js +160 -161
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +109 -110
- 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 +115 -116
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.js +139 -140
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.js +91 -92
- 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 +88 -89
- 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 +90 -91
- 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 +65 -66
- 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 +89 -90
- package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.js +169 -170
- 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 +89 -90
- package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.js +61 -62
- 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 +153 -154
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.js +144 -144
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_pass_descriptor.js +88 -88
- package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +217 -217
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +179 -179
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.js +178 -178
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +194 -194
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_opaque_pass_descriptor.js +76 -76
- package/src/shade/renderer/restir/di/shader_restir_di_denoise.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_denoise.js +136 -137
- package/src/shade/renderer/restir/di/shader_restir_di_resample.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_resample.js +129 -130
- package/src/shade/renderer/restir/di/shader_restir_di_resolve.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_resolve.js +99 -100
- package/src/shade/renderer/restir/di/shader_restir_di_spatial.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_spatial.js +116 -117
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +383 -383
- package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy_naive.js +123 -123
- package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.js +64 -65
- package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.js +372 -373
- package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.js +111 -112
- package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
- package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.js +0 -1
- package/src/shade/renderer/shader/ComputeShader.d.ts +24 -3
- package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
- package/src/shade/renderer/shader/ComputeShader.js +350 -296
- package/src/shade/renderer/shader/ImageShader.js +217 -217
- package/src/shade/renderer/shader/ShaderDescriptor.d.ts +5 -0
- package/src/shade/renderer/shader/ShaderDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/ShaderDescriptor.js +20 -0
- package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.d.ts +47 -0
- package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.d.ts.map +1 -0
- package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.js +448 -0
- package/src/shade/renderer/shadow/map/csm/graph_csm_setup_cascades.js +3 -3
- package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js +3 -3
- package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +2 -2
- package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +4 -4
- package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.d.ts.map +1 -1
- package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.js +231 -232
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +12 -15
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts +3 -2
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +3 -2
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts +0 -2
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js +17 -6
- package/src/shade/renderer/water/shader_water.js +246 -246
- package/src/shade/vitest.setup.mjs +1 -1
- package/src/shade/wgsl/emulator/ComputeShaderEmulator.js +291 -291
- package/src/view/minimap/Minimap.d.ts +2 -2
- package/src/view/minimap/Minimap.d.ts.map +1 -1
- package/src/view/minimap/Minimap.js +225 -225
- package/src/view/minimap/dom/MinimapCameraView.d.ts +3 -3
- package/src/view/minimap/dom/MinimapCameraView.d.ts.map +1 -1
- package/src/view/minimap/dom/MinimapCameraView.js +206 -206
- package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts +0 -3
- package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts.map +0 -1
- package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.js +0 -20
|
@@ -1,428 +1,428 @@
|
|
|
1
|
-
import { m4_invert } from "../../../../core/geom/3d/mat4/m4_invert.js";
|
|
2
|
-
import { assert } from "../../../../core/assert.js";
|
|
3
|
-
import { array_copy } from "../../../../core/collection/array/array_copy.js";
|
|
4
|
-
import { BvhClient } from "../../../../core/bvh2/bvh3/BvhClient.js";
|
|
5
|
-
import { AABB3 } from "../../../../core/geom/3d/aabb/AABB3.js";
|
|
6
|
-
import { aabb3_matrix4_project } from "../../../../core/geom/3d/aabb/aabb3_matrix4_project.js";
|
|
7
|
-
import { ray3_array_apply_matrix4 } from "../../../../core/geom/3d/ray/ray3_array_apply_matrix4.js";
|
|
8
|
-
import { GeometrySpatialQueryAccelerator } from "../../geometry/buffered/query/GeometrySpatialQueryAccelerator.js";
|
|
9
|
-
import { DrawMode } from "./DrawMode.js";
|
|
10
|
-
import { ShadedGeometryFlags } from "./ShadedGeometryFlags.js";
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* @readonly
|
|
14
|
-
* @type {Float32Array}
|
|
15
|
-
*/
|
|
16
|
-
const scratch_aabb3_array = new Float32Array(6);
|
|
17
|
-
|
|
18
|
-
const DEFAULT_FLAGS = ShadedGeometryFlags.CastShadow
|
|
19
|
-
| ShadedGeometryFlags.ReceiveShadow
|
|
20
|
-
| ShadedGeometryFlags.Visible
|
|
21
|
-
;
|
|
22
|
-
|
|
23
|
-
const FLAG_SET_EQUALITY = ShadedGeometryFlags.CastShadow
|
|
24
|
-
| ShadedGeometryFlags.ReceiveShadow
|
|
25
|
-
| ShadedGeometryFlags.DrawMethodLocked
|
|
26
|
-
| ShadedGeometryFlags.Visible
|
|
27
|
-
;
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
*
|
|
31
|
-
* @type {Float32Array|mat4}
|
|
32
|
-
*/
|
|
33
|
-
const scratch_m4 = new Float32Array(16);
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* @readonly
|
|
37
|
-
* @type {Float32Array}
|
|
38
|
-
*/
|
|
39
|
-
const scratch_ray_0 = new Float32Array(6);
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Represents a primitive 3d object, a combination of a material and geometry
|
|
43
|
-
* This is roughly equivalent to single draw call, note that his is not a hierarchical data structure, if you want that - you will need to combine multiple entities, each with a `ShadedGeometry` component
|
|
44
|
-
*/
|
|
45
|
-
export class ShadedGeometry {
|
|
46
|
-
/**
|
|
47
|
-
* Set when a transform change has been observed but the bounding box and the BVH have
|
|
48
|
-
* not been brought up to date yet. Only ever set under
|
|
49
|
-
* {@link ShadedGeometryFlags.DeferredBoundsUpdate}, and doubles as the "already queued"
|
|
50
|
-
* bit for {@link #bounds_queue}.
|
|
51
|
-
* @type {boolean}
|
|
52
|
-
*/
|
|
53
|
-
#bounds_dirty = false;
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Transient, assigned in the system. Where this component parks itself when its bounds
|
|
57
|
-
* go stale under {@link ShadedGeometryFlags.DeferredBoundsUpdate}.
|
|
58
|
-
* @type {DeferredBoundsQueue|null}
|
|
59
|
-
*/
|
|
60
|
-
#bounds_queue = null;
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Whatever the running renderer draws geometry from — a `MeshletGeometry` under Shade, and a
|
|
64
|
-
* `Geometry` where the primitive was built rather than loaded.
|
|
65
|
-
* @type {MeshletGeometry|Geometry|BufferGeometry|null}
|
|
66
|
-
*/
|
|
67
|
-
geometry = null;
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
*
|
|
71
|
-
* @type {ShadeMaterial|Material|null}
|
|
72
|
-
*/
|
|
73
|
-
material = null;
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* Optional extra material used for shadowmaps
|
|
77
|
-
* @type {ShadeMaterial|Material|null}
|
|
78
|
-
*/
|
|
79
|
-
depth_material = null;
|
|
80
|
-
|
|
81
|
-
__bvh_leaf = new BvhClient();
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Transient, assigned in the system
|
|
85
|
-
* @type {number}
|
|
86
|
-
* @private
|
|
87
|
-
*/
|
|
88
|
-
__entity = -1;
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Transient, cached for convenience. Associated transform component from the same entity
|
|
92
|
-
* @type {Transform|null}
|
|
93
|
-
* @private
|
|
94
|
-
*/
|
|
95
|
-
__c_transform = null;
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* The row a renderer put this primitive in, or `null` while it is in none.
|
|
99
|
-
*
|
|
100
|
-
* **Written by whichever system placed it, and read by whoever needs to know where it ended
|
|
101
|
-
* up** — `
|
|
102
|
-
* made with `Mesh.mesh`: a component that carries the renderer's own geometry may as well carry
|
|
103
|
-
* the renderer's own handle to it, and one renderer runs at a time.
|
|
104
|
-
*
|
|
105
|
-
* @transient
|
|
106
|
-
* @type {Mesh|null}
|
|
107
|
-
*/
|
|
108
|
-
node = null;
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
*
|
|
112
|
-
* @type {DrawMode|number}
|
|
113
|
-
*/
|
|
114
|
-
mode = DrawMode.Triangles;
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Transient property signifying how to render object, such as using INSTANCED draw
|
|
118
|
-
* @type {number}
|
|
119
|
-
*/
|
|
120
|
-
draw_method = 0;
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
*
|
|
124
|
-
* @type {number}
|
|
125
|
-
*/
|
|
126
|
-
flags = DEFAULT_FLAGS;
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
*
|
|
130
|
-
* @param {number|ShadedGeometryFlags} flag
|
|
131
|
-
* @returns {void}
|
|
132
|
-
*/
|
|
133
|
-
setFlag(flag) {
|
|
134
|
-
this.flags |= flag;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
*
|
|
139
|
-
* @param {number|ShadedGeometryFlags} flag
|
|
140
|
-
* @returns {void}
|
|
141
|
-
*/
|
|
142
|
-
clearFlag(flag) {
|
|
143
|
-
this.flags &= ~flag;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
/**
|
|
147
|
-
*
|
|
148
|
-
* @param {number|ShadedGeometryFlags} flag
|
|
149
|
-
* @param {boolean} value
|
|
150
|
-
*/
|
|
151
|
-
writeFlag(flag, value) {
|
|
152
|
-
if (value) {
|
|
153
|
-
this.setFlag(flag);
|
|
154
|
-
} else {
|
|
155
|
-
this.clearFlag(flag);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
/**
|
|
160
|
-
*
|
|
161
|
-
* @param {number|ShadedGeometryFlags} flag
|
|
162
|
-
* @returns {boolean}
|
|
163
|
-
*/
|
|
164
|
-
getFlag(flag) {
|
|
165
|
-
return (this.flags & flag) === flag;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
*
|
|
170
|
-
* @return {number}
|
|
171
|
-
*/
|
|
172
|
-
hash() {
|
|
173
|
-
return this.geometry.id
|
|
174
|
-
^ this.material.id
|
|
175
|
-
^ (this.flags & FLAG_SET_EQUALITY)
|
|
176
|
-
^ (this.draw_method << 16)
|
|
177
|
-
^ (this.mode << 12)
|
|
178
|
-
;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
/**
|
|
182
|
-
*
|
|
183
|
-
* @param {ShadedGeometry} other
|
|
184
|
-
* @returns {boolean}
|
|
185
|
-
*/
|
|
186
|
-
equals(other) {
|
|
187
|
-
return this.geometry.id === other.geometry.id
|
|
188
|
-
&& this.material.id === other.material.id
|
|
189
|
-
&& this.draw_method === other.draw_method
|
|
190
|
-
&& this.mode === other.mode
|
|
191
|
-
&& (this.flags & FLAG_SET_EQUALITY) === (other.flags & FLAG_SET_EQUALITY)
|
|
192
|
-
&& this.depth_material === other.depth_material
|
|
193
|
-
;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
/**
|
|
197
|
-
*
|
|
198
|
-
* @param {ShadedGeometry} other
|
|
199
|
-
*/
|
|
200
|
-
copy(other) {
|
|
201
|
-
this.geometry = other.geometry;
|
|
202
|
-
this.material = other.material;
|
|
203
|
-
this.depth_material = other.depth_material;
|
|
204
|
-
this.draw_method = other.draw_method;
|
|
205
|
-
this.mode = other.mode;
|
|
206
|
-
this.flags = other.flags;
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
/**
|
|
210
|
-
*
|
|
211
|
-
* @returns {ShadedGeometry}
|
|
212
|
-
*/
|
|
213
|
-
clone() {
|
|
214
|
-
const r = new ShadedGeometry();
|
|
215
|
-
|
|
216
|
-
r.copy(this);
|
|
217
|
-
|
|
218
|
-
return r;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
/**
|
|
222
|
-
* Current cached entity that this component is attached to
|
|
223
|
-
* @return {number}
|
|
224
|
-
*/
|
|
225
|
-
get entity() {
|
|
226
|
-
return this.__entity;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
/**
|
|
230
|
-
* Global transform matrix
|
|
231
|
-
* 4x4 matrix
|
|
232
|
-
* @return {null|number[]}
|
|
233
|
-
*/
|
|
234
|
-
get transform() {
|
|
235
|
-
return this.__c_transform.matrix;
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
/**
|
|
239
|
-
* Attach this component to the queue that collects deferred bounds updates.
|
|
240
|
-
* Called by the system when the component enters the BVH.
|
|
241
|
-
* @param {DeferredBoundsQueue} queue
|
|
242
|
-
* @returns {void}
|
|
243
|
-
*/
|
|
244
|
-
bindBoundsQueue(queue) {
|
|
245
|
-
assert.defined(queue, 'queue');
|
|
246
|
-
|
|
247
|
-
this.#bounds_queue = queue;
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
/**
|
|
251
|
-
* Called by the system when the component leaves the BVH. Any update parked in the
|
|
252
|
-
* queue is abandoned — the entry is left in place and becomes inert, so unlinking
|
|
253
|
-
* stays O(1).
|
|
254
|
-
* @returns {void}
|
|
255
|
-
*/
|
|
256
|
-
unbindBoundsQueue() {
|
|
257
|
-
this.#bounds_dirty = false;
|
|
258
|
-
this.#bounds_queue = null;
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
/**
|
|
262
|
-
* Recompute the bounding box and push it into the BVH, if a deferred update is pending.
|
|
263
|
-
*
|
|
264
|
-
* This is the single point where a parked update lands; it is driven both by
|
|
265
|
-
* {@link DeferredBoundsQueue.flush} and by any read of the bounding box.
|
|
266
|
-
* @returns {boolean} whether an update was actually pending
|
|
267
|
-
*/
|
|
268
|
-
applyDeferredBoundsUpdate() {
|
|
269
|
-
if (!this.#bounds_dirty) {
|
|
270
|
-
return false;
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
this.#bounds_dirty = false;
|
|
274
|
-
|
|
275
|
-
this.update_bounds();
|
|
276
|
-
|
|
277
|
-
this.__bvh_leaf.write_bounds();
|
|
278
|
-
|
|
279
|
-
return true;
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
/**
|
|
283
|
-
*
|
|
284
|
-
* @param {AABB3} destination
|
|
285
|
-
*/
|
|
286
|
-
getBoundingBox(destination) {
|
|
287
|
-
const node = this.node;
|
|
288
|
-
|
|
289
|
-
if (node !== null) {
|
|
290
|
-
/*
|
|
291
|
-
Placed in a renderer that keeps a world box per row and refreshes it as part of placing
|
|
292
|
-
it. Reading that is not an optimization — the deferred path below computes its box from
|
|
293
|
-
the geometry's own, and only a three `BufferGeometry` has one of those.
|
|
294
|
-
*/
|
|
295
|
-
destination.readFromArray(node.bounding_box);
|
|
296
|
-
|
|
297
|
-
return;
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
// settle a pending deferred update, so a read never observes a stale box
|
|
301
|
-
this.applyDeferredBoundsUpdate();
|
|
302
|
-
|
|
303
|
-
const aabb = this.__bvh_leaf.bounds;
|
|
304
|
-
|
|
305
|
-
destination.readFromArray(aabb);
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
/**
|
|
309
|
-
*
|
|
310
|
-
* @param {MeshletGeometry|BufferGeometry} geometry
|
|
311
|
-
* @param {ShadeMaterial|Material} material
|
|
312
|
-
* @param {DrawMode} [draw_mode]
|
|
313
|
-
*/
|
|
314
|
-
from(geometry, material, draw_mode = DrawMode.Triangles) {
|
|
315
|
-
this.geometry = geometry;
|
|
316
|
-
this.material = material;
|
|
317
|
-
this.mode = draw_mode;
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
/**
|
|
321
|
-
*
|
|
322
|
-
* @param {MeshletGeometry|BufferGeometry} geometry
|
|
323
|
-
* @param {ShadeMaterial|Material} material
|
|
324
|
-
* @param {DrawMode} [draw_mode]
|
|
325
|
-
* @return {ShadedGeometry}
|
|
326
|
-
*/
|
|
327
|
-
static from(geometry, material, draw_mode) {
|
|
328
|
-
const r = new ShadedGeometry();
|
|
329
|
-
|
|
330
|
-
r.from(geometry, material, draw_mode);
|
|
331
|
-
|
|
332
|
-
return r;
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
/**
|
|
336
|
-
* Change handler subscribed to the entity's {@link Transform} while the component is
|
|
337
|
-
* linked; see {@link ShadedGeometrySystem.link}.
|
|
338
|
-
* @returns {void}
|
|
339
|
-
*/
|
|
340
|
-
updateTransform() {
|
|
341
|
-
if (this.getFlag(ShadedGeometryFlags.DeferredBoundsUpdate)) {
|
|
342
|
-
if (!this.#bounds_dirty) {
|
|
343
|
-
this.#bounds_dirty = true;
|
|
344
|
-
|
|
345
|
-
this.#bounds_queue.add(this);
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
return;
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
this.update_bounds();
|
|
352
|
-
|
|
353
|
-
this.__bvh_leaf.write_bounds();
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
update_bounds() {
|
|
357
|
-
const geometry = this.geometry;
|
|
358
|
-
|
|
359
|
-
/*
|
|
360
|
-
The box comes off the geometry's own, which is why this is only reachable for a `Geometry`:
|
|
361
|
-
it computes one on demand and remembers it, which is the whole of what
|
|
362
|
-
`GeometryFlags.BoundsNeedUpdate` is for. A `MeshletGeometry` carries its box from the build
|
|
363
|
-
and is read through {@link #node} instead — see `getBoundingBox`.
|
|
364
|
-
*/
|
|
365
|
-
geometry.ensureBounds();
|
|
366
|
-
|
|
367
|
-
array_copy(geometry.bounding_box, 0, scratch_aabb3_array, 0, 6);
|
|
368
|
-
|
|
369
|
-
// transform
|
|
370
|
-
aabb3_matrix4_project(this.__bvh_leaf.bounds, scratch_aabb3_array, this.transform);
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
/**
|
|
374
|
-
* Raycast this primitive's own triangles on the CPU.
|
|
375
|
-
*
|
|
376
|
-
* **Requires a {@link Geometry}** — the vertex arrays themselves. A `MeshletGeometry` keeps its
|
|
377
|
-
* triangles quantized inside meshlet pages, so a `ShadedGeometry` placed by
|
|
378
|
-
* `shade_node_to_entity_composition` cannot be asked this; `geometry_build_from_meshlet_geometry`
|
|
379
|
-
* decodes one, and holding that decode is the caller's business rather than this method's.
|
|
380
|
-
* Picking a whole scene goes through the renderer's own `pick` instead (I-9) — this answers with
|
|
381
|
-
* a surface point on one primitive.
|
|
382
|
-
*
|
|
383
|
-
* @param {SurfacePoint3} contact if found, contact is written here
|
|
384
|
-
* @param {ArrayLike<number>|number[]|Float32Array} ray 6-tuple: [origin_x, origin_y, origin_z, direction_x, direction_y, direction_z]
|
|
385
|
-
* @param {ArrayLike<number>|number[]|Float32Array} transform_matrix4 transform applied to the geometry
|
|
386
|
-
* @returns {boolean}
|
|
387
|
-
*/
|
|
388
|
-
query_raycast_nearest(contact, ray, transform_matrix4) {
|
|
389
|
-
|
|
390
|
-
// get transform in local space
|
|
391
|
-
m4_invert(scratch_m4, transform_matrix4);
|
|
392
|
-
|
|
393
|
-
// transform ray to local space
|
|
394
|
-
if (!ray3_array_apply_matrix4(scratch_ray_0, 0, ray, 0, scratch_m4)) {
|
|
395
|
-
// invalid transform matrix
|
|
396
|
-
return false;
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
const hit_found = GeometrySpatialQueryAccelerator.INSTANCE.queryRaycastNearest_array(
|
|
400
|
-
contact,
|
|
401
|
-
this.geometry,
|
|
402
|
-
scratch_ray_0
|
|
403
|
-
);
|
|
404
|
-
|
|
405
|
-
if (!hit_found) {
|
|
406
|
-
return false;
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
// transform hit contact into global space
|
|
410
|
-
contact.applyMatrix4(transform_matrix4);
|
|
411
|
-
|
|
412
|
-
return true;
|
|
413
|
-
|
|
414
|
-
}
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
/**
|
|
418
|
-
* @readonly
|
|
419
|
-
* @type {string}
|
|
420
|
-
*/
|
|
421
|
-
ShadedGeometry.typeName = 'ShadedGeometry';
|
|
422
|
-
|
|
423
|
-
/**
|
|
424
|
-
* TODO add serialization support
|
|
425
|
-
* @readonly
|
|
426
|
-
* @type {boolean}
|
|
427
|
-
*/
|
|
428
|
-
ShadedGeometry.serializable = false;
|
|
1
|
+
import { m4_invert } from "../../../../core/geom/3d/mat4/m4_invert.js";
|
|
2
|
+
import { assert } from "../../../../core/assert.js";
|
|
3
|
+
import { array_copy } from "../../../../core/collection/array/array_copy.js";
|
|
4
|
+
import { BvhClient } from "../../../../core/bvh2/bvh3/BvhClient.js";
|
|
5
|
+
import { AABB3 } from "../../../../core/geom/3d/aabb/AABB3.js";
|
|
6
|
+
import { aabb3_matrix4_project } from "../../../../core/geom/3d/aabb/aabb3_matrix4_project.js";
|
|
7
|
+
import { ray3_array_apply_matrix4 } from "../../../../core/geom/3d/ray/ray3_array_apply_matrix4.js";
|
|
8
|
+
import { GeometrySpatialQueryAccelerator } from "../../geometry/buffered/query/GeometrySpatialQueryAccelerator.js";
|
|
9
|
+
import { DrawMode } from "./DrawMode.js";
|
|
10
|
+
import { ShadedGeometryFlags } from "./ShadedGeometryFlags.js";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @readonly
|
|
14
|
+
* @type {Float32Array}
|
|
15
|
+
*/
|
|
16
|
+
const scratch_aabb3_array = new Float32Array(6);
|
|
17
|
+
|
|
18
|
+
const DEFAULT_FLAGS = ShadedGeometryFlags.CastShadow
|
|
19
|
+
| ShadedGeometryFlags.ReceiveShadow
|
|
20
|
+
| ShadedGeometryFlags.Visible
|
|
21
|
+
;
|
|
22
|
+
|
|
23
|
+
const FLAG_SET_EQUALITY = ShadedGeometryFlags.CastShadow
|
|
24
|
+
| ShadedGeometryFlags.ReceiveShadow
|
|
25
|
+
| ShadedGeometryFlags.DrawMethodLocked
|
|
26
|
+
| ShadedGeometryFlags.Visible
|
|
27
|
+
;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
*
|
|
31
|
+
* @type {Float32Array|mat4}
|
|
32
|
+
*/
|
|
33
|
+
const scratch_m4 = new Float32Array(16);
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @readonly
|
|
37
|
+
* @type {Float32Array}
|
|
38
|
+
*/
|
|
39
|
+
const scratch_ray_0 = new Float32Array(6);
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Represents a primitive 3d object, a combination of a material and geometry
|
|
43
|
+
* This is roughly equivalent to single draw call, note that his is not a hierarchical data structure, if you want that - you will need to combine multiple entities, each with a `ShadedGeometry` component
|
|
44
|
+
*/
|
|
45
|
+
export class ShadedGeometry {
|
|
46
|
+
/**
|
|
47
|
+
* Set when a transform change has been observed but the bounding box and the BVH have
|
|
48
|
+
* not been brought up to date yet. Only ever set under
|
|
49
|
+
* {@link ShadedGeometryFlags.DeferredBoundsUpdate}, and doubles as the "already queued"
|
|
50
|
+
* bit for {@link #bounds_queue}.
|
|
51
|
+
* @type {boolean}
|
|
52
|
+
*/
|
|
53
|
+
#bounds_dirty = false;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Transient, assigned in the system. Where this component parks itself when its bounds
|
|
57
|
+
* go stale under {@link ShadedGeometryFlags.DeferredBoundsUpdate}.
|
|
58
|
+
* @type {DeferredBoundsQueue|null}
|
|
59
|
+
*/
|
|
60
|
+
#bounds_queue = null;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Whatever the running renderer draws geometry from — a `MeshletGeometry` under Shade, and a
|
|
64
|
+
* `Geometry` where the primitive was built rather than loaded.
|
|
65
|
+
* @type {MeshletGeometry|Geometry|BufferGeometry|null}
|
|
66
|
+
*/
|
|
67
|
+
geometry = null;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
*
|
|
71
|
+
* @type {ShadeMaterial|Material|null}
|
|
72
|
+
*/
|
|
73
|
+
material = null;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Optional extra material used for shadowmaps
|
|
77
|
+
* @type {ShadeMaterial|Material|null}
|
|
78
|
+
*/
|
|
79
|
+
depth_material = null;
|
|
80
|
+
|
|
81
|
+
__bvh_leaf = new BvhClient();
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Transient, assigned in the system
|
|
85
|
+
* @type {number}
|
|
86
|
+
* @private
|
|
87
|
+
*/
|
|
88
|
+
__entity = -1;
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Transient, cached for convenience. Associated transform component from the same entity
|
|
92
|
+
* @type {Transform|null}
|
|
93
|
+
* @private
|
|
94
|
+
*/
|
|
95
|
+
__c_transform = null;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* The row a renderer put this primitive in, or `null` while it is in none.
|
|
99
|
+
*
|
|
100
|
+
* **Written by whichever system placed it, and read by whoever needs to know where it ended
|
|
101
|
+
* up** — `MeshSystem` combining the bounds of an expanded model, for one. Same arrangement v1
|
|
102
|
+
* made with `Mesh.mesh`: a component that carries the renderer's own geometry may as well carry
|
|
103
|
+
* the renderer's own handle to it, and one renderer runs at a time.
|
|
104
|
+
*
|
|
105
|
+
* @transient
|
|
106
|
+
* @type {Mesh|null}
|
|
107
|
+
*/
|
|
108
|
+
node = null;
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
*
|
|
112
|
+
* @type {DrawMode|number}
|
|
113
|
+
*/
|
|
114
|
+
mode = DrawMode.Triangles;
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Transient property signifying how to render object, such as using INSTANCED draw
|
|
118
|
+
* @type {number}
|
|
119
|
+
*/
|
|
120
|
+
draw_method = 0;
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
*
|
|
124
|
+
* @type {number}
|
|
125
|
+
*/
|
|
126
|
+
flags = DEFAULT_FLAGS;
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
*
|
|
130
|
+
* @param {number|ShadedGeometryFlags} flag
|
|
131
|
+
* @returns {void}
|
|
132
|
+
*/
|
|
133
|
+
setFlag(flag) {
|
|
134
|
+
this.flags |= flag;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
*
|
|
139
|
+
* @param {number|ShadedGeometryFlags} flag
|
|
140
|
+
* @returns {void}
|
|
141
|
+
*/
|
|
142
|
+
clearFlag(flag) {
|
|
143
|
+
this.flags &= ~flag;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
*
|
|
148
|
+
* @param {number|ShadedGeometryFlags} flag
|
|
149
|
+
* @param {boolean} value
|
|
150
|
+
*/
|
|
151
|
+
writeFlag(flag, value) {
|
|
152
|
+
if (value) {
|
|
153
|
+
this.setFlag(flag);
|
|
154
|
+
} else {
|
|
155
|
+
this.clearFlag(flag);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
*
|
|
161
|
+
* @param {number|ShadedGeometryFlags} flag
|
|
162
|
+
* @returns {boolean}
|
|
163
|
+
*/
|
|
164
|
+
getFlag(flag) {
|
|
165
|
+
return (this.flags & flag) === flag;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
*
|
|
170
|
+
* @return {number}
|
|
171
|
+
*/
|
|
172
|
+
hash() {
|
|
173
|
+
return this.geometry.id
|
|
174
|
+
^ this.material.id
|
|
175
|
+
^ (this.flags & FLAG_SET_EQUALITY)
|
|
176
|
+
^ (this.draw_method << 16)
|
|
177
|
+
^ (this.mode << 12)
|
|
178
|
+
;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
*
|
|
183
|
+
* @param {ShadedGeometry} other
|
|
184
|
+
* @returns {boolean}
|
|
185
|
+
*/
|
|
186
|
+
equals(other) {
|
|
187
|
+
return this.geometry.id === other.geometry.id
|
|
188
|
+
&& this.material.id === other.material.id
|
|
189
|
+
&& this.draw_method === other.draw_method
|
|
190
|
+
&& this.mode === other.mode
|
|
191
|
+
&& (this.flags & FLAG_SET_EQUALITY) === (other.flags & FLAG_SET_EQUALITY)
|
|
192
|
+
&& this.depth_material === other.depth_material
|
|
193
|
+
;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
*
|
|
198
|
+
* @param {ShadedGeometry} other
|
|
199
|
+
*/
|
|
200
|
+
copy(other) {
|
|
201
|
+
this.geometry = other.geometry;
|
|
202
|
+
this.material = other.material;
|
|
203
|
+
this.depth_material = other.depth_material;
|
|
204
|
+
this.draw_method = other.draw_method;
|
|
205
|
+
this.mode = other.mode;
|
|
206
|
+
this.flags = other.flags;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
*
|
|
211
|
+
* @returns {ShadedGeometry}
|
|
212
|
+
*/
|
|
213
|
+
clone() {
|
|
214
|
+
const r = new ShadedGeometry();
|
|
215
|
+
|
|
216
|
+
r.copy(this);
|
|
217
|
+
|
|
218
|
+
return r;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Current cached entity that this component is attached to
|
|
223
|
+
* @return {number}
|
|
224
|
+
*/
|
|
225
|
+
get entity() {
|
|
226
|
+
return this.__entity;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Global transform matrix
|
|
231
|
+
* 4x4 matrix
|
|
232
|
+
* @return {null|number[]}
|
|
233
|
+
*/
|
|
234
|
+
get transform() {
|
|
235
|
+
return this.__c_transform.matrix;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Attach this component to the queue that collects deferred bounds updates.
|
|
240
|
+
* Called by the system when the component enters the BVH.
|
|
241
|
+
* @param {DeferredBoundsQueue} queue
|
|
242
|
+
* @returns {void}
|
|
243
|
+
*/
|
|
244
|
+
bindBoundsQueue(queue) {
|
|
245
|
+
assert.defined(queue, 'queue');
|
|
246
|
+
|
|
247
|
+
this.#bounds_queue = queue;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Called by the system when the component leaves the BVH. Any update parked in the
|
|
252
|
+
* queue is abandoned — the entry is left in place and becomes inert, so unlinking
|
|
253
|
+
* stays O(1).
|
|
254
|
+
* @returns {void}
|
|
255
|
+
*/
|
|
256
|
+
unbindBoundsQueue() {
|
|
257
|
+
this.#bounds_dirty = false;
|
|
258
|
+
this.#bounds_queue = null;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* Recompute the bounding box and push it into the BVH, if a deferred update is pending.
|
|
263
|
+
*
|
|
264
|
+
* This is the single point where a parked update lands; it is driven both by
|
|
265
|
+
* {@link DeferredBoundsQueue.flush} and by any read of the bounding box.
|
|
266
|
+
* @returns {boolean} whether an update was actually pending
|
|
267
|
+
*/
|
|
268
|
+
applyDeferredBoundsUpdate() {
|
|
269
|
+
if (!this.#bounds_dirty) {
|
|
270
|
+
return false;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
this.#bounds_dirty = false;
|
|
274
|
+
|
|
275
|
+
this.update_bounds();
|
|
276
|
+
|
|
277
|
+
this.__bvh_leaf.write_bounds();
|
|
278
|
+
|
|
279
|
+
return true;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
*
|
|
284
|
+
* @param {AABB3} destination
|
|
285
|
+
*/
|
|
286
|
+
getBoundingBox(destination) {
|
|
287
|
+
const node = this.node;
|
|
288
|
+
|
|
289
|
+
if (node !== null) {
|
|
290
|
+
/*
|
|
291
|
+
Placed in a renderer that keeps a world box per row and refreshes it as part of placing
|
|
292
|
+
it. Reading that is not an optimization — the deferred path below computes its box from
|
|
293
|
+
the geometry's own, and only a three `BufferGeometry` has one of those.
|
|
294
|
+
*/
|
|
295
|
+
destination.readFromArray(node.bounding_box);
|
|
296
|
+
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
// settle a pending deferred update, so a read never observes a stale box
|
|
301
|
+
this.applyDeferredBoundsUpdate();
|
|
302
|
+
|
|
303
|
+
const aabb = this.__bvh_leaf.bounds;
|
|
304
|
+
|
|
305
|
+
destination.readFromArray(aabb);
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
*
|
|
310
|
+
* @param {MeshletGeometry|BufferGeometry} geometry
|
|
311
|
+
* @param {ShadeMaterial|Material} material
|
|
312
|
+
* @param {DrawMode} [draw_mode]
|
|
313
|
+
*/
|
|
314
|
+
from(geometry, material, draw_mode = DrawMode.Triangles) {
|
|
315
|
+
this.geometry = geometry;
|
|
316
|
+
this.material = material;
|
|
317
|
+
this.mode = draw_mode;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
*
|
|
322
|
+
* @param {MeshletGeometry|BufferGeometry} geometry
|
|
323
|
+
* @param {ShadeMaterial|Material} material
|
|
324
|
+
* @param {DrawMode} [draw_mode]
|
|
325
|
+
* @return {ShadedGeometry}
|
|
326
|
+
*/
|
|
327
|
+
static from(geometry, material, draw_mode) {
|
|
328
|
+
const r = new ShadedGeometry();
|
|
329
|
+
|
|
330
|
+
r.from(geometry, material, draw_mode);
|
|
331
|
+
|
|
332
|
+
return r;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
/**
|
|
336
|
+
* Change handler subscribed to the entity's {@link Transform} while the component is
|
|
337
|
+
* linked; see {@link ShadedGeometrySystem.link}.
|
|
338
|
+
* @returns {void}
|
|
339
|
+
*/
|
|
340
|
+
updateTransform() {
|
|
341
|
+
if (this.getFlag(ShadedGeometryFlags.DeferredBoundsUpdate)) {
|
|
342
|
+
if (!this.#bounds_dirty) {
|
|
343
|
+
this.#bounds_dirty = true;
|
|
344
|
+
|
|
345
|
+
this.#bounds_queue.add(this);
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
this.update_bounds();
|
|
352
|
+
|
|
353
|
+
this.__bvh_leaf.write_bounds();
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
update_bounds() {
|
|
357
|
+
const geometry = this.geometry;
|
|
358
|
+
|
|
359
|
+
/*
|
|
360
|
+
The box comes off the geometry's own, which is why this is only reachable for a `Geometry`:
|
|
361
|
+
it computes one on demand and remembers it, which is the whole of what
|
|
362
|
+
`GeometryFlags.BoundsNeedUpdate` is for. A `MeshletGeometry` carries its box from the build
|
|
363
|
+
and is read through {@link #node} instead — see `getBoundingBox`.
|
|
364
|
+
*/
|
|
365
|
+
geometry.ensureBounds();
|
|
366
|
+
|
|
367
|
+
array_copy(geometry.bounding_box, 0, scratch_aabb3_array, 0, 6);
|
|
368
|
+
|
|
369
|
+
// transform
|
|
370
|
+
aabb3_matrix4_project(this.__bvh_leaf.bounds, scratch_aabb3_array, this.transform);
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
/**
|
|
374
|
+
* Raycast this primitive's own triangles on the CPU.
|
|
375
|
+
*
|
|
376
|
+
* **Requires a {@link Geometry}** — the vertex arrays themselves. A `MeshletGeometry` keeps its
|
|
377
|
+
* triangles quantized inside meshlet pages, so a `ShadedGeometry` placed by
|
|
378
|
+
* `shade_node_to_entity_composition` cannot be asked this; `geometry_build_from_meshlet_geometry`
|
|
379
|
+
* decodes one, and holding that decode is the caller's business rather than this method's.
|
|
380
|
+
* Picking a whole scene goes through the renderer's own `pick` instead (I-9) — this answers with
|
|
381
|
+
* a surface point on one primitive.
|
|
382
|
+
*
|
|
383
|
+
* @param {SurfacePoint3} contact if found, contact is written here
|
|
384
|
+
* @param {ArrayLike<number>|number[]|Float32Array} ray 6-tuple: [origin_x, origin_y, origin_z, direction_x, direction_y, direction_z]
|
|
385
|
+
* @param {ArrayLike<number>|number[]|Float32Array} transform_matrix4 transform applied to the geometry
|
|
386
|
+
* @returns {boolean}
|
|
387
|
+
*/
|
|
388
|
+
query_raycast_nearest(contact, ray, transform_matrix4) {
|
|
389
|
+
|
|
390
|
+
// get transform in local space
|
|
391
|
+
m4_invert(scratch_m4, transform_matrix4);
|
|
392
|
+
|
|
393
|
+
// transform ray to local space
|
|
394
|
+
if (!ray3_array_apply_matrix4(scratch_ray_0, 0, ray, 0, scratch_m4)) {
|
|
395
|
+
// invalid transform matrix
|
|
396
|
+
return false;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
const hit_found = GeometrySpatialQueryAccelerator.INSTANCE.queryRaycastNearest_array(
|
|
400
|
+
contact,
|
|
401
|
+
this.geometry,
|
|
402
|
+
scratch_ray_0
|
|
403
|
+
);
|
|
404
|
+
|
|
405
|
+
if (!hit_found) {
|
|
406
|
+
return false;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
// transform hit contact into global space
|
|
410
|
+
contact.applyMatrix4(transform_matrix4);
|
|
411
|
+
|
|
412
|
+
return true;
|
|
413
|
+
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
/**
|
|
418
|
+
* @readonly
|
|
419
|
+
* @type {string}
|
|
420
|
+
*/
|
|
421
|
+
ShadedGeometry.typeName = 'ShadedGeometry';
|
|
422
|
+
|
|
423
|
+
/**
|
|
424
|
+
* TODO add serialization support
|
|
425
|
+
* @readonly
|
|
426
|
+
* @type {boolean}
|
|
427
|
+
*/
|
|
428
|
+
ShadedGeometry.serializable = false;
|