@woosh/meep-engine 3.14.6 → 3.15.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 (154) hide show
  1. package/package.json +1 -1
  2. package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts +48 -0
  3. package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts.map +1 -1
  4. package/src/engine/network/orchestrator/ServerAuthoritativeClient.js +246 -3
  5. package/src/shade/RENDERER_CONTRACT.md +584 -580
  6. package/src/shade/playground/avboit/README.md +117 -0
  7. package/src/shade/playground/avboit/index.html +215 -0
  8. package/src/shade/playground/avboit/main.d.ts +2 -0
  9. package/src/shade/playground/avboit/main.d.ts.map +1 -0
  10. package/src/shade/playground/avboit/main.js +875 -0
  11. package/src/shade/renderer/Renderer.d.ts +16 -0
  12. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  13. package/src/shade/renderer/Renderer.js +29 -28
  14. package/src/shade/renderer/ShadeTransparencyMode.d.ts +13 -0
  15. package/src/shade/renderer/ShadeTransparencyMode.d.ts.map +1 -0
  16. package/src/shade/renderer/ShadeTransparencyMode.js +30 -0
  17. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts +9 -0
  18. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
  19. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +26 -0
  20. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts +7 -2
  21. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  22. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +12 -1
  23. package/src/shade/renderer/rasterize/expand/shader_filter_triangle_by_material_side.js +1 -1
  24. package/src/shade/renderer/rasterize/forward/FORWARD_VERTEX_SHADER_STRUCT.d.ts +3 -0
  25. package/src/shade/renderer/rasterize/forward/FORWARD_VERTEX_SHADER_STRUCT.d.ts.map +1 -0
  26. package/src/shade/renderer/rasterize/{native/oit → forward}/FORWARD_VERTEX_SHADER_STRUCT.js +4 -4
  27. package/src/shade/renderer/rasterize/forward/SHADING_SCENE_RESOURCE_GROUP.d.ts +3 -0
  28. package/src/shade/renderer/rasterize/forward/SHADING_SCENE_RESOURCE_GROUP.d.ts.map +1 -0
  29. package/src/shade/renderer/rasterize/forward/SHADING_SCENE_RESOURCE_GROUP.js +17 -0
  30. package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_forward_shade_standard_fragment_brick4.d.ts +1 -1
  31. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.d.ts.map +1 -0
  32. package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_forward_shade_standard_fragment_brick4.js +16 -16
  33. package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_forward_shade_standard_fragment_ibl.d.ts +1 -1
  34. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.d.ts.map +1 -0
  35. package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_forward_shade_standard_fragment_ibl.js +17 -17
  36. package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_material_side_should_draw.d.ts +1 -1
  37. package/src/shade/renderer/rasterize/forward/chunk_material_side_should_draw.d.ts.map +1 -0
  38. package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_material_side_should_draw.js +2 -2
  39. package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.d.ts +3 -0
  40. package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.d.ts.map +1 -0
  41. package/src/shade/renderer/rasterize/{native/oit → forward}/vertex_shader_chunk.js +4 -4
  42. package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.d.ts +27 -0
  43. package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.d.ts.map +1 -0
  44. package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.js +27 -0
  45. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts +107 -0
  46. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts.map +1 -0
  47. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.js +120 -0
  48. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +463 -0
  49. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +509 -0
  50. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_WARP_STRUCT.d.ts +15 -0
  51. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_WARP_STRUCT.d.ts.map +1 -0
  52. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_WARP_STRUCT.js +33 -0
  53. package/src/shade/renderer/rasterize/native/avboit/avboit_build_depth_curve.d.ts +20 -0
  54. package/src/shade/renderer/rasterize/native/avboit/avboit_build_depth_curve.d.ts.map +1 -0
  55. package/src/shade/renderer/rasterize/native/avboit/avboit_build_depth_curve.js +38 -0
  56. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts +38 -0
  57. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts.map +1 -0
  58. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +130 -0
  59. package/src/shade/renderer/rasterize/native/avboit/avboit_spec_support.d.ts +37 -0
  60. package/src/shade/renderer/rasterize/native/avboit/avboit_spec_support.d.ts.map +1 -0
  61. package/src/shade/renderer/rasterize/native/avboit/avboit_spec_support.js +73 -0
  62. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_counts_to_extinction.d.ts +9 -0
  63. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_counts_to_extinction.d.ts.map +1 -0
  64. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_counts_to_extinction.js +17 -0
  65. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_dilate_word.d.ts +11 -0
  66. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_dilate_word.d.ts.map +1 -0
  67. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_dilate_word.js +18 -0
  68. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_counts.d.ts +9 -0
  69. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_counts.d.ts.map +1 -0
  70. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_counts.js +17 -0
  71. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_transmittance.d.ts +9 -0
  72. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_transmittance.d.ts.map +1 -0
  73. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_transmittance.js +17 -0
  74. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_fold_pairs.d.ts +15 -0
  75. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_fold_pairs.d.ts.map +1 -0
  76. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_fold_pairs.js +25 -0
  77. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.d.ts +17 -0
  78. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.d.ts.map +1 -0
  79. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.js +35 -0
  80. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_range.d.ts +11 -0
  81. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_range.d.ts.map +1 -0
  82. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_range.js +21 -0
  83. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_word_mask.d.ts +9 -0
  84. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_word_mask.d.ts.map +1 -0
  85. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_word_mask.js +26 -0
  86. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_overflows.d.ts +11 -0
  87. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_overflows.d.ts.map +1 -0
  88. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_overflows.js +22 -0
  89. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_pack_counts.d.ts +10 -0
  90. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_pack_counts.d.ts.map +1 -0
  91. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_pack_counts.js +21 -0
  92. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.d.ts +10 -0
  93. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.d.ts.map +1 -0
  94. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.js +32 -0
  95. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmission_tint.d.ts +20 -0
  96. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmission_tint.d.ts.map +1 -0
  97. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmission_tint.js +27 -0
  98. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmittance_to_extinction.d.ts +10 -0
  99. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmittance_to_extinction.d.ts.map +1 -0
  100. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmittance_to_extinction.js +18 -0
  101. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unpack_counts.d.ts +9 -0
  102. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unpack_counts.d.ts.map +1 -0
  103. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unpack_counts.js +21 -0
  104. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_physical.d.ts +9 -0
  105. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_physical.d.ts.map +1 -0
  106. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_physical.js +23 -0
  107. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_virtual.d.ts +13 -0
  108. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_virtual.d.ts.map +1 -0
  109. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_virtual.js +27 -0
  110. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp.d.ts +22 -0
  111. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp.d.ts.map +1 -0
  112. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp.js +38 -0
  113. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +117 -0
  114. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -0
  115. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +935 -0
  116. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.d.ts +8 -0
  117. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.d.ts.map +1 -0
  118. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.js +135 -0
  119. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.d.ts +3 -0
  120. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.d.ts.map +1 -0
  121. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.js +101 -0
  122. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.d.ts +3 -0
  123. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.d.ts.map +1 -0
  124. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.js +96 -0
  125. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_integrate.d.ts +3 -0
  126. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_integrate.d.ts.map +1 -0
  127. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_integrate.js +83 -0
  128. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_occupancy.d.ts +9 -0
  129. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_occupancy.d.ts.map +1 -0
  130. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_occupancy.js +119 -0
  131. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.d.ts +3 -0
  132. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.d.ts.map +1 -0
  133. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.js +81 -0
  134. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts +15 -0
  135. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts.map +1 -0
  136. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.js +237 -0
  137. package/src/shade/renderer/rasterize/native/material_draw_indirect.d.ts +22 -0
  138. package/src/shade/renderer/rasterize/native/material_draw_indirect.d.ts.map +1 -0
  139. package/src/shade/renderer/rasterize/native/material_draw_indirect.js +69 -0
  140. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
  141. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +665 -722
  142. package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +3 -3
  143. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +4 -4
  144. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.js +4 -4
  145. package/src/shade/renderer/rasterize/native/oit/FORWARD_VERTEX_SHADER_STRUCT.d.ts +0 -3
  146. package/src/shade/renderer/rasterize/native/oit/FORWARD_VERTEX_SHADER_STRUCT.d.ts.map +0 -1
  147. package/src/shade/renderer/rasterize/native/oit/SHADING_SCENE_RESOURCE_GROUP.d.ts +0 -3
  148. package/src/shade/renderer/rasterize/native/oit/SHADING_SCENE_RESOURCE_GROUP.d.ts.map +0 -1
  149. package/src/shade/renderer/rasterize/native/oit/SHADING_SCENE_RESOURCE_GROUP.js +0 -17
  150. package/src/shade/renderer/rasterize/native/oit/chunk_forward_shade_standard_fragment_brick4.d.ts.map +0 -1
  151. package/src/shade/renderer/rasterize/native/oit/chunk_forward_shade_standard_fragment_ibl.d.ts.map +0 -1
  152. package/src/shade/renderer/rasterize/native/oit/chunk_material_side_should_draw.d.ts.map +0 -1
  153. package/src/shade/renderer/rasterize/native/oit/vertex_shader_chunk.d.ts +0 -3
  154. package/src/shade/renderer/rasterize/native/oit/vertex_shader_chunk.d.ts.map +0 -1
