@zephyr3d/scene 0.1.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 (236) hide show
  1. package/dist/animation/animation.js +173 -0
  2. package/dist/animation/animation.js.map +1 -0
  3. package/dist/animation/animationset.js +95 -0
  4. package/dist/animation/animationset.js.map +1 -0
  5. package/dist/animation/animationtrack.js +38 -0
  6. package/dist/animation/animationtrack.js.map +1 -0
  7. package/dist/animation/eulerrotationtrack.js +33 -0
  8. package/dist/animation/eulerrotationtrack.js.map +1 -0
  9. package/dist/animation/rotationtrack.js +37 -0
  10. package/dist/animation/rotationtrack.js.map +1 -0
  11. package/dist/animation/scaletrack.js +36 -0
  12. package/dist/animation/scaletrack.js.map +1 -0
  13. package/dist/animation/skeleton.js +97 -0
  14. package/dist/animation/skeleton.js.map +1 -0
  15. package/dist/animation/translationtrack.js +36 -0
  16. package/dist/animation/translationtrack.js.map +1 -0
  17. package/dist/animation/usertrack.js +47 -0
  18. package/dist/animation/usertrack.js.map +1 -0
  19. package/dist/app.js +173 -0
  20. package/dist/app.js.map +1 -0
  21. package/dist/asset/assetmanager.js +476 -0
  22. package/dist/asset/assetmanager.js.map +1 -0
  23. package/dist/asset/builtin.js +373 -0
  24. package/dist/asset/builtin.js.map +1 -0
  25. package/dist/asset/loaders/dds/dds.js +472 -0
  26. package/dist/asset/loaders/dds/dds.js.map +1 -0
  27. package/dist/asset/loaders/dds/dds_loader.js +38 -0
  28. package/dist/asset/loaders/dds/dds_loader.js.map +1 -0
  29. package/dist/asset/loaders/gltf/gltf_loader.js +981 -0
  30. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -0
  31. package/dist/asset/loaders/gltf/helpers.js +314 -0
  32. package/dist/asset/loaders/gltf/helpers.js.map +1 -0
  33. package/dist/asset/loaders/hdr/hdr.js +175 -0
  34. package/dist/asset/loaders/hdr/hdr.js.map +1 -0
  35. package/dist/asset/loaders/image/tga_Loader.js +117 -0
  36. package/dist/asset/loaders/image/tga_Loader.js.map +1 -0
  37. package/dist/asset/loaders/image/webimage_loader.js +50 -0
  38. package/dist/asset/loaders/image/webimage_loader.js.map +1 -0
  39. package/dist/asset/loaders/loader.js +45 -0
  40. package/dist/asset/loaders/loader.js.map +1 -0
  41. package/dist/asset/model.js +264 -0
  42. package/dist/asset/model.js.map +1 -0
  43. package/dist/blitter/blitter.js +389 -0
  44. package/dist/blitter/blitter.js.map +1 -0
  45. package/dist/blitter/box.js +118 -0
  46. package/dist/blitter/box.js.map +1 -0
  47. package/dist/blitter/copy.js +22 -0
  48. package/dist/blitter/copy.js.map +1 -0
  49. package/dist/blitter/depthlimitedgaussion.js +166 -0
  50. package/dist/blitter/depthlimitedgaussion.js.map +1 -0
  51. package/dist/blitter/gaussianblur.js +229 -0
  52. package/dist/blitter/gaussianblur.js.map +1 -0
  53. package/dist/camera/base.js +90 -0
  54. package/dist/camera/base.js.map +1 -0
  55. package/dist/camera/camera.js +358 -0
  56. package/dist/camera/camera.js.map +1 -0
  57. package/dist/camera/fps.js +246 -0
  58. package/dist/camera/fps.js.map +1 -0
  59. package/dist/camera/orbit.js +157 -0
  60. package/dist/camera/orbit.js.map +1 -0
  61. package/dist/camera/orthocamera.js +126 -0
  62. package/dist/camera/orthocamera.js.map +1 -0
  63. package/dist/camera/perspectivecamera.js +133 -0
  64. package/dist/camera/perspectivecamera.js.map +1 -0
  65. package/dist/index.d.ts +8402 -0
  66. package/dist/index.js +87 -0
  67. package/dist/index.js.map +1 -0
  68. package/dist/input/inputmgr.js +242 -0
  69. package/dist/input/inputmgr.js.map +1 -0
  70. package/dist/material/blinn.js +75 -0
  71. package/dist/material/blinn.js.map +1 -0
  72. package/dist/material/grassmaterial.js +221 -0
  73. package/dist/material/grassmaterial.js.map +1 -0
  74. package/dist/material/lambert.js +52 -0
  75. package/dist/material/lambert.js.map +1 -0
  76. package/dist/material/lightmodel.js +2074 -0
  77. package/dist/material/lightmodel.js.map +1 -0
  78. package/dist/material/lit.js +578 -0
  79. package/dist/material/lit.js.map +1 -0
  80. package/dist/material/material.js +458 -0
  81. package/dist/material/material.js.map +1 -0
  82. package/dist/material/meshmaterial.js +311 -0
  83. package/dist/material/meshmaterial.js.map +1 -0
  84. package/dist/material/mixins/albedocolor.js +130 -0
  85. package/dist/material/mixins/albedocolor.js.map +1 -0
  86. package/dist/material/mixins/texture.js +110 -0
  87. package/dist/material/mixins/texture.js.map +1 -0
  88. package/dist/material/mixins/vertexcolor.js +45 -0
  89. package/dist/material/mixins/vertexcolor.js.map +1 -0
  90. package/dist/material/pbr.js +27 -0
  91. package/dist/material/pbr.js.map +1 -0
  92. package/dist/material/standard.js +282 -0
  93. package/dist/material/standard.js.map +1 -0
  94. package/dist/material/terrainlightmodel.js +259 -0
  95. package/dist/material/terrainlightmodel.js.map +1 -0
  96. package/dist/material/terrainmaterial.js +139 -0
  97. package/dist/material/terrainmaterial.js.map +1 -0
  98. package/dist/material/unlit.js +29 -0
  99. package/dist/material/unlit.js.map +1 -0
  100. package/dist/posteffect/bloom.js +398 -0
  101. package/dist/posteffect/bloom.js.map +1 -0
  102. package/dist/posteffect/compositor.js +264 -0
  103. package/dist/posteffect/compositor.js.map +1 -0
  104. package/dist/posteffect/fxaa.js +291 -0
  105. package/dist/posteffect/fxaa.js.map +1 -0
  106. package/dist/posteffect/grayscale.js +87 -0
  107. package/dist/posteffect/grayscale.js.map +1 -0
  108. package/dist/posteffect/posteffect.js +165 -0
  109. package/dist/posteffect/posteffect.js.map +1 -0
  110. package/dist/posteffect/sao.js +327 -0
  111. package/dist/posteffect/sao.js.map +1 -0
  112. package/dist/posteffect/tonemap.js +112 -0
  113. package/dist/posteffect/tonemap.js.map +1 -0
  114. package/dist/posteffect/water.js +535 -0
  115. package/dist/posteffect/water.js.map +1 -0
  116. package/dist/render/clipmap.js +462 -0
  117. package/dist/render/clipmap.js.map +1 -0
  118. package/dist/render/cluster_light.js +329 -0
  119. package/dist/render/cluster_light.js.map +1 -0
  120. package/dist/render/cull_visitor.js +124 -0
  121. package/dist/render/cull_visitor.js.map +1 -0
  122. package/dist/render/depth_pass.js +47 -0
  123. package/dist/render/depth_pass.js.map +1 -0
  124. package/dist/render/envlight.js +282 -0
  125. package/dist/render/envlight.js.map +1 -0
  126. package/dist/render/forward.js +186 -0
  127. package/dist/render/forward.js.map +1 -0
  128. package/dist/render/forward_pass.js +137 -0
  129. package/dist/render/forward_pass.js.map +1 -0
  130. package/dist/render/helper.js +38 -0
  131. package/dist/render/helper.js.map +1 -0
  132. package/dist/render/primitive.js +246 -0
  133. package/dist/render/primitive.js.map +1 -0
  134. package/dist/render/render_queue.js +163 -0
  135. package/dist/render/render_queue.js.map +1 -0
  136. package/dist/render/renderpass.js +151 -0
  137. package/dist/render/renderpass.js.map +1 -0
  138. package/dist/render/renderscheme.js +61 -0
  139. package/dist/render/renderscheme.js.map +1 -0
  140. package/dist/render/scatteringlut.js +634 -0
  141. package/dist/render/scatteringlut.js.map +1 -0
  142. package/dist/render/shadowmap_pass.js +70 -0
  143. package/dist/render/shadowmap_pass.js.map +1 -0
  144. package/dist/render/sky.js +881 -0
  145. package/dist/render/sky.js.map +1 -0
  146. package/dist/render/temporalcache.js +222 -0
  147. package/dist/render/temporalcache.js.map +1 -0
  148. package/dist/render/watermesh.js +835 -0
  149. package/dist/render/watermesh.js.map +1 -0
  150. package/dist/scene/environment.js +146 -0
  151. package/dist/scene/environment.js.map +1 -0
  152. package/dist/scene/graph_node.js +69 -0
  153. package/dist/scene/graph_node.js.map +1 -0
  154. package/dist/scene/light.js +436 -0
  155. package/dist/scene/light.js.map +1 -0
  156. package/dist/scene/mesh.js +215 -0
  157. package/dist/scene/mesh.js.map +1 -0
  158. package/dist/scene/model.js +111 -0
  159. package/dist/scene/model.js.map +1 -0
  160. package/dist/scene/octree.js +651 -0
  161. package/dist/scene/octree.js.map +1 -0
  162. package/dist/scene/octree_update_visitor.js +16 -0
  163. package/dist/scene/octree_update_visitor.js.map +1 -0
  164. package/dist/scene/raycast_visitor.js +72 -0
  165. package/dist/scene/raycast_visitor.js.map +1 -0
  166. package/dist/scene/scene.js +225 -0
  167. package/dist/scene/scene.js.map +1 -0
  168. package/dist/scene/scene_node.js +299 -0
  169. package/dist/scene/scene_node.js.map +1 -0
  170. package/dist/scene/terrain/grass.js +277 -0
  171. package/dist/scene/terrain/grass.js.map +1 -0
  172. package/dist/scene/terrain/heightfield.js +391 -0
  173. package/dist/scene/terrain/heightfield.js.map +1 -0
  174. package/dist/scene/terrain/patch.js +530 -0
  175. package/dist/scene/terrain/patch.js.map +1 -0
  176. package/dist/scene/terrain/quadtree.js +430 -0
  177. package/dist/scene/terrain/quadtree.js.map +1 -0
  178. package/dist/scene/terrain/terrain.js +258 -0
  179. package/dist/scene/terrain/terrain.js.map +1 -0
  180. package/dist/scene/xform.js +224 -0
  181. package/dist/scene/xform.js.map +1 -0
  182. package/dist/shaders/builtins.js +110 -0
  183. package/dist/shaders/builtins.js.map +1 -0
  184. package/dist/shaders/framework.js +709 -0
  185. package/dist/shaders/framework.js.map +1 -0
  186. package/dist/shaders/lighting.js +335 -0
  187. package/dist/shaders/lighting.js.map +1 -0
  188. package/dist/shaders/misc.js +405 -0
  189. package/dist/shaders/misc.js.map +1 -0
  190. package/dist/shaders/noise.js +157 -0
  191. package/dist/shaders/noise.js.map +1 -0
  192. package/dist/shaders/pbr.js +132 -0
  193. package/dist/shaders/pbr.js.map +1 -0
  194. package/dist/shaders/shadow.js +642 -0
  195. package/dist/shaders/shadow.js.map +1 -0
  196. package/dist/shaders/water.js +630 -0
  197. package/dist/shaders/water.js.map +1 -0
  198. package/dist/shadow/esm.js +235 -0
  199. package/dist/shadow/esm.js.map +1 -0
  200. package/dist/shadow/pcf_opt.js +182 -0
  201. package/dist/shadow/pcf_opt.js.map +1 -0
  202. package/dist/shadow/pcf_pd.js +190 -0
  203. package/dist/shadow/pcf_pd.js.map +1 -0
  204. package/dist/shadow/shadow_impl.js +15 -0
  205. package/dist/shadow/shadow_impl.js.map +1 -0
  206. package/dist/shadow/shadowmapper.js +709 -0
  207. package/dist/shadow/shadowmapper.js.map +1 -0
  208. package/dist/shadow/ssm.js +194 -0
  209. package/dist/shadow/ssm.js.map +1 -0
  210. package/dist/shadow/vsm.js +298 -0
  211. package/dist/shadow/vsm.js.map +1 -0
  212. package/dist/shapes/box.js +313 -0
  213. package/dist/shapes/box.js.map +1 -0
  214. package/dist/shapes/cylinder.js +74 -0
  215. package/dist/shapes/cylinder.js.map +1 -0
  216. package/dist/shapes/plane.js +48 -0
  217. package/dist/shapes/plane.js.map +1 -0
  218. package/dist/shapes/shape.js +33 -0
  219. package/dist/shapes/shape.js.map +1 -0
  220. package/dist/shapes/sphere.js +91 -0
  221. package/dist/shapes/sphere.js.map +1 -0
  222. package/dist/shapes/torus.js +100 -0
  223. package/dist/shapes/torus.js.map +1 -0
  224. package/dist/utility/aabbtree.js +390 -0
  225. package/dist/utility/aabbtree.js.map +1 -0
  226. package/dist/utility/bounding_volume.js +78 -0
  227. package/dist/utility/bounding_volume.js.map +1 -0
  228. package/dist/utility/panorama.js +163 -0
  229. package/dist/utility/panorama.js.map +1 -0
  230. package/dist/utility/pmrem.js +345 -0
  231. package/dist/utility/pmrem.js.map +1 -0
  232. package/dist/utility/shprojection.js +448 -0
  233. package/dist/utility/shprojection.js.map +1 -0
  234. package/dist/values.js +48 -0
  235. package/dist/values.js.map +1 -0
  236. package/package.json +70 -0
