@zephyr3d/scene 0.9.27 → 0.10.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 +60 -27
- package/dist/animation/animation_bank.js +634 -0
- package/dist/animation/animation_bank.js.map +1 -0
- package/dist/animation/animation_bank_gpu.js +256 -0
- package/dist/animation/animation_bank_gpu.js.map +1 -0
- package/dist/animation/animationset.js +54 -0
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/cloth/gpu_cloth_component.js +406 -0
- package/dist/animation/cloth/gpu_cloth_component.js.map +1 -0
- package/dist/animation/cloth/gpu_cloth_system.js +332 -202
- package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
- package/dist/animation/gpu_animation_driver.js +289 -0
- package/dist/animation/gpu_animation_driver.js.map +1 -0
- package/dist/animation/joint_dynamics/collision.js +112 -1
- package/dist/animation/joint_dynamics/collision.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +6 -0
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +11 -0
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
- package/dist/animation/joint_dynamics/solver.js +50 -12
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics/types.js.map +1 -1
- package/dist/animation/skeleton.js +279 -55
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skin_palette_atlas.js +252 -0
- package/dist/animation/skin_palette_atlas.js.map +1 -0
- package/dist/animation/spring/multi_chain_spring_system.js +298 -38
- package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
- package/dist/animation/spring/spring_chain.js +2 -0
- package/dist/animation/spring/spring_chain.js.map +1 -1
- package/dist/animation/spring/spring_collider.js +159 -21
- package/dist/animation/spring/spring_collider.js.map +1 -1
- package/dist/animation/spring/spring_particle.js +1 -0
- package/dist/animation/spring/spring_particle.js.map +1 -1
- package/dist/animation/spring/spring_solver.js +173 -0
- package/dist/animation/spring/spring_solver.js.map +1 -0
- package/dist/animation/spring/spring_system.js +249 -24
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/animation/spring_modifier.js +32 -1
- package/dist/animation/spring_modifier.js.map +1 -1
- package/dist/app/app.js +26 -0
- package/dist/app/app.js.map +1 -1
- package/dist/app/engine.js +86 -15
- package/dist/app/engine.js.map +1 -1
- package/dist/app/gamepad.js +191 -0
- package/dist/app/gamepad.js.map +1 -0
- package/dist/app/inputactions.js +271 -0
- package/dist/app/inputactions.js.map +1 -0
- package/dist/app/inputmgr.js +331 -22
- package/dist/app/inputmgr.js.map +1 -1
- package/dist/app/loading.js +138 -0
- package/dist/app/loading.js.map +1 -0
- package/dist/app/pipelinecache.js +209 -0
- package/dist/app/pipelinecache.js.map +1 -0
- package/dist/app/runtimescript.js +25 -0
- package/dist/app/runtimescript.js.map +1 -1
- package/dist/app/scriptingsystem.js +54 -0
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +7 -2
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/asset_manifest.js +59 -0
- package/dist/asset/asset_manifest.js.map +1 -0
- package/dist/asset/asset_preload.js +258 -0
- package/dist/asset/asset_preload.js.map +1 -0
- package/dist/asset/assetmanager.js +117 -65
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/loaders/ktx2/basis/LICENSE +201 -0
- package/dist/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
- package/dist/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
- package/dist/asset/loaders/ktx2/basis_location.js +17 -0
- package/dist/asset/loaders/ktx2/basis_location.js.map +1 -0
- package/dist/asset/loaders/ktx2/ktx2_loader.js +88 -0
- package/dist/asset/loaders/ktx2/ktx2_loader.js.map +1 -0
- package/dist/asset/loaders/ktx2/ktx2_targets.js +118 -0
- package/dist/asset/loaders/ktx2/ktx2_targets.js.map +1 -0
- package/dist/asset/loaders/ktx2/transcoder_pool.js +259 -0
- package/dist/asset/loaders/ktx2/transcoder_pool.js.map +1 -0
- package/dist/asset/mesh_lod_builder.js +104 -0
- package/dist/asset/mesh_lod_builder.js.map +1 -0
- package/dist/asset/mesh_settings.js +111 -0
- package/dist/asset/mesh_settings.js.map +1 -0
- package/dist/asset/meshopt_decoder.js +18 -0
- package/dist/asset/meshopt_decoder.js.map +1 -0
- package/dist/asset/meshopt_simplifier.js +26 -0
- package/dist/asset/meshopt_simplifier.js.map +1 -0
- package/dist/asset/model.js +171 -1
- package/dist/asset/model.js.map +1 -1
- package/dist/asset/texture_settings.js +231 -0
- package/dist/asset/texture_settings.js.map +1 -0
- package/dist/asset/zmsh_binary.js +131 -0
- package/dist/asset/zmsh_binary.js.map +1 -0
- package/dist/asset/zsdf_binary.js +111 -0
- package/dist/asset/zsdf_binary.js.map +1 -0
- package/dist/blitter/bilateralblur.js +1 -2
- package/dist/blitter/bilateralblur.js.map +1 -1
- package/dist/blitter/gaussianblur.js +1 -6
- package/dist/blitter/gaussianblur.js.map +1 -1
- package/dist/camera/base.js +31 -10
- package/dist/camera/base.js.map +1 -1
- package/dist/camera/camera.js +104 -178
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/follow.js +342 -0
- package/dist/camera/follow.js.map +1 -0
- package/dist/camera/fps.js +9 -7
- package/dist/camera/fps.js.map +1 -1
- package/dist/camera/orbit.js +46 -19
- package/dist/camera/orbit.js.map +1 -1
- package/dist/index.d.ts +25436 -15990
- package/dist/index.js +65 -11
- package/dist/index.js.map +1 -1
- package/dist/material/blinn.js +3 -0
- package/dist/material/blinn.js.map +1 -1
- package/dist/material/eye.js +1 -1
- package/dist/material/eye.js.map +1 -1
- package/dist/material/hair.js +2 -3
- package/dist/material/hair.js.map +1 -1
- package/dist/material/lambert.js +4 -1
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +66 -4
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +118 -45
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +1 -1
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +191 -83
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +31 -206
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mtoon.js +1 -1
- package/dist/material/mtoon.js.map +1 -1
- package/dist/material/pbrmr.js +3 -0
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/pbrsg.js +3 -0
- package/dist/material/pbrsg.js.map +1 -1
- package/dist/material/sdf_debug.js +78 -0
- package/dist/material/sdf_debug.js.map +1 -0
- package/dist/material/shader/helper.js +333 -191
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/shader/terrain_blend.js +204 -43
- package/dist/material/shader/terrain_blend.js.map +1 -1
- package/dist/material/skin.js +331 -297
- package/dist/material/skin.js.map +1 -1
- package/dist/material/skinprofile.js +1058 -0
- package/dist/material/skinprofile.js.map +1 -0
- package/dist/material/sss.js +353 -0
- package/dist/material/sss.js.map +1 -0
- package/dist/material/sss_kernel.js +265 -0
- package/dist/material/sss_kernel.js.map +1 -0
- package/dist/material/sssprofile.js +879 -0
- package/dist/material/sssprofile.js.map +1 -0
- package/dist/material/subsurfaceprofile.js +4 -8
- package/dist/material/subsurfaceprofile.js.map +1 -1
- package/dist/material/terrain-cm.js +464 -188
- package/dist/material/terrain-cm.js.map +1 -1
- package/dist/material/unlit.js +3 -0
- package/dist/material/unlit.js.map +1 -1
- package/dist/material/water.js +1261 -1438
- package/dist/material/water.js.map +1 -1
- package/dist/node_modules/meshoptimizer/LICENSE +21 -0
- package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
- package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
- package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
- package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
- package/dist/physics/character.js +226 -0
- package/dist/physics/character.js.map +1 -0
- package/dist/physics/collider.js +209 -0
- package/dist/physics/collider.js.map +1 -0
- package/dist/physics/events.js +79 -0
- package/dist/physics/events.js.map +1 -0
- package/dist/physics/joint.js +272 -0
- package/dist/physics/joint.js.map +1 -0
- package/dist/physics/node_physics.js +234 -0
- package/dist/physics/node_physics.js.map +1 -0
- package/dist/physics/part.js +91 -0
- package/dist/physics/part.js.map +1 -0
- package/dist/physics/rigid_body.js +379 -0
- package/dist/physics/rigid_body.js.map +1 -0
- package/dist/physics/vehicle.js +335 -0
- package/dist/physics/vehicle.js.map +1 -0
- package/dist/physics/world.js +25 -0
- package/dist/physics/world.js.map +1 -0
- package/dist/posteffect/bloom.js +49 -14
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/motionblur.js +106 -106
- package/dist/posteffect/motionblur.js.map +1 -1
- package/dist/posteffect/postsss.js +572 -0
- package/dist/posteffect/postsss.js.map +1 -0
- package/dist/posteffect/sao.js +2 -6
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/skinsss.js +605 -355
- package/dist/posteffect/skinsss.js.map +1 -1
- package/dist/posteffect/ssgi.js +91 -162
- package/dist/posteffect/ssgi.js.map +1 -1
- package/dist/posteffect/ssr.js +3 -11
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/sss.js +4 -13
- package/dist/posteffect/sss.js.map +1 -1
- package/dist/posteffect/taa.js +1 -0
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/render/abuffer_oit.js +3 -2
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/clipmap.js +179 -64
- package/dist/render/clipmap.js.map +1 -1
- package/dist/render/cluster_light.js +958 -224
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/cull_visitor.js +25 -5
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/debug_views.js +37 -0
- package/dist/render/debug_views.js.map +1 -0
- package/dist/render/depthpass.js +5 -1
- package/dist/render/depthpass.js.map +1 -1
- package/dist/render/drawable_mixin.js +53 -6
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/dualdepthpeeling_oit.js +5 -5
- package/dist/render/dualdepthpeeling_oit.js.map +1 -1
- package/dist/render/envlight.js +196 -113
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +5 -10
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/fft_wavegenerator.js +247 -157
- package/dist/render/fft_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +16 -38
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/gi/probe_volume.js +1334 -0
- package/dist/render/gi/probe_volume.js.map +1 -0
- package/dist/render/gi/scene_gi.js +282 -0
- package/dist/render/gi/scene_gi.js.map +1 -0
- package/dist/render/gi/voxel_atlas.js +198 -0
- package/dist/render/gi/voxel_atlas.js.map +1 -0
- package/dist/render/gi/voxel_lighting.js +652 -0
- package/dist/render/gi/voxel_lighting.js.map +1 -0
- package/dist/render/gi/voxel_scene.js +642 -0
- package/dist/render/gi/voxel_scene.js.map +1 -0
- package/dist/render/gi/voxelize_pass.js +223 -0
- package/dist/render/gi/voxelize_pass.js.map +1 -0
- package/dist/render/globalbindgroup_allocator.js +3 -2
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/gpu_picking.js +9 -36
- package/dist/render/gpu_picking.js.map +1 -1
- package/dist/render/instance_culling.js +499 -0
- package/dist/render/instance_culling.js.map +1 -0
- package/dist/render/lightpass.js +19 -8
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/lod.js +46 -0
- package/dist/render/lod.js.map +1 -0
- package/dist/render/primitive.js +301 -9
- package/dist/render/primitive.js.map +1 -1
- package/dist/render/primitive_readback.js +209 -0
- package/dist/render/primitive_readback.js.map +1 -0
- package/dist/render/render_queue.js +162 -11
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +10 -7
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/blackboard.js +14 -1
- package/dist/render/rendergraph/blackboard.js.map +1 -1
- package/dist/render/rendergraph/executor.js +136 -0
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +272 -55
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/frame_graph_context.js +41 -0
- package/dist/render/rendergraph/frame_graph_context.js.map +1 -0
- package/dist/render/rendergraph/scene_render_context.js +31 -2
- package/dist/render/rendergraph/scene_render_context.js.map +1 -1
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/renderpass.js +28 -5
- package/dist/render/renderpass.js.map +1 -1
- package/dist/render/sdf/box_allocator.js +98 -0
- package/dist/render/sdf/box_allocator.js.map +1 -0
- package/dist/render/sdf/global_sdf.js +865 -0
- package/dist/render/sdf/global_sdf.js.map +1 -0
- package/dist/render/sdf/scene_sdf.js +562 -0
- package/dist/render/sdf/scene_sdf.js.map +1 -0
- package/dist/render/sdf/sdf_atlas.js +227 -0
- package/dist/render/sdf/sdf_atlas.js.map +1 -0
- package/dist/render/sdf/sdf_programs.js +42 -0
- package/dist/render/sdf/sdf_programs.js.map +1 -0
- package/dist/render/sdf/sdf_view.js +199 -0
- package/dist/render/sdf/sdf_view.js.map +1 -0
- package/dist/render/sdf/waterline.js +610 -0
- package/dist/render/sdf/waterline.js.map +1 -0
- package/dist/render/shadow_mask_pass.js +142 -25
- package/dist/render/shadow_mask_pass.js.map +1 -1
- package/dist/render/shore_wave_generator.js +1193 -0
- package/dist/render/shore_wave_generator.js.map +1 -0
- package/dist/render/sky.js +516 -86
- package/dist/render/sky.js.map +1 -1
- package/dist/render/transmission_thickness_pass.js +477 -0
- package/dist/render/transmission_thickness_pass.js.map +1 -0
- package/dist/render/underwater.js +58 -158
- package/dist/render/underwater.js.map +1 -1
- package/dist/render/virtualtexture/virtual_texture.js +1214 -0
- package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
- package/dist/render/volumetric_cloud/cloud_common.js +472 -0
- package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
- package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
- package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
- package/dist/render/volumetric_cloud/debug_view.js +131 -0
- package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
- package/dist/render/volumetric_cloud/resources.js +380 -0
- package/dist/render/volumetric_cloud/resources.js.map +1 -0
- package/dist/render/volumetric_cloud/sky_cache.js +380 -0
- package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
- package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
- package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
- package/dist/render/water_caustics.js +134 -319
- package/dist/render/water_caustics.js.map +1 -1
- package/dist/render/water_foam.js +627 -0
- package/dist/render/water_foam.js.map +1 -0
- package/dist/render/water_interaction.js +1795 -0
- package/dist/render/water_interaction.js.map +1 -0
- package/dist/render/weightedblended_oit.js +3 -3
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/basesprite.js +9 -4
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +108 -12
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +28 -7
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/foliage.js +1020 -0
- package/dist/scene/foliage.js.map +1 -0
- package/dist/scene/foliage_buckets.js +147 -0
- package/dist/scene/foliage_buckets.js.map +1 -0
- package/dist/scene/foliage_mask.js +358 -0
- package/dist/scene/foliage_mask.js.map +1 -0
- package/dist/scene/hair.js +15 -4
- package/dist/scene/hair.js.map +1 -1
- package/dist/scene/light.js +179 -13
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +327 -45
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/meshdrawable.js +6 -0
- package/dist/scene/meshdrawable.js.map +1 -1
- package/dist/scene/msdftext.js +9 -3
- package/dist/scene/msdftext.js.map +1 -1
- package/dist/scene/msdftextsprite.js +9 -3
- package/dist/scene/msdftextsprite.js.map +1 -1
- package/dist/scene/particlesys.js +8 -2
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/physics_settings.js +157 -0
- package/dist/scene/physics_settings.js.map +1 -0
- package/dist/scene/scene.js +190 -44
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +147 -6
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
- package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
- package/dist/scene/terrain-cm/grass.js +881 -42
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/grass_gpu.js +929 -0
- package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
- package/dist/scene/terrain-cm/grassmaterial.js +180 -9
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +465 -36
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
- package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
- package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
- package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
- package/dist/scene/update_queue.js +54 -0
- package/dist/scene/update_queue.js.map +1 -0
- package/dist/scene/water.js +633 -268
- package/dist/scene/water.js.map +1 -1
- package/dist/scene/water_surface_sampler.js +324 -0
- package/dist/scene/water_surface_sampler.js.map +1 -0
- package/dist/scene/wind.js +317 -0
- package/dist/scene/wind.js.map +1 -0
- package/dist/shaders/atmosphere.js +388 -166
- package/dist/shaders/atmosphere.js.map +1 -1
- package/dist/shaders/fog.js +100 -32
- package/dist/shaders/fog.js.map +1 -1
- package/dist/shaders/gi.js +365 -0
- package/dist/shaders/gi.js.map +1 -0
- package/dist/shaders/ltc_rect.js +202 -0
- package/dist/shaders/ltc_rect.js.map +1 -0
- package/dist/shaders/misc.js +1 -10
- package/dist/shaders/misc.js.map +1 -1
- package/dist/shaders/noise.js +5 -1
- package/dist/shaders/noise.js.map +1 -1
- package/dist/shaders/probes.js +309 -0
- package/dist/shaders/probes.js.map +1 -0
- package/dist/shaders/sdf.js +537 -0
- package/dist/shaders/sdf.js.map +1 -0
- package/dist/shaders/shadow.js +104 -70
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shaders/skin_brdf.js +243 -0
- package/dist/shaders/skin_brdf.js.map +1 -0
- package/dist/shaders/ssgi.js +63 -0
- package/dist/shaders/ssgi.js.map +1 -0
- package/dist/shaders/ssgi_reprojection.js +118 -0
- package/dist/shaders/ssgi_reprojection.js.map +1 -0
- package/dist/shaders/ssr.js +6 -159
- package/dist/shaders/ssr.js.map +1 -1
- package/dist/shaders/temporal.js +38 -27
- package/dist/shaders/temporal.js.map +1 -1
- package/dist/shaders/water.js +32 -82
- package/dist/shaders/water.js.map +1 -1
- package/dist/shaders/water_medium.js +7 -21
- package/dist/shaders/water_medium.js.map +1 -1
- package/dist/shadow/dom.js +110 -19
- package/dist/shadow/dom.js.map +1 -1
- package/dist/shadow/esm.js +3 -3
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/pcf_opt.js +15 -48
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +15 -53
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/pcss.js +34 -9
- package/dist/shadow/pcss.js.map +1 -1
- package/dist/shadow/shadow_impl.js +3 -8
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadow_region.js +40 -2
- package/dist/shadow/shadow_region.js.map +1 -1
- package/dist/shadow/shadowmapper.js +93 -53
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/ssm.js +18 -72
- package/dist/shadow/ssm.js.map +1 -1
- package/dist/shadow/vsm.js +3 -3
- package/dist/shadow/vsm.js.map +1 -1
- package/dist/shapes/shape.js +44 -1
- package/dist/shapes/shape.js.map +1 -1
- package/dist/utility/buoyancy.js +287 -0
- package/dist/utility/buoyancy.js.map +1 -0
- package/dist/utility/physical.js +10 -1
- package/dist/utility/physical.js.map +1 -1
- package/dist/utility/pmrem.js +17 -43
- package/dist/utility/pmrem.js.map +1 -1
- package/dist/utility/sdf/bake.js +435 -0
- package/dist/utility/sdf/bake.js.map +1 -0
- package/dist/utility/sdf/bvh.js +576 -0
- package/dist/utility/sdf/bvh.js.map +1 -0
- package/dist/utility/serialization/manager.js +34 -6
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +46 -5
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +11 -4
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +87 -254
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/cloth.js +25 -0
- package/dist/utility/serialization/scene/cloth.js.map +1 -0
- package/dist/utility/serialization/scene/common.js +14 -6
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/foliage.js +821 -0
- package/dist/utility/serialization/scene/foliage.js.map +1 -0
- package/dist/utility/serialization/scene/hair.js +11 -4
- package/dist/utility/serialization/scene/hair.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +115 -7
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +388 -220
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +69 -4
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +140 -5
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/node_physics.js +1318 -0
- package/dist/utility/serialization/scene/node_physics.js.map +1 -0
- package/dist/utility/serialization/scene/particle.js +11 -4
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/physics.js +120 -0
- package/dist/utility/serialization/scene/physics.js.map +1 -0
- package/dist/utility/serialization/scene/primitive.js +124 -10
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +1687 -51
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +11 -4
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +163 -33
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/text.js +11 -4
- package/dist/utility/serialization/scene/text.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +1543 -264
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/utility/shprojector.js +10 -22
- package/dist/utility/shprojector.js.map +1 -1
- package/dist/utility/textures/foam.js +170 -0
- package/dist/utility/textures/foam.js.map +1 -0
- package/dist/utility/textures/ggxlut.js +17 -43
- package/dist/utility/textures/ggxlut.js.map +1 -1
- package/dist/utility/textures/ltcdata.js +4 -4
- package/dist/utility/textures/ltcdata.js.map +1 -1
- package/dist/utility/textures/ltclut.js +16 -6
- package/dist/utility/textures/ltclut.js.map +1 -1
- package/dist/utility/unsupported.js +24 -0
- package/dist/utility/unsupported.js.map +1 -0
- package/dist/values.js +13 -1
- package/dist/values.js.map +1 -1
- package/package.json +25 -12
- package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
- package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
- package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
- package/src/asset/meshoptimizer/LICENSE +21 -0
- package/dist/animation/joint_dynamics/convex_collider.js +0 -320
- package/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rect light integration with linearly transformed cosines, shared by every
|
|
3
|
+
* material that shades rect lights as area lights.
|
|
4
|
+
*
|
|
5
|
+
* @internal
|
|
6
|
+
*/ const LUT_SIZE = 64;
|
|
7
|
+
const LUT_SCALE = (LUT_SIZE - 1) / LUT_SIZE;
|
|
8
|
+
const LUT_BIAS = 0.5 / LUT_SIZE;
|
|
9
|
+
/**
|
|
10
|
+
* Declares `Z_LTCIntegrateEdgeVec(v1, v2)`: the vector form factor of one
|
|
11
|
+
* polygon edge between two unit directions.
|
|
12
|
+
*
|
|
13
|
+
* @internal
|
|
14
|
+
*/ function defineLTCEdgeFunctions(scope) {
|
|
15
|
+
const pb = scope.$builder;
|
|
16
|
+
pb.func('Z_LTCIntegrateEdgeVec', [
|
|
17
|
+
pb.vec3('v1'),
|
|
18
|
+
pb.vec3('v2')
|
|
19
|
+
], function() {
|
|
20
|
+
this.$l.x = pb.dot(this.v1, this.v2);
|
|
21
|
+
this.$l.y = pb.abs(this.x);
|
|
22
|
+
this.$l.a = pb.add(0.8543985, pb.mul(pb.add(0.4965155, pb.mul(0.0145206, this.y)), this.y));
|
|
23
|
+
this.$l.b = pb.add(3.417594, pb.mul(pb.add(4.1616724, this.y), this.y));
|
|
24
|
+
this.$l.v = pb.div(this.a, this.b);
|
|
25
|
+
this.$l.thetaSinTheta = this.$choice(pb.greaterThan(this.x, 0), this.v, pb.sub(pb.mul(0.5, pb.inverseSqrt(pb.max(pb.sub(1, pb.mul(this.x, this.x)), 1e-7))), this.v));
|
|
26
|
+
this.$return(pb.mul(pb.cross(this.v1, this.v2), this.thetaSinTheta));
|
|
27
|
+
});
|
|
28
|
+
pb.func('Z_LTCClipQuadToHorizon', [
|
|
29
|
+
pb.vec3[5]('L').inout(),
|
|
30
|
+
pb.int('n').out()
|
|
31
|
+
], function() {
|
|
32
|
+
this.$l.config = pb.int(0);
|
|
33
|
+
this.$if(pb.greaterThan(this.L[0].z, 0), function() {
|
|
34
|
+
this.config = pb.add(this.config, 1);
|
|
35
|
+
});
|
|
36
|
+
this.$if(pb.greaterThan(this.L[1].z, 0), function() {
|
|
37
|
+
this.config = pb.add(this.config, 2);
|
|
38
|
+
});
|
|
39
|
+
this.$if(pb.greaterThan(this.L[2].z, 0), function() {
|
|
40
|
+
this.config = pb.add(this.config, 4);
|
|
41
|
+
});
|
|
42
|
+
this.$if(pb.greaterThan(this.L[3].z, 0), function() {
|
|
43
|
+
this.config = pb.add(this.config, 8);
|
|
44
|
+
});
|
|
45
|
+
this.n = 0;
|
|
46
|
+
this.$if(pb.equal(this.config, 0), function() {}).$elseif(pb.equal(this.config, 1), function() {
|
|
47
|
+
this.n = 3;
|
|
48
|
+
this.L[1] = pb.add(pb.mul(pb.neg(this.L[1].z), this.L[0]), pb.mul(this.L[0].z, this.L[1]));
|
|
49
|
+
this.L[2] = pb.add(pb.mul(pb.neg(this.L[3].z), this.L[0]), pb.mul(this.L[0].z, this.L[3]));
|
|
50
|
+
}).$elseif(pb.equal(this.config, 2), function() {
|
|
51
|
+
this.n = 3;
|
|
52
|
+
this.L[0] = pb.add(pb.mul(pb.neg(this.L[0].z), this.L[1]), pb.mul(this.L[1].z, this.L[0]));
|
|
53
|
+
this.L[2] = pb.add(pb.mul(pb.neg(this.L[2].z), this.L[1]), pb.mul(this.L[1].z, this.L[2]));
|
|
54
|
+
}).$elseif(pb.equal(this.config, 3), function() {
|
|
55
|
+
this.n = 4;
|
|
56
|
+
this.L[2] = pb.add(pb.mul(pb.neg(this.L[2].z), this.L[1]), pb.mul(this.L[1].z, this.L[2]));
|
|
57
|
+
this.L[3] = pb.add(pb.mul(pb.neg(this.L[3].z), this.L[0]), pb.mul(this.L[0].z, this.L[3]));
|
|
58
|
+
}).$elseif(pb.equal(this.config, 4), function() {
|
|
59
|
+
this.n = 3;
|
|
60
|
+
this.L[0] = pb.add(pb.mul(pb.neg(this.L[3].z), this.L[2]), pb.mul(this.L[2].z, this.L[3]));
|
|
61
|
+
this.L[1] = pb.add(pb.mul(pb.neg(this.L[1].z), this.L[2]), pb.mul(this.L[2].z, this.L[1]));
|
|
62
|
+
}).$elseif(pb.equal(this.config, 6), function() {
|
|
63
|
+
this.n = 4;
|
|
64
|
+
this.L[0] = pb.add(pb.mul(pb.neg(this.L[0].z), this.L[1]), pb.mul(this.L[1].z, this.L[0]));
|
|
65
|
+
this.L[3] = pb.add(pb.mul(pb.neg(this.L[3].z), this.L[2]), pb.mul(this.L[2].z, this.L[3]));
|
|
66
|
+
}).$elseif(pb.equal(this.config, 7), function() {
|
|
67
|
+
this.n = 5;
|
|
68
|
+
this.L[4] = pb.add(pb.mul(pb.neg(this.L[3].z), this.L[0]), pb.mul(this.L[0].z, this.L[3]));
|
|
69
|
+
this.L[3] = pb.add(pb.mul(pb.neg(this.L[3].z), this.L[2]), pb.mul(this.L[2].z, this.L[3]));
|
|
70
|
+
}).$elseif(pb.equal(this.config, 8), function() {
|
|
71
|
+
this.n = 3;
|
|
72
|
+
this.L[0] = pb.add(pb.mul(pb.neg(this.L[0].z), this.L[3]), pb.mul(this.L[3].z, this.L[0]));
|
|
73
|
+
this.L[1] = pb.add(pb.mul(pb.neg(this.L[2].z), this.L[3]), pb.mul(this.L[3].z, this.L[2]));
|
|
74
|
+
this.L[2] = this.L[3];
|
|
75
|
+
}).$elseif(pb.equal(this.config, 9), function() {
|
|
76
|
+
this.n = 4;
|
|
77
|
+
this.L[1] = pb.add(pb.mul(pb.neg(this.L[1].z), this.L[0]), pb.mul(this.L[0].z, this.L[1]));
|
|
78
|
+
this.L[2] = pb.add(pb.mul(pb.neg(this.L[2].z), this.L[3]), pb.mul(this.L[3].z, this.L[2]));
|
|
79
|
+
}).$elseif(pb.equal(this.config, 11), function() {
|
|
80
|
+
this.n = 5;
|
|
81
|
+
this.L[4] = this.L[3];
|
|
82
|
+
this.L[3] = pb.add(pb.mul(pb.neg(this.L[2].z), this.L[3]), pb.mul(this.L[3].z, this.L[2]));
|
|
83
|
+
this.L[2] = pb.add(pb.mul(pb.neg(this.L[2].z), this.L[1]), pb.mul(this.L[1].z, this.L[2]));
|
|
84
|
+
}).$elseif(pb.equal(this.config, 12), function() {
|
|
85
|
+
this.n = 4;
|
|
86
|
+
this.L[1] = pb.add(pb.mul(pb.neg(this.L[1].z), this.L[2]), pb.mul(this.L[2].z, this.L[1]));
|
|
87
|
+
this.L[0] = pb.add(pb.mul(pb.neg(this.L[0].z), this.L[3]), pb.mul(this.L[3].z, this.L[0]));
|
|
88
|
+
}).$elseif(pb.equal(this.config, 13), function() {
|
|
89
|
+
this.n = 5;
|
|
90
|
+
this.L[4] = this.L[3];
|
|
91
|
+
this.L[3] = this.L[2];
|
|
92
|
+
this.L[2] = pb.add(pb.mul(pb.neg(this.L[1].z), this.L[2]), pb.mul(this.L[2].z, this.L[1]));
|
|
93
|
+
this.L[1] = pb.add(pb.mul(pb.neg(this.L[1].z), this.L[0]), pb.mul(this.L[0].z, this.L[1]));
|
|
94
|
+
}).$elseif(pb.equal(this.config, 14), function() {
|
|
95
|
+
this.n = 5;
|
|
96
|
+
this.L[4] = pb.add(pb.mul(pb.neg(this.L[0].z), this.L[3]), pb.mul(this.L[3].z, this.L[0]));
|
|
97
|
+
this.L[0] = pb.add(pb.mul(pb.neg(this.L[0].z), this.L[1]), pb.mul(this.L[1].z, this.L[0]));
|
|
98
|
+
}).$elseif(pb.equal(this.config, 15), function() {
|
|
99
|
+
this.n = 4;
|
|
100
|
+
});
|
|
101
|
+
this.$if(pb.equal(this.n, 3), function() {
|
|
102
|
+
this.L[3] = this.L[0];
|
|
103
|
+
});
|
|
104
|
+
this.$if(pb.equal(this.n, 4), function() {
|
|
105
|
+
this.L[4] = this.L[0];
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
pb.func('Z_LTCEvaluateRect', [
|
|
109
|
+
pb.vec3('N'),
|
|
110
|
+
pb.vec3('V'),
|
|
111
|
+
pb.vec3('P'),
|
|
112
|
+
pb.mat3('Minv'),
|
|
113
|
+
pb.vec3('p0'),
|
|
114
|
+
pb.vec3('p1'),
|
|
115
|
+
pb.vec3('p2'),
|
|
116
|
+
pb.vec3('p3')
|
|
117
|
+
], function() {
|
|
118
|
+
this.$l.T1 = pb.normalize(pb.sub(this.V, pb.mul(this.N, pb.dot(this.V, this.N))));
|
|
119
|
+
this.$l.T2 = pb.cross(this.N, this.T1);
|
|
120
|
+
this.$l.ltcMatrix = pb.mul(this.Minv, pb.transpose(pb.mat3(this.T1, this.T2, this.N)));
|
|
121
|
+
this.$l.L = pb.vec3[5]();
|
|
122
|
+
this.L[0] = pb.mul(this.ltcMatrix, pb.sub(this.p0, this.P));
|
|
123
|
+
this.L[1] = pb.mul(this.ltcMatrix, pb.sub(this.p1, this.P));
|
|
124
|
+
this.L[2] = pb.mul(this.ltcMatrix, pb.sub(this.p2, this.P));
|
|
125
|
+
this.L[3] = pb.mul(this.ltcMatrix, pb.sub(this.p3, this.P));
|
|
126
|
+
this.$l.n = pb.int(0);
|
|
127
|
+
this.Z_LTCClipQuadToHorizon(this.L, this.n);
|
|
128
|
+
this.$if(pb.equal(this.n, 0), function() {
|
|
129
|
+
this.$return(pb.vec3(0));
|
|
130
|
+
});
|
|
131
|
+
this.L[0] = pb.normalize(this.L[0]);
|
|
132
|
+
this.L[1] = pb.normalize(this.L[1]);
|
|
133
|
+
this.L[2] = pb.normalize(this.L[2]);
|
|
134
|
+
this.L[3] = pb.normalize(this.L[3]);
|
|
135
|
+
this.L[4] = pb.normalize(this.L[4]);
|
|
136
|
+
this.$l.sum = pb.float(0);
|
|
137
|
+
this.sum = pb.add(this.sum, this.Z_LTCIntegrateEdgeVec(this.L[0], this.L[1]).z);
|
|
138
|
+
this.sum = pb.add(this.sum, this.Z_LTCIntegrateEdgeVec(this.L[1], this.L[2]).z);
|
|
139
|
+
this.sum = pb.add(this.sum, this.Z_LTCIntegrateEdgeVec(this.L[2], this.L[3]).z);
|
|
140
|
+
this.$if(pb.greaterThanEqual(this.n, 4), function() {
|
|
141
|
+
this.sum = pb.add(this.sum, this.Z_LTCIntegrateEdgeVec(this.L[3], this.L[4]).z);
|
|
142
|
+
});
|
|
143
|
+
this.$if(pb.equal(this.n, 5), function() {
|
|
144
|
+
this.sum = pb.add(this.sum, this.Z_LTCIntegrateEdgeVec(this.L[4], this.L[0]).z);
|
|
145
|
+
});
|
|
146
|
+
this.sum = pb.max(0, this.sum);
|
|
147
|
+
this.$return(pb.vec3(this.sum));
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* The terms a material needs to shade one rect light, as
|
|
152
|
+
* `(specularIntegral, fresnelNorm, fresnelBias, diffuseFormFactor)`.
|
|
153
|
+
*
|
|
154
|
+
* @internal
|
|
155
|
+
*/ function evaluateLTCRectLightTerms(scope, worldPos, normal, viewVec, roughness, posRange, axisX, axisY) {
|
|
156
|
+
const pb = scope.$builder;
|
|
157
|
+
defineLTCEdgeFunctions(scope);
|
|
158
|
+
pb.func('Z_LTCRectLightTerms', [
|
|
159
|
+
pb.vec3('worldPos'),
|
|
160
|
+
pb.vec3('normal'),
|
|
161
|
+
pb.vec3('viewVec'),
|
|
162
|
+
pb.float('roughness'),
|
|
163
|
+
pb.vec4('posRange'),
|
|
164
|
+
pb.vec3('ax'),
|
|
165
|
+
pb.vec3('ay')
|
|
166
|
+
], function() {
|
|
167
|
+
this.$l.center = this.posRange.xyz;
|
|
168
|
+
this.$l.range = this.posRange.w;
|
|
169
|
+
this.$l.area = pb.mul(pb.length(this.ax), pb.length(this.ay), 4);
|
|
170
|
+
this.$if(pb.lessThanEqual(this.area, 0), function() {
|
|
171
|
+
this.$return(pb.vec4(0));
|
|
172
|
+
});
|
|
173
|
+
this.$l.lightNormal = pb.neg(pb.normalize(pb.cross(this.ax, this.ay)));
|
|
174
|
+
this.$l.centerToPoint = pb.sub(this.center, this.worldPos);
|
|
175
|
+
this.$l.dist = pb.length(this.centerToPoint);
|
|
176
|
+
// One-sided: the plane through the centre separates lit from unlit.
|
|
177
|
+
this.$if(pb.lessThanEqual(pb.dot(this.lightNormal, pb.neg(pb.normalize(this.centerToPoint))), 1e-5), function() {
|
|
178
|
+
this.$return(pb.vec4(0));
|
|
179
|
+
});
|
|
180
|
+
this.$l.falloff = pb.float(1);
|
|
181
|
+
this.$if(pb.greaterThan(this.range, 0), function() {
|
|
182
|
+
this.falloff = pb.sub(1, pb.smoothStep(pb.mul(this.range, 0.9), this.range, this.dist));
|
|
183
|
+
});
|
|
184
|
+
this.$l.p0 = pb.sub(pb.sub(this.center, this.ax), this.ay);
|
|
185
|
+
this.$l.p1 = pb.add(pb.sub(this.center, this.ay), this.ax);
|
|
186
|
+
this.$l.p2 = pb.add(pb.add(this.center, this.ax), this.ay);
|
|
187
|
+
this.$l.p3 = pb.add(pb.sub(this.center, this.ax), this.ay);
|
|
188
|
+
this.$l.NoV = pb.clamp(pb.dot(this.normal, this.viewVec), 0.0001, 1);
|
|
189
|
+
this.$l.ltcRoughness = pb.max(this.roughness, 0.02);
|
|
190
|
+
this.$l.uv = pb.clamp(pb.add(pb.mul(pb.vec2(this.ltcRoughness, pb.sqrt(pb.max(pb.sub(1, this.NoV), 0))), LUT_SCALE), pb.vec2(LUT_BIAS)), pb.vec2(0), pb.vec2(1));
|
|
191
|
+
this.$l.t1 = pb.textureSampleLevel(this.zLTCMatLut, this.uv, 0);
|
|
192
|
+
this.$l.t2 = pb.textureSampleLevel(this.zLTCAmpLut, this.uv, 0);
|
|
193
|
+
this.$l.Minv = pb.mat3(pb.vec3(this.t1.x, 0, this.t1.y), pb.vec3(0, 1, 0), pb.vec3(this.t1.z, 0, this.t1.w));
|
|
194
|
+
this.$l.spec = this.Z_LTCEvaluateRect(this.normal, this.viewVec, this.worldPos, this.Minv, this.p0, this.p1, this.p2, this.p3).x;
|
|
195
|
+
this.$l.diff = this.Z_LTCEvaluateRect(this.normal, this.viewVec, this.worldPos, pb.mat3(pb.vec3(1, 0, 0), pb.vec3(0, 1, 0), pb.vec3(0, 0, 1)), this.p0, this.p1, this.p2, this.p3).x;
|
|
196
|
+
this.$return(pb.vec4(pb.mul(this.spec, this.falloff), this.t2.x, this.t2.y, pb.mul(this.diff, this.falloff)));
|
|
197
|
+
});
|
|
198
|
+
return pb.getGlobalScope().Z_LTCRectLightTerms(worldPos, normal, viewVec, roughness, posRange, axisX, axisY);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
export { defineLTCEdgeFunctions, evaluateLTCRectLightTerms };
|
|
202
|
+
//# sourceMappingURL=ltc_rect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ltc_rect.js","sources":["../../src/shaders/ltc_rect.ts"],"sourcesContent":["import type { PBGlobalScope, PBInsideFunctionScope, PBShaderExp } from '@zephyr3d/device';\r\n\r\n/**\r\n * Rect light integration with linearly transformed cosines, shared by every\r\n * material that shades rect lights as area lights.\r\n *\r\n * @internal\r\n */\r\n\r\nconst LUT_SIZE = 64;\r\nconst LUT_SCALE = (LUT_SIZE - 1) / LUT_SIZE;\r\nconst LUT_BIAS = 0.5 / LUT_SIZE;\r\n\r\n/**\r\n * Declares `Z_LTCIntegrateEdgeVec(v1, v2)`: the vector form factor of one\r\n * polygon edge between two unit directions.\r\n *\r\n * @internal\r\n */\r\nexport function defineLTCEdgeFunctions(scope: PBGlobalScope | PBInsideFunctionScope) {\r\n const pb = scope.$builder;\r\n pb.func('Z_LTCIntegrateEdgeVec', [pb.vec3('v1'), pb.vec3('v2')], function () {\r\n this.$l.x = pb.dot(this.v1, this.v2);\r\n this.$l.y = pb.abs(this.x);\r\n this.$l.a = pb.add(0.8543985, pb.mul(pb.add(0.4965155, pb.mul(0.0145206, this.y)), this.y));\r\n this.$l.b = pb.add(3.417594, pb.mul(pb.add(4.1616724, this.y), this.y));\r\n this.$l.v = pb.div(this.a, this.b);\r\n this.$l.thetaSinTheta = this.$choice(\r\n pb.greaterThan(this.x, 0),\r\n this.v,\r\n pb.sub(pb.mul(0.5, pb.inverseSqrt(pb.max(pb.sub(1, pb.mul(this.x, this.x)), 1e-7))), this.v)\r\n );\r\n this.$return(pb.mul(pb.cross(this.v1, this.v2), this.thetaSinTheta));\r\n });\r\n pb.func('Z_LTCClipQuadToHorizon', [pb.vec3[5]('L').inout(), pb.int('n').out()], function () {\r\n this.$l.config = pb.int(0);\r\n this.$if(pb.greaterThan(this.L[0].z, 0), function () {\r\n this.config = pb.add(this.config, 1);\r\n });\r\n this.$if(pb.greaterThan(this.L[1].z, 0), function () {\r\n this.config = pb.add(this.config, 2);\r\n });\r\n this.$if(pb.greaterThan(this.L[2].z, 0), function () {\r\n this.config = pb.add(this.config, 4);\r\n });\r\n this.$if(pb.greaterThan(this.L[3].z, 0), function () {\r\n this.config = pb.add(this.config, 8);\r\n });\r\n this.n = 0;\r\n this.$if(pb.equal(this.config, 0), function () {})\r\n .$elseif(pb.equal(this.config, 1), function () {\r\n this.n = 3;\r\n this.L[1] = pb.add(pb.mul(pb.neg(this.L[1].z), this.L[0]), pb.mul(this.L[0].z, this.L[1]));\r\n this.L[2] = pb.add(pb.mul(pb.neg(this.L[3].z), this.L[0]), pb.mul(this.L[0].z, this.L[3]));\r\n })\r\n .$elseif(pb.equal(this.config, 2), function () {\r\n this.n = 3;\r\n this.L[0] = pb.add(pb.mul(pb.neg(this.L[0].z), this.L[1]), pb.mul(this.L[1].z, this.L[0]));\r\n this.L[2] = pb.add(pb.mul(pb.neg(this.L[2].z), this.L[1]), pb.mul(this.L[1].z, this.L[2]));\r\n })\r\n .$elseif(pb.equal(this.config, 3), function () {\r\n this.n = 4;\r\n this.L[2] = pb.add(pb.mul(pb.neg(this.L[2].z), this.L[1]), pb.mul(this.L[1].z, this.L[2]));\r\n this.L[3] = pb.add(pb.mul(pb.neg(this.L[3].z), this.L[0]), pb.mul(this.L[0].z, this.L[3]));\r\n })\r\n .$elseif(pb.equal(this.config, 4), function () {\r\n this.n = 3;\r\n this.L[0] = pb.add(pb.mul(pb.neg(this.L[3].z), this.L[2]), pb.mul(this.L[2].z, this.L[3]));\r\n this.L[1] = pb.add(pb.mul(pb.neg(this.L[1].z), this.L[2]), pb.mul(this.L[2].z, this.L[1]));\r\n })\r\n .$elseif(pb.equal(this.config, 6), function () {\r\n this.n = 4;\r\n this.L[0] = pb.add(pb.mul(pb.neg(this.L[0].z), this.L[1]), pb.mul(this.L[1].z, this.L[0]));\r\n this.L[3] = pb.add(pb.mul(pb.neg(this.L[3].z), this.L[2]), pb.mul(this.L[2].z, this.L[3]));\r\n })\r\n .$elseif(pb.equal(this.config, 7), function () {\r\n this.n = 5;\r\n this.L[4] = pb.add(pb.mul(pb.neg(this.L[3].z), this.L[0]), pb.mul(this.L[0].z, this.L[3]));\r\n this.L[3] = pb.add(pb.mul(pb.neg(this.L[3].z), this.L[2]), pb.mul(this.L[2].z, this.L[3]));\r\n })\r\n .$elseif(pb.equal(this.config, 8), function () {\r\n this.n = 3;\r\n this.L[0] = pb.add(pb.mul(pb.neg(this.L[0].z), this.L[3]), pb.mul(this.L[3].z, this.L[0]));\r\n this.L[1] = pb.add(pb.mul(pb.neg(this.L[2].z), this.L[3]), pb.mul(this.L[3].z, this.L[2]));\r\n this.L[2] = this.L[3];\r\n })\r\n .$elseif(pb.equal(this.config, 9), function () {\r\n this.n = 4;\r\n this.L[1] = pb.add(pb.mul(pb.neg(this.L[1].z), this.L[0]), pb.mul(this.L[0].z, this.L[1]));\r\n this.L[2] = pb.add(pb.mul(pb.neg(this.L[2].z), this.L[3]), pb.mul(this.L[3].z, this.L[2]));\r\n })\r\n .$elseif(pb.equal(this.config, 11), function () {\r\n this.n = 5;\r\n this.L[4] = this.L[3];\r\n this.L[3] = pb.add(pb.mul(pb.neg(this.L[2].z), this.L[3]), pb.mul(this.L[3].z, this.L[2]));\r\n this.L[2] = pb.add(pb.mul(pb.neg(this.L[2].z), this.L[1]), pb.mul(this.L[1].z, this.L[2]));\r\n })\r\n .$elseif(pb.equal(this.config, 12), function () {\r\n this.n = 4;\r\n this.L[1] = pb.add(pb.mul(pb.neg(this.L[1].z), this.L[2]), pb.mul(this.L[2].z, this.L[1]));\r\n this.L[0] = pb.add(pb.mul(pb.neg(this.L[0].z), this.L[3]), pb.mul(this.L[3].z, this.L[0]));\r\n })\r\n .$elseif(pb.equal(this.config, 13), function () {\r\n this.n = 5;\r\n this.L[4] = this.L[3];\r\n this.L[3] = this.L[2];\r\n this.L[2] = pb.add(pb.mul(pb.neg(this.L[1].z), this.L[2]), pb.mul(this.L[2].z, this.L[1]));\r\n this.L[1] = pb.add(pb.mul(pb.neg(this.L[1].z), this.L[0]), pb.mul(this.L[0].z, this.L[1]));\r\n })\r\n .$elseif(pb.equal(this.config, 14), function () {\r\n this.n = 5;\r\n this.L[4] = pb.add(pb.mul(pb.neg(this.L[0].z), this.L[3]), pb.mul(this.L[3].z, this.L[0]));\r\n this.L[0] = pb.add(pb.mul(pb.neg(this.L[0].z), this.L[1]), pb.mul(this.L[1].z, this.L[0]));\r\n })\r\n .$elseif(pb.equal(this.config, 15), function () {\r\n this.n = 4;\r\n });\r\n this.$if(pb.equal(this.n, 3), function () {\r\n this.L[3] = this.L[0];\r\n });\r\n this.$if(pb.equal(this.n, 4), function () {\r\n this.L[4] = this.L[0];\r\n });\r\n });\r\n pb.func(\r\n 'Z_LTCEvaluateRect',\r\n [\r\n pb.vec3('N'),\r\n pb.vec3('V'),\r\n pb.vec3('P'),\r\n pb.mat3('Minv'),\r\n pb.vec3('p0'),\r\n pb.vec3('p1'),\r\n pb.vec3('p2'),\r\n pb.vec3('p3')\r\n ],\r\n function () {\r\n this.$l.T1 = pb.normalize(pb.sub(this.V, pb.mul(this.N, pb.dot(this.V, this.N))));\r\n this.$l.T2 = pb.cross(this.N, this.T1);\r\n this.$l.ltcMatrix = pb.mul(this.Minv, pb.transpose(pb.mat3(this.T1, this.T2, this.N)));\r\n this.$l.L = pb.vec3[5]();\r\n this.L[0] = pb.mul(this.ltcMatrix, pb.sub(this.p0, this.P));\r\n this.L[1] = pb.mul(this.ltcMatrix, pb.sub(this.p1, this.P));\r\n this.L[2] = pb.mul(this.ltcMatrix, pb.sub(this.p2, this.P));\r\n this.L[3] = pb.mul(this.ltcMatrix, pb.sub(this.p3, this.P));\r\n this.$l.n = pb.int(0);\r\n this.Z_LTCClipQuadToHorizon(this.L, this.n);\r\n this.$if(pb.equal(this.n, 0), function () {\r\n this.$return(pb.vec3(0));\r\n });\r\n this.L[0] = pb.normalize(this.L[0]);\r\n this.L[1] = pb.normalize(this.L[1]);\r\n this.L[2] = pb.normalize(this.L[2]);\r\n this.L[3] = pb.normalize(this.L[3]);\r\n this.L[4] = pb.normalize(this.L[4]);\r\n this.$l.sum = pb.float(0);\r\n this.sum = pb.add(this.sum, this.Z_LTCIntegrateEdgeVec(this.L[0], this.L[1]).z);\r\n this.sum = pb.add(this.sum, this.Z_LTCIntegrateEdgeVec(this.L[1], this.L[2]).z);\r\n this.sum = pb.add(this.sum, this.Z_LTCIntegrateEdgeVec(this.L[2], this.L[3]).z);\r\n this.$if(pb.greaterThanEqual(this.n, 4), function () {\r\n this.sum = pb.add(this.sum, this.Z_LTCIntegrateEdgeVec(this.L[3], this.L[4]).z);\r\n });\r\n this.$if(pb.equal(this.n, 5), function () {\r\n this.sum = pb.add(this.sum, this.Z_LTCIntegrateEdgeVec(this.L[4], this.L[0]).z);\r\n });\r\n this.sum = pb.max(0, this.sum);\r\n this.$return(pb.vec3(this.sum));\r\n }\r\n );\r\n}\r\n\r\n/**\r\n * The terms a material needs to shade one rect light, as\r\n * `(specularIntegral, fresnelNorm, fresnelBias, diffuseFormFactor)`.\r\n *\r\n * @internal\r\n */\r\nexport function evaluateLTCRectLightTerms(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n normal: PBShaderExp,\r\n viewVec: PBShaderExp,\r\n roughness: PBShaderExp,\r\n posRange: PBShaderExp,\r\n axisX: PBShaderExp,\r\n axisY: PBShaderExp\r\n): PBShaderExp {\r\n const pb = scope.$builder;\r\n defineLTCEdgeFunctions(scope);\r\n pb.func(\r\n 'Z_LTCRectLightTerms',\r\n [\r\n pb.vec3('worldPos'),\r\n pb.vec3('normal'),\r\n pb.vec3('viewVec'),\r\n pb.float('roughness'),\r\n pb.vec4('posRange'),\r\n pb.vec3('ax'),\r\n pb.vec3('ay')\r\n ],\r\n function () {\r\n this.$l.center = this.posRange.xyz;\r\n this.$l.range = this.posRange.w;\r\n this.$l.area = pb.mul(pb.length(this.ax), pb.length(this.ay), 4);\r\n this.$if(pb.lessThanEqual(this.area, 0), function () {\r\n this.$return(pb.vec4(0));\r\n });\r\n this.$l.lightNormal = pb.neg(pb.normalize(pb.cross(this.ax, this.ay)));\r\n this.$l.centerToPoint = pb.sub(this.center, this.worldPos);\r\n this.$l.dist = pb.length(this.centerToPoint);\r\n // One-sided: the plane through the centre separates lit from unlit.\r\n this.$if(\r\n pb.lessThanEqual(pb.dot(this.lightNormal, pb.neg(pb.normalize(this.centerToPoint))), 1e-5),\r\n function () {\r\n this.$return(pb.vec4(0));\r\n }\r\n );\r\n this.$l.falloff = pb.float(1);\r\n this.$if(pb.greaterThan(this.range, 0), function () {\r\n this.falloff = pb.sub(1, pb.smoothStep(pb.mul(this.range, 0.9), this.range, this.dist));\r\n });\r\n this.$l.p0 = pb.sub(pb.sub(this.center, this.ax), this.ay);\r\n this.$l.p1 = pb.add(pb.sub(this.center, this.ay), this.ax);\r\n this.$l.p2 = pb.add(pb.add(this.center, this.ax), this.ay);\r\n this.$l.p3 = pb.add(pb.sub(this.center, this.ax), this.ay);\r\n this.$l.NoV = pb.clamp(pb.dot(this.normal, this.viewVec), 0.0001, 1);\r\n this.$l.ltcRoughness = pb.max(this.roughness, 0.02);\r\n this.$l.uv = pb.clamp(\r\n pb.add(\r\n pb.mul(pb.vec2(this.ltcRoughness, pb.sqrt(pb.max(pb.sub(1, this.NoV), 0))), LUT_SCALE),\r\n pb.vec2(LUT_BIAS)\r\n ),\r\n pb.vec2(0),\r\n pb.vec2(1)\r\n );\r\n this.$l.t1 = pb.textureSampleLevel(this.zLTCMatLut, this.uv, 0);\r\n this.$l.t2 = pb.textureSampleLevel(this.zLTCAmpLut, this.uv, 0);\r\n this.$l.Minv = pb.mat3(\r\n pb.vec3(this.t1.x, 0, this.t1.y),\r\n pb.vec3(0, 1, 0),\r\n pb.vec3(this.t1.z, 0, this.t1.w)\r\n );\r\n this.$l.spec = this.Z_LTCEvaluateRect(\r\n this.normal,\r\n this.viewVec,\r\n this.worldPos,\r\n this.Minv,\r\n this.p0,\r\n this.p1,\r\n this.p2,\r\n this.p3\r\n ).x;\r\n this.$l.diff = this.Z_LTCEvaluateRect(\r\n this.normal,\r\n this.viewVec,\r\n this.worldPos,\r\n pb.mat3(pb.vec3(1, 0, 0), pb.vec3(0, 1, 0), pb.vec3(0, 0, 1)),\r\n this.p0,\r\n this.p1,\r\n this.p2,\r\n this.p3\r\n ).x;\r\n this.$return(\r\n pb.vec4(pb.mul(this.spec, this.falloff), this.t2.x, this.t2.y, pb.mul(this.diff, this.falloff))\r\n );\r\n }\r\n );\r\n return pb\r\n .getGlobalScope()\r\n .Z_LTCRectLightTerms(worldPos, normal, viewVec, roughness, posRange, axisX, axisY) as PBShaderExp;\r\n}\r\n"],"names":["LUT_SIZE","LUT_SCALE","LUT_BIAS","defineLTCEdgeFunctions","scope","pb","$builder","func","vec3","$l","x","dot","v1","v2","y","abs","a","add","mul","b","v","div","thetaSinTheta","$choice","greaterThan","sub","inverseSqrt","max","$return","cross","inout","int","out","config","$if","L","z","n","equal","$elseif","neg","mat3","T1","normalize","V","N","T2","ltcMatrix","Minv","transpose","p0","P","p1","p2","p3","Z_LTCClipQuadToHorizon","sum","float","Z_LTCIntegrateEdgeVec","greaterThanEqual","evaluateLTCRectLightTerms","worldPos","normal","viewVec","roughness","posRange","axisX","axisY","vec4","center","xyz","range","w","area","length","ax","ay","lessThanEqual","lightNormal","centerToPoint","dist","falloff","smoothStep","NoV","clamp","ltcRoughness","uv","vec2","sqrt","t1","textureSampleLevel","zLTCMatLut","t2","zLTCAmpLut","spec","Z_LTCEvaluateRect","diff","getGlobalScope","Z_LTCRectLightTerms"],"mappings":"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"}
|
package/dist/shaders/misc.js
CHANGED
|
@@ -252,15 +252,6 @@ import { PBPrimitiveType, PBInsideFunctionScope } from '@zephyr3d/device';
|
|
|
252
252
|
});
|
|
253
253
|
return pb.getGlobalScope()[funcName](color);
|
|
254
254
|
}
|
|
255
|
-
/** @internal */ function fetchNormalizedFloatForDevice(scope, tex, uv, level) {
|
|
256
|
-
const pb = scope.$builder;
|
|
257
|
-
const texel = level === undefined || level === null ? pb.textureSample(tex, uv) : pb.textureSampleLevel(tex, uv, level);
|
|
258
|
-
if (pb.getDevice().type === 'webgl') {
|
|
259
|
-
return decodeNormalizedFloatFromRGBA(scope, texel);
|
|
260
|
-
} else {
|
|
261
|
-
return texel;
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
255
|
|
|
265
|
-
export { decode2HalfFromRGBA, decodeFloatFromRGBA, decodeNormalizedFloatFromRGBA, decodeRGBM, encode2HalfToRGBA, encodeFloatToRGBA, encodeNormalizedFloatToRGBA, encodeRGBM,
|
|
256
|
+
export { decode2HalfFromRGBA, decodeFloatFromRGBA, decodeNormalizedFloatFromRGBA, decodeRGBM, encode2HalfToRGBA, encodeFloatToRGBA, encodeNormalizedFloatToRGBA, encodeRGBM, gammaToLinear, linearToGamma };
|
|
266
257
|
//# sourceMappingURL=misc.js.map
|
package/dist/shaders/misc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"misc.js","sources":["../../src/shaders/misc.ts"],"sourcesContent":["import type { PBShaderExp } from '@zephyr3d/device';\r\nimport { PBInsideFunctionScope, PBPrimitiveType } from '@zephyr3d/device';\r\n\r\n/**\r\n * Decodes a float that was encoded into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param value - The rgba8unorm to be decoded\r\n * @returns The decoded float value\r\n *\r\n * @public\r\n */\r\nexport function decodeFloatFromRGBA(scope: PBInsideFunctionScope, value: PBShaderExp) {\r\n const pb = scope.$builder;\r\n if (\r\n !value ||\r\n !value.$typeinfo.isPrimitiveType() ||\r\n value.$typeinfo.primitiveType !== PBPrimitiveType.F32VEC4\r\n ) {\r\n throw new Error('decodeFloatFromRGBA() failed: parameter type must be vec4');\r\n }\r\n if (!scope || !(scope instanceof PBInsideFunctionScope)) {\r\n throw new Error(\r\n 'decodeFloatFromRGBA() failed: decodeNormalizedFloatFromRGBA() must be called inside a function'\r\n );\r\n }\r\n const funcName = 'Z_DecodeFloatFromRGBA';\r\n pb.func(funcName, [pb.vec4('value')], function () {\r\n this.$l.pack = pb.floor(pb.add(pb.mul(this.value, 255), 0.5));\r\n\r\n // Extract bits\r\n this.$l.bitSign = pb.float(pb.greaterThan(this.pack.x, 127.0));\r\n this.$l.bitExpn = pb.float(pb.greaterThan(this.pack.y, 127.0));\r\n this.pack.x = pb.sub(this.pack.x, pb.mul(this.bitSign, 128));\r\n this.pack.y = pb.sub(this.pack.y, pb.mul(this.bitExpn, 128));\r\n\r\n // Compute parts of number\r\n this.$l.exponent = pb.add(pb.mul(this.pack.x, 2.0), this.bitExpn);\r\n this.exponent = pb.pow(2.0, pb.sub(this.exponent, 127.0));\r\n this.$l.mantissa = pb.float(1.0);\r\n this.mantissa = pb.add(this.mantissa, pb.div(this.pack.y, 128.0));\r\n this.mantissa = pb.add(this.mantissa, pb.div(this.pack.z, 32768.0));\r\n this.mantissa = pb.add(this.mantissa, pb.div(this.pack.w, 8388608.0));\r\n\r\n // Return result\r\n this.$return(pb.mul(pb.sub(1.0, pb.mul(this.bitSign, 2)), this.exponent, this.mantissa));\r\n });\r\n return scope[funcName](value) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Encodes a float into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param value - The float value to be encode\r\n * @returns The encoded rgba8unorm\r\n *\r\n * @public\r\n */\r\nexport function encodeFloatToRGBA(scope: PBInsideFunctionScope, value: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_EncodeFloatToRGBA';\r\n pb.func(funcName, [pb.float('value')], function () {\r\n this.$l.floatMax = pb.mul(1.70141184, pb.pow(10, 38));\r\n this.$l.floatMin = pb.mul(1.17549435, pb.pow(10, -38));\r\n this.$l.absvalue = pb.abs(this.value);\r\n this.$if(pb.lessThanEqual(this.absvalue, this.floatMin), function () {\r\n this.$return(pb.vec4(0));\r\n });\r\n this.$if(pb.greaterThanEqual(this.value, this.floatMax), function () {\r\n this.$return(pb.vec4(127 / 255, 128 / 255, 0, 0));\r\n });\r\n this.$if(pb.lessThanEqual(this.value, pb.neg(this.floatMax)), function () {\r\n this.$return(pb.vec4(1, 128 / 255, 0, 0));\r\n });\r\n this.$l.pack = pb.vec4(0);\r\n\r\n // Compute Exponent and Mantissa\r\n this.$l.exponent = pb.floor(pb.log2(this.absvalue));\r\n this.$l.mantissa = pb.sub(pb.mul(this.absvalue, pb.pow(2.0, pb.neg(this.exponent))), 1.0);\r\n\r\n // Pack Mantissa into bytes\r\n this.pack.y = pb.floor(pb.mul(this.mantissa, 128.0));\r\n this.mantissa = pb.sub(this.mantissa, pb.div(this.pack.y, 128.0));\r\n this.pack.z = pb.floor(pb.mul(this.mantissa, 32768.0));\r\n this.mantissa = pb.sub(this.mantissa, pb.div(this.pack.z, 32768.0));\r\n this.pack.w = pb.floor(pb.mul(this.mantissa, 8388608.0));\r\n\r\n // Pack Sing and Exponent into bytes\r\n this.$l.expbias = pb.add(this.exponent, 127.0);\r\n this.pack.x = pb.add(this.pack.x, pb.floor(pb.div(this.expbias, 2.0)));\r\n this.expbias = pb.sub(this.expbias, pb.mul(this.pack.x, 2.0));\r\n this.pack.y = pb.add(this.pack.y, pb.mul(pb.floor(this.expbias), 128.0));\r\n this.pack.x = pb.add(this.pack.x, pb.mul(128.0, pb.float(pb.lessThan(this.value, 0)))); // Sign\r\n this.$return(pb.div(pb.floor(pb.add(this.pack, pb.vec4(0.5))), 255.0));\r\n });\r\n return pb.getGlobalScope()[funcName](value) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Decodes a float that was encoded into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param value - The rgba8unorm to be decoded\r\n * @returns The decoded float value\r\n *\r\n * @public\r\n */\r\nexport function decodeNormalizedFloatFromRGBA(scope: PBInsideFunctionScope, value: PBShaderExp) {\r\n const pb = scope.$builder;\r\n if (\r\n !value ||\r\n !value.$typeinfo.isPrimitiveType() ||\r\n value.$typeinfo.primitiveType !== PBPrimitiveType.F32VEC4\r\n ) {\r\n throw new Error('decodeNormalizedFloatFromRGBA() failed: parameter type must be vec4');\r\n }\r\n if (!scope || !(scope instanceof PBInsideFunctionScope)) {\r\n throw new Error(\r\n 'decodeNormalizedFloatFromRGBA() failed: decodeNormalizedFloatFromRGBA() must be called inside a function'\r\n );\r\n }\r\n const funcName = 'Z_decodeNormalizedFloatFromRGBA';\r\n pb.func(funcName, [pb.vec4('value')], function () {\r\n this.$l.bitShift = pb.vec4(1 / (256 * 256 * 256), 1 / (256 * 256), 1 / 256, 1);\r\n this.$return(pb.dot(this.value, this.bitShift));\r\n });\r\n return scope[funcName](value) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Encodes a float into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param value - The float value to be encode\r\n * @returns The encoded rgba8unorm\r\n *\r\n * @public\r\n */\r\nexport function encodeNormalizedFloatToRGBA(scope: PBInsideFunctionScope, value: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_encodeNormalizedFloatToRGBA';\r\n pb.func(funcName, [pb.float('value')], function () {\r\n this.$l.bitShift = pb.vec4(256 * 256 * 256, 256 * 256, 256, 1);\r\n this.$l.bitMask = pb.vec4(0, 1 / 256, 1 / 256, 1 / 256);\r\n this.$l.t = pb.fract(pb.mul(this.value, this.bitShift));\r\n this.$return(pb.sub(this.t, pb.mul(this.t.xxyz, this.bitMask)));\r\n });\r\n return pb.getGlobalScope()[funcName](value) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Encodes two half floats into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param a - The first half float to be encode\r\n * @param b - The second half float to be encode\r\n * @returns The encoded rgba8unorm\r\n *\r\n * @public\r\n */\r\nexport function encode2HalfToRGBA(\r\n scope: PBInsideFunctionScope,\r\n a: PBShaderExp | number,\r\n b: PBShaderExp | number\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_encode2HalfToRGBA';\r\n pb.func(funcName, [pb.float('a'), pb.float('b')], function () {\r\n this.$l.t = pb.vec4(this.a, pb.fract(pb.mul(this.a, 255)), this.b, pb.fract(pb.mul(this.b, 255)));\r\n this.$return(\r\n pb.vec4(\r\n pb.sub(this.t.x, pb.div(this.t.y, 255)),\r\n this.t.y,\r\n pb.sub(this.t.z, pb.div(this.t.w, 255)),\r\n this.t.w\r\n )\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](a, b) as PBShaderExp;\r\n}\r\n/**\r\n * Decodes two half floats that was encoded into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param value - The rgba8unorm to be decoded\r\n * @returns A vec2 that contains the two half floats\r\n *\r\n * @public\r\n */\r\nexport function decode2HalfFromRGBA(scope: PBInsideFunctionScope, value: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_decode2HalfFromRGBA';\r\n pb.func(funcName, [pb.vec4('value')], function () {\r\n this.$return(\r\n pb.vec2(\r\n pb.add(this.value.x, pb.div(this.value.y, 255)),\r\n pb.add(this.value.z, pb.div(this.value.w, 255))\r\n )\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](value) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Encodes a color value into RGBM format\r\n *\r\n * @param scope - Current shader scope\r\n * @param rgb - The color value to be encoded\r\n * @param maxRange - The max range of color components\r\n * @returns The encoded RGBA value\r\n *\r\n * @public\r\n */\r\nexport function encodeRGBM(scope: PBInsideFunctionScope, rgb: PBShaderExp, maxRange: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_encodeRGBM';\r\n pb.func(funcName, [pb.vec3('rgb'), pb.float('range')], function () {\r\n this.$l.maxRGB = pb.max(this.rgb.r, pb.max(this.rgb.g, this.rgb.b));\r\n this.$l.M = pb.div(this.maxRGB, this.range);\r\n this.M = pb.div(pb.ceil(pb.mul(this.M, 255)), 255);\r\n this.$return(pb.vec4(pb.div(this.rgb, pb.mul(this.M, this.range)), this.M));\r\n });\r\n return pb.getGlobalScope()[funcName](rgb, maxRange) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Decodes color value that was encoded into RGBM format\r\n *\r\n * @param scope - Current shader scope\r\n * @param rgbm - The RGBM to be decoded\r\n * @param maxRange - The max range of color components\r\n * @returns The decoded RGB color value\r\n *\r\n * @public\r\n */\r\nexport function decodeRGBM(scope: PBInsideFunctionScope, rgbm: PBShaderExp, maxRange: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_decodeRGBM';\r\n pb.func(funcName, [pb.vec4('rgbm'), pb.float('range')], function () {\r\n this.$return(pb.mul(this.rgbm.rgb, this.rgbm.a, this.range));\r\n });\r\n return pb.getGlobalScope()[funcName](rgbm, maxRange) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Converts a vec3 color from gamma space to linear space\r\n *\r\n * @param scope - Current shader scope\r\n * @param color - The vec3 color to be converted\r\n * @returns The linear space vec3 color\r\n *\r\n * @public\r\n */\r\nexport function gammaToLinear(scope: PBInsideFunctionScope, color: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_gammaToLinear';\r\n pb.func(funcName, [pb.vec3('color')], function () {\r\n // Approximate version from http://chilliant.blogspot.com.au/2012/08/srgb-approximations-for-hlsl.html?m=1\r\n // float3 RGB = sRGB * (sRGB * (sRGB * 0.305306011 + 0.682171111) + 0.012522878);\r\n this.$return(\r\n pb.mul(\r\n this.color,\r\n pb.add(\r\n pb.mul(this.color, pb.add(pb.mul(this.color, 0.305306011), pb.vec3(0.682171111))),\r\n pb.vec3(0.012522878)\r\n )\r\n )\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](color) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Converts a vec3 color from linear space to gamma space\r\n *\r\n * @param scope - Current shader scope\r\n * @param color - The vec3 color to be converted\r\n * @returns The gamma space vec3 color\r\n *\r\n * @public\r\n */\r\nexport function linearToGamma(scope: PBInsideFunctionScope, color: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_linearToGamma';\r\n pb.func(funcName, [pb.vec3('color')], function () {\r\n // Almost perfect version from http://chilliant.blogspot.com.au/2012/08/srgb-approximations-for-hlsl.html?m=1\r\n // C_srgb_2 = max(1.055 * pow(C_lin, 0.416666667) - 0.055, 0);\r\n this.$return(\r\n pb.max(pb.sub(pb.mul(pb.pow(this.color, pb.vec3(0.416666667)), 1.055), pb.vec3(0.055)), pb.vec3(0))\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](color) as PBShaderExp;\r\n}\r\n\r\n/** @internal */\r\nexport function fetchNormalizedFloatForDevice(\r\n scope: PBInsideFunctionScope,\r\n tex: PBShaderExp,\r\n uv: PBShaderExp,\r\n level?: PBShaderExp | number\r\n) {\r\n const pb = scope.$builder;\r\n const texel =\r\n level === undefined || level === null ? pb.textureSample(tex, uv) : pb.textureSampleLevel(tex, uv, level);\r\n if (pb.getDevice().type === 'webgl') {\r\n return decodeNormalizedFloatFromRGBA(scope, texel);\r\n } else {\r\n return texel;\r\n }\r\n}\r\n"],"names":["decodeFloatFromRGBA","scope","value","pb","$builder","$typeinfo","isPrimitiveType","primitiveType","PBPrimitiveType","F32VEC4","Error","PBInsideFunctionScope","funcName","func","vec4","$l","pack","floor","add","mul","bitSign","float","greaterThan","x","bitExpn","y","sub","exponent","pow","mantissa","div","z","w","$return","encodeFloatToRGBA","floatMax","floatMin","absvalue","abs","$if","lessThanEqual","greaterThanEqual","neg","log2","expbias","lessThan","getGlobalScope","decodeNormalizedFloatFromRGBA","bitShift","dot","encodeNormalizedFloatToRGBA","bitMask","t","fract","xxyz","encode2HalfToRGBA","a","b","decode2HalfFromRGBA","vec2","encodeRGBM","rgb","maxRange","vec3","maxRGB","max","r","g","M","range","ceil","decodeRGBM","rgbm","gammaToLinear","color","linearToGamma","fetchNormalizedFloatForDevice","tex","uv","level","texel","undefined","textureSample","textureSampleLevel","getDevice","type"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"misc.js","sources":["../../src/shaders/misc.ts"],"sourcesContent":["import type { PBShaderExp } from '@zephyr3d/device';\r\nimport { PBInsideFunctionScope, PBPrimitiveType } from '@zephyr3d/device';\r\n\r\n/**\r\n * Decodes a float that was encoded into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param value - The rgba8unorm to be decoded\r\n * @returns The decoded float value\r\n *\r\n * @public\r\n */\r\nexport function decodeFloatFromRGBA(scope: PBInsideFunctionScope, value: PBShaderExp) {\r\n const pb = scope.$builder;\r\n if (\r\n !value ||\r\n !value.$typeinfo.isPrimitiveType() ||\r\n value.$typeinfo.primitiveType !== PBPrimitiveType.F32VEC4\r\n ) {\r\n throw new Error('decodeFloatFromRGBA() failed: parameter type must be vec4');\r\n }\r\n if (!scope || !(scope instanceof PBInsideFunctionScope)) {\r\n throw new Error(\r\n 'decodeFloatFromRGBA() failed: decodeNormalizedFloatFromRGBA() must be called inside a function'\r\n );\r\n }\r\n const funcName = 'Z_DecodeFloatFromRGBA';\r\n pb.func(funcName, [pb.vec4('value')], function () {\r\n this.$l.pack = pb.floor(pb.add(pb.mul(this.value, 255), 0.5));\r\n\r\n // Extract bits\r\n this.$l.bitSign = pb.float(pb.greaterThan(this.pack.x, 127.0));\r\n this.$l.bitExpn = pb.float(pb.greaterThan(this.pack.y, 127.0));\r\n this.pack.x = pb.sub(this.pack.x, pb.mul(this.bitSign, 128));\r\n this.pack.y = pb.sub(this.pack.y, pb.mul(this.bitExpn, 128));\r\n\r\n // Compute parts of number\r\n this.$l.exponent = pb.add(pb.mul(this.pack.x, 2.0), this.bitExpn);\r\n this.exponent = pb.pow(2.0, pb.sub(this.exponent, 127.0));\r\n this.$l.mantissa = pb.float(1.0);\r\n this.mantissa = pb.add(this.mantissa, pb.div(this.pack.y, 128.0));\r\n this.mantissa = pb.add(this.mantissa, pb.div(this.pack.z, 32768.0));\r\n this.mantissa = pb.add(this.mantissa, pb.div(this.pack.w, 8388608.0));\r\n\r\n // Return result\r\n this.$return(pb.mul(pb.sub(1.0, pb.mul(this.bitSign, 2)), this.exponent, this.mantissa));\r\n });\r\n return scope[funcName](value) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Encodes a float into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param value - The float value to be encode\r\n * @returns The encoded rgba8unorm\r\n *\r\n * @public\r\n */\r\nexport function encodeFloatToRGBA(scope: PBInsideFunctionScope, value: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_EncodeFloatToRGBA';\r\n pb.func(funcName, [pb.float('value')], function () {\r\n this.$l.floatMax = pb.mul(1.70141184, pb.pow(10, 38));\r\n this.$l.floatMin = pb.mul(1.17549435, pb.pow(10, -38));\r\n this.$l.absvalue = pb.abs(this.value);\r\n this.$if(pb.lessThanEqual(this.absvalue, this.floatMin), function () {\r\n this.$return(pb.vec4(0));\r\n });\r\n this.$if(pb.greaterThanEqual(this.value, this.floatMax), function () {\r\n this.$return(pb.vec4(127 / 255, 128 / 255, 0, 0));\r\n });\r\n this.$if(pb.lessThanEqual(this.value, pb.neg(this.floatMax)), function () {\r\n this.$return(pb.vec4(1, 128 / 255, 0, 0));\r\n });\r\n this.$l.pack = pb.vec4(0);\r\n\r\n // Compute Exponent and Mantissa\r\n this.$l.exponent = pb.floor(pb.log2(this.absvalue));\r\n this.$l.mantissa = pb.sub(pb.mul(this.absvalue, pb.pow(2.0, pb.neg(this.exponent))), 1.0);\r\n\r\n // Pack Mantissa into bytes\r\n this.pack.y = pb.floor(pb.mul(this.mantissa, 128.0));\r\n this.mantissa = pb.sub(this.mantissa, pb.div(this.pack.y, 128.0));\r\n this.pack.z = pb.floor(pb.mul(this.mantissa, 32768.0));\r\n this.mantissa = pb.sub(this.mantissa, pb.div(this.pack.z, 32768.0));\r\n this.pack.w = pb.floor(pb.mul(this.mantissa, 8388608.0));\r\n\r\n // Pack Sing and Exponent into bytes\r\n this.$l.expbias = pb.add(this.exponent, 127.0);\r\n this.pack.x = pb.add(this.pack.x, pb.floor(pb.div(this.expbias, 2.0)));\r\n this.expbias = pb.sub(this.expbias, pb.mul(this.pack.x, 2.0));\r\n this.pack.y = pb.add(this.pack.y, pb.mul(pb.floor(this.expbias), 128.0));\r\n this.pack.x = pb.add(this.pack.x, pb.mul(128.0, pb.float(pb.lessThan(this.value, 0)))); // Sign\r\n this.$return(pb.div(pb.floor(pb.add(this.pack, pb.vec4(0.5))), 255.0));\r\n });\r\n return pb.getGlobalScope()[funcName](value) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Decodes a float that was encoded into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param value - The rgba8unorm to be decoded\r\n * @returns The decoded float value\r\n *\r\n * @public\r\n */\r\nexport function decodeNormalizedFloatFromRGBA(scope: PBInsideFunctionScope, value: PBShaderExp) {\r\n const pb = scope.$builder;\r\n if (\r\n !value ||\r\n !value.$typeinfo.isPrimitiveType() ||\r\n value.$typeinfo.primitiveType !== PBPrimitiveType.F32VEC4\r\n ) {\r\n throw new Error('decodeNormalizedFloatFromRGBA() failed: parameter type must be vec4');\r\n }\r\n if (!scope || !(scope instanceof PBInsideFunctionScope)) {\r\n throw new Error(\r\n 'decodeNormalizedFloatFromRGBA() failed: decodeNormalizedFloatFromRGBA() must be called inside a function'\r\n );\r\n }\r\n const funcName = 'Z_decodeNormalizedFloatFromRGBA';\r\n pb.func(funcName, [pb.vec4('value')], function () {\r\n this.$l.bitShift = pb.vec4(1 / (256 * 256 * 256), 1 / (256 * 256), 1 / 256, 1);\r\n this.$return(pb.dot(this.value, this.bitShift));\r\n });\r\n return scope[funcName](value) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Encodes a float into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param value - The float value to be encode\r\n * @returns The encoded rgba8unorm\r\n *\r\n * @public\r\n */\r\nexport function encodeNormalizedFloatToRGBA(scope: PBInsideFunctionScope, value: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_encodeNormalizedFloatToRGBA';\r\n pb.func(funcName, [pb.float('value')], function () {\r\n this.$l.bitShift = pb.vec4(256 * 256 * 256, 256 * 256, 256, 1);\r\n this.$l.bitMask = pb.vec4(0, 1 / 256, 1 / 256, 1 / 256);\r\n this.$l.t = pb.fract(pb.mul(this.value, this.bitShift));\r\n this.$return(pb.sub(this.t, pb.mul(this.t.xxyz, this.bitMask)));\r\n });\r\n return pb.getGlobalScope()[funcName](value) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Encodes two half floats into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param a - The first half float to be encode\r\n * @param b - The second half float to be encode\r\n * @returns The encoded rgba8unorm\r\n *\r\n * @public\r\n */\r\nexport function encode2HalfToRGBA(\r\n scope: PBInsideFunctionScope,\r\n a: PBShaderExp | number,\r\n b: PBShaderExp | number\r\n) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_encode2HalfToRGBA';\r\n pb.func(funcName, [pb.float('a'), pb.float('b')], function () {\r\n this.$l.t = pb.vec4(this.a, pb.fract(pb.mul(this.a, 255)), this.b, pb.fract(pb.mul(this.b, 255)));\r\n this.$return(\r\n pb.vec4(\r\n pb.sub(this.t.x, pb.div(this.t.y, 255)),\r\n this.t.y,\r\n pb.sub(this.t.z, pb.div(this.t.w, 255)),\r\n this.t.w\r\n )\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](a, b) as PBShaderExp;\r\n}\r\n/**\r\n * Decodes two half floats that was encoded into a rgba8unorm\r\n *\r\n * @param scope - Current shader scope\r\n * @param value - The rgba8unorm to be decoded\r\n * @returns A vec2 that contains the two half floats\r\n *\r\n * @public\r\n */\r\nexport function decode2HalfFromRGBA(scope: PBInsideFunctionScope, value: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_decode2HalfFromRGBA';\r\n pb.func(funcName, [pb.vec4('value')], function () {\r\n this.$return(\r\n pb.vec2(\r\n pb.add(this.value.x, pb.div(this.value.y, 255)),\r\n pb.add(this.value.z, pb.div(this.value.w, 255))\r\n )\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](value) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Encodes a color value into RGBM format\r\n *\r\n * @param scope - Current shader scope\r\n * @param rgb - The color value to be encoded\r\n * @param maxRange - The max range of color components\r\n * @returns The encoded RGBA value\r\n *\r\n * @public\r\n */\r\nexport function encodeRGBM(scope: PBInsideFunctionScope, rgb: PBShaderExp, maxRange: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_encodeRGBM';\r\n pb.func(funcName, [pb.vec3('rgb'), pb.float('range')], function () {\r\n this.$l.maxRGB = pb.max(this.rgb.r, pb.max(this.rgb.g, this.rgb.b));\r\n this.$l.M = pb.div(this.maxRGB, this.range);\r\n this.M = pb.div(pb.ceil(pb.mul(this.M, 255)), 255);\r\n this.$return(pb.vec4(pb.div(this.rgb, pb.mul(this.M, this.range)), this.M));\r\n });\r\n return pb.getGlobalScope()[funcName](rgb, maxRange) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Decodes color value that was encoded into RGBM format\r\n *\r\n * @param scope - Current shader scope\r\n * @param rgbm - The RGBM to be decoded\r\n * @param maxRange - The max range of color components\r\n * @returns The decoded RGB color value\r\n *\r\n * @public\r\n */\r\nexport function decodeRGBM(scope: PBInsideFunctionScope, rgbm: PBShaderExp, maxRange: PBShaderExp | number) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_decodeRGBM';\r\n pb.func(funcName, [pb.vec4('rgbm'), pb.float('range')], function () {\r\n this.$return(pb.mul(this.rgbm.rgb, this.rgbm.a, this.range));\r\n });\r\n return pb.getGlobalScope()[funcName](rgbm, maxRange) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Converts a vec3 color from gamma space to linear space\r\n *\r\n * @param scope - Current shader scope\r\n * @param color - The vec3 color to be converted\r\n * @returns The linear space vec3 color\r\n *\r\n * @public\r\n */\r\nexport function gammaToLinear(scope: PBInsideFunctionScope, color: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_gammaToLinear';\r\n pb.func(funcName, [pb.vec3('color')], function () {\r\n // Approximate version from http://chilliant.blogspot.com.au/2012/08/srgb-approximations-for-hlsl.html?m=1\r\n // float3 RGB = sRGB * (sRGB * (sRGB * 0.305306011 + 0.682171111) + 0.012522878);\r\n this.$return(\r\n pb.mul(\r\n this.color,\r\n pb.add(\r\n pb.mul(this.color, pb.add(pb.mul(this.color, 0.305306011), pb.vec3(0.682171111))),\r\n pb.vec3(0.012522878)\r\n )\r\n )\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](color) as PBShaderExp;\r\n}\r\n\r\n/**\r\n * Converts a vec3 color from linear space to gamma space\r\n *\r\n * @param scope - Current shader scope\r\n * @param color - The vec3 color to be converted\r\n * @returns The gamma space vec3 color\r\n *\r\n * @public\r\n */\r\nexport function linearToGamma(scope: PBInsideFunctionScope, color: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const funcName = 'Z_linearToGamma';\r\n pb.func(funcName, [pb.vec3('color')], function () {\r\n // Almost perfect version from http://chilliant.blogspot.com.au/2012/08/srgb-approximations-for-hlsl.html?m=1\r\n // C_srgb_2 = max(1.055 * pow(C_lin, 0.416666667) - 0.055, 0);\r\n this.$return(\r\n pb.max(pb.sub(pb.mul(pb.pow(this.color, pb.vec3(0.416666667)), 1.055), pb.vec3(0.055)), pb.vec3(0))\r\n );\r\n });\r\n return pb.getGlobalScope()[funcName](color) as PBShaderExp;\r\n}\r\n"],"names":["decodeFloatFromRGBA","scope","value","pb","$builder","$typeinfo","isPrimitiveType","primitiveType","PBPrimitiveType","F32VEC4","Error","PBInsideFunctionScope","funcName","func","vec4","$l","pack","floor","add","mul","bitSign","float","greaterThan","x","bitExpn","y","sub","exponent","pow","mantissa","div","z","w","$return","encodeFloatToRGBA","floatMax","floatMin","absvalue","abs","$if","lessThanEqual","greaterThanEqual","neg","log2","expbias","lessThan","getGlobalScope","decodeNormalizedFloatFromRGBA","bitShift","dot","encodeNormalizedFloatToRGBA","bitMask","t","fract","xxyz","encode2HalfToRGBA","a","b","decode2HalfFromRGBA","vec2","encodeRGBM","rgb","maxRange","vec3","maxRGB","max","r","g","M","range","ceil","decodeRGBM","rgbm","gammaToLinear","color","linearToGamma"],"mappings":"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"}
|
package/dist/shaders/noise.js
CHANGED
|
@@ -326,7 +326,11 @@
|
|
|
326
326
|
this.$for(pb.int('z'), -1, 2, function() {
|
|
327
327
|
this.$l.offset = pb.vec3(pb.float(this.x), pb.float(this.y), pb.float(this.z));
|
|
328
328
|
{
|
|
329
|
-
|
|
329
|
+
// Floored wrap: pb.mod is WGSL's truncated `%` on WebGPU, which leaves the neighbour
|
|
330
|
+
// cell -1 at -1 instead of freq - 1 and breaks the tiling
|
|
331
|
+
this.$l.cell = pb.add(this.id, this.offset);
|
|
332
|
+
this.cell = pb.sub(this.cell, pb.mul(pb.vec3(this.freq), pb.floor(pb.div(this.cell, pb.vec3(this.freq)))));
|
|
333
|
+
this.$l.h = pb.add(pb.mul(this[funcNameHash](this.cell), 0.4), pb.vec3(0.3));
|
|
330
334
|
}
|
|
331
335
|
this.h = pb.add(this.h, this.offset);
|
|
332
336
|
this.$l.d = pb.sub(this.p, this.h);
|