molstar 4.2.0 → 4.3.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 (339) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +197 -197
  3. package/build/viewer/embedded.html +52 -52
  4. package/build/viewer/index.html +129 -129
  5. package/build/viewer/molstar.js +1 -1
  6. package/build/viewer/molstar.js.LICENSE.txt +9 -0
  7. package/lib/apps/docking-viewer/index.html +36 -36
  8. package/lib/apps/mesoscale-explorer/index.html +100 -100
  9. package/lib/apps/mesoscale-explorer/style.scss +33 -33
  10. package/lib/apps/viewer/app.d.ts +2 -1
  11. package/lib/apps/viewer/app.js +2 -1
  12. package/lib/apps/viewer/embedded.html +52 -52
  13. package/lib/apps/viewer/index.html +129 -129
  14. package/lib/cli/chem-comp-dict/create-ions.js +9 -9
  15. package/lib/cli/chem-comp-dict/create-saccharides.js +9 -9
  16. package/lib/cli/cifschema/util/generate.js +12 -12
  17. package/lib/cli/lipid-params/index.js +9 -9
  18. package/lib/commonjs/apps/viewer/app.d.ts +2 -1
  19. package/lib/commonjs/apps/viewer/app.js +1 -0
  20. package/lib/commonjs/cli/chem-comp-dict/create-ions.js +9 -9
  21. package/lib/commonjs/cli/chem-comp-dict/create-saccharides.js +9 -9
  22. package/lib/commonjs/cli/cifschema/util/generate.js +12 -12
  23. package/lib/commonjs/cli/lipid-params/index.js +9 -9
  24. package/lib/commonjs/examples/alpha-orbitals/example-data.js +160 -160
  25. package/lib/commonjs/extensions/alpha-orbitals/gpu/shader.frag.js +136 -136
  26. package/lib/commonjs/extensions/assembly-symmetry/prop.js +24 -24
  27. package/lib/commonjs/extensions/dnatco/confal-pyramids/behavior.js +5 -5
  28. package/lib/commonjs/extensions/dnatco/ntc-tube/behavior.js +5 -5
  29. package/lib/commonjs/extensions/geo-export/usdz-exporter.js +41 -41
  30. package/lib/commonjs/extensions/meshes/mesh-extension.d.ts +1 -0
  31. package/lib/commonjs/extensions/mp4-export/encoder.js +1 -1
  32. package/lib/commonjs/extensions/mvs/components/annotation-label/representation.d.ts +0 -2
  33. package/lib/commonjs/extensions/mvs/components/custom-label/representation.d.ts +2 -2
  34. package/lib/commonjs/extensions/mvs/tree/mvs/mvs-builder.d.ts +8 -2
  35. package/lib/commonjs/extensions/sb-ncbr/index.d.ts +8 -0
  36. package/lib/commonjs/extensions/sb-ncbr/index.js +14 -1
  37. package/lib/commonjs/extensions/sb-ncbr/tunnels/actions.d.ts +20 -0
  38. package/lib/commonjs/extensions/sb-ncbr/tunnels/actions.js +89 -0
  39. package/lib/commonjs/extensions/sb-ncbr/tunnels/algorithm.d.ts +26 -0
  40. package/lib/commonjs/extensions/sb-ncbr/tunnels/algorithm.js +474 -0
  41. package/lib/commonjs/extensions/sb-ncbr/tunnels/behavior.d.ts +40 -0
  42. package/lib/commonjs/extensions/sb-ncbr/tunnels/behavior.js +96 -0
  43. package/lib/commonjs/extensions/sb-ncbr/tunnels/data-model.d.ts +146 -0
  44. package/lib/commonjs/extensions/sb-ncbr/tunnels/data-model.js +28 -0
  45. package/lib/commonjs/extensions/sb-ncbr/tunnels/examples.d.ts +12 -0
  46. package/lib/commonjs/extensions/sb-ncbr/tunnels/examples.js +54 -0
  47. package/lib/commonjs/extensions/sb-ncbr/tunnels/props.d.ts +19 -0
  48. package/lib/commonjs/extensions/sb-ncbr/tunnels/props.js +26 -0
  49. package/lib/commonjs/extensions/sb-ncbr/tunnels/representation.d.ts +29 -0
  50. package/lib/commonjs/extensions/sb-ncbr/tunnels/representation.js +99 -0
  51. package/lib/commonjs/mol-canvas3d/canvas3d.d.ts +17 -0
  52. package/lib/commonjs/mol-canvas3d/canvas3d.js +4 -0
  53. package/lib/commonjs/mol-canvas3d/passes/dof.d.ts +34 -0
  54. package/lib/commonjs/mol-canvas3d/passes/dof.js +167 -0
  55. package/lib/commonjs/mol-canvas3d/passes/draw.d.ts +2 -0
  56. package/lib/commonjs/mol-canvas3d/passes/draw.js +31 -8
  57. package/lib/commonjs/mol-canvas3d/passes/image.d.ts +8 -0
  58. package/lib/commonjs/mol-canvas3d/passes/postprocessing.d.ts +8 -0
  59. package/lib/commonjs/mol-canvas3d/passes/postprocessing.js +5 -0
  60. package/lib/commonjs/mol-geo/geometry/lines/lines.d.ts +0 -1
  61. package/lib/commonjs/mol-gl/shader/background.frag.js +95 -95
  62. package/lib/commonjs/mol-gl/shader/background.vert.js +11 -11
  63. package/lib/commonjs/mol-gl/shader/blend-back-dpoit.frag.js +13 -13
  64. package/lib/commonjs/mol-gl/shader/bloom/blur.frag.js +28 -28
  65. package/lib/commonjs/mol-gl/shader/bloom/composite.frag.js +33 -33
  66. package/lib/commonjs/mol-gl/shader/bloom/luminosity.frag.js +52 -52
  67. package/lib/commonjs/mol-gl/shader/cas.frag.js +144 -144
  68. package/lib/commonjs/mol-gl/shader/chunks/apply-fog.glsl.js +31 -31
  69. package/lib/commonjs/mol-gl/shader/chunks/apply-interior-color.glsl.js +12 -12
  70. package/lib/commonjs/mol-gl/shader/chunks/apply-light-color.glsl.js +77 -77
  71. package/lib/commonjs/mol-gl/shader/chunks/apply-marker-color.glsl.js +16 -16
  72. package/lib/commonjs/mol-gl/shader/chunks/assign-clipping-varying.glsl.js +8 -8
  73. package/lib/commonjs/mol-gl/shader/chunks/assign-color-varying.glsl.js +140 -140
  74. package/lib/commonjs/mol-gl/shader/chunks/assign-group.glsl.js +6 -6
  75. package/lib/commonjs/mol-gl/shader/chunks/assign-marker-varying.glsl.js +8 -8
  76. package/lib/commonjs/mol-gl/shader/chunks/assign-material-color.glsl.js +112 -112
  77. package/lib/commonjs/mol-gl/shader/chunks/assign-position.glsl.js +14 -14
  78. package/lib/commonjs/mol-gl/shader/chunks/assign-size.glsl.js +18 -18
  79. package/lib/commonjs/mol-gl/shader/chunks/check-picking-alpha.glsl.js +12 -12
  80. package/lib/commonjs/mol-gl/shader/chunks/check-transparency.glsl.js +16 -16
  81. package/lib/commonjs/mol-gl/shader/chunks/clip-instance.glsl.js +7 -7
  82. package/lib/commonjs/mol-gl/shader/chunks/clip-pixel.glsl.js +5 -5
  83. package/lib/commonjs/mol-gl/shader/chunks/color-frag-params.glsl.js +60 -60
  84. package/lib/commonjs/mol-gl/shader/chunks/color-vert-params.glsl.js +122 -122
  85. package/lib/commonjs/mol-gl/shader/chunks/common-clip.glsl.js +104 -104
  86. package/lib/commonjs/mol-gl/shader/chunks/common-frag-params.glsl.js +150 -150
  87. package/lib/commonjs/mol-gl/shader/chunks/common-vert-params.glsl.js +61 -61
  88. package/lib/commonjs/mol-gl/shader/chunks/common.glsl.js +234 -234
  89. package/lib/commonjs/mol-gl/shader/chunks/dpoit-write.glsl.js +62 -62
  90. package/lib/commonjs/mol-gl/shader/chunks/fade-lod.glsl.js +42 -42
  91. package/lib/commonjs/mol-gl/shader/chunks/float-to-rgba.glsl.js +39 -39
  92. package/lib/commonjs/mol-gl/shader/chunks/light-frag-params.glsl.js +127 -127
  93. package/lib/commonjs/mol-gl/shader/chunks/matrix-scale.glsl.js +5 -5
  94. package/lib/commonjs/mol-gl/shader/chunks/normal-frag-params.glsl.js +2 -2
  95. package/lib/commonjs/mol-gl/shader/chunks/read-from-texture.glsl.js +14 -14
  96. package/lib/commonjs/mol-gl/shader/chunks/rgba-to-float.glsl.js +84 -84
  97. package/lib/commonjs/mol-gl/shader/chunks/size-vert-params.glsl.js +11 -11
  98. package/lib/commonjs/mol-gl/shader/chunks/texture3d-from-1d-trilinear.glsl.js +23 -23
  99. package/lib/commonjs/mol-gl/shader/chunks/texture3d-from-2d-linear.glsl.js +17 -17
  100. package/lib/commonjs/mol-gl/shader/chunks/texture3d-from-2d-nearest.glsl.js +8 -8
  101. package/lib/commonjs/mol-gl/shader/chunks/wboit-write.glsl.js +25 -25
  102. package/lib/commonjs/mol-gl/shader/compose.frag.js +12 -12
  103. package/lib/commonjs/mol-gl/shader/compute/color-smoothing/accumulate.frag.js +23 -23
  104. package/lib/commonjs/mol-gl/shader/compute/color-smoothing/accumulate.vert.js +43 -43
  105. package/lib/commonjs/mol-gl/shader/compute/color-smoothing/normalize.frag.js +15 -15
  106. package/lib/commonjs/mol-gl/shader/copy.frag.js +11 -11
  107. package/lib/commonjs/mol-gl/shader/cylinders.frag.js +266 -266
  108. package/lib/commonjs/mol-gl/shader/cylinders.vert.js +89 -89
  109. package/lib/commonjs/mol-gl/shader/depth-merge.frag.js +23 -23
  110. package/lib/commonjs/mol-gl/shader/direct-volume.frag.js +362 -362
  111. package/lib/commonjs/mol-gl/shader/direct-volume.vert.js +41 -41
  112. package/lib/commonjs/mol-gl/shader/dof.frag.d.ts +7 -0
  113. package/lib/commonjs/mol-gl/shader/dof.frag.js +122 -0
  114. package/lib/commonjs/mol-gl/shader/evaluate-dpoit.frag.js +10 -10
  115. package/lib/commonjs/mol-gl/shader/evaluate-wboit.frag.js +17 -17
  116. package/lib/commonjs/mol-gl/shader/fxaa.frag.js +228 -228
  117. package/lib/commonjs/mol-gl/shader/gaussian-density.frag.js +49 -49
  118. package/lib/commonjs/mol-gl/shader/gaussian-density.vert.js +27 -27
  119. package/lib/commonjs/mol-gl/shader/hi-z.frag.js +18 -18
  120. package/lib/commonjs/mol-gl/shader/histogram-pyramid/reduction.frag.js +58 -58
  121. package/lib/commonjs/mol-gl/shader/histogram-pyramid/sum.frag.js +19 -19
  122. package/lib/commonjs/mol-gl/shader/image.frag.js +169 -169
  123. package/lib/commonjs/mol-gl/shader/image.vert.js +21 -21
  124. package/lib/commonjs/mol-gl/shader/lines.frag.js +42 -42
  125. package/lib/commonjs/mol-gl/shader/lines.vert.js +117 -117
  126. package/lib/commonjs/mol-gl/shader/marching-cubes/active-voxels.frag.js +70 -70
  127. package/lib/commonjs/mol-gl/shader/marching-cubes/isosurface.frag.js +311 -311
  128. package/lib/commonjs/mol-gl/shader/marking/edge.frag.js +28 -28
  129. package/lib/commonjs/mol-gl/shader/marking/overlay.frag.js +26 -26
  130. package/lib/commonjs/mol-gl/shader/mesh.frag.js +65 -65
  131. package/lib/commonjs/mol-gl/shader/mesh.vert.js +49 -49
  132. package/lib/commonjs/mol-gl/shader/outlines.frag.js +95 -95
  133. package/lib/commonjs/mol-gl/shader/points.frag.js +59 -59
  134. package/lib/commonjs/mol-gl/shader/points.vert.js +38 -38
  135. package/lib/commonjs/mol-gl/shader/postprocessing.frag.js +150 -150
  136. package/lib/commonjs/mol-gl/shader/quad.vert.js +10 -10
  137. package/lib/commonjs/mol-gl/shader/shadows.frag.js +123 -123
  138. package/lib/commonjs/mol-gl/shader/smaa/blend.frag.js +56 -56
  139. package/lib/commonjs/mol-gl/shader/smaa/blend.vert.js +25 -25
  140. package/lib/commonjs/mol-gl/shader/smaa/edges.frag.js +66 -66
  141. package/lib/commonjs/mol-gl/shader/smaa/edges.vert.js +26 -26
  142. package/lib/commonjs/mol-gl/shader/smaa/weights.frag.js +206 -206
  143. package/lib/commonjs/mol-gl/shader/smaa/weights.vert.js +32 -32
  144. package/lib/commonjs/mol-gl/shader/spheres.frag.js +148 -148
  145. package/lib/commonjs/mol-gl/shader/spheres.vert.js +132 -132
  146. package/lib/commonjs/mol-gl/shader/ssao-blur.frag.js +97 -97
  147. package/lib/commonjs/mol-gl/shader/ssao.frag.js +211 -211
  148. package/lib/commonjs/mol-gl/shader/text.frag.js +85 -85
  149. package/lib/commonjs/mol-gl/shader/text.vert.js +85 -85
  150. package/lib/commonjs/mol-gl/shader/util/grid3d-template.frag.js +46 -46
  151. package/lib/commonjs/mol-gl/shader-code.js +15 -15
  152. package/lib/commonjs/mol-gl/webgl/compat.js +12 -12
  153. package/lib/commonjs/mol-gl/webgl/context.js +1 -0
  154. package/lib/commonjs/mol-gl/webgl/timer.d.ts +1 -1
  155. package/lib/commonjs/mol-gl/webgl/timer.js +8 -1
  156. package/lib/commonjs/mol-math/linear-algebra/3d/minimize-rmsd.js +2 -1
  157. package/lib/commonjs/mol-plugin/animation-loop.d.ts +1 -0
  158. package/lib/commonjs/mol-plugin/behavior/dynamic/volume-streaming/behavior.d.ts +6 -6
  159. package/lib/commonjs/mol-plugin/behavior/dynamic/volume-streaming/model.d.ts +1 -1
  160. package/lib/commonjs/mol-plugin/behavior/dynamic/volume-streaming/transformers.d.ts +3 -3
  161. package/lib/commonjs/mol-plugin-state/animation/built-in/state-snapshots.js +7 -3
  162. package/lib/commonjs/mol-plugin-ui/viewport/simple-settings.js +3 -0
  163. package/lib/commonjs/servers/common/swagger-ui/indexTemplate.js +66 -66
  164. package/lib/commonjs/servers/volume/config.js +5 -5
  165. package/lib/examples/alpha-orbitals/example-data.js +160 -160
  166. package/lib/examples/alpha-orbitals/index.html +72 -72
  167. package/lib/examples/basic-wrapper/index.html +137 -137
  168. package/lib/examples/lighting/index.html +88 -88
  169. package/lib/examples/proteopedia-wrapper/index.html +236 -236
  170. package/lib/extensions/alpha-orbitals/gpu/shader.frag.js +136 -136
  171. package/lib/extensions/assembly-symmetry/prop.js +24 -24
  172. package/lib/extensions/dnatco/confal-pyramids/behavior.js +5 -5
  173. package/lib/extensions/dnatco/ntc-tube/behavior.js +5 -5
  174. package/lib/extensions/geo-export/usdz-exporter.js +41 -41
  175. package/lib/extensions/meshes/mesh-extension.d.ts +1 -0
  176. package/lib/extensions/mp4-export/encoder.js +1 -1
  177. package/lib/extensions/mvs/components/annotation-label/representation.d.ts +0 -2
  178. package/lib/extensions/mvs/components/custom-label/representation.d.ts +2 -2
  179. package/lib/extensions/mvs/tree/mvs/mvs-builder.d.ts +8 -2
  180. package/lib/extensions/sb-ncbr/index.d.ts +8 -0
  181. package/lib/extensions/sb-ncbr/index.js +8 -0
  182. package/lib/extensions/sb-ncbr/tunnels/actions.d.ts +20 -0
  183. package/lib/extensions/sb-ncbr/tunnels/actions.js +86 -0
  184. package/lib/extensions/sb-ncbr/tunnels/algorithm.d.ts +26 -0
  185. package/lib/extensions/sb-ncbr/tunnels/algorithm.js +469 -0
  186. package/lib/extensions/sb-ncbr/tunnels/behavior.d.ts +40 -0
  187. package/lib/extensions/sb-ncbr/tunnels/behavior.js +92 -0
  188. package/lib/extensions/sb-ncbr/tunnels/data-model.d.ts +146 -0
  189. package/lib/extensions/sb-ncbr/tunnels/data-model.js +23 -0
  190. package/lib/extensions/sb-ncbr/tunnels/examples.d.ts +12 -0
  191. package/lib/extensions/sb-ncbr/tunnels/examples.js +49 -0
  192. package/lib/extensions/sb-ncbr/tunnels/props.d.ts +19 -0
  193. package/lib/extensions/sb-ncbr/tunnels/props.js +22 -0
  194. package/lib/extensions/sb-ncbr/tunnels/representation.d.ts +29 -0
  195. package/lib/extensions/sb-ncbr/tunnels/representation.js +96 -0
  196. package/lib/mol-canvas3d/canvas3d.d.ts +17 -0
  197. package/lib/mol-canvas3d/canvas3d.js +4 -0
  198. package/lib/mol-canvas3d/passes/dof.d.ts +34 -0
  199. package/lib/mol-canvas3d/passes/dof.js +163 -0
  200. package/lib/mol-canvas3d/passes/draw.d.ts +2 -0
  201. package/lib/mol-canvas3d/passes/draw.js +31 -8
  202. package/lib/mol-canvas3d/passes/image.d.ts +8 -0
  203. package/lib/mol-canvas3d/passes/postprocessing.d.ts +8 -0
  204. package/lib/mol-canvas3d/passes/postprocessing.js +5 -0
  205. package/lib/mol-geo/geometry/lines/lines.d.ts +0 -1
  206. package/lib/mol-gl/shader/background.frag.js +95 -95
  207. package/lib/mol-gl/shader/background.vert.js +11 -11
  208. package/lib/mol-gl/shader/blend-back-dpoit.frag.js +13 -13
  209. package/lib/mol-gl/shader/bloom/blur.frag.js +28 -28
  210. package/lib/mol-gl/shader/bloom/composite.frag.js +33 -33
  211. package/lib/mol-gl/shader/bloom/luminosity.frag.js +52 -52
  212. package/lib/mol-gl/shader/cas.frag.js +144 -144
  213. package/lib/mol-gl/shader/chunks/apply-fog.glsl.js +31 -31
  214. package/lib/mol-gl/shader/chunks/apply-interior-color.glsl.js +12 -12
  215. package/lib/mol-gl/shader/chunks/apply-light-color.glsl.js +77 -77
  216. package/lib/mol-gl/shader/chunks/apply-marker-color.glsl.js +16 -16
  217. package/lib/mol-gl/shader/chunks/assign-clipping-varying.glsl.js +8 -8
  218. package/lib/mol-gl/shader/chunks/assign-color-varying.glsl.js +140 -140
  219. package/lib/mol-gl/shader/chunks/assign-group.glsl.js +6 -6
  220. package/lib/mol-gl/shader/chunks/assign-marker-varying.glsl.js +8 -8
  221. package/lib/mol-gl/shader/chunks/assign-material-color.glsl.js +112 -112
  222. package/lib/mol-gl/shader/chunks/assign-position.glsl.js +14 -14
  223. package/lib/mol-gl/shader/chunks/assign-size.glsl.js +18 -18
  224. package/lib/mol-gl/shader/chunks/check-picking-alpha.glsl.js +12 -12
  225. package/lib/mol-gl/shader/chunks/check-transparency.glsl.js +16 -16
  226. package/lib/mol-gl/shader/chunks/clip-instance.glsl.js +7 -7
  227. package/lib/mol-gl/shader/chunks/clip-pixel.glsl.js +5 -5
  228. package/lib/mol-gl/shader/chunks/color-frag-params.glsl.js +60 -60
  229. package/lib/mol-gl/shader/chunks/color-vert-params.glsl.js +122 -122
  230. package/lib/mol-gl/shader/chunks/common-clip.glsl.js +104 -104
  231. package/lib/mol-gl/shader/chunks/common-frag-params.glsl.js +150 -150
  232. package/lib/mol-gl/shader/chunks/common-vert-params.glsl.js +61 -61
  233. package/lib/mol-gl/shader/chunks/common.glsl.js +234 -234
  234. package/lib/mol-gl/shader/chunks/dpoit-write.glsl.js +62 -62
  235. package/lib/mol-gl/shader/chunks/fade-lod.glsl.js +42 -42
  236. package/lib/mol-gl/shader/chunks/float-to-rgba.glsl.js +39 -39
  237. package/lib/mol-gl/shader/chunks/light-frag-params.glsl.js +127 -127
  238. package/lib/mol-gl/shader/chunks/matrix-scale.glsl.js +5 -5
  239. package/lib/mol-gl/shader/chunks/normal-frag-params.glsl.js +2 -2
  240. package/lib/mol-gl/shader/chunks/read-from-texture.glsl.js +14 -14
  241. package/lib/mol-gl/shader/chunks/rgba-to-float.glsl.js +84 -84
  242. package/lib/mol-gl/shader/chunks/size-vert-params.glsl.js +11 -11
  243. package/lib/mol-gl/shader/chunks/texture3d-from-1d-trilinear.glsl.js +23 -23
  244. package/lib/mol-gl/shader/chunks/texture3d-from-2d-linear.glsl.js +17 -17
  245. package/lib/mol-gl/shader/chunks/texture3d-from-2d-nearest.glsl.js +8 -8
  246. package/lib/mol-gl/shader/chunks/wboit-write.glsl.js +25 -25
  247. package/lib/mol-gl/shader/compose.frag.js +12 -12
  248. package/lib/mol-gl/shader/compute/color-smoothing/accumulate.frag.js +23 -23
  249. package/lib/mol-gl/shader/compute/color-smoothing/accumulate.vert.js +43 -43
  250. package/lib/mol-gl/shader/compute/color-smoothing/normalize.frag.js +15 -15
  251. package/lib/mol-gl/shader/copy.frag.js +11 -11
  252. package/lib/mol-gl/shader/cylinders.frag.js +266 -266
  253. package/lib/mol-gl/shader/cylinders.vert.js +89 -89
  254. package/lib/mol-gl/shader/depth-merge.frag.js +23 -23
  255. package/lib/mol-gl/shader/direct-volume.frag.js +362 -362
  256. package/lib/mol-gl/shader/direct-volume.vert.js +41 -41
  257. package/lib/mol-gl/shader/dof.frag.d.ts +7 -0
  258. package/lib/mol-gl/shader/dof.frag.js +119 -0
  259. package/lib/mol-gl/shader/evaluate-dpoit.frag.js +10 -10
  260. package/lib/mol-gl/shader/evaluate-wboit.frag.js +17 -17
  261. package/lib/mol-gl/shader/fxaa.frag.js +228 -228
  262. package/lib/mol-gl/shader/gaussian-density.frag.js +49 -49
  263. package/lib/mol-gl/shader/gaussian-density.vert.js +27 -27
  264. package/lib/mol-gl/shader/hi-z.frag.js +18 -18
  265. package/lib/mol-gl/shader/histogram-pyramid/reduction.frag.js +58 -58
  266. package/lib/mol-gl/shader/histogram-pyramid/sum.frag.js +19 -19
  267. package/lib/mol-gl/shader/image.frag.js +169 -169
  268. package/lib/mol-gl/shader/image.vert.js +21 -21
  269. package/lib/mol-gl/shader/lines.frag.js +42 -42
  270. package/lib/mol-gl/shader/lines.vert.js +117 -117
  271. package/lib/mol-gl/shader/marching-cubes/active-voxels.frag.js +70 -70
  272. package/lib/mol-gl/shader/marching-cubes/isosurface.frag.js +311 -311
  273. package/lib/mol-gl/shader/marking/edge.frag.js +28 -28
  274. package/lib/mol-gl/shader/marking/overlay.frag.js +26 -26
  275. package/lib/mol-gl/shader/mesh.frag.js +65 -65
  276. package/lib/mol-gl/shader/mesh.vert.js +49 -49
  277. package/lib/mol-gl/shader/outlines.frag.js +95 -95
  278. package/lib/mol-gl/shader/points.frag.js +59 -59
  279. package/lib/mol-gl/shader/points.vert.js +38 -38
  280. package/lib/mol-gl/shader/postprocessing.frag.js +150 -150
  281. package/lib/mol-gl/shader/quad.vert.js +10 -10
  282. package/lib/mol-gl/shader/shadows.frag.js +123 -123
  283. package/lib/mol-gl/shader/smaa/blend.frag.js +56 -56
  284. package/lib/mol-gl/shader/smaa/blend.vert.js +25 -25
  285. package/lib/mol-gl/shader/smaa/edges.frag.js +66 -66
  286. package/lib/mol-gl/shader/smaa/edges.vert.js +26 -26
  287. package/lib/mol-gl/shader/smaa/weights.frag.js +206 -206
  288. package/lib/mol-gl/shader/smaa/weights.vert.js +32 -32
  289. package/lib/mol-gl/shader/spheres.frag.js +148 -148
  290. package/lib/mol-gl/shader/spheres.vert.js +132 -132
  291. package/lib/mol-gl/shader/ssao-blur.frag.js +97 -97
  292. package/lib/mol-gl/shader/ssao.frag.js +211 -211
  293. package/lib/mol-gl/shader/text.frag.js +85 -85
  294. package/lib/mol-gl/shader/text.vert.js +85 -85
  295. package/lib/mol-gl/shader/util/grid3d-template.frag.js +46 -46
  296. package/lib/mol-gl/shader-code.js +15 -15
  297. package/lib/mol-gl/webgl/compat.js +12 -12
  298. package/lib/mol-gl/webgl/context.js +1 -0
  299. package/lib/mol-gl/webgl/timer.d.ts +1 -1
  300. package/lib/mol-gl/webgl/timer.js +8 -1
  301. package/lib/mol-math/linear-algebra/3d/minimize-rmsd.js +2 -1
  302. package/lib/mol-plugin/animation-loop.d.ts +1 -0
  303. package/lib/mol-plugin/behavior/dynamic/volume-streaming/behavior.d.ts +6 -6
  304. package/lib/mol-plugin/behavior/dynamic/volume-streaming/model.d.ts +1 -1
  305. package/lib/mol-plugin/behavior/dynamic/volume-streaming/transformers.d.ts +3 -3
  306. package/lib/mol-plugin/version.js +2 -2
  307. package/lib/mol-plugin-state/animation/built-in/state-snapshots.js +7 -3
  308. package/lib/mol-plugin-ui/skin/base/base.scss +37 -37
  309. package/lib/mol-plugin-ui/skin/base/components/controls-base.scss +333 -333
  310. package/lib/mol-plugin-ui/skin/base/components/controls.scss +445 -445
  311. package/lib/mol-plugin-ui/skin/base/components/help.scss +27 -27
  312. package/lib/mol-plugin-ui/skin/base/components/line-graph.scss +67 -67
  313. package/lib/mol-plugin-ui/skin/base/components/log.scss +100 -100
  314. package/lib/mol-plugin-ui/skin/base/components/misc.scss +663 -663
  315. package/lib/mol-plugin-ui/skin/base/components/sequence.scss +125 -125
  316. package/lib/mol-plugin-ui/skin/base/components/slider.scss +165 -165
  317. package/lib/mol-plugin-ui/skin/base/components/tasks.scss +99 -99
  318. package/lib/mol-plugin-ui/skin/base/components/toast.scss +83 -83
  319. package/lib/mol-plugin-ui/skin/base/components/transformer.scss +163 -163
  320. package/lib/mol-plugin-ui/skin/base/components/viewport.scss +194 -194
  321. package/lib/mol-plugin-ui/skin/base/layout/common.scss +71 -71
  322. package/lib/mol-plugin-ui/skin/base/layout/controls-landscape.scss +89 -89
  323. package/lib/mol-plugin-ui/skin/base/layout/controls-outside.scss +98 -98
  324. package/lib/mol-plugin-ui/skin/base/layout/controls-portrait.scss +108 -108
  325. package/lib/mol-plugin-ui/skin/base/layout.scss +40 -40
  326. package/lib/mol-plugin-ui/skin/base/logo.scss +12 -12
  327. package/lib/mol-plugin-ui/skin/base/normalize.scss +209 -209
  328. package/lib/mol-plugin-ui/skin/base/ui.scss +40 -40
  329. package/lib/mol-plugin-ui/skin/base/variables.scss +88 -88
  330. package/lib/mol-plugin-ui/skin/blue.scss +1 -1
  331. package/lib/mol-plugin-ui/skin/colors/blue.scss +23 -23
  332. package/lib/mol-plugin-ui/skin/colors/dark.scss +23 -23
  333. package/lib/mol-plugin-ui/skin/colors/light.scss +29 -29
  334. package/lib/mol-plugin-ui/skin/dark.scss +1 -1
  335. package/lib/mol-plugin-ui/skin/light.scss +1 -1
  336. package/lib/mol-plugin-ui/viewport/simple-settings.js +3 -0
  337. package/lib/servers/common/swagger-ui/indexTemplate.js +66 -66
  338. package/lib/servers/volume/config.js +5 -5
  339. package/package.json +196 -195
