@woosh/meep-engine 3.52.0 → 3.53.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.
Files changed (370) hide show
  1. package/package.json +1 -1
  2. package/src/engine/ecs/animation/Animation.d.ts +4 -25
  3. package/src/engine/ecs/animation/Animation.d.ts.map +1 -1
  4. package/src/engine/ecs/animation/Animation.js +9 -41
  5. package/src/engine/ecs/ik/IKGoalSystem.d.ts +4 -5
  6. package/src/engine/ecs/ik/IKGoalSystem.d.ts.map +1 -1
  7. package/src/engine/ecs/ik/IKGoalSystem.js +4 -6
  8. package/src/engine/graphics/ecs/mesh/assetTypeByPath.js +1 -1
  9. package/src/engine/graphics3/AnimationGraphSystem.d.ts +9 -22
  10. package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -1
  11. package/src/engine/graphics3/AnimationGraphSystem.js +58 -203
  12. package/src/engine/graphics3/AnimationSystem.d.ts +7 -18
  13. package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -1
  14. package/src/engine/graphics3/AnimationSystem.js +62 -243
  15. package/src/engine/graphics3/FoliageWindSystem.d.ts +67 -0
  16. package/src/engine/graphics3/FoliageWindSystem.d.ts.map +1 -0
  17. package/src/engine/graphics3/FoliageWindSystem.js +257 -0
  18. package/src/engine/graphics3/GPUFluidSystem.d.ts +7 -0
  19. package/src/engine/graphics3/GPUFluidSystem.d.ts.map +1 -1
  20. package/src/engine/graphics3/GPUFluidSystem.js +39 -1
  21. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +0 -1
  22. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  23. package/src/engine/graphics3/GPUParticleEmitterSystem.js +19 -5
  24. package/src/engine/graphics3/animation/AnimationClips.d.ts +107 -13
  25. package/src/engine/graphics3/animation/AnimationClips.d.ts.map +1 -1
  26. package/src/engine/graphics3/animation/AnimationClips.js +207 -10
  27. package/src/engine/graphics3/animation/AnimationClipsSink.d.ts +89 -0
  28. package/src/engine/graphics3/animation/AnimationClipsSink.d.ts.map +1 -0
  29. package/src/engine/graphics3/animation/AnimationClipsSink.js +205 -0
  30. package/src/engine/graphics3/animation/FoliageWindRigs.d.ts +43 -0
  31. package/src/engine/graphics3/animation/FoliageWindRigs.d.ts.map +1 -0
  32. package/src/engine/graphics3/animation/FoliageWindRigs.js +69 -0
  33. package/src/engine/graphics3/animation/write_clip_playback.d.ts +17 -11
  34. package/src/engine/graphics3/animation/write_clip_playback.d.ts.map +1 -1
  35. package/src/engine/graphics3/animation/write_clip_playback.js +36 -27
  36. package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts.map +1 -1
  37. package/src/engine/graphics3/decal/GPUDecalRenderer.js +8 -6
  38. package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
  39. package/src/engine/graphics3/decal/shader_decal_composite.js +11 -5
  40. package/src/engine/graphics3/pose/collect_entity_playbacks.d.ts +7 -7
  41. package/src/engine/graphics3/pose/collect_entity_playbacks.d.ts.map +1 -1
  42. package/src/engine/graphics3/pose/collect_entity_playbacks.js +14 -15
  43. package/src/engine/graphics3/prefab/Prefab.d.ts +6 -0
  44. package/src/engine/graphics3/prefab/Prefab.d.ts.map +1 -1
  45. package/src/engine/graphics3/prefab/Prefab.js +169 -162
  46. package/src/engine/graphics3/prefab/prefab_compile.d.ts.map +1 -1
  47. package/src/engine/graphics3/prefab/prefab_compile.js +369 -334
  48. package/src/engine/graphics3/prefab/prefab_instantiate.d.ts.map +1 -1
  49. package/src/engine/graphics3/prefab/prefab_instantiate.js +43 -2
  50. package/src/engine/graphics3/terrain/chunk_terrain_material_surface.js +2 -2
  51. package/src/engine/physics/ecs/ContactProbeSystem.d.ts +2 -3
  52. package/src/engine/physics/ecs/ContactProbeSystem.d.ts.map +1 -1
  53. package/src/engine/physics/ecs/ContactProbeSystem.js +2 -4
  54. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  55. package/src/engine/sound/simulation/PROBE_PLACEMENT.md +4 -4
  56. package/src/engine/sound/simulation/README.md +1 -1
  57. package/src/engine/sound/simulation/probe/bakeProbeField.d.ts +22 -8
  58. package/src/engine/sound/simulation/probe/bakeProbeField.d.ts.map +1 -1
  59. package/src/engine/sound/simulation/probe/bakeProbeField.js +60 -15
  60. package/src/engine/sound/simulation/probe/bakeProbeReflectors.d.ts.map +1 -1
  61. package/src/engine/sound/simulation/probe/bakeProbeReflectors.js +19 -23
  62. package/src/engine/sound/simulation/probe/probe_sdf_grid.d.ts +63 -17
  63. package/src/engine/sound/simulation/probe/probe_sdf_grid.d.ts.map +1 -1
  64. package/src/engine/sound/simulation/probe/probe_sdf_grid.js +67 -17
  65. package/src/generation/foliage/FOLIAGE_DESIGN.md +318 -0
  66. package/src/generation/foliage/FOLIAGE_PLAN.md +198 -0
  67. package/src/generation/foliage/animation/build_tree_wind_rig.d.ts +20 -0
  68. package/src/generation/foliage/animation/build_tree_wind_rig.d.ts.map +1 -0
  69. package/src/generation/foliage/animation/build_tree_wind_rig.js +108 -0
  70. package/src/generation/foliage/asset/TreeAsset.d.ts +86 -0
  71. package/src/generation/foliage/asset/TreeAsset.d.ts.map +1 -0
  72. package/src/generation/foliage/asset/TreeAsset.js +111 -0
  73. package/src/generation/foliage/asset/TreeLODAsset.d.ts +115 -0
  74. package/src/generation/foliage/asset/TreeLODAsset.d.ts.map +1 -0
  75. package/src/generation/foliage/asset/TreeLODAsset.js +346 -0
  76. package/src/generation/foliage/asset/generate_tree.d.ts +15 -0
  77. package/src/generation/foliage/asset/generate_tree.d.ts.map +1 -0
  78. package/src/generation/foliage/asset/generate_tree.js +93 -0
  79. package/src/generation/foliage/asset/place_tree.d.ts +82 -0
  80. package/src/generation/foliage/asset/place_tree.d.ts.map +1 -0
  81. package/src/generation/foliage/asset/place_tree.js +194 -0
  82. package/src/generation/foliage/config/BarkMaterialConfig.d.ts +120 -0
  83. package/src/generation/foliage/config/BarkMaterialConfig.d.ts.map +1 -0
  84. package/src/generation/foliage/config/BarkMaterialConfig.js +250 -0
  85. package/src/generation/foliage/config/BranchLevelConfig.d.ts +288 -0
  86. package/src/generation/foliage/config/BranchLevelConfig.d.ts.map +1 -0
  87. package/src/generation/foliage/config/BranchLevelConfig.js +536 -0
  88. package/src/generation/foliage/config/CrownConfig.d.ts +100 -0
  89. package/src/generation/foliage/config/CrownConfig.d.ts.map +1 -0
  90. package/src/generation/foliage/config/CrownConfig.js +186 -0
  91. package/src/generation/foliage/config/CrownEnvelopeType.d.ts +16 -0
  92. package/src/generation/foliage/config/CrownEnvelopeType.d.ts.map +1 -0
  93. package/src/generation/foliage/config/CrownEnvelopeType.js +17 -0
  94. package/src/generation/foliage/config/FoliageCardType.d.ts +12 -0
  95. package/src/generation/foliage/config/FoliageCardType.d.ts.map +1 -0
  96. package/src/generation/foliage/config/FoliageCardType.js +18 -0
  97. package/src/generation/foliage/config/FoliageConfig.d.ts +151 -0
  98. package/src/generation/foliage/config/FoliageConfig.d.ts.map +1 -0
  99. package/src/generation/foliage/config/FoliageConfig.js +283 -0
  100. package/src/generation/foliage/config/FoliageMaterialConfig.d.ts +90 -0
  101. package/src/generation/foliage/config/FoliageMaterialConfig.d.ts.map +1 -0
  102. package/src/generation/foliage/config/FoliageMaterialConfig.js +181 -0
  103. package/src/generation/foliage/config/PhyllotaxisMode.d.ts +13 -0
  104. package/src/generation/foliage/config/PhyllotaxisMode.d.ts.map +1 -0
  105. package/src/generation/foliage/config/PhyllotaxisMode.js +20 -0
  106. package/src/generation/foliage/config/TreeLODConfig.d.ts +87 -0
  107. package/src/generation/foliage/config/TreeLODConfig.d.ts.map +1 -0
  108. package/src/generation/foliage/config/TreeLODConfig.js +211 -0
  109. package/src/generation/foliage/config/TreePreset.d.ts +16 -0
  110. package/src/generation/foliage/config/TreePreset.d.ts.map +1 -0
  111. package/src/generation/foliage/config/TreePreset.js +17 -0
  112. package/src/generation/foliage/config/TreeSpeciesConfig.d.ts +109 -0
  113. package/src/generation/foliage/config/TreeSpeciesConfig.d.ts.map +1 -0
  114. package/src/generation/foliage/config/TreeSpeciesConfig.js +400 -0
  115. package/src/generation/foliage/config/TreeWindConfig.d.ts +84 -0
  116. package/src/generation/foliage/config/TreeWindConfig.d.ts.map +1 -0
  117. package/src/generation/foliage/config/TreeWindConfig.js +157 -0
  118. package/src/generation/foliage/index.d.ts +38 -0
  119. package/src/generation/foliage/index.d.ts.map +1 -0
  120. package/src/generation/foliage/index.js +43 -0
  121. package/src/generation/foliage/material/make_bark_material.d.ts +37 -0
  122. package/src/generation/foliage/material/make_bark_material.d.ts.map +1 -0
  123. package/src/generation/foliage/material/make_bark_material.js +802 -0
  124. package/src/generation/foliage/material/make_foliage_material.d.ts +14 -0
  125. package/src/generation/foliage/material/make_foliage_material.d.ts.map +1 -0
  126. package/src/generation/foliage/material/make_foliage_material.js +359 -0
  127. package/src/generation/foliage/mesh/branch_collar_project.d.ts +42 -0
  128. package/src/generation/foliage/mesh/branch_collar_project.d.ts.map +1 -0
  129. package/src/generation/foliage/mesh/branch_collar_project.js +203 -0
  130. package/src/generation/foliage/mesh/branch_ring_triangulate.d.ts +35 -0
  131. package/src/generation/foliage/mesh/branch_ring_triangulate.d.ts.map +1 -0
  132. package/src/generation/foliage/mesh/branch_ring_triangulate.js +72 -0
  133. package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts +80 -0
  134. package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts.map +1 -0
  135. package/src/generation/foliage/mesh/foliage_collect_attachments.js +502 -0
  136. package/src/generation/foliage/mesh/tree_mesh_apply_canopy_ao.d.ts +19 -0
  137. package/src/generation/foliage/mesh/tree_mesh_apply_canopy_ao.d.ts.map +1 -0
  138. package/src/generation/foliage/mesh/tree_mesh_apply_canopy_ao.js +150 -0
  139. package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts +55 -0
  140. package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts.map +1 -0
  141. package/src/generation/foliage/mesh/tree_mesh_build_bark.js +1047 -0
  142. package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts +21 -0
  143. package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts.map +1 -0
  144. package/src/generation/foliage/mesh/tree_mesh_build_foliage.js +415 -0
  145. package/src/generation/foliage/presets/make_tree_species_preset.d.ts +13 -0
  146. package/src/generation/foliage/presets/make_tree_species_preset.d.ts.map +1 -0
  147. package/src/generation/foliage/presets/make_tree_species_preset.js +837 -0
  148. package/src/generation/foliage/skeleton/TreeSkeleton.d.ts +443 -0
  149. package/src/generation/foliage/skeleton/TreeSkeleton.d.ts.map +1 -0
  150. package/src/generation/foliage/skeleton/TreeSkeleton.js +1100 -0
  151. package/src/generation/foliage/skeleton/crown_envelope_evaluate.d.ts +27 -0
  152. package/src/generation/foliage/skeleton/crown_envelope_evaluate.d.ts.map +1 -0
  153. package/src/generation/foliage/skeleton/crown_envelope_evaluate.js +121 -0
  154. package/src/generation/foliage/skeleton/spine_frame_double_reflection.d.ts +32 -0
  155. package/src/generation/foliage/skeleton/spine_frame_double_reflection.d.ts.map +1 -0
  156. package/src/generation/foliage/skeleton/spine_frame_double_reflection.js +87 -0
  157. package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.d.ts +33 -0
  158. package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.d.ts.map +1 -0
  159. package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.js +205 -0
  160. package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.d.ts +14 -0
  161. package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.d.ts.map +1 -0
  162. package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.js +179 -0
  163. package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts +18 -0
  164. package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts.map +1 -0
  165. package/src/generation/foliage/skeleton/tree_skeleton_grow.js +1104 -0
  166. package/src/shade/playground/additive_blending/index.html +197 -0
  167. package/src/shade/playground/additive_blending/main.d.ts +2 -0
  168. package/src/shade/playground/additive_blending/main.d.ts.map +1 -0
  169. package/src/shade/playground/additive_blending/main.js +529 -0
  170. package/src/shade/playground/foliage_wind/README.md +18 -0
  171. package/src/shade/playground/foliage_wind/foliage_world.d.ts +127 -0
  172. package/src/shade/playground/foliage_wind/foliage_world.d.ts.map +1 -0
  173. package/src/shade/playground/foliage_wind/foliage_world.js +593 -0
  174. package/src/shade/playground/foliage_wind/index.html +254 -0
  175. package/src/shade/playground/foliage_wind/main.d.ts +2 -0
  176. package/src/shade/playground/foliage_wind/main.d.ts.map +1 -0
  177. package/src/shade/playground/foliage_wind/main.js +263 -0
  178. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  179. package/src/shade/renderer/Renderer.js +45 -16
  180. package/src/shade/renderer/animation/ADDITIVE_BLENDING_PLAN.md +145 -0
  181. package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.d.ts +9 -1
  182. package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.d.ts.map +1 -1
  183. package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.js +53 -1
  184. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_JOINT_STRUCT.d.ts +8 -0
  185. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_JOINT_STRUCT.d.ts.map +1 -0
  186. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_JOINT_STRUCT.js +71 -0
  187. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_RIG_STRUCT.d.ts +11 -0
  188. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_RIG_STRUCT.d.ts.map +1 -0
  189. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_RIG_STRUCT.js +32 -0
  190. package/src/shade/renderer/animation/GPUAnimationManager.d.ts +30 -3
  191. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  192. package/src/shade/renderer/animation/GPUAnimationManager.js +532 -79
  193. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts +19 -12
  194. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts.map +1 -1
  195. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.js +20 -13
  196. package/src/shade/renderer/animation/ShadeAnimationClip.d.ts +35 -8
  197. package/src/shade/renderer/animation/ShadeAnimationClip.d.ts.map +1 -1
  198. package/src/shade/renderer/animation/ShadeAnimationClip.js +433 -2
  199. package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts.map +1 -1
  200. package/src/shade/renderer/animation/chunk_pose_accumulator.js +40 -32
  201. package/src/shade/renderer/animation/foliage/FoliageWindJoint.d.ts +97 -0
  202. package/src/shade/renderer/animation/foliage/FoliageWindJoint.d.ts.map +1 -0
  203. package/src/shade/renderer/animation/foliage/FoliageWindJoint.js +161 -0
  204. package/src/shade/renderer/animation/foliage/FoliageWindRig.d.ts +65 -0
  205. package/src/shade/renderer/animation/foliage/FoliageWindRig.d.ts.map +1 -0
  206. package/src/shade/renderer/animation/foliage/FoliageWindRig.js +89 -0
  207. package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.d.ts +19 -0
  208. package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.d.ts.map +1 -0
  209. package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.js +143 -0
  210. package/src/shade/renderer/animation/foliage/shader_foliage_wind_apply.d.ts +14 -0
  211. package/src/shade/renderer/animation/foliage/shader_foliage_wind_apply.d.ts.map +1 -0
  212. package/src/shade/renderer/animation/foliage/shader_foliage_wind_apply.js +116 -0
  213. package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts.map +1 -1
  214. package/src/shade/renderer/animation/pose/pose_evaluate_local.js +39 -29
  215. package/src/shade/renderer/animation/shader_animation_pose_resolve.js +37 -37
  216. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +2 -2
  217. package/src/shade/renderer/extension/RenderExtension.d.ts +7 -0
  218. package/src/shade/renderer/extension/RenderExtension.d.ts.map +1 -1
  219. package/src/shade/renderer/extension/RenderExtension.js +9 -0
  220. package/src/shade/renderer/extension/RenderExtensionRegistry.d.ts +6 -0
  221. package/src/shade/renderer/extension/RenderExtensionRegistry.d.ts.map +1 -1
  222. package/src/shade/renderer/extension/RenderExtensionRegistry.js +15 -0
  223. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +7 -0
  224. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts.map +1 -1
  225. package/src/shade/renderer/fluid/GPUFluidCascade.js +15 -0
  226. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +7 -0
  227. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts.map +1 -1
  228. package/src/shade/renderer/fluid/GPUFluidCascadeStack.js +11 -0
  229. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts.map +1 -1
  230. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.js +51 -48
  231. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts +6 -0
  232. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts.map +1 -1
  233. package/src/shade/renderer/fluid/mac/FluidMacPasses.js +16 -0
  234. package/src/shade/renderer/fluid/mac/chunk_fluid_mac_seams.d.ts.map +1 -1
  235. package/src/shade/renderer/fluid/mac/chunk_fluid_mac_seams.js +15 -3
  236. package/src/shade/renderer/fluid/mac/chunk_v3_mac_lattice_corners.d.ts.map +1 -1
  237. package/src/shade/renderer/fluid/mac/chunk_v3_mac_lattice_corners.js +102 -96
  238. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.js +12 -12
  239. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_predict.js +12 -12
  240. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +7 -0
  241. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts.map +1 -1
  242. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.js +16 -0
  243. package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts +7 -0
  244. package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts.map +1 -1
  245. package/src/shade/renderer/fluid/publish/FluidWindPublish.js +10 -0
  246. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.js +2 -2
  247. package/src/shade/renderer/loader/SceneBundle.d.ts +7 -0
  248. package/src/shade/renderer/loader/SceneBundle.d.ts.map +1 -1
  249. package/src/shade/renderer/loader/SceneBundle.js +119 -111
  250. package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts +4 -0
  251. package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts.map +1 -1
  252. package/src/shade/renderer/material/standard/fragment_gbuffer.js +6 -5
  253. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts +8 -7
  254. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts.map +1 -1
  255. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.js +9 -8
  256. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  257. package/src/shade/renderer/particles/GPUParticleSystem.js +3 -1
  258. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -1
  259. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +9 -4
  260. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.d.ts.map +1 -1
  261. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.js +9 -7
  262. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment.d.ts.map +1 -1
  263. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment.js +15 -7
  264. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts.map +1 -1
  265. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +6 -4
  266. package/src/shade/renderer/rasterize/native/oit/oit_resolve_fragment_body.js +3 -3
  267. package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.d.ts.map +1 -1
  268. package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +8 -5
  269. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
  270. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +4 -3
  271. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +1 -1
  272. package/src/shade/renderer/texture/SAMPLER_ANISOTROPIC_CLAMP.d.ts +9 -0
  273. package/src/shade/renderer/texture/SAMPLER_ANISOTROPIC_CLAMP.d.ts.map +1 -0
  274. package/src/shade/renderer/texture/SAMPLER_ANISOTROPIC_CLAMP.js +17 -0
  275. package/src/shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.d.ts +8 -0
  276. package/src/shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.d.ts.map +1 -1
  277. package/src/shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.js +28 -20
  278. package/src/shade/renderer/texture/SAMPLER_TRILINEAR_CLAMP.d.ts +8 -0
  279. package/src/shade/renderer/texture/SAMPLER_TRILINEAR_CLAMP.d.ts.map +1 -0
  280. package/src/shade/renderer/texture/SAMPLER_TRILINEAR_CLAMP.js +15 -0
  281. package/src/shade/renderer/view/chunk_view_mip_bias.d.ts +21 -0
  282. package/src/shade/renderer/view/chunk_view_mip_bias.d.ts.map +1 -0
  283. package/src/shade/renderer/view/chunk_view_mip_bias.js +44 -0
  284. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +1 -1
  285. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  286. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +105 -26
  287. package/src/engine/graphics/composit/CompositingStages.d.ts +0 -6
  288. package/src/engine/graphics/composit/CompositingStages.d.ts.map +0 -1
  289. package/src/engine/graphics/composit/CompositingStages.js +0 -8
  290. package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.d.ts +0 -7
  291. package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.d.ts.map +0 -1
  292. package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.js +0 -24
  293. package/src/engine/graphics/geometry/buffered/computeGeometryBoundingSphereMiniball.d.ts +0 -8
  294. package/src/engine/graphics/geometry/buffered/computeGeometryBoundingSphereMiniball.d.ts.map +0 -1
  295. package/src/engine/graphics/geometry/buffered/computeGeometryBoundingSphereMiniball.js +0 -17
  296. package/src/engine/graphics/geometry/buffered/computeGeometryEquality.d.ts +0 -8
  297. package/src/engine/graphics/geometry/buffered/computeGeometryEquality.d.ts.map +0 -1
  298. package/src/engine/graphics/geometry/buffered/computeGeometryEquality.js +0 -60
  299. package/src/engine/graphics/geometry/buffered/computeGeometryHash.d.ts +0 -7
  300. package/src/engine/graphics/geometry/buffered/computeGeometryHash.d.ts.map +0 -1
  301. package/src/engine/graphics/geometry/buffered/computeGeometryHash.js +0 -26
  302. package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.d.ts +0 -7
  303. package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.d.ts.map +0 -1
  304. package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.js +0 -23
  305. package/src/engine/graphics/geometry/instancing/geometry_copy.d.ts +0 -7
  306. package/src/engine/graphics/geometry/instancing/geometry_copy.d.ts.map +0 -1
  307. package/src/engine/graphics/geometry/instancing/geometry_copy.js +0 -15
  308. package/src/engine/graphics/geometry/instancing/rewriteMaterial.d.ts +0 -2
  309. package/src/engine/graphics/geometry/instancing/rewriteMaterial.d.ts.map +0 -1
  310. package/src/engine/graphics/geometry/instancing/rewriteMaterial.js +0 -57
  311. package/src/engine/graphics/geometry/ribbon/Quad.d.ts +0 -96
  312. package/src/engine/graphics/geometry/ribbon/Quad.d.ts.map +0 -1
  313. package/src/engine/graphics/geometry/ribbon/Quad.js +0 -213
  314. package/src/engine/graphics/geometry/ribbon/copyAttributeV3.d.ts +0 -9
  315. package/src/engine/graphics/geometry/ribbon/copyAttributeV3.d.ts.map +0 -1
  316. package/src/engine/graphics/geometry/ribbon/copyAttributeV3.js +0 -12
  317. package/src/engine/graphics/geometry/ribbon/copyAttributeValue.d.ts +0 -10
  318. package/src/engine/graphics/geometry/ribbon/copyAttributeValue.d.ts.map +0 -1
  319. package/src/engine/graphics/geometry/ribbon/copyAttributeValue.js +0 -17
  320. package/src/engine/graphics/geometry/ribbon/equalAttributeV3.d.ts +0 -10
  321. package/src/engine/graphics/geometry/ribbon/equalAttributeV3.d.ts.map +0 -1
  322. package/src/engine/graphics/geometry/ribbon/equalAttributeV3.js +0 -13
  323. package/src/engine/graphics/geometry/ribbon/equalAttributeValue.d.ts +0 -11
  324. package/src/engine/graphics/geometry/ribbon/equalAttributeValue.d.ts.map +0 -1
  325. package/src/engine/graphics/geometry/ribbon/equalAttributeValue.js +0 -24
  326. package/src/engine/graphics/geometry/ribbon/rotateRibbon.d.ts +0 -6
  327. package/src/engine/graphics/geometry/ribbon/rotateRibbon.d.ts.map +0 -1
  328. package/src/engine/graphics/geometry/ribbon/rotateRibbon.js +0 -37
  329. package/src/engine/graphics/geometry/ribbon/updateTipPosition.d.ts +0 -9
  330. package/src/engine/graphics/geometry/ribbon/updateTipPosition.d.ts.map +0 -1
  331. package/src/engine/graphics/geometry/ribbon/updateTipPosition.js +0 -52
  332. package/src/engine/graphics/geometry/skining/computeSkinnedMeshVertices.d.ts +0 -8
  333. package/src/engine/graphics/geometry/skining/computeSkinnedMeshVertices.d.ts.map +0 -1
  334. package/src/engine/graphics/geometry/skining/computeSkinnedMeshVertices.js +0 -54
  335. package/src/engine/graphics/render/RenderPassType.d.ts +0 -6
  336. package/src/engine/graphics/render/RenderPassType.d.ts.map +0 -1
  337. package/src/engine/graphics/render/RenderPassType.js +0 -8
  338. package/src/engine/graphics/render/layers/RenderLayer.d.ts +0 -78
  339. package/src/engine/graphics/render/layers/RenderLayer.d.ts.map +0 -1
  340. package/src/engine/graphics/render/layers/RenderLayer.js +0 -95
  341. package/src/engine/graphics/render/layers/RenderLayerManager.d.ts +0 -72
  342. package/src/engine/graphics/render/layers/RenderLayerManager.d.ts.map +0 -1
  343. package/src/engine/graphics/render/layers/RenderLayerManager.js +0 -160
  344. package/src/engine/graphics/render/layers/RenderLayerManagerState.d.ts +0 -18
  345. package/src/engine/graphics/render/layers/RenderLayerManagerState.d.ts.map +0 -1
  346. package/src/engine/graphics/render/layers/RenderLayerManagerState.js +0 -48
  347. package/src/engine/graphics/render/layers/RenderLayerState.d.ts +0 -18
  348. package/src/engine/graphics/render/layers/RenderLayerState.d.ts.map +0 -1
  349. package/src/engine/graphics/render/layers/RenderLayerState.js +0 -27
  350. package/src/engine/graphics/render/layers/RenderLayerUtils.d.ts +0 -8
  351. package/src/engine/graphics/render/layers/RenderLayerUtils.d.ts.map +0 -1
  352. package/src/engine/graphics/render/layers/RenderLayerUtils.js +0 -103
  353. package/src/engine/graphics/render/make_bvh_visibility_builder.d.ts +0 -10
  354. package/src/engine/graphics/render/make_bvh_visibility_builder.d.ts.map +0 -1
  355. package/src/engine/graphics/render/make_bvh_visibility_builder.js +0 -64
  356. package/src/engine/graphics/render/view/CameraViewFlags.d.ts +0 -7
  357. package/src/engine/graphics/render/view/CameraViewFlags.d.ts.map +0 -1
  358. package/src/engine/graphics/render/view/CameraViewFlags.js +0 -9
  359. package/src/engine/graphics/render/visibility/IncrementalDeltaSet.d.ts +0 -143
  360. package/src/engine/graphics/render/visibility/IncrementalDeltaSet.d.ts.map +0 -1
  361. package/src/engine/graphics/render/visibility/IncrementalDeltaSet.js +0 -328
  362. package/src/engine/graphics/render/visibility/VisibilityComputer.d.ts +0 -39
  363. package/src/engine/graphics/render/visibility/VisibilityComputer.d.ts.map +0 -1
  364. package/src/engine/graphics/render/visibility/VisibilityComputer.js +0 -80
  365. package/src/engine/graphics/render/visibility/VisibilityFilter.d.ts +0 -29
  366. package/src/engine/graphics/render/visibility/VisibilityFilter.d.ts.map +0 -1
  367. package/src/engine/graphics/render/visibility/VisibilityFilter.js +0 -37
  368. package/src/engine/graphics3/animation/write_graph_playback.d.ts +0 -24
  369. package/src/engine/graphics3/animation/write_graph_playback.d.ts.map +0 -1
  370. package/src/engine/graphics3/animation/write_graph_playback.js +0 -48
