@woosh/meep-engine 3.11.1 → 3.11.3

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 (225) hide show
  1. package/build/bundle-worker-terrain.js +1 -1
  2. package/package.json +1 -1
  3. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
  4. package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +294 -290
  5. package/src/engine/graphics3/ParticipatingMedia.d.ts +111 -0
  6. package/src/engine/graphics3/ParticipatingMedia.d.ts.map +1 -0
  7. package/src/engine/graphics3/ParticipatingMedia.js +203 -0
  8. package/src/engine/graphics3/ParticipatingMediaSerializationAdapter.d.ts +34 -0
  9. package/src/engine/graphics3/ParticipatingMediaSerializationAdapter.d.ts.map +1 -0
  10. package/src/engine/graphics3/ParticipatingMediaSerializationAdapter.js +73 -0
  11. package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts +87 -0
  12. package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts.map +1 -0
  13. package/src/engine/graphics3/ParticipatingMediaSystem3.js +184 -0
  14. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  15. package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.d.ts +16 -2
  16. package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.d.ts.map +1 -1
  17. package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.js +28 -4
  18. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts +1 -1
  19. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts.map +1 -1
  20. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +5 -2
  21. package/src/shade/device/IMMEDIATE_DATA_PLAN_2026_08_28.md +564 -451
  22. package/src/shade/device/ShadeGPUCommandContext.d.ts +18 -2
  23. package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
  24. package/src/shade/device/ShadeGPUCommandContext.js +994 -940
  25. package/src/shade/device/immediate_data_supported.d.ts +33 -0
  26. package/src/shade/device/immediate_data_supported.d.ts.map +1 -0
  27. package/src/shade/device/immediate_data_supported.js +53 -0
  28. package/src/shade/device/mock/SoftwareGPUCommandEncoder.d.ts +18 -0
  29. package/src/shade/device/mock/SoftwareGPUCommandEncoder.d.ts.map +1 -1
  30. package/src/shade/device/mock/SoftwareGPUCommandEncoder.js +24 -0
  31. package/src/shade/device/mock/SoftwareGPUComputePassEncoder.d.ts +7 -0
  32. package/src/shade/device/mock/SoftwareGPUComputePassEncoder.d.ts.map +1 -1
  33. package/src/shade/device/mock/SoftwareGPUComputePassEncoder.js +49 -1
  34. package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
  35. package/src/shade/device/mock/SoftwareGPUDevice.js +20 -2
  36. package/src/shade/device/mock/SoftwareGPUImmediateData.d.ts +65 -0
  37. package/src/shade/device/mock/SoftwareGPUImmediateData.d.ts.map +1 -0
  38. package/src/shade/device/mock/SoftwareGPUImmediateData.js +160 -0
  39. package/src/shade/device/mock/SoftwareGPURenderPassEncoder.d.ts +7 -0
  40. package/src/shade/device/mock/SoftwareGPURenderPassEncoder.d.ts.map +1 -1
  41. package/src/shade/device/mock/SoftwareGPURenderPassEncoder.js +50 -0
  42. package/src/shade/device/mock/pipeline_immediate_size.d.ts +11 -0
  43. package/src/shade/device/mock/pipeline_immediate_size.d.ts.map +1 -0
  44. package/src/shade/device/mock/pipeline_immediate_size.js +18 -0
  45. package/src/shade/device/pipeline/PipelineLayoutManager.d.ts.map +1 -1
  46. package/src/shade/device/pipeline/PipelineLayoutManager.js +1 -0
  47. package/src/shade/playground/volumetrics_froxel/README.md +104 -1
  48. package/src/shade/playground/volumetrics_froxel/index.html +20 -1
  49. package/src/shade/playground/volumetrics_froxel/main.d.ts.map +1 -1
  50. package/src/shade/playground/volumetrics_froxel/main.js +298 -0
  51. package/src/shade/playground/volumetrics_froxel/measure.d.ts +119 -0
  52. package/src/shade/playground/volumetrics_froxel/measure.d.ts.map +1 -0
  53. package/src/shade/playground/volumetrics_froxel/measure.js +559 -0
  54. package/src/shade/renderer/GraphicsContext.d.ts +9 -2
  55. package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
  56. package/src/shade/renderer/GraphicsContext.js +13 -1
  57. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  58. package/src/shade/renderer/Renderer.js +22 -18
  59. package/src/shade/renderer/atmosphere/GPUSky.d.ts.map +1 -1
  60. package/src/shade/renderer/atmosphere/GPUSky.js +145 -142
  61. package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.d.ts +34 -0
  62. package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.d.ts.map +1 -0
  63. package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.js +36 -0
  64. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.d.ts +20 -0
  65. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.d.ts.map +1 -0
  66. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.js +25 -0
  67. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts +14 -1
  68. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts.map +1 -1
  69. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.js +163 -177
  70. package/src/shade/renderer/atmosphere/chunk_multiscatter_sample_direction.d.ts +20 -0
  71. package/src/shade/renderer/atmosphere/chunk_multiscatter_sample_direction.d.ts.map +1 -0
  72. package/src/shade/renderer/atmosphere/chunk_multiscatter_sample_direction.js +46 -0
  73. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.d.ts +11 -1
  74. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.d.ts.map +1 -1
  75. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.js +57 -27
  76. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.d.ts +19 -1
  77. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.d.ts.map +1 -1
  78. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.js +69 -33
  79. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.d.ts +13 -0
  80. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.d.ts.map +1 -1
  81. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.js +35 -35
  82. package/src/shade/renderer/atmosphere/chunk_sky_lut_params.d.ts +13 -0
  83. package/src/shade/renderer/atmosphere/chunk_sky_lut_params.d.ts.map +1 -0
  84. package/src/shade/renderer/atmosphere/chunk_sky_lut_params.js +38 -0
  85. package/src/shade/renderer/atmosphere/chunk_sky_lut_texel_to_unit.d.ts +17 -0
  86. package/src/shade/renderer/atmosphere/chunk_sky_lut_texel_to_unit.d.ts.map +1 -0
  87. package/src/shade/renderer/atmosphere/chunk_sky_lut_texel_to_unit.js +29 -0
  88. package/src/shade/renderer/atmosphere/chunk_sky_lut_uv.d.ts +21 -0
  89. package/src/shade/renderer/atmosphere/chunk_sky_lut_uv.d.ts.map +1 -0
  90. package/src/shade/renderer/atmosphere/chunk_sky_lut_uv.js +42 -0
  91. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts +2 -2
  92. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts.map +1 -1
  93. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.js +165 -84
  94. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.d.ts.map +1 -1
  95. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.js +215 -204
  96. package/src/shade/renderer/atmosphere/shader_transmittance_lut.d.ts.map +1 -1
  97. package/src/shade/renderer/atmosphere/shader_transmittance_lut.js +79 -67
  98. package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts.map +1 -1
  99. package/src/shade/renderer/light/cluster/graph_assign_clsuters.js +6 -2
  100. package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
  101. package/src/shade/renderer/postprocess/gtao/GTAO.js +4 -0
  102. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  103. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  104. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +341 -345
  105. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts +0 -2
  106. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts.map +1 -1
  107. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +58 -57
  108. package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.d.ts.map +1 -1
  109. package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.js +7 -3
  110. package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.d.ts.map +1 -1
  111. package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.js +77 -81
  112. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts.map +1 -1
  113. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +5 -1
  114. package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
  115. package/src/shade/renderer/shader/ComputeShader.js +6 -2
  116. package/src/shade/renderer/shader/ImageShader.d.ts.map +1 -1
  117. package/src/shade/renderer/shader/ImageShader.js +4 -1
  118. package/src/shade/renderer/shader/ShaderDescriptor.d.ts.map +1 -1
  119. package/src/shade/renderer/shader/ShaderDescriptor.js +26 -0
  120. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.d.ts +18 -0
  121. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.d.ts.map +1 -0
  122. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.js +32 -0
  123. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_CENTER_DECLARATION.d.ts +7 -0
  124. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_CENTER_DECLARATION.d.ts.map +1 -1
  125. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_CENTER_DECLARATION.js +17 -6
  126. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.d.ts +21 -0
  127. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.d.ts.map +1 -0
  128. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.js +69 -0
  129. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_contains_aabb3.d.ts +9 -0
  130. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_contains_aabb3.d.ts.map +1 -0
  131. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_contains_aabb3.js +22 -0
  132. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_from_transformed_corners.d.ts +16 -0
  133. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_from_transformed_corners.d.ts.map +1 -0
  134. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_from_transformed_corners.js +41 -0
  135. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_m4.d.ts +11 -0
  136. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_m4.d.ts.map +1 -1
  137. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_m4.js +15 -19
  138. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_plane_matrix.d.ts +23 -0
  139. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_plane_matrix.d.ts.map +1 -0
  140. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_plane_matrix.js +44 -0
  141. package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_decode.d.ts.map +1 -1
  142. package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_decode.js +1 -4
  143. package/src/shade/renderer/shader/compiler/CodeChunk.d.ts +7 -1
  144. package/src/shade/renderer/shader/compiler/CodeChunk.d.ts.map +1 -1
  145. package/src/shade/renderer/shader/compiler/CodeChunk.js +37 -2
  146. package/src/shade/renderer/shader/graph/compute/compute_binding_read_names.d.ts.map +1 -1
  147. package/src/shade/renderer/shader/graph/compute/compute_binding_read_names.js +6 -0
  148. package/src/shade/renderer/shader/graph/compute/graph_compute_indirect_pass.js +1 -1
  149. package/src/shade/renderer/shader/graph/compute/graph_compute_pass.js +1 -1
  150. package/src/shade/renderer/shader/graph/graph_image_pass.js +1 -1
  151. package/src/shade/renderer/shader/graph/graph_prepare_bindings.d.ts.map +1 -1
  152. package/src/shade/renderer/shader/graph/graph_prepare_bindings.js +7 -0
  153. package/src/shade/renderer/shader/graph/graph_prepare_pass_input_data.d.ts +3 -1
  154. package/src/shade/renderer/shader/graph/graph_prepare_pass_input_data.d.ts.map +1 -1
  155. package/src/shade/renderer/shader/graph/graph_prepare_pass_input_data.js +12 -1
  156. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts.map +1 -1
  157. package/src/shade/renderer/shader/pass/RenderPassDescriptor.js +1 -0
  158. package/src/shade/renderer/shader/resource/IMMEDIATE_DATA.d.ts +21 -0
  159. package/src/shade/renderer/shader/resource/IMMEDIATE_DATA.d.ts.map +1 -0
  160. package/src/shade/renderer/shader/resource/IMMEDIATE_DATA.js +21 -0
  161. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts +59 -1
  162. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
  163. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +195 -2
  164. package/src/shade/renderer/shader/type/type_has_arrays.d.ts +14 -0
  165. package/src/shade/renderer/shader/type/type_has_arrays.d.ts.map +1 -0
  166. package/src/shade/renderer/shader/type/type_has_arrays.js +33 -0
  167. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_point2.d.ts +14 -13
  168. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_point2.d.ts.map +1 -1
  169. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_point2.js +133 -129
  170. package/src/shade/renderer/view/GPUViewSkyContext.d.ts.map +1 -1
  171. package/src/shade/renderer/view/GPUViewSkyContext.js +169 -173
  172. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
  173. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +480 -315
  174. package/src/shade/renderer/volumetrics/NOTES.md +887 -8
  175. package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts +5 -0
  176. package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts.map +1 -1
  177. package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.js +21 -2
  178. package/src/shade/renderer/volumetrics/SceneVolumetrics.d.ts +26 -0
  179. package/src/shade/renderer/volumetrics/SceneVolumetrics.d.ts.map +1 -1
  180. package/src/shade/renderer/volumetrics/SceneVolumetrics.js +64 -21
  181. package/src/shade/renderer/volumetrics/VOLUMETRICS_METADATA_STRUCT.d.ts.map +1 -1
  182. package/src/shade/renderer/volumetrics/VOLUMETRICS_METADATA_STRUCT.js +84 -28
  183. package/src/shade/renderer/volumetrics/VOLUMETRICS_SUN_SHADOW_RESOLUTION.d.ts +98 -0
  184. package/src/shade/renderer/volumetrics/VOLUMETRICS_SUN_SHADOW_RESOLUTION.d.ts.map +1 -0
  185. package/src/shade/renderer/volumetrics/VOLUMETRICS_SUN_SHADOW_RESOLUTION.js +111 -0
  186. package/src/shade/renderer/volumetrics/build_volumetrics_sun_shadow_transform.d.ts +84 -0
  187. package/src/shade/renderer/volumetrics/build_volumetrics_sun_shadow_transform.d.ts.map +1 -0
  188. package/src/shade/renderer/volumetrics/build_volumetrics_sun_shadow_transform.js +252 -0
  189. package/src/shade/renderer/volumetrics/chunk_integrate_optical_depth.js +75 -75
  190. package/src/shade/renderer/volumetrics/chunk_volumetrics_local_light_shadow.d.ts +43 -0
  191. package/src/shade/renderer/volumetrics/chunk_volumetrics_local_light_shadow.d.ts.map +1 -0
  192. package/src/shade/renderer/volumetrics/chunk_volumetrics_local_light_shadow.js +145 -0
  193. package/src/shade/renderer/volumetrics/chunk_volumetrics_sample_froxel_extinction.d.ts +20 -0
  194. package/src/shade/renderer/volumetrics/chunk_volumetrics_sample_froxel_extinction.d.ts.map +1 -0
  195. package/src/shade/renderer/volumetrics/chunk_volumetrics_sample_froxel_extinction.js +48 -0
  196. package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_optical_depth.d.ts +38 -0
  197. package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_optical_depth.d.ts.map +1 -0
  198. package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_optical_depth.js +130 -0
  199. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +18 -3
  200. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  201. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +193 -70
  202. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts +16 -0
  203. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
  204. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +83 -15
  205. package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.d.ts.map +1 -1
  206. package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.js +29 -18
  207. package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.js +260 -260
  208. package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.d.ts +58 -0
  209. package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.d.ts.map +1 -0
  210. package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.js +290 -0
  211. package/src/shade/wgsl/emulator/CPUBitmapData.d.ts +25 -0
  212. package/src/shade/wgsl/emulator/CPUBitmapData.d.ts.map +1 -1
  213. package/src/shade/wgsl/emulator/CPUBitmapData.js +33 -0
  214. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +2228 -2215
  215. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  216. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +210 -2
  217. package/src/shade/wgsl/emulator/cpu_texture_gather.d.ts +69 -0
  218. package/src/shade/wgsl/emulator/cpu_texture_gather.d.ts.map +1 -0
  219. package/src/shade/wgsl/emulator/cpu_texture_gather.js +148 -0
  220. package/src/shade/wgsl/emulator/cpu_texture_sample.d.ts +16 -0
  221. package/src/shade/wgsl/emulator/cpu_texture_sample.d.ts.map +1 -1
  222. package/src/shade/wgsl/emulator/cpu_texture_sample.js +176 -172
  223. package/src/shade/renderer/volumetrics/VOLUMETRICS_WORKGROUP_RESOLUTION.d.ts +0 -2
  224. package/src/shade/renderer/volumetrics/VOLUMETRICS_WORKGROUP_RESOLUTION.d.ts.map +0 -1
  225. package/src/shade/renderer/volumetrics/VOLUMETRICS_WORKGROUP_RESOLUTION.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"GraphicsContext.d.ts","sourceRoot":"","sources":["../../../../src/shade/renderer/GraphicsContext.js"],"names":[],"mappings":"AAwBA;IAoJI,yBA8BC;IAjLD;;OAEG;IACH,YAFU,kBAAkB,CAEjB;IAEX;;OAEG;IACH,WAFU,kBAAkB,CAElB;IAOV;;OAEG;IACH,UAFU,iBAAiB,CAElB;IAET;;;OAGG;IACH,qDAOC;IAOD;;;OAGG;IACH,6CAEC;IAED;;OAEG;IACH,kBAFU,qBAAqB,CAEd;IAEjB;;OAEG;IACH,kBAFU,qBAAqB,CAEd;IAEjB;;OAEG;IACH,mBAFU,sBAAsB,CAEd;IAGlB;;OAEG;IACH,gBAFU,oBAAoB,CAEf;IAEf;;OAEG;IACH,UAFU,cAAc,CAEf;IAET;;;;OAIG;IACH,kBAFU,qBAAqB,CAEd;IAEjB;;OAEG;IACH,aAFU,gBAAgB,CAEd;IAQZ;;;OAGG;IACH,uBAFU,kBAAkB,CAEN;IAEtB;;;;OAIG;IACH,yBAFU,wBAAwB,CAEV;IAExB;;;OAGG;IACH,0BAFU,yBAAyB,CAEV;IAEzB;;;OAGG;IACH,oBAFU,mBAAmB,CAEV;IAUnB;;;OAGG;IACH,8BAEC;IAED,uBAMC;IAED;;;OAGG;IACH,wBAEC;IAkCD;;;;;OAKG;IACH,gGAFW,oBAAoB,EAAE,QAwDhC;IAED;;;;OAIG;IACH,mDAFa,gBAAgB,CAI5B;IAED;;OAEG;IACH,+BAcC;IAED,4BAEC;IAED,eAmBC;IAED,gBAcC;IAGL;;;OAGG;IACH,4BAFU,OAAO,CAE0B;;CAN1C;mCAlUkC,kCAAkC;mCAGlC,kCAAkC;kCADnC,wBAAwB;2CAEf,mDAAmD;oCAH1D,2CAA2C;sCAXzC,6CAA6C;sCAC7C,6CAA6C;uCAF5C,8CAA8C;qCAIhD,0CAA0C;+BAchD,6BAA6B;sCACtB,4CAA4C;iCAbjD,+BAA+B;mCAC7B,gCAAgC;yCAC1B,sCAAsC;0CAErC,uCAAuC;oCAO7C,kCAAkC;iCARtB,8BAA8B"}
