molstar 4.1.0 → 4.2.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 (479) hide show
  1. package/build/viewer/molstar.js +1 -1
  2. package/lib/apps/mesoscale-explorer/data/cellpack/preset.d.ts +1 -1
  3. package/lib/apps/mesoscale-explorer/data/cellpack/preset.js +5 -5
  4. package/lib/apps/mesoscale-explorer/data/generic/preset.d.ts +1 -1
  5. package/lib/apps/mesoscale-explorer/data/generic/preset.js +3 -3
  6. package/lib/apps/mesoscale-explorer/data/mmcif/preset.d.ts +1 -1
  7. package/lib/apps/mesoscale-explorer/data/mmcif/preset.js +3 -3
  8. package/lib/apps/mesoscale-explorer/data/petworld/preset.d.ts +1 -1
  9. package/lib/apps/mesoscale-explorer/data/petworld/preset.js +3 -3
  10. package/lib/apps/mesoscale-explorer/data/state.d.ts +10 -1
  11. package/lib/apps/mesoscale-explorer/data/state.js +14 -2
  12. package/lib/apps/mesoscale-explorer/ui/entities.d.ts +7 -1
  13. package/lib/apps/mesoscale-explorer/ui/entities.js +23 -4
  14. package/lib/apps/viewer/app.d.ts +8 -2
  15. package/lib/apps/viewer/app.js +6 -6
  16. package/lib/cli/cifschema/util/cif-dic.js +1 -0
  17. package/lib/commonjs/apps/mesoscale-explorer/data/cellpack/preset.d.ts +1 -1
  18. package/lib/commonjs/apps/mesoscale-explorer/data/cellpack/preset.js +5 -5
  19. package/lib/commonjs/apps/mesoscale-explorer/data/generic/preset.d.ts +1 -1
  20. package/lib/commonjs/apps/mesoscale-explorer/data/generic/preset.js +3 -3
  21. package/lib/commonjs/apps/mesoscale-explorer/data/mmcif/preset.d.ts +1 -1
  22. package/lib/commonjs/apps/mesoscale-explorer/data/mmcif/preset.js +3 -3
  23. package/lib/commonjs/apps/mesoscale-explorer/data/petworld/preset.d.ts +1 -1
  24. package/lib/commonjs/apps/mesoscale-explorer/data/petworld/preset.js +3 -3
  25. package/lib/commonjs/apps/mesoscale-explorer/data/state.d.ts +10 -1
  26. package/lib/commonjs/apps/mesoscale-explorer/data/state.js +15 -3
  27. package/lib/commonjs/apps/mesoscale-explorer/ui/entities.d.ts +7 -1
  28. package/lib/commonjs/apps/mesoscale-explorer/ui/entities.js +22 -3
  29. package/lib/commonjs/apps/viewer/app.d.ts +8 -2
  30. package/lib/commonjs/apps/viewer/app.js +6 -6
  31. package/lib/commonjs/cli/cifschema/util/cif-dic.js +1 -0
  32. package/lib/commonjs/extensions/anvil/behavior.d.ts +1 -0
  33. package/lib/commonjs/extensions/anvil/representation.d.ts +5 -0
  34. package/lib/commonjs/extensions/assembly-symmetry/behavior.d.ts +1 -0
  35. package/lib/commonjs/extensions/assembly-symmetry/representation.d.ts +1 -0
  36. package/lib/commonjs/extensions/dnatco/confal-pyramids/representation.d.ts +3 -0
  37. package/lib/commonjs/extensions/dnatco/ntc-tube/representation.d.ts +3 -0
  38. package/lib/commonjs/extensions/geo-export/glb-exporter.d.ts +1 -1
  39. package/lib/commonjs/extensions/geo-export/glb-exporter.js +6 -4
  40. package/lib/commonjs/extensions/mvs/camera.d.ts +2 -0
  41. package/lib/commonjs/extensions/mvs/camera.js +29 -2
  42. package/lib/commonjs/extensions/mvs/components/annotation-label/representation.d.ts +2 -0
  43. package/lib/commonjs/extensions/mvs/components/annotation-label/visual.d.ts +1 -0
  44. package/lib/commonjs/extensions/mvs/components/custom-label/representation.d.ts +2 -0
  45. package/lib/commonjs/extensions/mvs/components/custom-label/visual.d.ts +1 -0
  46. package/lib/commonjs/extensions/mvs/components/formats.d.ts +2 -0
  47. package/lib/commonjs/extensions/mvs/components/formats.js +2 -1
  48. package/lib/commonjs/extensions/mvs/load.d.ts +2 -0
  49. package/lib/commonjs/extensions/mvs/load.js +12 -6
  50. package/lib/commonjs/extensions/rcsb/validation-report/representation.d.ts +5 -0
  51. package/lib/commonjs/mol-canvas3d/canvas3d.d.ts +14 -0
  52. package/lib/commonjs/mol-canvas3d/helper/handle-helper.d.ts +1 -0
  53. package/lib/commonjs/mol-canvas3d/helper/helper.d.ts +2 -0
  54. package/lib/commonjs/mol-canvas3d/passes/bloom.d.ts +37 -0
  55. package/lib/commonjs/mol-canvas3d/passes/bloom.js +272 -0
  56. package/lib/commonjs/mol-canvas3d/passes/draw.d.ts +11 -7
  57. package/lib/commonjs/mol-canvas3d/passes/draw.js +23 -3
  58. package/lib/commonjs/mol-canvas3d/passes/image.d.ts +6 -0
  59. package/lib/commonjs/mol-canvas3d/passes/postprocessing.d.ts +30 -5
  60. package/lib/commonjs/mol-canvas3d/passes/postprocessing.js +27 -32
  61. package/lib/commonjs/mol-geo/geometry/base.d.ts +3 -1
  62. package/lib/commonjs/mol-geo/geometry/base.js +4 -1
  63. package/lib/commonjs/mol-geo/geometry/cylinders/cylinders.d.ts +2 -1
  64. package/lib/commonjs/mol-geo/geometry/cylinders/cylinders.js +4 -1
  65. package/lib/commonjs/mol-geo/geometry/direct-volume/direct-volume.d.ts +2 -1
  66. package/lib/commonjs/mol-geo/geometry/direct-volume/direct-volume.js +4 -1
  67. package/lib/commonjs/mol-geo/geometry/emissive-data.d.ts +26 -0
  68. package/lib/commonjs/mol-geo/geometry/emissive-data.js +80 -0
  69. package/lib/commonjs/mol-geo/geometry/image/image.d.ts +2 -1
  70. package/lib/commonjs/mol-geo/geometry/image/image.js +4 -1
  71. package/lib/commonjs/mol-geo/geometry/lines/lines.d.ts +3 -1
  72. package/lib/commonjs/mol-geo/geometry/lines/lines.js +4 -1
  73. package/lib/commonjs/mol-geo/geometry/mesh/color-smoothing.d.ts +2 -1
  74. package/lib/commonjs/mol-geo/geometry/mesh/color-smoothing.js +36 -2
  75. package/lib/commonjs/mol-geo/geometry/mesh/mesh.d.ts +2 -1
  76. package/lib/commonjs/mol-geo/geometry/mesh/mesh.js +4 -1
  77. package/lib/commonjs/mol-geo/geometry/points/points.d.ts +2 -2
  78. package/lib/commonjs/mol-geo/geometry/points/points.js +4 -1
  79. package/lib/commonjs/mol-geo/geometry/spheres/spheres.d.ts +2 -2
  80. package/lib/commonjs/mol-geo/geometry/spheres/spheres.js +7 -3
  81. package/lib/commonjs/mol-geo/geometry/text/text.d.ts +2 -1
  82. package/lib/commonjs/mol-geo/geometry/text/text.js +4 -1
  83. package/lib/commonjs/mol-geo/geometry/texture-mesh/color-smoothing.d.ts +2 -1
  84. package/lib/commonjs/mol-geo/geometry/texture-mesh/color-smoothing.js +34 -2
  85. package/lib/commonjs/mol-geo/geometry/texture-mesh/texture-mesh.d.ts +2 -1
  86. package/lib/commonjs/mol-geo/geometry/texture-mesh/texture-mesh.js +3 -0
  87. package/lib/commonjs/mol-gl/renderable/cylinders.d.ts +10 -0
  88. package/lib/commonjs/mol-gl/renderable/direct-volume.d.ts +10 -0
  89. package/lib/commonjs/mol-gl/renderable/image.d.ts +10 -0
  90. package/lib/commonjs/mol-gl/renderable/lines.d.ts +10 -0
  91. package/lib/commonjs/mol-gl/renderable/mesh.d.ts +10 -0
  92. package/lib/commonjs/mol-gl/renderable/points.d.ts +10 -0
  93. package/lib/commonjs/mol-gl/renderable/schema.d.ts +24 -1
  94. package/lib/commonjs/mol-gl/renderable/schema.js +15 -2
  95. package/lib/commonjs/mol-gl/renderable/spheres.d.ts +10 -0
  96. package/lib/commonjs/mol-gl/renderable/text.d.ts +10 -0
  97. package/lib/commonjs/mol-gl/renderable/texture-mesh.d.ts +10 -0
  98. package/lib/commonjs/mol-gl/renderable.d.ts +1 -1
  99. package/lib/commonjs/mol-gl/renderable.js +2 -2
  100. package/lib/commonjs/mol-gl/renderer.d.ts +2 -1
  101. package/lib/commonjs/mol-gl/renderer.js +58 -49
  102. package/lib/commonjs/mol-gl/scene.d.ts +3 -1
  103. package/lib/commonjs/mol-gl/scene.js +26 -1
  104. package/lib/commonjs/mol-gl/shader/bloom/blur.frag.d.ts +1 -0
  105. package/lib/commonjs/mol-gl/shader/bloom/blur.frag.js +32 -0
  106. package/lib/commonjs/mol-gl/shader/bloom/composite.frag.d.ts +1 -0
  107. package/lib/commonjs/mol-gl/shader/bloom/composite.frag.js +37 -0
  108. package/lib/commonjs/mol-gl/shader/bloom/luminosity.frag.d.ts +1 -0
  109. package/lib/commonjs/mol-gl/shader/bloom/luminosity.frag.js +56 -0
  110. package/lib/commonjs/mol-gl/shader/chunks/apply-light-color.glsl.d.ts +2 -2
  111. package/lib/commonjs/mol-gl/shader/chunks/apply-light-color.glsl.js +10 -2
  112. package/lib/commonjs/mol-gl/shader/chunks/assign-color-varying.glsl.d.ts +1 -1
  113. package/lib/commonjs/mol-gl/shader/chunks/assign-color-varying.glsl.js +28 -0
  114. package/lib/commonjs/mol-gl/shader/chunks/assign-material-color.glsl.d.ts +1 -1
  115. package/lib/commonjs/mol-gl/shader/chunks/assign-material-color.glsl.js +20 -31
  116. package/lib/commonjs/mol-gl/shader/chunks/check-transparency.glsl.d.ts +1 -0
  117. package/lib/commonjs/mol-gl/shader/chunks/check-transparency.glsl.js +20 -0
  118. package/lib/commonjs/mol-gl/shader/chunks/color-frag-params.glsl.d.ts +1 -1
  119. package/lib/commonjs/mol-gl/shader/chunks/color-frag-params.glsl.js +9 -0
  120. package/lib/commonjs/mol-gl/shader/chunks/color-vert-params.glsl.d.ts +1 -1
  121. package/lib/commonjs/mol-gl/shader/chunks/color-vert-params.glsl.js +30 -0
  122. package/lib/commonjs/mol-gl/shader/chunks/common-frag-params.glsl.d.ts +1 -1
  123. package/lib/commonjs/mol-gl/shader/chunks/common-frag-params.glsl.js +1 -0
  124. package/lib/commonjs/mol-gl/shader/cylinders.frag.d.ts +2 -2
  125. package/lib/commonjs/mol-gl/shader/cylinders.frag.js +4 -1
  126. package/lib/commonjs/mol-gl/shader/direct-volume.frag.d.ts +1 -1
  127. package/lib/commonjs/mol-gl/shader/direct-volume.frag.js +17 -11
  128. package/lib/commonjs/mol-gl/shader/image.frag.d.ts +2 -2
  129. package/lib/commonjs/mol-gl/shader/image.frag.js +14 -5
  130. package/lib/commonjs/mol-gl/shader/lines.frag.d.ts +2 -2
  131. package/lib/commonjs/mol-gl/shader/lines.frag.js +4 -1
  132. package/lib/commonjs/mol-gl/shader/mesh.frag.d.ts +2 -2
  133. package/lib/commonjs/mol-gl/shader/mesh.frag.js +4 -1
  134. package/lib/commonjs/mol-gl/shader/points.frag.d.ts +2 -2
  135. package/lib/commonjs/mol-gl/shader/points.frag.js +9 -5
  136. package/lib/commonjs/mol-gl/shader/spheres.frag.d.ts +2 -2
  137. package/lib/commonjs/mol-gl/shader/spheres.frag.js +11 -5
  138. package/lib/commonjs/mol-gl/shader/ssao-blur.frag.d.ts +3 -2
  139. package/lib/commonjs/mol-gl/shader/ssao-blur.frag.js +7 -8
  140. package/lib/commonjs/mol-gl/shader/ssao.frag.d.ts +3 -2
  141. package/lib/commonjs/mol-gl/shader/ssao.frag.js +56 -17
  142. package/lib/commonjs/mol-gl/shader/text.frag.d.ts +2 -2
  143. package/lib/commonjs/mol-gl/shader/text.frag.js +6 -4
  144. package/lib/commonjs/mol-gl/shader-code.d.ts +1 -1
  145. package/lib/commonjs/mol-gl/shader-code.js +9 -3
  146. package/lib/commonjs/mol-gl/webgl/render-item.d.ts +3 -2
  147. package/lib/commonjs/mol-gl/webgl/render-item.js +1 -1
  148. package/lib/commonjs/mol-io/reader/cif/schema/bird.d.ts +1 -1
  149. package/lib/commonjs/mol-io/reader/cif/schema/bird.js +1 -1
  150. package/lib/commonjs/mol-io/reader/cif/schema/ccd.d.ts +1 -1
  151. package/lib/commonjs/mol-io/reader/cif/schema/ccd.js +1 -1
  152. package/lib/commonjs/mol-io/reader/cif/schema/mmcif.d.ts +1 -1
  153. package/lib/commonjs/mol-io/reader/cif/schema/mmcif.js +1 -1
  154. package/lib/commonjs/mol-model/structure/model/types/saccharides.js +1 -1
  155. package/lib/commonjs/mol-model/structure/structure/unit/bonds/data.d.ts +9 -6
  156. package/lib/commonjs/mol-model/structure/structure/unit/bonds/data.js +1 -1
  157. package/lib/commonjs/mol-model/structure/structure/unit/bonds/inter-compute.d.ts +1 -1
  158. package/lib/commonjs/mol-model/structure/structure/unit/bonds/inter-compute.js +7 -4
  159. package/lib/commonjs/mol-model/structure/structure/unit/bonds/intra-compute.d.ts +1 -1
  160. package/lib/commonjs/mol-model/structure/structure/unit/bonds/intra-compute.js +10 -6
  161. package/lib/commonjs/mol-model/structure/structure/unit.d.ts +1 -1
  162. package/lib/commonjs/mol-model/structure/structure/unit.js +5 -2
  163. package/lib/commonjs/mol-model-formats/shape/ply.d.ts +2 -0
  164. package/lib/commonjs/mol-model-formats/structure/property/bonds/index-pair.d.ts +4 -1
  165. package/lib/commonjs/mol-model-formats/structure/property/bonds/index-pair.js +6 -3
  166. package/lib/commonjs/mol-model-props/computed/representations/interactions-inter-unit-cylinder.d.ts +1 -0
  167. package/lib/commonjs/mol-model-props/computed/representations/interactions-intra-unit-cylinder.d.ts +1 -0
  168. package/lib/commonjs/mol-model-props/computed/representations/interactions.d.ts +3 -0
  169. package/lib/commonjs/mol-model-props/integrative/cross-link-restraint/representation.d.ts +4 -0
  170. package/lib/commonjs/mol-plugin/commands.d.ts +1 -208
  171. package/lib/commonjs/mol-plugin-state/helpers/structure-emissive.d.ts +12 -0
  172. package/lib/commonjs/mol-plugin-state/helpers/structure-emissive.js +69 -0
  173. package/lib/commonjs/mol-plugin-state/manager/structure/component.d.ts +3 -1
  174. package/lib/commonjs/mol-plugin-state/manager/structure/component.js +9 -1
  175. package/lib/commonjs/mol-plugin-state/manager/structure/measurement.d.ts +341 -9
  176. package/lib/commonjs/mol-plugin-state/manager/structure/measurement.js +32 -19
  177. package/lib/commonjs/mol-plugin-state/transforms/representation.d.ts +25 -0
  178. package/lib/commonjs/mol-plugin-state/transforms/representation.js +121 -6
  179. package/lib/commonjs/mol-repr/representation.d.ts +6 -2
  180. package/lib/commonjs/mol-repr/representation.js +12 -2
  181. package/lib/commonjs/mol-repr/shape/loci/angle.d.ts +1 -0
  182. package/lib/commonjs/mol-repr/shape/loci/common.d.ts +1 -0
  183. package/lib/commonjs/mol-repr/shape/loci/dihedral.d.ts +1 -0
  184. package/lib/commonjs/mol-repr/shape/loci/distance.d.ts +1 -0
  185. package/lib/commonjs/mol-repr/shape/loci/label.d.ts +1 -0
  186. package/lib/commonjs/mol-repr/shape/loci/orientation.d.ts +1 -0
  187. package/lib/commonjs/mol-repr/shape/loci/plane.d.ts +1 -0
  188. package/lib/commonjs/mol-repr/shape/model/unitcell.d.ts +1 -0
  189. package/lib/commonjs/mol-repr/structure/complex-representation.d.ts +1 -1
  190. package/lib/commonjs/mol-repr/structure/complex-representation.js +7 -1
  191. package/lib/commonjs/mol-repr/structure/complex-visual.d.ts +8 -1
  192. package/lib/commonjs/mol-repr/structure/complex-visual.js +5 -1
  193. package/lib/commonjs/mol-repr/structure/params.d.ts +8 -0
  194. package/lib/commonjs/mol-repr/structure/registry.d.ts +14 -0
  195. package/lib/commonjs/mol-repr/structure/representation/backbone.d.ts +3 -0
  196. package/lib/commonjs/mol-repr/structure/representation/ball-and-stick.d.ts +3 -0
  197. package/lib/commonjs/mol-repr/structure/representation/carbohydrate.d.ts +3 -0
  198. package/lib/commonjs/mol-repr/structure/representation/cartoon.d.ts +3 -0
  199. package/lib/commonjs/mol-repr/structure/representation/ellipsoid.d.ts +3 -0
  200. package/lib/commonjs/mol-repr/structure/representation/gaussian-surface.d.ts +3 -0
  201. package/lib/commonjs/mol-repr/structure/representation/gaussian-volume.d.ts +3 -0
  202. package/lib/commonjs/mol-repr/structure/representation/label.d.ts +3 -0
  203. package/lib/commonjs/mol-repr/structure/representation/line.d.ts +3 -0
  204. package/lib/commonjs/mol-repr/structure/representation/molecular-surface.d.ts +3 -0
  205. package/lib/commonjs/mol-repr/structure/representation/orientation.d.ts +3 -0
  206. package/lib/commonjs/mol-repr/structure/representation/point.d.ts +3 -0
  207. package/lib/commonjs/mol-repr/structure/representation/putty.d.ts +3 -0
  208. package/lib/commonjs/mol-repr/structure/representation/spacefill.d.ts +3 -0
  209. package/lib/commonjs/mol-repr/structure/units-representation.d.ts +1 -1
  210. package/lib/commonjs/mol-repr/structure/units-representation.js +9 -3
  211. package/lib/commonjs/mol-repr/structure/units-visual.d.ts +9 -1
  212. package/lib/commonjs/mol-repr/structure/units-visual.js +5 -1
  213. package/lib/commonjs/mol-repr/structure/visual/bond-inter-unit-cylinder.d.ts +2 -0
  214. package/lib/commonjs/mol-repr/structure/visual/bond-inter-unit-line.d.ts +1 -0
  215. package/lib/commonjs/mol-repr/structure/visual/bond-intra-unit-cylinder.d.ts +2 -0
  216. package/lib/commonjs/mol-repr/structure/visual/bond-intra-unit-line.d.ts +1 -0
  217. package/lib/commonjs/mol-repr/structure/visual/carbohydrate-link-cylinder.d.ts +1 -0
  218. package/lib/commonjs/mol-repr/structure/visual/carbohydrate-symbol-mesh.d.ts +1 -0
  219. package/lib/commonjs/mol-repr/structure/visual/carbohydrate-terminal-link-cylinder.d.ts +1 -0
  220. package/lib/commonjs/mol-repr/structure/visual/element-cross.d.ts +1 -0
  221. package/lib/commonjs/mol-repr/structure/visual/element-point.d.ts +1 -0
  222. package/lib/commonjs/mol-repr/structure/visual/element-sphere.d.ts +4 -0
  223. package/lib/commonjs/mol-repr/structure/visual/ellipsoid-mesh.d.ts +1 -0
  224. package/lib/commonjs/mol-repr/structure/visual/gaussian-density-volume.d.ts +2 -0
  225. package/lib/commonjs/mol-repr/structure/visual/gaussian-surface-mesh.d.ts +4 -0
  226. package/lib/commonjs/mol-repr/structure/visual/gaussian-surface-wireframe.d.ts +1 -0
  227. package/lib/commonjs/mol-repr/structure/visual/label-text.d.ts +1 -0
  228. package/lib/commonjs/mol-repr/structure/visual/molecular-surface-mesh.d.ts +1 -0
  229. package/lib/commonjs/mol-repr/structure/visual/molecular-surface-wireframe.d.ts +1 -0
  230. package/lib/commonjs/mol-repr/structure/visual/nucleotide-atomic-bond.d.ts +2 -0
  231. package/lib/commonjs/mol-repr/structure/visual/nucleotide-atomic-element.d.ts +2 -0
  232. package/lib/commonjs/mol-repr/structure/visual/nucleotide-atomic-ring-fill.d.ts +1 -0
  233. package/lib/commonjs/mol-repr/structure/visual/nucleotide-block-mesh.d.ts +1 -0
  234. package/lib/commonjs/mol-repr/structure/visual/nucleotide-ring-mesh.d.ts +1 -0
  235. package/lib/commonjs/mol-repr/structure/visual/orientation-ellipsoid-mesh.d.ts +1 -0
  236. package/lib/commonjs/mol-repr/structure/visual/polymer-backbone-cylinder.d.ts +2 -0
  237. package/lib/commonjs/mol-repr/structure/visual/polymer-backbone-sphere.d.ts +2 -0
  238. package/lib/commonjs/mol-repr/structure/visual/polymer-direction-wedge.d.ts +1 -0
  239. package/lib/commonjs/mol-repr/structure/visual/polymer-gap-cylinder.d.ts +1 -0
  240. package/lib/commonjs/mol-repr/structure/visual/polymer-trace-mesh.d.ts +1 -0
  241. package/lib/commonjs/mol-repr/structure/visual/polymer-tube-mesh.d.ts +1 -0
  242. package/lib/commonjs/mol-repr/visual.d.ts +6 -1
  243. package/lib/commonjs/mol-repr/visual.js +55 -1
  244. package/lib/commonjs/mol-repr/volume/direct-volume.d.ts +3 -0
  245. package/lib/commonjs/mol-repr/volume/isosurface.d.ts +6 -0
  246. package/lib/commonjs/mol-repr/volume/registry.d.ts +4 -0
  247. package/lib/commonjs/mol-repr/volume/representation.d.ts +2 -1
  248. package/lib/commonjs/mol-repr/volume/representation.js +9 -2
  249. package/lib/commonjs/mol-repr/volume/segment.d.ts +5 -0
  250. package/lib/commonjs/mol-repr/volume/slice.d.ts +3 -0
  251. package/lib/commonjs/mol-theme/emissive.d.ts +40 -0
  252. package/lib/commonjs/mol-theme/emissive.js +137 -0
  253. package/lib/commonjs/mol-util/set.d.ts +1 -1
  254. package/lib/commonjs/mol-util/set.js +17 -1
  255. package/lib/extensions/anvil/behavior.d.ts +1 -0
  256. package/lib/extensions/anvil/representation.d.ts +5 -0
  257. package/lib/extensions/assembly-symmetry/behavior.d.ts +1 -0
  258. package/lib/extensions/assembly-symmetry/representation.d.ts +1 -0
  259. package/lib/extensions/dnatco/confal-pyramids/representation.d.ts +3 -0
  260. package/lib/extensions/dnatco/ntc-tube/representation.d.ts +3 -0
  261. package/lib/extensions/geo-export/glb-exporter.d.ts +1 -1
  262. package/lib/extensions/geo-export/glb-exporter.js +6 -4
  263. package/lib/extensions/mvs/camera.d.ts +2 -0
  264. package/lib/extensions/mvs/camera.js +27 -1
  265. package/lib/extensions/mvs/components/annotation-label/representation.d.ts +2 -0
  266. package/lib/extensions/mvs/components/annotation-label/visual.d.ts +1 -0
  267. package/lib/extensions/mvs/components/custom-label/representation.d.ts +2 -0
  268. package/lib/extensions/mvs/components/custom-label/visual.d.ts +1 -0
  269. package/lib/extensions/mvs/components/formats.d.ts +2 -0
  270. package/lib/extensions/mvs/components/formats.js +2 -1
  271. package/lib/extensions/mvs/load.d.ts +2 -0
  272. package/lib/extensions/mvs/load.js +13 -7
  273. package/lib/extensions/rcsb/validation-report/representation.d.ts +5 -0
  274. package/lib/mol-canvas3d/canvas3d.d.ts +14 -0
  275. package/lib/mol-canvas3d/helper/handle-helper.d.ts +1 -0
  276. package/lib/mol-canvas3d/helper/helper.d.ts +2 -0
  277. package/lib/mol-canvas3d/passes/bloom.d.ts +37 -0
  278. package/lib/mol-canvas3d/passes/bloom.js +268 -0
  279. package/lib/mol-canvas3d/passes/draw.d.ts +11 -7
  280. package/lib/mol-canvas3d/passes/draw.js +23 -3
  281. package/lib/mol-canvas3d/passes/image.d.ts +6 -0
  282. package/lib/mol-canvas3d/passes/postprocessing.d.ts +30 -5
  283. package/lib/mol-canvas3d/passes/postprocessing.js +25 -31
  284. package/lib/mol-geo/geometry/base.d.ts +3 -1
  285. package/lib/mol-geo/geometry/base.js +4 -1
  286. package/lib/mol-geo/geometry/cylinders/cylinders.d.ts +2 -1
  287. package/lib/mol-geo/geometry/cylinders/cylinders.js +4 -1
  288. package/lib/mol-geo/geometry/direct-volume/direct-volume.d.ts +2 -1
  289. package/lib/mol-geo/geometry/direct-volume/direct-volume.js +4 -1
  290. package/lib/mol-geo/geometry/emissive-data.d.ts +26 -0
  291. package/lib/mol-geo/geometry/emissive-data.js +72 -0
  292. package/lib/mol-geo/geometry/image/image.d.ts +2 -1
  293. package/lib/mol-geo/geometry/image/image.js +4 -1
  294. package/lib/mol-geo/geometry/lines/lines.d.ts +3 -1
  295. package/lib/mol-geo/geometry/lines/lines.js +4 -1
  296. package/lib/mol-geo/geometry/mesh/color-smoothing.d.ts +2 -1
  297. package/lib/mol-geo/geometry/mesh/color-smoothing.js +34 -1
  298. package/lib/mol-geo/geometry/mesh/mesh.d.ts +2 -1
  299. package/lib/mol-geo/geometry/mesh/mesh.js +4 -1
  300. package/lib/mol-geo/geometry/points/points.d.ts +2 -2
  301. package/lib/mol-geo/geometry/points/points.js +4 -1
  302. package/lib/mol-geo/geometry/spheres/spheres.d.ts +2 -2
  303. package/lib/mol-geo/geometry/spheres/spheres.js +7 -3
  304. package/lib/mol-geo/geometry/text/text.d.ts +2 -1
  305. package/lib/mol-geo/geometry/text/text.js +4 -1
  306. package/lib/mol-geo/geometry/texture-mesh/color-smoothing.d.ts +2 -1
  307. package/lib/mol-geo/geometry/texture-mesh/color-smoothing.js +32 -1
  308. package/lib/mol-geo/geometry/texture-mesh/texture-mesh.d.ts +2 -1
  309. package/lib/mol-geo/geometry/texture-mesh/texture-mesh.js +3 -0
  310. package/lib/mol-gl/renderable/cylinders.d.ts +10 -0
  311. package/lib/mol-gl/renderable/direct-volume.d.ts +10 -0
  312. package/lib/mol-gl/renderable/image.d.ts +10 -0
  313. package/lib/mol-gl/renderable/lines.d.ts +10 -0
  314. package/lib/mol-gl/renderable/mesh.d.ts +10 -0
  315. package/lib/mol-gl/renderable/points.d.ts +10 -0
  316. package/lib/mol-gl/renderable/schema.d.ts +24 -1
  317. package/lib/mol-gl/renderable/schema.js +14 -1
  318. package/lib/mol-gl/renderable/spheres.d.ts +10 -0
  319. package/lib/mol-gl/renderable/text.d.ts +10 -0
  320. package/lib/mol-gl/renderable/texture-mesh.d.ts +10 -0
  321. package/lib/mol-gl/renderable.d.ts +1 -1
  322. package/lib/mol-gl/renderable.js +2 -2
  323. package/lib/mol-gl/renderer.d.ts +2 -1
  324. package/lib/mol-gl/renderer.js +58 -49
  325. package/lib/mol-gl/scene.d.ts +3 -1
  326. package/lib/mol-gl/scene.js +26 -1
  327. package/lib/mol-gl/shader/bloom/blur.frag.d.ts +1 -0
  328. package/lib/mol-gl/shader/bloom/blur.frag.js +29 -0
  329. package/lib/mol-gl/shader/bloom/composite.frag.d.ts +1 -0
  330. package/lib/mol-gl/shader/bloom/composite.frag.js +34 -0
  331. package/lib/mol-gl/shader/bloom/luminosity.frag.d.ts +1 -0
  332. package/lib/mol-gl/shader/bloom/luminosity.frag.js +53 -0
  333. package/lib/mol-gl/shader/chunks/apply-light-color.glsl.d.ts +2 -2
  334. package/lib/mol-gl/shader/chunks/apply-light-color.glsl.js +10 -2
  335. package/lib/mol-gl/shader/chunks/assign-color-varying.glsl.d.ts +1 -1
  336. package/lib/mol-gl/shader/chunks/assign-color-varying.glsl.js +28 -0
  337. package/lib/mol-gl/shader/chunks/assign-material-color.glsl.d.ts +1 -1
  338. package/lib/mol-gl/shader/chunks/assign-material-color.glsl.js +20 -31
  339. package/lib/mol-gl/shader/chunks/check-transparency.glsl.d.ts +1 -0
  340. package/lib/mol-gl/shader/chunks/check-transparency.glsl.js +17 -0
  341. package/lib/mol-gl/shader/chunks/color-frag-params.glsl.d.ts +1 -1
  342. package/lib/mol-gl/shader/chunks/color-frag-params.glsl.js +9 -0
  343. package/lib/mol-gl/shader/chunks/color-vert-params.glsl.d.ts +1 -1
  344. package/lib/mol-gl/shader/chunks/color-vert-params.glsl.js +30 -0
  345. package/lib/mol-gl/shader/chunks/common-frag-params.glsl.d.ts +1 -1
  346. package/lib/mol-gl/shader/chunks/common-frag-params.glsl.js +1 -0
  347. package/lib/mol-gl/shader/cylinders.frag.d.ts +2 -2
  348. package/lib/mol-gl/shader/cylinders.frag.js +4 -1
  349. package/lib/mol-gl/shader/direct-volume.frag.d.ts +1 -1
  350. package/lib/mol-gl/shader/direct-volume.frag.js +17 -11
  351. package/lib/mol-gl/shader/image.frag.d.ts +2 -2
  352. package/lib/mol-gl/shader/image.frag.js +14 -5
  353. package/lib/mol-gl/shader/lines.frag.d.ts +2 -2
  354. package/lib/mol-gl/shader/lines.frag.js +4 -1
  355. package/lib/mol-gl/shader/mesh.frag.d.ts +2 -2
  356. package/lib/mol-gl/shader/mesh.frag.js +4 -1
  357. package/lib/mol-gl/shader/points.frag.d.ts +2 -2
  358. package/lib/mol-gl/shader/points.frag.js +9 -5
  359. package/lib/mol-gl/shader/spheres.frag.d.ts +2 -2
  360. package/lib/mol-gl/shader/spheres.frag.js +11 -5
  361. package/lib/mol-gl/shader/ssao-blur.frag.d.ts +3 -2
  362. package/lib/mol-gl/shader/ssao-blur.frag.js +7 -8
  363. package/lib/mol-gl/shader/ssao.frag.d.ts +3 -2
  364. package/lib/mol-gl/shader/ssao.frag.js +56 -17
  365. package/lib/mol-gl/shader/text.frag.d.ts +2 -2
  366. package/lib/mol-gl/shader/text.frag.js +6 -4
  367. package/lib/mol-gl/shader-code.d.ts +1 -1
  368. package/lib/mol-gl/shader-code.js +9 -3
  369. package/lib/mol-gl/webgl/render-item.d.ts +3 -2
  370. package/lib/mol-gl/webgl/render-item.js +1 -1
  371. package/lib/mol-io/reader/cif/schema/bird.d.ts +1 -1
  372. package/lib/mol-io/reader/cif/schema/bird.js +1 -1
  373. package/lib/mol-io/reader/cif/schema/ccd.d.ts +1 -1
  374. package/lib/mol-io/reader/cif/schema/ccd.js +1 -1
  375. package/lib/mol-io/reader/cif/schema/mmcif.d.ts +1 -1
  376. package/lib/mol-io/reader/cif/schema/mmcif.js +1 -1
  377. package/lib/mol-model/structure/model/types/saccharides.js +1 -1
  378. package/lib/mol-model/structure/structure/unit/bonds/data.d.ts +9 -6
  379. package/lib/mol-model/structure/structure/unit/bonds/data.js +1 -1
  380. package/lib/mol-model/structure/structure/unit/bonds/inter-compute.d.ts +1 -1
  381. package/lib/mol-model/structure/structure/unit/bonds/inter-compute.js +7 -4
  382. package/lib/mol-model/structure/structure/unit/bonds/intra-compute.d.ts +1 -1
  383. package/lib/mol-model/structure/structure/unit/bonds/intra-compute.js +10 -6
  384. package/lib/mol-model/structure/structure/unit.d.ts +1 -1
  385. package/lib/mol-model/structure/structure/unit.js +5 -2
  386. package/lib/mol-model-formats/shape/ply.d.ts +2 -0
  387. package/lib/mol-model-formats/structure/property/bonds/index-pair.d.ts +4 -1
  388. package/lib/mol-model-formats/structure/property/bonds/index-pair.js +6 -3
  389. package/lib/mol-model-props/computed/representations/interactions-inter-unit-cylinder.d.ts +1 -0
  390. package/lib/mol-model-props/computed/representations/interactions-intra-unit-cylinder.d.ts +1 -0
  391. package/lib/mol-model-props/computed/representations/interactions.d.ts +3 -0
  392. package/lib/mol-model-props/integrative/cross-link-restraint/representation.d.ts +4 -0
  393. package/lib/mol-plugin/commands.d.ts +1 -208
  394. package/lib/mol-plugin/version.js +2 -2
  395. package/lib/mol-plugin-state/helpers/structure-emissive.d.ts +12 -0
  396. package/lib/mol-plugin-state/helpers/structure-emissive.js +64 -0
  397. package/lib/mol-plugin-state/manager/structure/component.d.ts +3 -1
  398. package/lib/mol-plugin-state/manager/structure/component.js +9 -1
  399. package/lib/mol-plugin-state/manager/structure/measurement.d.ts +341 -9
  400. package/lib/mol-plugin-state/manager/structure/measurement.js +32 -19
  401. package/lib/mol-plugin-state/transforms/representation.d.ts +25 -0
  402. package/lib/mol-plugin-state/transforms/representation.js +120 -5
  403. package/lib/mol-repr/representation.d.ts +6 -2
  404. package/lib/mol-repr/representation.js +12 -2
  405. package/lib/mol-repr/shape/loci/angle.d.ts +1 -0
  406. package/lib/mol-repr/shape/loci/common.d.ts +1 -0
  407. package/lib/mol-repr/shape/loci/dihedral.d.ts +1 -0
  408. package/lib/mol-repr/shape/loci/distance.d.ts +1 -0
  409. package/lib/mol-repr/shape/loci/label.d.ts +1 -0
  410. package/lib/mol-repr/shape/loci/orientation.d.ts +1 -0
  411. package/lib/mol-repr/shape/loci/plane.d.ts +1 -0
  412. package/lib/mol-repr/shape/model/unitcell.d.ts +1 -0
  413. package/lib/mol-repr/structure/complex-representation.d.ts +1 -1
  414. package/lib/mol-repr/structure/complex-representation.js +7 -1
  415. package/lib/mol-repr/structure/complex-visual.d.ts +8 -1
  416. package/lib/mol-repr/structure/complex-visual.js +5 -1
  417. package/lib/mol-repr/structure/params.d.ts +8 -0
  418. package/lib/mol-repr/structure/registry.d.ts +14 -0
  419. package/lib/mol-repr/structure/representation/backbone.d.ts +3 -0
  420. package/lib/mol-repr/structure/representation/ball-and-stick.d.ts +3 -0
  421. package/lib/mol-repr/structure/representation/carbohydrate.d.ts +3 -0
  422. package/lib/mol-repr/structure/representation/cartoon.d.ts +3 -0
  423. package/lib/mol-repr/structure/representation/ellipsoid.d.ts +3 -0
  424. package/lib/mol-repr/structure/representation/gaussian-surface.d.ts +3 -0
  425. package/lib/mol-repr/structure/representation/gaussian-volume.d.ts +3 -0
  426. package/lib/mol-repr/structure/representation/label.d.ts +3 -0
  427. package/lib/mol-repr/structure/representation/line.d.ts +3 -0
  428. package/lib/mol-repr/structure/representation/molecular-surface.d.ts +3 -0
  429. package/lib/mol-repr/structure/representation/orientation.d.ts +3 -0
  430. package/lib/mol-repr/structure/representation/point.d.ts +3 -0
  431. package/lib/mol-repr/structure/representation/putty.d.ts +3 -0
  432. package/lib/mol-repr/structure/representation/spacefill.d.ts +3 -0
  433. package/lib/mol-repr/structure/units-representation.d.ts +1 -1
  434. package/lib/mol-repr/structure/units-representation.js +9 -3
  435. package/lib/mol-repr/structure/units-visual.d.ts +9 -1
  436. package/lib/mol-repr/structure/units-visual.js +5 -1
  437. package/lib/mol-repr/structure/visual/bond-inter-unit-cylinder.d.ts +2 -0
  438. package/lib/mol-repr/structure/visual/bond-inter-unit-line.d.ts +1 -0
  439. package/lib/mol-repr/structure/visual/bond-intra-unit-cylinder.d.ts +2 -0
  440. package/lib/mol-repr/structure/visual/bond-intra-unit-line.d.ts +1 -0
  441. package/lib/mol-repr/structure/visual/carbohydrate-link-cylinder.d.ts +1 -0
  442. package/lib/mol-repr/structure/visual/carbohydrate-symbol-mesh.d.ts +1 -0
  443. package/lib/mol-repr/structure/visual/carbohydrate-terminal-link-cylinder.d.ts +1 -0
  444. package/lib/mol-repr/structure/visual/element-cross.d.ts +1 -0
  445. package/lib/mol-repr/structure/visual/element-point.d.ts +1 -0
  446. package/lib/mol-repr/structure/visual/element-sphere.d.ts +4 -0
  447. package/lib/mol-repr/structure/visual/ellipsoid-mesh.d.ts +1 -0
  448. package/lib/mol-repr/structure/visual/gaussian-density-volume.d.ts +2 -0
  449. package/lib/mol-repr/structure/visual/gaussian-surface-mesh.d.ts +4 -0
  450. package/lib/mol-repr/structure/visual/gaussian-surface-wireframe.d.ts +1 -0
  451. package/lib/mol-repr/structure/visual/label-text.d.ts +1 -0
  452. package/lib/mol-repr/structure/visual/molecular-surface-mesh.d.ts +1 -0
  453. package/lib/mol-repr/structure/visual/molecular-surface-wireframe.d.ts +1 -0
  454. package/lib/mol-repr/structure/visual/nucleotide-atomic-bond.d.ts +2 -0
  455. package/lib/mol-repr/structure/visual/nucleotide-atomic-element.d.ts +2 -0
  456. package/lib/mol-repr/structure/visual/nucleotide-atomic-ring-fill.d.ts +1 -0
  457. package/lib/mol-repr/structure/visual/nucleotide-block-mesh.d.ts +1 -0
  458. package/lib/mol-repr/structure/visual/nucleotide-ring-mesh.d.ts +1 -0
  459. package/lib/mol-repr/structure/visual/orientation-ellipsoid-mesh.d.ts +1 -0
  460. package/lib/mol-repr/structure/visual/polymer-backbone-cylinder.d.ts +2 -0
  461. package/lib/mol-repr/structure/visual/polymer-backbone-sphere.d.ts +2 -0
  462. package/lib/mol-repr/structure/visual/polymer-direction-wedge.d.ts +1 -0
  463. package/lib/mol-repr/structure/visual/polymer-gap-cylinder.d.ts +1 -0
  464. package/lib/mol-repr/structure/visual/polymer-trace-mesh.d.ts +1 -0
  465. package/lib/mol-repr/structure/visual/polymer-tube-mesh.d.ts +1 -0
  466. package/lib/mol-repr/visual.d.ts +6 -1
  467. package/lib/mol-repr/visual.js +57 -3
  468. package/lib/mol-repr/volume/direct-volume.d.ts +3 -0
  469. package/lib/mol-repr/volume/isosurface.d.ts +6 -0
  470. package/lib/mol-repr/volume/registry.d.ts +4 -0
  471. package/lib/mol-repr/volume/representation.d.ts +2 -1
  472. package/lib/mol-repr/volume/representation.js +9 -2
  473. package/lib/mol-repr/volume/segment.d.ts +5 -0
  474. package/lib/mol-repr/volume/slice.d.ts +3 -0
  475. package/lib/mol-theme/emissive.d.ts +40 -0
  476. package/lib/mol-theme/emissive.js +134 -0
  477. package/lib/mol-util/set.d.ts +1 -1
  478. package/lib/mol-util/set.js +17 -1
  479. package/package.json +19 -18
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) 2018-2023 mol* contributors, licensed under MIT, See LICENSE file for more info.
2
+ * Copyright (c) 2018-2024 mol* contributors, licensed under MIT, See LICENSE file for more info.
3
3
  *
