@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,146 +1,146 @@
|
|
|
1
|
-
import { DEG_TO_RAD } from "../../../src/core/math/DEG_TO_RAD.js";
|
|
2
|
-
import { v3_quaternion_apply } from "../../../src/core/geom/vec3/v3_quaternion_apply.js";
|
|
3
|
-
import { Transform } from "../../../src/engine/ecs/transform/Transform.js";
|
|
4
|
-
import { Camera } from "../../../src/engine/graphics/ecs/camera/Camera.js";
|
|
5
|
-
import { Gizmo } from "../../../src/engine/graphics/render/gizmo/Gizmo.js";
|
|
6
|
-
import { entity_is_editor_owned, SymbolicDisplay } from "./SymbolicDisplay.js";
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* @type {number[]}
|
|
10
|
-
*/
|
|
11
|
-
const CAMERA_COLOR = [0.4, 0.9, 1, 1];
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Which corners are joined: the near rectangle, the far one, and the four edges between them.
|
|
15
|
-
*
|
|
16
|
-
* @type {number[]}
|
|
17
|
-
*/
|
|
18
|
-
const EDGES = [
|
|
19
|
-
0, 1, 1, 2, 2, 3, 3, 0,
|
|
20
|
-
4, 5, 5, 6, 6, 7, 7, 4,
|
|
21
|
-
0, 4, 1, 5, 2, 6, 3, 7
|
|
22
|
-
];
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Eight frustum corners in world space, near plane first.
|
|
26
|
-
*
|
|
27
|
-
* @type {Float32Array}
|
|
28
|
-
*/
|
|
29
|
-
const corners = new Float32Array(24);
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* @type {Float32Array}
|
|
33
|
-
*/
|
|
34
|
-
const from = new Float32Array(3);
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* @type {Float32Array}
|
|
38
|
-
*/
|
|
39
|
-
const to = new Float32Array(3);
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* The two depths the corners are taken at, near then far.
|
|
43
|
-
*
|
|
44
|
-
* @type {Float64Array}
|
|
45
|
-
*/
|
|
46
|
-
const depths = new Float64Array(2);
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* The volume a camera entity can see.
|
|
50
|
-
*
|
|
51
|
-
* **Built from the component rather than from a renderer's camera object.** A camera entity has no
|
|
52
|
-
* renderer object of its own, which is why the three `CameraHelper` this replaces could not survive
|
|
53
|
-
* the port; everything the frustum needs — field of view, the two clip planes — is on the component,
|
|
54
|
-
* and where the camera is and which way it faces is its `Transform`.
|
|
55
|
-
* The one thing that is not is the aspect ratio, which belongs to the frame rather than to the
|
|
56
|
-
* camera: it is the viewport's, exactly as the renderer's own is.
|
|
57
|
-
*
|
|
58
|
-
* **Perspective always, because that is what gets drawn.** `Camera.projectionType` carries an
|
|
59
|
-
* orthographic option and no renderer in the program reads it — `
|
|
60
|
-
* view and the clip planes and nothing else — so a symbol that branched on it would be drawing a
|
|
61
|
-
* projection the game cannot render.
|
|
62
|
-
*
|
|
63
|
-
* The transform's scale is deliberately not applied. A camera has no size, and a scaled entity
|
|
64
|
-
* carrying one still sees exactly as far as its clip planes say.
|
|
65
|
-
*
|
|
66
|
-
* @see SymbolicDisplay
|
|
67
|
-
*/
|
|
68
|
-
export class CameraSymbolicDisplay extends SymbolicDisplay {
|
|
69
|
-
/**
|
|
70
|
-
* Record a frustum per camera entity.
|
|
71
|
-
*
|
|
72
|
-
* The engine's viewport is expected to have a size: `preRender` is dispatched from inside a
|
|
73
|
-
* frame, and a frame is not drawn into a collapsed viewport at all.
|
|
74
|
-
*
|
|
75
|
-
* @param {EntityComponentDataset} dataset
|
|
76
|
-
*/
|
|
77
|
-
record(dataset) {
|
|
78
|
-
const viewport = this.engine.graphics.viewport.size;
|
|
79
|
-
const aspect = viewport.x / viewport.y;
|
|
80
|
-
|
|
81
|
-
Gizmo.color = CAMERA_COLOR;
|
|
82
|
-
|
|
83
|
-
dataset.traverseEntities([Camera, Transform], (camera, transform, entity) => {
|
|
84
|
-
if (entity_is_editor_owned(dataset, entity)) {
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
this.#write_corners(camera, transform, aspect);
|
|
89
|
-
|
|
90
|
-
for (let i = 0; i < 12; i++) {
|
|
91
|
-
const a = EDGES[i * 2] * 3;
|
|
92
|
-
const b = EDGES[i * 2 + 1] * 3;
|
|
93
|
-
|
|
94
|
-
from[0] = corners[a];
|
|
95
|
-
from[1] = corners[a + 1];
|
|
96
|
-
from[2] = corners[a + 2];
|
|
97
|
-
|
|
98
|
-
to[0] = corners[b];
|
|
99
|
-
to[1] = corners[b + 1];
|
|
100
|
-
to[2] = corners[b + 2];
|
|
101
|
-
|
|
102
|
-
Gizmo.draw_line(from, to);
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* @param {Camera} camera
|
|
109
|
-
* @param {Transform} transform
|
|
110
|
-
* @param {number} aspect
|
|
111
|
-
*/
|
|
112
|
-
#write_corners(camera, transform, aspect) {
|
|
113
|
-
const tangent = Math.tan(camera.fov.getValue() * DEG_TO_RAD / 2);
|
|
114
|
-
|
|
115
|
-
const rotation = transform.rotation;
|
|
116
|
-
const position = transform.position;
|
|
117
|
-
|
|
118
|
-
// near plane first, then far, each anticlockwise from the top right as the camera sees it
|
|
119
|
-
depths[0] = camera.clip_near;
|
|
120
|
-
depths[1] = camera.clip_far;
|
|
121
|
-
|
|
122
|
-
for (let plane = 0; plane < 2; plane++) {
|
|
123
|
-
const depth = depths[plane];
|
|
124
|
-
|
|
125
|
-
const half_height = depth * tangent;
|
|
126
|
-
const half_width = half_height * aspect;
|
|
127
|
-
|
|
128
|
-
for (let corner = 0; corner < 4; corner++) {
|
|
129
|
-
const x = (corner === 0 || corner === 3) ? half_width : -half_width;
|
|
130
|
-
const y = (corner === 0 || corner === 1) ? half_height : -half_height;
|
|
131
|
-
|
|
132
|
-
const address = (plane * 4 + corner) * 3;
|
|
133
|
-
|
|
134
|
-
v3_quaternion_apply(
|
|
135
|
-
corners, address,
|
|
136
|
-
x, y, depth,
|
|
137
|
-
rotation.x, rotation.y, rotation.z, rotation.w
|
|
138
|
-
);
|
|
139
|
-
|
|
140
|
-
corners[address] += position.x;
|
|
141
|
-
corners[address + 1] += position.y;
|
|
142
|
-
corners[address + 2] += position.z;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
}
|
|
1
|
+
import { DEG_TO_RAD } from "../../../src/core/math/DEG_TO_RAD.js";
|
|
2
|
+
import { v3_quaternion_apply } from "../../../src/core/geom/vec3/v3_quaternion_apply.js";
|
|
3
|
+
import { Transform } from "../../../src/engine/ecs/transform/Transform.js";
|
|
4
|
+
import { Camera } from "../../../src/engine/graphics/ecs/camera/Camera.js";
|
|
5
|
+
import { Gizmo } from "../../../src/engine/graphics/render/gizmo/Gizmo.js";
|
|
6
|
+
import { entity_is_editor_owned, SymbolicDisplay } from "./SymbolicDisplay.js";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @type {number[]}
|
|
10
|
+
*/
|
|
11
|
+
const CAMERA_COLOR = [0.4, 0.9, 1, 1];
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Which corners are joined: the near rectangle, the far one, and the four edges between them.
|
|
15
|
+
*
|
|
16
|
+
* @type {number[]}
|
|
17
|
+
*/
|
|
18
|
+
const EDGES = [
|
|
19
|
+
0, 1, 1, 2, 2, 3, 3, 0,
|
|
20
|
+
4, 5, 5, 6, 6, 7, 7, 4,
|
|
21
|
+
0, 4, 1, 5, 2, 6, 3, 7
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Eight frustum corners in world space, near plane first.
|
|
26
|
+
*
|
|
27
|
+
* @type {Float32Array}
|
|
28
|
+
*/
|
|
29
|
+
const corners = new Float32Array(24);
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @type {Float32Array}
|
|
33
|
+
*/
|
|
34
|
+
const from = new Float32Array(3);
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @type {Float32Array}
|
|
38
|
+
*/
|
|
39
|
+
const to = new Float32Array(3);
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The two depths the corners are taken at, near then far.
|
|
43
|
+
*
|
|
44
|
+
* @type {Float64Array}
|
|
45
|
+
*/
|
|
46
|
+
const depths = new Float64Array(2);
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* The volume a camera entity can see.
|
|
50
|
+
*
|
|
51
|
+
* **Built from the component rather than from a renderer's camera object.** A camera entity has no
|
|
52
|
+
* renderer object of its own, which is why the three `CameraHelper` this replaces could not survive
|
|
53
|
+
* the port; everything the frustum needs — field of view, the two clip planes — is on the component,
|
|
54
|
+
* and where the camera is and which way it faces is its `Transform`.
|
|
55
|
+
* The one thing that is not is the aspect ratio, which belongs to the frame rather than to the
|
|
56
|
+
* camera: it is the viewport's, exactly as the renderer's own is.
|
|
57
|
+
*
|
|
58
|
+
* **Perspective always, because that is what gets drawn.** `Camera.projectionType` carries an
|
|
59
|
+
* orthographic option and no renderer in the program reads it — `CameraSystem` copies the field of
|
|
60
|
+
* view and the clip planes and nothing else — so a symbol that branched on it would be drawing a
|
|
61
|
+
* projection the game cannot render.
|
|
62
|
+
*
|
|
63
|
+
* The transform's scale is deliberately not applied. A camera has no size, and a scaled entity
|
|
64
|
+
* carrying one still sees exactly as far as its clip planes say.
|
|
65
|
+
*
|
|
66
|
+
* @see SymbolicDisplay
|
|
67
|
+
*/
|
|
68
|
+
export class CameraSymbolicDisplay extends SymbolicDisplay {
|
|
69
|
+
/**
|
|
70
|
+
* Record a frustum per camera entity.
|
|
71
|
+
*
|
|
72
|
+
* The engine's viewport is expected to have a size: `preRender` is dispatched from inside a
|
|
73
|
+
* frame, and a frame is not drawn into a collapsed viewport at all.
|
|
74
|
+
*
|
|
75
|
+
* @param {EntityComponentDataset} dataset
|
|
76
|
+
*/
|
|
77
|
+
record(dataset) {
|
|
78
|
+
const viewport = this.engine.graphics.viewport.size;
|
|
79
|
+
const aspect = viewport.x / viewport.y;
|
|
80
|
+
|
|
81
|
+
Gizmo.color = CAMERA_COLOR;
|
|
82
|
+
|
|
83
|
+
dataset.traverseEntities([Camera, Transform], (camera, transform, entity) => {
|
|
84
|
+
if (entity_is_editor_owned(dataset, entity)) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
this.#write_corners(camera, transform, aspect);
|
|
89
|
+
|
|
90
|
+
for (let i = 0; i < 12; i++) {
|
|
91
|
+
const a = EDGES[i * 2] * 3;
|
|
92
|
+
const b = EDGES[i * 2 + 1] * 3;
|
|
93
|
+
|
|
94
|
+
from[0] = corners[a];
|
|
95
|
+
from[1] = corners[a + 1];
|
|
96
|
+
from[2] = corners[a + 2];
|
|
97
|
+
|
|
98
|
+
to[0] = corners[b];
|
|
99
|
+
to[1] = corners[b + 1];
|
|
100
|
+
to[2] = corners[b + 2];
|
|
101
|
+
|
|
102
|
+
Gizmo.draw_line(from, to);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* @param {Camera} camera
|
|
109
|
+
* @param {Transform} transform
|
|
110
|
+
* @param {number} aspect
|
|
111
|
+
*/
|
|
112
|
+
#write_corners(camera, transform, aspect) {
|
|
113
|
+
const tangent = Math.tan(camera.fov.getValue() * DEG_TO_RAD / 2);
|
|
114
|
+
|
|
115
|
+
const rotation = transform.rotation;
|
|
116
|
+
const position = transform.position;
|
|
117
|
+
|
|
118
|
+
// near plane first, then far, each anticlockwise from the top right as the camera sees it
|
|
119
|
+
depths[0] = camera.clip_near;
|
|
120
|
+
depths[1] = camera.clip_far;
|
|
121
|
+
|
|
122
|
+
for (let plane = 0; plane < 2; plane++) {
|
|
123
|
+
const depth = depths[plane];
|
|
124
|
+
|
|
125
|
+
const half_height = depth * tangent;
|
|
126
|
+
const half_width = half_height * aspect;
|
|
127
|
+
|
|
128
|
+
for (let corner = 0; corner < 4; corner++) {
|
|
129
|
+
const x = (corner === 0 || corner === 3) ? half_width : -half_width;
|
|
130
|
+
const y = (corner === 0 || corner === 1) ? half_height : -half_height;
|
|
131
|
+
|
|
132
|
+
const address = (plane * 4 + corner) * 3;
|
|
133
|
+
|
|
134
|
+
v3_quaternion_apply(
|
|
135
|
+
corners, address,
|
|
136
|
+
x, y, depth,
|
|
137
|
+
rotation.x, rotation.y, rotation.z, rotation.w
|
|
138
|
+
);
|
|
139
|
+
|
|
140
|
+
corners[address] += position.x;
|
|
141
|
+
corners[address + 1] += position.y;
|
|
142
|
+
corners[address + 2] += position.z;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
@@ -1,172 +1,172 @@
|
|
|
1
|
-
import { v3_quaternion_apply } from "../../../src/core/geom/vec3/v3_quaternion_apply.js";
|
|
2
|
-
import { Transform } from "../../../src/engine/ecs/transform/Transform.js";
|
|
3
|
-
import { Light } from "../../../src/engine/graphics/ecs/light/Light.js";
|
|
4
|
-
import { LightType } from "../../../src/engine/graphics/ecs/light/LightType.js";
|
|
5
|
-
import { Gizmo } from "../../../src/engine/graphics/render/gizmo/Gizmo.js";
|
|
6
|
-
import { gizmo_draw_wire_circle } from "./gizmo_draw_wire_circle.js";
|
|
7
|
-
import { entity_is_editor_owned, SymbolicDisplay } from "./SymbolicDisplay.js";
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* @type {number[]}
|
|
11
|
-
*/
|
|
12
|
-
const LIGHT_COLOR = [1, 0.9, 0.3, 1];
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* How many straight pieces a drawn circle is made of. Enough to read as round at the distance an
|
|
16
|
-
* editor looks at a light from, and few enough that a scene full of lights is not a scene full of
|
|
17
|
-
* lines.
|
|
18
|
-
*
|
|
19
|
-
* @type {number}
|
|
20
|
-
*/
|
|
21
|
-
const CIRCLE_SEGMENTS = 24;
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* How far a directional light's arrow reaches, in world units. It has no range to draw — that is
|
|
25
|
-
* what makes it directional — so the length is the symbol's own and says only which way.
|
|
26
|
-
*
|
|
27
|
-
* @type {number}
|
|
28
|
-
*/
|
|
29
|
-
const DIRECTION_LENGTH = 2;
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* @type {number}
|
|
33
|
-
*/
|
|
34
|
-
const DIRECTION_DISC_RADIUS = 0.5;
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* @type {Float32Array}
|
|
38
|
-
*/
|
|
39
|
-
const origin = new Float32Array(3);
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* @type {Float32Array}
|
|
43
|
-
*/
|
|
44
|
-
const forward = new Float32Array(3);
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* @type {Float32Array}
|
|
48
|
-
*/
|
|
49
|
-
const right = new Float32Array(3);
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* @type {Float32Array}
|
|
53
|
-
*/
|
|
54
|
-
const up = new Float32Array(3);
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* @type {Float32Array}
|
|
58
|
-
*/
|
|
59
|
-
const rim_center = new Float32Array(3);
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* @type {Float32Array}
|
|
63
|
-
*/
|
|
64
|
-
const rim_point = new Float32Array(3);
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* What a light reaches, drawn as the shape of its own type.
|
|
68
|
-
*
|
|
69
|
-
* **Range rather than a fixed-size badge.** three's `PointLightHelper` drew a unit sphere whatever
|
|
70
|
-
* the light's distance was, so the symbol said where the light was and nothing about what it lit;
|
|
71
|
-
* the useful question in an editor is the second one, and the component already answers it. Where
|
|
72
|
-
* the light *is* stays answered too — the positioned marker draws that, on the same entity.
|
|
73
|
-
*
|
|
74
|
-
* **A light shines along its forward**, which is `
|
|
75
|
-
* the transform's local +Z. The spot cone and the directional arrow are both built from that, so a
|
|
76
|
-
* light that is turned in the editor turns its symbol with it.
|
|
77
|
-
*
|
|
78
|
-
* @see SymbolicDisplay
|
|
79
|
-
*/
|
|
80
|
-
export class LightSymbolicDisplay extends SymbolicDisplay {
|
|
81
|
-
/**
|
|
82
|
-
* @param {EntityComponentDataset} dataset
|
|
83
|
-
*/
|
|
84
|
-
record(dataset) {
|
|
85
|
-
Gizmo.color = LIGHT_COLOR;
|
|
86
|
-
|
|
87
|
-
dataset.traverseEntities([Light, Transform], (light, transform, entity) => {
|
|
88
|
-
if (entity_is_editor_owned(dataset, entity)) {
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
const position = transform.position;
|
|
93
|
-
|
|
94
|
-
origin[0] = position.x;
|
|
95
|
-
origin[1] = position.y;
|
|
96
|
-
origin[2] = position.z;
|
|
97
|
-
|
|
98
|
-
switch (light.type.getValue()) {
|
|
99
|
-
case LightType.POINT:
|
|
100
|
-
Gizmo.draw_wire_sphere(origin, light.distance.getValue());
|
|
101
|
-
break;
|
|
102
|
-
|
|
103
|
-
case LightType.SPOT:
|
|
104
|
-
this.#write_basis(transform);
|
|
105
|
-
this.#draw_cone(light.angle.getValue(), light.distance.getValue());
|
|
106
|
-
break;
|
|
107
|
-
|
|
108
|
-
case LightType.DIRECTION:
|
|
109
|
-
this.#write_basis(transform);
|
|
110
|
-
this.#draw_arrow();
|
|
111
|
-
break;
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Fill {@link forward}, {@link right} and {@link up} with the entity's own axes.
|
|
118
|
-
*
|
|
119
|
-
* @param {Transform} transform
|
|
120
|
-
*/
|
|
121
|
-
#write_basis(transform) {
|
|
122
|
-
const rotation = transform.rotation;
|
|
123
|
-
|
|
124
|
-
v3_quaternion_apply(forward, 0, 0, 0, 1, rotation.x, rotation.y, rotation.z, rotation.w);
|
|
125
|
-
v3_quaternion_apply(right, 0, 1, 0, 0, rotation.x, rotation.y, rotation.z, rotation.w);
|
|
126
|
-
v3_quaternion_apply(up, 0, 0, 1, 0, rotation.x, rotation.y, rotation.z, rotation.w);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* Four edges to the rim of the cone, and the rim.
|
|
131
|
-
*
|
|
132
|
-
* @param {number} half_angle in radians, from the axis to the edge
|
|
133
|
-
* @param {number} length
|
|
134
|
-
*/
|
|
135
|
-
#draw_cone(half_angle, length) {
|
|
136
|
-
const radius = Math.tan(half_angle) * length;
|
|
137
|
-
|
|
138
|
-
for (let c = 0; c < 3; c++) {
|
|
139
|
-
rim_center[c] = origin[c] + forward[c] * length;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
// the four edges are the rim's own axis points, so an edge and the rim always meet
|
|
143
|
-
for (let i = 0; i < 4; i++) {
|
|
144
|
-
const angle = i * (Math.PI / 2);
|
|
145
|
-
|
|
146
|
-
const cos = Math.cos(angle) * radius;
|
|
147
|
-
const sin = Math.sin(angle) * radius;
|
|
148
|
-
|
|
149
|
-
for (let c = 0; c < 3; c++) {
|
|
150
|
-
rim_point[c] = rim_center[c] + right[c] * cos + up[c] * sin;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
Gizmo.draw_line(origin, rim_point);
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
gizmo_draw_wire_circle(rim_center, right, up, radius, CIRCLE_SEGMENTS);
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
/**
|
|
160
|
-
* A shaft along the direction, and a disc across it to say the light is a plane of rays rather
|
|
161
|
-
* than a point.
|
|
162
|
-
*/
|
|
163
|
-
#draw_arrow() {
|
|
164
|
-
for (let c = 0; c < 3; c++) {
|
|
165
|
-
rim_center[c] = origin[c] + forward[c] * DIRECTION_LENGTH;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
Gizmo.draw_line(origin, rim_center);
|
|
169
|
-
|
|
170
|
-
gizmo_draw_wire_circle(origin, right, up, DIRECTION_DISC_RADIUS, CIRCLE_SEGMENTS);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
1
|
+
import { v3_quaternion_apply } from "../../../src/core/geom/vec3/v3_quaternion_apply.js";
|
|
2
|
+
import { Transform } from "../../../src/engine/ecs/transform/Transform.js";
|
|
3
|
+
import { Light } from "../../../src/engine/graphics/ecs/light/Light.js";
|
|
4
|
+
import { LightType } from "../../../src/engine/graphics/ecs/light/LightType.js";
|
|
5
|
+
import { Gizmo } from "../../../src/engine/graphics/render/gizmo/Gizmo.js";
|
|
6
|
+
import { gizmo_draw_wire_circle } from "./gizmo_draw_wire_circle.js";
|
|
7
|
+
import { entity_is_editor_owned, SymbolicDisplay } from "./SymbolicDisplay.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @type {number[]}
|
|
11
|
+
*/
|
|
12
|
+
const LIGHT_COLOR = [1, 0.9, 0.3, 1];
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* How many straight pieces a drawn circle is made of. Enough to read as round at the distance an
|
|
16
|
+
* editor looks at a light from, and few enough that a scene full of lights is not a scene full of
|
|
17
|
+
* lines.
|
|
18
|
+
*
|
|
19
|
+
* @type {number}
|
|
20
|
+
*/
|
|
21
|
+
const CIRCLE_SEGMENTS = 24;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* How far a directional light's arrow reaches, in world units. It has no range to draw — that is
|
|
25
|
+
* what makes it directional — so the length is the symbol's own and says only which way.
|
|
26
|
+
*
|
|
27
|
+
* @type {number}
|
|
28
|
+
*/
|
|
29
|
+
const DIRECTION_LENGTH = 2;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @type {number}
|
|
33
|
+
*/
|
|
34
|
+
const DIRECTION_DISC_RADIUS = 0.5;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @type {Float32Array}
|
|
38
|
+
*/
|
|
39
|
+
const origin = new Float32Array(3);
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @type {Float32Array}
|
|
43
|
+
*/
|
|
44
|
+
const forward = new Float32Array(3);
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @type {Float32Array}
|
|
48
|
+
*/
|
|
49
|
+
const right = new Float32Array(3);
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @type {Float32Array}
|
|
53
|
+
*/
|
|
54
|
+
const up = new Float32Array(3);
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* @type {Float32Array}
|
|
58
|
+
*/
|
|
59
|
+
const rim_center = new Float32Array(3);
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* @type {Float32Array}
|
|
63
|
+
*/
|
|
64
|
+
const rim_point = new Float32Array(3);
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* What a light reaches, drawn as the shape of its own type.
|
|
68
|
+
*
|
|
69
|
+
* **Range rather than a fixed-size badge.** three's `PointLightHelper` drew a unit sphere whatever
|
|
70
|
+
* the light's distance was, so the symbol said where the light was and nothing about what it lit;
|
|
71
|
+
* the useful question in an editor is the second one, and the component already answers it. Where
|
|
72
|
+
* the light *is* stays answered too — the positioned marker draws that, on the same entity.
|
|
73
|
+
*
|
|
74
|
+
* **A light shines along its forward**, which is `LightSystem`'s stated convention and puts it on
|
|
75
|
+
* the transform's local +Z. The spot cone and the directional arrow are both built from that, so a
|
|
76
|
+
* light that is turned in the editor turns its symbol with it.
|
|
77
|
+
*
|
|
78
|
+
* @see SymbolicDisplay
|
|
79
|
+
*/
|
|
80
|
+
export class LightSymbolicDisplay extends SymbolicDisplay {
|
|
81
|
+
/**
|
|
82
|
+
* @param {EntityComponentDataset} dataset
|
|
83
|
+
*/
|
|
84
|
+
record(dataset) {
|
|
85
|
+
Gizmo.color = LIGHT_COLOR;
|
|
86
|
+
|
|
87
|
+
dataset.traverseEntities([Light, Transform], (light, transform, entity) => {
|
|
88
|
+
if (entity_is_editor_owned(dataset, entity)) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const position = transform.position;
|
|
93
|
+
|
|
94
|
+
origin[0] = position.x;
|
|
95
|
+
origin[1] = position.y;
|
|
96
|
+
origin[2] = position.z;
|
|
97
|
+
|
|
98
|
+
switch (light.type.getValue()) {
|
|
99
|
+
case LightType.POINT:
|
|
100
|
+
Gizmo.draw_wire_sphere(origin, light.distance.getValue());
|
|
101
|
+
break;
|
|
102
|
+
|
|
103
|
+
case LightType.SPOT:
|
|
104
|
+
this.#write_basis(transform);
|
|
105
|
+
this.#draw_cone(light.angle.getValue(), light.distance.getValue());
|
|
106
|
+
break;
|
|
107
|
+
|
|
108
|
+
case LightType.DIRECTION:
|
|
109
|
+
this.#write_basis(transform);
|
|
110
|
+
this.#draw_arrow();
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Fill {@link forward}, {@link right} and {@link up} with the entity's own axes.
|
|
118
|
+
*
|
|
119
|
+
* @param {Transform} transform
|
|
120
|
+
*/
|
|
121
|
+
#write_basis(transform) {
|
|
122
|
+
const rotation = transform.rotation;
|
|
123
|
+
|
|
124
|
+
v3_quaternion_apply(forward, 0, 0, 0, 1, rotation.x, rotation.y, rotation.z, rotation.w);
|
|
125
|
+
v3_quaternion_apply(right, 0, 1, 0, 0, rotation.x, rotation.y, rotation.z, rotation.w);
|
|
126
|
+
v3_quaternion_apply(up, 0, 0, 1, 0, rotation.x, rotation.y, rotation.z, rotation.w);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Four edges to the rim of the cone, and the rim.
|
|
131
|
+
*
|
|
132
|
+
* @param {number} half_angle in radians, from the axis to the edge
|
|
133
|
+
* @param {number} length
|
|
134
|
+
*/
|
|
135
|
+
#draw_cone(half_angle, length) {
|
|
136
|
+
const radius = Math.tan(half_angle) * length;
|
|
137
|
+
|
|
138
|
+
for (let c = 0; c < 3; c++) {
|
|
139
|
+
rim_center[c] = origin[c] + forward[c] * length;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// the four edges are the rim's own axis points, so an edge and the rim always meet
|
|
143
|
+
for (let i = 0; i < 4; i++) {
|
|
144
|
+
const angle = i * (Math.PI / 2);
|
|
145
|
+
|
|
146
|
+
const cos = Math.cos(angle) * radius;
|
|
147
|
+
const sin = Math.sin(angle) * radius;
|
|
148
|
+
|
|
149
|
+
for (let c = 0; c < 3; c++) {
|
|
150
|
+
rim_point[c] = rim_center[c] + right[c] * cos + up[c] * sin;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
Gizmo.draw_line(origin, rim_point);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
gizmo_draw_wire_circle(rim_center, right, up, radius, CIRCLE_SEGMENTS);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* A shaft along the direction, and a disc across it to say the light is a plane of rays rather
|
|
161
|
+
* than a point.
|
|
162
|
+
*/
|
|
163
|
+
#draw_arrow() {
|
|
164
|
+
for (let c = 0; c < 3; c++) {
|
|
165
|
+
rim_center[c] = origin[c] + forward[c] * DIRECTION_LENGTH;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
Gizmo.draw_line(origin, rim_center);
|
|
169
|
+
|
|
170
|
+
gizmo_draw_wire_circle(origin, right, up, DIRECTION_DISC_RADIUS, CIRCLE_SEGMENTS);
|
|
171
|
+
}
|
|
172
|
+
}
|