1
+ {"version":3,"file":"GraphicsContext.d.ts","sourceRoot":"","sources":["../../../../src/shade/renderer/GraphicsContext.js"],"names":[],"mappings":"AAwBA;IAoJI,yBA8BC;IAjLD;;OAEG;IACH,YAFU,kBAAkB,CAEjB;IAEX;;OAEG;IACH,WAFU,kBAAkB,CAElB;IAOV;;OAEG;IACH,UAFU,iBAAiB,CAElB;IAET;;;OAGG;IACH,qDAOC;IAOD;;;OAGG;IACH,6CAEC;IAED;;OAEG;IACH,kBAFU,qBAAqB,CAEd;IAEjB;;OAEG;IACH,kBAFU,qBAAqB,CAEd;IAEjB;;OAEG;IACH,mBAFU,sBAAsB,CAEd;IAGlB;;OAEG;IACH,gBAFU,oBAAoB,CAEf;IAEf;;OAEG;IACH,UAFU,cAAc,CAEf;IAET;;;;OAIG;IACH,kBAFU,qBAAqB,CAEd;IAEjB;;OAEG;IACH,aAFU,gBAAgB,CAEd;IAQZ;;;OAGG;IACH,uBAFU,kBAAkB,CAEN;IAEtB;;;;OAIG;IACH,yBAFU,wBAAwB,CAEV;IAExB;;;OAGG;IACH,0BAFU,yBAAyB,CAEV;IAEzB;;;OAGG;IACH,oBAFU,mBAAmB,CAEV;IAUnB;;;OAGG;IACH,8BAEC;IAED,uBAMC;IAED;;;OAGG;IACH,wBAEC;IAkCD;;;;;;;;OAQG;IACH,gGALW,oBAAoB,EAAE,cACtB;QAAC,MAAM,eAAe;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,QAmE9D;IAED;;;;OAIG;IACH,mDAFa,gBAAgB,CAI5B;IAED;;OAEG;IACH,+BAcC;IAED,4BAEC;IAED,eAmBC;IAED,gBAcC;IAGL;;;OAGG;IACH,4BAFU,OAAO,CAE0B;;CAN1C;mCA9UkC,kCAAkC;mCAGlC,kCAAkC;kCADnC,wBAAwB;2CAEf,mDAAmD;oCAH1D,2CAA2C;sCAXzC,6CAA6C;sCAC7C,6CAA6C;uCAF5C,8CAA8C;qCAIhD,0CAA0C;+BAchD,6BAA6B;sCACtB,4CAA4C;iCAbjD,+BAA+B;mCAC7B,gCAAgC;yCAC1B,sCAAsC;0CAErC,uCAAuC;oCAO7C,kCAAkC;iCARtB,8BAA8B"}
@@ -207,14 +207,26 @@ export class GraphicsContext {
207
207
  * @param {GPUBindingCommandsMixin} pass
208
208
  * @param {PipelineDescriptorBase} pipeline
209
209
  * @param {GPUBindingResource[][]} [bindings]
210
+ * @param {{buffer: BinaryBuffer, offset: number, size: number}} [immediate] bytes to hand the
211
+ * pass through `setImmediates`, when the pipeline declares immediate data. Optional so
212
+ * that every caller predating immediates keeps working unchanged.
210
213
  */
211
214
  setPipelineBindings(
212
215
  pass,
213
216
  pipeline,
214
- bindings
217
+ bindings,
218
+ immediate
215
219
  ) {
216
220
  assert.isArray(bindings, 'bindings');
217
221
 
222
+ if (immediate !== undefined) {
223
+ // `raw_bytes` is read here rather than cached by the caller: BinaryBuffer rebinds it
224
+ // when the backing store grows, so a reference taken earlier can be stale. It is also a
225
+ // Uint8Array, for which `setImmediates` counts offset and size in elements — and its
226
+ // elements are bytes, so the range passes through unchanged.
227
+ pass.setImmediates(0, immediate.buffer.raw_bytes, immediate.offset, immediate.size);
228
+ }
229
+
218
230
  const bind_group_descriptors = pipeline.layout.bindGroupLayouts;
219
231
 
220
232
  const bind_group_count = bindings.length;
@@ -1 +1 @@
1
- {"version":3,"file":"Renderer.d.ts","sourceRoot":"","sources":["../../../../src/shade/renderer/Renderer.js"],"names":[],"mappings":"AA4FA;IAOI,0BAEC;IAED;;OAEG;IACH,0BAAQ;IAER;;;;;;OAMG;IACH,kDAEC;IAED;;OAEG;IACH,kBAAO;IAYP;;;OAGG;IACH,2BAEC;IAaD,0CAGC;IAED,uCAEC;IAED;;;;OAIG;IACH,wBAFU,yBAAyB,CAEoB;IAEvD,6BAA4B;IAC5B,8BAA4B;IAC5B;;;;OAIG;IACH,mCAAkC;IAClC;;;;;;;OAOG;IACH,mCAFU,OAAO,CAEyB;IAC1C,+BAA6B;IAC7B,4CAA0C;IAkB1C,uCAKC;IArBD;;;;;;;;;;OAUG;IACH,oCAGC;IASD;;;;;;;OAOG;IACH,0BAFU,OAAO,CAEe;IAQhC;;;;;OAKG;IACH,sCAOC;IAjBD,mCAEC;IAiBD;;;;;;;;;OASG;IACH,6BAFU,OAAO,CAEmB;IAWpC;;;;;OAKG;IACH,8BAA+C;IAE/C;;;;;;;;OAQG;IACH,6BAFU,OAAO,CAEmB;IAEpC;;;;;;;;;;;;;;OAcG;IACH,8BAFU,OAAO,CAEoB;IAErC;;;;;;;;;;OAUG;IACH,qBAFU,OAAO,CAEW;IAU5B;;;;;OAKG;IACH,wBAA0C;IAE1C;;;;;;;;OAQG;IACH,eAFU,UAAU,GAAC,QAAQ,CAEF;IAU3B;;;;OAIG;IACH,gCAAwD;IAExD;;;;;;;;;;;;OAYG;IACH,gBAFU,OAAO,CAEK;IAEtB;;;OAGG;IACH,4BAFU,OAAO,CAEiB;IAKlC;;;OAGG;IACH,yBAEC;IAOD;;;OAGG;IACH,gCAEC;IAcD;;;;;;;;;OASG;IACH,qBAA+B;IAE/B,wBAA+B;IAE/B;;;OAGG;IACH,kBAA4B;IAiB5B;;;OAGG;IACH,2CAeC;IAED;;;OAGG;IACH,wCAEC;IA0BD;;;OAGG;IACH,iCAEC;IAED;;;;OAIG;IACH,2BAEC;IAQD;;;OAGG;IACH,+CAIC;IAED;;;OAGG;IACH,gDAIC;IAwCD;;;OAGG;IACH,6BAcC;IA1BD;;;OAGG;IACH,0BAEC;IA4BD;;;;;;;;;;;;;;;;;;;OAmBG;IACH,iBAFU,oBAAkB,IAAI,CAET;IAEvB;;OAEG;IACH;;;;;;;;;;;;;;OAcG;IACH,2DAEC;IAED;;;;;OAKG;IACH,8CAFa,OAAO,CAInB;IAED;;;OAGG;IACH,uBAHW,UAAU,GACR,MAAM,CAIlB;IAGD,sCAIC;IAeD;;;;OAIG;IACH,iCAFY,gBAAgB,CAW3B;IAED;;;OAGG;IACH,6BAYC;IAED;;;;OAIG;IACH,wCAFa,2BAA2B,CAcvC;IAGD;;;OAGG;IACH,+BAuBC;IAmMD;;;;OAIG;IACH,0BAEC;IAgBD;;;;;;OAMG;IACH,cAFU,iBAAiB,CAEU;IAErC;;;;;;OAMG;IACH,eAgBC;IAiFD;;;;;OAKG;IACH,+EA0NC;IAED;;OAEG;IACH,gBAGC;IAQD,4BAwBC;IAqID;;;;;OAKG;IACH,UAHW,MAAM,KACN,MAAM,QAgBhB;IAoFD,0CAMC;IAED;;;;;;;;;;OAUG;IACH,qEAHW,MAAM,GACJ,OAAO,CAsBnB;IAED;;;;;;;;;;;;;;;OAeG;IACH,8EAJW,MAAM,UACN,iBAAiB,GACf,OAAO,CA62BnB;;CACJ;6BAv6E4B,yBAAyB;0CACZ,gCAAgC;2BAL/C,yCAAyC;6BACvC,4CAA4C;8BAC3C,2CAA2C;4BAc7C,uBAAuB;gCA1BnB,sBAAsB;mBAjDnC,oCAAoC;oBACnC,4BAA4B;kCAuEd,gCAAgC;2BAvCvC,2BAA2B;iCAoCrB,0CAA0C;4CAvB/B,+DAA+D;yBA7BlF,yBAAyB;kCAgDhB,wBAAwB;oBAVtC,0BAA0B;uCAJP,sDAAsD"}
1
+ {"version":3,"file":"Renderer.d.ts","sourceRoot":"","sources":["../../../../src/shade/renderer/Renderer.js"],"names":[],"mappings":"AA4FA;IAOI,0BAEC;IAED;;OAEG;IACH,0BAAQ;IAER;;;;;;OAMG;IACH,kDAEC;IAED;;OAEG;IACH,kBAAO;IAYP;;;OAGG;IACH,2BAEC;IAaD,0CAGC;IAED,uCAEC;IAED;;;;OAIG;IACH,wBAFU,yBAAyB,CAEoB;IAEvD,6BAA4B;IAC5B,8BAA4B;IAC5B;;;;OAIG;IACH,mCAAkC;IAClC;;;;;;;OAOG;IACH,mCAFU,OAAO,CAEyB;IAC1C,+BAA6B;IAC7B,4CAA0C;IAkB1C,uCAKC;IArBD;;;;;;;;;;OAUG;IACH,oCAGC;IASD;;;;;;;OAOG;IACH,0BAFU,OAAO,CAEe;IAQhC;;;;;OAKG;IACH,sCAOC;IAjBD,mCAEC;IAiBD;;;;;;;;;OASG;IACH,6BAFU,OAAO,CAEmB;IAWpC;;;;;OAKG;IACH,8BAA+C;IAE/C;;;;;;;;OAQG;IACH,6BAFU,OAAO,CAEmB;IAEpC;;;;;;;;;;;;;;OAcG;IACH,8BAFU,OAAO,CAEoB;IAErC;;;;;;;;;;OAUG;IACH,qBAFU,OAAO,CAEW;IAU5B;;;;;OAKG;IACH,wBAA0C;IAE1C;;;;;;;;OAQG;IACH,eAFU,UAAU,GAAC,QAAQ,CAEF;IAU3B;;;;OAIG;IACH,gCAAwD;IAExD;;;;;;;;;;;;OAYG;IACH,gBAFU,OAAO,CAEK;IAEtB;;;OAGG;IACH,4BAFU,OAAO,CAEiB;IAKlC;;;OAGG;IACH,yBAEC;IAOD;;;OAGG;IACH,gCAEC;IAcD;;;;;;;;;OASG;IACH,qBAA+B;IAE/B,wBAA+B;IAE/B;;;OAGG;IACH,kBAA4B;IAiB5B;;;OAGG;IACH,2CAeC;IAED;;;OAGG;IACH,wCAEC;IA0BD;;;OAGG;IACH,iCAEC;IAED;;;;OAIG;IACH,2BAEC;IAQD;;;OAGG;IACH,+CAIC;IAED;;;OAGG;IACH,gDAIC;IAwCD;;;OAGG;IACH,6BAcC;IA1BD;;;OAGG;IACH,0BAEC;IA4BD;;;;;;;;;;;;;;;;;;;OAmBG;IACH,iBAFU,oBAAkB,IAAI,CAET;IAEvB;;OAEG;IACH;;;;;;;;;;;;;;OAcG;IACH,2DAEC;IAED;;;;;OAKG;IACH,8CAFa,OAAO,CAInB;IAED;;;OAGG;IACH,uBAHW,UAAU,GACR,MAAM,CAIlB;IAGD,sCAIC;IAeD;;;;OAIG;IACH,iCAFY,gBAAgB,CAW3B;IAED;;;OAGG;IACH,6BAYC;IAED;;;;OAIG;IACH,wCAFa,2BAA2B,CAcvC;IAGD;;;OAGG;IACH,+BAuBC;IAmMD;;;;OAIG;IACH,0BAEC;IAgBD;;;;;;OAMG;IACH,cAFU,iBAAiB,CAEU;IAErC;;;;;;OAMG;IACH,eAgBC;IAiFD;;;;;OAKG;IACH,+EA0NC;IAED;;OAEG;IACH,gBAGC;IAQD,4BAwBC;IAqID;;;;;OAKG;IACH,UAHW,MAAM,KACN,MAAM,QAgBhB;IAoFD,0CAMC;IAED;;;;;;;;;;OAUG;IACH,qEAHW,MAAM,GACJ,OAAO,CAsBnB;IAED;;;;;;;;;;;;;;;OAeG;IACH,8EAJW,MAAM,UACN,iBAAiB,GACf,OAAO,CAi3BnB;;CACJ;6BA16E4B,yBAAyB;0CACZ,gCAAgC;2BApB/C,yCAAyC;6BAFvC,4CAA4C;8BAD3C,2CAA2C;4BAiC7C,uBAAuB;gCAtCnB,sBAAsB;mBArCnC,oCAAoC;oBACnC,4BAA4B;kCAuEd,gCAAgC;2BApDvC,2BAA2B;iCAkDrB,0CAA0C;4CApC/B,+DAA+D;yBA6BlF,yBAAyB;kCAMhB,wBAAwB;oBAvBtC,0BAA0B;uCAPP,sDAAsD"}
@@ -16,21 +16,8 @@ import { CameraManager } from "./camera/CameraManager.js";
16
16
  import { shader_background } from "./deferred/shader_background.js";
17
17
  import { shader_composite_volumetrics } from "./deferred/shader_composite_volumetrics.js";
18
18
  import { shader_deferred_main, shader_deferred_main_restir } from "./deferred/shader_deferred_main.js";
19
- import { ReSTIRDI } from "./restir/di/ReSTIRDI.js";
20
19
  import { shader_tonemap_HDR } from "./deferred/shader_tonemap_HDR.js";
21
20
  import { shader_tonemap_LDR } from "./deferred/shader_tonemap_LDR.js";
22
- import { G_BUFFER_MIP_LEVELS } from "./gbuffer/G_BUFFER_MIP_LEVELS.js";
23
- import {
24
- graph_rasterize_meshes_transparent_oit
25
- } from "./rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js";
26
- import {
27
- viz_rasterization_alpha_tested_pass_descriptor
28
- } from "./rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js";
29
- import {
30
- viz_rasterization_opaque_pass_descriptor
31
- } from "./rasterize/native/viz/viz_rasterization_opaque_pass_descriptor.js";
32
- import { RasterizationJob } from "./rasterize/RasterizationJob.js";
33
- import { graph_rasterize_scene } from "./rasterize/standard/graph_rasterize_scene.js";
34
21
  import { FrameContext } from "./extension/FrameContext.js";
35
22
  import { FramePhase } from "./extension/FramePhase.js";
36
23
  import { GBufferTextures } from "./extension/GBufferTextures.js";
@@ -38,6 +25,7 @@ import { PresentTarget } from "./extension/PresentTarget.js";
38
25
  import { RenderExtensionRegistry } from "./extension/RenderExtensionRegistry.js";
39
26
  import { SceneColor } from "./extension/SceneColor.js";
40
27
  import { ViewTextures } from "./extension/ViewTextures.js";
28
+ import { G_BUFFER_MIP_LEVELS } from "./gbuffer/G_BUFFER_MIP_LEVELS.js";
41
29
  import { shader_brick4_diffuse } from "./global_illumination/brick4/gpu/draw/shader_brick4_diffuse.js";
42
30
  import {
43
31
  shader_brick4_indirect_lighting
@@ -53,24 +41,36 @@ import { graph_build_light_clusters } from "./light/cluster/graph_build_light_cl
53
41
  import { AccumulatingPathTracer } from "./path_tracer/accumulating/AccumulatingPathTracer.js";
54
42
  import { graph_postprocess_bloom } from "./postprocess/bloom/graph_postprocess_bloom.js";
55
43
  import { shader_ffx_rcas } from "./postprocess/cas/shader_ffx_rcas.js";
44
+ import { DepthOfFieldU } from "./postprocess/dof/gather/DepthOfFieldU.js";
45
+ import { DepthOfField } from "./postprocess/dof/raymarch/DepthOfField.js";
56
46
  import { GPUCameraExposureManager } from "./postprocess/eye/GPUCameraExposureManager.js";
47
+ import { MotionBlur } from "./postprocess/motion_blur/MotionBlur.js";
57
48
  import { NSS } from "./postprocess/nss/NSS.js";
58
49
  import { PostProcess } from "./postprocess/PostProcess.js";
59
50
  import { shader_depth_occlusion_clip } from "./postprocess/taa/shader_depth_occlusion_clip.js";
60
51
  import { TAA } from "./postprocess/taa/TAA.js";
61
- import { MotionBlur } from "./postprocess/motion_blur/MotionBlur.js";
62
- import { DepthOfField } from "./postprocess/dof/raymarch/DepthOfField.js";
63
- import { DepthOfFieldU } from "./postprocess/dof/gather/DepthOfFieldU.js";
64
52
  import { graph_add_per_object_velocity } from "./postprocess/velocity/graph_add_per_object_velocity.js";
53
+ import { shader_debug_velocity } from "./postprocess/velocity/shader_debug_velocity.js";
54
+ import {
55
+ graph_rasterize_meshes_transparent_oit
56
+ } from "./rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js";
57
+ import {
58
+ viz_rasterization_alpha_tested_pass_descriptor
59
+ } from "./rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js";
60
+ import {
61
+ viz_rasterization_opaque_pass_descriptor
62
+ } from "./rasterize/native/viz/viz_rasterization_opaque_pass_descriptor.js";
63
+ import { RasterizationJob } from "./rasterize/RasterizationJob.js";
64
+ import { graph_rasterize_scene } from "./rasterize/standard/graph_rasterize_scene.js";
65
+ import { ReSTIRDI } from "./restir/di/ReSTIRDI.js";
65
66
  import { SceneManager } from "./scene/SceneManager.js";
66
67
  import { ShadeIndirectLightingMode } from "./ShadeIndirectLightingMode.js";
67
- import { ShadeUpscalerType } from "./ShadeUpscalerType.js";
68
68
  import { graph_image_pass } from "./shader/graph/graph_image_pass.js";
69
69
  import { graph_import_buffer } from "./shader/graph/graph_import_buffer.js";
70
70
  import { graph_import_texture } from "./shader/graph/graph_import_texture.js";
71
+ import { ShadeUpscalerType } from "./ShadeUpscalerType.js";
71
72
  import { CascadedSceneSDF } from "./shadow/sdf/cascade/CascadedSceneSDF.js";
72
73
  import { STATIC_GRAPHICS_ENGINE_ASSETS } from "./STATIC_GRAPHICS_ENGINE_ASSETS.js";
73
- import { shader_debug_velocity } from "./postprocess/velocity/shader_debug_velocity.js";
74
74
  import { GPUTextureContext } from "./texture/GPUTextureContext.js";
75
75
  import { RenderTarget } from "./texture/RenderTarget.js";
76
76
  import { View } from "./view/View.js";
@@ -2267,6 +2267,8 @@ export class Renderer {
2267
2267
 
2268
2268
  if (this.#feature_enabled_transparencies) {
2269
2269
  // do transparent alpha pass
2270
+ graph.push_scope("transparencies");
2271
+
2270
2272
  current_color_out = graph_rasterize_meshes_transparent_oit({
2271
2273
  graph,
2272
2274
  buckets: gr_render_buckets,
@@ -2288,6 +2290,8 @@ export class Renderer {
2288
2290
 
2289
2291
  indirect_lighting_mode: this.indirect_lighting_mode,
2290
2292
  });
2293
+
2294
+ graph.pop_scope();
2291
2295
  }
2292
2296
 
2293
2297
  frame.phase = FramePhase.AfterTransparency;
@@ -1 +1 @@
1
- {"version":3,"file":"GPUSky.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/atmosphere/GPUSky.js"],"names":[],"mappings":"AASA;IAuCI;;;OAGG;IACH,uCAkBC;IAjDD;;;OAGG;IACH,2CAEC;IAOD;;;OAGG;IACH,iDAEC;IAgCD,gBAGC;IAED,cAYC;IAED;;OAEG;IACH,eA8CC;;CAEJ;kCAzIiC,iCAAiC"}
1
+ {"version":3,"file":"GPUSky.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/atmosphere/GPUSky.js"],"names":[],"mappings":"AAUA;IAuCI;;;OAGG;IACH,uCAmBC;IAlDD;;;OAGG;IACH,2CAEC;IAOD;;;OAGG;IACH,iDAEC;IAiCD,gBAGC;IAED,cAYC;IAED;;OAEG;IACH,eA+CC;;CAEJ;kCA3IiC,iCAAiC"}
@@ -1,143 +1,146 @@
1
- import { FrameGraph } from "../../../engine/graphics/render/frame_graph/FrameGraph.js";
2
- import { TextureResourceDescriptor } from "../../device/graph/TextureResourceDescriptor.js";
3
- import { ShadeGPUCommandContext } from "../../device/ShadeGPUCommandContext.js";
4
- import { graph_image_pass } from "../shader/graph/graph_image_pass.js";
5
- import { debug_draw_texture } from "../texture/debug_draw_texture.js";
6
- import { GPUTextureContext } from "../texture/GPUTextureContext.js";
7
- import { shader_multiscatter_lut } from "./shader_multiscatter_lut.js";
8
- import { shader_transmittance_lut } from "./shader_transmittance_lut.js";
9
-
10
- export class GPUSky {
11
-
12
- /**
13
- * @type {GraphicsContext}
14
- */
15
- #graphics;
16
-
17
- /**
18
- * @type {GPUTextureContext}
19
- */
20
- #lut_transmittance;
21
-
22
- /**
23
- *
24
- * @returns {GPUTextureContext}
25
- */
26
- get lut_transmittance() {
27
- return this.#lut_transmittance;
28
- }
29
-
30
- /**
31
- * @type {GPUTextureContext}
32
- */
33
- #lut_multiple_scattering;
34
-
35
- /**
36
- *
37
- * @returns {GPUTextureContext}
38
- */
39
- get lut_multiple_scattering() {
40
- return this.#lut_multiple_scattering;
41
- }
42
-
43
- /**
44
- *
45
- * @type {boolean}
46
- */
47
- #needs_update = true;
48
-
49
- /**
50
- *
51
- * @param {GraphicsContext} graphics
52
- */
53
- constructor(graphics) {
54
- this.#graphics = graphics;
55
-
56
- const device = graphics.device;
57
-
58
- this.#lut_transmittance = new GPUTextureContext(device);
59
- this.#lut_transmittance.descriptor.label = "Sky / Transmittance LUT";
60
- this.#lut_transmittance.descriptor.format = "rgba16float";
61
- this.#lut_transmittance.descriptor.usage = GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC;
62
- this.#lut_transmittance.resize(256, 64);
63
-
64
- this.#lut_multiple_scattering = new GPUTextureContext(device);
65
- this.#lut_multiple_scattering.descriptor.label = "Sky / Multiple Scattering LUT";
66
- this.#lut_multiple_scattering.descriptor.format = "rgba16float";
67
- this.#lut_multiple_scattering.descriptor.usage = GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC;
68
- this.#lut_multiple_scattering.resize(32, 32);
69
-
70
-
71
- }
72
-
73
- destroy() {
74
- this.#lut_transmittance.destroy();
75
- this.#lut_multiple_scattering.destroy();
76
- }
77
-
78
- debug() {
79
-
80
-
81
- let y = 50;
82
- debug_draw_texture({ texture: this.#lut_transmittance, x: 50, y: y });
83
-
84
- y += this.#lut_transmittance.size[1] + 50;
85
-
86
- debug_draw_texture({ texture: this.#lut_multiple_scattering, x: 50, y: y });
87
-
88
- y += this.#lut_multiple_scattering.size[1] + 50;
89
-
90
- }
91
-
92
- /**
93
- *
94
- */
95
- update() {
96
- if (!this.#needs_update) {
97
- return;
98
- }
99
-
100
- const graph = new FrameGraph("sky update");
101
-
102
- const command_ctx = ShadeGPUCommandContext.create(
103
- this.#graphics,
104
- "Renderer/main"
105
- );
106
-
107
- const gr_transmittance = graph.import_resource("transmittance", TextureResourceDescriptor.fromTexture(this.#lut_transmittance.gpu_texture), this.#lut_transmittance);
108
- const gr_multiscatter = graph.import_resource("multiscatter", TextureResourceDescriptor.fromTexture(this.#lut_multiple_scattering.gpu_texture), this.#lut_multiple_scattering);
109
-
110
- graph_image_pass({
111
- graph,
112
- shader: shader_transmittance_lut,
113
- inputs: {
114
- settings: {
115
- steps: 40,
116
- }
117
- },
118
- output: [gr_transmittance]
119
- });
120
-
121
-
122
- graph_image_pass({
123
- graph,
124
- shader: shader_multiscatter_lut,
125
- inputs: {
126
- settings: {
127
- steps: 20,
128
- sqrt_samples: 8,
129
- },
130
- tSkyLutTransmittance: gr_transmittance
131
- },
132
- output: [gr_multiscatter]
133
- });
134
-
135
- command_ctx.encodeGraph(graph);
136
-
137
- command_ctx.finish();
138
-
139
-
140
- this.#needs_update = false;
141
- }
142
-
1
+ import { FrameGraph } from "../../../engine/graphics/render/frame_graph/FrameGraph.js";
2
+ import { TextureResourceDescriptor } from "../../device/graph/TextureResourceDescriptor.js";
3
+ import { ShadeGPUCommandContext } from "../../device/ShadeGPUCommandContext.js";
4
+ import { graph_compute_pass } from "../shader/graph/compute/graph_compute_pass.js";
5
+ import { graph_image_pass } from "../shader/graph/graph_image_pass.js";
6
+ import { debug_draw_texture } from "../texture/debug_draw_texture.js";
7
+ import { GPUTextureContext } from "../texture/GPUTextureContext.js";
8
+ import { shader_multiscatter_lut } from "./shader_multiscatter_lut.js";
9
+ import { shader_transmittance_lut } from "./shader_transmittance_lut.js";
10
+
11
+ export class GPUSky {
12
+
13
+ /**
14
+ * @type {GraphicsContext}
15
+ */
16
+ #graphics;
17
+
18
+ /**
19
+ * @type {GPUTextureContext}
20
+ */
21
+ #lut_transmittance;
22
+
23
+ /**
24
+ *
25
+ * @returns {GPUTextureContext}
26
+ */
27
+ get lut_transmittance() {
28
+ return this.#lut_transmittance;
29
+ }
30
+
31
+ /**
32
+ * @type {GPUTextureContext}
33
+ */
34
+ #lut_multiple_scattering;
35
+
36
+ /**
37
+ *
38
+ * @returns {GPUTextureContext}
39
+ */
40
+ get lut_multiple_scattering() {
41
+ return this.#lut_multiple_scattering;
42
+ }
43
+
44
+ /**
45
+ *
46
+ * @type {boolean}
47
+ */
48
+ #needs_update = true;
49
+
50
+ /**
51
+ *
52
+ * @param {GraphicsContext} graphics
53
+ */
54
+ constructor(graphics) {
55
+ this.#graphics = graphics;
56
+
57
+ const device = graphics.device;
58
+
59
+ this.#lut_transmittance = new GPUTextureContext(device);
60
+ this.#lut_transmittance.descriptor.label = "Sky / Transmittance LUT";
61
+ this.#lut_transmittance.descriptor.format = "rgba16float";
62
+ this.#lut_transmittance.descriptor.usage = GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC;
63
+ this.#lut_transmittance.resize(256, 64);
64
+
65
+ this.#lut_multiple_scattering = new GPUTextureContext(device);
66
+ this.#lut_multiple_scattering.descriptor.label = "Sky / Multiple Scattering LUT";
67
+ this.#lut_multiple_scattering.descriptor.format = "rgba16float";
68
+ // written by a compute shader, so STORAGE_BINDING rather than RENDER_ATTACHMENT
69
+ this.#lut_multiple_scattering.descriptor.usage = GPUTextureUsage.STORAGE_BINDING | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC;
70
+ this.#lut_multiple_scattering.resize(32, 32);
71
+
72
+
73
+ }
74
+
75
+ destroy() {
76
+ this.#lut_transmittance.destroy();
77
+ this.#lut_multiple_scattering.destroy();
78
+ }
79
+
80
+ debug() {
81
+
82
+
83
+ let y = 50;
84
+ debug_draw_texture({ texture: this.#lut_transmittance, x: 50, y: y });
85
+
86
+ y += this.#lut_transmittance.size[1] + 50;
87
+
88
+ debug_draw_texture({ texture: this.#lut_multiple_scattering, x: 50, y: y });
89
+
90
+ y += this.#lut_multiple_scattering.size[1] + 50;
91
+
92
+ }
93
+
94
+ /**
95
+ *
96
+ */
97
+ update() {
98
+ if (!this.#needs_update) {
99
+ return;
100
+ }
101
+
102
+ const graph = new FrameGraph("sky update");
103
+
104
+ const command_ctx = ShadeGPUCommandContext.create(
105
+ this.#graphics,
106
+ "Renderer/main"
107
+ );
108
+
109
+ const gr_transmittance = graph.import_resource("transmittance", TextureResourceDescriptor.fromTexture(this.#lut_transmittance.gpu_texture), this.#lut_transmittance);
110
+ const gr_multiscatter = graph.import_resource("multiscatter", TextureResourceDescriptor.fromTexture(this.#lut_multiple_scattering.gpu_texture), this.#lut_multiple_scattering);
111
+
112
+ graph_image_pass({
113
+ graph,
114
+ shader: shader_transmittance_lut,
115
+ inputs: {
116
+ settings: {
117
+ steps: 40,
118
+ // read off the texture rather than restated, so the two cannot disagree
119
+ resolution: [this.#lut_transmittance.width, this.#lut_transmittance.height],
120
+ }
121
+ },
122
+ output: [gr_transmittance]
123
+ });
124
+
125
+
126
+ graph_compute_pass({
127
+ graph,
128
+ shader: shader_multiscatter_lut,
129
+ // one workgroup per LUT texel, counted off the texture being written so the
130
+ // dispatch cannot cover a different area than the shader stores into
131
+ group_count: [this.#lut_multiple_scattering.width, this.#lut_multiple_scattering.height, 1],
132
+ bindings: {
133
+ tSkyLutTransmittance: gr_transmittance,
134
+ tSkyLutMultiscatterOut: gr_multiscatter
135
+ }
136
+ });
137
+
138
+ command_ctx.encodeGraph(graph);
139
+
140
+ command_ctx.finish();
141
+
142
+
143
+ this.#needs_update = false;
144
+ }
145
+
143
146
  }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Directions are drawn on an 8x8 grid, stratified in azimuth and in the cosine of the polar
3
+ * angle. Matches Hillaire's `SQRTSAMPLECOUNT`.
4
+ * @type {number}
5
+ */
6
+ export const MULTISCATTER_LUT_SQRT_SAMPLES: number;
7
+ /**
8
+ * One thread integrates one direction, so this is also the workgroup size.
9
+ *
10
+ * 64 is Hillaire's `[numthreads(1,1,64)]` count. It is a multiple of every legal subgroup
11
+ * size up to 64, and the reduction handles a subgroup wider than the workgroup, so no
12
+ * hardware needs a different number here.
13
+ * @type {number}
14
+ */
15
+ export const MULTISCATTER_LUT_DIRECTION_COUNT: number;
16
+ /**
17
+ * Ray-march steps per direction. Hillaire's `SampleCountIni` for this LUT; the comment there
18
+ * reads "a minimum set of step is required for accuracy unfortunately".
19
+ *
20
+ * Compile-time on purpose: as a uniform the inner loop cannot be unrolled and the trip count
21
+ * has to be re-tested against an f32 every iteration.
22
+ * @type {number}
23
+ */
24
+ export const MULTISCATTER_LUT_STEPS: number;
25
+ /**
26
+ * Upper bound on the number of subgroups in one workgroup, which is how many partial sums
27
+ * the cross-subgroup reduction has to combine.
28
+ *
29
+ * WGSL pins the subgroup size to a power of two in [4, 128], so the worst case is
30
+ * {@link MULTISCATTER_LUT_DIRECTION_COUNT} / 4.
31
+ * @type {number}
32
+ */
33
+ export const MULTISCATTER_LUT_MAX_SUBGROUP_PARTIALS: number;
34
+ //# sourceMappingURL=MULTISCATTER_LUT_CONFIG.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MULTISCATTER_LUT_CONFIG.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.js"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,4CAFU,MAAM,CAE+B;AAE/C;;;;;;;GAOG;AACH,+CAFU,MAAM,CAE8F;AAE9G;;;;;;;GAOG;AACH,qCAFU,MAAM,CAEyB;AAEzC;;;;;;;GAOG;AACH,qDAFU,MAAM,CAE2E"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Directions are drawn on an 8x8 grid, stratified in azimuth and in the cosine of the polar
3
+ * angle. Matches Hillaire's `SQRTSAMPLECOUNT`.
4
+ * @type {number}
5
+ */
6
+ export const MULTISCATTER_LUT_SQRT_SAMPLES = 8;
7
+
8
+ /**
9
+ * One thread integrates one direction, so this is also the workgroup size.
10
+ *
11
+ * 64 is Hillaire's `[numthreads(1,1,64)]` count. It is a multiple of every legal subgroup
12
+ * size up to 64, and the reduction handles a subgroup wider than the workgroup, so no
13
+ * hardware needs a different number here.
14
+ * @type {number}
15
+ */
16
+ export const MULTISCATTER_LUT_DIRECTION_COUNT = MULTISCATTER_LUT_SQRT_SAMPLES * MULTISCATTER_LUT_SQRT_SAMPLES;
17
+
18
+ /**
19
+ * Ray-march steps per direction. Hillaire's `SampleCountIni` for this LUT; the comment there
20
+ * reads "a minimum set of step is required for accuracy unfortunately".
21
+ *
22
+ * Compile-time on purpose: as a uniform the inner loop cannot be unrolled and the trip count
23
+ * has to be re-tested against an f32 every iteration.
24
+ * @type {number}
25
+ */
26
+ export const MULTISCATTER_LUT_STEPS = 20;
27
+
28
+ /**
29
+ * Upper bound on the number of subgroups in one workgroup, which is how many partial sums
30
+ * the cross-subgroup reduction has to combine.
31
+ *
32
+ * WGSL pins the subgroup size to a power of two in [4, 128], so the worst case is
33
+ * {@link MULTISCATTER_LUT_DIRECTION_COUNT} / 4.
34
+ * @type {number}
35
+ */
36
+ export const MULTISCATTER_LUT_MAX_SUBGROUP_PARTIALS = MULTISCATTER_LUT_DIRECTION_COUNT / 4;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Filtering sampler for the sky LUTs (transmittance, multiple-scattering).
3
+ *
4
+ * Both LUTs are `rgba16float`, which is filterable in core WebGPU — only the 32-bit float
5
+ * formats need the `float32-filterable` feature — so these can go through the texture unit
6
+ * instead of the 4-tap manual bilinear in `texture_sample_bilinear_uv`.
7
+ *
8
+ * `min` and `mag` are both set: the LUTs are single-mip and sampled with an explicit LOD of
9
+ * 0, which selects the magnification filter, but relying on that alone would silently fall
10
+ * back to point sampling if either LUT ever grew mips.
11
+ *
12
+ * Clamp-to-edge reproduces the manual filter's per-corner clamping exactly: `uv` is
13
+ * saturated by `sky_lut_uv`, and at the edges both bilinear taps collapse onto the edge
14
+ * texel.
15
+ *
16
+ * @type {Readonly<SamplerDescriptor>}
17
+ */
18
+ export const SAMPLER_SKY_LUT: Readonly<SamplerDescriptor>;
19
+ import { SamplerDescriptor } from "../../descriptor/texture/SamplerDescriptor.js";
20
+ //# sourceMappingURL=SAMPLER_SKY_LUT.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SAMPLER_SKY_LUT.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AACH,8BAFU,SAAS,iBAAiB,CAAC,CAOjC;kCAxB8B,+CAA+C"}
@@ -0,0 +1,25 @@
1
+ import { SamplerDescriptor } from "../../descriptor/texture/SamplerDescriptor.js";
2
+
3
+ /**
4
+ * Filtering sampler for the sky LUTs (transmittance, multiple-scattering).
5
+ *
6
+ * Both LUTs are `rgba16float`, which is filterable in core WebGPU — only the 32-bit float
7
+ * formats need the `float32-filterable` feature — so these can go through the texture unit
8
+ * instead of the 4-tap manual bilinear in `texture_sample_bilinear_uv`.
9
+ *
10
+ * `min` and `mag` are both set: the LUTs are single-mip and sampled with an explicit LOD of
11
+ * 0, which selects the magnification filter, but relying on that alone would silently fall
12
+ * back to point sampling if either LUT ever grew mips.
13
+ *
14
+ * Clamp-to-edge reproduces the manual filter's per-corner clamping exactly: `uv` is
15
+ * saturated by `sky_lut_uv`, and at the edges both bilinear taps collapse onto the edge
16
+ * texel.
17
+ *
18
+ * @type {Readonly<SamplerDescriptor>}
19
+ */
20
+ export const SAMPLER_SKY_LUT = Object.freeze(SamplerDescriptor.from({
21
+ magFilter: "linear",
22
+ minFilter: "linear",
23
+ addressModeU: "clamp-to-edge",
24
+ addressModeV: "clamp-to-edge",
25
+ }));
@@ -1,6 +1,19 @@
1
1
  /**
2
- * Calculates Equation (5) and (7) from the paper.
2
+ * One direction's contribution to Equations (5) and (7) from the paper: `out_lum` is the
3
+ * second-order in-scattered luminance along `rayDir`, `out_fms` the luminance that would
4
+ * come back if the medium scattered one unit of light isotropically. The caller integrates
5
+ * over the direction set -- see {@link chunk_multiscatter_sample_direction} -- by taking the
6
+ * mean, which is what the paper's uniform phase p_u = 1/(4*PI) reduces to.
7
+ *
8
+ * Splitting one direction out of the loop is what lets `shader_multiscatter_lut` put a
9
+ * thread on each of the 64 directions, the way Hillaire's `NewMultiScattCS` does.
10
+ *
11
+ * `pos` is assumed to be inside the atmosphere and at or above the surface, which is what
12
+ * makes the far root of the outer sphere the atmosphere exit.
13
+ *
3
14
  * @see "A Scalable and Production Ready Sky and Atmosphere Rendering Technique", Hillaire (2020)
15
+ * @see https://www.shadertoy.com/view/slSXRW
16
+ * @type {CodeChunk}
4
17
  */
5
18
  export const chunk_get_multiscatter_values: CodeChunk;
6
19
  import { CodeChunk } from "../shader/compiler/CodeChunk.js";
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_get_multiscatter_values.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/atmosphere/chunk_get_multiscatter_values.js"],"names":[],"mappings":"AA6BA;;;GAGG;AACH,sDA+IC;0BAxJyB,iCAAiC"}
1
+ {"version":3,"file":"chunk_get_multiscatter_values.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/atmosphere/chunk_get_multiscatter_values.js"],"names":[],"mappings":"AAuBA;;;;;;;;;;;;;;;;GAgBG;AACH,4CAFU,SAAS,CA4HlB;0BAjJyB,iCAAiC"}