4
4
  * @author Alexander Rose <alexander.rose@weirdbyte.de>
5
5
  * @author Gianluca Tomasello <giagitom@gmail.com>
@@ -48,6 +48,7 @@ interface Renderer {
48
48
  renderDepthTransparent: (group: Scene.Group, camera: ICamera, depthTexture: Texture | null) => void;
49
49
  renderMarkingDepth: (group: Scene.Group, camera: ICamera, depthTexture: Texture | null) => void;
50
50
  renderMarkingMask: (group: Scene.Group, camera: ICamera, depthTexture: Texture | null) => void;
51
+ renderEmissive: (group: Scene.Group, camera: ICamera, depthTexture: Texture | null) => void;
51
52
  renderBlended: (group: Scene, camera: ICamera) => void;
52
53
  renderBlendedOpaque: (group: Scene.Group, camera: ICamera, depthTexture: Texture | null) => void;
53
54
  renderBlendedTransparent: (group: Scene.Group, camera: ICamera, depthTexture: Texture | null) => void;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) 2018-2023 mol* contributors, licensed under MIT, See LICENSE file for more info.
2
+ * Copyright (c) 2018-2024 mol* contributors, licensed under MIT, See LICENSE file for more info.
3
3
  *
4
4
  * @author Alexander Rose <alexander.rose@weirdbyte.de>