@@ -24,7 +24,9 @@ import { MATERIAL_SHADING_INFO_STRUCT } from "../../shader/chunk/material/MATERI
24
24
  import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
25
25
  import { chunk_forward_sample_indirect } from "./chunk_forward_sample_indirect.js";
26
26
  import { FORWARD_VERTEX_SHADER_STRUCT } from "./FORWARD_VERTEX_SHADER_STRUCT.js";
27
- import { CAMERA_RESOURCE } from "../../camera/CAMERA_RESOURCE.js";
27
+ import { CAMERA_RESOURCE } from "../../camera/CAMERA_RESOURCE.js";
28
+ import { VIEW_RESOURCE } from "../../view/VIEW_RESOURCE.js";
29
+ import { chunk_view_mip_bias } from "../../view/chunk_view_mip_bias.js";
28
30
  import {
29
31
  MATERIAL_DIFFUSE_SAMPLER_RESOURCE,
30
32
  MATERIAL_DIFFUSE_TEXTURE_RESOURCE,
@@ -55,7 +57,11 @@ fn forward_shade_standard_fragment(
55
57
  ) -> vec4f {
56
58
  let world_tangent_frame = build_orthonormal_matrix_nt(vert.normal, vert.tangent);
57
59
 
58
- let t_normal = decode_tangent_normal(textureSample(texture_normal, texture_normal_sampler, vert.uv));
60
+ let uv_bias = view_uv_derivative_bias(view.upscale_ratio);
61
+ let uv_ddx = dpdx(vert.uv) * uv_bias.x;
62
+ let uv_ddy = dpdy(vert.uv) * uv_bias.y;
63
+
64
+ let t_normal = decode_tangent_normal(textureSampleGrad(texture_normal, texture_normal_sampler, vert.uv, uv_ddx, uv_ddy));
59
65
  var world_shading_normal:vec3<f32> = normalize( world_tangent_frame * t_normal );
60
66
 
61
67
  // flip the normal when looking at the surface's back. The raw front_facing cannot say:
@@ -77,9 +83,9 @@ fn forward_shade_standard_fragment(
77
83
  view_direction: 'view_direction',
78
84
  })};
