@shapediver/viewer.rendering-engine.rendering-engine-threejs 3.16.8 → 3.16.9

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 (185) hide show
  1. package/dist/RenderingEngine.d.ts +294 -294
  2. package/dist/RenderingEngine.js +987 -977
  3. package/dist/RenderingEngine.js.map +1 -1
  4. package/dist/index.d.ts +16 -16
  5. package/dist/index.js +57 -57
  6. package/dist/injectors/TextureUnifierInjector.d.ts +13 -13
  7. package/dist/injectors/TextureUnifierInjector.js +181 -171
  8. package/dist/injectors/TextureUnifierInjector.js.map +1 -1
  9. package/dist/interfaces/ILoader.d.ts +3 -3
  10. package/dist/interfaces/ILoader.js +2 -2
  11. package/dist/interfaces/IRenderingEngine.d.ts +45 -45
  12. package/dist/interfaces/IRenderingEngine.js +2 -2
  13. package/dist/loaders/EnvironmentMapLoader.d.ts +119 -119
  14. package/dist/loaders/EnvironmentMapLoader.js +512 -502
  15. package/dist/loaders/EnvironmentMapLoader.js.map +1 -1
  16. package/dist/loaders/GeometryLoader.d.ts +39 -39
  17. package/dist/loaders/GeometryLoader.d.ts.map +1 -1
  18. package/dist/loaders/GeometryLoader.js +603 -593
  19. package/dist/loaders/GeometryLoader.js.map +1 -1
  20. package/dist/loaders/HTMLElementAnchorLoader.d.ts +15 -15
  21. package/dist/loaders/HTMLElementAnchorLoader.js +98 -98
  22. package/dist/loaders/HTMLElementAnchorLoader.js.map +1 -1
  23. package/dist/loaders/LightLoader.d.ts +19 -19
  24. package/dist/loaders/LightLoader.js +197 -187
  25. package/dist/loaders/LightLoader.js.map +1 -1
  26. package/dist/loaders/MaterialLoader.d.ts +115 -115
  27. package/dist/loaders/MaterialLoader.d.ts.map +1 -1
  28. package/dist/loaders/MaterialLoader.js +1612 -1602
  29. package/dist/loaders/MaterialLoader.js.map +1 -1
  30. package/dist/managers/ARManager.d.ts +17 -17
  31. package/dist/managers/ARManager.js +128 -128
  32. package/dist/managers/ARManager.js.map +1 -1
  33. package/dist/managers/CameraManager.d.ts +19 -19
  34. package/dist/managers/CameraManager.js +244 -234
  35. package/dist/managers/CameraManager.js.map +1 -1
  36. package/dist/managers/EnvironmentGeometryManager.d.ts +32 -32
  37. package/dist/managers/EnvironmentGeometryManager.js +114 -114
  38. package/dist/managers/EnvironmentGeometryManager.js.map +1 -1
  39. package/dist/managers/FlagManager.d.ts +19 -19
  40. package/dist/managers/FlagManager.js +143 -143
  41. package/dist/managers/FlagManager.js.map +1 -1
  42. package/dist/managers/PostProcessingManager.d.ts +1019 -1019
  43. package/dist/managers/PostProcessingManager.js +1306 -1296
  44. package/dist/managers/PostProcessingManager.js.map +1 -1
  45. package/dist/managers/RenderingManager.d.ts +84 -84
  46. package/dist/managers/RenderingManager.d.ts.map +1 -1
  47. package/dist/managers/RenderingManager.js +679 -669
  48. package/dist/managers/RenderingManager.js.map +1 -1
  49. package/dist/managers/SceneTracingManager.d.ts +28 -28
  50. package/dist/managers/SceneTracingManager.js +160 -150
  51. package/dist/managers/SceneTracingManager.js.map +1 -1
  52. package/dist/managers/SceneTreeManager.d.ts +81 -81
  53. package/dist/managers/SceneTreeManager.d.ts.map +1 -1
  54. package/dist/managers/SceneTreeManager.js +500 -490
  55. package/dist/managers/SceneTreeManager.js.map +1 -1
  56. package/dist/managers/SettingsManager.d.ts +28 -28
  57. package/dist/managers/SettingsManager.js +284 -284
  58. package/dist/managers/SettingsManager.js.map +1 -1
  59. package/dist/managers/environmentGeometry/ContactShadow.d.ts +42 -42
  60. package/dist/managers/environmentGeometry/ContactShadow.js +295 -285
  61. package/dist/managers/environmentGeometry/ContactShadow.js.map +1 -1
  62. package/dist/managers/environmentGeometry/Grid.d.ts +20 -20
  63. package/dist/managers/environmentGeometry/Grid.js +110 -100
  64. package/dist/managers/environmentGeometry/Grid.js.map +1 -1
  65. package/dist/managers/environmentGeometry/GroundPlane.d.ts +21 -21
  66. package/dist/managers/environmentGeometry/GroundPlane.js +105 -95
  67. package/dist/managers/environmentGeometry/GroundPlane.js.map +1 -1
  68. package/dist/managers/environmentGeometry/GroundPlaneShadow.d.ts +21 -21
  69. package/dist/managers/environmentGeometry/GroundPlaneShadow.js +96 -86
  70. package/dist/managers/environmentGeometry/GroundPlaneShadow.js.map +1 -1
  71. package/dist/managers/environmentGeometry/IEnvironmentGeometry.d.ts +8 -8
  72. package/dist/managers/environmentGeometry/IEnvironmentGeometry.js +2 -2
  73. package/dist/managers/postprocessing/GodRaysManager.d.ts +12 -12
  74. package/dist/managers/postprocessing/GodRaysManager.js +73 -63
  75. package/dist/managers/postprocessing/GodRaysManager.js.map +1 -1
  76. package/dist/managers/postprocessing/OutlineManager.d.ts +15 -15
  77. package/dist/managers/postprocessing/OutlineManager.js +86 -76
  78. package/dist/managers/postprocessing/OutlineManager.js.map +1 -1
  79. package/dist/managers/postprocessing/SSAARenderPass.d.ts +53 -53
  80. package/dist/managers/postprocessing/SSAARenderPass.js +281 -281
  81. package/dist/managers/postprocessing/SSAARenderPass.js.map +1 -1
  82. package/dist/managers/postprocessing/SelectiveBloomManager.d.ts +14 -14
  83. package/dist/managers/postprocessing/SelectiveBloomManager.js +76 -66
  84. package/dist/managers/postprocessing/SelectiveBloomManager.js.map +1 -1
  85. package/dist/managers/postprocessing/ao/ao/AOEffect.d.ts +46 -46
  86. package/dist/managers/postprocessing/ao/ao/AOEffect.js +142 -142
  87. package/dist/managers/postprocessing/ao/ao/AOEffect.js.map +1 -1
  88. package/dist/managers/postprocessing/ao/ao/AOPass.d.ts +12 -12
  89. package/dist/managers/postprocessing/ao/ao/AOPass.js +108 -108
  90. package/dist/managers/postprocessing/ao/ao/AOPass.js.map +1 -1
  91. package/dist/managers/postprocessing/ao/ao/shader/ao_compose.d.ts +1 -1
  92. package/dist/managers/postprocessing/ao/ao/shader/ao_compose.js +4 -4
  93. package/dist/managers/postprocessing/ao/ao/shader/ao_utils.d.ts +1 -1
  94. package/dist/managers/postprocessing/ao/ao/shader/ao_utils.js +4 -4
  95. package/dist/managers/postprocessing/ao/hbao/HBAOEffect.d.ts +14 -14
  96. package/dist/managers/postprocessing/ao/hbao/HBAOEffect.js +24 -24
  97. package/dist/managers/postprocessing/ao/hbao/shader/hbao.d.ts +1 -1
  98. package/dist/managers/postprocessing/ao/hbao/shader/hbao.js +4 -4
  99. package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.d.ts +33 -33
  100. package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.js +211 -211
  101. package/dist/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.js.map +1 -1
  102. package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.d.ts +1 -1
  103. package/dist/managers/postprocessing/ao/poissionDenoise/shader/poissionDenoise.js +4 -4
  104. package/dist/managers/postprocessing/ao/ssao/SSAOEffect.d.ts +14 -14
  105. package/dist/managers/postprocessing/ao/ssao/SSAOEffect.js +82 -82
  106. package/dist/managers/postprocessing/ao/ssao/SSAOEffect.js.map +1 -1
  107. package/dist/managers/postprocessing/ao/ssao/shader/ssao.d.ts +1 -1
  108. package/dist/managers/postprocessing/ao/ssao/shader/ssao.js +4 -4
  109. package/dist/managers/postprocessing/ao/utils/shader/basic.d.ts +1 -1
  110. package/dist/managers/postprocessing/ao/utils/shader/basic.js +4 -4
  111. package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.d.ts +1 -1
  112. package/dist/managers/postprocessing/ao/utils/shader/sampleBlueNoise.js +4 -4
  113. package/dist/managers/postprocessing/effects/tone-mapping/ToneMappingEffect.d.ts +165 -165
  114. package/dist/managers/postprocessing/effects/tone-mapping/ToneMappingEffect.js +299 -299
  115. package/dist/managers/postprocessing/effects/tone-mapping/ToneMappingEffect.js.map +1 -1
  116. package/dist/managers/postprocessing/effects/tone-mapping/tone-mapping.d.ts +1 -1
  117. package/dist/managers/postprocessing/effects/tone-mapping/tone-mapping.js +4 -4
  118. package/dist/managers/postprocessing/utils/CopyMaterial.d.ts +37 -37
  119. package/dist/managers/postprocessing/utils/CopyMaterial.js +69 -69
  120. package/dist/managers/postprocessing/utils/CopyShader.d.ts +13 -13
  121. package/dist/managers/postprocessing/utils/CopyShader.js +12 -12
  122. package/dist/managers/postprocessing/utils/FullScreenQuad.d.ts +9 -9
  123. package/dist/managers/postprocessing/utils/FullScreenQuad.js +28 -28
  124. package/dist/managers/postprocessing/utils/NormalPass.d.ts +87 -87
  125. package/dist/managers/postprocessing/utils/NormalPass.js +156 -156
  126. package/dist/managers/postprocessing/utils/NormalPass.js.map +1 -1
  127. package/dist/managers/postprocessing/utils/RenderPass.d.ts +114 -114
  128. package/dist/managers/postprocessing/utils/RenderPass.js +259 -259
  129. package/dist/managers/postprocessing/utils/RenderPass.js.map +1 -1
  130. package/dist/managers/sceneTree/SDTFUtils.d.ts +6 -6
  131. package/dist/managers/sceneTree/SDTFUtils.d.ts.map +1 -1
  132. package/dist/managers/sceneTree/SDTFUtils.js +50 -50
  133. package/dist/managers/sceneTree/SDTFUtils.js.map +1 -1
  134. package/dist/managers/sceneTree/SceenTreeManagerUtils.d.ts +7 -7
  135. package/dist/managers/sceneTree/SceenTreeManagerUtils.d.ts.map +1 -1
  136. package/dist/managers/sceneTree/SceenTreeManagerUtils.js +175 -165
  137. package/dist/managers/sceneTree/SceenTreeManagerUtils.js.map +1 -1
  138. package/dist/managers/sceneTree/ThreeJsDataUtils.d.ts +6 -6
  139. package/dist/managers/sceneTree/ThreeJsDataUtils.d.ts.map +1 -1
  140. package/dist/managers/sceneTree/ThreeJsDataUtils.js +80 -70
  141. package/dist/managers/sceneTree/ThreeJsDataUtils.js.map +1 -1
  142. package/dist/materials/GemMaterial.d.ts +37 -37
  143. package/dist/materials/GemMaterial.js +262 -252
  144. package/dist/materials/GemMaterial.js.map +1 -1
  145. package/dist/materials/MeshUnlitMaterialParameters.d.ts +3 -3
  146. package/dist/materials/MeshUnlitMaterialParameters.js +2 -2
  147. package/dist/materials/MultiPointsMaterial.d.ts +93 -93
  148. package/dist/materials/MultiPointsMaterial.js +577 -567
  149. package/dist/materials/MultiPointsMaterial.js.map +1 -1
  150. package/dist/materials/SpecularGlossinessMaterial.d.ts +13 -13
  151. package/dist/materials/SpecularGlossinessMaterial.js +171 -161
  152. package/dist/materials/SpecularGlossinessMaterial.js.map +1 -1
  153. package/dist/objects/SDColor.d.ts +16 -16
  154. package/dist/objects/SDColor.js +52 -52
  155. package/dist/objects/SDColor.js.map +1 -1
  156. package/dist/objects/SDObject.d.ts +27 -27
  157. package/dist/objects/SDObject.js +112 -102
  158. package/dist/objects/SDObject.js.map +1 -1
  159. package/dist/shaders/PCSS.d.ts +2 -2
  160. package/dist/shaders/PCSS.js +5 -5
  161. package/dist/shaders/gem.d.ts +2 -2
  162. package/dist/shaders/gem.js +5 -5
  163. package/dist/shaders/multi_points.d.ts +2 -2
  164. package/dist/shaders/multi_points.js +5 -5
  165. package/dist/styling/viewport-css.d.ts +1 -1
  166. package/dist/styling/viewport-css.js +4 -4
  167. package/dist/three/CSS2DRenderer.d.ts +31 -31
  168. package/dist/three/CSS2DRenderer.d.ts.map +1 -1
  169. package/dist/three/CSS2DRenderer.js +152 -152
  170. package/dist/three/CSS2DRenderer.js.map +1 -1
  171. package/dist/three/geometries/TextGeometry.d.ts +21 -21
  172. package/dist/three/geometries/TextGeometry.js +45 -45
  173. package/dist/three/geometries/TextGeometry.js.map +1 -1
  174. package/dist/three/loaders/RGBELoader.d.ts +23 -23
  175. package/dist/three/loaders/RGBELoader.js +311 -311
  176. package/dist/three/loaders/RGBELoader.js.map +1 -1
  177. package/dist/types/IThreejsData.d.ts +6 -6
  178. package/dist/types/IThreejsData.js +2 -2
  179. package/dist/types/ThreejsData.d.ts +10 -10
  180. package/dist/types/ThreejsData.js +41 -41
  181. package/package.json +18 -18
  182. package/dist/managers/InstanceGroupManager.d.ts +0 -58
  183. package/dist/managers/InstanceGroupManager.d.ts.map +0 -1
  184. package/dist/managers/InstanceGroupManager.js +0 -372
  185. package/dist/managers/InstanceGroupManager.js.map +0 -1
