@zephyr3d/scene 0.9.5 → 0.9.6
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/dist/index.d.ts +1 -0
- package/dist/material/msdf_text.js +3 -3
- package/dist/material/msdf_text.js.map +1 -1
- package/dist/text/font/cff_font.js +890 -0
- package/dist/text/font/cff_font.js.map +1 -0
- package/dist/text/font/font_asset.js +17 -3
- package/dist/text/font/font_asset.js.map +1 -1
- package/package.json +1 -1
- package/dist/animation/ik/ik_chain_builder.js +0 -68
- package/dist/animation/ik/ik_chain_builder.js.map +0 -1
- package/dist/animation/ik/ik_pole_constraint.js +0 -123
- package/dist/animation/ik/ik_pole_constraint.js.map +0 -1
- package/dist/animation/ik/ik_track.js +0 -96
- package/dist/animation/ik/ik_track.js.map +0 -1
- package/dist/animation/ik_postprocessor.js +0 -71
- package/dist/animation/ik_postprocessor.js.map +0 -1
- package/dist/animation/joint_dynamics/math.js +0 -16
- package/dist/animation/joint_dynamics/math.js.map +0 -1
- package/dist/animation/manual_transform_processor.js +0 -156
- package/dist/animation/manual_transform_processor.js.map +0 -1
- package/dist/animation/skeleton_postprocessor.js +0 -50
- package/dist/animation/skeleton_postprocessor.js.map +0 -1
- package/dist/animation/spring2/collision.js +0 -469
- package/dist/animation/spring2/collision.js.map +0 -1
- package/dist/animation/spring2/constraints.js +0 -329
- package/dist/animation/spring2/constraints.js.map +0 -1
- package/dist/animation/spring2/controller.js +0 -434
- package/dist/animation/spring2/controller.js.map +0 -1
- package/dist/animation/spring2/math.js +0 -16
- package/dist/animation/spring2/math.js.map +0 -1
- package/dist/animation/spring2/solver.js +0 -624
- package/dist/animation/spring2/solver.js.map +0 -1
- package/dist/animation/spring2/spring_system.js +0 -118
- package/dist/animation/spring2/spring_system.js.map +0 -1
- package/dist/animation/spring2/types.js +0 -19
- package/dist/animation/spring2/types.js.map +0 -1
- package/dist/animation/spring_postprocessor.js +0 -54
- package/dist/animation/spring_postprocessor.js.map +0 -1
- package/dist/asset/loaders/gltf/gltf_loader.js +0 -1276
- package/dist/asset/loaders/gltf/gltf_loader.js.map +0 -1
- package/dist/asset/loaders/gltf/helpers.js +0 -331
- package/dist/asset/loaders/gltf/helpers.js.map +0 -1
- package/dist/material/sprite3d.js +0 -301
- package/dist/material/sprite3d.js.map +0 -1
- package/dist/material/sprite3d_std.js +0 -116
- package/dist/material/sprite3d_std.js.map +0 -1
- package/dist/material/sprite3dblueprint.js +0 -235
- package/dist/material/sprite3dblueprint.js.map +0 -1
- package/dist/material/sprite_sdf.js +0 -106
- package/dist/material/sprite_sdf.js.map +0 -1
- package/dist/material/terrainmaterial.js +0 -368
- package/dist/material/terrainmaterial.js.map +0 -1
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +0 -38
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +0 -1
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +0 -10
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +0 -1
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +0 -127
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +0 -1
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +0 -263
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +0 -1
- package/dist/render/deferredlightpass.js +0 -510
- package/dist/render/deferredlightpass.js.map +0 -1
- package/dist/render/deferredshadowlightpass.js +0 -428
- package/dist/render/deferredshadowlightpass.js.map +0 -1
- package/dist/render/gbufferpass.js +0 -50
- package/dist/render/gbufferpass.js.map +0 -1
- package/dist/scene/sdftextsprite.js +0 -322
- package/dist/scene/sdftextsprite.js.map +0 -1
- package/dist/scene/sprite3d.js +0 -18
- package/dist/scene/sprite3d.js.map +0 -1
- package/dist/scene/terrain/grass.js +0 -280
- package/dist/scene/terrain/grass.js.map +0 -1
- package/dist/scene/terrain/heightfield.js +0 -475
- package/dist/scene/terrain/heightfield.js.map +0 -1
- package/dist/scene/terrain/patch.js +0 -532
- package/dist/scene/terrain/patch.js.map +0 -1
- package/dist/scene/terrain/quadtree.js +0 -461
- package/dist/scene/terrain/quadtree.js.map +0 -1
- package/dist/scene/terrain/terrain.js +0 -231
- package/dist/scene/terrain/terrain.js.map +0 -1
- package/dist/src/animation/animation.js +0 -127
- package/dist/src/animation/animation.js.map +0 -1
- package/dist/src/animation/animationset.js +0 -255
- package/dist/src/animation/animationset.js.map +0 -1
- package/dist/src/animation/animationtrack.js +0 -34
- package/dist/src/animation/animationtrack.js.map +0 -1
- package/dist/src/animation/eulerrotationtrack.js +0 -52
- package/dist/src/animation/eulerrotationtrack.js.map +0 -1
- package/dist/src/animation/morphtarget.js +0 -93
- package/dist/src/animation/morphtarget.js.map +0 -1
- package/dist/src/animation/morphtrack.js +0 -70
- package/dist/src/animation/morphtrack.js.map +0 -1
- package/dist/src/animation/proptrack.js +0 -161
- package/dist/src/animation/proptrack.js.map +0 -1
- package/dist/src/animation/rotationtrack.js +0 -51
- package/dist/src/animation/rotationtrack.js.map +0 -1
- package/dist/src/animation/scaletrack.js +0 -50
- package/dist/src/animation/scaletrack.js.map +0 -1
- package/dist/src/animation/skeleton.js +0 -204
- package/dist/src/animation/skeleton.js.map +0 -1
- package/dist/src/animation/translationtrack.js +0 -50
- package/dist/src/animation/translationtrack.js.map +0 -1
- package/dist/src/app/app.js +0 -129
- package/dist/src/app/app.js.map +0 -1
- package/dist/src/app/inputmgr.js +0 -267
- package/dist/src/app/inputmgr.js.map +0 -1
- package/dist/src/asset/assetmanager.js +0 -404
- package/dist/src/asset/assetmanager.js.map +0 -1
- package/dist/src/asset/builtin.js +0 -337
- package/dist/src/asset/builtin.js.map +0 -1
- package/dist/src/asset/loaders/dds/dds.js +0 -470
- package/dist/src/asset/loaders/dds/dds.js.map +0 -1
- package/dist/src/asset/loaders/dds/dds_loader.js +0 -28
- package/dist/src/asset/loaders/dds/dds_loader.js.map +0 -1
- package/dist/src/asset/loaders/gltf/gltf_loader.js +0 -1265
- package/dist/src/asset/loaders/gltf/gltf_loader.js.map +0 -1
- package/dist/src/asset/loaders/gltf/helpers.js +0 -327
- package/dist/src/asset/loaders/gltf/helpers.js.map +0 -1
- package/dist/src/asset/loaders/hdr/hdr.js +0 -180
- package/dist/src/asset/loaders/hdr/hdr.js.map +0 -1
- package/dist/src/asset/loaders/image/tga_Loader.js +0 -116
- package/dist/src/asset/loaders/image/tga_Loader.js.map +0 -1
- package/dist/src/asset/loaders/image/webimage_loader.js +0 -63
- package/dist/src/asset/loaders/image/webimage_loader.js.map +0 -1
- package/dist/src/asset/loaders/loader.js +0 -45
- package/dist/src/asset/loaders/loader.js.map +0 -1
- package/dist/src/asset/model.js +0 -414
- package/dist/src/asset/model.js.map +0 -1
- package/dist/src/blitter/bilateralblur.js +0 -221
- package/dist/src/blitter/bilateralblur.js.map +0 -1
- package/dist/src/blitter/blitter.js +0 -390
- package/dist/src/blitter/blitter.js.map +0 -1
- package/dist/src/blitter/box.js +0 -118
- package/dist/src/blitter/box.js.map +0 -1
- package/dist/src/blitter/copy.js +0 -22
- package/dist/src/blitter/copy.js.map +0 -1
- package/dist/src/blitter/gaussianblur.js +0 -228
- package/dist/src/blitter/gaussianblur.js.map +0 -1
- package/dist/src/camera/base.js +0 -92
- package/dist/src/camera/base.js.map +0 -1
- package/dist/src/camera/camera.js +0 -1005
- package/dist/src/camera/camera.js.map +0 -1
- package/dist/src/camera/fps.js +0 -238
- package/dist/src/camera/fps.js.map +0 -1
- package/dist/src/camera/orbit.js +0 -245
- package/dist/src/camera/orbit.js.map +0 -1
- package/dist/src/camera/orthocamera.js +0 -167
- package/dist/src/camera/orthocamera.js.map +0 -1
- package/dist/src/camera/perspectivecamera.js +0 -141
- package/dist/src/camera/perspectivecamera.js.map +0 -1
- package/dist/src/index.js +0 -120
- package/dist/src/index.js.map +0 -1
- package/dist/src/material/blinn.js +0 -81
- package/dist/src/material/blinn.js.map +0 -1
- package/dist/src/material/grassmaterial.js +0 -113
- package/dist/src/material/grassmaterial.js.map +0 -1
- package/dist/src/material/lambert.js +0 -92
- package/dist/src/material/lambert.js.map +0 -1
- package/dist/src/material/material.js +0 -301
- package/dist/src/material/material.js.map +0 -1
- package/dist/src/material/meshmaterial.js +0 -704
- package/dist/src/material/meshmaterial.js.map +0 -1
- package/dist/src/material/mixins/albedocolor.js +0 -76
- package/dist/src/material/mixins/albedocolor.js.map +0 -1
- package/dist/src/material/mixins/foliage.js +0 -47
- package/dist/src/material/mixins/foliage.js.map +0 -1
- package/dist/src/material/mixins/lightmodel/blinnphong.js +0 -112
- package/dist/src/material/mixins/lightmodel/blinnphong.js.map +0 -1
- package/dist/src/material/mixins/lightmodel/lambert.js +0 -58
- package/dist/src/material/mixins/lightmodel/lambert.js.map +0 -1
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +0 -178
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +0 -1
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +0 -139
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +0 -1
- package/dist/src/material/mixins/lit.js +0 -476
- package/dist/src/material/mixins/lit.js.map +0 -1
- package/dist/src/material/mixins/pbr/common.js +0 -918
- package/dist/src/material/mixins/pbr/common.js.map +0 -1
- package/dist/src/material/mixins/texture.js +0 -172
- package/dist/src/material/mixins/texture.js.map +0 -1
- package/dist/src/material/mixins/vertexcolor.js +0 -56
- package/dist/src/material/mixins/vertexcolor.js.map +0 -1
- package/dist/src/material/particle.js +0 -178
- package/dist/src/material/particle.js.map +0 -1
- package/dist/src/material/pbrmr.js +0 -97
- package/dist/src/material/pbrmr.js.map +0 -1
- package/dist/src/material/pbrsg.js +0 -97
- package/dist/src/material/pbrsg.js.map +0 -1
- package/dist/src/material/shader/helper.js +0 -1209
- package/dist/src/material/shader/helper.js.map +0 -1
- package/dist/src/material/terrain-cm.js +0 -606
- package/dist/src/material/terrain-cm.js.map +0 -1
- package/dist/src/material/terrainmaterial.js +0 -375
- package/dist/src/material/terrainmaterial.js.map +0 -1
- package/dist/src/material/unlit.js +0 -41
- package/dist/src/material/unlit.js.map +0 -1
- package/dist/src/material/water.js +0 -417
- package/dist/src/material/water.js.map +0 -1
- package/dist/src/posteffect/bloom.js +0 -361
- package/dist/src/posteffect/bloom.js.map +0 -1
- package/dist/src/posteffect/compositor.js +0 -226
- package/dist/src/posteffect/compositor.js.map +0 -1
- package/dist/src/posteffect/fxaa.js +0 -273
- package/dist/src/posteffect/fxaa.js.map +0 -1
- package/dist/src/posteffect/grayscale.js +0 -69
- package/dist/src/posteffect/grayscale.js.map +0 -1
- package/dist/src/posteffect/motionblur.js +0 -96
- package/dist/src/posteffect/motionblur.js.map +0 -1
- package/dist/src/posteffect/posteffect.js +0 -126
- package/dist/src/posteffect/posteffect.js.map +0 -1
- package/dist/src/posteffect/sao.js +0 -324
- package/dist/src/posteffect/sao.js.map +0 -1
- package/dist/src/posteffect/ssr.js +0 -489
- package/dist/src/posteffect/ssr.js.map +0 -1
- package/dist/src/posteffect/taa.js +0 -172
- package/dist/src/posteffect/taa.js.map +0 -1
- package/dist/src/posteffect/tonemap.js +0 -94
- package/dist/src/posteffect/tonemap.js.map +0 -1
- package/dist/src/render/abuffer_oit.js +0 -361
- package/dist/src/render/abuffer_oit.js.map +0 -1
- package/dist/src/render/clipmap.js +0 -851
- package/dist/src/render/clipmap.js.map +0 -1
- package/dist/src/render/cluster_light.js +0 -333
- package/dist/src/render/cluster_light.js.map +0 -1
- package/dist/src/render/cull_visitor.js +0 -187
- package/dist/src/render/cull_visitor.js.map +0 -1
- package/dist/src/render/depthpass.js +0 -68
- package/dist/src/render/depthpass.js.map +0 -1
- package/dist/src/render/drawable_mixin.js +0 -227
- package/dist/src/render/drawable_mixin.js.map +0 -1
- package/dist/src/render/envlight.js +0 -463
- package/dist/src/render/envlight.js.map +0 -1
- package/dist/src/render/fbm_wavegenerator.js +0 -251
- package/dist/src/render/fbm_wavegenerator.js.map +0 -1
- package/dist/src/render/fft_wavegenerator.js +0 -1006
- package/dist/src/render/fft_wavegenerator.js.map +0 -1
- package/dist/src/render/fullscreenquad.js +0 -38
- package/dist/src/render/fullscreenquad.js.map +0 -1
- package/dist/src/render/gerstner_wavegenerator.js +0 -314
- package/dist/src/render/gerstner_wavegenerator.js.map +0 -1
- package/dist/src/render/globalbindgroup_allocator.js +0 -60
- package/dist/src/render/globalbindgroup_allocator.js.map +0 -1
- package/dist/src/render/hzb.js +0 -273
- package/dist/src/render/hzb.js.map +0 -1
- package/dist/src/render/lightpass.js +0 -172
- package/dist/src/render/lightpass.js.map +0 -1
- package/dist/src/render/objectcolorpass.js +0 -51
- package/dist/src/render/objectcolorpass.js.map +0 -1
- package/dist/src/render/primitive.js +0 -364
- package/dist/src/render/primitive.js.map +0 -1
- package/dist/src/render/render_queue.js +0 -467
- package/dist/src/render/render_queue.js.map +0 -1
- package/dist/src/render/renderbundle_wrapper.js +0 -152
- package/dist/src/render/renderbundle_wrapper.js.map +0 -1
- package/dist/src/render/renderer.js +0 -455
- package/dist/src/render/renderer.js.map +0 -1
- package/dist/src/render/renderpass.js +0 -200
- package/dist/src/render/renderpass.js.map +0 -1
- package/dist/src/render/shadowmap_pass.js +0 -56
- package/dist/src/render/shadowmap_pass.js.map +0 -1
- package/dist/src/render/sky.js +0 -1103
- package/dist/src/render/sky.js.map +0 -1
- package/dist/src/render/weightedblended_oit.js +0 -168
- package/dist/src/render/weightedblended_oit.js.map +0 -1
- package/dist/src/scene/batchgroup.js +0 -162
- package/dist/src/scene/batchgroup.js.map +0 -1
- package/dist/src/scene/environment.js +0 -209
- package/dist/src/scene/environment.js.map +0 -1
- package/dist/src/scene/graph_node.js +0 -72
- package/dist/src/scene/graph_node.js.map +0 -1
- package/dist/src/scene/light.js +0 -416
- package/dist/src/scene/light.js.map +0 -1
- package/dist/src/scene/mesh.js +0 -341
- package/dist/src/scene/mesh.js.map +0 -1
- package/dist/src/scene/octree.js +0 -649
- package/dist/src/scene/octree.js.map +0 -1
- package/dist/src/scene/particlesys.js +0 -738
- package/dist/src/scene/particlesys.js.map +0 -1
- package/dist/src/scene/raycast_visitor.js +0 -103
- package/dist/src/scene/raycast_visitor.js.map +0 -1
- package/dist/src/scene/scene.js +0 -284
- package/dist/src/scene/scene.js.map +0 -1
- package/dist/src/scene/scene_node.js +0 -732
- package/dist/src/scene/scene_node.js.map +0 -1
- package/dist/src/scene/terrain/grass.js +0 -278
- package/dist/src/scene/terrain/grass.js.map +0 -1
- package/dist/src/scene/terrain/heightfield.js +0 -475
- package/dist/src/scene/terrain/heightfield.js.map +0 -1
- package/dist/src/scene/terrain/patch.js +0 -530
- package/dist/src/scene/terrain/patch.js.map +0 -1
- package/dist/src/scene/terrain/quadtree.js +0 -461
- package/dist/src/scene/terrain/quadtree.js.map +0 -1
- package/dist/src/scene/terrain/terrain.js +0 -246
- package/dist/src/scene/terrain/terrain.js.map +0 -1
- package/dist/src/scene/terrain-cm/grass.js +0 -594
- package/dist/src/scene/terrain-cm/grass.js.map +0 -1
- package/dist/src/scene/terrain-cm/grassmaterial.js +0 -159
- package/dist/src/scene/terrain-cm/grassmaterial.js.map +0 -1
- package/dist/src/scene/terrain-cm/terrain-cm.js +0 -538
- package/dist/src/scene/terrain-cm/terrain-cm.js.map +0 -1
- package/dist/src/scene/water.js +0 -374
- package/dist/src/scene/water.js.map +0 -1
- package/dist/src/shaders/atmosphere.js +0 -957
- package/dist/src/shaders/atmosphere.js.map +0 -1
- package/dist/src/shaders/fog.js +0 -112
- package/dist/src/shaders/fog.js.map +0 -1
- package/dist/src/shaders/misc.js +0 -266
- package/dist/src/shaders/misc.js.map +0 -1
- package/dist/src/shaders/noise.js +0 -222
- package/dist/src/shaders/noise.js.map +0 -1
- package/dist/src/shaders/pbr.js +0 -51
- package/dist/src/shaders/pbr.js.map +0 -1
- package/dist/src/shaders/shadow.js +0 -636
- package/dist/src/shaders/shadow.js.map +0 -1
- package/dist/src/shaders/ssr.js +0 -490
- package/dist/src/shaders/ssr.js.map +0 -1
- package/dist/src/shaders/temporal.js +0 -215
- package/dist/src/shaders/temporal.js.map +0 -1
- package/dist/src/shaders/water.js +0 -756
- package/dist/src/shaders/water.js.map +0 -1
- package/dist/src/shadow/esm.js +0 -237
- package/dist/src/shadow/esm.js.map +0 -1
- package/dist/src/shadow/pcf_opt.js +0 -181
- package/dist/src/shadow/pcf_opt.js.map +0 -1
- package/dist/src/shadow/pcf_pd.js +0 -189
- package/dist/src/shadow/pcf_pd.js.map +0 -1
- package/dist/src/shadow/shader.js +0 -37
- package/dist/src/shadow/shader.js.map +0 -1
- package/dist/src/shadow/shadow_impl.js +0 -15
- package/dist/src/shadow/shadow_impl.js.map +0 -1
- package/dist/src/shadow/shadowmapper.js +0 -790
- package/dist/src/shadow/shadowmapper.js.map +0 -1
- package/dist/src/shadow/ssm.js +0 -159
- package/dist/src/shadow/ssm.js.map +0 -1
- package/dist/src/shadow/vsm.js +0 -297
- package/dist/src/shadow/vsm.js.map +0 -1
- package/dist/src/shapes/box.js +0 -386
- package/dist/src/shapes/box.js.map +0 -1
- package/dist/src/shapes/cylinder.js +0 -125
- package/dist/src/shapes/cylinder.js.map +0 -1
- package/dist/src/shapes/plane.js +0 -88
- package/dist/src/shapes/plane.js.map +0 -1
- package/dist/src/shapes/shape.js +0 -87
- package/dist/src/shapes/shape.js.map +0 -1
- package/dist/src/shapes/sphere.js +0 -114
- package/dist/src/shapes/sphere.js.map +0 -1
- package/dist/src/shapes/tetrahedron.js +0 -188
- package/dist/src/shapes/tetrahedron.js.map +0 -1
- package/dist/src/shapes/torus.js +0 -111
- package/dist/src/shapes/torus.js.map +0 -1
- package/dist/src/utility/aabbtree.js +0 -400
- package/dist/src/utility/aabbtree.js.map +0 -1
- package/dist/src/utility/bounding_volume.js +0 -29
- package/dist/src/utility/bounding_volume.js.map +0 -1
- package/dist/src/utility/debug.js +0 -28
- package/dist/src/utility/debug.js.map +0 -1
- package/dist/src/utility/draco/decoder.js +0 -116
- package/dist/src/utility/draco/decoder.js.map +0 -1
- package/dist/src/utility/misc.js +0 -105
- package/dist/src/utility/misc.js.map +0 -1
- package/dist/src/utility/panorama.js +0 -163
- package/dist/src/utility/panorama.js.map +0 -1
- package/dist/src/utility/pmrem.js +0 -354
- package/dist/src/utility/pmrem.js.map +0 -1
- package/dist/src/utility/rendermipmap.js +0 -115
- package/dist/src/utility/rendermipmap.js.map +0 -1
- package/dist/src/utility/serialization/json.js +0 -402
- package/dist/src/utility/serialization/json.js.map +0 -1
- package/dist/src/utility/serialization/manager.js +0 -623
- package/dist/src/utility/serialization/manager.js.map +0 -1
- package/dist/src/utility/serialization/scene/animation.js +0 -248
- package/dist/src/utility/serialization/scene/animation.js.map +0 -1
- package/dist/src/utility/serialization/scene/batch.js +0 -59
- package/dist/src/utility/serialization/scene/batch.js.map +0 -1
- package/dist/src/utility/serialization/scene/camera.js +0 -790
- package/dist/src/utility/serialization/scene/camera.js.map +0 -1
- package/dist/src/utility/serialization/scene/common.js +0 -222
- package/dist/src/utility/serialization/scene/common.js.map +0 -1
- package/dist/src/utility/serialization/scene/light.js +0 -575
- package/dist/src/utility/serialization/scene/light.js.map +0 -1
- package/dist/src/utility/serialization/scene/material.js +0 -1111
- package/dist/src/utility/serialization/scene/material.js.map +0 -1
- package/dist/src/utility/serialization/scene/mesh.js +0 -148
- package/dist/src/utility/serialization/scene/mesh.js.map +0 -1
- package/dist/src/utility/serialization/scene/misc.js +0 -39
- package/dist/src/utility/serialization/scene/misc.js.map +0 -1
- package/dist/src/utility/serialization/scene/node.js +0 -451
- package/dist/src/utility/serialization/scene/node.js.map +0 -1
- package/dist/src/utility/serialization/scene/particle.js +0 -425
- package/dist/src/utility/serialization/scene/particle.js.map +0 -1
- package/dist/src/utility/serialization/scene/primitive.js +0 -692
- package/dist/src/utility/serialization/scene/primitive.js.map +0 -1
- package/dist/src/utility/serialization/scene/scene.js +0 -704
- package/dist/src/utility/serialization/scene/scene.js.map +0 -1
- package/dist/src/utility/serialization/scene/terrain.js +0 -488
- package/dist/src/utility/serialization/scene/terrain.js.map +0 -1
- package/dist/src/utility/serialization/scene/water.js +0 -465
- package/dist/src/utility/serialization/scene/water.js.map +0 -1
- package/dist/src/utility/shprojector.js +0 -297
- package/dist/src/utility/shprojector.js.map +0 -1
- package/dist/src/utility/textures/ggxlut.js +0 -213
- package/dist/src/utility/textures/ggxlut.js.map +0 -1
- package/dist/src/utility/textures/gradientnoise.js +0 -62
- package/dist/src/utility/textures/gradientnoise.js.map +0 -1
- package/dist/src/utility/textures/randomnoise.js +0 -41
- package/dist/src/utility/textures/randomnoise.js.map +0 -1
- package/dist/src/values.js +0 -162
- package/dist/src/values.js.map +0 -1
- package/dist/utility/blueprint/material/common.js +0 -7
- package/dist/utility/blueprint/material/common.js.map +0 -1
- package/dist/utility/serialization/blueprint/constants.js +0 -255
- package/dist/utility/serialization/blueprint/constants.js.map +0 -1
- package/dist/utility/serialization/blueprint/material/constants.js +0 -203
- package/dist/utility/serialization/blueprint/material/constants.js.map +0 -1
- package/dist/utility/serialization/blueprint/material/texture.js +0 -165
- package/dist/utility/serialization/blueprint/material/texture.js.map +0 -1
- package/dist/utility/serialization/scene/cloth_script.js +0 -834
- package/dist/utility/serialization/scene/cloth_script.js.map +0 -1
- package/dist/utility/serialization/scene/spring_script.js +0 -596
- package/dist/utility/serialization/scene/spring_script.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"clipmap.js","sources":["../../../src/render/clipmap.ts"],"sourcesContent":["/**\n * copy from http://git.mikejsavage.co.uk/medfall/file/clipmap.cc.html#l197\n */\n\nimport type { Vector4 } from '@zephyr3d/base';\nimport { AABB, ClipState, Matrix4x4, Vector2, Vector3 } from '@zephyr3d/base';\nimport type { Camera } from '../camera';\nimport { Primitive } from './primitive';\nimport {\n getVertexAttributeFormat,\n getVertexAttributeIndex,\n VERTEX_ATTRIB_POSITION,\n VERTEX_ATTRIB_TEXCOORD0,\n type VertexAttribFormat\n} from '@zephyr3d/device';\n\nconst tmpAABB = new AABB();\nconst tmpV3 = new Vector3();\nconst rotationValues = [0, Math.PI * 1.5, Math.PI * 0.5, Math.PI] as const;\n\n/** @internal */\nexport type PrimitiveInstanceInfo = {\n primitive: Primitive;\n numInstances: number;\n instanceDatas: Float32Array<ArrayBuffer>;\n mipLevels: Float32Array<ArrayBuffer>;\n maxMiplevel: number;\n};\n/** @internal */\nexport interface ClipmapGatherContext {\n camera: Camera;\n gridScale: number;\n minMaxWorldPos: Vector4;\n userData: unknown;\n calcAABB(\n userData: unknown,\n minX: number,\n maxX: number,\n minZ: number,\n maxZ: number,\n outAABB: AABB,\n level: number\n );\n}\n\n/** @internal */\nexport interface ClipmapDrawContext extends ClipmapGatherContext {\n drawPrimitive(\n prim: Primitive,\n rotation: number,\n offset: Vector2,\n scale: number,\n gridScale: number,\n level: number\n );\n}\n\n/** @internal */\nexport class Clipmap {\n private readonly _instanceDataPool: Float32Array<ArrayBuffer>[];\n private _instanceDataPoolSize: number;\n private readonly _mipLevelDataPool: Float32Array<ArrayBuffer>[];\n private _mipLevelDataPoolSize: number;\n private readonly _nonInstanceDataPool: Float32Array<ArrayBuffer>[];\n private _nonInstanceDataPoolSize: number;\n private readonly _nonInstanceMipLevelDataPool: Float32Array<ArrayBuffer>[];\n private _nonInstanceMipLevelDataPoolSize: number;\n private readonly _extraInstanceBuffers: VertexAttribFormat[];\n private _tileResolution: number;\n private readonly _maxMipLevels: number;\n\n private _tileMesh: Primitive;\n private _tileMeshLines: Primitive;\n private _tileMeshBBox: AABB;\n\n private _fillerMesh: Primitive;\n private _fillerMeshLines: Primitive;\n private _fillerMeshAABB: AABB;\n\n private _trimMesh: Primitive;\n private _trimMeshLines: Primitive;\n private _trimMeshAABB: AABB;\n\n private _crossMesh: Primitive;\n private _crossMeshLines: Primitive;\n private _crossMeshAABB: AABB;\n\n private _seamMesh: Primitive;\n private _seamMeshLines: Primitive;\n private _seamMeshAABB: AABB;\n\n private _wireframe: boolean;\n\n constructor(resolution: number, extraInstanceBuffers: VertexAttribFormat[], maxMipLevels = 64) {\n if (\n extraInstanceBuffers &&\n extraInstanceBuffers.findIndex(\n (val) =>\n getVertexAttributeIndex(val) === VERTEX_ATTRIB_POSITION ||\n getVertexAttributeIndex(val) === VERTEX_ATTRIB_TEXCOORD0 ||\n getVertexAttributeFormat(val) !== 'f32'\n ) >= 0\n ) {\n throw new Error(\n 'Extra instance buffers must be f32 format and cannot have vertex attribute of POSITOIN and TEXCOORD0'\n );\n }\n this._extraInstanceBuffers = extraInstanceBuffers?.slice() ?? [];\n this._tileResolution = resolution;\n this._maxMipLevels = Math.min(64, Math.max(1, maxMipLevels >>> 0));\n this._instanceDataPool = [];\n this._instanceDataPoolSize = 0;\n this._mipLevelDataPool = [];\n this._mipLevelDataPoolSize = 0;\n this._nonInstanceDataPool = [];\n this._nonInstanceDataPoolSize = 0;\n this._nonInstanceMipLevelDataPool = [];\n this._nonInstanceMipLevelDataPoolSize = 0;\n this._wireframe = false;\n this.generateCrossMesh();\n this.generateFillerMesh();\n this.generateSeamMesh();\n this.generateTileMesh();\n this.generateTrimMesh();\n }\n get wireframe() {\n return this._wireframe;\n }\n set wireframe(val: boolean) {\n this._wireframe = !!val;\n }\n get tileResolution() {\n return this._tileResolution;\n }\n set tileResolution(val: number) {\n if (val !== this._tileResolution) {\n this._tileResolution = val;\n this.generateCrossMesh();\n this.generateFillerMesh();\n this.generateSeamMesh();\n this.generateTileMesh();\n this.generateTrimMesh();\n }\n }\n private allocInstanceBuffer(): Float32Array<ArrayBuffer> {\n if (this._instanceDataPoolSize === 0) {\n const buffer = new Float32Array(this._maxMipLevels * 16 * 4);\n this._instanceDataPool.push(buffer);\n return buffer;\n } else {\n return this._instanceDataPool[--this._instanceDataPoolSize];\n }\n }\n private allocNonInstanceBuffer(x: number, y: number, z: number, w: number): Float32Array<ArrayBuffer> {\n let buffer: Float32Array<ArrayBuffer>;\n if (this._nonInstanceDataPoolSize === 0) {\n buffer = new Float32Array(4);\n this._nonInstanceDataPool.push(buffer);\n } else {\n buffer = this._nonInstanceDataPool[--this._nonInstanceDataPoolSize];\n }\n buffer[0] = x;\n buffer[1] = y;\n buffer[2] = z;\n buffer[3] = w;\n return buffer;\n }\n private allocMipLevelBuffer(): Float32Array<ArrayBuffer> {\n if (this._mipLevelDataPoolSize === 0) {\n const buffer = new Float32Array(this._maxMipLevels * 16);\n this._mipLevelDataPool.push(buffer);\n return buffer;\n } else {\n return this._mipLevelDataPool[--this._mipLevelDataPoolSize];\n }\n }\n private allocNonInstanceMipLevelBuffer(val: number): Float32Array<ArrayBuffer> {\n let buffer: Float32Array<ArrayBuffer>;\n if (this._nonInstanceMipLevelDataPoolSize === 0) {\n buffer = new Float32Array(1);\n this._nonInstanceMipLevelDataPool.push(buffer);\n } else {\n buffer = this._nonInstanceMipLevelDataPool[--this._nonInstanceMipLevelDataPoolSize];\n }\n buffer[0] = val;\n return buffer;\n }\n private patch2d(tileResolution: number, x: number, y: number) {\n return y * (tileResolution + 1) + x;\n }\n private calcAABB(vertices: Float32Array): AABB {\n let maxX = -Number.MAX_VALUE;\n let maxY = -Number.MAX_VALUE;\n let minX = Number.MAX_VALUE;\n let minY = Number.MAX_VALUE;\n for (let i = 0; i < vertices.length / 3; i++) {\n const x = vertices[i * 3 + 0];\n const y = vertices[i * 3 + 1];\n if (x > maxX) {\n maxX = x;\n }\n if (x < minX) {\n minX = x;\n }\n if (y > maxY) {\n maxY = y;\n }\n if (y < minY) {\n minY = y;\n }\n }\n return new AABB(new Vector3(minX, minY, 0), new Vector3(maxX, maxY, 0));\n }\n generateTileMesh() {\n this._tileMesh?.dispose();\n this._tileMesh = new Primitive();\n const patchVertResolution = this._tileResolution + 1;\n const vertices = new Float32Array(patchVertResolution * patchVertResolution * 3);\n let n = 0;\n for (let y = 0; y < patchVertResolution; y++) {\n for (let x = 0; x < patchVertResolution; x++) {\n vertices[n++] = x;\n vertices[n++] = y;\n vertices[n++] = 0;\n }\n }\n n = 0;\n const indices = new Uint16Array(this._tileResolution * this._tileResolution * 6);\n for (let y = 0; y < this._tileResolution; y++) {\n for (let x = 0; x < this._tileResolution; x++) {\n indices[n++] = this.patch2d(this._tileResolution, x, y);\n indices[n++] = this.patch2d(this._tileResolution, x, y + 1);\n indices[n++] = this.patch2d(this._tileResolution, x + 1, y + 1);\n indices[n++] = this.patch2d(this._tileResolution, x, y);\n indices[n++] = this.patch2d(this._tileResolution, x + 1, y + 1);\n indices[n++] = this.patch2d(this._tileResolution, x + 1, y);\n }\n }\n this._tileMesh.createAndSetVertexBuffer('position_f32x3', vertices);\n this._tileMesh.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n for (const fmt of this._extraInstanceBuffers) {\n this._tileMesh.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n }\n this._tileMesh.createAndSetIndexBuffer(indices);\n this._tileMesh.indexStart = 0;\n this._tileMesh.indexCount = indices.length;\n this._tileMesh.primitiveType = 'triangle-list';\n this._tileMeshBBox = this.calcAABB(vertices);\n\n const indicesLines = new Uint16Array(indices.length * 2);\n for (let i = 0; i < indices.length / 3; i++) {\n indicesLines[i * 6 + 0] = indices[i * 3 + 0];\n indicesLines[i * 6 + 1] = indices[i * 3 + 1];\n indicesLines[i * 6 + 2] = indices[i * 3 + 1];\n indicesLines[i * 6 + 3] = indices[i * 3 + 2];\n indicesLines[i * 6 + 4] = indices[i * 3 + 2];\n indicesLines[i * 6 + 5] = indices[i * 3 + 0];\n }\n this._tileMeshLines?.dispose();\n this._tileMeshLines = new Primitive();\n this._tileMeshLines.setVertexBuffer(this._tileMesh.getVertexBuffer('position'));\n this._tileMeshLines.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n for (const fmt of this._extraInstanceBuffers) {\n this._tileMeshLines.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n }\n this._tileMeshLines.createAndSetIndexBuffer(indicesLines);\n this._tileMeshLines.indexStart = 0;\n this._tileMeshLines.indexCount = indicesLines.length;\n this._tileMeshLines.primitiveType = 'line-list';\n }\n generateFillerMesh() {\n this._fillerMesh?.dispose();\n this._fillerMesh = new Primitive();\n const patchVertResolution = this._tileResolution + 1;\n const vertices = new Float32Array(patchVertResolution * 8 * 3);\n let n = 0;\n const offset = this._tileResolution;\n for (let i = 0; i < patchVertResolution; i++) {\n vertices[n++] = offset + i + 1;\n vertices[n++] = 0;\n vertices[n++] = 0;\n vertices[n++] = offset + i + 1;\n vertices[n++] = 1;\n vertices[n++] = 0;\n }\n for (let i = 0; i < patchVertResolution; i++) {\n vertices[n++] = 1;\n vertices[n++] = offset + i + 1;\n vertices[n++] = 0;\n vertices[n++] = 0;\n vertices[n++] = offset + i + 1;\n vertices[n++] = 0;\n }\n for (let i = 0; i < patchVertResolution; i++) {\n vertices[n++] = -offset - i;\n vertices[n++] = 1;\n vertices[n++] = 0;\n vertices[n++] = -offset - i;\n vertices[n++] = 0;\n vertices[n++] = 0;\n }\n for (let i = 0; i < patchVertResolution; i++) {\n vertices[n++] = 0;\n vertices[n++] = -offset - i;\n vertices[n++] = 0;\n vertices[n++] = 1;\n vertices[n++] = -offset - i;\n vertices[n++] = 0;\n }\n n = 0;\n const indices = new Uint16Array(this._tileResolution * 24);\n for (let i = 0; i < this._tileResolution * 4; i++) {\n const arm = (i / this._tileResolution) >> 0;\n const bl = (arm + i) * 2 + 0;\n const br = (arm + i) * 2 + 1;\n const tl = (arm + i) * 2 + 2;\n const tr = (arm + i) * 2 + 3;\n if (arm % 2 === 0) {\n indices[n++] = br;\n indices[n++] = tr;\n indices[n++] = bl;\n indices[n++] = bl;\n indices[n++] = tr;\n indices[n++] = tl;\n } else {\n indices[n++] = br;\n indices[n++] = tl;\n indices[n++] = bl;\n indices[n++] = br;\n indices[n++] = tr;\n indices[n++] = tl;\n }\n }\n this._fillerMesh.createAndSetVertexBuffer('position_f32x3', vertices);\n this._fillerMesh.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n for (const fmt of this._extraInstanceBuffers) {\n this._fillerMesh.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n }\n this._fillerMesh.createAndSetIndexBuffer(indices);\n this._fillerMesh.indexStart = 0;\n this._fillerMesh.indexCount = indices.length;\n this._fillerMesh.primitiveType = 'triangle-list';\n this._fillerMeshAABB = this.calcAABB(vertices);\n\n const indicesLines = new Uint16Array(indices.length * 2);\n for (let i = 0; i < indices.length / 3; i++) {\n indicesLines[i * 6 + 0] = indices[i * 3 + 0];\n indicesLines[i * 6 + 1] = indices[i * 3 + 1];\n indicesLines[i * 6 + 2] = indices[i * 3 + 1];\n indicesLines[i * 6 + 3] = indices[i * 3 + 2];\n indicesLines[i * 6 + 4] = indices[i * 3 + 2];\n indicesLines[i * 6 + 5] = indices[i * 3 + 0];\n }\n this._fillerMeshLines?.dispose();\n this._fillerMeshLines = new Primitive();\n this._fillerMeshLines.setVertexBuffer(this._fillerMesh.getVertexBuffer('position'));\n this._fillerMeshLines.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n for (const fmt of this._extraInstanceBuffers) {\n this._fillerMeshLines.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n }\n this._fillerMeshLines.createAndSetIndexBuffer(indicesLines);\n this._fillerMeshLines.indexStart = 0;\n this._fillerMeshLines.indexCount = indicesLines.length;\n this._fillerMeshLines.primitiveType = 'line-list';\n }\n generateTrimMesh() {\n this._trimMesh?.dispose();\n this._trimMesh = new Primitive();\n const clipmapVertResolution = this._tileResolution * 4 + 2;\n const vertices = new Float32Array((clipmapVertResolution * 2 + 1) * 2 * 3);\n let n = 0;\n const d = 0.5 * (clipmapVertResolution + 1);\n for (let i = 0; i < clipmapVertResolution + 1; i++) {\n vertices[n++] = 0 - d;\n vertices[n++] = clipmapVertResolution - i - d;\n vertices[n++] = 0;\n vertices[n++] = 1 - d;\n vertices[n++] = clipmapVertResolution - i - d;\n vertices[n++] = 0;\n }\n const startOfHorizonal = n / 3;\n for (let i = 0; i < clipmapVertResolution; i++) {\n vertices[n++] = i + 1 - d;\n vertices[n++] = 0 - d;\n vertices[n++] = 0;\n vertices[n++] = i + 1 - d;\n vertices[n++] = 1 - d;\n vertices[n++] = 0;\n }\n n = 0;\n const indices = new Uint16Array((clipmapVertResolution * 2 - 1) * 6);\n for (let i = 0; i < clipmapVertResolution; i++) {\n indices[n++] = (i + 0) * 2 + 1;\n indices[n++] = (i + 1) * 2 + 0;\n indices[n++] = (i + 0) * 2 + 0;\n indices[n++] = (i + 1) * 2 + 1;\n indices[n++] = (i + 1) * 2 + 0;\n indices[n++] = (i + 0) * 2 + 1;\n }\n for (let i = 0; i < clipmapVertResolution - 1; i++) {\n indices[n++] = startOfHorizonal + (i + 0) * 2 + 1;\n indices[n++] = startOfHorizonal + (i + 1) * 2 + 0;\n indices[n++] = startOfHorizonal + (i + 0) * 2 + 0;\n indices[n++] = startOfHorizonal + (i + 1) * 2 + 1;\n indices[n++] = startOfHorizonal + (i + 1) * 2 + 0;\n indices[n++] = startOfHorizonal + (i + 0) * 2 + 1;\n }\n this._trimMesh.createAndSetVertexBuffer('position_f32x3', vertices);\n this._trimMesh.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n for (const fmt of this._extraInstanceBuffers) {\n this._trimMesh.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n }\n this._trimMesh.createAndSetIndexBuffer(indices);\n this._trimMesh.indexStart = 0;\n this._trimMesh.indexCount = indices.length;\n this._trimMesh.primitiveType = 'triangle-list';\n this._trimMeshAABB = this.calcAABB(vertices);\n\n const indicesLines = new Uint16Array(indices.length * 2);\n for (let i = 0; i < indices.length / 3; i++) {\n indicesLines[i * 6 + 0] = indices[i * 3 + 0];\n indicesLines[i * 6 + 1] = indices[i * 3 + 1];\n indicesLines[i * 6 + 2] = indices[i * 3 + 1];\n indicesLines[i * 6 + 3] = indices[i * 3 + 2];\n indicesLines[i * 6 + 4] = indices[i * 3 + 2];\n indicesLines[i * 6 + 5] = indices[i * 3 + 0];\n }\n this._trimMeshLines?.dispose();\n this._trimMeshLines = new Primitive();\n this._trimMeshLines.setVertexBuffer(this._trimMesh.getVertexBuffer('position'));\n this._trimMeshLines.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n for (const fmt of this._extraInstanceBuffers) {\n this._trimMeshLines.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n }\n this._trimMeshLines.createAndSetIndexBuffer(indicesLines);\n this._trimMeshLines.indexStart = 0;\n this._trimMeshLines.indexCount = indicesLines.length;\n this._trimMeshLines.primitiveType = 'line-list';\n }\n generateCrossMesh() {\n const patchVertResolution = this._tileResolution + 1;\n const vertices = new Float32Array(patchVertResolution * 8 * 3);\n let n = 0;\n for (let i = 0; i < patchVertResolution * 2; i++) {\n vertices[n++] = i - this._tileResolution;\n vertices[n++] = 0;\n vertices[n++] = 0;\n vertices[n++] = i - this._tileResolution;\n vertices[n++] = 1;\n vertices[n++] = 0;\n }\n const startOfVertical = n / 3;\n for (let i = 0; i < patchVertResolution * 2; i++) {\n vertices[n++] = 0;\n vertices[n++] = i - this._tileResolution;\n vertices[n++] = 0;\n vertices[n++] = 1;\n vertices[n++] = i - this._tileResolution;\n vertices[n++] = 0;\n }\n n = 0;\n const indices = new Uint16Array(this._tileResolution * 24 + 6);\n for (let i = 0; i < this._tileResolution * 2 + 1; i++) {\n const bl = i * 2 + 0;\n const br = i * 2 + 1;\n const tl = i * 2 + 2;\n const tr = i * 2 + 3;\n indices[n++] = br;\n indices[n++] = tr;\n indices[n++] = bl;\n indices[n++] = bl;\n indices[n++] = tr;\n indices[n++] = tl;\n }\n for (let i = 0; i < this._tileResolution * 2 + 1; i++) {\n if (i === this._tileResolution) {\n continue;\n }\n const bl = i * 2 + 0;\n const br = i * 2 + 1;\n const tl = i * 2 + 2;\n const tr = i * 2 + 3;\n indices[n++] = startOfVertical + br;\n indices[n++] = startOfVertical + bl;\n indices[n++] = startOfVertical + tr;\n indices[n++] = startOfVertical + bl;\n indices[n++] = startOfVertical + tl;\n indices[n++] = startOfVertical + tr;\n }\n this._crossMesh?.dispose();\n this._crossMesh = new Primitive();\n this._crossMesh.createAndSetVertexBuffer('position_f32x3', vertices);\n this._crossMesh.createAndSetVertexBuffer(\n 'tex0_f32x4',\n this.allocNonInstanceBuffer(0, 0, 0, 0),\n 'instance'\n );\n this._nonInstanceDataPoolSize++;\n for (const fmt of this._extraInstanceBuffers) {\n this._crossMesh.createAndSetVertexBuffer(fmt, this.allocNonInstanceBuffer(0, 0, 0, 0), 'instance');\n this._nonInstanceDataPoolSize++;\n }\n this._crossMesh.createAndSetIndexBuffer(indices);\n this._crossMesh.indexStart = 0;\n this._crossMesh.indexCount = indices.length;\n this._crossMesh.primitiveType = 'triangle-list';\n this._crossMeshAABB = this.calcAABB(vertices);\n\n const indicesLines = new Uint16Array(indices.length * 2);\n for (let i = 0; i < indices.length / 3; i++) {\n indicesLines[i * 6 + 0] = indices[i * 3 + 0];\n indicesLines[i * 6 + 1] = indices[i * 3 + 1];\n indicesLines[i * 6 + 2] = indices[i * 3 + 1];\n indicesLines[i * 6 + 3] = indices[i * 3 + 2];\n indicesLines[i * 6 + 4] = indices[i * 3 + 2];\n indicesLines[i * 6 + 5] = indices[i * 3 + 0];\n }\n this._crossMeshLines?.dispose();\n this._crossMeshLines = new Primitive();\n this._crossMeshLines.setVertexBuffer(this._crossMesh.getVertexBuffer('position'));\n this._crossMeshLines.createAndSetVertexBuffer(\n 'tex0_f32x4',\n this.allocNonInstanceBuffer(0, 0, 0, 0),\n 'instance'\n );\n this._nonInstanceDataPoolSize++;\n for (const fmt of this._extraInstanceBuffers) {\n this._crossMeshLines.createAndSetVertexBuffer(fmt, this.allocNonInstanceBuffer(0, 0, 0, 0), 'instance');\n this._nonInstanceDataPoolSize++;\n }\n this._crossMeshLines.createAndSetIndexBuffer(indicesLines);\n this._crossMeshLines.indexStart = 0;\n this._crossMeshLines.indexCount = indicesLines.length;\n this._crossMeshLines.primitiveType = 'line-list';\n }\n generateSeamMesh() {\n this._seamMesh?.dispose();\n this._seamMesh = new Primitive();\n const clipmapVertResolution = this._tileResolution * 4 + 2;\n const vertices = new Float32Array(clipmapVertResolution * 4 * 3);\n for (let i = 0; i < clipmapVertResolution; i++) {\n vertices[(clipmapVertResolution * 0 + i) * 3 + 0] = i;\n vertices[(clipmapVertResolution * 0 + i) * 3 + 1] = 0;\n vertices[(clipmapVertResolution * 0 + i) * 3 + 2] = 0;\n vertices[(clipmapVertResolution * 1 + i) * 3 + 0] = clipmapVertResolution;\n vertices[(clipmapVertResolution * 1 + i) * 3 + 1] = i;\n vertices[(clipmapVertResolution * 1 + i) * 3 + 2] = 0;\n vertices[(clipmapVertResolution * 2 + i) * 3 + 0] = clipmapVertResolution - i;\n vertices[(clipmapVertResolution * 2 + i) * 3 + 1] = clipmapVertResolution;\n vertices[(clipmapVertResolution * 2 + i) * 3 + 2] = 0;\n vertices[(clipmapVertResolution * 3 + i) * 3 + 0] = 0;\n vertices[(clipmapVertResolution * 3 + i) * 3 + 1] = clipmapVertResolution - i;\n vertices[(clipmapVertResolution * 3 + i) * 3 + 2] = 0;\n }\n const indices = new Uint16Array(clipmapVertResolution * 6);\n let n = 0;\n for (let i = 0; i < clipmapVertResolution * 4; i += 2) {\n indices[n++] = i + 1;\n indices[n++] = i + 2;\n indices[n++] = i;\n }\n indices[indices.length - 1] = 0;\n this._seamMesh.createAndSetVertexBuffer('position_f32x3', vertices);\n this._seamMesh.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n for (const fmt of this._extraInstanceBuffers) {\n this._seamMesh.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n }\n this._seamMesh.createAndSetIndexBuffer(indices);\n this._seamMesh.indexStart = 0;\n this._seamMesh.indexCount = indices.length;\n this._seamMesh.primitiveType = 'triangle-list';\n this._seamMeshAABB = this.calcAABB(vertices);\n\n const indicesLines = new Uint16Array(indices.length * 2);\n for (let i = 0; i < indices.length / 3; i++) {\n indicesLines[i * 6 + 0] = indices[i * 3 + 0];\n indicesLines[i * 6 + 1] = indices[i * 3 + 1];\n indicesLines[i * 6 + 2] = indices[i * 3 + 1];\n indicesLines[i * 6 + 3] = indices[i * 3 + 2];\n indicesLines[i * 6 + 4] = indices[i * 3 + 2];\n indicesLines[i * 6 + 5] = indices[i * 3 + 0];\n }\n this._seamMeshLines?.dispose();\n this._seamMeshLines = new Primitive();\n this._seamMeshLines.setVertexBuffer(this._seamMesh.getVertexBuffer('position'));\n this._seamMeshLines.createAndSetVertexBuffer('tex0_f32x4', this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n for (const fmt of this._extraInstanceBuffers) {\n this._seamMeshLines.createAndSetVertexBuffer(fmt, this.allocInstanceBuffer(), 'instance');\n this._instanceDataPoolSize++;\n }\n this._seamMeshLines.createAndSetIndexBuffer(indicesLines);\n this._seamMeshLines.indexStart = 0;\n this._seamMeshLines.indexCount = indicesLines.length;\n this._seamMeshLines.primitiveType = 'line-list';\n }\n private intervalsOverlap(a0: number, a1: number, b0: number, b1: number) {\n return a0 <= b1 && b0 <= a1;\n }\n private updateAABB(\n aabb: AABB,\n rotation: number,\n offset: Vector2,\n scale: number,\n gridScale: number,\n outAABB: AABB\n ) {\n if (!rotation) {\n tmpAABB.minPoint.set(aabb.minPoint);\n tmpAABB.maxPoint.set(aabb.maxPoint);\n } else {\n AABB.transform(aabb, Matrix4x4.rotationZ(rotation), tmpAABB);\n }\n const minX = (tmpAABB.minPoint.x * scale + offset.x) * gridScale;\n const maxX = (tmpAABB.maxPoint.x * scale + offset.x) * gridScale;\n const minZ = (tmpAABB.minPoint.y * scale + offset.y) * gridScale;\n const maxZ = (tmpAABB.maxPoint.y * scale + offset.y) * gridScale;\n if (minX < outAABB.minPoint.x) {\n outAABB.minPoint.x = minX;\n }\n if (maxX > outAABB.maxPoint.x) {\n outAABB.maxPoint.x = maxX;\n }\n if (minZ < outAABB.minPoint.z) {\n outAABB.minPoint.z = minZ;\n }\n if (maxZ > outAABB.maxPoint.z) {\n outAABB.maxPoint.z = maxZ;\n }\n }\n private visible(\n ctx: ClipmapGatherContext,\n aabb: AABB,\n camera: Camera,\n rotation: number,\n offset: Vector2,\n scale: number,\n gridScale: number,\n level: number\n ) {\n if (!rotation) {\n tmpAABB.minPoint.set(aabb.minPoint);\n tmpAABB.maxPoint.set(aabb.maxPoint);\n } else {\n AABB.transform(aabb, Matrix4x4.rotationZ(rotation), tmpAABB);\n }\n const minX = (tmpAABB.minPoint.x * scale + offset.x) * gridScale;\n const maxX = (tmpAABB.maxPoint.x * scale + offset.x) * gridScale;\n const minZ = (tmpAABB.minPoint.y * scale + offset.y) * gridScale;\n const maxZ = (tmpAABB.maxPoint.y * scale + offset.y) * gridScale;\n ctx.calcAABB(ctx.userData, minX, maxX, minZ, maxZ, tmpAABB, level);\n return tmpAABB.getClipStateWithFrustum(camera.frustum) !== ClipState.NOT_CLIPPED;\n }\n calcLevelAABB(camera: Camera, minMaxWorldPos: Vector4, gridScale: number): AABB[] {\n const mipLevels = this.calcMipLevels(camera, minMaxWorldPos, gridScale);\n camera.getWorldPosition(tmpV3);\n\n const snappedPos = new Vector2();\n const tileSize = new Vector2();\n const base = new Vector2();\n const offset = new Vector2();\n\n const posX = tmpV3.x / gridScale;\n const posY = tmpV3.z / gridScale;\n\n const outAABB: AABB[] = [];\n for (let i = 0; i < mipLevels; i++) {\n const aabb = new AABB();\n aabb.beginExtend();\n outAABB.push(aabb);\n }\n\n snappedPos.setXY(Math.floor(posX), Math.floor(posY));\n\n // cross\n this.updateAABB(this._crossMeshAABB, null, snappedPos, 1, gridScale, outAABB[0]);\n\n for (let l = 0; l < mipLevels; l++) {\n const aabb = outAABB[l];\n const scale = 1 << l;\n snappedPos.setXY(Math.floor(posX / scale) * scale, Math.floor(posY / scale) * scale);\n // draw tiles\n tileSize.setXY(this._tileResolution << l, this._tileResolution << l);\n base.setXY(\n snappedPos.x - (this._tileResolution << (l + 1)),\n snappedPos.y - (this._tileResolution << (l + 1))\n );\n for (let x = 0; x < 4; x++) {\n for (let y = 0; y < 4; y++) {\n if (l !== 0 && (x === 1 || x === 2) && (y === 1 || y === 2)) {\n continue;\n }\n const fillX = x >= 2 ? scale : 0;\n const fillY = y >= 2 ? scale : 0;\n offset.setXY(base.x + x * tileSize.x + fillX, base.y + y * tileSize.y + fillY);\n this.updateAABB(this._tileMeshBBox, null, offset, scale, gridScale, aabb);\n }\n }\n // draw filler\n this.updateAABB(this._fillerMeshAABB, null, snappedPos, scale, gridScale, aabb);\n\n const nextScale = scale * 2;\n const nextSnappedPos = new Vector2(\n Math.floor(posX / nextScale) * nextScale,\n Math.floor(posY / nextScale) * nextScale\n );\n // draw trim\n const tileCentre = new Vector2(snappedPos.x + scale * 0.5, snappedPos.y + scale * 0.5);\n const d = new Vector2(posX - nextSnappedPos.x, posY - nextSnappedPos.y);\n let r = 0;\n r |= d.x >= scale ? 0 : 2;\n r |= d.y >= scale ? 0 : 1;\n this.updateAABB(this._trimMeshAABB, rotationValues[r], tileCentre, scale, gridScale, aabb);\n // draw seam\n const nextBase = new Vector2(\n nextSnappedPos.x - (this._tileResolution << (l + 1)),\n nextSnappedPos.y - (this._tileResolution << (l + 1))\n );\n this.updateAABB(this._seamMeshAABB, null, nextBase, scale, gridScale, aabb);\n }\n return outAABB;\n }\n private calcMipLevels(camera: Camera, minMaxWorldPos: Vector4, gridScale: number) {\n camera.getWorldPosition(tmpV3);\n const distX = Math.max(Math.abs(tmpV3.x - minMaxWorldPos.x), Math.abs(tmpV3.x - minMaxWorldPos.z));\n const distY = Math.max(Math.abs(tmpV3.z - minMaxWorldPos.y), Math.abs(tmpV3.z - minMaxWorldPos.w));\n const maxDist = Math.min(Math.max(distX, distY), camera.getFarPlane());\n return Math.min(\n Math.max(Math.ceil(Math.log2(maxDist / (this._tileResolution * gridScale))), 0) + 1,\n this._maxMipLevels\n );\n }\n private addInstance(\n info: PrimitiveInstanceInfo,\n rotation: number,\n offsetX: number,\n offsetY: number,\n scale: number,\n mipLevel: number\n ) {\n info.mipLevels[info.numInstances] = mipLevel;\n info.instanceDatas[info.numInstances * 4 + 0] = rotation;\n info.instanceDatas[info.numInstances * 4 + 1] = scale;\n info.instanceDatas[info.numInstances * 4 + 2] = offsetX;\n info.instanceDatas[info.numInstances * 4 + 3] = offsetY;\n info.maxMiplevel = mipLevel;\n info.numInstances++;\n }\n\n gather(context: ClipmapGatherContext): PrimitiveInstanceInfo[] {\n this._instanceDataPoolSize = this._instanceDataPool.length;\n this._mipLevelDataPoolSize = this._mipLevelDataPool.length;\n this._nonInstanceDataPoolSize = this._nonInstanceDataPool.length;\n this._nonInstanceMipLevelDataPoolSize = this._nonInstanceMipLevelDataPool.length;\n const renderData: PrimitiveInstanceInfo[] = [];\n const mipLevels = this.calcMipLevels(context.camera, context.minMaxWorldPos, context.gridScale);\n context.camera.getWorldPosition(tmpV3);\n\n const snappedPos = new Vector2();\n const tileSize = new Vector2();\n const base = new Vector2();\n const offset = new Vector2();\n\n const posX = tmpV3.x / context.gridScale;\n const posY = tmpV3.z / context.gridScale;\n\n // draw cross\n snappedPos.setXY(Math.floor(posX), Math.floor(posY));\n if (\n this.visible(context, this._crossMeshAABB, context.camera, null, snappedPos, 1, context.gridScale, 0)\n ) {\n const crossPrimitives: PrimitiveInstanceInfo = {\n primitive: this._wireframe ? this._crossMeshLines : this._crossMesh,\n numInstances: 1,\n instanceDatas: this.allocNonInstanceBuffer(rotationValues[0], 1, snappedPos.x, snappedPos.y),\n mipLevels: this.allocNonInstanceMipLevelBuffer(0),\n maxMiplevel: 0\n };\n renderData.push(crossPrimitives);\n }\n\n const tilePrimitives: PrimitiveInstanceInfo = {\n primitive: this._wireframe ? this._tileMeshLines : this._tileMesh,\n numInstances: 0,\n instanceDatas: this.allocInstanceBuffer(),\n mipLevels: this.allocMipLevelBuffer(),\n maxMiplevel: 0\n };\n const fillerPrimitives: PrimitiveInstanceInfo = {\n primitive: this._wireframe ? this._fillerMeshLines : this._fillerMesh,\n numInstances: 0,\n instanceDatas: this.allocInstanceBuffer(),\n mipLevels: this.allocMipLevelBuffer(),\n maxMiplevel: 0\n };\n const trimPrimitives: PrimitiveInstanceInfo = {\n primitive: this._wireframe ? this._trimMeshLines : this._trimMesh,\n numInstances: 0,\n instanceDatas: this.allocInstanceBuffer(),\n mipLevels: this.allocMipLevelBuffer(),\n maxMiplevel: 0\n };\n const seamPrimitives: PrimitiveInstanceInfo = {\n primitive: this._wireframe ? this._seamMeshLines : this._seamMesh,\n numInstances: 0,\n instanceDatas: this.allocInstanceBuffer(),\n mipLevels: this.allocMipLevelBuffer(),\n maxMiplevel: 0\n };\n\n for (let l = 0; l < mipLevels; l++) {\n const scale = 1 << l;\n snappedPos.setXY(Math.floor(posX / scale) * scale, Math.floor(posY / scale) * scale);\n // draw tiles\n tileSize.setXY(this._tileResolution << l, this._tileResolution << l);\n base.setXY(\n snappedPos.x - (this._tileResolution << (l + 1)),\n snappedPos.y - (this._tileResolution << (l + 1))\n );\n for (let x = 0; x < 4; x++) {\n for (let y = 0; y < 4; y++) {\n if (l !== 0 && (x === 1 || x === 2) && (y === 1 || y === 2)) {\n continue;\n }\n const fillX = x >= 2 ? scale : 0;\n const fillY = y >= 2 ? scale : 0;\n offset.setXY(base.x + x * tileSize.x + fillX, base.y + y * tileSize.y + fillY);\n if (\n this.intervalsOverlap(\n offset.x * context.gridScale,\n (offset.x + tileSize.x) * context.gridScale,\n context.minMaxWorldPos.x,\n context.minMaxWorldPos.z\n ) &&\n this.intervalsOverlap(\n offset.y * context.gridScale,\n (offset.y + tileSize.y) * context.gridScale,\n context.minMaxWorldPos.y,\n context.minMaxWorldPos.w\n )\n ) {\n if (\n this.visible(\n context,\n this._tileMeshBBox,\n context.camera,\n null,\n offset,\n scale,\n context.gridScale,\n l\n )\n ) {\n this.addInstance(tilePrimitives, rotationValues[0], offset.x, offset.y, scale, l);\n }\n }\n }\n }\n // draw filler\n if (\n this.visible(\n context,\n this._fillerMeshAABB,\n context.camera,\n null,\n snappedPos,\n scale,\n context.gridScale,\n l\n )\n ) {\n this.addInstance(fillerPrimitives, rotationValues[0], snappedPos.x, snappedPos.y, scale, l);\n }\n\n if (l !== mipLevels - 1) {\n const nextScale = scale * 2;\n const nextSnappedPos = new Vector2(\n Math.floor(posX / nextScale) * nextScale,\n Math.floor(posY / nextScale) * nextScale\n );\n // draw trim\n const tileCentre = new Vector2(snappedPos.x + scale * 0.5, snappedPos.y + scale * 0.5);\n const d = new Vector2(posX - nextSnappedPos.x, posY - nextSnappedPos.y);\n let r = 0;\n r |= d.x >= scale ? 0 : 2;\n r |= d.y >= scale ? 0 : 1;\n if (\n this.visible(\n context,\n this._trimMeshAABB,\n context.camera,\n rotationValues[r],\n tileCentre,\n scale,\n context.gridScale,\n l\n )\n ) {\n this.addInstance(trimPrimitives, rotationValues[r], tileCentre.x, tileCentre.y, scale, l);\n }\n // draw seam\n const nextBase = new Vector2(\n nextSnappedPos.x - (this._tileResolution << (l + 1)),\n nextSnappedPos.y - (this._tileResolution << (l + 1))\n );\n if (\n this.visible(\n context,\n this._seamMeshAABB,\n context.camera,\n null,\n nextBase,\n scale,\n context.gridScale,\n l\n )\n ) {\n this.addInstance(seamPrimitives, rotationValues[0], nextBase.x, nextBase.y, scale, l);\n }\n }\n }\n if (tilePrimitives.numInstances > 0) {\n renderData.push(tilePrimitives);\n }\n if (fillerPrimitives.numInstances > 0) {\n renderData.push(fillerPrimitives);\n }\n if (trimPrimitives.numInstances > 0) {\n renderData.push(trimPrimitives);\n }\n if (seamPrimitives.numInstances > 0) {\n renderData.push(seamPrimitives);\n }\n for (const info of renderData) {\n info.primitive\n .getVertexBuffer('texCoord0')\n .bufferSubData(0, info.instanceDatas, 0, info.numInstances * 4);\n }\n return renderData;\n }\n draw(context: ClipmapDrawContext): number {\n let drawn = 0;\n const mipLevels = this.calcMipLevels(context.camera, context.minMaxWorldPos, context.gridScale);\n context.camera.getWorldPosition(tmpV3);\n\n const snappedPos = new Vector2();\n const tileSize = new Vector2();\n const base = new Vector2();\n const offset = new Vector2();\n\n const posX = tmpV3.x / context.gridScale;\n const posY = tmpV3.z / context.gridScale;\n\n // draw cross\n snappedPos.setXY(Math.floor(posX), Math.floor(posY));\n if (\n this.visible(context, this._crossMeshAABB, context.camera, null, snappedPos, 1, context.gridScale, 0)\n ) {\n context.drawPrimitive(\n this._wireframe ? this._crossMeshLines : this._crossMesh,\n rotationValues[0],\n snappedPos,\n 1,\n context.gridScale,\n 0\n );\n drawn++;\n }\n\n for (let l = 0; l < mipLevels; l++) {\n const scale = 1 << l;\n snappedPos.setXY(Math.floor(posX / scale) * scale, Math.floor(posY / scale) * scale);\n // draw tiles\n tileSize.setXY(this._tileResolution << l, this._tileResolution << l);\n base.setXY(\n snappedPos.x - (this._tileResolution << (l + 1)),\n snappedPos.y - (this._tileResolution << (l + 1))\n );\n for (let x = 0; x < 4; x++) {\n for (let y = 0; y < 4; y++) {\n if (l !== 0 && (x === 1 || x === 2) && (y === 1 || y === 2)) {\n continue;\n }\n const fillX = x >= 2 ? scale : 0;\n const fillY = y >= 2 ? scale : 0;\n offset.setXY(base.x + x * tileSize.x + fillX, base.y + y * tileSize.y + fillY);\n if (\n this.intervalsOverlap(\n offset.x * context.gridScale,\n (offset.x + tileSize.x) * context.gridScale,\n context.minMaxWorldPos.x,\n context.minMaxWorldPos.z\n ) &&\n this.intervalsOverlap(\n offset.y * context.gridScale,\n (offset.y + tileSize.y) * context.gridScale,\n context.minMaxWorldPos.y,\n context.minMaxWorldPos.w\n )\n ) {\n if (\n this.visible(\n context,\n this._tileMeshBBox,\n context.camera,\n null,\n offset,\n scale,\n context.gridScale,\n l\n )\n ) {\n context.drawPrimitive(\n this._wireframe ? this._tileMeshLines : this._tileMesh,\n rotationValues[0],\n offset,\n scale,\n context.gridScale,\n l\n );\n drawn++;\n }\n }\n }\n }\n // draw filler\n if (\n this.visible(\n context,\n this._fillerMeshAABB,\n context.camera,\n null,\n snappedPos,\n scale,\n context.gridScale,\n l\n )\n ) {\n context.drawPrimitive(\n this._wireframe ? this._fillerMeshLines : this._fillerMesh,\n rotationValues[0],\n snappedPos,\n scale,\n context.gridScale,\n l\n );\n drawn++;\n }\n\n if (l !== mipLevels - 1) {\n const nextScale = scale * 2;\n const nextSnappedPos = new Vector2(\n Math.floor(posX / nextScale) * nextScale,\n Math.floor(posY / nextScale) * nextScale\n );\n // draw trim\n const tileCentre = new Vector2(snappedPos.x + scale * 0.5, snappedPos.y + scale * 0.5);\n const d = new Vector2(posX - nextSnappedPos.x, posY - nextSnappedPos.y);\n let r = 0;\n r |= d.x >= scale ? 0 : 2;\n r |= d.y >= scale ? 0 : 1;\n if (\n this.visible(\n context,\n this._trimMeshAABB,\n context.camera,\n rotationValues[r],\n tileCentre,\n scale,\n context.gridScale,\n l\n )\n ) {\n context.drawPrimitive(\n this._wireframe ? this._trimMeshLines : this._trimMesh,\n rotationValues[r],\n tileCentre,\n scale,\n context.gridScale,\n l\n );\n drawn++;\n }\n // draw seam\n const nextBase = new Vector2(\n nextSnappedPos.x - (this._tileResolution << (l + 1)),\n nextSnappedPos.y - (this._tileResolution << (l + 1))\n );\n if (\n this.visible(\n context,\n this._seamMeshAABB,\n context.camera,\n null,\n nextBase,\n scale,\n context.gridScale,\n l\n )\n ) {\n context.drawPrimitive(\n this._wireframe ? this._seamMeshLines : this._seamMesh,\n rotationValues[0],\n nextBase,\n scale,\n context.gridScale,\n l\n );\n drawn++;\n }\n }\n }\n return drawn;\n }\n dispose() {\n this._crossMesh.dispose();\n this._crossMesh = null;\n this._crossMeshLines.dispose();\n this._crossMeshLines = null;\n this._fillerMesh.dispose();\n this._fillerMesh = null;\n this._fillerMeshLines.dispose();\n this._fillerMeshLines = null;\n this._seamMesh.dispose();\n this._seamMesh = null;\n this._seamMeshLines.dispose();\n this._seamMeshLines = null;\n this._trimMesh.dispose();\n this._trimMesh = null;\n this._trimMeshLines.dispose();\n this._trimMeshLines = null;\n this._tileMesh.dispose();\n this._tileMesh = null;\n this._tileMeshLines.dispose();\n this._tileMeshLines = null;\n }\n}\n"],"names":["tmpAABB","AABB","tmpV3","Vector3","rotationValues","Math","PI","Clipmap","_instanceDataPool","_instanceDataPoolSize","_mipLevelDataPool","_mipLevelDataPoolSize","_nonInstanceDataPool","_nonInstanceDataPoolSize","_nonInstanceMipLevelDataPool","_nonInstanceMipLevelDataPoolSize","_extraInstanceBuffers","_tileResolution","_maxMipLevels","_tileMesh","_tileMeshLines","_tileMeshBBox","_fillerMesh","_fillerMeshLines","_fillerMeshAABB","_trimMesh","_trimMeshLines","_trimMeshAABB","_crossMesh","_crossMeshLines","_crossMeshAABB","_seamMesh","_seamMeshLines","_seamMeshAABB","_wireframe","resolution","extraInstanceBuffers","maxMipLevels","findIndex","val","getVertexAttributeIndex","VERTEX_ATTRIB_POSITION","VERTEX_ATTRIB_TEXCOORD0","getVertexAttributeFormat","Error","slice","min","max","generateCrossMesh","generateFillerMesh","generateSeamMesh","generateTileMesh","generateTrimMesh","wireframe","tileResolution","allocInstanceBuffer","buffer","Float32Array","push","allocNonInstanceBuffer","x","y","z","w","allocMipLevelBuffer","allocNonInstanceMipLevelBuffer","patch2d","calcAABB","vertices","maxX","Number","MAX_VALUE","maxY","minX","minY","i","length","dispose","Primitive","patchVertResolution","n","indices","Uint16Array","createAndSetVertexBuffer","fmt","createAndSetIndexBuffer","indexStart","indexCount","primitiveType","indicesLines","setVertexBuffer","getVertexBuffer","offset","arm","bl","br","tl","tr","clipmapVertResolution","d","startOfHorizonal","startOfVertical","intervalsOverlap","a0","a1","b0","b1","updateAABB","aabb","rotation","scale","gridScale","outAABB","minPoint","set","maxPoint","transform","Matrix4x4","rotationZ","minZ","maxZ","visible","ctx","camera","level","userData","getClipStateWithFrustum","frustum","ClipState","NOT_CLIPPED","calcLevelAABB","minMaxWorldPos","mipLevels","calcMipLevels","getWorldPosition","snappedPos","Vector2","tileSize","base","posX","posY","beginExtend","setXY","floor","l","fillX","fillY","nextScale","nextSnappedPos","tileCentre","r","nextBase","distX","abs","distY","maxDist","getFarPlane","ceil","log2","addInstance","info","offsetX","offsetY","mipLevel","numInstances","instanceDatas","maxMiplevel","gather","context","renderData","crossPrimitives","primitive","tilePrimitives","fillerPrimitives","trimPrimitives","seamPrimitives","bufferSubData","draw","drawn","drawPrimitive"],"mappings":"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"}
|
|
@@ -1,333 +0,0 @@
|
|
|
1
|
-
import { Vector4, Matrix4x4 } from '@zephyr3d/base';
|
|
2
|
-
import { Application } from '../app/app.js';
|
|
3
|
-
import { MAX_CLUSTERED_LIGHTS } from '../values.js';
|
|
4
|
-
import { ShaderHelper } from '../material/shader/helper.js';
|
|
5
|
-
|
|
6
|
-
class ClusteredLight {
|
|
7
|
-
_tileCountX;
|
|
8
|
-
_tileCountY;
|
|
9
|
-
_tileCountZ;
|
|
10
|
-
_lights;
|
|
11
|
-
_lightIndexTexture;
|
|
12
|
-
_lightIndexFramebuffer;
|
|
13
|
-
_lightIndexProgram;
|
|
14
|
-
_bindGroup;
|
|
15
|
-
_lightIndexVertexLayout;
|
|
16
|
-
_lightIndexRenderStates;
|
|
17
|
-
_lightBuffer;
|
|
18
|
-
_sizeParam;
|
|
19
|
-
_countParam;
|
|
20
|
-
_clusterParam;
|
|
21
|
-
constructor(){
|
|
22
|
-
this._tileCountX = 16;
|
|
23
|
-
this._tileCountY = 16;
|
|
24
|
-
this._tileCountZ = 32;
|
|
25
|
-
this._lights = new Float32Array(12 * (MAX_CLUSTERED_LIGHTS + 1));
|
|
26
|
-
this._lightIndexTexture = null;
|
|
27
|
-
this._lightIndexFramebuffer = null;
|
|
28
|
-
this._lightIndexProgram = null;
|
|
29
|
-
this._lightBuffer = null;
|
|
30
|
-
this._bindGroup = null;
|
|
31
|
-
this._lightIndexVertexLayout = null;
|
|
32
|
-
this._lightIndexRenderStates = null;
|
|
33
|
-
this._sizeParam = new Vector4();
|
|
34
|
-
this._countParam = new Int32Array(4);
|
|
35
|
-
this._clusterParam = new Vector4();
|
|
36
|
-
}
|
|
37
|
-
get lightBuffer() {
|
|
38
|
-
return this._lightBuffer;
|
|
39
|
-
}
|
|
40
|
-
get clusterParam() {
|
|
41
|
-
return this._clusterParam;
|
|
42
|
-
}
|
|
43
|
-
get countParam() {
|
|
44
|
-
return this._countParam;
|
|
45
|
-
}
|
|
46
|
-
get lightIndexTexture() {
|
|
47
|
-
return this._lightIndexTexture;
|
|
48
|
-
}
|
|
49
|
-
createVertexLayout(device, textureWidth, textureHeight) {
|
|
50
|
-
let vb;
|
|
51
|
-
if (device.type === 'webgl') {
|
|
52
|
-
const vertices = new Float32Array(this._tileCountX * this._tileCountY * this._tileCountZ * 3);
|
|
53
|
-
for(let i = 0; i < vertices.length; i++){
|
|
54
|
-
const ix = i % textureWidth;
|
|
55
|
-
const iy = Math.floor(i / textureWidth);
|
|
56
|
-
vertices[i * 3 + 0] = 2 * (ix + 0.5) / textureWidth - 1;
|
|
57
|
-
vertices[i * 3 + 1] = 2 * (iy + 0.5) / textureHeight - 1;
|
|
58
|
-
vertices[i * 3 + 2] = i;
|
|
59
|
-
}
|
|
60
|
-
vb = device.createVertexBuffer('position_f32x3', vertices);
|
|
61
|
-
} else {
|
|
62
|
-
const vertices = new Float32Array(this._tileCountX * this._tileCountY * this._tileCountZ * 2);
|
|
63
|
-
for(let i = 0; i < vertices.length; i++){
|
|
64
|
-
const ix = i % textureWidth;
|
|
65
|
-
const iy = Math.floor(i / textureWidth);
|
|
66
|
-
vertices[i * 2 + 0] = 2 * (ix + 0.5) / textureWidth - 1;
|
|
67
|
-
vertices[i * 2 + 1] = 2 * (iy + 0.5) / textureHeight - 1;
|
|
68
|
-
}
|
|
69
|
-
vb = device.createVertexBuffer('position_f32x2', vertices);
|
|
70
|
-
}
|
|
71
|
-
this._lightIndexVertexLayout = device.createVertexLayout({
|
|
72
|
-
vertexBuffers: [
|
|
73
|
-
{
|
|
74
|
-
buffer: vb
|
|
75
|
-
}
|
|
76
|
-
]
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
createRenderState(device) {
|
|
80
|
-
this._lightIndexRenderStates = device.createRenderStateSet();
|
|
81
|
-
this._lightIndexRenderStates.useDepthState().enableTest(false).enableWrite(false);
|
|
82
|
-
this._lightIndexRenderStates.useRasterizerState().setCullMode('none');
|
|
83
|
-
}
|
|
84
|
-
createProgram(device) {
|
|
85
|
-
const webgl1 = device.type === 'webgl';
|
|
86
|
-
this._lightIndexProgram = device.buildRenderProgram({
|
|
87
|
-
vertex (pb) {
|
|
88
|
-
this.$inputs.pos = (webgl1 ? pb.vec3() : pb.vec2()).attrib('position');
|
|
89
|
-
this.$outputs.value = webgl1 ? pb.vec4() : pb.uvec4();
|
|
90
|
-
this.invProjMatrix = pb.mat4().uniform(0);
|
|
91
|
-
this.viewMatrix = pb.mat4().uniform(0);
|
|
92
|
-
this.sizeParam = pb.vec4().uniform(0);
|
|
93
|
-
this.countParam = pb.ivec4().uniform(0);
|
|
94
|
-
this[ShaderHelper.getLightBufferUniformName()] = pb.vec4[(MAX_CLUSTERED_LIGHTS + 1) * 3]().uniformBuffer(0);
|
|
95
|
-
pb.func('lineIntersectionToZPlane', [
|
|
96
|
-
pb.vec3('a'),
|
|
97
|
-
pb.vec3('b'),
|
|
98
|
-
pb.float('zDistance')
|
|
99
|
-
], function() {
|
|
100
|
-
this.$l.normal = pb.vec3(0, 0, 1);
|
|
101
|
-
this.$l.ab = pb.sub(this.b, this.a);
|
|
102
|
-
this.$l.t = pb.div(pb.sub(this.zDistance, pb.dot(this.normal, this.a)), pb.dot(this.normal, this.ab));
|
|
103
|
-
this.$return(pb.add(this.a, pb.mul(this.t, this.ab)));
|
|
104
|
-
});
|
|
105
|
-
pb.func('clipToView', [
|
|
106
|
-
pb.vec4('clip')
|
|
107
|
-
], function() {
|
|
108
|
-
this.$l.view = pb.mul(this.invProjMatrix, this.clip);
|
|
109
|
-
this.$return(pb.div(this.view, this.view.w));
|
|
110
|
-
});
|
|
111
|
-
pb.func('screenToView', [
|
|
112
|
-
pb.vec4('screen')
|
|
113
|
-
], function() {
|
|
114
|
-
this.$l.texCoord = pb.div(this.screen.xy, this.sizeParam.xy);
|
|
115
|
-
this.$l.clip = pb.vec4(pb.sub(pb.mul(pb.vec2(this.texCoord.x, pb.sub(1, this.texCoord.y)), 2), pb.vec2(1)), this.screen.z, this.screen.w);
|
|
116
|
-
this.$return(this.clipToView(this.clip));
|
|
117
|
-
});
|
|
118
|
-
pb.func('sphereIntersectsAABB', [
|
|
119
|
-
pb.vec4('sphere'),
|
|
120
|
-
pb.vec3('aabbMin'),
|
|
121
|
-
pb.vec3('aabbMax')
|
|
122
|
-
], function() {
|
|
123
|
-
this.$l.dmin = pb.float(0);
|
|
124
|
-
this.$if(pb.lessThanEqual(this.sphere.w, 0), function() {
|
|
125
|
-
this.$return(true);
|
|
126
|
-
});
|
|
127
|
-
this.$for(pb.int('i'), 0, 3, function() {
|
|
128
|
-
this.$if(pb.lessThan(this.sphere.at(this.i), this.aabbMin.at(this.i)), function() {
|
|
129
|
-
this.$l.delta = pb.sub(this.sphere.at(this.i), this.aabbMin.at(this.i));
|
|
130
|
-
this.dmin = pb.add(this.dmin, pb.mul(this.delta, this.delta));
|
|
131
|
-
}).$elseif(pb.greaterThan(this.sphere.at(this.i), this.aabbMax.at(this.i)), function() {
|
|
132
|
-
this.$l.delta = pb.sub(this.sphere.at(this.i), this.aabbMax.at(this.i));
|
|
133
|
-
this.dmin = pb.add(this.dmin, pb.mul(this.delta, this.delta));
|
|
134
|
-
});
|
|
135
|
-
});
|
|
136
|
-
this.$if(pb.lessThanEqual(this.dmin, pb.mul(this.sphere.w, this.sphere.w)), function() {
|
|
137
|
-
this.$return(true);
|
|
138
|
-
});
|
|
139
|
-
this.$return(false);
|
|
140
|
-
});
|
|
141
|
-
pb.main(function() {
|
|
142
|
-
if (pb.getDevice().type !== 'webgpu') {
|
|
143
|
-
this.$builtins.pointSize = 1;
|
|
144
|
-
}
|
|
145
|
-
this.$builtins.position = pb.vec4(this.$inputs.pos.xy, 0, 1);
|
|
146
|
-
if (pb.getDevice().type === 'webgpu') {
|
|
147
|
-
this.$builtins.position = pb.mul(this.$builtins.position, pb.vec4(1, -1, 1, 1));
|
|
148
|
-
}
|
|
149
|
-
this.$l.tileIndex = webgl1 ? pb.int(this.$inputs.pos.z) : pb.int(this.$builtins.vertexIndex);
|
|
150
|
-
this.$l.tileSize = pb.div(this.sizeParam.xy, pb.vec2(this.countParam.xy));
|
|
151
|
-
this.$l.zIndex = pb.div(this.tileIndex, pb.mul(this.countParam.x, this.countParam.y));
|
|
152
|
-
this.$l.yIndex = pb.div(pb.sub(this.tileIndex, pb.mul(this.zIndex, this.countParam.x, this.countParam.y)), this.countParam.x);
|
|
153
|
-
this.$l.xIndex = pb.sub(this.tileIndex, pb.add(pb.mul(this.zIndex, this.countParam.x, this.countParam.y), pb.mul(this.yIndex, this.countParam.x)));
|
|
154
|
-
this.$l.maxPoint_sS = pb.vec4(pb.mul(pb.vec2(pb.float(pb.add(this.xIndex, 1)), pb.float(pb.add(this.yIndex, 1))), this.tileSize), 0.0, 1.0);
|
|
155
|
-
this.$l.minPoint_sS = pb.vec4(pb.mul(pb.vec2(pb.float(this.xIndex), pb.float(this.yIndex)), this.tileSize), 0.0, 1.0);
|
|
156
|
-
this.$l.maxPoint_vS = this.screenToView(this.maxPoint_sS).xyz;
|
|
157
|
-
this.$l.minPoint_vS = this.screenToView(this.minPoint_sS).xyz;
|
|
158
|
-
this.$l.tileNear = pb.mul(pb.neg(this.sizeParam.z), pb.pow(pb.div(this.sizeParam.w, this.sizeParam.z), pb.div(pb.float(this.zIndex), pb.float(this.countParam.z))));
|
|
159
|
-
this.$l.tileFar = pb.mul(pb.neg(this.sizeParam.z), pb.pow(pb.div(this.sizeParam.w, this.sizeParam.z), pb.div(pb.add(pb.float(this.zIndex), 1), pb.float(this.countParam.z))));
|
|
160
|
-
this.$l.eyePos = pb.vec3(0);
|
|
161
|
-
this.$l.minPointNear = this.lineIntersectionToZPlane(this.eyePos, this.minPoint_vS, this.tileNear);
|
|
162
|
-
this.$l.minPointFar = this.lineIntersectionToZPlane(this.eyePos, this.minPoint_vS, this.tileFar);
|
|
163
|
-
this.$l.maxPointNear = this.lineIntersectionToZPlane(this.eyePos, this.maxPoint_vS, this.tileNear);
|
|
164
|
-
this.$l.maxPointFar = this.lineIntersectionToZPlane(this.eyePos, this.maxPoint_vS, this.tileFar);
|
|
165
|
-
this.$l.aabbMin = pb.min(pb.min(this.minPointNear, this.minPointFar), pb.min(this.maxPointNear, this.maxPointFar));
|
|
166
|
-
this.$l.aabbMax = pb.max(pb.max(this.minPointNear, this.minPointFar), pb.max(this.maxPointNear, this.maxPointFar));
|
|
167
|
-
this.$l.n = pb.int(0);
|
|
168
|
-
if (webgl1) {
|
|
169
|
-
this.$l.lightIndices = pb.float[8]();
|
|
170
|
-
this.$for(pb.int('i'), 0, 8, function() {
|
|
171
|
-
this.lightIndices.setAt(this.i, 0);
|
|
172
|
-
});
|
|
173
|
-
this.$for(pb.int('i'), 1, 256, function() {
|
|
174
|
-
this.$if(pb.equal(this.i, this.countParam.w), function() {
|
|
175
|
-
this.$break();
|
|
176
|
-
});
|
|
177
|
-
this.$l.light = this[ShaderHelper.getLightBufferUniformName()].at(pb.mul(this.i, 3));
|
|
178
|
-
this.$l.lightPos = pb.mul(this.viewMatrix, pb.vec4(this.light.xyz, 1));
|
|
179
|
-
this.$l.lightPos.w = this.light.w;
|
|
180
|
-
this.$if(this.sphereIntersectsAABB(this.lightPos, this.aabbMin, this.aabbMax), function() {
|
|
181
|
-
this.$for(pb.int('j'), 0, 8, function() {
|
|
182
|
-
this.$if(pb.equal(this.j, this.n), function() {
|
|
183
|
-
this.lightIndices.setAt(this.j, pb.float(this.i));
|
|
184
|
-
this.n = pb.add(this.n, 1);
|
|
185
|
-
this.$break();
|
|
186
|
-
});
|
|
187
|
-
});
|
|
188
|
-
this.$if(pb.equal(this.n, 8), function() {
|
|
189
|
-
this.$break();
|
|
190
|
-
});
|
|
191
|
-
});
|
|
192
|
-
});
|
|
193
|
-
this.$outputs.value.r = pb.add(pb.mul(this.lightIndices[0], 256), this.lightIndices[1]);
|
|
194
|
-
this.$outputs.value.g = pb.add(pb.mul(this.lightIndices[2], 256), this.lightIndices[3]);
|
|
195
|
-
this.$outputs.value.b = pb.add(pb.mul(this.lightIndices[4], 256), this.lightIndices[5]);
|
|
196
|
-
this.$outputs.value.a = pb.add(pb.mul(this.lightIndices[6], 256), this.lightIndices[7]);
|
|
197
|
-
} else {
|
|
198
|
-
this.$l.lightIndex = [
|
|
199
|
-
pb.uint(0),
|
|
200
|
-
pb.uint(0),
|
|
201
|
-
pb.uint(0),
|
|
202
|
-
pb.uint(0),
|
|
203
|
-
pb.uint(0),
|
|
204
|
-
pb.uint(0),
|
|
205
|
-
pb.uint(0),
|
|
206
|
-
pb.uint(0),
|
|
207
|
-
pb.uint(0),
|
|
208
|
-
pb.uint(0),
|
|
209
|
-
pb.uint(0),
|
|
210
|
-
pb.uint(0),
|
|
211
|
-
pb.uint(0),
|
|
212
|
-
pb.uint(0),
|
|
213
|
-
pb.uint(0),
|
|
214
|
-
pb.uint(0)
|
|
215
|
-
];
|
|
216
|
-
this.$for(pb.uint('i'), 1, pb.uint(this.countParam.w), function() {
|
|
217
|
-
this.$l.light = this[ShaderHelper.getLightBufferUniformName()].at(pb.mul(this.i, 3));
|
|
218
|
-
this.$l.lightPos = pb.mul(this.viewMatrix, pb.vec4(this.light.xyz, 1));
|
|
219
|
-
this.$l.lightPos.w = this.light.w;
|
|
220
|
-
this.$if(this.sphereIntersectsAABB(this.lightPos, this.aabbMin, this.aabbMax), function() {
|
|
221
|
-
this.lightIndex.setAt(this.n, this.i);
|
|
222
|
-
this.n = pb.add(this.n, 1);
|
|
223
|
-
this.$if(pb.equal(this.n, 16), function() {
|
|
224
|
-
this.$break();
|
|
225
|
-
});
|
|
226
|
-
});
|
|
227
|
-
});
|
|
228
|
-
this.$l.r = pb.add(pb.sal(this.lightIndex[0], 24), pb.sal(this.lightIndex[1], 16), pb.sal(this.lightIndex[2], 8), this.lightIndex[3]);
|
|
229
|
-
this.$l.g = pb.add(pb.sal(this.lightIndex[4], 24), pb.sal(this.lightIndex[5], 16), pb.sal(this.lightIndex[6], 8), this.lightIndex[7]);
|
|
230
|
-
this.$l.b = pb.add(pb.sal(this.lightIndex[8], 24), pb.sal(this.lightIndex[9], 16), pb.sal(this.lightIndex[10], 8), this.lightIndex[11]);
|
|
231
|
-
this.$l.a = pb.add(pb.sal(this.lightIndex[12], 24), pb.sal(this.lightIndex[13], 16), pb.sal(this.lightIndex[14], 8), this.lightIndex[15]);
|
|
232
|
-
this.$outputs.value = pb.uvec4(this.r, this.g, this.b, this.a);
|
|
233
|
-
}
|
|
234
|
-
});
|
|
235
|
-
},
|
|
236
|
-
fragment (pb) {
|
|
237
|
-
this.$outputs.color = webgl1 ? pb.vec4() : pb.uvec4();
|
|
238
|
-
pb.main(function() {
|
|
239
|
-
this.$outputs.color = this.$inputs.value;
|
|
240
|
-
});
|
|
241
|
-
}
|
|
242
|
-
});
|
|
243
|
-
this._bindGroup = device.createBindGroup(this._lightIndexProgram.bindGroupLayouts[0]);
|
|
244
|
-
this._lightBuffer?.dispose();
|
|
245
|
-
const lightBufferType = this._lightIndexProgram.getBindingInfo(ShaderHelper.getLightBufferUniformName()).type;
|
|
246
|
-
this._lightBuffer = device.createStructuredBuffer(lightBufferType, {
|
|
247
|
-
usage: 'uniform'
|
|
248
|
-
});
|
|
249
|
-
}
|
|
250
|
-
createLightIndexTexture(device) {
|
|
251
|
-
const exp = Math.log2(this._tileCountX * this._tileCountY * this._tileCountZ);
|
|
252
|
-
const a = exp + 1 >>> 1;
|
|
253
|
-
const b = exp - a;
|
|
254
|
-
const textureWidth = 2 << a - 1;
|
|
255
|
-
const textureHeight = 2 << b - 1;
|
|
256
|
-
if (textureWidth * textureHeight !== this._tileCountX * this._tileCountY * this._tileCountZ) {
|
|
257
|
-
throw new Error('Internal error');
|
|
258
|
-
}
|
|
259
|
-
this._lightIndexTexture = device.createTexture2D(device.type === 'webgl' ? 'rgba32f' : 'rgba32ui', textureWidth, textureHeight, {
|
|
260
|
-
samplerOptions: {
|
|
261
|
-
mipFilter: 'none'
|
|
262
|
-
}
|
|
263
|
-
});
|
|
264
|
-
this._lightIndexTexture.name = 'ClusterLightIndex';
|
|
265
|
-
this._lightIndexFramebuffer?.dispose();
|
|
266
|
-
this._lightIndexFramebuffer = device.createFrameBuffer([
|
|
267
|
-
this._lightIndexTexture
|
|
268
|
-
], null);
|
|
269
|
-
}
|
|
270
|
-
calculateLightIndex(camera, renderQueue) {
|
|
271
|
-
const numLights = this.getVisibleLights(renderQueue, this._lights);
|
|
272
|
-
const device = Application.instance.device;
|
|
273
|
-
if (!this._lightIndexTexture) {
|
|
274
|
-
this.createLightIndexTexture(device);
|
|
275
|
-
}
|
|
276
|
-
if (!this._lightIndexProgram) {
|
|
277
|
-
this.createProgram(device);
|
|
278
|
-
}
|
|
279
|
-
if (!this._lightIndexVertexLayout) {
|
|
280
|
-
this.createVertexLayout(device, this._lightIndexTexture.width, this._lightIndexTexture.height);
|
|
281
|
-
}
|
|
282
|
-
if (!this._lightIndexRenderStates) {
|
|
283
|
-
this.createRenderState(device);
|
|
284
|
-
}
|
|
285
|
-
const viewport = device.getViewport();
|
|
286
|
-
const vw = device.screenToDevice(viewport.width);
|
|
287
|
-
const vh = device.screenToDevice(viewport.height);
|
|
288
|
-
const scale = this._tileCountZ / Math.log2(camera.getFarPlane() / camera.getNearPlane());
|
|
289
|
-
const bias = -(this._tileCountZ * Math.log2(camera.getNearPlane()) / Math.log2(camera.getFarPlane() / camera.getNearPlane()));
|
|
290
|
-
this._clusterParam.setXYZW(vw, vh, scale, bias);
|
|
291
|
-
device.pushDeviceStates();
|
|
292
|
-
device.setFramebuffer(this._lightIndexFramebuffer);
|
|
293
|
-
if (numLights > 0) {
|
|
294
|
-
if (this._lightBuffer.disposed) {
|
|
295
|
-
this._lightBuffer.reload();
|
|
296
|
-
}
|
|
297
|
-
this._lightBuffer.bufferSubData(0, this._lights);
|
|
298
|
-
this._sizeParam.setXYZW(vw, vh, camera.getNearPlane(), camera.getFarPlane());
|
|
299
|
-
this._countParam[0] = this._tileCountX;
|
|
300
|
-
this._countParam[1] = this._tileCountY;
|
|
301
|
-
this._countParam[2] = this._tileCountZ;
|
|
302
|
-
this._countParam[3] = numLights + 1;
|
|
303
|
-
this._bindGroup.setValue('invProjMatrix', Matrix4x4.invert(camera.getProjectionMatrix()));
|
|
304
|
-
this._bindGroup.setValue('viewMatrix', camera.viewMatrix);
|
|
305
|
-
this._bindGroup.setValue('sizeParam', this._sizeParam);
|
|
306
|
-
this._bindGroup.setValue('countParam', this._countParam);
|
|
307
|
-
this._bindGroup.setBuffer(ShaderHelper.getLightBufferUniformName(), this._lightBuffer);
|
|
308
|
-
device.setProgram(this._lightIndexProgram);
|
|
309
|
-
device.setVertexLayout(this._lightIndexVertexLayout);
|
|
310
|
-
device.setBindGroup(0, this._bindGroup);
|
|
311
|
-
const savedRS = device.getRenderStates();
|
|
312
|
-
device.setRenderStates(this._lightIndexRenderStates);
|
|
313
|
-
device.draw('point-list', 0, this._tileCountX * this._tileCountY * this._tileCountZ);
|
|
314
|
-
device.setRenderStates(savedRS);
|
|
315
|
-
} else {
|
|
316
|
-
device.clearFrameBuffer(new Vector4(0, 0, 0, 0), 1, 0);
|
|
317
|
-
}
|
|
318
|
-
device.popDeviceStates();
|
|
319
|
-
}
|
|
320
|
-
getVisibleLights(renderQueue, lights) {
|
|
321
|
-
const numLights = Math.min(renderQueue.unshadowedLights.length, MAX_CLUSTERED_LIGHTS);
|
|
322
|
-
for(let i = 1; i <= numLights; i++){
|
|
323
|
-
const light = renderQueue.unshadowedLights[i - 1];
|
|
324
|
-
lights.set(light.positionAndRange, i * 12);
|
|
325
|
-
lights.set(light.directionAndCutoff, i * 12 + 4);
|
|
326
|
-
lights.set(light.diffuseAndIntensity, i * 12 + 8);
|
|
327
|
-
}
|
|
328
|
-
return numLights;
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
export { ClusteredLight };
|
|
333
|
-
//# sourceMappingURL=cluster_light.js.map
|