@@ -0,0 +1,642 @@
1
+ import { hasDepthChannel } from '@zephyr3d/device';
2
+ import { Application } from '../app.js';
3
+ import { LIGHT_TYPE_DIRECTIONAL, LIGHT_TYPE_POINT, LIGHT_TYPE_SPOT } from '../values.js';
4
+ import { ShaderFramework } from './framework.js';
5
+ import { encodeNormalizedFloatToRGBA, decode2HalfFromRGBA, decodeNormalizedFloatFromRGBA, nonLinearDepthToLinearNormalized } from './misc.js';
6
+
7
+ /*
8
+ const PCF_KERNEL_3x3 = [
9
+ [0.5, 1.0, 0.5],
10
+ [1.0, 1.0, 1.0],
11
+ [0.5, 1.0, 0.5]
12
+ ];
13
+ const PCF_KERNEL_SUM_3x3 = 7;
14
+
15
+ const PCF_KERNEL_5x5 = [
16
+ [0.0, 0.5, 1.0, 0.5, 0.0],
17
+ [0.5, 1.0, 1.0, 1.0, 0.5],
18
+ [1.0, 1.0, 1.0, 1.0, 1.0],
19
+ [0.5, 1.0, 1.0, 1.0, 0.5],
20
+ [0.0, 0.5, 1.0, 0.5, 0.0]
21
+ ];
22
+ const PCF_KERNEL_SUM_5x5 = 17;
23
+
24
+ const PCF_KERNEL_7x7 = [
25
+ [0.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0],
26
+ [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0],
27
+ [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5],
28
+ [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],
29
+ [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5],
30
+ [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0],
31
+ [0.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0]
32
+ ];
33
+ const PCF_KERNEL_SUM_7x7 = 33;
34
+
35
+ const PCF_KERNEL_9x9 = [
36
+ [0.0, 0.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0, 0.0],
37
+ [0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0],
38
+ [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0],
39
+ [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5],
40
+ [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],
41
+ [0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.5],
42
+ [0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0],
43
+ [0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0],
44
+ [0.0, 0.0, 0.0, 0.5, 1.0, 0.5, 0.0, 0.0, 0.0]
45
+ ];
46
+ const PCF_KERNEL_SUM_9x9 = 53;
47
+ */ const PCF_POISSON_DISC = [
48
+ [
49
+ 0.511749,
50
+ 0.547686
51
+ ],
52
+ [
53
+ 0.58929,
54
+ 0.257224
55
+ ],
56
+ [
57
+ 0.165018,
58
+ 0.57663
59
+ ],
60
+ [
61
+ 0.407692,
62
+ 0.742285
63
+ ],
64
+ [
65
+ 0.707012,
66
+ 0.646523
67
+ ],
68
+ [
69
+ 0.31463,
70
+ 0.466825
71
+ ],
72
+ [
73
+ 0.801257,
74
+ 0.485186
75
+ ],
76
+ [
77
+ 0.418136,
78
+ 0.146517
79
+ ],
80
+ [
81
+ 0.579889,
82
+ 0.0368284
83
+ ],
84
+ [
85
+ 0.79801,
86
+ 0.140114
87
+ ],
88
+ [
89
+ -0.0413185,
90
+ 0.371455
91
+ ],
92
+ [
93
+ -0.0529108,
94
+ 0.627352
95
+ ],
96
+ [
97
+ 0.0821375,
98
+ 0.882071
99
+ ],
100
+ [
101
+ 0.17308,
102
+ 0.301207
103
+ ],
104
+ [
105
+ -0.120452,
106
+ 0.867216
107
+ ],
108
+ [
109
+ 0.371096,
110
+ 0.916454
111
+ ],
112
+ [
113
+ -0.178381,
114
+ 0.146101
115
+ ],
116
+ [
117
+ -0.276489,
118
+ 0.550525
119
+ ],
120
+ [
121
+ 0.12542,
122
+ 0.126643
123
+ ],
124
+ [
125
+ -0.296654,
126
+ 0.286879
127
+ ],
128
+ [
129
+ 0.261744,
130
+ -0.00604975
131
+ ],
132
+ [
133
+ -0.213417,
134
+ 0.715776
135
+ ],
136
+ [
137
+ 0.425684,
138
+ -0.153211
139
+ ],
140
+ [
141
+ -0.480054,
142
+ 0.321357
143
+ ],
144
+ [
145
+ -0.0717878,
146
+ -0.0250567
147
+ ],
148
+ [
149
+ -0.328775,
150
+ -0.169666
151
+ ],
152
+ [
153
+ -0.394923,
154
+ 0.130802
155
+ ],
156
+ [
157
+ -0.553681,
158
+ -0.176777
159
+ ],
160
+ [
161
+ -0.722615,
162
+ 0.120616
163
+ ],
164
+ [
165
+ -0.693065,
166
+ 0.309017
167
+ ],
168
+ [
169
+ 0.603193,
170
+ 0.791471
171
+ ],
172
+ [
173
+ -0.0754941,
174
+ -0.297988
175
+ ],
176
+ [
177
+ 0.109303,
178
+ -0.156472
179
+ ],
180
+ [
181
+ 0.260605,
182
+ -0.280111
183
+ ],
184
+ [
185
+ 0.129731,
186
+ -0.487954
187
+ ],
188
+ [
189
+ -0.537315,
190
+ 0.520494
191
+ ],
192
+ [
193
+ -0.42758,
194
+ 0.800607
195
+ ],
196
+ [
197
+ 0.77309,
198
+ -0.0728102
199
+ ],
200
+ [
201
+ 0.908777,
202
+ 0.328356
203
+ ],
204
+ [
205
+ 0.985341,
206
+ 0.0759158
207
+ ],
208
+ [
209
+ 0.947536,
210
+ -0.11837
211
+ ],
212
+ [
213
+ -0.103315,
214
+ -0.610747
215
+ ],
216
+ [
217
+ 0.337171,
218
+ -0.584
219
+ ],
220
+ [
221
+ 0.210919,
222
+ -0.720055
223
+ ],
224
+ [
225
+ 0.41894,
226
+ -0.36769
227
+ ],
228
+ [
229
+ -0.254228,
230
+ -0.49368
231
+ ],
232
+ [
233
+ -0.428562,
234
+ -0.404037
235
+ ],
236
+ [
237
+ -0.831732,
238
+ -0.189615
239
+ ],
240
+ [
241
+ -0.922642,
242
+ 0.0888026
243
+ ],
244
+ [
245
+ -0.865914,
246
+ 0.427795
247
+ ],
248
+ [
249
+ 0.706117,
250
+ -0.311662
251
+ ],
252
+ [
253
+ 0.545465,
254
+ -0.520942
255
+ ],
256
+ [
257
+ -0.695738,
258
+ 0.664492
259
+ ],
260
+ [
261
+ 0.389421,
262
+ -0.899007
263
+ ],
264
+ [
265
+ 0.48842,
266
+ -0.708054
267
+ ],
268
+ [
269
+ 0.760298,
270
+ -0.62735
271
+ ],
272
+ [
273
+ -0.390788,
274
+ -0.707388
275
+ ],
276
+ [
277
+ -0.591046,
278
+ -0.686721
279
+ ],
280
+ [
281
+ -0.769903,
282
+ -0.413775
283
+ ],
284
+ [
285
+ -0.604457,
286
+ -0.502571
287
+ ],
288
+ [
289
+ -0.557234,
290
+ 0.00451362
291
+ ],
292
+ [
293
+ 0.147572,
294
+ -0.924353
295
+ ],
296
+ [
297
+ -0.0662488,
298
+ -0.892081
299
+ ],
300
+ [
301
+ 0.863832,
302
+ -0.4072
303
+ ]
304
+ ];
305
+ function getShadowMapTexelSize(scope) {
306
+ return scope.$builder.div(1, ShaderFramework.getShadowCameraParams(scope).z);
307
+ }
308
+ function getShadowMapSize(scope) {
309
+ return ShaderFramework.getShadowCameraParams(scope).z;
310
+ }
311
+ /** @internal */ function computeShadowMapDepth(scope, targetFormat) {
312
+ const funcNameComputeShadowMapDepth = 'lib_computeShadowMapDepth';
313
+ const pb = scope.$builder;
314
+ pb.func(funcNameComputeShadowMapDepth, [], function() {
315
+ if (hasDepthChannel(targetFormat)) {
316
+ // use native shadowmap
317
+ this.$return(pb.vec4(pb.emulateDepthClamp ? pb.clamp(scope.$inputs.clamppedDepth, 0, 1) : scope.$builtins.fragCoord.z, 0, 0, 1));
318
+ } else {
319
+ this.$l.depth = pb.float();
320
+ this.$l.lightType = ShaderFramework.getLightTypeForShadow(this);
321
+ this.$if(pb.equal(this.lightType, LIGHT_TYPE_DIRECTIONAL), function() {
322
+ this.depth = pb.emulateDepthClamp ? pb.clamp(this.$inputs.clamppedDepth, 0, 1) : this.$builtins.fragCoord.z;
323
+ }).$elseif(pb.equal(this.lightType, LIGHT_TYPE_POINT), function() {
324
+ this.$l.lightSpacePos = pb.mul(ShaderFramework.getLightViewMatrixForShadow(this), ShaderFramework.getWorldPosition(this));
325
+ this.depth = pb.clamp(pb.div(pb.length(this.lightSpacePos.xyz), ShaderFramework.getLightPositionAndRangeForShadow(this).w), 0, 1);
326
+ }).$else(function() {
327
+ this.$l.lightSpacePos = pb.mul(ShaderFramework.getLightViewMatrixForShadow(this), ShaderFramework.getWorldPosition(this));
328
+ this.depth = pb.clamp(pb.div(pb.neg(this.lightSpacePos.z), ShaderFramework.getLightPositionAndRangeForShadow(this).w), 0, 1);
329
+ });
330
+ this.$return(targetFormat === 'rgba8unorm' ? encodeNormalizedFloatToRGBA(this, this.depth) : pb.vec4(this.depth, 0, 0, 1));
331
+ }
332
+ });
333
+ return pb.getGlobalScope()[funcNameComputeShadowMapDepth]();
334
+ }
335
+ /** @internal */ function computeReceiverPlaneDepthBias(scope, texCoord) {
336
+ const funcNameComputeReceiverPlaneDepthBias = 'lib_computeReceiverPlaneDepthBias';
337
+ const pb = scope.$builder;
338
+ pb.func(funcNameComputeReceiverPlaneDepthBias, [
339
+ pb.vec4('coords')
340
+ ], function() {
341
+ this.$l.dx = pb.dpdx(this.coords);
342
+ this.$l.dy = pb.dpdy(this.coords);
343
+ this.$l.biasMultiply = pb.float(1);
344
+ this.$l.uv = pb.vec2(pb.sub(pb.mul(this.dy.y, this.dx.z), pb.mul(this.dx.y, this.dy.z)), pb.sub(pb.mul(this.dx.x, this.dy.z), pb.mul(this.dy.x, this.dx.z)));
345
+ this.$l.uv = pb.mul(this.$l.uv, pb.div(this.biasMultiply, pb.sub(pb.mul(this.dx.x, this.dy.y), pb.mul(this.dx.y, this.dy.x))));
346
+ // from unity shader
347
+ this.$l.minFractionalError = pb.float(0.01);
348
+ this.$l.fractionalSamplingError = pb.dot(pb.vec2(getShadowMapTexelSize(this)), pb.abs(this.$l.uv));
349
+ this.$l.staticBias = pb.min(this.$l.fractionalSamplingError, this.$l.minFractionalError);
350
+ // return
351
+ this.$return(pb.vec3(this.$l.uv, this.$l.staticBias));
352
+ });
353
+ return pb.getGlobalScope()[funcNameComputeReceiverPlaneDepthBias](texCoord);
354
+ }
355
+ // reference: github.com/google/filament
356
+ function interleavedGradientNoise(scope, c) {
357
+ const pb = scope.$builder;
358
+ const x = 0.06711056;
359
+ const y = 0.00583715;
360
+ const z = 52.9829189;
361
+ return pb.fract(pb.mul(z, pb.fract(pb.dot(c, pb.vec2(x, y)))));
362
+ }
363
+ // reference: github.com/google/filament
364
+ function getRandomRotationMatrix(scope, fragCoord) {
365
+ const funcNameGetRandomRotationMatrix = 'lib_getRandomRotationMatrix';
366
+ const pb = scope.$builder;
367
+ pb.func(funcNameGetRandomRotationMatrix, [
368
+ pb.vec2('fragCoord')
369
+ ], function() {
370
+ this.$l.randomAngle = pb.mul(interleavedGradientNoise(this, fragCoord), 2 * Math.PI);
371
+ this.$l.randomBase = pb.vec2(pb.cos(this.randomAngle), pb.sin(this.randomAngle));
372
+ this.$return(pb.mat2(this.randomBase.x, this.randomBase.y, pb.neg(this.randomBase.y), this.randomBase.x));
373
+ });
374
+ return pb.getGlobalScope()[funcNameGetRandomRotationMatrix](fragCoord);
375
+ }
376
+ function getPoissonDiscSampleRadius(scope) {
377
+ return ShaderFramework.getDepthBiasValues(scope).z;
378
+ }
379
+ function sampleShadowMapPCF(scope, shadowMapFormat, pos, offset, depth, cascade) {
380
+ const funcName = cascade ? 'lib_sampleShadowMapCascadePCF' : 'lib_sampleShadowMapPCF';
381
+ const pb = scope.$builder;
382
+ const nativeShadowMap = hasDepthChannel(shadowMapFormat);
383
+ pb.func(funcName, [
384
+ pb.vec2('coords'),
385
+ pb.float('z'),
386
+ pb.vec2('offset'),
387
+ ...cascade ? [
388
+ pb.int('cascade')
389
+ ] : []
390
+ ], function() {
391
+ const sampleDepth = this.z;
392
+ const uv = pb.add(this.coords, this.offset);
393
+ if (nativeShadowMap) {
394
+ this.$return(cascade && Application.instance.device.type !== 'webgl' ? pb.textureArraySampleCompareLevel(this.shadowMap, uv, this.cascade, sampleDepth) : pb.textureSampleCompareLevel(this.shadowMap, uv, sampleDepth));
395
+ } else {
396
+ this.$l.shadowTex = cascade && Application.instance.device.type !== 'webgl' ? pb.textureArraySampleLevel(this.shadowMap, uv, this.cascade, 0) : pb.textureSampleLevel(this.shadowMap, uv, 0);
397
+ if (shadowMapFormat === 'rgba8unorm') {
398
+ this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);
399
+ }
400
+ this.$return(pb.step(sampleDepth, this.shadowTex.x));
401
+ }
402
+ });
403
+ return pb.getGlobalScope()[funcName](pos, depth, offset, ...cascade ? [
404
+ cascade
405
+ ] : []);
406
+ }
407
+ function sampleShadowMap(scope, lightType, shadowMapFormat, pos, depth, cascade) {
408
+ const funcNameSampleShadowMap = 'lib_sampleShadowMap';
409
+ const pb = scope.$builder;
410
+ const nativeShadowMap = hasDepthChannel(shadowMapFormat);
411
+ pb.func(funcNameSampleShadowMap, [
412
+ lightType === LIGHT_TYPE_POINT ? pb.vec3('coords') : pb.vec2('coords'),
413
+ pb.float('z'),
414
+ ...cascade ? [
415
+ pb.int('cascade')
416
+ ] : []
417
+ ], function() {
418
+ if (lightType === LIGHT_TYPE_POINT) {
419
+ if (nativeShadowMap) {
420
+ this.$return(pb.clamp(pb.textureSampleCompareLevel(this.shadowMap, this.coords, this.z), 0, 1));
421
+ } else {
422
+ this.$l.shadowTex = pb.textureSampleLevel(this.shadowMap, this.coords, 0);
423
+ if (shadowMapFormat === 'rgba8unorm') {
424
+ this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);
425
+ }
426
+ this.$return(pb.step(this.z, this.shadowTex.x));
427
+ }
428
+ } else {
429
+ if (nativeShadowMap) {
430
+ this.$return(cascade && Application.instance.device.type !== 'webgl' ? pb.textureArraySampleCompareLevel(this.shadowMap, this.coords, this.cascade, this.z) : pb.textureSampleCompareLevel(this.shadowMap, this.coords, this.z));
431
+ } else {
432
+ this.$l.shadowTex = cascade && Application.instance.device.type !== 'webgl' ? pb.textureArraySampleLevel(this.shadowMap, this.coords, this.cascade, 0) : pb.textureSampleLevel(this.shadowMap, this.coords, 0);
433
+ if (shadowMapFormat === 'rgba8unorm') {
434
+ this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);
435
+ }
436
+ this.$return(pb.step(this.z, this.shadowTex.x));
437
+ }
438
+ }
439
+ });
440
+ return cascade ? pb.getGlobalScope()[funcNameSampleShadowMap](pos, depth, cascade) : pb.getGlobalScope()[funcNameSampleShadowMap](pos, depth);
441
+ }
442
+ function chebyshevUpperBound(scope, distance, occluder) {
443
+ const funcNameChebyshevUpperBound = 'lib_chebyshevUpperBound';
444
+ const pb = scope.$builder;
445
+ pb.func(funcNameChebyshevUpperBound, [
446
+ pb.float('distance'),
447
+ pb.vec2('occluder')
448
+ ], function() {
449
+ this.$l.shadow = pb.float(1);
450
+ this.$l.test = pb.step(this.distance, this.occluder.x);
451
+ this.$if(pb.notEqual(this.test, 1), function() {
452
+ this.$l.d = pb.sub(this.distance, this.occluder.x);
453
+ this.$l.variance = pb.max(pb.mul(this.occluder.y, this.occluder.y), 0);
454
+ const darkness = ShaderFramework.getDepthBiasValues(this).z;
455
+ this.shadow = pb.div(this.variance, pb.add(this.variance, pb.mul(this.d, this.d)));
456
+ this.shadow = pb.clamp(pb.div(pb.sub(this.shadow, darkness), pb.sub(1, darkness)), 0, 1);
457
+ });
458
+ this.$return(this.shadow);
459
+ });
460
+ return pb.getGlobalScope()[funcNameChebyshevUpperBound](distance, occluder);
461
+ }
462
+ /** @internal */ function filterShadowVSM(scope, lightType, shadowMapFormat, texCoord, cascade) {
463
+ const funcNameFilterShadowVSM = 'lib_filterShadowVSM';
464
+ const pb = scope.$builder;
465
+ pb.func(funcNameFilterShadowVSM, [
466
+ pb.vec4('texCoord'),
467
+ ...cascade ? [
468
+ pb.int('cascade')
469
+ ] : []
470
+ ], function() {
471
+ if (lightType === LIGHT_TYPE_POINT) {
472
+ this.$l.shadowTex = pb.textureSampleLevel(this.shadowMap, this.texCoord.xyz, 0);
473
+ this.$return(chebyshevUpperBound(this, this.texCoord.w, shadowMapFormat === 'rgba8unorm' ? decode2HalfFromRGBA(this, this.shadowTex) : this.shadowTex.rg));
474
+ } else {
475
+ if (Application.instance.device.type !== 'webgl' && cascade) {
476
+ this.$l.shadowTex = pb.textureArraySampleLevel(this.shadowMap, this.texCoord.xy, this.cascade, 0);
477
+ } else {
478
+ this.$l.shadowTex = pb.textureSampleLevel(this.shadowMap, this.texCoord.xy, 0);
479
+ }
480
+ this.$return(chebyshevUpperBound(this, this.texCoord.z, shadowMapFormat === 'rgba8unorm' ? decode2HalfFromRGBA(this, this.shadowTex) : this.shadowTex.rg));
481
+ }
482
+ });
483
+ return pb.getGlobalScope()[funcNameFilterShadowVSM](texCoord, ...cascade ? [
484
+ cascade
485
+ ] : []);
486
+ }
487
+ /** @internal */ function filterShadowESM(scope, lightType, shadowMapFormat, shadowVertex, cascade) {
488
+ const funcNameFilterShadowESM = 'lib_filterShadowESM';
489
+ const pb = scope.$builder;
490
+ pb.func(funcNameFilterShadowESM, [
491
+ lightType === LIGHT_TYPE_POINT ? pb.vec3('shadowVertex') : pb.vec4('shadowVertex'),
492
+ ...cascade ? [
493
+ pb.int('cascade')
494
+ ] : []
495
+ ], function() {
496
+ if (lightType === LIGHT_TYPE_POINT) {
497
+ this.$l.depth = pb.div(pb.length(this.shadowVertex.xyz), ShaderFramework.getLightPositionAndRangeForShadow(this).w);
498
+ this.$l.shadowTex = pb.textureSampleLevel(this.shadowMap, this.shadowVertex.xyz, 0);
499
+ if (shadowMapFormat === 'rgba8unorm') {
500
+ this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);
501
+ }
502
+ } else {
503
+ if (cascade && Application.instance.device.type !== 'webgl') {
504
+ this.$l.shadowTex = pb.textureArraySampleLevel(this.shadowMap, this.shadowVertex.xy, this.cascade, 0);
505
+ } else {
506
+ this.$l.shadowTex = pb.textureSampleLevel(this.shadowMap, this.shadowVertex.xy, 0);
507
+ }
508
+ if (shadowMapFormat === 'rgba8unorm') {
509
+ this.shadowTex.x = decodeNormalizedFloatFromRGBA(this, this.shadowTex);
510
+ }
511
+ if (lightType === LIGHT_TYPE_SPOT) {
512
+ this.$l.nearFar = ShaderFramework.getShadowCameraParams(this).xy;
513
+ this.$l.depth = nonLinearDepthToLinearNormalized(this, this.shadowVertex.z, this.nearFar);
514
+ } else {
515
+ this.$l.depth = this.shadowVertex.z;
516
+ }
517
+ }
518
+ const depthScale = ShaderFramework.getDepthBiasValues(this).z;
519
+ this.$return(pb.clamp(pb.exp(pb.min(87, pb.mul(depthScale, pb.sub(this.shadowTex.x, this.depth)))), 0, 1));
520
+ });
521
+ return pb.getGlobalScope()[funcNameFilterShadowESM](shadowVertex, ...cascade ? [
522
+ cascade
523
+ ] : []);
524
+ }
525
+ /** @internal */ function filterShadowPCF(scope, lightType, shadowMapFormat, kernelSize, texCoord, receiverPlaneDepthBias, cascade) {
526
+ const funcNameFilterShadowPCF = `lib_filterShadowPCF${kernelSize}x${kernelSize}`;
527
+ const pb = scope.$builder;
528
+ pb.func(funcNameFilterShadowPCF, [
529
+ pb.vec4('texCoord'),
530
+ ...receiverPlaneDepthBias ? [
531
+ pb.vec3('receiverPlaneDepthBias')
532
+ ] : [],
533
+ ...cascade ? [
534
+ pb.int('cascade')
535
+ ] : []
536
+ ], function() {
537
+ this.$l.lightDepth = this.texCoord.z;
538
+ if (receiverPlaneDepthBias) {
539
+ this.lightDepth = pb.sub(this.lightDepth, this.receiverPlaneDepthBias.z);
540
+ }
541
+ const shadowMapTexelSize = getShadowMapTexelSize(this);
542
+ this.$l.uv = pb.add(pb.mul(this.texCoord.xy, pb.vec2(getShadowMapSize(this))), pb.vec2(0));
543
+ this.$l.st = pb.fract(this.uv);
544
+ this.$l.baseUV = pb.sub(pb.floor(this.uv), pb.vec2(0.5));
545
+ this.baseUV = pb.mul(this.baseUV, shadowMapTexelSize);
546
+ this.$l.shadow = pb.float(0);
547
+ if (kernelSize === 3) {
548
+ this.$l.uvw0 = pb.sub(pb.vec2(3), pb.mul(2, this.st));
549
+ this.$l.uvw1 = pb.add(pb.vec2(1), pb.mul(2, this.st));
550
+ this.$l.u = pb.mul(pb.vec2(pb.sub(pb.div(pb.sub(2, this.st.x), this.uvw0.x), 1), pb.add(pb.div(this.st.x, this.uvw1.x), 1)), shadowMapTexelSize);
551
+ this.$l.v = pb.mul(pb.vec2(pb.sub(pb.div(pb.sub(2, this.st.y), this.uvw0.y), 1), pb.add(pb.div(this.st.y, this.uvw1.y), 1)), shadowMapTexelSize);
552
+ this.shadow = pb.add(this.shadow, pb.mul(sampleShadowMapPCF(this, shadowMapFormat, this.baseUV, pb.vec2(this.u.x, this.v.x), this.lightDepth, this.cascade), this.uvw0.x, this.uvw0.y));
553
+ this.shadow = pb.add(this.shadow, pb.mul(sampleShadowMapPCF(this, shadowMapFormat, this.baseUV, pb.vec2(this.u.y, this.v.x), this.lightDepth, this.cascade), this.uvw1.x, this.uvw0.y));
554
+ this.shadow = pb.add(this.shadow, pb.mul(sampleShadowMapPCF(this, shadowMapFormat, this.baseUV, pb.vec2(this.u.x, this.v.y), this.lightDepth, this.cascade), this.uvw0.x, this.uvw1.y));
555
+ this.shadow = pb.add(this.shadow, pb.mul(sampleShadowMapPCF(this, shadowMapFormat, this.baseUV, pb.vec2(this.u.y, this.v.y), this.lightDepth, this.cascade), this.uvw1.x, this.uvw1.y));
556
+ this.shadow = pb.div(this.shadow, 16);
557
+ } else if (kernelSize === 5) {
558
+ this.$l.uvw0 = pb.sub(pb.vec2(4), pb.mul(this.st, 3));
559
+ this.$l.uvw1 = pb.vec2(7);
560
+ this.$l.uvw2 = pb.add(pb.vec2(1), pb.mul(this.st, 3));
561
+ this.$l.u = pb.mul(pb.vec3(pb.sub(pb.div(pb.sub(3, pb.mul(this.st.x, 2)), this.uvw0.x), 2), pb.div(pb.add(this.st.x, 3), this.uvw1.x), pb.add(pb.div(this.st.x, this.uvw2.x), 2)), shadowMapTexelSize);
562
+ this.$l.v = pb.mul(pb.vec3(pb.sub(pb.div(pb.sub(3, pb.mul(this.st.y, 2)), this.uvw0.y), 2), pb.div(pb.add(this.st.y, 3), this.uvw1.y), pb.add(pb.div(this.st.y, this.uvw2.y), 2)), shadowMapTexelSize);
563
+ this.shadow = pb.add(this.shadow, pb.mul(sampleShadowMapPCF(this, shadowMapFormat, this.baseUV, pb.vec2(this.u.x, this.v.x), this.lightDepth, this.cascade), this.uvw0.x, this.uvw0.y));
564
+ this.shadow = pb.add(this.shadow, pb.mul(sampleShadowMapPCF(this, shadowMapFormat, this.baseUV, pb.vec2(this.u.y, this.v.x), this.lightDepth, this.cascade), this.uvw1.x, this.uvw0.y));
565
+ this.shadow = pb.add(this.shadow, pb.mul(sampleShadowMapPCF(this, shadowMapFormat, this.baseUV, pb.vec2(this.u.z, this.v.x), this.lightDepth, this.cascade), this.uvw2.x, this.uvw0.y));
566
+ this.shadow = pb.add(this.shadow, pb.mul(sampleShadowMapPCF(this, shadowMapFormat, this.baseUV, pb.vec2(this.u.x, this.v.y), this.lightDepth, this.cascade), this.uvw0.x, this.uvw1.y));
567
+ this.shadow = pb.add(this.shadow, pb.mul(sampleShadowMapPCF(this, shadowMapFormat, this.baseUV, pb.vec2(this.u.y, this.v.y), this.lightDepth, this.cascade), this.uvw1.x, this.uvw1.y));
568
+ this.shadow = pb.add(this.shadow, pb.mul(sampleShadowMapPCF(this, shadowMapFormat, this.baseUV, pb.vec2(this.u.z, this.v.y), this.lightDepth, this.cascade), this.uvw2.x, this.uvw1.y));
569
+ this.shadow = pb.add(this.shadow, pb.mul(sampleShadowMapPCF(this, shadowMapFormat, this.baseUV, pb.vec2(this.u.x, this.v.z), this.lightDepth, this.cascade), this.uvw0.x, this.uvw2.y));
570
+ this.shadow = pb.add(this.shadow, pb.mul(sampleShadowMapPCF(this, shadowMapFormat, this.baseUV, pb.vec2(this.u.y, this.v.z), this.lightDepth, this.cascade), this.uvw1.x, this.uvw2.y));
571
+ this.shadow = pb.add(this.shadow, pb.mul(sampleShadowMapPCF(this, shadowMapFormat, this.baseUV, pb.vec2(this.u.z, this.v.z), this.lightDepth, this.cascade), this.uvw2.x, this.uvw2.y));
572
+ this.shadow = pb.div(this.shadow, 144);
573
+ } else if (kernelSize === 7) {
574
+ this.$l.uvw0 = pb.sub(pb.mul(this.st, 5), pb.vec2(6));
575
+ this.$l.uvw1 = pb.sub(pb.mul(this.st, 11), pb.vec2(28));
576
+ this.$l.uvw2 = pb.sub(pb.mul(this.st, -11), pb.vec2(17));
577
+ this.$l.uvw3 = pb.sub(pb.mul(this.st, -5), 1);
578
+ this.$l.u = pb.vec4(pb.sub(pb.div(pb.sub(pb.mul(this.st.x, 4), 5), this.uvw0.x), 3), pb.sub(pb.div(pb.sub(pb.mul(this.st.x, 4), 16), this.uvw1.x), 1), pb.add(pb.div(pb.sub(pb.mul(this.st.x, -7), 5), this.uvw2.x), 1), pb.add(pb.div(pb.neg(this.st.x), this.uvw3.x), 3));
579
+ this.$l.v = pb.vec4(pb.sub(pb.div(pb.sub(pb.mul(this.st.y, 4), 5), this.uvw0.y), 3), pb.sub(pb.div(pb.sub(pb.mul(this.st.y, 4), 16), this.uvw1.y), 1), pb.add(pb.div(pb.sub(pb.mul(this.st.y, -7), 5), this.uvw2.y), 1), pb.add(pb.div(pb.neg(this.st.y), this.uvw3.y), 3));
580
+ this.shadow = pb.add(this.shadow, pb.mul(sampleShadowMapPCF(this, shadowMapFormat, this.baseUV, pb.mul(pb.vec2(this.u.x, this.v.x), shadowMapTexelSize), this.lightDepth, this.cascade), this.uvw0.x, this.uvw0.y));
581
+ this.shadow = pb.add(this.shadow, pb.mul(sampleShadowMapPCF(this, shadowMapFormat, this.baseUV, pb.mul(pb.vec2(this.u.y, this.v.x), shadowMapTexelSize), this.lightDepth, this.cascade), this.uvw1.x, this.uvw0.y));
582
+ this.shadow = pb.add(this.shadow, pb.mul(sampleShadowMapPCF(this, shadowMapFormat, this.baseUV, pb.mul(pb.vec2(this.u.z, this.v.x), shadowMapTexelSize), this.lightDepth, this.cascade), this.uvw2.x, this.uvw0.y));
583
+ this.shadow = pb.add(this.shadow, pb.mul(sampleShadowMapPCF(this, shadowMapFormat, this.baseUV, pb.mul(pb.vec2(this.u.w, this.v.x), shadowMapTexelSize), this.lightDepth, this.cascade), this.uvw3.x, this.uvw0.y));
584
+ this.shadow = pb.add(this.shadow, pb.mul(sampleShadowMapPCF(this, shadowMapFormat, this.baseUV, pb.mul(pb.vec2(this.u.x, this.v.y), shadowMapTexelSize), this.lightDepth, this.cascade), this.uvw0.x, this.uvw1.y));
585
+ this.shadow = pb.add(this.shadow, pb.mul(sampleShadowMapPCF(this, shadowMapFormat, this.baseUV, pb.mul(pb.vec2(this.u.y, this.v.y), shadowMapTexelSize), this.lightDepth, this.cascade), this.uvw1.x, this.uvw1.y));
586
+ this.shadow = pb.add(this.shadow, pb.mul(sampleShadowMapPCF(this, shadowMapFormat, this.baseUV, pb.mul(pb.vec2(this.u.z, this.v.y), shadowMapTexelSize), this.lightDepth, this.cascade), this.uvw2.x, this.uvw1.y));
587
+ this.shadow = pb.add(this.shadow, pb.mul(sampleShadowMapPCF(this, shadowMapFormat, this.baseUV, pb.mul(pb.vec2(this.u.w, this.v.y), shadowMapTexelSize), this.lightDepth, this.cascade), this.uvw3.x, this.uvw1.y));
588
+ this.shadow = pb.add(this.shadow, pb.mul(sampleShadowMapPCF(this, shadowMapFormat, this.baseUV, pb.mul(pb.vec2(this.u.x, this.v.z), shadowMapTexelSize), this.lightDepth, this.cascade), this.uvw0.x, this.uvw2.y));
589
+ this.shadow = pb.add(this.shadow, pb.mul(sampleShadowMapPCF(this, shadowMapFormat, this.baseUV, pb.mul(pb.vec2(this.u.y, this.v.z), shadowMapTexelSize), this.lightDepth, this.cascade), this.uvw1.x, this.uvw2.y));
590
+ this.shadow = pb.add(this.shadow, pb.mul(sampleShadowMapPCF(this, shadowMapFormat, this.baseUV, pb.mul(pb.vec2(this.u.z, this.v.z), shadowMapTexelSize), this.lightDepth, this.cascade), this.uvw2.x, this.uvw2.y));
591
+ this.shadow = pb.add(this.shadow, pb.mul(sampleShadowMapPCF(this, shadowMapFormat, this.baseUV, pb.mul(pb.vec2(this.u.w, this.v.z), shadowMapTexelSize), this.lightDepth, this.cascade), this.uvw3.x, this.uvw2.y));
592
+ this.shadow = pb.add(this.shadow, pb.mul(sampleShadowMapPCF(this, shadowMapFormat, this.baseUV, pb.mul(pb.vec2(this.u.x, this.v.w), shadowMapTexelSize), this.lightDepth, this.cascade), this.uvw0.x, this.uvw3.y));
593
+ this.shadow = pb.add(this.shadow, pb.mul(sampleShadowMapPCF(this, shadowMapFormat, this.baseUV, pb.mul(pb.vec2(this.u.y, this.v.w), shadowMapTexelSize), this.lightDepth, this.cascade), this.uvw1.x, this.uvw3.y));
594
+ this.shadow = pb.add(this.shadow, pb.mul(sampleShadowMapPCF(this, shadowMapFormat, this.baseUV, pb.mul(pb.vec2(this.u.z, this.v.w), shadowMapTexelSize), this.lightDepth, this.cascade), this.uvw2.x, this.uvw3.y));
595
+ this.shadow = pb.add(this.shadow, pb.mul(sampleShadowMapPCF(this, shadowMapFormat, this.baseUV, pb.mul(pb.vec2(this.u.w, this.v.w), shadowMapTexelSize), this.lightDepth, this.cascade), this.uvw3.x, this.uvw3.y));
596
+ this.shadow = pb.div(this.shadow, 2704);
597
+ }
598
+ this.$return(this.shadow);
599
+ });
600
+ return pb.getGlobalScope()[funcNameFilterShadowPCF](texCoord, ...receiverPlaneDepthBias ? [
601
+ receiverPlaneDepthBias
602
+ ] : [], ...cascade ? [
603
+ cascade
604
+ ] : []);
605
+ }
606
+ /** @internal */ function filterShadowPoissonDisc(scope, lightType, shadowMapFormat, tapCount, texCoord, receiverPlaneDepthBias, cascade) {
607
+ const funcNameFilterShadowPoissonDisc = 'lib_filterShadowPoissonDisc';
608
+ const pb = scope.$builder;
609
+ pb.func(funcNameFilterShadowPoissonDisc, [
610
+ pb.vec4('texCoord'),
611
+ ...receiverPlaneDepthBias ? [
612
+ pb.vec3('receiverPlaneDepthBias')
613
+ ] : [],
614
+ ...cascade ? [
615
+ pb.int('cascade')
616
+ ] : []
617
+ ], function() {
618
+ this.$l.lightDepth = this.texCoord.z;
619
+ if (receiverPlaneDepthBias) {
620
+ this.lightDepth = pb.sub(this.lightDepth, this.receiverPlaneDepthBias.z);
621
+ }
622
+ this.$l.duv = pb.vec2();
623
+ this.$l.filterRadius = pb.mul(getShadowMapTexelSize(this), getPoissonDiscSampleRadius(this));
624
+ this.$l.matrix = getRandomRotationMatrix(this, this.$builtins.fragCoord.xy);
625
+ this.$l.shadow = pb.float(0);
626
+ for(let i = 0; i < tapCount; i++){
627
+ this.duv = pb.mul(this.matrix, pb.mul(pb.vec2(PCF_POISSON_DISC[i][0], PCF_POISSON_DISC[i][1]), this.filterRadius));
628
+ const sampleDepth = receiverPlaneDepthBias ? pb.add(this.lightDepth, pb.dot(this.duv, this.receiverPlaneDepthBias.xy)) : this.lightDepth;
629
+ this.shadow = pb.add(this.shadow, sampleShadowMap(this, lightType, shadowMapFormat, pb.add(this.texCoord.xy, this.duv), sampleDepth, this.cascade));
630
+ }
631
+ this.shadow = pb.div(this.shadow, tapCount);
632
+ this.$return(this.shadow);
633
+ });
634
+ return pb.getGlobalScope()[funcNameFilterShadowPoissonDisc](texCoord, ...receiverPlaneDepthBias ? [
635
+ receiverPlaneDepthBias
636
+ ] : [], ...cascade ? [
637
+ cascade
638
+ ] : []);
639
+ }
640
+
641
+ export { computeReceiverPlaneDepthBias, computeShadowMapDepth, filterShadowESM, filterShadowPCF, filterShadowPoissonDisc, filterShadowVSM };
642
+ //# sourceMappingURL=shadow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadow.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}