@@ -1,212 +1,212 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.PoissionDenoisePass = void 0;
13
- const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
14
- const postprocessing_1 = require("postprocessing");
15
- const three_1 = require("three");
16
- const basic_1 = require("../utils/shader/basic");
17
- const sampleBlueNoise_1 = require("../utils/shader/sampleBlueNoise");
18
- const poissionDenoise_1 = require("./shader/poissionDenoise");
19
- const finalFragmentShader = poissionDenoise_1.poissionDenoise.replace("#include <sampleBlueNoise>", sampleBlueNoise_1.sampleBlueNoise);
20
- const defaultPoissonBlurOptions = {
21
- iterations: 1,
22
- radius: 12,
23
- rings: 11,
24
- lumaPhi: 10,
25
- depthPhi: 2,
26
- normalPhi: 3.25,
27
- samples: 16,
28
- distance: 1,
29
- normalTexture: null,
30
- };
31
- class PoissionDenoisePass extends postprocessing_1.Pass {
32
- // #endregion Properties (11)
33
- // #region Constructors (1)
34
- constructor(camera, inputTexture, depthTexture, options = defaultPoissonBlurOptions) {
35
- super("PoissionBlurPass");
36
- this.index = 0;
37
- this.iterations = defaultPoissonBlurOptions.iterations;
38
- this.radius = 12;
39
- this.rings = 11;
40
- this.samples = 16;
41
- if (PoissionDenoisePass.blueNoiseTexture === undefined) {
42
- PoissionDenoisePass.loadBlueNoiseTexture().then(() => {
43
- this.fullscreenMaterial.uniforms.blueNoiseTexture.value =
44
- PoissionDenoisePass.blueNoiseTexture;
45
- });
46
- }
47
- options = Object.assign(Object.assign({}, defaultPoissonBlurOptions), options);
48
- this.inputTexture = inputTexture;
49
- this.fullscreenMaterial = new three_1.ShaderMaterial({
50
- fragmentShader: finalFragmentShader,
51
- vertexShader: basic_1.basic,
52
- uniforms: {
53
- depthTexture: { value: null },
54
- inputTexture: { value: null },
55
- projectionMatrixInverse: { value: new three_1.Matrix4() },
56
- cameraMatrixWorld: { value: new three_1.Matrix4() },
57
- lumaPhi: { value: 5.0 },
58
- depthPhi: { value: 5.0 },
59
- normalPhi: { value: 5.0 },
60
- distance: { value: 1.0 },
61
- resolution: { value: new three_1.Vector2() },
62
- blueNoiseTexture: { value: null },
63
- index: { value: 0 },
64
- blueNoiseRepeat: { value: new three_1.Vector2() },
65
- },
66
- });
67
- const renderTargetOptions = {
68
- type: three_1.HalfFloatType,
69
- depthBuffer: false,
70
- };
71
- this.renderTargetA = new three_1.WebGLRenderTarget(1, 1, renderTargetOptions);
72
- this.renderTargetB = new three_1.WebGLRenderTarget(1, 1, renderTargetOptions);
73
- const { uniforms } = this.fullscreenMaterial;
74
- uniforms["inputTexture"].value = this.inputTexture;
75
- uniforms["depthTexture"].value = depthTexture;
76
- uniforms["projectionMatrixInverse"].value =
77
- camera.projectionMatrixInverse;
78
- uniforms["cameraMatrixWorld"].value = camera.matrixWorld;
79
- uniforms["depthPhi"].value = options.depthPhi;
80
- uniforms["normalPhi"].value = options.normalPhi;
81
- uniforms["distance"].value = options.distance;
82
- if (options.normalTexture) {
83
- uniforms["normalTexture"] = { value: options.normalTexture };
84
- }
85
- else {
86
- this.fullscreenMaterial.defines.NORMAL_IN_RGB =
87
- "";
88
- }
89
- // these properties need the shader to be recompiled
90
- for (const prop of ["radius", "rings", "samples"]) {
91
- Object.defineProperty(this, prop, {
92
- get: () => options[prop],
93
- set: (value) => {
94
- options[prop] = value;
95
- this.setSize(this.renderTargetA.width, this.renderTargetA.height);
96
- },
97
- });
98
- }
99
- }
100
- static loadBlueNoiseTexture() {
101
- return __awaiter(this, void 0, void 0, function* () {
102
- const result = yield viewer_shared_services_1.HttpClient.instance.loadTexture("https://viewer.shapediver.com/v3/graphics/LDR_RGBA_0.png");
103
- if (result && result.data && result.data.blob) {
104
- const url = URL.createObjectURL(result.data.blob);
105
- new three_1.TextureLoader().load(url, (texture) => {
106
- URL.revokeObjectURL(url);
107
- PoissionDenoisePass.blueNoiseTexture = texture;
108
- PoissionDenoisePass.blueNoiseTexture.minFilter = three_1.NearestFilter;
109
- PoissionDenoisePass.blueNoiseTexture.magFilter = three_1.NearestFilter;
110
- PoissionDenoisePass.blueNoiseTexture.wrapS = three_1.RepeatWrapping;
111
- PoissionDenoisePass.blueNoiseTexture.wrapT = three_1.RepeatWrapping;
112
- PoissionDenoisePass.blueNoiseTexture.colorSpace = three_1.NoColorSpace;
113
- PoissionDenoisePass.blueNoiseTexture.needsUpdate = true;
114
- });
115
- }
116
- else if (!result) {
117
- viewer_shared_services_1.Logger.instance.warn("The blue noise texture could not be loaded. This may result in a suboptimal denoising quality. Retrying in 1 second...");
118
- // if there was an issue loading the texture
119
- // set a timeout with 1 second to try again
120
- setTimeout(() => {
121
- this.loadBlueNoiseTexture();
122
- }, 1000);
123
- }
124
- });
125
- }
126
- // #endregion Constructors (1)
127
- // #region Public Getters And Setters (1)
128
- get texture() {
129
- return this.renderTargetB.texture;
130
- }
131
- // #endregion Public Getters And Setters (1)
132
- // #region Public Methods (4)
133
- generateDenoiseSamples(numSamples, numRings, r, texelSize) {
134
- const angleStep = (2 * Math.PI * numRings) / numSamples;
135
- const invNumSamples = 1.0 / numSamples;
136
- const radiusStep = invNumSamples;
137
- const samples = [];
138
- let radius = invNumSamples;
139
- let angle = 0;
140
- for (let i = 0; i < numSamples; i++) {
141
- const v = new three_1.Vector2(Math.cos(angle), Math.sin(angle))
142
- .multiplyScalar(Math.pow(radius, 0.75))
143
- .multiply(texelSize)
144
- .multiplyScalar(r);
145
- if (isNaN(v.x) || v.x === Infinity || v.x === -Infinity)
146
- v.x = 0;
147
- if (isNaN(v.y) || v.y === Infinity || v.y === -Infinity)
148
- v.y = 0;
149
- samples.push(v);
150
- radius += radiusStep;
151
- angle += angleStep;
152
- }
153
- return samples;
154
- }
155
- generatePoissonDiskConstant(poissonDisk) {
156
- const samples = poissonDisk.length;
157
- let glslCode = "const vec2 poissonDisk[samples] = vec2[samples](\n";
158
- for (let i = 0; i < samples; i++) {
159
- const sample = poissonDisk[i];
160
- glslCode += ` vec2(${sample.x}, ${sample.y})`;
161
- if (i < samples - 1) {
162
- glslCode += ",";
163
- }
164
- glslCode += "\n";
165
- }
166
- glslCode += ");";
167
- return glslCode;
168
- }
169
- render(renderer) {
170
- this.fullscreenMaterial.uniforms.index.value = 0;
171
- const noiseTexture = this.fullscreenMaterial
172
- .uniforms.blueNoiseTexture.value;
173
- if (noiseTexture !== undefined &&
174
- noiseTexture !== null &&
175
- noiseTexture instanceof three_1.Texture) {
176
- const { width, height } = noiseTexture.source.data;
177
- this.fullscreenMaterial.uniforms.blueNoiseRepeat.value.set(this.renderTargetA.width / width, this.renderTargetA.height / height);
178
- }
179
- for (let i = 0; i < 2 * this.iterations; i++) {
180
- const horizontal = i % 2 === 0;
181
- const inputRenderTarget = horizontal
182
- ? this.renderTargetB
183
- : this.renderTargetA;
184
- this.fullscreenMaterial.uniforms["inputTexture"].value = i === 0 ? this.inputTexture : inputRenderTarget.texture;
185
- const renderTarget = horizontal
186
- ? this.renderTargetA
187
- : this.renderTargetB;
188
- renderer.setRenderTarget(renderTarget);
189
- renderer.render(this.scene, this.camera);
190
- this.fullscreenMaterial.uniforms.index.value =
191
- (this.fullscreenMaterial.uniforms.index
192
- .value +
193
- 1) %
194
- 4;
195
- }
196
- }
197
- setSize(width, height) {
198
- this.renderTargetA.setSize(width, height);
199
- this.renderTargetB.setSize(width, height);
200
- this.fullscreenMaterial.uniforms.resolution.value.set(width, height);
201
- const poissonDisk = this.generateDenoiseSamples(this.samples, this.rings, this.radius, new three_1.Vector2(1 / width, 1 / height));
202
- const sampleDefine = `const int samples = ${this.samples};\n`;
203
- const poissonDiskConstant = this.generatePoissonDiskConstant(poissonDisk);
204
- this.fullscreenMaterial.fragmentShader =
205
- sampleDefine + poissonDiskConstant + "\n" + finalFragmentShader;
206
- this.fullscreenMaterial.needsUpdate = true;
207
- }
208
- }
209
- exports.PoissionDenoisePass = PoissionDenoisePass;
210
- // #region Properties (11)
211
- PoissionDenoisePass.DefaultOptions = defaultPoissonBlurOptions;
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.PoissionDenoisePass = void 0;
13
+ const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
14
+ const postprocessing_1 = require("postprocessing");
15
+ const three_1 = require("three");
16
+ const basic_1 = require("../utils/shader/basic");
17
+ const sampleBlueNoise_1 = require("../utils/shader/sampleBlueNoise");
18
+ const poissionDenoise_1 = require("./shader/poissionDenoise");
19
+ const finalFragmentShader = poissionDenoise_1.poissionDenoise.replace("#include <sampleBlueNoise>", sampleBlueNoise_1.sampleBlueNoise);
20
+ const defaultPoissonBlurOptions = {
21
+ iterations: 1,
22
+ radius: 12,
23
+ rings: 11,
24
+ lumaPhi: 10,
25
+ depthPhi: 2,
26
+ normalPhi: 3.25,
27
+ samples: 16,
28
+ distance: 1,
29
+ normalTexture: null,
30
+ };
31
+ class PoissionDenoisePass extends postprocessing_1.Pass {
32
+ // #endregion Properties (11)
33
+ // #region Constructors (1)
34
+ constructor(camera, inputTexture, depthTexture, options = defaultPoissonBlurOptions) {
35
+ super("PoissionBlurPass");
36
+ this.index = 0;
37
+ this.iterations = defaultPoissonBlurOptions.iterations;
38
+ this.radius = 12;
39
+ this.rings = 11;
40
+ this.samples = 16;
41
+ if (PoissionDenoisePass.blueNoiseTexture === undefined) {
42
+ PoissionDenoisePass.loadBlueNoiseTexture().then(() => {
43
+ this.fullscreenMaterial.uniforms.blueNoiseTexture.value =
44
+ PoissionDenoisePass.blueNoiseTexture;
45
+ });
46
+ }
47
+ options = Object.assign(Object.assign({}, defaultPoissonBlurOptions), options);
48
+ this.inputTexture = inputTexture;
49
+ this.fullscreenMaterial = new three_1.ShaderMaterial({
50
+ fragmentShader: finalFragmentShader,
51
+ vertexShader: basic_1.basic,
52
+ uniforms: {
53
+ depthTexture: { value: null },
54
+ inputTexture: { value: null },
55
+ projectionMatrixInverse: { value: new three_1.Matrix4() },
56
+ cameraMatrixWorld: { value: new three_1.Matrix4() },
57
+ lumaPhi: { value: 5.0 },
58
+ depthPhi: { value: 5.0 },
59
+ normalPhi: { value: 5.0 },
60
+ distance: { value: 1.0 },
61
+ resolution: { value: new three_1.Vector2() },
62
+ blueNoiseTexture: { value: null },
63
+ index: { value: 0 },
64
+ blueNoiseRepeat: { value: new three_1.Vector2() },
65
+ },
66
+ });
67
+ const renderTargetOptions = {
68
+ type: three_1.HalfFloatType,
69
+ depthBuffer: false,
70
+ };
71
+ this.renderTargetA = new three_1.WebGLRenderTarget(1, 1, renderTargetOptions);
72
+ this.renderTargetB = new three_1.WebGLRenderTarget(1, 1, renderTargetOptions);
73
+ const { uniforms } = this.fullscreenMaterial;
74
+ uniforms["inputTexture"].value = this.inputTexture;
75
+ uniforms["depthTexture"].value = depthTexture;
76
+ uniforms["projectionMatrixInverse"].value =
77
+ camera.projectionMatrixInverse;
78
+ uniforms["cameraMatrixWorld"].value = camera.matrixWorld;
79
+ uniforms["depthPhi"].value = options.depthPhi;
80
+ uniforms["normalPhi"].value = options.normalPhi;
81
+ uniforms["distance"].value = options.distance;
82
+ if (options.normalTexture) {
83
+ uniforms["normalTexture"] = { value: options.normalTexture };
84
+ }
85
+ else {
86
+ this.fullscreenMaterial.defines.NORMAL_IN_RGB =
87
+ "";
88
+ }
89
+ // these properties need the shader to be recompiled
90
+ for (const prop of ["radius", "rings", "samples"]) {
91
+ Object.defineProperty(this, prop, {
92
+ get: () => options[prop],
93
+ set: (value) => {
94
+ options[prop] = value;
95
+ this.setSize(this.renderTargetA.width, this.renderTargetA.height);
96
+ },
97
+ });
98
+ }
99
+ }
100
+ static loadBlueNoiseTexture() {
101
+ return __awaiter(this, void 0, void 0, function* () {
102
+ const result = yield viewer_shared_services_1.HttpClient.instance.loadTexture("https://viewer.shapediver.com/v3/graphics/LDR_RGBA_0.png");
103
+ if (result && result.data && result.data.blob) {
104
+ const url = URL.createObjectURL(result.data.blob);
105
+ new three_1.TextureLoader().load(url, (texture) => {
106
+ URL.revokeObjectURL(url);
107
+ PoissionDenoisePass.blueNoiseTexture = texture;
108
+ PoissionDenoisePass.blueNoiseTexture.minFilter = three_1.NearestFilter;
109
+ PoissionDenoisePass.blueNoiseTexture.magFilter = three_1.NearestFilter;
110
+ PoissionDenoisePass.blueNoiseTexture.wrapS = three_1.RepeatWrapping;
111
+ PoissionDenoisePass.blueNoiseTexture.wrapT = three_1.RepeatWrapping;
112
+ PoissionDenoisePass.blueNoiseTexture.colorSpace = three_1.NoColorSpace;
113
+ PoissionDenoisePass.blueNoiseTexture.needsUpdate = true;
114
+ });
115
+ }
116
+ else if (!result) {
117
+ viewer_shared_services_1.Logger.instance.warn("The blue noise texture could not be loaded. This may result in a suboptimal denoising quality. Retrying in 1 second...");
118
+ // if there was an issue loading the texture
119
+ // set a timeout with 1 second to try again
120
+ setTimeout(() => {
121
+ this.loadBlueNoiseTexture();
122
+ }, 1000);
123
+ }
124
+ });
125
+ }
126
+ // #endregion Constructors (1)
127
+ // #region Public Getters And Setters (1)
128
+ get texture() {
129
+ return this.renderTargetB.texture;
130
+ }
131
+ // #endregion Public Getters And Setters (1)
132
+ // #region Public Methods (4)
133
+ generateDenoiseSamples(numSamples, numRings, r, texelSize) {
134
+ const angleStep = (2 * Math.PI * numRings) / numSamples;
135
+ const invNumSamples = 1.0 / numSamples;
136
+ const radiusStep = invNumSamples;
137
+ const samples = [];
138
+ let radius = invNumSamples;
139
+ let angle = 0;
140
+ for (let i = 0; i < numSamples; i++) {
141
+ const v = new three_1.Vector2(Math.cos(angle), Math.sin(angle))
142
+ .multiplyScalar(Math.pow(radius, 0.75))
143
+ .multiply(texelSize)
144
+ .multiplyScalar(r);
145
+ if (isNaN(v.x) || v.x === Infinity || v.x === -Infinity)
146
+ v.x = 0;
147
+ if (isNaN(v.y) || v.y === Infinity || v.y === -Infinity)
148
+ v.y = 0;
149
+ samples.push(v);
150
+ radius += radiusStep;
151
+ angle += angleStep;
152
+ }
153
+ return samples;
154
+ }
155
+ generatePoissonDiskConstant(poissonDisk) {
156
+ const samples = poissonDisk.length;
157
+ let glslCode = "const vec2 poissonDisk[samples] = vec2[samples](\n";
158
+ for (let i = 0; i < samples; i++) {
159
+ const sample = poissonDisk[i];
160
+ glslCode += ` vec2(${sample.x}, ${sample.y})`;
161
+ if (i < samples - 1) {
162
+ glslCode += ",";
163
+ }
164
+ glslCode += "\n";
165
+ }
166
+ glslCode += ");";
167
+ return glslCode;
168
+ }
169
+ render(renderer) {
170
+ this.fullscreenMaterial.uniforms.index.value = 0;
171
+ const noiseTexture = this.fullscreenMaterial
172
+ .uniforms.blueNoiseTexture.value;
173
+ if (noiseTexture !== undefined &&
174
+ noiseTexture !== null &&
175
+ noiseTexture instanceof three_1.Texture) {
176
+ const { width, height } = noiseTexture.source.data;
177
+ this.fullscreenMaterial.uniforms.blueNoiseRepeat.value.set(this.renderTargetA.width / width, this.renderTargetA.height / height);
178
+ }
179
+ for (let i = 0; i < 2 * this.iterations; i++) {
180
+ const horizontal = i % 2 === 0;
181
+ const inputRenderTarget = horizontal
182
+ ? this.renderTargetB
183
+ : this.renderTargetA;
184
+ this.fullscreenMaterial.uniforms["inputTexture"].value = i === 0 ? this.inputTexture : inputRenderTarget.texture;
185
+ const renderTarget = horizontal
186
+ ? this.renderTargetA
187
+ : this.renderTargetB;
188
+ renderer.setRenderTarget(renderTarget);
189
+ renderer.render(this.scene, this.camera);
190
+ this.fullscreenMaterial.uniforms.index.value =
191
+ (this.fullscreenMaterial.uniforms.index
192
+ .value +
193
+ 1) %
194
+ 4;
195
+ }
196
+ }
197
+ setSize(width, height) {
198
+ this.renderTargetA.setSize(width, height);
199
+ this.renderTargetB.setSize(width, height);
200
+ this.fullscreenMaterial.uniforms.resolution.value.set(width, height);
201
+ const poissonDisk = this.generateDenoiseSamples(this.samples, this.rings, this.radius, new three_1.Vector2(1 / width, 1 / height));
202
+ const sampleDefine = `const int samples = ${this.samples};\n`;
203
+ const poissonDiskConstant = this.generatePoissonDiskConstant(poissonDisk);
204
+ this.fullscreenMaterial.fragmentShader =
205
+ sampleDefine + poissonDiskConstant + "\n" + finalFragmentShader;
206
+ this.fullscreenMaterial.needsUpdate = true;
207
+ }
208
+ }
209
+ exports.PoissionDenoisePass = PoissionDenoisePass;
210
+ // #region Properties (11)
211
+ PoissionDenoisePass.DefaultOptions = defaultPoissonBlurOptions;
212
212
  //# sourceMappingURL=PoissionDenoisePass.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PoissionDenoisePass.js","sourceRoot":"","sources":["../../../../../src/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PoissionDenoisePass.js","sourceRoot":"","sources":["../../../../../src/managers/postprocessing/ao/poissionDenoise/PoissionDenoisePass.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare const poissionDenoise = "\nvarying vec2 vUv;\n\nuniform sampler2D inputTexture;\nuniform highp sampler2D depthTexture;\nuniform highp sampler2D normalTexture;\nuniform mat4 projectionMatrixInverse;\nuniform mat4 viewMatrixInverse;\nuniform mat4 cameraMatrixWorld;\nuniform float lumaPhi;\nuniform float depthPhi;\nuniform float normalPhi;\nuniform float distance;\nuniform sampler2D blueNoiseTexture;\nuniform vec2 blueNoiseRepeat;\nuniform int index;\nuniform vec2 resolution;\n\n#include <common>\n#include <sampleBlueNoise>\n\nvec3 computeWorldPosition(float depth, vec2 coord, bool useCameraMatrixWorld) {\n // Convert depth to normalized device coordinates (NDC)\n float z = depth * 2.0 - 1.0;\n vec4 clipSpacePosition = vec4(coord * 2.0 - 1.0, z, 1.0);\n\n // Transform to view space\n vec4 viewSpacePosition = projectionMatrixInverse * clipSpacePosition;\n\n // Perspective division\n viewSpacePosition /= viewSpacePosition.w;\n\n // Transform to world space using the selected method\n vec4 worldSpacePosition;\n if (useCameraMatrixWorld) {\n // Use cameraMatrixWorld directly\n worldSpacePosition = cameraMatrixWorld * viewSpacePosition;\n } else {\n // Use viewMatrixInverse\n worldSpacePosition = viewMatrixInverse * viewSpacePosition;\n }\n\n return worldSpacePosition.xyz;\n}\n\n#define luminance(a) dot(vec3(0.2125, 0.7154, 0.0721), a)\n\nvec3 getNormal(vec2 uv, vec4 texel) {\n#ifdef NORMAL_IN_RGB\n // in case the normal is stored in the RGB channels of the texture\n return texel.rgb;\n#else\n return normalize(textureLod(normalTexture, uv, 0.).xyz * 2.0 - 1.0);\n#endif\n}\n\nfloat distToPlane(const vec3 worldPos, const vec3 neighborWorldPos, const vec3 worldNormal) {\n vec3 toCurrent = worldPos - neighborWorldPos;\n float distToPlane = abs(dot(toCurrent, worldNormal));\n\n return distToPlane;\n}\n\nvoid main() {\n vec4 depthTexel = textureLod(depthTexture, vUv, 0.);\n vec4 texel = textureLod(inputTexture, vUv, 0.0);\n vec3 normal = getNormal(vUv, texel);\n\n if (depthTexel.r == 1.0 || dot(depthTexel.rgb, depthTexel.rgb) == 0.) {\n #ifdef NORMAL_IN_RGB\n gl_FragColor = vec4(normal, 1.0);\n #else\n gl_FragColor = vec4(1.0);\n #endif\n\n return;\n }\n\n #ifdef NORMAL_IN_RGB\n float inputTexel = texel.a;\n float center = texel.a;\n #else\n vec3 inputTexel = texel.rgb;\n vec3 center = texel.rgb;\n #endif\n\n float depth = depthTexel.x;\n vec3 worldPos = computeWorldPosition(depth, vUv, true);\n\n float totalWeight = 1.0;\n\n vec4 blueNoise = sampleBlueNoise(blueNoiseTexture, 0, blueNoiseRepeat, resolution);\n float angle = blueNoise[index];\n\n float s = sin(angle), c = cos(angle);\n\n mat2 rotationMatrix = mat2(c, -s, s, c);\n\n \n #ifdef NORMAL_IN_RGB\n float denoised = inputTexel;\n #else\n vec3 denoised = inputTexel;\n #endif\n\n for (int i = 0; i < samples; i++) {\n vec2 offset = rotationMatrix * poissonDisk[i];\n vec2 neighborUv = vUv + offset;\n\n vec4 neighborTexel = textureLod(inputTexture, neighborUv, 0.0);\n\n vec3 neighborNormal = getNormal(neighborUv, neighborTexel);\n #ifdef NORMAL_IN_RGB\n float neighborColor = neighborTexel.a;\n #else\n vec3 neighborColor = neighborTexel.rgb;\n #endif\n\n float sampleDepth = textureLod(depthTexture, neighborUv, 0.0).x;\n\n vec3 worldPosSample = computeWorldPosition(sampleDepth, neighborUv, true);\n float tangentPlaneDist = abs(dot(worldPos - worldPosSample, normal));\n\n if (sampleDepth < 1.0) {\n float normalDiff = dot(normal, neighborNormal);\n float normalSimilarity = pow(max(normalDiff, 0.), normalPhi);\n\n #ifdef NORMAL_IN_RGB\n float lumaDiff = abs(neighborColor - center);\n #else\n float lumaDiff = abs(luminance(neighborColor) - luminance(center));\n #endif\n float lumaSimilarity = max(1.0 - lumaDiff / lumaPhi, 0.0);\n\n float depthDiff = 1. - (distToPlane(worldPos, worldPosSample, normal) / distance);\n float depthSimilarity = max(depthDiff / depthPhi, 0.);\n\n float w = lumaSimilarity * depthSimilarity * normalSimilarity;\n\n denoised += w * neighborColor;\n totalWeight += w;\n }\n }\n\n if (totalWeight > 0.) denoised /= totalWeight;\n\n #ifdef NORMAL_IN_RGB\n gl_FragColor = vec4(normal, denoised);\n #else\n gl_FragColor = vec4(denoised, 1.);\n #endif\n}\n";