@@ -29,6 +29,20 @@ export class Renderer {
29
29
  * @type {ShadeIndirectLightingMode}
30
30
  */
31
31
  indirect_lighting_mode: ShadeIndirectLightingMode;
32
+ /**
33
+ * Which order-independent transparency technique draws the transparent buckets. Both modes
34
+ * are wired at the single transparency call site and take the same inputs, so this is safe to
35
+ * flip at runtime for an A/B. See {@link ShadeTransparencyMode} for what each one costs and
36
+ * needs from the device. AVBOIT is the default since 2026-09-03: depth-complexity invariant
37
+ * where MBOIT leaks stacked surfaces, and no 32-bit float blending.
38
+ * @type {ShadeTransparencyMode}
39
+ */
40
+ transparency_mode: ShadeTransparencyMode;
41
+ /**
42
+ * Switches of the AVBOIT mode, read every frame while {@link transparency_mode} selects it.
43
+ * @type {AVBOITSettings}
44
+ */
45
+ avboit: AVBOITSettings;
32
46
  feature_ssr_enabled: boolean;
33
47
  feature_ssao_enabled: boolean;
34
48
  /**
@@ -388,6 +402,8 @@ export class Renderer {
388
402
  }
389
403
  import { SceneManager } from "./scene/SceneManager.js";
390
404
  import { ShadeIndirectLightingMode } from "./ShadeIndirectLightingMode.js";
405
+ import { ShadeTransparencyMode } from "./ShadeTransparencyMode.js";
406
+ import { AVBOITSettings } from "./rasterize/native/avboit/AVBOITSettings.js";
391
407
  import { MotionBlur } from "./postprocess/motion_blur/MotionBlur.js";
392
408
  import { DepthOfField } from "./postprocess/dof/raymarch/DepthOfField.js";
393
409
  import { DepthOfFieldU } from "./postprocess/dof/gather/DepthOfFieldU.js";
@@ -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;IAgB/B;;;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;IAsBD;;;;;;;;;;;;;;;;;;;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;IAgBD;;;;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,+EAkOC;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,CAu2BnB;;CACJ;6BAr5E4B,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"}
1
+ {"version":3,"file":"Renderer.d.ts","sourceRoot":"","sources":["../../../../src/shade/renderer/Renderer.js"],"names":[],"mappings":"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"}
@@ -54,6 +54,9 @@ import { shader_debug_velocity } from "./postprocess/velocity/shader_debug_veloc
54
54
  import {
55
55
  graph_rasterize_meshes_transparent_oit
56
56
  } from "./rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js";
57
+ import {
58
+ graph_rasterize_meshes_transparent_avboit
59
+ } from "./rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js";
57
60
  import {
58
61
  viz_rasterization_alpha_tested_pass_descriptor
59
62
  } from "./rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js";
@@ -65,6 +68,8 @@ import { graph_rasterize_scene } from "./rasterize/standard/graph_rasterize_scen
65
68
  import { ReSTIRDI } from "./restir/di/ReSTIRDI.js";
66
69
  import { SceneManager } from "./scene/SceneManager.js";
67
70
  import { ShadeIndirectLightingMode } from "./ShadeIndirectLightingMode.js";
71
+ import { ShadeTransparencyMode } from "./ShadeTransparencyMode.js";
72
+ import { AVBOITSettings } from "./rasterize/native/avboit/AVBOITSettings.js";
68
73
  import { graph_image_pass } from "./shader/graph/graph_image_pass.js";
69
74
  import { graph_import_buffer } from "./shader/graph/graph_import_buffer.js";
70
75
  import { graph_import_texture } from "./shader/graph/graph_import_texture.js";
@@ -167,6 +172,22 @@ export class Renderer {
167
172
  */
168
173
  indirect_lighting_mode = ShadeIndirectLightingMode.IBL;
169
174
 
175
+ /**
176
+ * Which order-independent transparency technique draws the transparent buckets. Both modes
177
+ * are wired at the single transparency call site and take the same inputs, so this is safe to
178
+ * flip at runtime for an A/B. See {@link ShadeTransparencyMode} for what each one costs and
179
+ * needs from the device. AVBOIT is the default since 2026-09-03: depth-complexity invariant
180
+ * where MBOIT leaks stacked surfaces, and no 32-bit float blending.
181
+ * @type {ShadeTransparencyMode}
182
+ */
183
+ transparency_mode = ShadeTransparencyMode.AVBOIT;
184
+
185
+ /**
186
+ * Switches of the AVBOIT mode, read every frame while {@link transparency_mode} selects it.
187
+ * @type {AVBOITSettings}
188
+ */
189
+ avboit = new AVBOITSettings();
190
+
170
191
  feature_ssr_enabled = false;
171
192
  feature_ssao_enabled = true;
172
193
  /**
@@ -2178,35 +2199,8 @@ export class Renderer {
2178
2199
 
2179
2200
  }
2180
2201
 
2181
- // current_color_out = indirect_diffuse
2182
- // current_color_out = indirect_specular
2183
-
2184
2202
  }
2185
2203
 
2186
- // current_color_out = graph_decode_rgbe9995_to_rgb16float({
2187
- // graph,
2188
- // input:indirect_diffuse_near_field,
2189
- // resolution: view_ctx.resolution,
2190
- // });
2191
- //
2192
- // const [norm] = graph_image_pass({
2193
- // shader: shader_decode_octahedral_normal,
2194
- // inputs:{
2195
- // tInput: bent_normals,
2196
- // },
2197
- // graph,
2198
- // output_resolution: view_ctx.resolution,
2199
- // });
2200
- //
2201
- // [current_color_out] = graph_image_pass({
2202
- // graph,
2203
- // shader: shader_draw_normals,
2204
- // inputs:{
2205
- // tInput: norm,
2206
- // },
2207
- // output_resolution: view_ctx.resolution,
2208
- // });
2209
-
2210
2204
  // Composite volumetric fog over the finalized opaque + background + indirect colour.
2211
2205
  // A dedicated pass (not inline in the shading shaders) because indirect lighting is added
2212
2206
  // in a separate additively-blended pass, so the full surface radiance only exists here.
@@ -2250,7 +2244,13 @@ export class Renderer {
2250
2244
  // do transparent alpha pass
2251
2245
  graph.push_scope("transparencies");
2252
2246
 
2253
- current_color_out = graph_rasterize_meshes_transparent_oit({
2247
+ // Mutually exclusive by construction: one orchestrator runs at this one call site, and both
2248
+ // take the same argument object, so the mode is a pure selector.
2249
+ const graph_rasterize_meshes_transparent = this.transparency_mode === ShadeTransparencyMode.AVBOIT
2250
+ ? graph_rasterize_meshes_transparent_avboit
2251
+ : graph_rasterize_meshes_transparent_oit;
2252
+
2253
+ current_color_out = graph_rasterize_meshes_transparent({
2254
2254
  graph,
2255
2255
  buckets: gr_render_buckets,
2256
2256
  view_ctx,
@@ -2270,6 +2270,7 @@ export class Renderer {
2270
2270
  volumetrics_metadata: volumetrics.metadata,
2271
2271
 
2272
2272
  indirect_lighting_mode: this.indirect_lighting_mode,
2273
+ avboit: this.avboit,
2273
2274
  });
2274
2275
 
2275
2276
  graph.pop_scope();
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Selects which order-independent transparency technique draws the transparent buckets.
3
+ *
4
+ * Both modes share everything up to the draw commands (material filtering, meshlet expansion, HZB
5
+ * culling) and both composite onto the scene colour at `FramePhase.AfterLighting`; they differ in
6
+ * how the per-pixel transmittance in front of a fragment is represented.
7
+ */
8
+ export type ShadeTransparencyMode = number;
9
+ export namespace ShadeTransparencyMode {
10
+ let MBOIT: number;
11
+ let AVBOIT: number;
12
+ }
13
+ //# sourceMappingURL=ShadeTransparencyMode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShadeTransparencyMode.d.ts","sourceRoot":"","sources":["../../../../src/shade/renderer/ShadeTransparencyMode.js"],"names":[],"mappings":";;;;;;;oCAOU,MAAM"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Selects which order-independent transparency technique draws the transparent buckets.
3
+ *
4
+ * Both modes share everything up to the draw commands (material filtering, meshlet expansion, HZB
5
+ * culling) and both composite onto the scene colour at `FramePhase.AfterLighting`; they differ in
6
+ * how the per-pixel transmittance in front of a fragment is represented.
7
+ *
8
+ * @enum {number}
9
+ */
10
+ export const ShadeTransparencyMode = {
11
+ /**
12
+ * Moment-based OIT (Peters et al. 2017): four power moments of the transmittance function per
13
+ * pixel, additively blended at full resolution into `r32float` + `rgba32float` targets, which
14
+ * is what puts `float32-blendable` on the device floor. Smooth, cheap, and not depth-complexity
15
+ * invariant — stacked opaque-ish layers leak. The default until 2026-09-03.
16
+ *
17
+ * See `rasterize/native/oit/`.
18
+ */
19
+ MBOIT: 0,
20
+ /**
21
+ * Adaptive voxel-based OIT (Drobot, SIGGRAPH 2025): extinction splatted into a 1/8-resolution
22
+ * voxel volume whose depth axis is adaptively packed onto 128 physical slices, integrated into a
23
+ * 3D transmittance lookup. Depth-complexity and shift invariant, filters the background per
24
+ * channel for transmissive materials (opt-in, `Renderer.avboit`), and needs no 32-bit float
25
+ * blending. The default.
26
+ *
27
+ * See `rasterize/native/avboit/`.
28
+ */
29
+ AVBOIT: 1,
30
+ };
@@ -37,6 +37,15 @@ export class AccumulatingPathTracer {
37
37
  * @type {boolean}
38
38
  */
39
39
  clear_history: boolean;
40
+ /**
41
+ * Samples accumulated by the tile that has had the fewest — the floor on how converged the
42
+ * image is anywhere. Zero right after a reset or before the first frame. A page presenting the
43
+ * traced image as a reference reads this to say how settled it is, rather than guessing from
44
+ * frames elapsed (a frame advances one tile, not the whole image).
45
+ *
46
+ * @returns {number}
47
+ */
48
+ get min_sample_count(): number;
40
49
  /**
41
50
  * Render one tile worth of new samples and blend it into the accumulation buffer.
42
51
  *
@@ -1 +1 @@
1
- {"version":3,"file":"AccumulatingPathTracer.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js"],"names":[],"mappings":"AAYA;;;;;;;;;;;;;;GAcG;AACH;IA8EI;;;OAGG;IACH,uCAgBC;IAhGD;;;;OAIG;IACH,kBAFU,MAAM,CAEO;IAEvB;;;;OAIG;IACH,wBAFU,MAAM,CAEc;IAE9B;;;;OAIG;IACH,eAFU,OAAO,CAEK;IA+NtB;;;;;;OAMG;IACH,yCAFa,MAAM,CAyJlB;;CACJ"}
1
+ {"version":3,"file":"AccumulatingPathTracer.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js"],"names":[],"mappings":"AAYA;;;;;;;;;;;;;;GAcG;AACH;IA8EI;;;OAGG;IACH,uCAgBC;IAhGD;;;;OAIG;IACH,kBAFU,MAAM,CAEO;IAEvB;;;;OAIG;IACH,wBAFU,MAAM,CAEc;IAE9B;;;;OAIG;IACH,eAFU,OAAO,CAEK;IA+NtB;;;;;;;OAOG;IACH,+BAgBC;IAED;;;;;;OAMG;IACH,yCAFa,MAAM,CAyJlB;;CACJ"}
@@ -269,6 +269,32 @@ export class AccumulatingPathTracer {
269
269
  }
270
270
  }
271
271
 
272
+ /**
273
+ * Samples accumulated by the tile that has had the fewest — the floor on how converged the
274
+ * image is anywhere. Zero right after a reset or before the first frame. A page presenting the
275
+ * traced image as a reference reads this to say how settled it is, rather than guessing from
276
+ * frames elapsed (a frame advances one tile, not the whole image).
277
+ *
278
+ * @returns {number}
279
+ */
280
+ get min_sample_count() {
281
+ const counts = this.#tile_sample_counts;
282
+
283
+ if (counts.length === 0) {
284
+ return 0;
285
+ }
286
+
287
+ let min = counts[0];
288
+
289
+ for (let i = 1; i < counts.length; i++) {
290
+ if (counts[i] < min) {
291
+ min = counts[i];
292
+ }
293
+ }
294
+
295
+ return min;
296
+ }
297
+
272
298
  /**
273
299
  * Render one tile worth of new samples and blend it into the accumulation buffer.
274
300
  *
@@ -10,9 +10,14 @@
10
10
  * @param {number[]} resolution
11
11
  * @param {string} [label] used for debug
12
12
  * @param {GPUSceneContext} scene
13
+ * @returns {{meshlets: number, draw_commands: number, meshlet_collection: number, meshlet_iterator_command: number}}
14
+ * resource IDs: the material-sorted meshlet array the draws consume, one indirect draw command per
15
+ * material, the HZB-filtered collection with its count header, and the dispatch command over it
13
16
  */
14
17
  export function graph_prepare_meshlet_draw_commands_by_material({ graph, materials, bucket_id, limits, buckets, hzb, camera, scene, resolution, label, }: FrameGraph): {
15
- meshlets: any;
16
- draw_commands: any;
18
+ meshlets: number;
19
+ draw_commands: number;
20
+ meshlet_collection: number;
21
+ meshlet_iterator_command: number;
17
22
  };
18
23
  //# sourceMappingURL=prepare_meshlet_draw_commands_by_material.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prepare_meshlet_draw_commands_by_material.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js"],"names":[],"mappings":"AA2BA;;;;;;;;;;;;GAYG;AACH;;;EA2SC"}
1
+ {"version":3,"file":"prepare_meshlet_draw_commands_by_material.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js"],"names":[],"mappings":"AA2BA;;;;;;;;;;;;;;;GAeG;AACH;cAJwB,MAAM;mBAAiB,MAAM;wBAAsB,MAAM;8BAA4B,MAAM;EAuTlH"}
@@ -37,6 +37,9 @@ import { shader_sort_meshlets_by_material } from "./shader_sort_meshlets_by_mate
37
37
  * @param {number[]} resolution
38
38
  * @param {string} [label] used for debug
39
39
  * @param {GPUSceneContext} scene
40
+ * @returns {{meshlets: number, draw_commands: number, meshlet_collection: number, meshlet_iterator_command: number}}
41
+ * resource IDs: the material-sorted meshlet array the draws consume, one indirect draw command per
42
+ * material, the HZB-filtered collection with its count header, and the dispatch command over it
40
43
  */
41
44
  export function graph_prepare_meshlet_draw_commands_by_material({
42
45
  graph,
@@ -335,6 +338,14 @@ export function graph_prepare_meshlet_draw_commands_by_material({
335
338
 
336
339
  return {
337
340
  meshlets: sort_meshlets_by_material_data.output,
338
- draw_commands: draw_commands_data.commands
341
+ draw_commands: draw_commands_data.commands,
342
+ /*
343
+ The HZB-filtered collection *before* material sorting — the one with a `count` header — and
344
+ the indirect dispatch command that iterates it. The sorted buffer above is a bare array whose
345
+ extent only the draw commands know, so a pass that wants one thread per surviving meshlet
346
+ (the AVBOIT occupancy prepass) takes these two instead.
347
+ */
348
+ meshlet_collection: meshlets,
349
+ meshlet_iterator_command,
339
350
  }
340
351
  }
@@ -15,7 +15,7 @@ import { ComputeShader } from "../../shader/ComputeShader.js";
15
15
  import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
16
16
  import { GEOMETRY_METADATA_STRUCT } from "../../geometry/GEOMETRY_METADATA_STRUCT.js";
17
17
  import { MESH_TRIANGLE_REFERENCE_STRUCT } from "../../geometry/meshlet/MESH_TRIANGLE_REFERENCE_STRUCT.js";
18
- import { chunk_material_side_should_draw } from "../native/oit/chunk_material_side_should_draw.js";
18
+ import { chunk_material_side_should_draw } from "../forward/chunk_material_side_should_draw.js";
19
19
 
20
20
  const resources = new ShaderResourceSetDescriptor();
21
21
  resources.createGroup()
@@ -0,0 +1,3 @@
1
+ export const FORWARD_VERTEX_SHADER_STRUCT: WebGPUStruct;
2
+ import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
3
+ //# sourceMappingURL=FORWARD_VERTEX_SHADER_STRUCT.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FORWARD_VERTEX_SHADER_STRUCT.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/forward/FORWARD_VERTEX_SHADER_STRUCT.js"],"names":[],"mappings":"AAKA,wDAOE;6BAX2B,mCAAmC"}
@@ -1,7 +1,7 @@
1
- import { vec2f, vec3f, vec4f } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
- import { WebGPUStruct } from "../../../shader/type/WebGPUStruct.js";
3
- import { WGSLAttribute } from "../../../shader/type/WGSLAttribute.js";
4
- import { WGSLStructField } from "../../../shader/type/WGSLStructField.js";
1
+ import { vec2f, vec3f, vec4f } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
+ import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
3
+ import { WGSLAttribute } from "../../shader/type/WGSLAttribute.js";
4
+ import { WGSLStructField } from "../../shader/type/WGSLStructField.js";
5
5
 
6
6
  export const FORWARD_VERTEX_SHADER_STRUCT = WebGPUStruct.fromFields(
7
7
  WGSLStructField.from('position', vec4f, WGSLAttribute.from('builtin', 'position')),
@@ -0,0 +1,3 @@
1
+ export const SHADING_SCENE_RESOURCE_GROUP: ShaderResourceGroupDescriptor;
2
+ import { ShaderResourceGroupDescriptor } from "../../shader/resource/ShaderResourceGroupDescriptor.js";
3
+ //# sourceMappingURL=SHADING_SCENE_RESOURCE_GROUP.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SHADING_SCENE_RESOURCE_GROUP.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/forward/SHADING_SCENE_RESOURCE_GROUP.js"],"names":[],"mappings":"AAQA,yEAAgF;8CANlC,wDAAwD"}
@@ -0,0 +1,17 @@
1
+ import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
+ import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
3
+ import { ShaderResourceGroupDescriptor } from "../../shader/resource/ShaderResourceGroupDescriptor.js";
4
+ import { GEOMETRY_ATTRIBUTE_DATA_TYPE } from "../../geometry/GEOMETRY_ATTRIBUTE_DATA_TYPE.js";
5
+ import { GEOMETRY_METADATA_STRUCT } from "../../geometry/GEOMETRY_METADATA_STRUCT.js";
6
+ import { MESHLET_DEFINITION_STRUCT } from "../../geometry/meshlet/encoding/MESHLET_DEFINITION_STRUCT.js";
7
+ import { MESHLET_METADATA_STRUCT } from "../../geometry/meshlet/encoding/MESHLET_METADATA_STRUCT.js";
8
+
9
+ export const SHADING_SCENE_RESOURCE_GROUP = new ShaderResourceGroupDescriptor();
10
+
11
+ SHADING_SCENE_RESOURCE_GROUP
12
+ .addStorageBuffer("meshlets", WebGPUArray.from(MESHLET_DEFINITION_STRUCT))
13
+ .addStorageBuffer("meshlet_metadata", WebGPUArray.from(MESHLET_METADATA_STRUCT))
14
+ .addStorageBuffer("meshlet_data", GEOMETRY_ATTRIBUTE_DATA_TYPE)
15
+ .addStorageBuffer("scene_database", WebGPUArray.from(u32))
16
+ .addStorageBuffer("geometries", WebGPUArray.from(GEOMETRY_METADATA_STRUCT))
17
+
@@ -1,3 +1,3 @@
1
1
  export const chunk_forward_shade_standard_fragment_brick4: CodeChunk;
2
- import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
2
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
3
3
  //# sourceMappingURL=chunk_forward_shade_standard_fragment_brick4.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_forward_shade_standard_fragment_brick4.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.js"],"names":[],"mappings":"AA4BA,qEAwJC;0BA3JyB,oCAAoC"}
@@ -1,29 +1,29 @@
1
- import { chunk_shade_standard_material_direct } from "../../../deferred/chunk_shade_standard_material_direct.js";
2
- import { chunk_decode_tangent_normal } from "../../../shader/chunk/geometry/normal/chunk_decode_tangent_normal.js";
3
- import { INDIRECT_LIGHT_INTENSITY } from "../../../deferred/INDIRECT_LIGHT_INTENSITY.js";
1
+ import { chunk_shade_standard_material_direct } from "../../deferred/chunk_shade_standard_material_direct.js";
2
+ import { chunk_decode_tangent_normal } from "../../shader/chunk/geometry/normal/chunk_decode_tangent_normal.js";
3
+ import { INDIRECT_LIGHT_INTENSITY } from "../../deferred/INDIRECT_LIGHT_INTENSITY.js";
4
4
  import {
5
5
  chunk_brick4_sample_forward_indirect
6
- } from "../../../global_illumination/brick4/gpu/draw/chunk_brick4_sample_forward_indirect.js";
7
- import { BSDF_ROUGHNESS_MINIMUM } from "../../../light/environment/DEFINES.js";
8
- import { chunk_compute_specular_occlusion } from "../../../shader/chunk/brdf/chunk_compute_specular_occlusion.js";
9
- import { chunk_F_Hauber } from "../../../shader/chunk/brdf/fresnel/chunk_F_Hauber.js";
10
- import { chunk_get_view_space_depth } from "../../../shader/chunk/depth/chunk_get_view_space_depth.js";
11
- import { chunk_mat4_extract_position } from "../../../shader/chunk/geometry/mat4/chunk_mat4_extract_position.js";
6
+ } from "../../global_illumination/brick4/gpu/draw/chunk_brick4_sample_forward_indirect.js";
7
+ import { BSDF_ROUGHNESS_MINIMUM } from "../../light/environment/DEFINES.js";
8
+ import { chunk_compute_specular_occlusion } from "../../shader/chunk/brdf/chunk_compute_specular_occlusion.js";
9
+ import { chunk_F_Hauber } from "../../shader/chunk/brdf/fresnel/chunk_F_Hauber.js";
10
+ import { chunk_get_view_space_depth } from "../../shader/chunk/depth/chunk_get_view_space_depth.js";
11
+ import { chunk_mat4_extract_position } from "../../shader/chunk/geometry/mat4/chunk_mat4_extract_position.js";
12
12
  import {
13
13
  chunk_anti_alias_roughness_kaplanyan
14
- } from "../../../shader/chunk/geometry/normal/chunk_anti_alias_roughness_kaplanyan.js";
14
+ } from "../../shader/chunk/geometry/normal/chunk_anti_alias_roughness_kaplanyan.js";
15
15
  import {
16
16
  chunk_build_orthonormal_matrix_nt
17
- } from "../../../shader/chunk/geometry/normal/chunk_build_orthonormal_matrix_nt.js";
17
+ } from "../../shader/chunk/geometry/normal/chunk_build_orthonormal_matrix_nt.js";
18
18
  import {
19
19
  chunk_compute_indirect_specular
20
- } from "../../../shader/chunk/material/chunk_compute_indirect_specular.js";
20
+ } from "../../shader/chunk/material/chunk_compute_indirect_specular.js";
21
21
  import {
22
22
  chunk_dielectric_specular_color
23
- } from "../../../shader/chunk/material/chunk_dielectric_specular_color.js";
24
- import { GEOMETRIC_SHADING_INFO_STRUCT } from "../../../shader/chunk/material/GEOMETRIC_SHADING_INFO_STRUCT.js";
25
- import { MATERIAL_SHADING_INFO_STRUCT } from "../../../shader/chunk/material/MATERIAL_SHADING_INFO_STRUCT.js";
26
- import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
23
+ } from "../../shader/chunk/material/chunk_dielectric_specular_color.js";
24
+ import { GEOMETRIC_SHADING_INFO_STRUCT } from "../../shader/chunk/material/GEOMETRIC_SHADING_INFO_STRUCT.js";
25
+ import { MATERIAL_SHADING_INFO_STRUCT } from "../../shader/chunk/material/MATERIAL_SHADING_INFO_STRUCT.js";
26
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
27
27
  import { FORWARD_VERTEX_SHADER_STRUCT } from "./FORWARD_VERTEX_SHADER_STRUCT.js";