5
5
  * @author Gianluca Tomasello <giagitom@gmail.com>
@@ -174,7 +174,8 @@ var Renderer;
174
174
  if (d - radius > maxDistance)
175
175
  return;
176
176
  }
177
- if (r.values.instanceGrid.ref.value.cellSize > 1 || r.values.lodLevels) {
177
+ const hasInstanceGrid = r.values.instanceGrid.ref.value.cellSize > 1;
178
+ if (hasInstanceGrid || (hasInstanceGrid && r.values.lodLevels)) {
178
179
  r.cull(cameraPlane, frustum, isOccluded, ctx.stats);
179
180
  }
180
181
  else {
@@ -301,6 +302,30 @@ var Renderer;
301
302
  globalUniformsNeedUpdate = true;
302
303
  state.currentRenderItemId = -1;
303
304
  };
305
+ const checkOpaque = function (r) {
306
+ var _a, _b, _c, _d;
307
+ // uAlpha is updated in `r.render` so we need to recompute it here
308
+ const alpha = clamp(r.values.alpha.ref.value * r.state.alphaFactor, 0, 1);
309
+ const xrayShaded = ((_a = r.values.dXrayShaded) === null || _a === void 0 ? void 0 : _a.ref.value) === 'on' || ((_b = r.values.dXrayShaded) === null || _b === void 0 ? void 0 : _b.ref.value) === 'inverted';
310
+ return ((alpha === 1 &&
311
+ r.values.transparencyAverage.ref.value !== 1 &&
312
+ r.values.dGeometryType.ref.value !== 'directVolume' &&
313
+ ((_c = r.values.dPointStyle) === null || _c === void 0 ? void 0 : _c.ref.value) !== 'fuzzy' &&
314
+ !xrayShaded) || ((_d = r.values.dTransparentBackfaces) === null || _d === void 0 ? void 0 : _d.ref.value) === 'opaque');
315
+ };
316
+ const checkTransparent = function (r) {
317
+ var _a, _b, _c;
318
+ // uAlpha is updated in `r.render` so we need to recompute it here
319
+ const alpha = clamp(r.values.alpha.ref.value * r.state.alphaFactor, 0, 1);
320
+ const xrayShaded = ((_a = r.values.dXrayShaded) === null || _a === void 0 ? void 0 : _a.ref.value) === 'on' || ((_b = r.values.dXrayShaded) === null || _b === void 0 ? void 0 : _b.ref.value) === 'inverted';
321
+ return ((alpha < 1 && alpha !== 0) ||
322
+ r.values.transparencyAverage.ref.value > 0 ||
323
+ r.values.dGeometryType.ref.value === 'directVolume' ||
324
+ ((_c = r.values.dPointStyle) === null || _c === void 0 ? void 0 : _c.ref.value) === 'fuzzy' ||
325
+ r.values.dGeometryType.ref.value === 'text' ||
326
+ r.values.dGeometryType.ref.value === 'image' ||
327
+ xrayShaded);
328
+ };
304
329
  const renderPick = (group, camera, variant, depthTexture, pickType) => {
305
330
  if (isTimingMode)
306
331
  ctx.timer.mark('Renderer.renderPick');
@@ -333,7 +358,6 @@ var Renderer;
333
358
  ctx.timer.markEnd('Renderer.renderDepth');
334
359
  };
335
360
  const renderDepthOpaque = (group, camera, depthTexture) => {
336
- var _a, _b;
337
361
  if (isTimingMode)
338
362
  ctx.timer.mark('Renderer.renderDepthOpaque');
339
363
  state.disable(gl.BLEND);
@@ -343,8 +367,7 @@ var Renderer;
343
367
  const { renderables } = group;
344
368
  for (let i = 0, il = renderables.length; i < il; ++i) {
345
369
  const r = renderables[i];
346
- const xrayShaded = ((_a = r.values.dXrayShaded) === null || _a === void 0 ? void 0 : _a.ref.value) === 'on' || ((_b = r.values.dXrayShaded) === null || _b === void 0 ? void 0 : _b.ref.value) === 'inverted';
347
- if (r.state.opaque && r.values.transparencyAverage.ref.value !== 1 && !xrayShaded) {
370
+ if (checkOpaque(r)) {
348
371
  renderObject(r, 'depth', 0 /* Flag.None */);
349
372
  }
350
373
  }
@@ -352,7 +375,6 @@ var Renderer;
352
375
  ctx.timer.markEnd('Renderer.renderDepthOpaque');
353
376
  };
354
377
  const renderDepthTransparent = (group, camera, depthTexture) => {
355
- var _a, _b;
356
378
  if (isTimingMode)
357
379
  ctx.timer.mark('Renderer.renderDepthTransparent');
358
380
  state.disable(gl.BLEND);
@@ -362,8 +384,7 @@ var Renderer;
362
384
  const { renderables } = group;
363
385
  for (let i = 0, il = renderables.length; i < il; ++i) {
364
386
  const r = renderables[i];
365
- const xrayShaded = ((_a = r.values.dXrayShaded) === null || _a === void 0 ? void 0 : _a.ref.value) === 'on' || ((_b = r.values.dXrayShaded) === null || _b === void 0 ? void 0 : _b.ref.value) === 'inverted';
366
- if (!r.state.opaque || r.values.transparencyAverage.ref.value > 0 || xrayShaded) {
387
+ if (checkTransparent(r)) {
367
388
  renderObject(r, 'depth', 0 /* Flag.None */);
368
389
  }
369
390
  }
@@ -382,7 +403,7 @@ var Renderer;
382
403
  for (let i = 0, il = renderables.length; i < il; ++i) {
383
404
  const r = renderables[i];
384
405
  const alpha = clamp(r.values.alpha.ref.value * r.state.alphaFactor, 0, 1);
385
- if (alpha !== 0 && r.values.markerAverage.ref.value !== 1) {
406
+ if (alpha !== 0 && r.values.transparencyAverage.ref.value !== 1 && r.values.markerAverage.ref.value !== 1) {
386
407
  renderObject(renderables[i], 'marking', 0 /* Flag.None */);
387
408
  }
388
409
  }
@@ -407,6 +428,23 @@ var Renderer;
407
428
  if (isTimingMode)
408
429
  ctx.timer.markEnd('Renderer.renderMarkingMask');
409
430
  };
431
+ const renderEmissive = (group, camera, depthTexture) => {
432
+ if (isTimingMode)
433
+ ctx.timer.mark('Renderer.renderEmissive');
434
+ state.disable(gl.BLEND);
435
+ state.enable(gl.DEPTH_TEST);
436
+ state.depthMask(true);
437
+ updateInternal(group, camera, depthTexture, 1 /* Mask.Opaque */, false);
438
+ const { renderables } = group;
439
+ for (let i = 0, il = renderables.length; i < il; ++i) {
440
+ const r = renderables[i];
441
+ if (checkOpaque(r)) {
442
+ renderObject(r, 'emissive', 0 /* Flag.None */);
443
+ }
444
+ }
445
+ if (isTimingMode)
446
+ ctx.timer.markEnd('Renderer.renderEmissive');
447
+ };
410
448
  const renderBlended = (scene, camera) => {
411
449
  if (scene.hasOpaque) {
412
450
  renderBlendedOpaque(scene, camera, null);
@@ -416,7 +454,6 @@ var Renderer;
416
454
  }
417
455
  };
418
456
  const renderBlendedOpaque = (group, camera, depthTexture) => {
419
- var _a, _b;
420
457
  if (isTimingMode)
421
458
  ctx.timer.mark('Renderer.renderBlendedOpaque');
422
459
  state.disable(gl.BLEND);
@@ -426,12 +463,9 @@ var Renderer;
426
463
  const { renderables } = group;
427
464
  for (let i = 0, il = renderables.length; i < il; ++i) {
428
465
  const r = renderables[i];
429
- if (r.state.opaque) {
466
+ if (checkOpaque(r)) {
430
467
  renderObject(r, 'color', 0 /* Flag.None */);
431
468
  }
432
- else if (((_a = r.values.uDoubleSided) === null || _a === void 0 ? void 0 : _a.ref.value) && ((_b = r.values.dTransparentBackfaces) === null || _b === void 0 ? void 0 : _b.ref.value) === 'opaque') {
433
- renderObject(r, 'color', 2 /* Flag.BlendedBack */);
434
- }
435
469
  }
436
470
  if (isTimingMode)
437
471
  ctx.timer.markEnd('Renderer.renderBlendedOpaque');
@@ -440,9 +474,6 @@ var Renderer;
440
474
  var _a, _b;
441
475
  if (isTimingMode)
442
476
  ctx.timer.mark('Renderer.renderBlendedTransparent');
443
- state.enable(gl.DEPTH_TEST);
444
- updateInternal(group, camera, depthTexture, 2 /* Mask.Transparent */, false);
445
- const { renderables } = group;
446
477
  if (transparentBackground) {
447
478
  state.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
448
479
  }
@@ -450,17 +481,13 @@ var Renderer;
450
481
  state.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
451
482
  }
452
483
  state.enable(gl.BLEND);
453
- state.depthMask(true);
454
- for (let i = 0, il = renderables.length; i < il; ++i) {
455
- const r = renderables[i];
456
- if (!r.state.opaque && r.state.writeDepth) {
457
- renderObject(r, 'color', 0 /* Flag.None */);
458
- }
459
- }
484
+ state.enable(gl.DEPTH_TEST);
460
485
  state.depthMask(false);
486
+ updateInternal(group, camera, depthTexture, 2 /* Mask.Transparent */, false);
487
+ const { renderables } = group;
461
488
  for (let i = 0, il = renderables.length; i < il; ++i) {
462
489
  const r = renderables[i];
463
- if ((!r.state.opaque && !r.state.writeDepth) || r.values.transparencyAverage.ref.value > 0) {
490
+ if (checkTransparent(r)) {
464
491
  if ((_a = r.values.uDoubleSided) === null || _a === void 0 ? void 0 : _a.ref.value) {
465
492
  // render frontfaces and backfaces separately to avoid artefacts
466
493
  if (((_b = r.values.dTransparentBackfaces) === null || _b === void 0 ? void 0 : _b.ref.value) !== 'opaque') {
@@ -481,6 +508,7 @@ var Renderer;
481
508
  ctx.timer.mark('Renderer.renderBlendedVolume');
482
509
  state.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
483
510
  state.enable(gl.BLEND);
511
+ state.depthMask(false);
484
512
  updateInternal(group, camera, depthTexture, 2 /* Mask.Transparent */, false);
485
513
  const { renderables } = group;
486
514
  for (let i = 0, il = renderables.length; i < il; ++i) {
@@ -493,7 +521,6 @@ var Renderer;
493
521
  ctx.timer.markEnd('Renderer.renderBlendedVolume');
494
522
  };
495
523
  const renderWboitOpaque = (group, camera, depthTexture) => {
496
- var _a, _b, _c, _d;
497
524
  if (isTimingMode)
498
525
  ctx.timer.mark('Renderer.renderWboitOpaque');
499
526
  state.disable(gl.BLEND);
@@ -503,11 +530,7 @@ var Renderer;
503
530
  const { renderables } = group;
504
531
  for (let i = 0, il = renderables.length; i < il; ++i) {
505
532
  const r = renderables[i];
506
- // TODO: simplify, handle in renderable.state???
507
- // uAlpha is updated in "render" so we need to recompute it here
508
- const alpha = clamp(r.values.alpha.ref.value * r.state.alphaFactor, 0, 1);
509
- const xrayShaded = ((_a = r.values.dXrayShaded) === null || _a === void 0 ? void 0 : _a.ref.value) === 'on' || ((_b = r.values.dXrayShaded) === null || _b === void 0 ? void 0 : _b.ref.value) === 'inverted';
510
- if ((alpha === 1 && r.values.transparencyAverage.ref.value !== 1 && r.values.dGeometryType.ref.value !== 'directVolume' && ((_c = r.values.dPointStyle) === null || _c === void 0 ? void 0 : _c.ref.value) !== 'fuzzy' && !xrayShaded) || ((_d = r.values.dTransparentBackfaces) === null || _d === void 0 ? void 0 : _d.ref.value) === 'opaque') {
533
+ if (checkOpaque(r)) {
511
534
  renderObject(r, 'color', 0 /* Flag.None */);
512
535
  }
513
536
  }
@@ -515,18 +538,13 @@ var Renderer;
515
538
  ctx.timer.markEnd('Renderer.renderWboitOpaque');
516
539
  };
517
540
  const renderWboitTransparent = (group, camera, depthTexture) => {
518
- var _a, _b, _c;
519
541
  if (isTimingMode)
520
542
  ctx.timer.mark('Renderer.renderWboitTransparent');
521
543
  updateInternal(group, camera, depthTexture, 2 /* Mask.Transparent */, false);
522
544
  const { renderables } = group;
523
545
  for (let i = 0, il = renderables.length; i < il; ++i) {
524
546
  const r = renderables[i];
525
- // TODO: simplify, handle in renderable.state???
526
- // uAlpha is updated in "render" so we need to recompute it here
527
- const alpha = clamp(r.values.alpha.ref.value * r.state.alphaFactor, 0, 1);
528
- const xrayShaded = ((_a = r.values.dXrayShaded) === null || _a === void 0 ? void 0 : _a.ref.value) === 'on' || ((_b = r.values.dXrayShaded) === null || _b === void 0 ? void 0 : _b.ref.value) === 'inverted';
529
- if ((alpha < 1 && alpha !== 0) || r.values.transparencyAverage.ref.value > 0 || r.values.dGeometryType.ref.value === 'directVolume' || ((_c = r.values.dPointStyle) === null || _c === void 0 ? void 0 : _c.ref.value) === 'fuzzy' || r.values.dGeometryType.ref.value === 'text' || xrayShaded) {
547
+ if (checkTransparent(r)) {
530
548
  renderObject(r, 'color', 0 /* Flag.None */);
531
549
  }
532
550
  }
@@ -534,7 +552,6 @@ var Renderer;
534
552
  ctx.timer.markEnd('Renderer.renderWboitTransparent');
535
553
  };
536
554
  const renderDpoitOpaque = (group, camera, depthTexture) => {
537
- var _a, _b, _c, _d;
538
555
  if (isTimingMode)
539
556
  ctx.timer.mark('Renderer.renderDpoitOpaque');
540
557
  state.disable(gl.BLEND);
@@ -544,11 +561,7 @@ var Renderer;
544
561
  const { renderables } = group;
545
562
  for (let i = 0, il = renderables.length; i < il; ++i) {
546
563
  const r = renderables[i];
547
- // TODO: simplify, handle in renderable.state???
548
- // uAlpha is updated in "render" so we need to recompute it here
549
- const alpha = clamp(r.values.alpha.ref.value * r.state.alphaFactor, 0, 1);
550
- const xrayShaded = ((_a = r.values.dXrayShaded) === null || _a === void 0 ? void 0 : _a.ref.value) === 'on' || ((_b = r.values.dXrayShaded) === null || _b === void 0 ? void 0 : _b.ref.value) === 'inverted';
551
- if ((alpha === 1 && r.values.transparencyAverage.ref.value !== 1 && ((_c = r.values.dPointStyle) === null || _c === void 0 ? void 0 : _c.ref.value) !== 'fuzzy' && !xrayShaded) || ((_d = r.values.dTransparentBackfaces) === null || _d === void 0 ? void 0 : _d.ref.value) === 'opaque') {
564
+ if (checkOpaque(r)) {
552
565
  renderObject(r, 'color', 0 /* Flag.None */);
553
566
  }
554
567
  }
@@ -556,7 +569,6 @@ var Renderer;
556
569
  ctx.timer.markEnd('Renderer.renderDpoitOpaque');
557
570
  };
558
571
  const renderDpoitTransparent = (group, camera, depthTexture, dpoitTextures) => {
559
- var _a, _b, _c;
560
572
  if (isTimingMode)
561
573
  ctx.timer.mark('Renderer.renderDpoitTransparent');
562
574
  state.enable(gl.BLEND);
@@ -567,11 +579,7 @@ var Renderer;
567
579
  const { renderables } = group;
568
580
  for (let i = 0, il = renderables.length; i < il; ++i) {
569
581
  const r = renderables[i];
570
- // TODO: simplify, handle in renderable.state???
571
- // uAlpha is updated in "render" so we need to recompute it here
572
- const alpha = clamp(r.values.alpha.ref.value * r.state.alphaFactor, 0, 1);
573
- const xrayShaded = ((_a = r.values.dXrayShaded) === null || _a === void 0 ? void 0 : _a.ref.value) === 'on' || ((_b = r.values.dXrayShaded) === null || _b === void 0 ? void 0 : _b.ref.value) === 'inverted';
574
- if ((alpha < 1 && alpha !== 0) || r.values.transparencyAverage.ref.value > 0 || ((_c = r.values.dPointStyle) === null || _c === void 0 ? void 0 : _c.ref.value) === 'fuzzy' || r.values.dGeometryType.ref.value === 'text' || xrayShaded) {
582
+ if (checkTransparent(r)) {
575
583
  renderObject(r, 'color', 0 /* Flag.None */);
576
584
  }
577
585
  }
@@ -631,6 +639,7 @@ var Renderer;
631
639
  renderDepthTransparent,
632
640
  renderMarkingDepth,
633
641
  renderMarkingMask,
642
+ renderEmissive,
634
643
  renderBlended,
635
644
  renderBlendedOpaque,
636
645
  renderBlendedTransparent,
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) 2018-2023 mol* contributors, licensed under MIT, See LICENSE file for more info.
2
+ * Copyright (c) 2018-2024 mol* contributors, licensed under MIT, See LICENSE file for more info.
3
3
  *
4
4
  * @author Alexander Rose <alexander.rose@weirdbyte.de>
5
5
  * @author David Sehnal <david.sehnal@gmail.com>
@@ -31,6 +31,8 @@ interface Scene extends Object3D {
31
31
  forEach: (callbackFn: (value: GraphicsRenderable, key: GraphicsRenderObject) => void) => void;
32
32
  /** Marker average of primitive renderables */
33
33
  readonly markerAverage: number;
34
+ /** Emissive average of primitive renderables */
35
+ readonly emissiveAverage: number;
34
36
  /** Opacity average of primitive renderables */
35
37
  readonly opacityAverage: number;
36
38
  /** Is `true` if any primitive renderable (possibly) has any opaque part */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) 2018-2023 mol* contributors, licensed under MIT, See LICENSE file for more info.
2
+ * Copyright (c) 2018-2024 mol* contributors, licensed under MIT, See LICENSE file for more info.
3
3
  *
4
4
  * @author Alexander Rose <alexander.rose@weirdbyte.de>
5
5
  * @author David Sehnal <david.sehnal@gmail.com>
@@ -64,9 +64,11 @@ var Scene;
64
64
  let boundingSphereDirty = true;
65
65
  let boundingSphereVisibleDirty = true;
66
66
  let markerAverageDirty = true;
67
+ let emissiveAverageDirty = true;
67
68
  let opacityAverageDirty = true;
68
69
  let hasOpaqueDirty = true;
69
70
  let markerAverage = 0;
71
+ let emissiveAverage = 0;
70
72
  let opacityAverage = 0;
71
73
  let hasOpaque = false;
72
74
  const object3d = Object3D.create();
@@ -123,6 +125,7 @@ var Scene;
123
125
  }
124
126
  renderables.sort(renderableSort);
125
127
  markerAverageDirty = true;
128
+ emissiveAverageDirty = true;
126
129
  opacityAverageDirty = true;
127
130
  hasOpaqueDirty = true;
128
131
  return true;
@@ -146,6 +149,7 @@ var Scene;
146
149
  if (newVisibleHash !== visibleHash) {
147
150
  boundingSphereVisibleDirty = true;
148
151
  markerAverageDirty = true;
152
+ emissiveAverageDirty = true;
149
153
  opacityAverageDirty = true;
150
154
  hasOpaqueDirty = true;
151
155
  visibleHash = newVisibleHash;
@@ -168,6 +172,19 @@ var Scene;
168
172
  }
169
173
  return count > 0 ? markerAverage / count : 0;
170
174
  }
175
+ function calculateEmissiveAverage() {
176
+ if (primitives.length === 0)
177
+ return 0;
178
+ let count = 0;
179
+ let emissiveAverage = 0;
180
+ for (let i = 0, il = primitives.length; i < il; ++i) {
181
+ if (!primitives[i].state.visible)
182
+ continue;
183
+ emissiveAverage += primitives[i].values.emissiveAverage.ref.value + primitives[i].values.uEmissive.ref.value;
184
+ count += 1;
185
+ }
186
+ return count > 0 ? emissiveAverage / count : 0;
187
+ }
171
188
  function calculateOpacityAverage() {
172
189
  var _a, _b;
173
190
  if (primitives.length === 0)
@@ -239,6 +256,7 @@ var Scene;
239
256
  syncVisibility();
240
257
  }
241
258
  markerAverageDirty = true;
259
+ emissiveAverageDirty = true;
242
260
  opacityAverageDirty = true;
243
261
  hasOpaqueDirty = true;
244
262
  },
@@ -288,6 +306,13 @@ var Scene;
288
306
  }
289
307
  return markerAverage;
290
308
  },
309
+ get emissiveAverage() {
310
+ if (emissiveAverageDirty) {
311
+ emissiveAverage = calculateEmissiveAverage();
312
+ emissiveAverageDirty = false;
313
+ }
314
+ return emissiveAverage;
315
+ },
291
316
  get opacityAverage() {
292
317
  if (opacityAverageDirty) {
293
318
  opacityAverage = calculateOpacityAverage();
@@ -0,0 +1 @@
1
+ export declare const blur_frag = "\nprecision highp float;\nprecision highp int;\nprecision highp sampler2D;\n\nuniform sampler2D tInput;\nuniform vec2 uTexSizeInv;\n\nuniform vec2 uDirection;\nuniform float uGaussianCoefficients[dKernelRadius];\n\nvoid main(void) {\n vec2 coords = gl_FragCoord.xy * uTexSizeInv;\n float weightSum = uGaussianCoefficients[0];\n vec4 diffuseSum = texture2D(tInput, coords) * weightSum;\n\n for(int i = 1; i < dKernelRadius; ++i) {\n float x = float(i);\n float w = uGaussianCoefficients[i];\n vec2 offset = uDirection * uTexSizeInv * x;\n vec4 sample1 = texture2D(tInput, coords + offset);\n vec4 sample2 = texture2D(tInput, coords - offset);\n diffuseSum += (sample1 + sample2) * w;\n weightSum += 2.0 * w;\n }\n\n gl_FragColor = diffuseSum / weightSum;\n}\n";
@@ -0,0 +1,29 @@
1
+ export const blur_frag = `
2
+ precision highp float;
3
+ precision highp int;
4
+ precision highp sampler2D;
5
+
6
+ uniform sampler2D tInput;
7
+ uniform vec2 uTexSizeInv;
8
+
9
+ uniform vec2 uDirection;
10
+ uniform float uGaussianCoefficients[dKernelRadius];
11
+
12
+ void main(void) {
13
+ vec2 coords = gl_FragCoord.xy * uTexSizeInv;
14
+ float weightSum = uGaussianCoefficients[0];
15
+ vec4 diffuseSum = texture2D(tInput, coords) * weightSum;
16
+
17
+ for(int i = 1; i < dKernelRadius; ++i) {
18
+ float x = float(i);
19
+ float w = uGaussianCoefficients[i];
20
+ vec2 offset = uDirection * uTexSizeInv * x;
21
+ vec4 sample1 = texture2D(tInput, coords + offset);
22
+ vec4 sample2 = texture2D(tInput, coords - offset);
23
+ diffuseSum += (sample1 + sample2) * w;
24
+ weightSum += 2.0 * w;
25
+ }
26
+
27
+ gl_FragColor = diffuseSum / weightSum;
28
+ }
29
+ `;
@@ -0,0 +1 @@
1
+ export declare const composite_frag = "\nprecision highp float;\nprecision highp int;\nprecision highp sampler2D;\n\nuniform vec2 uTexSizeInv;\n\nuniform sampler2D tBlur1;\nuniform sampler2D tBlur2;\nuniform sampler2D tBlur3;\nuniform sampler2D tBlur4;\nuniform sampler2D tBlur5;\nuniform float uBloomStrength;\nuniform float uBloomRadius;\nuniform float uBloomFactors[5];\nuniform vec3 uBloomTints[5];\n\nfloat lerpBloomFactor(const in float factor) {\n float mirrorFactor = 1.2 - factor;\n return mix(factor, mirrorFactor, uBloomRadius);\n}\n\nvoid main(void) {\n vec2 coords = gl_FragCoord.xy * uTexSizeInv;\n\n gl_FragColor = uBloomStrength * (\n lerpBloomFactor(uBloomFactors[0]) * vec4(uBloomTints[0], 1.0) * texture2D(tBlur1, coords) +\n lerpBloomFactor(uBloomFactors[1]) * vec4(uBloomTints[1], 1.0) * texture2D(tBlur2, coords) +\n lerpBloomFactor(uBloomFactors[2]) * vec4(uBloomTints[2], 1.0) * texture2D(tBlur3, coords) +\n lerpBloomFactor(uBloomFactors[3]) * vec4(uBloomTints[3], 1.0) * texture2D(tBlur4, coords) +\n lerpBloomFactor(uBloomFactors[4]) * vec4(uBloomTints[4], 1.0) * texture2D(tBlur5, coords)\n );\n}\n";
@@ -0,0 +1,34 @@
1
+ export const composite_frag = `
2
+ precision highp float;
3
+ precision highp int;
4
+ precision highp sampler2D;
5
+
6
+ uniform vec2 uTexSizeInv;
7
+
8
+ uniform sampler2D tBlur1;
9
+ uniform sampler2D tBlur2;
10
+ uniform sampler2D tBlur3;
11
+ uniform sampler2D tBlur4;
12
+ uniform sampler2D tBlur5;
13
+ uniform float uBloomStrength;
14
+ uniform float uBloomRadius;
15
+ uniform float uBloomFactors[5];
16
+ uniform vec3 uBloomTints[5];
17
+
18
+ float lerpBloomFactor(const in float factor) {
19
+ float mirrorFactor = 1.2 - factor;
20
+ return mix(factor, mirrorFactor, uBloomRadius);
21
+ }
22
+
23
+ void main(void) {
24
+ vec2 coords = gl_FragCoord.xy * uTexSizeInv;
25
+
26
+ gl_FragColor = uBloomStrength * (
27
+ lerpBloomFactor(uBloomFactors[0]) * vec4(uBloomTints[0], 1.0) * texture2D(tBlur1, coords) +
28
+ lerpBloomFactor(uBloomFactors[1]) * vec4(uBloomTints[1], 1.0) * texture2D(tBlur2, coords) +
29
+ lerpBloomFactor(uBloomFactors[2]) * vec4(uBloomTints[2], 1.0) * texture2D(tBlur3, coords) +
30
+ lerpBloomFactor(uBloomFactors[3]) * vec4(uBloomTints[3], 1.0) * texture2D(tBlur4, coords) +
31
+ lerpBloomFactor(uBloomFactors[4]) * vec4(uBloomTints[4], 1.0) * texture2D(tBlur5, coords)
32
+ );
33
+ }
34
+ `;
@@ -0,0 +1 @@
1
+ export declare const luminosity_frag = "\nprecision highp float;\nprecision highp int;\nprecision highp sampler2D;\n\nuniform sampler2D tColor;\nuniform sampler2D tEmissive;\nuniform sampler2D tDepth;\nuniform vec2 uTexSizeInv;\n\nuniform vec3 uDefaultColor;\nuniform float uDefaultOpacity;\nuniform float uLuminosityThreshold;\nuniform float uSmoothWidth;\n\n#include common\n\nfloat getDepth(const in vec2 coords) {\n #ifdef depthTextureSupport\n return texture2D(tDepth, coords).r;\n #else\n return unpackRGBAToDepth(texture2D(tDepth, coords));\n #endif\n}\n\nbool isBackground(const in float depth) {\n return depth == 1.0;\n}\n\nvoid main(void) {\n vec2 coords = gl_FragCoord.xy * uTexSizeInv;\n vec4 texel = texture2D(tColor, coords);\n float emissive = texture2D(tEmissive, coords).a;\n float depth = getDepth(coords);\n\n if (isBackground(depth)) {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\n return;\n }\n\n vec4 outputColor = vec4(uDefaultColor.rgb, uDefaultOpacity);\n\n #if defined(dMode_luminosity)\n vec3 luma = vec3(0.299, 0.587, 0.114);\n float v = dot(texel.xyz, luma);\n float alpha = smoothstep(uLuminosityThreshold, uLuminosityThreshold + uSmoothWidth, v);\n\n gl_FragColor = mix(outputColor, texel, alpha);\n #elif defined(dMode_emissive)\n gl_FragColor = mix(outputColor, texel, emissive);\n #endif\n}\n";
@@ -0,0 +1,53 @@
1
+ export const luminosity_frag = `
2
+ precision highp float;
3
+ precision highp int;
4
+ precision highp sampler2D;
5
+
6
+ uniform sampler2D tColor;
7
+ uniform sampler2D tEmissive;
8
+ uniform sampler2D tDepth;
9
+ uniform vec2 uTexSizeInv;
10
+
11
+ uniform vec3 uDefaultColor;
12
+ uniform float uDefaultOpacity;
13
+ uniform float uLuminosityThreshold;
14
+ uniform float uSmoothWidth;
15
+
16
+ #include common
17
+
18
+ float getDepth(const in vec2 coords) {
19
+ #ifdef depthTextureSupport
20
+ return texture2D(tDepth, coords).r;
21
+ #else
22
+ return unpackRGBAToDepth(texture2D(tDepth, coords));
23
+ #endif
24
+ }
25
+
26
+ bool isBackground(const in float depth) {
27
+ return depth == 1.0;
28
+ }
29
+
30
+ void main(void) {
31
+ vec2 coords = gl_FragCoord.xy * uTexSizeInv;
32
+ vec4 texel = texture2D(tColor, coords);
33
+ float emissive = texture2D(tEmissive, coords).a;
34
+ float depth = getDepth(coords);
35
+
36
+ if (isBackground(depth)) {
37
+ gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
38
+ return;
39
+ }
40
+
41
+ vec4 outputColor = vec4(uDefaultColor.rgb, uDefaultOpacity);
42
+
43
+ #if defined(dMode_luminosity)
44
+ vec3 luma = vec3(0.299, 0.587, 0.114);
45
+ float v = dot(texel.xyz, luma);
46
+ float alpha = smoothstep(uLuminosityThreshold, uLuminosityThreshold + uSmoothWidth, v);
47
+
48
+ gl_FragColor = mix(outputColor, texel, alpha);
49
+ #elif defined(dMode_emissive)
50
+ gl_FragColor = mix(outputColor, texel, emissive);
51
+ #endif
52
+ }
53
+ `;
@@ -1,9 +1,9 @@
1
1
  /**
2
- * Copyright (c) 2017-2023 mol* contributors, licensed under MIT, See LICENSE file for more info.
2
+ * Copyright (c) 2017-2024 mol* contributors, licensed under MIT, See LICENSE file for more info.
3
3
  *
4
4
  * @author Alexander Rose <alexander.rose@weirdbyte.de>
5
5
  *
6
6
  * adapted from three.js (https://github.com/mrdoob/three.js/)
7
7
  * which under the MIT License, Copyright © 2010-2021 three.js authors
8
8
  */
9
- export declare const apply_light_color = "\n#ifdef dIgnoreLight\n #ifdef bumpEnabled\n if (uBumpFrequency > 0.0 && uBumpAmplitude > 0.0 && bumpiness > 0.0) {\n material.rgb += fbm(vModelPosition * uBumpFrequency) * uBumpAmplitude * bumpiness;\n material.rgb -= 0.5 * uBumpAmplitude * bumpiness;\n }\n #endif\n\n gl_FragColor = material;\n#else\n #ifdef bumpEnabled\n if (uBumpFrequency > 0.0 && uBumpAmplitude > 0.0 && bumpiness > 0.0) {\n normal = perturbNormal(-vViewPosition, normal, fbm(vModelPosition * uBumpFrequency), (uBumpAmplitude * bumpiness) / uBumpFrequency);\n }\n #endif\n\n vec4 color = material;\n\n ReflectedLight reflectedLight = ReflectedLight(vec3(0.0), vec3(0.0), vec3(0.0), vec3(0.0));\n\n PhysicalMaterial physicalMaterial;\n physicalMaterial.diffuseColor = color.rgb * (1.0 - metalness);\n #ifdef enabledFragDepth\n physicalMaterial.roughness = min(max(roughness, 0.0525), 1.0);\n #else\n vec3 dxy = max(abs(dFdx(normal)), abs(dFdy(normal)));\n float geometryRoughness = max(max(dxy.x, dxy.y), dxy.z);\n physicalMaterial.roughness = min(max(roughness, 0.0525) + geometryRoughness, 1.0);\n #endif\n physicalMaterial.specularColor = mix(vec3(0.04), color.rgb, metalness);\n physicalMaterial.specularF90 = 1.0;\n\n GeometricContext geometry;\n geometry.position = -vViewPosition;\n geometry.normal = normal;\n geometry.viewDir = normalize(vViewPosition);\n\n IncidentLight directLight;\n #pragma unroll_loop_start\n for (int i = 0; i < dLightCount; ++i) {\n directLight.direction = uLightDirection[i];\n directLight.color = uLightColor[i] * PI; // * PI for punctual light\n RE_Direct_Physical(directLight, geometry, physicalMaterial, reflectedLight);\n }\n #pragma unroll_loop_end\n\n vec3 irradiance = uAmbientColor * PI; // * PI for punctual light\n RE_IndirectDiffuse_Physical(irradiance, geometry, physicalMaterial, reflectedLight);\n\n // indirect specular only metals\n vec3 radiance = uAmbientColor * metalness;\n vec3 iblIrradiance = uAmbientColor * metalness;\n vec3 clearcoatRadiance = vec3(0.0);\n RE_IndirectSpecular_Physical(radiance, iblIrradiance, clearcoatRadiance, geometry, physicalMaterial, reflectedLight);\n\n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n outgoingLight = clamp(outgoingLight, 0.01, 0.99); // prevents black artifacts on specular highlight with transparent background\n\n gl_FragColor = vec4(outgoingLight, color.a);\n#endif\n\n#if defined(dXrayShaded_on)\n gl_FragColor.a *= 1.0 - pow(abs(dot(normal, vec3(0.0, 0.0, 1.0))), uXrayEdgeFalloff);\n#elif defined(dXrayShaded_inverted)\n gl_FragColor.a *= pow(abs(dot(normal, vec3(0.0, 0.0, 1.0))), uXrayEdgeFalloff);\n#endif\n\ngl_FragColor.rgb *= uExposure;\n";
9
+ export declare const apply_light_color = "\n#if defined(dIgnoreLight)\n #ifdef bumpEnabled\n if (uBumpFrequency > 0.0 && uBumpAmplitude > 0.0 && bumpiness > 0.0) {\n material.rgb += fbm(vModelPosition * uBumpFrequency) * uBumpAmplitude * bumpiness;\n material.rgb -= 0.5 * uBumpAmplitude * bumpiness;\n }\n #endif\n\n #if defined(dRenderVariant_color)\n material.rgb += material.rgb * emissive;\n #endif\n\n gl_FragColor = material;\n#else\n #ifdef bumpEnabled\n if (uBumpFrequency > 0.0 && uBumpAmplitude > 0.0 && bumpiness > 0.0) {\n normal = perturbNormal(-vViewPosition, normal, fbm(vModelPosition * uBumpFrequency), (uBumpAmplitude * bumpiness) / uBumpFrequency);\n }\n #endif\n\n vec4 color = material;\n\n ReflectedLight reflectedLight = ReflectedLight(vec3(0.0), vec3(0.0), vec3(0.0), vec3(0.0));\n\n PhysicalMaterial physicalMaterial;\n physicalMaterial.diffuseColor = color.rgb * (1.0 - metalness);\n #ifdef enabledFragDepth\n physicalMaterial.roughness = min(max(roughness, 0.0525), 1.0);\n #else\n vec3 dxy = max(abs(dFdx(normal)), abs(dFdy(normal)));\n float geometryRoughness = max(max(dxy.x, dxy.y), dxy.z);\n physicalMaterial.roughness = min(max(roughness, 0.0525) + geometryRoughness, 1.0);\n #endif\n physicalMaterial.specularColor = mix(vec3(0.04), color.rgb, metalness);\n physicalMaterial.specularF90 = 1.0;\n\n GeometricContext geometry;\n geometry.position = -vViewPosition;\n geometry.normal = normal;\n geometry.viewDir = normalize(vViewPosition);\n\n IncidentLight directLight;\n #pragma unroll_loop_start\n for (int i = 0; i < dLightCount; ++i) {\n directLight.direction = uLightDirection[i];\n directLight.color = uLightColor[i] * PI; // * PI for punctual light\n RE_Direct_Physical(directLight, geometry, physicalMaterial, reflectedLight);\n }\n #pragma unroll_loop_end\n\n vec3 irradiance = uAmbientColor * PI; // * PI for punctual light\n RE_IndirectDiffuse_Physical(irradiance, geometry, physicalMaterial, reflectedLight);\n\n // indirect specular only metals\n vec3 radiance = uAmbientColor * metalness;\n vec3 iblIrradiance = uAmbientColor * metalness;\n vec3 clearcoatRadiance = vec3(0.0);\n RE_IndirectSpecular_Physical(radiance, iblIrradiance, clearcoatRadiance, geometry, physicalMaterial, reflectedLight);\n\n vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n outgoingLight = clamp(outgoingLight, 0.01, 0.99); // prevents black artifacts on specular highlight with transparent background\n\n #if defined(dRenderVariant_color)\n outgoingLight += color.rgb * emissive;\n #endif\n\n gl_FragColor = vec4(outgoingLight, color.a);\n#endif\n\n#if defined(dXrayShaded_on)\n gl_FragColor.a *= 1.0 - pow(abs(dot(normal, vec3(0.0, 0.0, 1.0))), uXrayEdgeFalloff);\n#elif defined(dXrayShaded_inverted)\n gl_FragColor.a *= pow(abs(dot(normal, vec3(0.0, 0.0, 1.0))), uXrayEdgeFalloff);\n#endif\n\ngl_FragColor.rgb *= uExposure;\n";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) 2017-2023 mol* contributors, licensed under MIT, See LICENSE file for more info.
2
+ * Copyright (c) 2017-2024 mol* contributors, licensed under MIT, See LICENSE file for more info.
3
3
  *
4
4
  * @author Alexander Rose <alexander.rose@weirdbyte.de>
5
5
  *
@@ -7,7 +7,7 @@
7
7
  * which under the MIT License, Copyright © 2010-2021 three.js authors
8
8
  */
9
9
  export const apply_light_color = `
10
- #ifdef dIgnoreLight
10
+ #if defined(dIgnoreLight)
11
11
  #ifdef bumpEnabled
12
12
  if (uBumpFrequency > 0.0 && uBumpAmplitude > 0.0 && bumpiness > 0.0) {
13
13
  material.rgb += fbm(vModelPosition * uBumpFrequency) * uBumpAmplitude * bumpiness;
@@ -15,6 +15,10 @@ export const apply_light_color = `
15
15
  }
16
16
  #endif
17
17
 
18
+ #if defined(dRenderVariant_color)
19
+ material.rgb += material.rgb * emissive;
20
+ #endif
21
+
18
22
  gl_FragColor = material;
19
23
  #else
20
24
  #ifdef bumpEnabled
@@ -65,6 +69,10 @@ export const apply_light_color = `
65
69
  vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular;
66
70
  outgoingLight = clamp(outgoingLight, 0.01, 0.99); // prevents black artifacts on specular highlight with transparent background
67
71
 
72
+ #if defined(dRenderVariant_color)
73
+ outgoingLight += color.rgb * emissive;
74
+ #endif
75
+
68
76
  gl_FragColor = vec4(outgoingLight, color.a);
69
77
  #endif
70
78
 
@@ -1 +1 @@
1
- export declare const assign_color_varying = "\n#if defined(dRenderVariant_color)\n #if defined(dColorType_attribute)\n vColor.rgb = aColor;\n #elif defined(dColorType_instance)\n vColor.rgb = readFromTexture(tColor, aInstance, uColorTexDim).rgb;\n #elif defined(dColorType_group)\n #if defined(dDualColor)\n vec4 color2;\n if (aColorMode == 2.0) {\n vColor.rgb = readFromTexture(tColor, group, uColorTexDim).rgb;\n } else {\n vColor.rgb = readFromTexture(tColor, group * 2.0, uColorTexDim).rgb;\n color2.rgb = readFromTexture(tColor, group * 2.0 + 1.0, uColorTexDim).rgb;\n }\n #else\n vColor.rgb = readFromTexture(tColor, group, uColorTexDim).rgb;\n #endif\n #elif defined(dColorType_groupInstance)\n #if defined(dDualColor)\n vec4 color2;\n if (aColorMode == 2.0) {\n vColor.rgb = readFromTexture(tColor, aInstance * float(uGroupCount) + group, uColorTexDim).rgb;\n } else {\n vColor.rgb = readFromTexture(tColor, (aInstance * float(uGroupCount) + group) * 2.0, uColorTexDim).rgb;\n color2.rgb = readFromTexture(tColor, (aInstance * float(uGroupCount) + group) * 2.0 + 1.0, uColorTexDim).rgb;\n }\n #else\n vColor.rgb = readFromTexture(tColor, aInstance * float(uGroupCount) + group, uColorTexDim).rgb;\n #endif\n #elif defined(dColorType_vertex)\n vColor.rgb = readFromTexture(tColor, VertexID, uColorTexDim).rgb;\n #elif defined(dColorType_vertexInstance)\n vColor.rgb = readFromTexture(tColor, int(aInstance) * uVertexCount + VertexID, uColorTexDim).rgb;\n #elif defined(dColorType_volume)\n vec3 cgridPos = (uColorGridTransform.w * (position - uColorGridTransform.xyz)) / uColorGridDim;\n vColor.rgb = texture3dFrom2dLinear(tColorGrid, cgridPos, uColorGridDim, uColorTexDim).rgb;\n #elif defined(dColorType_volumeInstance)\n vec3 cgridPos = (uColorGridTransform.w * (vModelPosition - uColorGridTransform.xyz)) / uColorGridDim;\n vColor.rgb = texture3dFrom2dLinear(tColorGrid, cgridPos, uColorGridDim, uColorTexDim).rgb;\n #endif\n\n #ifdef dUsePalette\n vPaletteV = ((vColor.r * 256.0 * 256.0 * 255.0 + vColor.g * 256.0 * 255.0 + vColor.b * 255.0) - 1.0) / 16777215.0;\n #endif\n\n #ifdef dOverpaint\n #if defined(dOverpaintType_instance)\n vOverpaint = readFromTexture(tOverpaint, aInstance, uOverpaintTexDim);\n #elif defined(dOverpaintType_groupInstance)\n vOverpaint = readFromTexture(tOverpaint, aInstance * float(uGroupCount) + group, uOverpaintTexDim);\n #elif defined(dOverpaintType_vertexInstance)\n vOverpaint = readFromTexture(tOverpaint, int(aInstance) * uVertexCount + VertexID, uOverpaintTexDim);\n #elif defined(dOverpaintType_volumeInstance)\n vec3 ogridPos = (uOverpaintGridTransform.w * (vModelPosition - uOverpaintGridTransform.xyz)) / uOverpaintGridDim;\n vOverpaint = texture3dFrom2dLinear(tOverpaintGrid, ogridPos, uOverpaintGridDim, uOverpaintTexDim);\n #endif\n\n // pre-mix to avoid darkening due to empty overpaint\n #ifdef dColorType_uniform\n vOverpaint.rgb = mix(uColor.rgb, vOverpaint.rgb, vOverpaint.a);\n #else\n vOverpaint.rgb = mix(vColor.rgb, vOverpaint.rgb, vOverpaint.a);\n #endif\n vOverpaint *= uOverpaintStrength;\n #endif\n\n #ifdef dSubstance\n #if defined(dSubstanceType_instance)\n vSubstance = readFromTexture(tSubstance, aInstance, uSubstanceTexDim);\n #elif defined(dSubstanceType_groupInstance)\n vSubstance = readFromTexture(tSubstance, aInstance * float(uGroupCount) + group, uSubstanceTexDim);\n #elif defined(dSubstanceType_vertexInstance)\n vSubstance = readFromTexture(tSubstance, int(aInstance) * uVertexCount + VertexID, uSubstanceTexDim);\n #elif defined(dSubstanceType_volumeInstance)\n vec3 sgridPos = (uSubstanceGridTransform.w * (vModelPosition - uSubstanceGridTransform.xyz)) / uSubstanceGridDim;\n vSubstance = texture3dFrom2dLinear(tSubstanceGrid, sgridPos, uSubstanceGridDim, uSubstanceTexDim);\n #endif\n\n // pre-mix to avoid artifacts due to empty substance\n vSubstance.rgb = mix(vec3(uMetalness, uRoughness, uBumpiness), vSubstance.rgb, vSubstance.a);\n vSubstance *= uSubstanceStrength;\n #endif\n#elif defined(dRenderVariant_pick)\n #ifdef requiredDrawBuffers\n vObject = vec4(packIntToRGB(float(uObjectId)), 1.0);\n vInstance = vec4(packIntToRGB(aInstance), 1.0);\n vGroup = vec4(packIntToRGB(group), 1.0);\n #else\n if (uPickType == 1) {\n vColor = vec4(packIntToRGB(float(uObjectId)), 1.0);\n } else if (uPickType == 2) {\n vColor = vec4(packIntToRGB(aInstance), 1.0);\n } else {\n vColor = vec4(packIntToRGB(group), 1.0);\n }\n #endif\n#endif\n\n#ifdef dTransparency\n #if defined(dTransparencyType_instance)\n vTransparency = readFromTexture(tTransparency, aInstance, uTransparencyTexDim).a;\n #elif defined(dTransparencyType_groupInstance)\n vTransparency = readFromTexture(tTransparency, aInstance * float(uGroupCount) + group, uTransparencyTexDim).a;\n #elif defined(dTransparencyType_vertexInstance)\n vTransparency = readFromTexture(tTransparency, int(aInstance) * uVertexCount + VertexID, uTransparencyTexDim).a;\n #elif defined(dTransparencyType_volumeInstance)\n vec3 tgridPos = (uTransparencyGridTransform.w * (vModelPosition - uTransparencyGridTransform.xyz)) / uTransparencyGridDim;\n vTransparency = texture3dFrom2dLinear(tTransparencyGrid, tgridPos, uTransparencyGridDim, uTransparencyTexDim).a;\n #endif\n vTransparency *= uTransparencyStrength;\n#endif\n";
1
+ export declare const assign_color_varying = "\n#if defined(dRenderVariant_color)\n #if defined(dColorType_attribute)\n vColor.rgb = aColor;\n #elif defined(dColorType_instance)\n vColor.rgb = readFromTexture(tColor, aInstance, uColorTexDim).rgb;\n #elif defined(dColorType_group)\n #if defined(dDualColor)\n vec4 color2;\n if (aColorMode == 2.0) {\n vColor.rgb = readFromTexture(tColor, group, uColorTexDim).rgb;\n } else {\n vColor.rgb = readFromTexture(tColor, group * 2.0, uColorTexDim).rgb;\n color2.rgb = readFromTexture(tColor, group * 2.0 + 1.0, uColorTexDim).rgb;\n }\n #else\n vColor.rgb = readFromTexture(tColor, group, uColorTexDim).rgb;\n #endif\n #elif defined(dColorType_groupInstance)\n #if defined(dDualColor)\n vec4 color2;\n if (aColorMode == 2.0) {\n vColor.rgb = readFromTexture(tColor, aInstance * float(uGroupCount) + group, uColorTexDim).rgb;\n } else {\n vColor.rgb = readFromTexture(tColor, (aInstance * float(uGroupCount) + group) * 2.0, uColorTexDim).rgb;\n color2.rgb = readFromTexture(tColor, (aInstance * float(uGroupCount) + group) * 2.0 + 1.0, uColorTexDim).rgb;\n }\n #else\n vColor.rgb = readFromTexture(tColor, aInstance * float(uGroupCount) + group, uColorTexDim).rgb;\n #endif\n #elif defined(dColorType_vertex)\n vColor.rgb = readFromTexture(tColor, VertexID, uColorTexDim).rgb;\n #elif defined(dColorType_vertexInstance)\n vColor.rgb = readFromTexture(tColor, int(aInstance) * uVertexCount + VertexID, uColorTexDim).rgb;\n #elif defined(dColorType_volume)\n vec3 cgridPos = (uColorGridTransform.w * (position - uColorGridTransform.xyz)) / uColorGridDim;\n vColor.rgb = texture3dFrom2dLinear(tColorGrid, cgridPos, uColorGridDim, uColorTexDim).rgb;\n #elif defined(dColorType_volumeInstance)\n vec3 cgridPos = (uColorGridTransform.w * (vModelPosition - uColorGridTransform.xyz)) / uColorGridDim;\n vColor.rgb = texture3dFrom2dLinear(tColorGrid, cgridPos, uColorGridDim, uColorTexDim).rgb;\n #endif\n\n #ifdef dUsePalette\n vPaletteV = ((vColor.r * 256.0 * 256.0 * 255.0 + vColor.g * 256.0 * 255.0 + vColor.b * 255.0) - 1.0) / 16777215.0;\n #endif\n\n #ifdef dOverpaint\n #if defined(dOverpaintType_instance)\n vOverpaint = readFromTexture(tOverpaint, aInstance, uOverpaintTexDim);\n #elif defined(dOverpaintType_groupInstance)\n vOverpaint = readFromTexture(tOverpaint, aInstance * float(uGroupCount) + group, uOverpaintTexDim);\n #elif defined(dOverpaintType_vertexInstance)\n vOverpaint = readFromTexture(tOverpaint, int(aInstance) * uVertexCount + VertexID, uOverpaintTexDim);\n #elif defined(dOverpaintType_volumeInstance)\n vec3 ogridPos = (uOverpaintGridTransform.w * (vModelPosition - uOverpaintGridTransform.xyz)) / uOverpaintGridDim;\n vOverpaint = texture3dFrom2dLinear(tOverpaintGrid, ogridPos, uOverpaintGridDim, uOverpaintTexDim);\n #endif\n\n // pre-mix to avoid darkening due to empty overpaint\n #ifdef dColorType_uniform\n vOverpaint.rgb = mix(uColor.rgb, vOverpaint.rgb, vOverpaint.a);\n #else\n vOverpaint.rgb = mix(vColor.rgb, vOverpaint.rgb, vOverpaint.a);\n #endif\n vOverpaint *= uOverpaintStrength;\n #endif\n\n #ifdef dEmissive\n #if defined(dEmissiveType_instance)\n vEmissive = readFromTexture(tEmissive, aInstance, uEmissiveTexDim).a;\n #elif defined(dEmissiveType_groupInstance)\n vEmissive = readFromTexture(tEmissive, aInstance * float(uGroupCount) + group, uEmissiveTexDim).a;\n #elif defined(dEmissiveType_vertexInstance)\n vEmissive = readFromTexture(tEmissive, int(aInstance) * uVertexCount + VertexID, uEmissiveTexDim).a;\n #elif defined(dEmissiveType_volumeInstance)\n vec3 egridPos = (uEmissiveGridTransform.w * (vModelPosition - uEmissiveGridTransform.xyz)) / uEmissiveGridDim;\n vEmissive = texture3dFrom2dLinear(tEmissiveGrid, egridPos, uEmissiveGridDim, uEmissiveTexDim).a;\n #endif\n vEmissive *= uEmissiveStrength;\n #endif\n\n #ifdef dSubstance\n #if defined(dSubstanceType_instance)\n vSubstance = readFromTexture(tSubstance, aInstance, uSubstanceTexDim);\n #elif defined(dSubstanceType_groupInstance)\n vSubstance = readFromTexture(tSubstance, aInstance * float(uGroupCount) + group, uSubstanceTexDim);\n #elif defined(dSubstanceType_vertexInstance)\n vSubstance = readFromTexture(tSubstance, int(aInstance) * uVertexCount + VertexID, uSubstanceTexDim);\n #elif defined(dSubstanceType_volumeInstance)\n vec3 sgridPos = (uSubstanceGridTransform.w * (vModelPosition - uSubstanceGridTransform.xyz)) / uSubstanceGridDim;\n vSubstance = texture3dFrom2dLinear(tSubstanceGrid, sgridPos, uSubstanceGridDim, uSubstanceTexDim);\n #endif\n\n // pre-mix to avoid artifacts due to empty substance\n vSubstance.rgb = mix(vec3(uMetalness, uRoughness, uBumpiness), vSubstance.rgb, vSubstance.a);\n vSubstance *= uSubstanceStrength;\n #endif\n#elif defined(dRenderVariant_emissive)\n #ifdef dEmissive\n #if defined(dEmissiveType_instance)\n vEmissive = readFromTexture(tEmissive, aInstance, uEmissiveTexDim).a;\n #elif defined(dEmissiveType_groupInstance)\n vEmissive = readFromTexture(tEmissive, aInstance * float(uGroupCount) + group, uEmissiveTexDim).a;\n #elif defined(dEmissiveType_vertexInstance)\n vEmissive = readFromTexture(tEmissive, int(aInstance) * uVertexCount + VertexID, uEmissiveTexDim).a;\n #elif defined(dEmissiveType_volumeInstance)\n vec3 egridPos = (uEmissiveGridTransform.w * (vModelPosition - uEmissiveGridTransform.xyz)) / uEmissiveGridDim;\n vEmissive = texture3dFrom2dLinear(tEmissiveGrid, egridPos, uEmissiveGridDim, uEmissiveTexDim).a;\n #endif\n vEmissive *= uEmissiveStrength;\n #endif\n#elif defined(dRenderVariant_pick)\n #ifdef requiredDrawBuffers\n vObject = vec4(packIntToRGB(float(uObjectId)), 1.0);\n vInstance = vec4(packIntToRGB(aInstance), 1.0);\n vGroup = vec4(packIntToRGB(group), 1.0);\n #else\n if (uPickType == 1) {\n vColor = vec4(packIntToRGB(float(uObjectId)), 1.0);\n } else if (uPickType == 2) {\n vColor = vec4(packIntToRGB(aInstance), 1.0);\n } else {\n vColor = vec4(packIntToRGB(group), 1.0);\n }\n #endif\n#endif\n\n#ifdef dTransparency\n #if defined(dTransparencyType_instance)\n vTransparency = readFromTexture(tTransparency, aInstance, uTransparencyTexDim).a;\n #elif defined(dTransparencyType_groupInstance)\n vTransparency = readFromTexture(tTransparency, aInstance * float(uGroupCount) + group, uTransparencyTexDim).a;\n #elif defined(dTransparencyType_vertexInstance)\n vTransparency = readFromTexture(tTransparency, int(aInstance) * uVertexCount + VertexID, uTransparencyTexDim).a;\n #elif defined(dTransparencyType_volumeInstance)\n vec3 tgridPos = (uTransparencyGridTransform.w * (vModelPosition - uTransparencyGridTransform.xyz)) / uTransparencyGridDim;\n vTransparency = texture3dFrom2dLinear(tTransparencyGrid, tgridPos, uTransparencyGridDim, uTransparencyTexDim).a;\n #endif\n vTransparency *= uTransparencyStrength;\n#endif\n";
@@ -65,6 +65,20 @@ export const assign_color_varying = `
65
65
  vOverpaint *= uOverpaintStrength;
66
66
  #endif
67
67
 
68
+ #ifdef dEmissive
69
+ #if defined(dEmissiveType_instance)
70
+ vEmissive = readFromTexture(tEmissive, aInstance, uEmissiveTexDim).a;
71
+ #elif defined(dEmissiveType_groupInstance)
72
+ vEmissive = readFromTexture(tEmissive, aInstance * float(uGroupCount) + group, uEmissiveTexDim).a;
73
+ #elif defined(dEmissiveType_vertexInstance)
74
+ vEmissive = readFromTexture(tEmissive, int(aInstance) * uVertexCount + VertexID, uEmissiveTexDim).a;
75
+ #elif defined(dEmissiveType_volumeInstance)
76
+ vec3 egridPos = (uEmissiveGridTransform.w * (vModelPosition - uEmissiveGridTransform.xyz)) / uEmissiveGridDim;
77
+ vEmissive = texture3dFrom2dLinear(tEmissiveGrid, egridPos, uEmissiveGridDim, uEmissiveTexDim).a;
78
+ #endif
79
+ vEmissive *= uEmissiveStrength;
80
+ #endif
81
+
68
82
  #ifdef dSubstance
69
83
  #if defined(dSubstanceType_instance)
70
84
  vSubstance = readFromTexture(tSubstance, aInstance, uSubstanceTexDim);
@@ -81,6 +95,20 @@ export const assign_color_varying = `
81
95
  vSubstance.rgb = mix(vec3(uMetalness, uRoughness, uBumpiness), vSubstance.rgb, vSubstance.a);
82
96
  vSubstance *= uSubstanceStrength;
83
97
  #endif
98
+ #elif defined(dRenderVariant_emissive)
99
+ #ifdef dEmissive
100
+ #if defined(dEmissiveType_instance)
101
+ vEmissive = readFromTexture(tEmissive, aInstance, uEmissiveTexDim).a;
102
+ #elif defined(dEmissiveType_groupInstance)
103
+ vEmissive = readFromTexture(tEmissive, aInstance * float(uGroupCount) + group, uEmissiveTexDim).a;
104
+ #elif defined(dEmissiveType_vertexInstance)
105
+ vEmissive = readFromTexture(tEmissive, int(aInstance) * uVertexCount + VertexID, uEmissiveTexDim).a;
106
+ #elif defined(dEmissiveType_volumeInstance)
107
+ vec3 egridPos = (uEmissiveGridTransform.w * (vModelPosition - uEmissiveGridTransform.xyz)) / uEmissiveGridDim;
108
+ vEmissive = texture3dFrom2dLinear(tEmissiveGrid, egridPos, uEmissiveGridDim, uEmissiveTexDim).a;
109
+ #endif
110
+ vEmissive *= uEmissiveStrength;
111
+ #endif
84
112
  #elif defined(dRenderVariant_pick)
85
113
  #ifdef requiredDrawBuffers
86
114
  vObject = vec4(packIntToRGB(float(uObjectId)), 1.0);