1
+ export declare const poissionDenoise = "\nvarying vec2 vUv;\n\nuniform sampler2D inputTexture;\nuniform highp sampler2D depthTexture;\nuniform highp sampler2D normalTexture;\nuniform mat4 projectionMatrixInverse;\nuniform mat4 viewMatrixInverse;\nuniform mat4 cameraMatrixWorld;\nuniform float lumaPhi;\nuniform float depthPhi;\nuniform float normalPhi;\nuniform float distance;\nuniform sampler2D blueNoiseTexture;\nuniform vec2 blueNoiseRepeat;\nuniform int index;\nuniform vec2 resolution;\n\n#include <common>\n#include <sampleBlueNoise>\n\nvec3 computeWorldPosition(float depth, vec2 coord, bool useCameraMatrixWorld) {\n // Convert depth to normalized device coordinates (NDC)\n float z = depth * 2.0 - 1.0;\n vec4 clipSpacePosition = vec4(coord * 2.0 - 1.0, z, 1.0);\n\n // Transform to view space\n vec4 viewSpacePosition = projectionMatrixInverse * clipSpacePosition;\n\n // Perspective division\n viewSpacePosition /= viewSpacePosition.w;\n\n // Transform to world space using the selected method\n vec4 worldSpacePosition;\n if (useCameraMatrixWorld) {\n // Use cameraMatrixWorld directly\n worldSpacePosition = cameraMatrixWorld * viewSpacePosition;\n } else {\n // Use viewMatrixInverse\n worldSpacePosition = viewMatrixInverse * viewSpacePosition;\n }\n\n return worldSpacePosition.xyz;\n}\n\n#define luminance(a) dot(vec3(0.2125, 0.7154, 0.0721), a)\n\nvec3 getNormal(vec2 uv, vec4 texel) {\n#ifdef NORMAL_IN_RGB\n // in case the normal is stored in the RGB channels of the texture\n return texel.rgb;\n#else\n return normalize(textureLod(normalTexture, uv, 0.).xyz * 2.0 - 1.0);\n#endif\n}\n\nfloat distToPlane(const vec3 worldPos, const vec3 neighborWorldPos, const vec3 worldNormal) {\n vec3 toCurrent = worldPos - neighborWorldPos;\n float distToPlane = abs(dot(toCurrent, worldNormal));\n\n return distToPlane;\n}\n\nvoid main() {\n vec4 depthTexel = textureLod(depthTexture, vUv, 0.);\n vec4 texel = textureLod(inputTexture, vUv, 0.0);\n vec3 normal = getNormal(vUv, texel);\n\n if (depthTexel.r == 1.0 || dot(depthTexel.rgb, depthTexel.rgb) == 0.) {\n #ifdef NORMAL_IN_RGB\n gl_FragColor = vec4(normal, 1.0);\n #else\n gl_FragColor = vec4(1.0);\n #endif\n\n return;\n }\n\n #ifdef NORMAL_IN_RGB\n float inputTexel = texel.a;\n float center = texel.a;\n #else\n vec3 inputTexel = texel.rgb;\n vec3 center = texel.rgb;\n #endif\n\n float depth = depthTexel.x;\n vec3 worldPos = computeWorldPosition(depth, vUv, true);\n\n float totalWeight = 1.0;\n\n vec4 blueNoise = sampleBlueNoise(blueNoiseTexture, 0, blueNoiseRepeat, resolution);\n float angle = blueNoise[index];\n\n float s = sin(angle), c = cos(angle);\n\n mat2 rotationMatrix = mat2(c, -s, s, c);\n\n \n #ifdef NORMAL_IN_RGB\n float denoised = inputTexel;\n #else\n vec3 denoised = inputTexel;\n #endif\n\n for (int i = 0; i < samples; i++) {\n vec2 offset = rotationMatrix * poissonDisk[i];\n vec2 neighborUv = vUv + offset;\n\n vec4 neighborTexel = textureLod(inputTexture, neighborUv, 0.0);\n\n vec3 neighborNormal = getNormal(neighborUv, neighborTexel);\n #ifdef NORMAL_IN_RGB\n float neighborColor = neighborTexel.a;\n #else\n vec3 neighborColor = neighborTexel.rgb;\n #endif\n\n float sampleDepth = textureLod(depthTexture, neighborUv, 0.0).x;\n\n vec3 worldPosSample = computeWorldPosition(sampleDepth, neighborUv, true);\n float tangentPlaneDist = abs(dot(worldPos - worldPosSample, normal));\n\n if (sampleDepth < 1.0) {\n float normalDiff = dot(normal, neighborNormal);\n float normalSimilarity = pow(max(normalDiff, 0.), normalPhi);\n\n #ifdef NORMAL_IN_RGB\n float lumaDiff = abs(neighborColor - center);\n #else\n float lumaDiff = abs(luminance(neighborColor) - luminance(center));\n #endif\n float lumaSimilarity = max(1.0 - lumaDiff / lumaPhi, 0.0);\n\n float depthDiff = 1. - (distToPlane(worldPos, worldPosSample, normal) / distance);\n float depthSimilarity = max(depthDiff / depthPhi, 0.);\n\n float w = lumaSimilarity * depthSimilarity * normalSimilarity;\n\n denoised += w * neighborColor;\n totalWeight += w;\n }\n }\n\n if (totalWeight > 0.) denoised /= totalWeight;\n\n #ifdef NORMAL_IN_RGB\n gl_FragColor = vec4(normal, denoised);\n #else\n gl_FragColor = vec4(denoised, 1.);\n #endif\n}\n";
2
2
  //# sourceMappingURL=poissionDenoise.d.ts.map