79
85
 
80
- let t_pbr = textureSample(texture_orm, texture_orm_sampler, vert.uv);
81
- let t_diffuse = textureSample(texture_diffuse, texture_diffuse_sampler, vert.uv);
82
- let t_emissive = textureSample(texture_emissive, texture_emissive_sampler, vert.uv);
86
+ let t_pbr = textureSampleGrad(texture_orm, texture_orm_sampler, vert.uv, uv_ddx, uv_ddy);
87
+ let t_diffuse = textureSampleGrad(texture_diffuse, texture_diffuse_sampler, vert.uv, uv_ddx, uv_ddy);
88
+ let t_emissive = textureSampleGrad(texture_emissive, texture_emissive_sampler, vert.uv, uv_ddx, uv_ddy);
83
89
 
84
90
  // the vertex stage hands on the vertex's own colour; the material's is applied here
85
91
  var diffuse = t_diffuse.rgb * vert.color * material_info.albedo_color.rgb;
@@ -203,11 +209,13 @@ fn forward_shade_standard_fragment(
203
209
  chunk_compute_indirect_specular,
204
210
  chunk_forward_sample_indirect,
205
211
  chunk_compute_specular_occlusion,
206
- chunk_material_draw_side,
212
+ chunk_material_draw_side,
213
+ chunk_view_mip_bias,
207
214
  ]