28
28
 
29
29
  export const chunk_forward_shade_standard_fragment_brick4 = CodeChunk.from(
@@ -3,5 +3,5 @@
3
3
  * Uses environment map sampling for indirect lighting instead of Brick4 probes.
4
4
  */
5
5
  export const chunk_forward_shade_standard_fragment_ibl: CodeChunk;
6
- import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
6
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
7
7
  //# sourceMappingURL=chunk_forward_shade_standard_fragment_ibl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_forward_shade_standard_fragment_ibl.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.js"],"names":[],"mappings":"AA2BA;;;GAGG;AACH,kEA6IC;0BApJyB,oCAAoC"}
@@ -1,28 +1,28 @@
1
- import { chunk_shade_standard_material_direct } from "../../../deferred/chunk_shade_standard_material_direct.js";
2
- import { chunk_decode_tangent_normal } from "../../../shader/chunk/geometry/normal/chunk_decode_tangent_normal.js";
3
- import { chunk_get_ibl_irradiance } from "../../../deferred/indirect/chunk_get_ibl_irradiance.js";
4
- import { chunk_get_ibl_radiance } from "../../../deferred/indirect/chunk_get_ibl_radiance.js";
5
- import { INDIRECT_LIGHT_INTENSITY } from "../../../deferred/INDIRECT_LIGHT_INTENSITY.js";
6
- import { BSDF_ROUGHNESS_MINIMUM } from "../../../light/environment/DEFINES.js";
7
- import { chunk_compute_specular_occlusion } from "../../../shader/chunk/brdf/chunk_compute_specular_occlusion.js";
8
- import { chunk_F_Hauber } from "../../../shader/chunk/brdf/fresnel/chunk_F_Hauber.js";
9
- import { chunk_get_view_space_depth } from "../../../shader/chunk/depth/chunk_get_view_space_depth.js";
10
- import { chunk_mat4_extract_position } from "../../../shader/chunk/geometry/mat4/chunk_mat4_extract_position.js";
1
+ import { chunk_shade_standard_material_direct } from "../../deferred/chunk_shade_standard_material_direct.js";
2
+ import { chunk_decode_tangent_normal } from "../../shader/chunk/geometry/normal/chunk_decode_tangent_normal.js";
3
+ import { chunk_get_ibl_irradiance } from "../../deferred/indirect/chunk_get_ibl_irradiance.js";
4
+ import { chunk_get_ibl_radiance } from "../../deferred/indirect/chunk_get_ibl_radiance.js";
5
+ import { INDIRECT_LIGHT_INTENSITY } from "../../deferred/INDIRECT_LIGHT_INTENSITY.js";
6
+ import { BSDF_ROUGHNESS_MINIMUM } from "../../light/environment/DEFINES.js";
7
+ import { chunk_compute_specular_occlusion } from "../../shader/chunk/brdf/chunk_compute_specular_occlusion.js";
8
+ import { chunk_F_Hauber } from "../../shader/chunk/brdf/fresnel/chunk_F_Hauber.js";
9
+ import { chunk_get_view_space_depth } from "../../shader/chunk/depth/chunk_get_view_space_depth.js";
10
+ import { chunk_mat4_extract_position } from "../../shader/chunk/geometry/mat4/chunk_mat4_extract_position.js";
11
11
  import {
12
12
  chunk_anti_alias_roughness_kaplanyan
13
- } from "../../../shader/chunk/geometry/normal/chunk_anti_alias_roughness_kaplanyan.js";
13
+ } from "../../shader/chunk/geometry/normal/chunk_anti_alias_roughness_kaplanyan.js";
14
14
  import {
15
15
  chunk_build_orthonormal_matrix_nt
16
- } from "../../../shader/chunk/geometry/normal/chunk_build_orthonormal_matrix_nt.js";
16
+ } from "../../shader/chunk/geometry/normal/chunk_build_orthonormal_matrix_nt.js";
17
17
  import {
18
18
  chunk_compute_indirect_specular
19
- } from "../../../shader/chunk/material/chunk_compute_indirect_specular.js";
19
+ } from "../../shader/chunk/material/chunk_compute_indirect_specular.js";
20
20
  import {
21
21
  chunk_dielectric_specular_color
22
- } from "../../../shader/chunk/material/chunk_dielectric_specular_color.js";
23
- import { GEOMETRIC_SHADING_INFO_STRUCT } from "../../../shader/chunk/material/GEOMETRIC_SHADING_INFO_STRUCT.js";
24
- import { MATERIAL_SHADING_INFO_STRUCT } from "../../../shader/chunk/material/MATERIAL_SHADING_INFO_STRUCT.js";
25
- import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
22
+ } from "../../shader/chunk/material/chunk_dielectric_specular_color.js";
23
+ import { GEOMETRIC_SHADING_INFO_STRUCT } from "../../shader/chunk/material/GEOMETRIC_SHADING_INFO_STRUCT.js";
24
+ import { MATERIAL_SHADING_INFO_STRUCT } from "../../shader/chunk/material/MATERIAL_SHADING_INFO_STRUCT.js";
25
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
26
26
  import { FORWARD_VERTEX_SHADER_STRUCT } from "./FORWARD_VERTEX_SHADER_STRUCT.js";