@@ -8,101 +8,101 @@
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.ssaoBlur_frag = void 0;
11
- exports.ssaoBlur_frag = `
12
- precision highp float;
13
- precision highp int;
14
- precision highp sampler2D;
15
-
16
- uniform sampler2D tSsaoDepth;
17
- uniform vec2 uTexSize;
18
- uniform vec4 uBounds;
19
-
20
- uniform float uKernel[dOcclusionKernelSize];
21
-
22
- uniform float uBlurDirectionX;
23
- uniform float uBlurDirectionY;
24
-
25
- uniform mat4 uInvProjection;
26
- uniform float uNear;
27
- uniform float uFar;
28
-
29
- #include common
30
-
31
- float getViewZ(const in float depth) {
32
- #if dOrthographic == 1
33
- return orthographicDepthToViewZ(depth, uNear, uFar);
34
- #else
35
- return perspectiveDepthToViewZ(depth, uNear, uFar);
36
- #endif
37
- }
38
-
39
- bool isBackground(const in float depth) {
40
- return depth == 1.0;
41
- }
42
-
43
- bool outsideBounds(const in vec2 p) {
44
- return p.x < uBounds.x || p.y < uBounds.y || p.x > uBounds.z || p.y > uBounds.w;
45
- }
46
-
47
- float getPixelSize(const in vec2 coords, const in float depth) {
48
- vec3 viewPos0 = screenSpaceToViewSpace(vec3(coords, depth), uInvProjection);
49
- vec3 viewPos1 = screenSpaceToViewSpace(vec3(coords + vec2(1.0, 0.0) / uTexSize, depth), uInvProjection);
50
- return distance(viewPos0, viewPos1);
51
- }
52
-
53
- void main(void) {
54
- vec2 coords = gl_FragCoord.xy / uTexSize;
55
-
56
- vec2 packedDepth = texture2D(tSsaoDepth, coords).zw;
57
-
58
- if (outsideBounds(coords)) {
59
- gl_FragColor = vec4(packUnitIntervalToRG(1.0), packedDepth);
60
- return;
61
- }
62
-
63
- float selfDepth = unpackRGToUnitInterval(packedDepth);
64
- // if background and if second pass
65
- if (isBackground(selfDepth) && uBlurDirectionY != 0.0) {
66
- gl_FragColor = vec4(packUnitIntervalToRG(1.0), packedDepth);
67
- return;
68
- }
69
-
70
- float selfViewZ = getViewZ(selfDepth);
71
- float pixelSize = getPixelSize(coords, selfDepth);
72
- // max diff depth between two pixels
73
- float maxDiffViewZ = 1.0;
74
-
75
- vec2 offset = vec2(uBlurDirectionX, uBlurDirectionY) / uTexSize;
76
-
77
- float sum = 0.0;
78
- float kernelSum = 0.0;
79
- // only if kernelSize is odd
80
- for (int i = -dOcclusionKernelSize / 2; i <= dOcclusionKernelSize / 2; i++) {
81
- if (abs(float(i)) > 1.0 && abs(float(i)) * pixelSize > 0.8) continue;
82
-
83
- vec2 sampleCoords = coords + float(i) * offset;
84
- if (outsideBounds(sampleCoords)) {
85
- continue;
86
- }
87
-
88
- vec4 sampleSsaoDepth = texture2D(tSsaoDepth, sampleCoords);
89
-
90
- float sampleDepth = unpackRGToUnitInterval(sampleSsaoDepth.zw);
91
- if (isBackground(sampleDepth)) {
92
- continue;
93
- }
94
-
95
- float sampleViewZ = getViewZ(sampleDepth);
96
- if (abs(selfViewZ - sampleViewZ) > maxDiffViewZ) {
97
- continue;
98
- }
99
-
100
- float kernel = uKernel[int(abs(float(i)))]; // abs is not defined for int in webgl1
101
- float sampleValue = unpackRGToUnitInterval(sampleSsaoDepth.xy);
102
-
103
- sum += kernel * sampleValue;
104
- kernelSum += kernel;
105
- }
106
- gl_FragColor = vec4(packUnitIntervalToRG(sum / kernelSum), packedDepth);
107
- }
11
+ exports.ssaoBlur_frag = `
12
+ precision highp float;
13
+ precision highp int;
14
+ precision highp sampler2D;
15
+
16
+ uniform sampler2D tSsaoDepth;
17
+ uniform vec2 uTexSize;
18
+ uniform vec4 uBounds;
19
+
20
+ uniform float uKernel[dOcclusionKernelSize];
21
+
22
+ uniform float uBlurDirectionX;
23
+ uniform float uBlurDirectionY;
24
+
25
+ uniform mat4 uInvProjection;
26
+ uniform float uNear;
27
+ uniform float uFar;
28
+
29
+ #include common
30
+
31
+ float getViewZ(const in float depth) {
32
+ #if dOrthographic == 1
33
+ return orthographicDepthToViewZ(depth, uNear, uFar);
34
+ #else
35
+ return perspectiveDepthToViewZ(depth, uNear, uFar);
36
+ #endif
37
+ }
38
+
39
+ bool isBackground(const in float depth) {
40
+ return depth == 1.0;
41
+ }
42
+
43
+ bool outsideBounds(const in vec2 p) {
44
+ return p.x < uBounds.x || p.y < uBounds.y || p.x > uBounds.z || p.y > uBounds.w;
45
+ }
46
+
47
+ float getPixelSize(const in vec2 coords, const in float depth) {
48
+ vec3 viewPos0 = screenSpaceToViewSpace(vec3(coords, depth), uInvProjection);
49
+ vec3 viewPos1 = screenSpaceToViewSpace(vec3(coords + vec2(1.0, 0.0) / uTexSize, depth), uInvProjection);
50
+ return distance(viewPos0, viewPos1);
51
+ }
52
+
53
+ void main(void) {
54
+ vec2 coords = gl_FragCoord.xy / uTexSize;
55
+
56
+ vec2 packedDepth = texture2D(tSsaoDepth, coords).zw;
57
+
58
+ if (outsideBounds(coords)) {
59
+ gl_FragColor = vec4(packUnitIntervalToRG(1.0), packedDepth);
60
+ return;
61
+ }
62
+
63
+ float selfDepth = unpackRGToUnitInterval(packedDepth);
64
+ // if background and if second pass
65
+ if (isBackground(selfDepth) && uBlurDirectionY != 0.0) {
66
+ gl_FragColor = vec4(packUnitIntervalToRG(1.0), packedDepth);
67
+ return;
68
+ }
69
+
70
+ float selfViewZ = getViewZ(selfDepth);
71
+ float pixelSize = getPixelSize(coords, selfDepth);
72
+ // max diff depth between two pixels
73
+ float maxDiffViewZ = 1.0;
74
+
75
+ vec2 offset = vec2(uBlurDirectionX, uBlurDirectionY) / uTexSize;
76
+
77
+ float sum = 0.0;
78
+ float kernelSum = 0.0;
79
+ // only if kernelSize is odd
80
+ for (int i = -dOcclusionKernelSize / 2; i <= dOcclusionKernelSize / 2; i++) {
81
+ if (abs(float(i)) > 1.0 && abs(float(i)) * pixelSize > 0.8) continue;
82
+
83
+ vec2 sampleCoords = coords + float(i) * offset;
84
+ if (outsideBounds(sampleCoords)) {
85
+ continue;
86
+ }
87
+
88
+ vec4 sampleSsaoDepth = texture2D(tSsaoDepth, sampleCoords);
89
+
90
+ float sampleDepth = unpackRGToUnitInterval(sampleSsaoDepth.zw);
91
+ if (isBackground(sampleDepth)) {
92
+ continue;
93
+ }
94
+
95
+ float sampleViewZ = getViewZ(sampleDepth);
96
+ if (abs(selfViewZ - sampleViewZ) > maxDiffViewZ) {
97
+ continue;
98
+ }
99
+
100
+ float kernel = uKernel[int(abs(float(i)))]; // abs is not defined for int in webgl1
101
+ float sampleValue = unpackRGToUnitInterval(sampleSsaoDepth.xy);
102
+
103
+ sum += kernel * sampleValue;
104
+ kernelSum += kernel;
105
+ }
106
+ gl_FragColor = vec4(packUnitIntervalToRG(sum / kernelSum), packedDepth);
107
+ }
108
108
  `;
@@ -8,215 +8,215 @@
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.ssao_frag = void 0;
11
- exports.ssao_frag = `
12
- precision highp float;
13
- precision highp int;
14
- precision highp sampler2D;
15
-
16
- #include common
17
-
18
- uniform sampler2D tDepth;
19
- uniform sampler2D tDepthHalf;
20
- uniform sampler2D tDepthQuarter;
21
- uniform vec2 uTexSize;
22
- uniform vec4 uBounds;
23
-
24
- uniform vec3 uSamples[dNSamples];
25
-
26
- uniform mat4 uProjection;
27
- uniform mat4 uInvProjection;
28
-
29
- #ifdef dMultiScale
30
- uniform float uLevelRadius[dLevels];
31
- uniform float uLevelBias[dLevels];
32
- uniform float uNearThreshold;
33
- uniform float uFarThreshold;
34
- #else
35
- uniform float uRadius;
36
- #endif
37
- uniform float uBias;
38
-
39
- float smootherstep(float edge0, float edge1, float x) {
40
- x = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);
41
- return x * x * x * (x * (x * 6.0 - 15.0) + 10.0);
42
- }
43
-
44
- float noise(const in vec2 coords) {
45
- float a = 12.9898;
46
- float b = 78.233;
47
- float c = 43758.5453;
48
- float dt = dot(coords, vec2(a,b));
49
- float sn = mod(dt, PI);
50
- return abs(fract(sin(sn) * c)); // is abs necessary?
51
- }
52
-
53
- vec2 getNoiseVec2(const in vec2 coords) {
54
- return vec2(noise(coords), noise(coords + vec2(PI, 2.71828)));
55
- }
56
-
57
- bool isBackground(const in float depth) {
58
- return depth == 1.0;
59
- }
60
-
61
- float getDepth(const in vec2 coords) {
62
- vec2 c = vec2(clamp(coords.x, uBounds.x, uBounds.z), clamp(coords.y, uBounds.y, uBounds.w));
63
- #ifdef depthTextureSupport
64
- return texture2D(tDepth, c).r;
65
- #else
66
- return unpackRGBAToDepth(texture2D(tDepth, c));
67
- #endif
68
- }
69
-
70
- #define dQuarterThreshold 0.1
71
- #define dHalfThreshold 0.05
72
-
73
- float getMappedDepth(const in vec2 coords, const in vec2 selfCoords) {
74
- vec2 c = vec2(clamp(coords.x, uBounds.x, uBounds.z), clamp(coords.y, uBounds.y, uBounds.w));
75
- float d = distance(coords, selfCoords);
76
- #ifdef depthTextureSupport
77
- if (d > dQuarterThreshold) {
78
- return texture2D(tDepthQuarter, c).r;
79
- } else if (d > dHalfThreshold) {
80
- return texture2D(tDepthHalf, c).r;
81
- } else {
82
- return texture2D(tDepth, c).r;
83
- }
84
- #else
85
- if (d > dQuarterThreshold) {
86
- return unpackRGBAToDepth(texture2D(tDepthQuarter, c));
87
- } else if (d > dHalfThreshold) {
88
- return unpackRGBAToDepth(texture2D(tDepthHalf, c));
89
- } else {
90
- return unpackRGBAToDepth(texture2D(tDepth, c));
91
- }
92
- #endif
93
- }
94
-
95
- // adapted from https://gist.github.com/bgolus/a07ed65602c009d5e2f753826e8078a0
96
- vec3 viewNormalAtPixelPositionAccurate(vec2 vpos) {
97
- // current pixel's depth
98
- float c = getDepth(vpos);
99
-
100
- // get current pixel's view space position
101
- vec3 viewSpacePos_c = screenSpaceToViewSpace(vec3(vpos, c), uInvProjection);
102
-
103
- // get view space position at 1 pixel offsets in each major direction
104
- vec3 viewSpacePos_l = screenSpaceToViewSpace(vec3(vpos + vec2(-1.0, 0.0) / uTexSize, getDepth(vpos + vec2(-1.0, 0.0) / uTexSize)), uInvProjection);
105
- vec3 viewSpacePos_r = screenSpaceToViewSpace(vec3(vpos + vec2( 1.0, 0.0) / uTexSize, getDepth(vpos + vec2( 1.0, 0.0) / uTexSize)), uInvProjection);
106
- vec3 viewSpacePos_d = screenSpaceToViewSpace(vec3(vpos + vec2( 0.0,-1.0) / uTexSize, getDepth(vpos + vec2( 0.0,-1.0) / uTexSize)), uInvProjection);
107
- vec3 viewSpacePos_u = screenSpaceToViewSpace(vec3(vpos + vec2( 0.0, 1.0) / uTexSize, getDepth(vpos + vec2( 0.0, 1.0) / uTexSize)), uInvProjection);
108
-
109
- // get the difference between the current and each offset position
110
- vec3 l = viewSpacePos_c - viewSpacePos_l;
111
- vec3 r = viewSpacePos_r - viewSpacePos_c;
112
- vec3 d = viewSpacePos_c - viewSpacePos_d;
113
- vec3 u = viewSpacePos_u - viewSpacePos_c;
114
-
115
- // get depth values at 1 & 2 pixels offsets from current along the horizontal axis
116
- vec4 H = vec4(
117
- getDepth(vpos + vec2(-1.0, 0.0) / uTexSize),
118
- getDepth(vpos + vec2( 1.0, 0.0) / uTexSize),
119
- getDepth(vpos + vec2(-2.0, 0.0) / uTexSize),
120
- getDepth(vpos + vec2( 2.0, 0.0) / uTexSize)
121
- );
122
-
123
- // get depth values at 1 & 2 pixels offsets from current along the vertical axis
124
- vec4 V = vec4(
125
- getDepth(vpos + vec2(0.0,-1.0) / uTexSize),
126
- getDepth(vpos + vec2(0.0, 1.0) / uTexSize),
127
- getDepth(vpos + vec2(0.0,-2.0) / uTexSize),
128
- getDepth(vpos + vec2(0.0, 2.0) / uTexSize)
129
- );
130
-
131
- // current pixel's depth difference from slope of offset depth samples
132
- // differs from original article because we're using non-linear depth values
133
- // see article's comments
134
- vec2 he = abs((2.0 * H.xy - H.zw) - c);
135
- vec2 ve = abs((2.0 * V.xy - V.zw) - c);
136
-
137
- // pick horizontal and vertical diff with the smallest depth difference from slopes
138
- vec3 hDeriv = he.x < he.y ? l : r;
139
- vec3 vDeriv = ve.x < ve.y ? d : u;
140
-
141
- // get view space normal from the cross product of the best derivatives
142
- vec3 viewNormal = normalize(cross(hDeriv, vDeriv));
143
-
144
- return viewNormal;
145
- }
146
-
147
- float getPixelSize(const in vec2 coords, const in float depth) {
148
- vec3 viewPos0 = screenSpaceToViewSpace(vec3(coords, depth), uInvProjection);
149
- vec3 viewPos1 = screenSpaceToViewSpace(vec3(coords + vec2(1.0, 0.0) / uTexSize, depth), uInvProjection);
150
- return distance(viewPos0, viewPos1);
151
- }
152
-
153
- // StarCraft II Ambient Occlusion by [Filion and McNaughton 2008]
154
- void main(void) {
155
- vec2 invTexSize = 1.0 / uTexSize;
156
- vec2 selfCoords = gl_FragCoord.xy * invTexSize;
157
-
158
- float selfDepth = getDepth(selfCoords);
159
- vec2 selfPackedDepth = packUnitIntervalToRG(selfDepth);
160
-
161
- if (isBackground(selfDepth)) {
162
- gl_FragColor = vec4(packUnitIntervalToRG(1.0), selfPackedDepth);
163
- return;
164
- }
165
-
166
- vec3 selfViewNormal = viewNormalAtPixelPositionAccurate(selfCoords);
167
- vec3 selfViewPos = screenSpaceToViewSpace(vec3(selfCoords, selfDepth), uInvProjection);
168
-
169
- vec3 randomVec = normalize(vec3(getNoiseVec2(selfCoords) * 2.0 - 1.0, 0.0));
170
- vec3 tangent = normalize(randomVec - selfViewNormal * dot(randomVec, selfViewNormal));
171
- vec3 bitangent = cross(selfViewNormal, tangent);
172
- mat3 TBN = mat3(tangent, bitangent, selfViewNormal);
173
-
174
- float occlusion = 0.0;
175
- #ifdef dMultiScale
176
- float pixelSize = getPixelSize(selfCoords, selfDepth);
177
-
178
- for(int l = 0; l < dLevels; l++) {
179
- // TODO: smooth transition
180
- if (pixelSize * uNearThreshold > uLevelRadius[l]) continue;
181
- if (pixelSize * uFarThreshold < uLevelRadius[l]) continue;
182
-
183
- float levelOcclusion = 0.0;
184
- for(int i = 0; i < dNSamples; i++) {
185
- // get sample position:
186
- vec3 sampleViewPos = TBN * uSamples[i];
187
- sampleViewPos = selfViewPos + sampleViewPos * uLevelRadius[l];
188
-
189
- // project sample position:
190
- vec4 offset = vec4(sampleViewPos, 1.0);
191
- offset = uProjection * offset;
192
- offset.xyz = (offset.xyz / offset.w) * 0.5 + 0.5;
193
-
194
- // get sample depth:
195
- float sampleDepth = getMappedDepth(offset.xy, selfCoords);
196
- float sampleViewZ = screenSpaceToViewSpace(vec3(offset.xy, sampleDepth), uInvProjection).z;
197
- levelOcclusion += step(sampleViewPos.z + 0.025, sampleViewZ) * smootherstep(0.0, 1.0, uLevelRadius[l] / abs(selfViewPos.z - sampleViewZ)) * uLevelBias[l];
198
- }
199
- occlusion = max(occlusion, levelOcclusion);
200
- }
201
- #else
202
- for(int i = 0; i < dNSamples; i++) {
203
- vec3 sampleViewPos = TBN * uSamples[i];
204
- sampleViewPos = selfViewPos + sampleViewPos * uRadius;
205
-
206
- vec4 offset = vec4(sampleViewPos, 1.0);
207
- offset = uProjection * offset;
208
- offset.xyz = (offset.xyz / offset.w) * 0.5 + 0.5;
209
-
210
- float sampleDepth = getMappedDepth(offset.xy, selfCoords);
211
- float sampleViewZ = screenSpaceToViewSpace(vec3(offset.xy, sampleDepth), uInvProjection).z;
212
-
213
- occlusion += step(sampleViewPos.z + 0.025, sampleViewZ) * smootherstep(0.0, 1.0, uRadius / abs(selfViewPos.z - sampleViewZ));
214
- }
215
- #endif
216
- occlusion = 1.0 - (uBias * occlusion / float(dNSamples));
217
-
218
- vec2 packedOcclusion = packUnitIntervalToRG(clamp(occlusion, 0.01, 1.0));
219
-
220
- gl_FragColor = vec4(packedOcclusion, selfPackedDepth);
221
- }
11
+ exports.ssao_frag = `
12
+ precision highp float;
13
+ precision highp int;
14
+ precision highp sampler2D;
15
+
16
+ #include common
17
+
18
+ uniform sampler2D tDepth;
19
+ uniform sampler2D tDepthHalf;
20
+ uniform sampler2D tDepthQuarter;
21
+ uniform vec2 uTexSize;
22
+ uniform vec4 uBounds;
23
+
24
+ uniform vec3 uSamples[dNSamples];
25
+
26
+ uniform mat4 uProjection;
27
+ uniform mat4 uInvProjection;
28
+
29
+ #ifdef dMultiScale
30
+ uniform float uLevelRadius[dLevels];
31
+ uniform float uLevelBias[dLevels];
32
+ uniform float uNearThreshold;
33
+ uniform float uFarThreshold;
34
+ #else
35
+ uniform float uRadius;
36
+ #endif
37
+ uniform float uBias;
38
+
39
+ float smootherstep(float edge0, float edge1, float x) {
40
+ x = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);
41
+ return x * x * x * (x * (x * 6.0 - 15.0) + 10.0);
42
+ }
43
+
44
+ float noise(const in vec2 coords) {
45
+ float a = 12.9898;
46
+ float b = 78.233;
47
+ float c = 43758.5453;
48
+ float dt = dot(coords, vec2(a,b));
49
+ float sn = mod(dt, PI);
50
+ return abs(fract(sin(sn) * c)); // is abs necessary?
51
+ }
52
+
53
+ vec2 getNoiseVec2(const in vec2 coords) {
54
+ return vec2(noise(coords), noise(coords + vec2(PI, 2.71828)));
55
+ }
56
+
57
+ bool isBackground(const in float depth) {
58
+ return depth == 1.0;
59
+ }
60
+
61
+ float getDepth(const in vec2 coords) {
62
+ vec2 c = vec2(clamp(coords.x, uBounds.x, uBounds.z), clamp(coords.y, uBounds.y, uBounds.w));
63
+ #ifdef depthTextureSupport
64
+ return texture2D(tDepth, c).r;
65
+ #else
66
+ return unpackRGBAToDepth(texture2D(tDepth, c));
67
+ #endif
68
+ }
69
+
70
+ #define dQuarterThreshold 0.1
71
+ #define dHalfThreshold 0.05
72
+
73
+ float getMappedDepth(const in vec2 coords, const in vec2 selfCoords) {
74
+ vec2 c = vec2(clamp(coords.x, uBounds.x, uBounds.z), clamp(coords.y, uBounds.y, uBounds.w));
75
+ float d = distance(coords, selfCoords);
76
+ #ifdef depthTextureSupport
77
+ if (d > dQuarterThreshold) {
78
+ return texture2D(tDepthQuarter, c).r;
79
+ } else if (d > dHalfThreshold) {
80
+ return texture2D(tDepthHalf, c).r;
81
+ } else {
82
+ return texture2D(tDepth, c).r;
83
+ }
84
+ #else
85
+ if (d > dQuarterThreshold) {
86
+ return unpackRGBAToDepth(texture2D(tDepthQuarter, c));
87
+ } else if (d > dHalfThreshold) {
88
+ return unpackRGBAToDepth(texture2D(tDepthHalf, c));
89
+ } else {
90
+ return unpackRGBAToDepth(texture2D(tDepth, c));
91
+ }
92
+ #endif
93
+ }
94
+
95
+ // adapted from https://gist.github.com/bgolus/a07ed65602c009d5e2f753826e8078a0
96
+ vec3 viewNormalAtPixelPositionAccurate(vec2 vpos) {
97
+ // current pixel's depth
98
+ float c = getDepth(vpos);
99
+
100
+ // get current pixel's view space position
101
+ vec3 viewSpacePos_c = screenSpaceToViewSpace(vec3(vpos, c), uInvProjection);
102
+
103
+ // get view space position at 1 pixel offsets in each major direction
104
+ vec3 viewSpacePos_l = screenSpaceToViewSpace(vec3(vpos + vec2(-1.0, 0.0) / uTexSize, getDepth(vpos + vec2(-1.0, 0.0) / uTexSize)), uInvProjection);
105
+ vec3 viewSpacePos_r = screenSpaceToViewSpace(vec3(vpos + vec2( 1.0, 0.0) / uTexSize, getDepth(vpos + vec2( 1.0, 0.0) / uTexSize)), uInvProjection);
106
+ vec3 viewSpacePos_d = screenSpaceToViewSpace(vec3(vpos + vec2( 0.0,-1.0) / uTexSize, getDepth(vpos + vec2( 0.0,-1.0) / uTexSize)), uInvProjection);
107
+ vec3 viewSpacePos_u = screenSpaceToViewSpace(vec3(vpos + vec2( 0.0, 1.0) / uTexSize, getDepth(vpos + vec2( 0.0, 1.0) / uTexSize)), uInvProjection);
108
+
109
+ // get the difference between the current and each offset position
110
+ vec3 l = viewSpacePos_c - viewSpacePos_l;
111
+ vec3 r = viewSpacePos_r - viewSpacePos_c;
112
+ vec3 d = viewSpacePos_c - viewSpacePos_d;
113
+ vec3 u = viewSpacePos_u - viewSpacePos_c;
114
+
115
+ // get depth values at 1 & 2 pixels offsets from current along the horizontal axis
116
+ vec4 H = vec4(
117
+ getDepth(vpos + vec2(-1.0, 0.0) / uTexSize),
118
+ getDepth(vpos + vec2( 1.0, 0.0) / uTexSize),
119
+ getDepth(vpos + vec2(-2.0, 0.0) / uTexSize),
120
+ getDepth(vpos + vec2( 2.0, 0.0) / uTexSize)
121
+ );
122
+
123
+ // get depth values at 1 & 2 pixels offsets from current along the vertical axis
124
+ vec4 V = vec4(
125
+ getDepth(vpos + vec2(0.0,-1.0) / uTexSize),
126
+ getDepth(vpos + vec2(0.0, 1.0) / uTexSize),
127
+ getDepth(vpos + vec2(0.0,-2.0) / uTexSize),
128
+ getDepth(vpos + vec2(0.0, 2.0) / uTexSize)
129
+ );
130
+
131
+ // current pixel's depth difference from slope of offset depth samples
132
+ // differs from original article because we're using non-linear depth values
133
+ // see article's comments
134
+ vec2 he = abs((2.0 * H.xy - H.zw) - c);
135
+ vec2 ve = abs((2.0 * V.xy - V.zw) - c);
136
+
137
+ // pick horizontal and vertical diff with the smallest depth difference from slopes
138
+ vec3 hDeriv = he.x < he.y ? l : r;
139
+ vec3 vDeriv = ve.x < ve.y ? d : u;
140
+
141
+ // get view space normal from the cross product of the best derivatives
142
+ vec3 viewNormal = normalize(cross(hDeriv, vDeriv));
143
+
144
+ return viewNormal;
145
+ }
146
+
147
+ float getPixelSize(const in vec2 coords, const in float depth) {
148
+ vec3 viewPos0 = screenSpaceToViewSpace(vec3(coords, depth), uInvProjection);
149
+ vec3 viewPos1 = screenSpaceToViewSpace(vec3(coords + vec2(1.0, 0.0) / uTexSize, depth), uInvProjection);
150
+ return distance(viewPos0, viewPos1);
151
+ }
152
+
153
+ // StarCraft II Ambient Occlusion by [Filion and McNaughton 2008]
154
+ void main(void) {
155
+ vec2 invTexSize = 1.0 / uTexSize;
156
+ vec2 selfCoords = gl_FragCoord.xy * invTexSize;
157
+
158
+ float selfDepth = getDepth(selfCoords);
159
+ vec2 selfPackedDepth = packUnitIntervalToRG(selfDepth);
160
+
161
+ if (isBackground(selfDepth)) {
162
+ gl_FragColor = vec4(packUnitIntervalToRG(1.0), selfPackedDepth);
163
+ return;
164
+ }
165
+
166
+ vec3 selfViewNormal = viewNormalAtPixelPositionAccurate(selfCoords);
167
+ vec3 selfViewPos = screenSpaceToViewSpace(vec3(selfCoords, selfDepth), uInvProjection);
168
+
169
+ vec3 randomVec = normalize(vec3(getNoiseVec2(selfCoords) * 2.0 - 1.0, 0.0));
170
+ vec3 tangent = normalize(randomVec - selfViewNormal * dot(randomVec, selfViewNormal));
171
+ vec3 bitangent = cross(selfViewNormal, tangent);
172
+ mat3 TBN = mat3(tangent, bitangent, selfViewNormal);
173
+
174
+ float occlusion = 0.0;
175
+ #ifdef dMultiScale
176
+ float pixelSize = getPixelSize(selfCoords, selfDepth);
177
+
178
+ for(int l = 0; l < dLevels; l++) {
179
+ // TODO: smooth transition
180
+ if (pixelSize * uNearThreshold > uLevelRadius[l]) continue;
181
+ if (pixelSize * uFarThreshold < uLevelRadius[l]) continue;
182
+
183
+ float levelOcclusion = 0.0;
184
+ for(int i = 0; i < dNSamples; i++) {
185
+ // get sample position:
186
+ vec3 sampleViewPos = TBN * uSamples[i];
187
+ sampleViewPos = selfViewPos + sampleViewPos * uLevelRadius[l];
188
+
189
+ // project sample position:
190
+ vec4 offset = vec4(sampleViewPos, 1.0);
191
+ offset = uProjection * offset;
192
+ offset.xyz = (offset.xyz / offset.w) * 0.5 + 0.5;
193
+
194
+ // get sample depth:
195
+ float sampleDepth = getMappedDepth(offset.xy, selfCoords);
196
+ float sampleViewZ = screenSpaceToViewSpace(vec3(offset.xy, sampleDepth), uInvProjection).z;
197
+ levelOcclusion += step(sampleViewPos.z + 0.025, sampleViewZ) * smootherstep(0.0, 1.0, uLevelRadius[l] / abs(selfViewPos.z - sampleViewZ)) * uLevelBias[l];
198
+ }
199
+ occlusion = max(occlusion, levelOcclusion);
200
+ }
201
+ #else
202
+ for(int i = 0; i < dNSamples; i++) {
203
+ vec3 sampleViewPos = TBN * uSamples[i];
204
+ sampleViewPos = selfViewPos + sampleViewPos * uRadius;
205
+
206
+ vec4 offset = vec4(sampleViewPos, 1.0);
207
+ offset = uProjection * offset;
208
+ offset.xyz = (offset.xyz / offset.w) * 0.5 + 0.5;
209
+
210
+ float sampleDepth = getMappedDepth(offset.xy, selfCoords);
211
+ float sampleViewZ = screenSpaceToViewSpace(vec3(offset.xy, sampleDepth), uInvProjection).z;
212
+
213
+ occlusion += step(sampleViewPos.z + 0.025, sampleViewZ) * smootherstep(0.0, 1.0, uRadius / abs(selfViewPos.z - sampleViewZ));
214
+ }
215
+ #endif
216
+ occlusion = 1.0 - (uBias * occlusion / float(dNSamples));
217
+
218
+ vec2 packedOcclusion = packUnitIntervalToRG(clamp(occlusion, 0.01, 1.0));
219
+
220
+ gl_FragColor = vec4(packedOcclusion, selfPackedDepth);
221
+ }
222
222
  `;