208
215
  )
209
216
 
210
- chunk_forward_shade_standard_fragment.requireResource(CAMERA_RESOURCE);
217
+ chunk_forward_shade_standard_fragment.requireResource(CAMERA_RESOURCE);
218
+ chunk_forward_shade_standard_fragment.requireResource(VIEW_RESOURCE);
211
219
  chunk_forward_shade_standard_fragment.requireResource(MATERIAL_INFO_RESOURCE);
212
220
  chunk_forward_shade_standard_fragment.requireResource(MATERIAL_DIFFUSE_TEXTURE_RESOURCE);
213
221
  chunk_forward_shade_standard_fragment.requireResource(MATERIAL_DIFFUSE_SAMPLER_RESOURCE);
@@ -1 +1 @@
1
- {"version":3,"file":"avboit_draw_fragment_body.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,uCAFU,MAAM,CAE2B;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wCAFU,MAAM,CAoEV;AAEN;;;GAGG;AACH,gDAFU,WAAW,CAWnB;AAEF;;;GAGG;AACH,kCAFU,qBAAqB,CAiB3B"}
1
+ {"version":3,"file":"avboit_draw_fragment_body.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,uCAFU,MAAM,CAE2B;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wCAFU,MAAM,CAsEV;AAEN;;;GAGG;AACH,gDAFU,WAAW,CAWnB;AAEF;;;GAGG;AACH,kCAFU,qBAAqB,CAiB3B"}
@@ -1,6 +1,6 @@
1
1
  import { chunk_sample_volumetrics } from "../../../deferred/chunk_sample_volumetrics.js";
2
2
  import { chunk_get_view_space_depth } from "../../../shader/chunk/depth/chunk_get_view_space_depth.js";
3
- import { chunk_unjitter_uv } from "../../../shader/chunk/texture/chunk_unjitter_uv.js";
3
+ import { chunk_view_mip_bias } from "../../../view/chunk_view_mip_bias.js";
4
4
  import { FORWARD_VERTEX_SHADER_STRUCT } from "../../forward/FORWARD_VERTEX_SHADER_STRUCT.js";
5
5
  import { OIT_COVERAGE_MAX } from "../oit/OIT_CONSTANTS.js";
6
6
  import { AVBOIT_EXTINCT_TRANSMITTANCE } from "./AVBOIT_CONSTANTS.js";