@@ -1,6 +1,6 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.poissionDenoise = void 0;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.poissionDenoise = void 0;
4
4
  exports.poissionDenoise = `
5
5
  varying vec2 vUv;
6
6
 
@@ -153,5 +153,5 @@ void main() {
153
153
  gl_FragColor = vec4(denoised, 1.);
154
154
  #endif
155
155
  }
156
- `;
156
+ `;
157
157
  //# sourceMappingURL=poissionDenoise.js.map
@@ -1,15 +1,15 @@
1
- import { EffectComposer } from "postprocessing";
2
- import { Camera, Scene, Vector3 } from "three";
3
- import { AOEffect } from "../ao/AOEffect";
4
- declare class SSAOEffect extends AOEffect {
5
- spp: number;
6
- constructor(composer: EffectComposer, camera: Camera, scene: Scene, options?: {
7
- [key: string]: unknown;
8
- });
9
- getPointsOnSphere(n: number): Vector3[];
10
- makeOptionsReactive(options: {
11
- [key: string]: unknown;
12
- }): void;
13
- }
14
- export { SSAOEffect };
1
+ import { EffectComposer } from "postprocessing";
2
+ import { Camera, Scene, Vector3 } from "three";
3
+ import { AOEffect } from "../ao/AOEffect";
4
+ declare class SSAOEffect extends AOEffect {
5
+ spp: number;
6
+ constructor(composer: EffectComposer, camera: Camera, scene: Scene, options?: {
7
+ [key: string]: unknown;
8
+ });
9
+ getPointsOnSphere(n: number): Vector3[];
10
+ makeOptionsReactive(options: {
11
+ [key: string]: unknown;
12
+ }): void;
13
+ }
14
+ export { SSAOEffect };
15
15
  //# sourceMappingURL=SSAOEffect.d.ts.map