27
27
 
28
28
  /**
@@ -4,5 +4,5 @@
4
4
  * @type {CodeChunk}
5
5
  */
6
6
  export const chunk_material_side_should_draw: CodeChunk;
7
- import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
7
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
8
8
  //# sourceMappingURL=chunk_material_side_should_draw.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_material_side_should_draw.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/forward/chunk_material_side_should_draw.js"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,8CAFU,SAAS,CAmBlB;0BAxByB,oCAAoC"}
@@ -1,5 +1,5 @@
1
- import { ShadeDrawSide } from "../../../material/ShadeDrawSide.js";
2
- import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
1
+ import { ShadeDrawSide } from "../../material/ShadeDrawSide.js";
2
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
3
3
 
4
4
  /**
5
5
  * NOTE: draw_side is a {@link ShadeDrawSide} enum value, not a bitmask.
@@ -0,0 +1,3 @@
1
+ export const vertex_shader_chunk: CodeChunk;
2
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
3
+ //# sourceMappingURL=vertex_shader_chunk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vertex_shader_chunk.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/forward/vertex_shader_chunk.js"],"names":[],"mappings":"AAUA,4CAoDE;0BAvDwB,oCAAoC"}
@@ -1,11 +1,11 @@
1
- import { chunk_scene_database_access } from "../../../scene/chunk_scene_database_access.js";
1
+ import { chunk_scene_database_access } from "../../scene/chunk_scene_database_access.js";
2
2
  import {
3
3
  chunk_compute_normal_matrix_from_m4
4
- } from "../../../shader/chunk/geometry/mat4/chunk_compute_normal_matrix_from_m4.js";
4
+ } from "../../shader/chunk/geometry/mat4/chunk_compute_normal_matrix_from_m4.js";
5
5
  import {
6
6
  chunk_read_meshlet_vertex_by_draw_index
7
- } from "../../../shader/chunk/geometry/meshlet/chunk_read_meshlet_vertex_by_draw_index.js";
8
- import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
7
+ } from "../../shader/chunk/geometry/meshlet/chunk_read_meshlet_vertex_by_draw_index.js";
8
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
9
9
  import { FORWARD_VERTEX_SHADER_STRUCT } from "./FORWARD_VERTEX_SHADER_STRUCT.js";
10
10
 
11
11
  export const vertex_shader_chunk = CodeChunk.from(
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Per-renderer settings of the AVBOIT transparency mode, held on `Renderer.avboit` the way the
3
+ * other sub-systems hold theirs (`dof`, `nss`, `path_tracer`). Read every frame by the orchestrator
4
+ * and carried into the warp header, so the splat and the draw see the same value for one frame.
5
+ *
6
+ * The compile-time tunables (slice counts, downscale, curve, bias) stay in `AVBOIT_CONSTANTS.js`;
7
+ * what lives here is the one thing that changes what a material *means*, which has to be a
8
+ * runtime decision the page can flip.
9
+ */
10
+ export class AVBOITSettings {
11
+ /**
12
+ * Filter the light a transmissive surface lets through by its base colour, per channel, with
13
+ * `transmission_factor` as the weight — glTF's transmission semantics, where a red base colour
14
+ * on `transmission = 1` is red glass.
15
+ *
16
+ * Off by default because it is not what the rest of the engine does: the material model has no
17
+ * transmission colour today, the forward shader and the path tracer treat transmitted light as
18
+ * untinted, and the contract promises that flipping `transparency_mode` does not change what an
19
+ * asset looks like. On, the RGB extinction path does what the deck built it for; off, a
20
+ * transmissive surface lands where MBOIT and the tracer put it, and the per-channel plumbing
21
+ * costs nothing while it waits for a real transmission colour on the material.
22
+ *
23
+ * @type {boolean}
24
+ */
25
+ transmission_tint_from_base_color: boolean;
26
+ }
27
+ //# sourceMappingURL=AVBOITSettings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AVBOITSettings.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/avboit/AVBOITSettings.js"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH;IAEI;;;;;;;;;;;;;OAaG;IACH,mCAFU,OAAO,CAEyB;CAC7C"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Per-renderer settings of the AVBOIT transparency mode, held on `Renderer.avboit` the way the
3
+ * other sub-systems hold theirs (`dof`, `nss`, `path_tracer`). Read every frame by the orchestrator
4
+ * and carried into the warp header, so the splat and the draw see the same value for one frame.
5
+ *
6
+ * The compile-time tunables (slice counts, downscale, curve, bias) stay in `AVBOIT_CONSTANTS.js`;
7
+ * what lives here is the one thing that changes what a material *means*, which has to be a
8
+ * runtime decision the page can flip.
9
+ */
10
+ export class AVBOITSettings {
11
+
12
+ /**
13
+ * Filter the light a transmissive surface lets through by its base colour, per channel, with
14
+ * `transmission_factor` as the weight — glTF's transmission semantics, where a red base colour
15
+ * on `transmission = 1` is red glass.
16
+ *
17
+ * Off by default because it is not what the rest of the engine does: the material model has no
18
+ * transmission colour today, the forward shader and the path tracer treat transmitted light as
19
+ * untinted, and the contract promises that flipping `transparency_mode` does not change what an
20
+ * asset looks like. On, the RGB extinction path does what the deck built it for; off, a
21
+ * transmissive surface lands where MBOIT and the tracer put it, and the per-channel plumbing
22
+ * costs nothing while it waits for a real transmission colour on the material.
23
+ *
24
+ * @type {boolean}
25
+ */
26
+ transmission_tint_from_base_color = false;
27
+ }