@@ -66,7 +66,9 @@ fn main(
66
66
 
67
67
  // need to unjitter UV to account for TAA
68
68
  var vert_adjusted = vert;
69
- vert_adjusted.uv = unjitter_uv(vert.uv, view.jitter);
69
+ let uv_bias = view_uv_derivative_bias(view.upscale_ratio);
70
+ let uv_ddx = dpdx(vert.uv) * uv_bias.x;
71
+ let uv_ddy = dpdy(vert.uv) * uv_bias.y;
70
72
 
71
73
  // linear view depth (vert.position is @builtin(position); .z is device depth) and screen uv,
72
74
  // for the volume lookup and the fog composite alike
@@ -98,7 +100,7 @@ fn main(
98
100
  var tint = vec3<f32>(1.0);
99
101
  let f_transmission = material_info.transmission_factor;
100
102
  if (f_transmission > 0.0) {
101
- let t_diffuse = textureSample(texture_diffuse, texture_diffuse_sampler, vert_adjusted.uv);
103
+ let t_diffuse = textureSampleGrad(texture_diffuse, texture_diffuse_sampler, vert_adjusted.uv, uv_ddx, uv_ddy);
102
104
  let base_color = (t_diffuse.rgb / max(t_diffuse.a, 1e-7)) * vert.color * material_info.albedo_color.rgb;
103
105
  tint = avboit_transmission_tint(base_color, f_transmission * f32(warp.tint_from_base_color));
104
106
  }
@@ -122,7 +124,7 @@ fn main(
122
124
  */
123
125
  export const AVBOIT_DRAW_FRAGMENT_DEPENDENCIES = [
124
126
  FORWARD_VERTEX_SHADER_STRUCT.declaration_chunk,
125
- chunk_unjitter_uv,
127
+ chunk_view_mip_bias,
126
128
  chunk_get_view_space_depth,
127
129
  chunk_sample_volumetrics,
128
130
  chunk_avboit_view_depth_to_virtual,
@@ -2,7 +2,7 @@ import { chunk_sample_volumetrics } from "../../../deferred/chunk_sample_volumet
2
2
  import {
3
3
  chunk_resolve_power_moments_4
4
4
  } from "../../../shader/chunk/mboit/moments/power/chunk_resolve_power_moments_4.js";
5
- import { chunk_unjitter_uv } from "../../../shader/chunk/texture/chunk_unjitter_uv.js";
5
+
6
6
  import { FORWARD_VERTEX_SHADER_STRUCT } from "../../forward/FORWARD_VERTEX_SHADER_STRUCT.js";
7
7
  import { chunk_oit_linearize_depth } from "./chunk_oit_linearize_depth.js";
8
8
  import { OIT_COVERAGE_MAX } from "./OIT_CONSTANTS.js";
@@ -51,7 +51,7 @@ fn main(
51
51
 
52
52
  // need to unjitter UV to account for TAA
53
53
  var vert_adjusted = vert;
54
- vert_adjusted.uv = unjitter_uv(vert.uv, view.jitter);
54
+
55
55
 
56
56
  let shaded = forward_shade_standard_fragment(vert_adjusted, front_facing, ${OIT_RESOLVE_LIGHT_BUDGET}u, ${OIT_RESOLVE_LIGHT_BUDGET}u);
57
57
 
@@ -99,7 +99,7 @@ export const OIT_RESOLVE_FRAGMENT_DEPENDENCIES = [
99
99
  FORWARD_VERTEX_SHADER_STRUCT.declaration_chunk,
100
100
  chunk_resolve_power_moments_4,
101
101
  chunk_oit_linearize_depth,
102
- chunk_unjitter_uv,
102
+
103
103
  chunk_sample_volumetrics,
104
104
  ];
105
105
 
@@ -1 +1 @@
1
- {"version":3,"file":"shader_oit_generate_moments.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js"],"names":[],"mappings":"AAgJA;;;;GAIG;AACH,0CAFU,sBAAsB,CAgE7B;uCArMoC,iCAAiC"}
1
+ {"version":3,"file":"shader_oit_generate_moments.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js"],"names":[],"mappings":"AAmJA;;;;GAIG;AACH,0CAFU,sBAAsB,CAgE7B;uCAxMoC,iCAAiC"}
@@ -6,7 +6,7 @@ import { STANDARD_MATERIAL_TEMPLATE } from "../../../material/standard/STANDARD_
6
6
  import { chunk_F_Schlick } from "../../../shader/chunk/brdf/fresnel/chunk_F_Schlick.js";
7
7
  import { chunk_mat4_extract_position } from "../../../shader/chunk/geometry/mat4/chunk_mat4_extract_position.js";
8
8
  import { chunk_dielectric_specular_color } from "../../../shader/chunk/material/chunk_dielectric_specular_color.js";
9
- import { chunk_unjitter_uv } from "../../../shader/chunk/texture/chunk_unjitter_uv.js";
9
+ import { chunk_view_mip_bias } from "../../../view/chunk_view_mip_bias.js";
10
10
  import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
11
11
  import { RenderPassColorAttachmentDescriptor } from "../../../shader/pass/RenderPassColorAttachmentDescriptor.js";
12
12
  import { ShaderResourceGroupDescriptor } from "../../../shader/resource/ShaderResourceGroupDescriptor.js";
@@ -74,9 +74,12 @@ fn main(
74
74
  ) -> Output {
75
75
 
76
76
  // compensate for TAA jitter
77
- var uv = unjitter_uv(vert.uv, view.jitter);
77
+ let uv = vert.uv;
78
+ let uv_bias = view_uv_derivative_bias(view.upscale_ratio);
79
+ let uv_ddx = dpdx(uv) * uv_bias.x;
80
+ let uv_ddy = dpdy(uv) * uv_bias.y;
78
81
 
79
- let t_diffuse = textureSample(texture_diffuse, texture_diffuse_sampler, uv);
82
+ let t_diffuse = textureSampleGrad(texture_diffuse, texture_diffuse_sampler, uv, uv_ddx, uv_ddy);
80
83
  let surface_alpha = t_diffuse.a * material_info.albedo_color.a;
81
84
 
82
85
  // MaterialX/OpenPBR transmission: when transmission_factor > 0, coverage
@@ -87,7 +90,7 @@ fn main(
87
90
  var opacity = surface_alpha;
88
91
  let f_transmission = material_info.transmission_factor;
89
92
  if (f_transmission > 0.0) {
90
- let t_pbr = textureSample(texture_orm, texture_orm_sampler, uv);
93
+ let t_pbr = textureSampleGrad(texture_orm, texture_orm_sampler, uv, uv_ddx, uv_ddy);
91
94
  var diffuse_rgb = t_diffuse.rgb;
92
95
  diffuse_rgb /= max(t_diffuse.a, 1e-7);
93
96
  let f_metalness = t_pbr.b * material_info.metallic_factor;
@@ -135,7 +138,7 @@ fn main(
135
138
  `, [
136
139
  FORWARD_VERTEX_SHADER_STRUCT.declaration_chunk,
137
140
  chunk_oit_linearize_depth,
138
- chunk_unjitter_uv,
141
+ chunk_view_mip_bias,
139
142
  chunk_mat4_extract_position,
140
143
  chunk_dielectric_specular_color,
141
144
  chunk_F_Schlick,
@@ -1 +1 @@
1
- {"version":3,"file":"viz_rasterization_alpha_tested_pass_descriptor.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js"],"names":[],"mappings":"AAyLA;;;;GAIG;AACH,6DAFU,sBAAsB,CAqC7B;uCA3LoC,iCAAiC"}
1
+ {"version":3,"file":"viz_rasterization_alpha_tested_pass_descriptor.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js"],"names":[],"mappings":"AA0LA;;;;GAIG;AACH,6DAFU,sBAAsB,CAqC7B;uCA5LoC,iCAAiC"}
@@ -10,7 +10,7 @@ import { chunk_scene_database_access } from "../../../scene/chunk_scene_database
10
10
  import {
11
11
  chunk_triangle_list_reverse_winding
12
12
  } from "../../../shader/chunk/geometry/triangle/chunk_triangle_list_reverse_winding.js";
13
- import { RENDER_GLOBAL_MIP_BIAS } from "../../../postprocess/taa/RENDER_GLOBAL_MIP_BIAS.js";
13
+ import { chunk_view_mip_bias } from "../../../view/chunk_view_mip_bias.js";
14
14
  import {
15
15
  chunk_encode_meshlet_element
16
16
  } from "../../../shader/chunk/geometry/meshlet/chunk_encode_meshlet_element.js";
@@ -72,7 +72,7 @@ fn main(
72
72
  // Calculate mip bias based on upscale ratio.
73
73
  // We take the average or the min of the vec2 upscale_ratio.
74
74
  // log2(2.0) = 1.0, so we subtract that to get sharper mips.
75
- let mip_bias = -log2(max(view.upscale_ratio.x, view.upscale_ratio.y)) + ${RENDER_GLOBAL_MIP_BIAS};
75
+ let mip_bias = view_mip_bias(view.upscale_ratio);
76
76
 
77
77
  let gradient_scale = exp2(mip_bias);
78
78
 
@@ -105,7 +105,8 @@ fn main(
105
105
  `, [
106
106
  chunk_material_opacity_contract,
107
107
  chunk_transparency_hashed_alpha_threshold,
108
- chunk_spatio_temporal_noise_r2_64,
108
+ chunk_spatio_temporal_noise_r2_64,
109
+ chunk_view_mip_bias,
109
110
  ]
110
111
  );
111
112
 
@@ -82,7 +82,7 @@ import { VSM_SLOT_EMPTY } from "../vsm/VSM_SLOT_STRUCT.js";
82
82
  * @typedef {import("../../buffer/table/serde/generate_record_writer.js").GPURecordWriter} GPURecordWriter
83
83
  */
84
84
 
85
- const DEFAULT_SHADOWMAP_ATLAS_RESOLUTION = 4096 * 2;
85
+ const DEFAULT_SHADOWMAP_ATLAS_RESOLUTION = 4096;
86
86
 
87
87
  /**
88
88
  * Resolution by cascade.
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Anisotropic trilinear clamp-to-edge sampler (`magFilter: "linear"`, `minFilter: "linear"`,
3
+ * `mipmapFilter: "linear"`, `maxAnisotropy: 16`).
4
+ * Use for mipmapped 3D scene atlases (such as decal and particle atlases) that undergo both
5
+ * minification and oblique-angle projection in world space.
6
+ */
7
+ export const SAMPLER_ANISOTROPIC_CLAMP: Readonly<SamplerDescriptor>;
8
+ import { SamplerDescriptor } from "../../descriptor/texture/SamplerDescriptor.js";
9
+ //# sourceMappingURL=SAMPLER_ANISOTROPIC_CLAMP.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SAMPLER_ANISOTROPIC_CLAMP.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/texture/SAMPLER_ANISOTROPIC_CLAMP.js"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,oEAQI;kCAhB8B,+CAA+C"}
@@ -0,0 +1,17 @@
1
+ import { SamplerDescriptor } from "../../descriptor/texture/SamplerDescriptor.js";
2
+
3
+ /**
4
+ * Anisotropic trilinear clamp-to-edge sampler (`magFilter: "linear"`, `minFilter: "linear"`,
5
+ * `mipmapFilter: "linear"`, `maxAnisotropy: 16`).
6
+ * Use for mipmapped 3D scene atlases (such as decal and particle atlases) that undergo both
7
+ * minification and oblique-angle projection in world space.
8
+ */
9
+ export const SAMPLER_ANISOTROPIC_CLAMP = Object.freeze(SamplerDescriptor.from({
10
+ addressModeU: "clamp-to-edge",
11
+ addressModeV: "clamp-to-edge",
12
+ addressModeW: "clamp-to-edge",
13
+ magFilter: "linear",
14
+ minFilter: "linear",
15
+ mipmapFilter: "linear",
16
+ maxAnisotropy: 16,
17
+ }));
@@ -1,3 +1,11 @@
1
+ /**
2
+ * Magnification-only linear clamp sampler (`magFilter: "linear"`, `minFilter: "nearest"`,
3
+ * `mipmapFilter: "nearest"`, `maxAnisotropy: 1`).
4
+ *
5
+ * Intended ONLY for upscaling single-mip 2D render targets (e.g. post-processing upsampling).
6
+ * Do NOT use for 3D scene textures, atlases, or mipmapped targets that undergo minification —
7
+ * use `SAMPLER_TRILINEAR_CLAMP` or `SAMPLER_ANISOTROPIC_CLAMP` instead.
8
+ */
1
9
  export const SAMPLER_LINEAR_UPSCALE: Readonly<SamplerDescriptor>;
2
10
  export const SAMPLER_LINEAR_DOWNSCALE: Readonly<SamplerDescriptor>;
3
11
  export const SAMPLER_NEAREST: Readonly<SamplerDescriptor>;
@@ -1 +1 @@
1
- {"version":3,"file":"SAMPLER_LINEAR_UPSCALE.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.js"],"names":[],"mappings":"AAEA,iEAKI;AAEJ,mEAIG;AAEH,0DAII;kCAnB8B,+CAA+C"}
1
+ {"version":3,"file":"SAMPLER_LINEAR_UPSCALE.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.js"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,iEAKI;AAEJ,mEAIG;AAEH,0DAII;kCA3B8B,+CAA+C"}
@@ -1,20 +1,28 @@
1
- import { SamplerDescriptor } from "../../descriptor/texture/SamplerDescriptor.js";
2
-
3
- export const SAMPLER_LINEAR_UPSCALE = Object.freeze(SamplerDescriptor.from({
4
- magFilter: "linear",
5
- addressModeU: "clamp-to-edge",
6
- addressModeV: "clamp-to-edge",
7
- addressModeW: "clamp-to-edge",
8
- }));
9
-
10
- export const SAMPLER_LINEAR_DOWNSCALE = Object.freeze(SamplerDescriptor.from({
11
- minFilter: "linear",
12
- addressModeU: "clamp-to-edge",
13
- addressModeV: "clamp-to-edge"
14
- }))
15
-
16
- export const SAMPLER_NEAREST = Object.freeze(SamplerDescriptor.from({
17
- magFilter: "nearest",
18
- addressModeU: "clamp-to-edge",
19
- addressModeV: "clamp-to-edge"
20
- }));
1
+ import { SamplerDescriptor } from "../../descriptor/texture/SamplerDescriptor.js";
2
+
3
+ /**
4
+ * Magnification-only linear clamp sampler (`magFilter: "linear"`, `minFilter: "nearest"`,
5
+ * `mipmapFilter: "nearest"`, `maxAnisotropy: 1`).
6
+ *
7
+ * Intended ONLY for upscaling single-mip 2D render targets (e.g. post-processing upsampling).
8
+ * Do NOT use for 3D scene textures, atlases, or mipmapped targets that undergo minification —
9
+ * use `SAMPLER_TRILINEAR_CLAMP` or `SAMPLER_ANISOTROPIC_CLAMP` instead.
10
+ */
11
+ export const SAMPLER_LINEAR_UPSCALE = Object.freeze(SamplerDescriptor.from({
12
+ magFilter: "linear",
13
+ addressModeU: "clamp-to-edge",
14
+ addressModeV: "clamp-to-edge",
15
+ addressModeW: "clamp-to-edge",
16
+ }));
17
+
18
+ export const SAMPLER_LINEAR_DOWNSCALE = Object.freeze(SamplerDescriptor.from({
19
+ minFilter: "linear",
20
+ addressModeU: "clamp-to-edge",
21
+ addressModeV: "clamp-to-edge"
22
+ }))
23
+
24
+ export const SAMPLER_NEAREST = Object.freeze(SamplerDescriptor.from({
25
+ magFilter: "nearest",
26
+ addressModeU: "clamp-to-edge",
27
+ addressModeV: "clamp-to-edge"
28
+ }));
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Trilinear clamp-to-edge sampler (`magFilter: "linear"`, `minFilter: "linear"`, `mipmapFilter: "linear"`).
3
+ * Use for mipmapped 2D render targets and LUTs where linear filtering is required across both
4
+ * magnification/minification and mip levels without anisotropic footprint expansion.
5
+ */
6
+ export const SAMPLER_TRILINEAR_CLAMP: Readonly<SamplerDescriptor>;
7
+ import { SamplerDescriptor } from "../../descriptor/texture/SamplerDescriptor.js";
8
+ //# sourceMappingURL=SAMPLER_TRILINEAR_CLAMP.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SAMPLER_TRILINEAR_CLAMP.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/texture/SAMPLER_TRILINEAR_CLAMP.js"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,kEAOI;kCAd8B,+CAA+C"}
@@ -0,0 +1,15 @@
1
+ import { SamplerDescriptor } from "../../descriptor/texture/SamplerDescriptor.js";
2
+
3
+ /**
4
+ * Trilinear clamp-to-edge sampler (`magFilter: "linear"`, `minFilter: "linear"`, `mipmapFilter: "linear"`).
5
+ * Use for mipmapped 2D render targets and LUTs where linear filtering is required across both
6
+ * magnification/minification and mip levels without anisotropic footprint expansion.
7
+ */
8
+ export const SAMPLER_TRILINEAR_CLAMP = Object.freeze(SamplerDescriptor.from({
9
+ addressModeU: "clamp-to-edge",
10
+ addressModeV: "clamp-to-edge",
11
+ addressModeW: "clamp-to-edge",
12
+ magFilter: "linear",
13
+ minFilter: "linear",
14
+ mipmapFilter: "linear",
15
+ }));
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Multiplier applied to screen-space UV derivatives before dividing by `view.upscale_ratio`
3
+ * to bias texture mip selection for temporal super-sampling (TAAU / NSS).
4
+ *
5
+ * @type {number}
6
+ */
7
+ export const RENDER_MIP_DERIVATIVE_BIAS: number;
8
+ /**
9
+ * Shared WGSL helpers for biasing screen-space UV derivatives and mip levels according to
10
+ * the active internal resolution scale (`view.upscale_ratio = output_resolution / internal_resolution`)
11
+ * and global TAA mip bias ({@link RENDER_GLOBAL_MIP_BIAS}).
12
+ *
13
+ * When rendering at reduced internal resolution (`upscale_ratio > 1.0`), raw screen-space
14
+ * derivatives (`dpdx` / `dpdy` or finite differences across internal pixels) measure the
15
+ * coarser internal pixel footprint rather than the final output pixel footprint reconstructed
16
+ * by temporal upscaling. Scaling derivatives by `view_uv_derivative_bias(view.upscale_ratio)`
17
+ * ensures mip selection and anisotropic filtering match the target output resolution.
18
+ */
19
+ export const chunk_view_mip_bias: CodeChunk;
20
+ import { CodeChunk } from "../shader/compiler/CodeChunk.js";
21
+ //# sourceMappingURL=chunk_view_mip_bias.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_view_mip_bias.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/view/chunk_view_mip_bias.js"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,yCAFU,MAAM,CAE2D;AAE3E;;;;;;;;;;GAUG;AACH,4CAqBE;0BA1CwB,iCAAiC"}
@@ -0,0 +1,44 @@
1
+ import { RENDER_GLOBAL_MIP_BIAS } from "../postprocess/taa/RENDER_GLOBAL_MIP_BIAS.js";
2
+ import { CodeChunk } from "../shader/compiler/CodeChunk.js";
3
+
4
+ /**
5
+ * Multiplier applied to screen-space UV derivatives before dividing by `view.upscale_ratio`
6
+ * to bias texture mip selection for temporal super-sampling (TAAU / NSS).
7
+ *
8
+ * @type {number}
9
+ */
10
+ export const RENDER_MIP_DERIVATIVE_BIAS = 1 / (1 - RENDER_GLOBAL_MIP_BIAS);
11
+
12
+ /**
13
+ * Shared WGSL helpers for biasing screen-space UV derivatives and mip levels according to
14
+ * the active internal resolution scale (`view.upscale_ratio = output_resolution / internal_resolution`)
15
+ * and global TAA mip bias ({@link RENDER_GLOBAL_MIP_BIAS}).
16
+ *
17
+ * When rendering at reduced internal resolution (`upscale_ratio > 1.0`), raw screen-space
18
+ * derivatives (`dpdx` / `dpdy` or finite differences across internal pixels) measure the
19
+ * coarser internal pixel footprint rather than the final output pixel footprint reconstructed
20
+ * by temporal upscaling. Scaling derivatives by `view_uv_derivative_bias(view.upscale_ratio)`
21
+ * ensures mip selection and anisotropic filtering match the target output resolution.
22
+ */
23
+ export const chunk_view_mip_bias = CodeChunk.from(
24
+ //language=WGSL
25
+ `
26
+ const RENDER_MIP_DERIVATIVE_BIAS: f32 = ${RENDER_MIP_DERIVATIVE_BIAS.toFixed(8)};
27
+ const RENDER_GLOBAL_MIP_BIAS: f32 = ${RENDER_GLOBAL_MIP_BIAS.toFixed(8)};
28
+
29
+ /**
30
+ * Per-axis multiplier for screen-space UV gradients (\`ddx\` by \`.x\`, \`ddy\` by \`.y\`)
31
+ * that accounts for both temporal upscaling (\`upscale_ratio\`) and global TAA mip bias.
32
+ */
33
+ fn view_uv_derivative_bias(upscale_ratio: vec2<f32>) -> vec2<f32> {
34
+ return vec2<f32>(RENDER_MIP_DERIVATIVE_BIAS) / upscale_ratio;
35
+ }
36
+
37
+ /**
38
+ * Scalar LOD bias (in mip levels) corresponding to \`upscale_ratio\` and global TAA mip bias.
39
+ */
40
+ fn view_mip_bias(upscale_ratio: vec2<f32>) -> f32 {
41
+ return -log2(max(upscale_ratio.x, upscale_ratio.y)) + RENDER_GLOBAL_MIP_BIAS;
42
+ }
43
+ `
44
+ );
@@ -2975,7 +2975,7 @@ function inferBuiltinReturnType(name, args) {
2975
2975
  // the two values; the third argument is the condition
2976
2976
  return commonArgumentType(args.slice(0, 2));
2977
2977
  }
2978
- if (name === 'textureLoad' || name === 'textureSampleLevel' || name === 'textureSample' || name === 'textureSampleGrad') {
2978
+ if (name === 'textureLoad' || name === 'textureSampleLevel' || name === 'textureSample' || name === 'textureSampleBias' || name === 'textureSampleGrad') {
2979
2979
  return { kind: 'vec', size: 4, scalar: 'f32' };
2980
2980
  }
2981
2981
  // Both gathers return the four texels of a 2x2 footprint. Saying so here matters more than
@@ -1 +1 @@
1
- {"version":3,"file":"WGSLLanguageCore.d.ts","sourceRoot":"","sources":["../../../../../src/shade/wgsl/emulator/WGSLLanguageCore.js"],"names":[],"mappings":";IA6jDA;;;;;;;;;;;;;;OAcG;IACH,+DAmDC"}
1
+ {"version":3,"file":"WGSLLanguageCore.d.ts","sourceRoot":"","sources":["../../../../../src/shade/wgsl/emulator/WGSLLanguageCore.js"],"names":[],"mappings":";IA4oDA;;;;;;;;;;;;;;OAcG;IACH,+DAmDC"}
@@ -1067,7 +1067,8 @@ export const WGSLLanguageCore = {
1067
1067
  },
1068
1068
 
1069
1069
  /**
1070
- * `textureSampleLevel(t, s, coords, level) -> vec4<T>`
1070
+ * `textureSampleLevel(t, s, coords, level[, offset]) -> vec4<T>` and the texture_2d_array form
1071
+ * `textureSampleLevel(t, s, coords, array_index, level[, offset])`.
1071
1072
  *
1072
1073
  * Filtered sample at normalised UV coords. Honours the sampler's
1073
1074
  * address modes and `magFilter`. `coords` length matches the texture
@@ -1076,33 +1077,59 @@ export const WGSLLanguageCore = {
1076
1077
  * @param {import("./CPUBitmapData.js").CPUBitmapData} t
1077
1078
  * @param {import("../../descriptor/texture/SamplerDescriptor.js").SamplerDescriptor | null} sampler
1078
1079
  * @param {Float32Array | number[] | number} coords
1079
- * @param {number} [_level]
1080
+ * @param {number} [p3] — `level`, or `array_index` in the array forms
1081
+ * @param {number | Int32Array | number[]} [p4] — `level` in the array forms, or `offset`
1082
+ * @param {Int32Array | number[]} [p5] — `offset` in the array form
1080
1083
  * @returns {Float32Array}
1081
1084
  */
1082
- textureSampleLevel(t, sampler, coords, _level_or_index = 0, _array_level = undefined) {
1085
+ textureSampleLevel(t, sampler, coords, p3 = 0, p4 = undefined, p5 = undefined) {
1083
1086
  assert.defined(t, 'texture');
1087
+
1088
+ let array_index = undefined;
1089
+ let offset = undefined;
1090
+
1091
+ if (p5 !== undefined) {
1092
+ // (t, s, coords, array_index, level, offset)
1093
+ array_index = p3;
1094
+ offset = p5;
1095
+ } else if (p4 === undefined) {
1096
+ // (t, s, coords, level)
1097
+ } else if (typeof p4 === 'number') {
1098
+ // (t, s, coords, array_index, level)
1099
+ array_index = p3;
1100
+ } else {
1101
+ // (t, s, coords, level, offset)
1102
+ offset = p4;
1103
+ }
1104
+
1084
1105
  const dim = t.dimensionality;
1085
1106
  // Convert UV (normalised) to texel-space coords expected by
1086
1107
  // cpu_texture_sample. coords for a 1D texture is a scalar in WGSL.
1087
1108
  const u = dim >= 1 ? (typeof coords === 'number' ? coords : coords[0]) : 0;
1088
1109
  const v = dim >= 2 ? coords[1] : 0;
1089
- const tx = u * t.size[0];
1090
- const ty = v * t.size[1];
1110
+ const ox = offset !== undefined ? (offset[0] | 0) : 0;
1111
+ const oy = offset !== undefined && offset.length >= 2 ? (offset[1] | 0) : 0;
1112
+ const tx = u * t.size[0] + ox;
1113
+ const ty = v * t.size[1] + oy;
1091
1114
  /**
1092
1115
  * @type {number[]}
1093
1116
  */
1094
1117
  let texel_coord;
1095
- if (_array_level !== undefined) {
1118
+ if (array_index !== undefined) {
1096
1119
  /*
1097
- Five arguments is the texture_2d_array form — (t, s, uv, array_index, level) — where the
1098
- fourth argument selects a slice. A slice's texel-space centre sits at index + 0.5, which
1099
- lands the linear filter's z weight on exactly that slice: filtering happens in xy and
1100
- never crosses into a neighbour.
1120
+ The texture_2d_array form — (t, s, uv, array_index, level[, offset]) — where the
1121
+ fourth argument selects a slice. The array index is clamped to the layer count rather
1122
+ than wrapped by addressModeW, and a slice's texel-space centre sits at index + 0.5,
1123
+ which lands the linear filter's z weight on exactly that slice: filtering happens in
1124
+ xy and never crosses into a neighbour.
1101
1125
  */
1102
- texel_coord = [tx, ty, (_level_or_index | 0) + 0.5];
1126
+ const d = t.size[2];
1127
+ const z = d <= 0 ? 0 : Math.min(Math.max(array_index | 0, 0), d - 1);
1128
+ texel_coord = [tx, ty, z + 0.5];
1103
1129
  } else {
1104
1130
  const w = dim >= 3 ? coords[2] : 0;
1105
- const tz = w * t.size[2];
1131
+ const oz = offset !== undefined && offset.length >= 3 ? (offset[2] | 0) : 0;
1132
+ const tz = w * t.size[2] + oz;
1106
1133
  texel_coord = dim === 1 ? [tx] : (dim === 2 ? [tx, ty] : [tx, ty, tz]);
1107
1134
  }
1108
1135
  const result = new Float32Array(4);
@@ -1111,8 +1138,8 @@ export const WGSLLanguageCore = {
1111
1138
  },
1112
1139
 
1113
1140
  /**
1114
- * `textureSample(t, s, coords) -> vec4<T>` and the texture_2d_array form
1115
- * `textureSample(t, s, coords, array_index)`.
1141
+ * `textureSample(t, s, coords[, offset]) -> vec4<T>` and the texture_2d_array form
1142
+ * `textureSample(t, s, coords, array_index[, offset])`.
1116
1143
  *
1117
1144
  * Implicit-LOD sample. Without mipmaps, this is just
1118
1145
  * `textureSampleLevel` at level 0.
@@ -1120,37 +1147,89 @@ export const WGSLLanguageCore = {
1120
1147
  * @param {import("./CPUBitmapData.js").CPUBitmapData} t
1121
1148
  * @param {import("../../descriptor/texture/SamplerDescriptor.js").SamplerDescriptor | null} sampler
1122
1149
  * @param {Float32Array | number[] | number} coords
1123
- * @param {number} [array_index]
1150
+ * @param {number | Int32Array | number[]} [p3] — `array_index`, or `offset`
1151
+ * @param {Int32Array | number[]} [p4] — `offset` in the array form
1124
1152
  * @returns {Float32Array}
1125
1153
  */
1126
- textureSample(t, sampler, coords, array_index = undefined) {
1127
- if (array_index !== undefined) {
1128
- return WGSLLanguageCore.textureSampleLevel(t, sampler, coords, array_index, 0);
1154
+ textureSample(t, sampler, coords, p3 = undefined, p4 = undefined) {
1155
+ if (p4 !== undefined) {
1156
+ return WGSLLanguageCore.textureSampleLevel(t, sampler, coords, p3, 0, p4);
1157
+ }
1158
+
1159
+ if (typeof p3 === 'number') {
1160
+ return WGSLLanguageCore.textureSampleLevel(t, sampler, coords, p3, 0);
1161
+ }
1162
+
1163
+ if (p3 !== undefined) {
1164
+ return WGSLLanguageCore.textureSampleLevel(t, sampler, coords, 0, p3);
1129
1165
  }
1130
1166
 
1131
1167
  return WGSLLanguageCore.textureSampleLevel(t, sampler, coords, 0);
1132
1168
  },
1133
1169
 
1134
1170
  /**
1135
- * `textureSampleGrad(t, s, coords, ddx, ddy) -> vec4<T>` and the texture_2d_array form
1136
- * `textureSampleGrad(t, s, coords, array_index, ddx, ddy)`.
1171
+ * `textureSampleBias(t, s, coords, bias[, offset]) -> vec4<T>` and the texture_2d_array form
1172
+ * `textureSampleBias(t, s, coords, array_index, bias[, offset])`.
1137
1173
  *
1138
- * Explicit-gradient sample. Mipmaps are not modelled (see the header), so the gradients only
1139
- * disambiguate which call shape this is: six arguments carry an array index, five do not.
1174
+ * Implicit-LOD sample with a mip bias. Mipmaps are not modelled (see the header), so the bias
1175
+ * is ignored and this routes through `textureSampleLevel` at level 0. Overloads are told apart
1176
+ * by argument shape: a scalar fifth argument is the array form's `bias` (making the fourth the
1177
+ * `array_index`), while a vector is the const `offset`.
1140
1178
  *
1141
1179
  * @param {import("./CPUBitmapData.js").CPUBitmapData} t
1142
1180
  * @param {import("../../descriptor/texture/SamplerDescriptor.js").SamplerDescriptor | null} sampler
1143
1181
  * @param {Float32Array | number[] | number} coords
1144
- * @param {Float32Array | number[] | number} p3 gradient, or the array index
1145
- * @param {Float32Array | number[]} p4 gradient
1146
- * @param {Float32Array | number[]} [p5] gradient, in the array form
1182
+ * @param {number} p3 — `bias`, or `array_index` in the array forms
1183
+ * @param {number | Int32Array | number[]} [p4] — `bias` in the array forms, or `offset`
1184
+ * @param {Int32Array | number[]} [p5] — `offset` in the array form
1147
1185
  * @returns {Float32Array}
1148
1186
  */
1149
- textureSampleGrad(t, sampler, coords, p3, p4, p5 = undefined) {
1187
+ textureSampleBias(t, sampler, coords, p3, p4 = undefined, p5 = undefined) {
1150
1188
  if (p5 !== undefined) {
1189
+ return WGSLLanguageCore.textureSampleLevel(t, sampler, coords, p3, 0, p5);
1190
+ }
1191
+
1192
+ if (p4 === undefined) {
1193
+ return WGSLLanguageCore.textureSampleLevel(t, sampler, coords, 0);
1194
+ }
1195
+
1196
+ if (typeof p4 === 'number') {
1151
1197
  return WGSLLanguageCore.textureSampleLevel(t, sampler, coords, p3, 0);
1152
1198
  }
1153
1199
 
1200
+ return WGSLLanguageCore.textureSampleLevel(t, sampler, coords, 0, p4);
1201
+ },
1202
+
1203
+ /**
1204
+ * `textureSampleGrad(t, s, coords, ddx, ddy[, offset]) -> vec4<T>` and the texture_2d_array form
1205
+ * `textureSampleGrad(t, s, coords, array_index, ddx, ddy[, offset])`.
1206
+ *
1207
+ * Explicit-gradient sample. Mipmaps are not modelled (see the header), so the gradients are
1208
+ * ignored and this routes through `textureSampleLevel` at level 0. A scalar fourth argument is
1209
+ * the array form's `array_index`; a vector is `ddx`.
1210
+ *
1211
+ * @param {import("./CPUBitmapData.js").CPUBitmapData} t
1212
+ * @param {import("../../descriptor/texture/SamplerDescriptor.js").SamplerDescriptor | null} sampler
1213
+ * @param {Float32Array | number[] | number} coords
1214
+ * @param {Float32Array | number[] | number} p3 gradient `ddx`, or the `array_index`
1215
+ * @param {Float32Array | number[]} p4 gradient (`ddy`, or `ddx` in the array form)
1216
+ * @param {Float32Array | Int32Array | number[]} [p5] `ddy` in the array form, or `offset`
1217
+ * @param {Int32Array | number[]} [p6] `offset` in the array form
1218
+ * @returns {Float32Array}
1219
+ */
1220
+ textureSampleGrad(t, sampler, coords, p3, p4, p5 = undefined, p6 = undefined) {
1221
+ if (typeof p3 === 'number') {
1222
+ if (p6 !== undefined) {
1223
+ return WGSLLanguageCore.textureSampleLevel(t, sampler, coords, p3, 0, p6);
1224
+ }
1225
+
1226
+ return WGSLLanguageCore.textureSampleLevel(t, sampler, coords, p3, 0);
1227
+ }
1228
+
1229
+ if (p5 !== undefined) {
1230
+ return WGSLLanguageCore.textureSampleLevel(t, sampler, coords, 0, p5);
1231
+ }
1232
+
1154
1233
  return WGSLLanguageCore.textureSampleLevel(t, sampler, coords, 0);
1155
1234
  },
1156
1235