@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,101 +1,101 @@
|
|
|
1
|
-
import { assert } from "../../../core/assert.js";
|
|
2
|
-
import { PosePlayback } from "../../../shade/renderer/animation/pose/PosePlayback.js";
|
|
3
|
-
import { pose_evaluate_world } from "../../../shade/renderer/animation/pose/pose_evaluate_world.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* The clip set handed to the evaluator, rebuilt per call from the systems' own entries. Nothing in
|
|
10
|
-
* here outlives the call — the query is on a per-frame path and allocates nothing.
|
|
11
|
-
*
|
|
12
|
-
* @type {PosePlayback[]}
|
|
13
|
-
*/
|
|
14
|
-
const PLAYBACKS = [];
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Where a named part of an entity's model is, in world space.
|
|
18
|
-
*
|
|
19
|
-
* This is the question gameplay asks of an animated model and the only sanctioned way to ask it:
|
|
20
|
-
* where does this projectile leave from, where does that effect anchor, where does the floating UI
|
|
21
|
-
* hang. **The answer is computed, never read back** — GPU readback is a frame late and asynchronous,
|
|
22
|
-
* so an outcome that depended on it would depend on frame pacing, and determinism and replay would
|
|
23
|
-
* go with it
|
|
24
|
-
*
|
|
25
|
-
* The pose is {@link pose_evaluate_world} over the clips the animation systems are driving: a pure
|
|
26
|
-
* function of (clip set, time, weights), off the same clock the renderer is written from, which is
|
|
27
|
-
* what keeps a socket on the mesh that is drawn.
|
|
28
|
-
*
|
|
29
|
-
* The result carries both its matrix and its components.
|
|
30
|
-
*
|
|
31
|
-
* @param {Transform64} result
|
|
32
|
-
* @param {EntityManager} entity_manager
|
|
33
|
-
* @param {number} entity
|
|
34
|
-
* @param {string} node_name name the asset gave the node — a bone, a socket's bone, an effector
|
|
35
|
-
* @returns {boolean} `false` when there is no such node to answer about: no mesh system is
|
|
36
|
-
* registered, the model has not loaded yet, the entity has none, or the name is not in it. None of
|
|
37
|
-
* the four is an error
|
|
38
|
-
*/
|
|
39
|
-
export function query_entity_node_world_pose(result, entity_manager, entity, node_name) {
|
|
40
|
-
assert.defined(result, 'result');
|
|
41
|
-
assert.defined(entity_manager, 'entity_manager');
|
|
42
|
-
assert.isNonNegativeInteger(entity, 'entity');
|
|
43
|
-
assert.isString(node_name, 'node_name');
|
|
44
|
-
|
|
45
|
-
const meshes = entity_manager.getSystem(
|
|
46
|
-
|
|
47
|
-
if (meshes === null) {
|
|
48
|
-
// nothing draws models here, so nothing holds one to answer about
|
|
49
|
-
return false;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const instance = meshes.instance_of(entity);
|
|
53
|
-
|
|
54
|
-
if (instance === null) {
|
|
55
|
-
return false;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
const node = instance.nodes.get(node_name);
|
|
59
|
-
|
|
60
|
-
if (node === undefined) {
|
|
61
|
-
return false;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
const playbacks = PLAYBACKS;
|
|
65
|
-
|
|
66
|
-
playbacks.length = 0;
|
|
67
|
-
|
|
68
|
-
write_playbacks(playbacks, entity_manager, entity);
|
|
69
|
-
|
|
70
|
-
pose_evaluate_world(result, node, playbacks);
|
|
71
|
-
|
|
72
|
-
playbacks.length = 0;
|
|
73
|
-
|
|
74
|
-
return true;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Collect what every animation driver is playing on the entity.
|
|
79
|
-
*
|
|
80
|
-
* Both are asked because either may be the one driving it — a combat unit runs a state machine, a
|
|
81
|
-
* building runs a clip list — and an entity has one of them, so the two sets do not overlap in
|
|
82
|
-
* practice. What they hand back is one entry per clip of the model, silent clips included, because
|
|
83
|
-
* that is what the GPU's accumulator is summing.
|
|
84
|
-
*
|
|
85
|
-
* @param {PosePlayback[]} target
|
|
86
|
-
* @param {EntityManager} entity_manager
|
|
87
|
-
* @param {number} entity
|
|
88
|
-
*/
|
|
89
|
-
function write_playbacks(target, entity_manager, entity) {
|
|
90
|
-
const graphs = entity_manager.getSystem(
|
|
91
|
-
|
|
92
|
-
if (graphs !== null) {
|
|
93
|
-
graphs.write_pose_playbacks(target, entity);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
const clips = entity_manager.getSystem(
|
|
97
|
-
|
|
98
|
-
if (clips !== null) {
|
|
99
|
-
clips.write_pose_playbacks(target, entity);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
1
|
+
import { assert } from "../../../core/assert.js";
|
|
2
|
+
import { PosePlayback } from "../../../shade/renderer/animation/pose/PosePlayback.js";
|
|
3
|
+
import { pose_evaluate_world } from "../../../shade/renderer/animation/pose/pose_evaluate_world.js";
|
|
4
|
+
import { AnimationGraphSystem } from "../AnimationGraphSystem.js";
|
|
5
|
+
import { AnimationSystem } from "../AnimationSystem.js";
|
|
6
|
+
import { MeshSystem } from "../MeshSystem.js";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* The clip set handed to the evaluator, rebuilt per call from the systems' own entries. Nothing in
|
|
10
|
+
* here outlives the call — the query is on a per-frame path and allocates nothing.
|
|
11
|
+
*
|
|
12
|
+
* @type {PosePlayback[]}
|
|
13
|
+
*/
|
|
14
|
+
const PLAYBACKS = [];
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Where a named part of an entity's model is, in world space.
|
|
18
|
+
*
|
|
19
|
+
* This is the question gameplay asks of an animated model and the only sanctioned way to ask it:
|
|
20
|
+
* where does this projectile leave from, where does that effect anchor, where does the floating UI
|
|
21
|
+
* hang. **The answer is computed, never read back** — GPU readback is a frame late and asynchronous,
|
|
22
|
+
* so an outcome that depended on it would depend on frame pacing, and determinism and replay would
|
|
23
|
+
* go with it: no GPU readback on a gameplay-affecting path.
|
|
24
|
+
*
|
|
25
|
+
* The pose is {@link pose_evaluate_world} over the clips the animation systems are driving: a pure
|
|
26
|
+
* function of (clip set, time, weights), off the same clock the renderer is written from, which is
|
|
27
|
+
* what keeps a socket on the mesh that is drawn.
|
|
28
|
+
*
|
|
29
|
+
* The result carries both its matrix and its components.
|
|
30
|
+
*
|
|
31
|
+
* @param {Transform64} result
|
|
32
|
+
* @param {EntityManager} entity_manager
|
|
33
|
+
* @param {number} entity
|
|
34
|
+
* @param {string} node_name name the asset gave the node — a bone, a socket's bone, an effector
|
|
35
|
+
* @returns {boolean} `false` when there is no such node to answer about: no mesh system is
|
|
36
|
+
* registered, the model has not loaded yet, the entity has none, or the name is not in it. None of
|
|
37
|
+
* the four is an error
|
|
38
|
+
*/
|
|
39
|
+
export function query_entity_node_world_pose(result, entity_manager, entity, node_name) {
|
|
40
|
+
assert.defined(result, 'result');
|
|
41
|
+
assert.defined(entity_manager, 'entity_manager');
|
|
42
|
+
assert.isNonNegativeInteger(entity, 'entity');
|
|
43
|
+
assert.isString(node_name, 'node_name');
|
|
44
|
+
|
|
45
|
+
const meshes = entity_manager.getSystem(MeshSystem);
|
|
46
|
+
|
|
47
|
+
if (meshes === null) {
|
|
48
|
+
// nothing draws models here, so nothing holds one to answer about
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const instance = meshes.instance_of(entity);
|
|
53
|
+
|
|
54
|
+
if (instance === null) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const node = instance.nodes.get(node_name);
|
|
59
|
+
|
|
60
|
+
if (node === undefined) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const playbacks = PLAYBACKS;
|
|
65
|
+
|
|
66
|
+
playbacks.length = 0;
|
|
67
|
+
|
|
68
|
+
write_playbacks(playbacks, entity_manager, entity);
|
|
69
|
+
|
|
70
|
+
pose_evaluate_world(result, node, playbacks);
|
|
71
|
+
|
|
72
|
+
playbacks.length = 0;
|
|
73
|
+
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Collect what every animation driver is playing on the entity.
|
|
79
|
+
*
|
|
80
|
+
* Both are asked because either may be the one driving it — a combat unit runs a state machine, a
|
|
81
|
+
* building runs a clip list — and an entity has one of them, so the two sets do not overlap in
|
|
82
|
+
* practice. What they hand back is one entry per clip of the model, silent clips included, because
|
|
83
|
+
* that is what the GPU's accumulator is summing.
|
|
84
|
+
*
|
|
85
|
+
* @param {PosePlayback[]} target
|
|
86
|
+
* @param {EntityManager} entity_manager
|
|
87
|
+
* @param {number} entity
|
|
88
|
+
*/
|
|
89
|
+
function write_playbacks(target, entity_manager, entity) {
|
|
90
|
+
const graphs = entity_manager.getSystem(AnimationGraphSystem);
|
|
91
|
+
|
|
92
|
+
if (graphs !== null) {
|
|
93
|
+
graphs.write_pose_playbacks(target, entity);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const clips = entity_manager.getSystem(AnimationSystem);
|
|
97
|
+
|
|
98
|
+
if (clips !== null) {
|
|
99
|
+
clips.write_pose_playbacks(target, entity);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
@@ -3,19 +3,19 @@
|
|
|
3
3
|
*
|
|
4
4
|
* The four steps are each somebody's: where the model is (`shade_bundle_bounds`), how to frame it
|
|
5
5
|
* (`model_preview_framing`), what a scene of one model looks like (`make_model_preview_scene`), and
|
|
6
|
-
* how a frame becomes pixels (`
|
|
6
|
+
* how a frame becomes pixels (`GraphicsEngine.render_to_sampler`). This is only the order.
|
|
7
7
|
*
|
|
8
8
|
* **A model with nothing to draw has no picture, and that is data rather than a fault**: a glTF of
|
|
9
9
|
* empties, or one whose every mesh is skinned — a preview scene registers no skin, so a skinned
|
|
10
10
|
* mesh is not in it. The answer then is `null`, and a caller showing icons shows none for that
|
|
11
11
|
* asset rather than a blank square that reads as a broken renderer.
|
|
12
12
|
*
|
|
13
|
-
* @param {
|
|
13
|
+
* @param {GraphicsEngine} graphics
|
|
14
14
|
* @param {SceneBundle} bundle
|
|
15
15
|
* @param {number} width texels
|
|
16
16
|
* @param {number} height texels
|
|
17
17
|
* @param {number} [margin] fraction of the frame's height left clear around the model
|
|
18
18
|
* @returns {Promise<Sampler2D|null>}
|
|
19
19
|
*/
|
|
20
|
-
export function make_model_thumbnail(graphics:
|
|
20
|
+
export function make_model_thumbnail(graphics: GraphicsEngine, bundle: SceneBundle, width: number, height: number, margin?: number): Promise<Sampler2D | null>;
|
|
21
21
|
//# sourceMappingURL=make_model_thumbnail.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"make_model_thumbnail.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/preview/make_model_thumbnail.js"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;;;GAkBG;AACH,
|
|
1
|
+
{"version":3,"file":"make_model_thumbnail.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/preview/make_model_thumbnail.js"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;;;GAkBG;AACH,2FALW,MAAM,UACN,MAAM,WACN,MAAM,GACJ,QAAQ,YAAU,IAAI,CAAC,CAuBnC"}
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
import { assert } from "../../../core/assert.js";
|
|
2
|
-
import { AABB3 } from "../../../core/geom/3d/aabb/AABB3.js";
|
|
3
|
-
import { shade_bundle_bounds } from "../shade_bundle_bounds.js";
|
|
4
|
-
import { make_model_preview_scene, MODEL_PREVIEW_FOV } from "./make_model_preview_scene.js";
|
|
5
|
-
import { model_preview_framing } from "./model_preview_framing.js";
|
|
6
|
-
import { ModelPreviewFraming } from "./ModelPreviewFraming.js";
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* A picture of a loaded model, framed on itself.
|
|
10
|
-
*
|
|
11
|
-
* The four steps are each somebody's: where the model is (`shade_bundle_bounds`), how to frame it
|
|
12
|
-
* (`model_preview_framing`), what a scene of one model looks like (`make_model_preview_scene`), and
|
|
13
|
-
* how a frame becomes pixels (`
|
|
14
|
-
*
|
|
15
|
-
* **A model with nothing to draw has no picture, and that is data rather than a fault**: a glTF of
|
|
16
|
-
* empties, or one whose every mesh is skinned — a preview scene registers no skin, so a skinned
|
|
17
|
-
* mesh is not in it. The answer then is `null`, and a caller showing icons shows none for that
|
|
18
|
-
* asset rather than a blank square that reads as a broken renderer.
|
|
19
|
-
*
|
|
20
|
-
* @param {
|
|
21
|
-
* @param {SceneBundle} bundle
|
|
22
|
-
* @param {number} width texels
|
|
23
|
-
* @param {number} height texels
|
|
24
|
-
* @param {number} [margin] fraction of the frame's height left clear around the model
|
|
25
|
-
* @returns {Promise<Sampler2D|null>}
|
|
26
|
-
*/
|
|
27
|
-
export async function make_model_thumbnail(graphics, bundle, width, height, margin = 0) {
|
|
28
|
-
assert.defined(graphics, 'graphics');
|
|
29
|
-
assert.defined(bundle, 'bundle');
|
|
30
|
-
|
|
31
|
-
// held locally rather than in module scratch: a caller may have several thumbnails in flight,
|
|
32
|
-
// and what each of them is framing must not be what the last one was
|
|
33
|
-
const bounds = new AABB3();
|
|
34
|
-
|
|
35
|
-
if (!shade_bundle_bounds(bounds, bundle)) {
|
|
36
|
-
return null;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const framing = model_preview_framing(new ModelPreviewFraming(), bounds, MODEL_PREVIEW_FOV, margin);
|
|
40
|
-
|
|
41
|
-
const { scene, camera, drawn } = make_model_preview_scene(bundle, framing, width / height);
|
|
42
|
-
|
|
43
|
-
if (drawn === 0) {
|
|
44
|
-
return null;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
return graphics.render_to_sampler(scene, camera, width, height);
|
|
48
|
-
}
|
|
1
|
+
import { assert } from "../../../core/assert.js";
|
|
2
|
+
import { AABB3 } from "../../../core/geom/3d/aabb/AABB3.js";
|
|
3
|
+
import { shade_bundle_bounds } from "../shade_bundle_bounds.js";
|
|
4
|
+
import { make_model_preview_scene, MODEL_PREVIEW_FOV } from "./make_model_preview_scene.js";
|
|
5
|
+
import { model_preview_framing } from "./model_preview_framing.js";
|
|
6
|
+
import { ModelPreviewFraming } from "./ModelPreviewFraming.js";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* A picture of a loaded model, framed on itself.
|
|
10
|
+
*
|
|
11
|
+
* The four steps are each somebody's: where the model is (`shade_bundle_bounds`), how to frame it
|
|
12
|
+
* (`model_preview_framing`), what a scene of one model looks like (`make_model_preview_scene`), and
|
|
13
|
+
* how a frame becomes pixels (`GraphicsEngine.render_to_sampler`). This is only the order.
|
|
14
|
+
*
|
|
15
|
+
* **A model with nothing to draw has no picture, and that is data rather than a fault**: a glTF of
|
|
16
|
+
* empties, or one whose every mesh is skinned — a preview scene registers no skin, so a skinned
|
|
17
|
+
* mesh is not in it. The answer then is `null`, and a caller showing icons shows none for that
|
|
18
|
+
* asset rather than a blank square that reads as a broken renderer.
|
|
19
|
+
*
|
|
20
|
+
* @param {GraphicsEngine} graphics
|
|
21
|
+
* @param {SceneBundle} bundle
|
|
22
|
+
* @param {number} width texels
|
|
23
|
+
* @param {number} height texels
|
|
24
|
+
* @param {number} [margin] fraction of the frame's height left clear around the model
|
|
25
|
+
* @returns {Promise<Sampler2D|null>}
|
|
26
|
+
*/
|
|
27
|
+
export async function make_model_thumbnail(graphics, bundle, width, height, margin = 0) {
|
|
28
|
+
assert.defined(graphics, 'graphics');
|
|
29
|
+
assert.defined(bundle, 'bundle');
|
|
30
|
+
|
|
31
|
+
// held locally rather than in module scratch: a caller may have several thumbnails in flight,
|
|
32
|
+
// and what each of them is framing must not be what the last one was
|
|
33
|
+
const bounds = new AABB3();
|
|
34
|
+
|
|
35
|
+
if (!shade_bundle_bounds(bounds, bundle)) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const framing = model_preview_framing(new ModelPreviewFraming(), bounds, MODEL_PREVIEW_FOV, margin);
|
|
40
|
+
|
|
41
|
+
const { scene, camera, drawn } = make_model_preview_scene(bundle, framing, width / height);
|
|
42
|
+
|
|
43
|
+
if (drawn === 0) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return graphics.render_to_sampler(scene, camera, width, height);
|
|
48
|
+
}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* where it used to be.
|
|
7
7
|
*
|
|
8
8
|
* `x` and `y` are **clip-space**, in −1…1 with +Y up, which is what
|
|
9
|
-
* `
|
|
9
|
+
* `GraphicsEngine.normalizeViewportPoint` produces from pixels.
|
|
10
10
|
*
|
|
11
11
|
* The origin is the camera's own position, which is right for a perspective camera and is also what
|
|
12
12
|
* the three-based engine did for both kinds. A true orthographic pick wants parallel rays from the
|
|
@@ -1,77 +1,77 @@
|
|
|
1
|
-
import { m4_invert } from "../../core/geom/3d/mat4/m4_invert.js";
|
|
2
|
-
import { v3_matrix4_multiply } from "../../core/geom/vec3/v3_matrix4_multiply.js";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* @type {Float32Array}
|
|
6
|
-
*/
|
|
7
|
-
const SCRATCH_INVERSE = new Float32Array(16);
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* @type {Float32Array}
|
|
11
|
-
*/
|
|
12
|
-
const SCRATCH_CLIP = new Float32Array(3);
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* @type {Float32Array}
|
|
16
|
-
*/
|
|
17
|
-
const SCRATCH_WORLD = new Float32Array(3);
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Where along the ray the unprojected point is taken.
|
|
21
|
-
*
|
|
22
|
-
* Any depth strictly inside the frustum names a point on the same ray, so this only has to avoid the
|
|
23
|
-
* two ends. It matters that it avoids them: the perspective camera projects with an **infinite
|
|
24
|
-
* reverse-Z**, where clip depth 0 is the far plane at infinity and unprojecting it divides by zero.
|
|
25
|
-
* Half-way is finite under that projection and under a conventional one alike, which is what keeps
|
|
26
|
-
* this a single expression rather than a branch on {@link Camera#isReverseZ}.
|
|
27
|
-
*
|
|
28
|
-
* @type {number}
|
|
29
|
-
*/
|
|
30
|
-
const SAMPLE_DEPTH = 0.5;
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* A ray from the eye through a point on the viewport, in world space.
|
|
34
|
-
*
|
|
35
|
-
* The camera's matrices are read as they stand, so they have to be current — `camera.update()` is
|
|
36
|
-
* what composes the view-projection this inverts, and a camera moved since then produces a ray for
|
|
37
|
-
* where it used to be.
|
|
38
|
-
*
|
|
39
|
-
* `x` and `y` are **clip-space**, in −1…1 with +Y up, which is what
|
|
40
|
-
* `
|
|
41
|
-
*
|
|
42
|
-
* The origin is the camera's own position, which is right for a perspective camera and is also what
|
|
43
|
-
* the three-based engine did for both kinds. A true orthographic pick wants parallel rays from the
|
|
44
|
-
* near plane instead; nothing asks for one, and this would quietly answer the perspective question if
|
|
45
|
-
* something did.
|
|
46
|
-
*
|
|
47
|
-
* @param {Camera} camera Shade's
|
|
48
|
-
* @param {number} x clip space, −1…1
|
|
49
|
-
* @param {number} y clip space, −1…1, +Y up
|
|
50
|
-
* @param {Vector3} out_source written with the ray's origin
|
|
51
|
-
* @param {Vector3} out_direction written with a unit direction
|
|
52
|
-
*/
|
|
53
|
-
export function shade_camera_projection_ray(camera, x, y, out_source, out_direction) {
|
|
54
|
-
m4_invert(SCRATCH_INVERSE, camera.view_projection_matrix);
|
|
55
|
-
|
|
56
|
-
SCRATCH_CLIP[0] = x;
|
|
57
|
-
SCRATCH_CLIP[1] = y;
|
|
58
|
-
SCRATCH_CLIP[2] = SAMPLE_DEPTH;
|
|
59
|
-
|
|
60
|
-
v3_matrix4_multiply(SCRATCH_WORLD, 0, SCRATCH_CLIP, 0, SCRATCH_INVERSE);
|
|
61
|
-
|
|
62
|
-
const position = camera.transform.position;
|
|
63
|
-
|
|
64
|
-
const origin_x = position.x;
|
|
65
|
-
const origin_y = position.y;
|
|
66
|
-
const origin_z = position.z;
|
|
67
|
-
|
|
68
|
-
out_source.set(origin_x, origin_y, origin_z);
|
|
69
|
-
|
|
70
|
-
out_direction.set(
|
|
71
|
-
SCRATCH_WORLD[0] - origin_x,
|
|
72
|
-
SCRATCH_WORLD[1] - origin_y,
|
|
73
|
-
SCRATCH_WORLD[2] - origin_z
|
|
74
|
-
);
|
|
75
|
-
|
|
76
|
-
out_direction.normalize();
|
|
77
|
-
}
|
|
1
|
+
import { m4_invert } from "../../core/geom/3d/mat4/m4_invert.js";
|
|
2
|
+
import { v3_matrix4_multiply } from "../../core/geom/vec3/v3_matrix4_multiply.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @type {Float32Array}
|
|
6
|
+
*/
|
|
7
|
+
const SCRATCH_INVERSE = new Float32Array(16);
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @type {Float32Array}
|
|
11
|
+
*/
|
|
12
|
+
const SCRATCH_CLIP = new Float32Array(3);
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @type {Float32Array}
|
|
16
|
+
*/
|
|
17
|
+
const SCRATCH_WORLD = new Float32Array(3);
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Where along the ray the unprojected point is taken.
|
|
21
|
+
*
|
|
22
|
+
* Any depth strictly inside the frustum names a point on the same ray, so this only has to avoid the
|
|
23
|
+
* two ends. It matters that it avoids them: the perspective camera projects with an **infinite
|
|
24
|
+
* reverse-Z**, where clip depth 0 is the far plane at infinity and unprojecting it divides by zero.
|
|
25
|
+
* Half-way is finite under that projection and under a conventional one alike, which is what keeps
|
|
26
|
+
* this a single expression rather than a branch on {@link Camera#isReverseZ}.
|
|
27
|
+
*
|
|
28
|
+
* @type {number}
|
|
29
|
+
*/
|
|
30
|
+
const SAMPLE_DEPTH = 0.5;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* A ray from the eye through a point on the viewport, in world space.
|
|
34
|
+
*
|
|
35
|
+
* The camera's matrices are read as they stand, so they have to be current — `camera.update()` is
|
|
36
|
+
* what composes the view-projection this inverts, and a camera moved since then produces a ray for
|
|
37
|
+
* where it used to be.
|
|
38
|
+
*
|
|
39
|
+
* `x` and `y` are **clip-space**, in −1…1 with +Y up, which is what
|
|
40
|
+
* `GraphicsEngine.normalizeViewportPoint` produces from pixels.
|
|
41
|
+
*
|
|
42
|
+
* The origin is the camera's own position, which is right for a perspective camera and is also what
|
|
43
|
+
* the three-based engine did for both kinds. A true orthographic pick wants parallel rays from the
|
|
44
|
+
* near plane instead; nothing asks for one, and this would quietly answer the perspective question if
|
|
45
|
+
* something did.
|
|
46
|
+
*
|
|
47
|
+
* @param {Camera} camera Shade's
|
|
48
|
+
* @param {number} x clip space, −1…1
|
|
49
|
+
* @param {number} y clip space, −1…1, +Y up
|
|
50
|
+
* @param {Vector3} out_source written with the ray's origin
|
|
51
|
+
* @param {Vector3} out_direction written with a unit direction
|
|
52
|
+
*/
|
|
53
|
+
export function shade_camera_projection_ray(camera, x, y, out_source, out_direction) {
|
|
54
|
+
m4_invert(SCRATCH_INVERSE, camera.view_projection_matrix);
|
|
55
|
+
|
|
56
|
+
SCRATCH_CLIP[0] = x;
|
|
57
|
+
SCRATCH_CLIP[1] = y;
|
|
58
|
+
SCRATCH_CLIP[2] = SAMPLE_DEPTH;
|
|
59
|
+
|
|
60
|
+
v3_matrix4_multiply(SCRATCH_WORLD, 0, SCRATCH_CLIP, 0, SCRATCH_INVERSE);
|
|
61
|
+
|
|
62
|
+
const position = camera.transform.position;
|
|
63
|
+
|
|
64
|
+
const origin_x = position.x;
|
|
65
|
+
const origin_y = position.y;
|
|
66
|
+
const origin_z = position.z;
|
|
67
|
+
|
|
68
|
+
out_source.set(origin_x, origin_y, origin_z);
|
|
69
|
+
|
|
70
|
+
out_direction.set(
|
|
71
|
+
SCRATCH_WORLD[0] - origin_x,
|
|
72
|
+
SCRATCH_WORLD[1] - origin_y,
|
|
73
|
+
SCRATCH_WORLD[2] - origin_z
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
out_direction.normalize();
|
|
77
|
+
}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
*
|
|
13
13
|
* **Geometry and material are shared, not copied.** Two entities placing the same model name the
|
|
14
14
|
* same `MeshletGeometry` and the same `ShadeMaterial`; what is per-entity is the row each one gets
|
|
15
|
-
* in the scene, which is `
|
|
15
|
+
* in the scene, which is `ShadedGeometrySystem`'s business. That is the whole reason a static model
|
|
16
16
|
* needs no clone of the bundle at all.
|
|
17
17
|
*
|
|
18
18
|
* **A skinned mesh is not expanded, and that is a boundary rather than an omission.** Its vertices
|