angular-three-soba 1.0.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/esm2020/controls/lib/orbit-controls/orbit-controls.mjs +3 -3
  2. package/esm2020/loaders/index.mjs +4 -1
  3. package/esm2020/loaders/lib/loader/loader.mjs +133 -0
  4. package/esm2020/loaders/lib/progress/progress.mjs +39 -0
  5. package/esm2020/loaders/lib/texture-loader/texture-loader.mjs +19 -0
  6. package/esm2020/misc/angular-three-soba-misc.mjs +5 -0
  7. package/esm2020/misc/index.mjs +2 -0
  8. package/esm2020/misc/lib/bake-shadows/bake-shadows.mjs +25 -0
  9. package/esm2020/performance/angular-three-soba-performance.mjs +5 -0
  10. package/esm2020/performance/index.mjs +5 -0
  11. package/esm2020/performance/lib/adaptive/adaptive-dpr.mjs +46 -0
  12. package/esm2020/performance/lib/adaptive/adaptive-events.mjs +36 -0
  13. package/esm2020/performance/lib/detailed/detailed.mjs +50 -0
  14. package/esm2020/performance/lib/stats/stats.mjs +63 -0
  15. package/esm2020/shaders/angular-three-soba-shaders.mjs +5 -0
  16. package/esm2020/shaders/index.mjs +2 -0
  17. package/esm2020/shaders/lib/shader-material/shader-material.mjs +34 -0
  18. package/esm2020/staging/angular-three-soba-staging.mjs +5 -0
  19. package/esm2020/staging/index.mjs +13 -0
  20. package/esm2020/staging/lib/accumulative-shadows/accumulative-shadows.mjs +276 -0
  21. package/esm2020/staging/lib/accumulative-shadows/progressive-light-map.mjs +109 -0
  22. package/esm2020/staging/lib/accumulative-shadows/randomized-lights.mjs +196 -0
  23. package/esm2020/staging/lib/bounds/bounds.mjs +283 -0
  24. package/esm2020/staging/lib/center/center.mjs +142 -0
  25. package/esm2020/staging/lib/contact-shadows/contact-shadows.mjs +227 -0
  26. package/esm2020/staging/lib/environment/assets.mjs +13 -0
  27. package/esm2020/staging/lib/environment/environment-cube.mjs +40 -0
  28. package/esm2020/staging/lib/environment/environment-ground.mjs +66 -0
  29. package/esm2020/staging/lib/environment/environment-inputs.mjs +86 -0
  30. package/esm2020/staging/lib/environment/environment-map.mjs +38 -0
  31. package/esm2020/staging/lib/environment/environment-portal.mjs +110 -0
  32. package/esm2020/staging/lib/environment/environment.mjs +163 -0
  33. package/esm2020/staging/lib/environment/utils.mjs +70 -0
  34. package/esm2020/staging/lib/float/float.mjs +76 -0
  35. package/esm2020/staging/lib/sky/sky.mjs +111 -0
  36. package/esm2020/staging/lib/sparkles/sparkles.mjs +209 -0
  37. package/esm2020/staging/lib/stage/stage.mjs +369 -0
  38. package/esm2020/staging/lib/stars/stars.mjs +171 -0
  39. package/fesm2015/angular-three-soba-controls.mjs +3 -3
  40. package/fesm2015/angular-three-soba-loaders.mjs +187 -3
  41. package/fesm2015/angular-three-soba-loaders.mjs.map +1 -1
  42. package/fesm2015/angular-three-soba-misc.mjs +32 -0
  43. package/fesm2015/angular-three-soba-misc.mjs.map +1 -0
  44. package/fesm2015/angular-three-soba-performance.mjs +191 -0
  45. package/fesm2015/angular-three-soba-performance.mjs.map +1 -0
  46. package/fesm2015/angular-three-soba-shaders.mjs +38 -0
  47. package/fesm2015/angular-three-soba-shaders.mjs.map +1 -0
  48. package/fesm2015/angular-three-soba-staging.mjs +2647 -0
  49. package/fesm2015/angular-three-soba-staging.mjs.map +1 -0
  50. package/fesm2020/angular-three-soba-controls.mjs +3 -3
  51. package/fesm2020/angular-three-soba-loaders.mjs +186 -3
  52. package/fesm2020/angular-three-soba-loaders.mjs.map +1 -1
  53. package/fesm2020/angular-three-soba-misc.mjs +32 -0
  54. package/fesm2020/angular-three-soba-misc.mjs.map +1 -0
  55. package/fesm2020/angular-three-soba-performance.mjs +191 -0
  56. package/fesm2020/angular-three-soba-performance.mjs.map +1 -0
  57. package/fesm2020/angular-three-soba-shaders.mjs +41 -0
  58. package/fesm2020/angular-three-soba-shaders.mjs.map +1 -0
  59. package/fesm2020/angular-three-soba-staging.mjs +2654 -0
  60. package/fesm2020/angular-three-soba-staging.mjs.map +1 -0
  61. package/loaders/index.d.ts +3 -0
  62. package/loaders/lib/loader/loader.d.ts +26 -0
  63. package/loaders/lib/progress/progress.d.ts +16 -0
  64. package/loaders/lib/texture-loader/texture-loader.d.ts +5 -0
  65. package/misc/README.md +3 -0
  66. package/misc/index.d.ts +1 -0
  67. package/misc/lib/bake-shadows/bake-shadows.d.ts +9 -0
  68. package/package.json +37 -2
  69. package/performance/README.md +3 -0
  70. package/performance/index.d.ts +4 -0
  71. package/performance/lib/adaptive/adaptive-dpr.d.ts +11 -0
  72. package/performance/lib/adaptive/adaptive-events.d.ts +10 -0
  73. package/performance/lib/detailed/detailed.d.ts +12 -0
  74. package/performance/lib/stats/stats.d.ts +14 -0
  75. package/plugin/package.json +1 -1
  76. package/plugin/src/generators/init/init.js +13 -17
  77. package/plugin/src/generators/init/init.js.map +1 -1
  78. package/shaders/README.md +3 -0
  79. package/shaders/index.d.ts +1 -0
  80. package/shaders/lib/shader-material/shader-material.d.ts +6 -0
  81. package/staging/README.md +3 -0
  82. package/staging/index.d.ts +12 -0
  83. package/staging/lib/accumulative-shadows/accumulative-shadows.d.ts +64 -0
  84. package/staging/lib/accumulative-shadows/progressive-light-map.d.ts +34 -0
  85. package/staging/lib/accumulative-shadows/randomized-lights.d.ts +42 -0
  86. package/staging/lib/bounds/bounds.d.ts +48 -0
  87. package/staging/lib/center/center.d.ts +40 -0
  88. package/staging/lib/contact-shadows/contact-shadows.d.ts +29 -0
  89. package/staging/lib/environment/assets.d.ts +13 -0
  90. package/staging/lib/environment/environment-cube.d.ts +11 -0
  91. package/staging/lib/environment/environment-ground.d.ts +9 -0
  92. package/staging/lib/environment/environment-inputs.d.ts +28 -0
  93. package/staging/lib/environment/environment-map.d.ts +10 -0
  94. package/staging/lib/environment/environment-portal.d.ts +15 -0
  95. package/staging/lib/environment/environment.d.ts +12 -0
  96. package/staging/lib/environment/utils.d.ts +8 -0
  97. package/staging/lib/float/float.d.ts +16 -0
  98. package/staging/lib/sky/sky.d.ts +21 -0
  99. package/staging/lib/sparkles/sparkles.d.ts +29 -0
  100. package/staging/lib/stage/stage.d.ts +87 -0
  101. package/staging/lib/stars/stars.d.ts +20 -0
@@ -0,0 +1,369 @@
1
+ import { NgIf } from '@angular/common';
2
+ import { ChangeDetectorRef, Component, CUSTOM_ELEMENTS_SCHEMA, Directive, EventEmitter, inject, Input, Output, } from '@angular/core';
3
+ import { extend, NgtArgs, NgtRxStore } from 'angular-three';
4
+ import { map } from 'rxjs';
5
+ import { AmbientLight, Group, PointLight, SpotLight, Vector2 } from 'three';
6
+ import { NgtsAccumulativeShadows } from '../accumulative-shadows/accumulative-shadows';
7
+ import { NgtsRandomizedLights } from '../accumulative-shadows/randomized-lights';
8
+ import { NgtsBounds, NGTS_BOUNDS_API } from '../bounds/bounds';
9
+ import { NgtsCenter } from '../center/center';
10
+ import { NgtsContactShadows } from '../contact-shadows/contact-shadows';
11
+ import { NgtsEnvironment } from '../environment/environment';
12
+ import * as i0 from "@angular/core";
13
+ const presets = {
14
+ rembrandt: {
15
+ main: [1, 2, 1],
16
+ fill: [-2, -0.5, -2],
17
+ },
18
+ portrait: {
19
+ main: [-1, 2, 0.5],
20
+ fill: [-1, 0.5, -1.5],
21
+ },
22
+ upfront: {
23
+ main: [0, 2, 1],
24
+ fill: [-1, 0.5, -1.5],
25
+ },
26
+ soft: {
27
+ main: [-2, 4, 4],
28
+ fill: [-1, 0.5, -1.5],
29
+ },
30
+ };
31
+ export class NgtsStageRefit {
32
+ constructor() {
33
+ this.boundsApi = inject(NGTS_BOUNDS_API);
34
+ this.radius = 0;
35
+ this.adjustCamera = true;
36
+ }
37
+ ngOnChanges() {
38
+ if (this.adjustCamera) {
39
+ this.boundsApi.refresh().clip().fit();
40
+ }
41
+ }
42
+ }
43
+ NgtsStageRefit.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsStageRefit, deps: [], target: i0.ɵɵFactoryTarget.Directive });
44
+ NgtsStageRefit.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.3", type: NgtsStageRefit, isStandalone: true, selector: "ngts-stage-refit", inputs: { radius: "radius", adjustCamera: "adjustCamera" }, usesOnChanges: true, ngImport: i0 });
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsStageRefit, decorators: [{
46
+ type: Directive,
47
+ args: [{
48
+ selector: 'ngts-stage-refit',
49
+ standalone: true,
50
+ }]
51
+ }], propDecorators: { radius: [{
52
+ type: Input
53
+ }], adjustCamera: [{
54
+ type: Input
55
+ }] } });
56
+ extend({ AmbientLight, SpotLight, Vector2, PointLight, Group });
57
+ export class NgtsStage extends NgtRxStore {
58
+ constructor() {
59
+ super(...arguments);
60
+ this.cdr = inject(ChangeDetectorRef);
61
+ this.Number = Number;
62
+ this.centered = new EventEmitter();
63
+ }
64
+ set preset(preset) {
65
+ this.set({ preset });
66
+ }
67
+ set shadows(shadows) {
68
+ this.set({ shadows });
69
+ }
70
+ set adjustCamera(adjustCamera) {
71
+ this.set({ adjustCamera });
72
+ }
73
+ set environment(environment) {
74
+ this.set({ environment });
75
+ }
76
+ set intensity(intensity) {
77
+ this.set({ intensity });
78
+ }
79
+ set center(center) {
80
+ this.set({ center });
81
+ }
82
+ initialize() {
83
+ super.initialize();
84
+ this.set({
85
+ adjustCamera: true,
86
+ intensity: 0.5,
87
+ shadows: 'contact',
88
+ environment: 'city',
89
+ preset: 'rembrandt',
90
+ radius: 0,
91
+ width: 0,
92
+ height: 0,
93
+ depth: 0,
94
+ });
95
+ this.connect('config', this.select('preset').pipe(map((preset) => (typeof preset === 'string' ? presets[preset] : preset))));
96
+ this.connect('shadowsInfo', this.select('shadows').pipe(map((shadows) => {
97
+ return {
98
+ contactShadow: shadows === 'contact' || shadows?.type === 'contact',
99
+ accumulativeShadow: shadows === 'accumulative' || shadows?.type === 'accumulative',
100
+ shadowBias: shadows?.bias ?? -0.0001,
101
+ normalBias: shadows?.normalBias ?? 0,
102
+ shadowSize: shadows?.size ?? 1024,
103
+ shadowOffset: shadows?.offset ?? 0,
104
+ ...(typeof shadows === 'string' ? {} : shadows || {}),
105
+ };
106
+ })));
107
+ this.connect('spotLightPosition', this.select(['config', 'radius'], ({ config, radius }) => [
108
+ config.main[0] * radius,
109
+ config.main[1] * radius,
110
+ config.main[2] * radius,
111
+ ]));
112
+ this.connect('pointLightPosition', this.select(['config', 'radius'], ({ config, radius }) => [
113
+ config.fill[0] * radius,
114
+ config.fill[1] * radius,
115
+ config.fill[2] * radius,
116
+ ]));
117
+ this.connect('environmentInfo', this.select('environment').pipe(map((environment) => {
118
+ if (!environment)
119
+ return null;
120
+ if (typeof environment === 'string')
121
+ return { preset: environment };
122
+ return environment;
123
+ })));
124
+ }
125
+ onCentered(props) {
126
+ const { boundingSphere, width, height, depth } = props;
127
+ this.set({ radius: boundingSphere.radius, width, height, depth });
128
+ this.cdr.detectChanges();
129
+ if (this.centered.observed)
130
+ this.centered.emit(props);
131
+ }
132
+ }
133
+ NgtsStage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsStage, deps: null, target: i0.ɵɵFactoryTarget.Component });
134
+ NgtsStage.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.3", type: NgtsStage, isStandalone: true, selector: "ngts-stage", inputs: { preset: "preset", shadows: "shadows", adjustCamera: "adjustCamera", environment: "environment", intensity: "intensity", center: "center" }, outputs: { centered: "centered" }, usesInheritance: true, ngImport: i0, template: `
135
+ <ngt-ambient-light [intensity]="get('intensity')! / 3" />
136
+ <ngt-spot-light
137
+ [penumbra]="1"
138
+ [position]="get('spotLightPosition')"
139
+ [intensity]="get('intensity')! * 2"
140
+ [castShadow]="!!get('shadows')"
141
+ >
142
+ <ngt-value [rawValue]="get('shadowsInfo').shadowBias" attach="shadow.bias" />
143
+ <ngt-value [rawValue]="get('shadowsInfo').normalBias" attach="shadow.normalBias" />
144
+ <ngt-vector2
145
+ *args="[get('shadowsInfo').shadowSize, get('shadowsInfo').shadowSize]"
146
+ attach="shadow.mapSize"
147
+ />
148
+ </ngt-spot-light>
149
+ <ngt-point-light [position]="get('pointLightPosition')" [intensity]="get('intensity')" />
150
+
151
+ <ngts-bounds
152
+ [fit]="!!get('adjustCamera')"
153
+ [clip]="!!get('adjustCamera')"
154
+ [margin]="Number(get('adjustCamera'))"
155
+ [observe]="true"
156
+ >
157
+ <ngts-stage-refit [radius]="get('radius')" [adjustCamera]="!!get('adjustCamera')" />
158
+ <ngts-center
159
+ [position]="[0, get('shadowsInfo').shadowOffset / 2, 0]"
160
+ [top]="!!get('center')?.top"
161
+ [right]="!!get('center')?.right"
162
+ [bottom]="!!get('center')?.bottom"
163
+ [left]="!!get('center')?.left"
164
+ [front]="!!get('center')?.front"
165
+ [back]="!!get('center')?.back"
166
+ [disableX]="!!get('center')?.disableX"
167
+ [disableY]="!!get('center')?.disableY"
168
+ [disableZ]="!!get('center')?.disableZ"
169
+ [precise]="!!get('center')?.precise"
170
+ (centered)="onCentered($event)"
171
+ >
172
+ <ng-content />
173
+ </ngts-center>
174
+ </ngts-bounds>
175
+ <ngt-group [position]="[0, -get('height') / 2 - get('shadowsInfo').shadowOffset / 2, 0]">
176
+ <ngts-contact-shadows
177
+ *ngIf="get('shadowsInfo').contactShadow"
178
+ [scale]="get('radius') * 4"
179
+ [far]="get('radius')"
180
+ [blur]="2"
181
+ [opacity]="get('shadowsInfo').opacity"
182
+ [width]="get('shadowsInfo').width"
183
+ [height]="get('shadowsInfo').height"
184
+ [smooth]="get('shadowsInfo').smooth"
185
+ [resolution]="get('shadowsInfo').resolution"
186
+ [frames]="get('shadowsInfo').frames"
187
+ [scale]="get('shadowsInfo').scale"
188
+ [color]="get('shadowsInfo').color"
189
+ [depthWrite]="get('shadowsInfo').depthWrite"
190
+ [renderOrder]="get('shadowsInfo').renderOrder"
191
+ />
192
+ <ngts-accumulative-shadows
193
+ *ngIf="get('shadowsInfo').accumulativeShadow"
194
+ [temporal]="true"
195
+ [frames]="100"
196
+ [alphaTest]="0.9"
197
+ [toneMapped]="true"
198
+ [scale]="get('radius') * 4"
199
+ [opacity]="get('shadowsInfo').opacity"
200
+ [alphaTest]="get('shadowsInfo').alphaTest"
201
+ [color]="get('shadowsInfo').color"
202
+ [colorBlend]="get('shadowsInfo').colorBlend"
203
+ [resolution]="get('shadowsInfo').resolution"
204
+ >
205
+ <ngts-randomized-lights
206
+ [amount]="get('shadowsInfo').amount ?? 8"
207
+ [radius]="get('shadowsInfo').radius ?? get('radius')"
208
+ [ambient]="get('shadowsInfo').ambient ?? 0.5"
209
+ [intensity]="get('shadowsInfo').intensity ?? 1"
210
+ [position]="get('spotLightPosition')"
211
+ [size]="get('radius') * 4"
212
+ [bias]="-get('shadowsInfo').shadowBias"
213
+ [mapSize]="get('shadowsInfo').shadowSize"
214
+ />
215
+ </ngts-accumulative-shadows>
216
+ </ngt-group>
217
+ <ngts-environment
218
+ *ngIf="get('environmentInfo')"
219
+ [frames]="get('environmentInfo').frames"
220
+ [near]="get('environmentInfo').near"
221
+ [far]="get('environmentInfo').far"
222
+ [resolution]="get('environmentInfo').resolution"
223
+ [background]="get('environmentInfo').background"
224
+ [blur]="get('environmentInfo').blur"
225
+ [map]="get('environmentInfo').map"
226
+ [files]="get('environmentInfo').files"
227
+ [path]="get('environmentInfo').path"
228
+ [preset]="get('environmentInfo').preset"
229
+ [scene]="get('environmentInfo').scene"
230
+ [extensions]="get('environmentInfo').extensions"
231
+ [ground]="get('environmentInfo').ground"
232
+ [encoding]="get('environmentInfo').encoding"
233
+ />
234
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }, { kind: "component", type: NgtsBounds, selector: "ngts-bounds", inputs: ["boundsRef", "damping", "fit", "clip", "observe", "margin", "eps"], outputs: ["fitted"] }, { kind: "directive", type: NgtsStageRefit, selector: "ngts-stage-refit", inputs: ["radius", "adjustCamera"] }, { kind: "component", type: NgtsCenter, selector: "ngts-center", inputs: ["centerRef", "top", "right", "bottom", "left", "front", "back", "disableX", "disableY", "disableZ", "disabled", "precise"], outputs: ["centered"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NgtsContactShadows, selector: "ngts-contact-shadows", inputs: ["contactShadowsRef", "opacity", "width", "height", "blur", "far", "smooth", "resolution", "frames", "scale", "color", "depthWrite", "renderOrder"] }, { kind: "component", type: NgtsAccumulativeShadows, selector: "ngts-accumulative-shadows", inputs: ["frames", "blend", "limit", "scale", "temporal", "opacity", "alphaTest", "color", "colorBlend", "resolution", "toneMapped"] }, { kind: "component", type: NgtsRandomizedLights, selector: "ngts-randomized-lights", inputs: ["lightsRef", "frames", "position", "radius", "amount", "intensity", "ambient", "castShadow", "bias", "mapSize", "size", "near", "far"] }, { kind: "component", type: NgtsEnvironment, selector: "ngts-environment" }] });
235
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsStage, decorators: [{
236
+ type: Component,
237
+ args: [{
238
+ selector: 'ngts-stage',
239
+ standalone: true,
240
+ template: `
241
+ <ngt-ambient-light [intensity]="get('intensity')! / 3" />
242
+ <ngt-spot-light
243
+ [penumbra]="1"
244
+ [position]="get('spotLightPosition')"
245
+ [intensity]="get('intensity')! * 2"
246
+ [castShadow]="!!get('shadows')"
247
+ >
248
+ <ngt-value [rawValue]="get('shadowsInfo').shadowBias" attach="shadow.bias" />
249
+ <ngt-value [rawValue]="get('shadowsInfo').normalBias" attach="shadow.normalBias" />
250
+ <ngt-vector2
251
+ *args="[get('shadowsInfo').shadowSize, get('shadowsInfo').shadowSize]"
252
+ attach="shadow.mapSize"
253
+ />
254
+ </ngt-spot-light>
255
+ <ngt-point-light [position]="get('pointLightPosition')" [intensity]="get('intensity')" />
256
+
257
+ <ngts-bounds
258
+ [fit]="!!get('adjustCamera')"
259
+ [clip]="!!get('adjustCamera')"
260
+ [margin]="Number(get('adjustCamera'))"
261
+ [observe]="true"
262
+ >
263
+ <ngts-stage-refit [radius]="get('radius')" [adjustCamera]="!!get('adjustCamera')" />
264
+ <ngts-center
265
+ [position]="[0, get('shadowsInfo').shadowOffset / 2, 0]"
266
+ [top]="!!get('center')?.top"
267
+ [right]="!!get('center')?.right"
268
+ [bottom]="!!get('center')?.bottom"
269
+ [left]="!!get('center')?.left"
270
+ [front]="!!get('center')?.front"
271
+ [back]="!!get('center')?.back"
272
+ [disableX]="!!get('center')?.disableX"
273
+ [disableY]="!!get('center')?.disableY"
274
+ [disableZ]="!!get('center')?.disableZ"
275
+ [precise]="!!get('center')?.precise"
276
+ (centered)="onCentered($event)"
277
+ >
278
+ <ng-content />
279
+ </ngts-center>
280
+ </ngts-bounds>
281
+ <ngt-group [position]="[0, -get('height') / 2 - get('shadowsInfo').shadowOffset / 2, 0]">
282
+ <ngts-contact-shadows
283
+ *ngIf="get('shadowsInfo').contactShadow"
284
+ [scale]="get('radius') * 4"
285
+ [far]="get('radius')"
286
+ [blur]="2"
287
+ [opacity]="get('shadowsInfo').opacity"
288
+ [width]="get('shadowsInfo').width"
289
+ [height]="get('shadowsInfo').height"
290
+ [smooth]="get('shadowsInfo').smooth"
291
+ [resolution]="get('shadowsInfo').resolution"
292
+ [frames]="get('shadowsInfo').frames"
293
+ [scale]="get('shadowsInfo').scale"
294
+ [color]="get('shadowsInfo').color"
295
+ [depthWrite]="get('shadowsInfo').depthWrite"
296
+ [renderOrder]="get('shadowsInfo').renderOrder"
297
+ />
298
+ <ngts-accumulative-shadows
299
+ *ngIf="get('shadowsInfo').accumulativeShadow"
300
+ [temporal]="true"
301
+ [frames]="100"
302
+ [alphaTest]="0.9"
303
+ [toneMapped]="true"
304
+ [scale]="get('radius') * 4"
305
+ [opacity]="get('shadowsInfo').opacity"
306
+ [alphaTest]="get('shadowsInfo').alphaTest"
307
+ [color]="get('shadowsInfo').color"
308
+ [colorBlend]="get('shadowsInfo').colorBlend"
309
+ [resolution]="get('shadowsInfo').resolution"
310
+ >
311
+ <ngts-randomized-lights
312
+ [amount]="get('shadowsInfo').amount ?? 8"
313
+ [radius]="get('shadowsInfo').radius ?? get('radius')"
314
+ [ambient]="get('shadowsInfo').ambient ?? 0.5"
315
+ [intensity]="get('shadowsInfo').intensity ?? 1"
316
+ [position]="get('spotLightPosition')"
317
+ [size]="get('radius') * 4"
318
+ [bias]="-get('shadowsInfo').shadowBias"
319
+ [mapSize]="get('shadowsInfo').shadowSize"
320
+ />
321
+ </ngts-accumulative-shadows>
322
+ </ngt-group>
323
+ <ngts-environment
324
+ *ngIf="get('environmentInfo')"
325
+ [frames]="get('environmentInfo').frames"
326
+ [near]="get('environmentInfo').near"
327
+ [far]="get('environmentInfo').far"
328
+ [resolution]="get('environmentInfo').resolution"
329
+ [background]="get('environmentInfo').background"
330
+ [blur]="get('environmentInfo').blur"
331
+ [map]="get('environmentInfo').map"
332
+ [files]="get('environmentInfo').files"
333
+ [path]="get('environmentInfo').path"
334
+ [preset]="get('environmentInfo').preset"
335
+ [scene]="get('environmentInfo').scene"
336
+ [extensions]="get('environmentInfo').extensions"
337
+ [ground]="get('environmentInfo').ground"
338
+ [encoding]="get('environmentInfo').encoding"
339
+ />
340
+ `,
341
+ imports: [
342
+ NgtArgs,
343
+ NgtsBounds,
344
+ NgtsStageRefit,
345
+ NgtsCenter,
346
+ NgIf,
347
+ NgtsContactShadows,
348
+ NgtsAccumulativeShadows,
349
+ NgtsRandomizedLights,
350
+ NgtsEnvironment,
351
+ ],
352
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
353
+ }]
354
+ }], propDecorators: { preset: [{
355
+ type: Input
356
+ }], shadows: [{
357
+ type: Input
358
+ }], adjustCamera: [{
359
+ type: Input
360
+ }], environment: [{
361
+ type: Input
362
+ }], intensity: [{
363
+ type: Input
364
+ }], center: [{
365
+ type: Input
366
+ }], centered: [{
367
+ type: Output
368
+ }] } });
369
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9zdGFnaW5nL3NyYy9saWIvc3RhZ2Uvc3RhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULHNCQUFzQixFQUN0QixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNCLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzVFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXhFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFHN0QsTUFBTSxPQUFPLEdBQUc7SUFDWixTQUFTLEVBQUU7UUFDUCxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNmLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENB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O2dCQUlPLE9BQU87c0JBQW5CLEtBQUs7Z0JBSU8sWUFBWTtzQkFBeEIsS0FBSztnQkFJTyxXQUFXO3NCQUF2QixLQUFLO2dCQUlPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBSU8sTUFBTTtzQkFBbEIsS0FBSztnQkFJSSxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZXh0ZW5kLCBOZ3RBcmdzLCBOZ3RSeFN0b3JlIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFtYmllbnRMaWdodCwgR3JvdXAsIFBvaW50TGlnaHQsIFNwb3RMaWdodCwgVmVjdG9yMiB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IE5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzIH0gZnJvbSAnLi4vYWNjdW11bGF0aXZlLXNoYWRvd3MvYWNjdW11bGF0aXZlLXNoYWRvd3MnO1xuaW1wb3J0IHsgTmd0c1JhbmRvbWl6ZWRMaWdodHMgfSBmcm9tICcuLi9hY2N1bXVsYXRpdmUtc2hhZG93cy9yYW5kb21pemVkLWxpZ2h0cyc7XG5pbXBvcnQgeyBOZ3RzQm91bmRzLCBOR1RTX0JPVU5EU19BUEkgfSBmcm9tICcuLi9ib3VuZHMvYm91bmRzJztcbmltcG9ydCB7IE5ndHNDZW50ZXIgfSBmcm9tICcuLi9jZW50ZXIvY2VudGVyJztcbmltcG9ydCB7IE5ndHNDb250YWN0U2hhZG93cyB9IGZyb20gJy4uL2NvbnRhY3Qtc2hhZG93cy9jb250YWN0LXNoYWRvd3MnO1xuaW1wb3J0IHsgTmd0c0Vudmlyb25tZW50UHJlc2V0c1R5cGUgfSBmcm9tICcuLi9lbnZpcm9ubWVudC9hc3NldHMnO1xuaW1wb3J0IHsgTmd0c0Vudmlyb25tZW50IH0gZnJvbSAnLi4vZW52aXJvbm1lbnQvZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgTmd0c0Vudmlyb25tZW50SW5wdXRzIH0gZnJvbSAnLi4vZW52aXJvbm1lbnQvZW52aXJvbm1lbnQtaW5wdXRzJztcblxuY29uc3QgcHJlc2V0cyA9IHtcbiAgICByZW1icmFuZHQ6IHtcbiAgICAgICAgbWFpbjogWzEsIDIsIDFdLFxuICAgICAgICBmaWxsOiBbLTIsIC0wLjUsIC0yXSxcbiAgICB9LFxuICAgIHBvcnRyYWl0OiB7XG4gICAgICAgIG1haW46IFstMSwgMiwgMC41XSxcbiAgICAgICAgZmlsbDogWy0xLCAwLjUsIC0xLjVdLFxuICAgIH0sXG4gICAgdXBmcm9udDoge1xuICAgICAgICBtYWluOiBbMCwgMiwgMV0sXG4gICAgICAgIGZpbGw6IFstMSwgMC41LCAtMS41XSxcbiAgICB9LFxuICAgIHNvZnQ6IHtcbiAgICAgICAgbWFpbjogWy0yLCA0LCA0XSxcbiAgICAgICAgZmlsbDogWy0xLCAwLjUsIC0xLjVdLFxuICAgIH0sXG59O1xuXG50eXBlIE5ndHNTdGFnZVNoYWRvd3MgPSBQYXJ0aWFsPE5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzPiAmXG4gICAgUGFydGlhbDxOZ3RzUmFuZG9taXplZExpZ2h0cz4gJlxuICAgIFBhcnRpYWw8Tmd0c0NvbnRhY3RTaGFkb3dzPiAmIHtcbiAgICAgICAgdHlwZTogJ2NvbnRhY3QnIHwgJ2FjY3VtdWxhdGl2ZSc7XG4gICAgICAgIC8qKiBTaGFkb3cgcGxhbmUgb2Zmc2V0LCBkZWZhdWx0OiAwICovXG4gICAgICAgIG9mZnNldD86IG51bWJlcjtcbiAgICAgICAgLyoqIFNoYWRvdyBiaWFzLCBkZWZhdWx0OiAtMC4wMDAxICovXG4gICAgICAgIGJpYXM/OiBudW1iZXI7XG4gICAgICAgIC8qKiBTaGFkb3cgbm9ybWFsIGJpYXMsIGRlZmF1bHQ6IDAgKi9cbiAgICAgICAgbm9ybWFsQmlhcz86IG51bWJlcjtcbiAgICAgICAgLyoqIFNoYWRvdyBtYXAgc2l6ZSwgZGVmYXVsdDogMTAyNCAqL1xuICAgICAgICBzaXplPzogbnVtYmVyO1xuICAgIH07XG5cbnR5cGUgTmd0c1N0YWdlUHJvcHMgPSB7XG4gICAgLyoqIExpZ2h0aW5nIHNldHVwLCBkZWZhdWx0OiBcInJlbWJyYW5kdFwiICovXG4gICAgcHJlc2V0PzpcbiAgICAgICAgfCAncmVtYnJhbmR0J1xuICAgICAgICB8ICdwb3J0cmFpdCdcbiAgICAgICAgfCAndXBmcm9udCdcbiAgICAgICAgfCAnc29mdCdcbiAgICAgICAgfCB7IG1haW46IFt4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyXTsgZmlsbDogW3g6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXJdIH07XG4gICAgLyoqIENvbnRyb2xzIHRoZSBncm91bmQgc2hhZG93cywgZGVmYXVsdDogXCJjb250YWN0XCIgKi9cbiAgICBzaGFkb3dzPzogYm9vbGVhbiB8ICdjb250YWN0JyB8ICdhY2N1bXVsYXRpdmUnIHwgTmd0c1N0YWdlU2hhZG93cztcbiAgICAvKiogT3B0aW9uYWxseSB3cmFwcyBhbmQgdGhlcmVieSBjZW50ZXJzIHRoZSBtb2RlbHMgdXNpbmcgPEJvdW5kcz4sIGNhbiBhbHNvIGJlIGEgbWFyZ2luLCBkZWZhdWx0OiB0cnVlICovXG4gICAgYWRqdXN0Q2FtZXJhPzogYm9vbGVhbiB8IG51bWJlcjtcbiAgICAvKiogVGhlIGRlZmF1bHQgZW52aXJvbm1lbnQsIGRlZmF1bHQ6IFwiY2l0eVwiICovXG4gICAgZW52aXJvbm1lbnQ/OiBOZ3RzRW52aXJvbm1lbnRQcmVzZXRzVHlwZSB8IFBhcnRpYWw8Tmd0c0Vudmlyb25tZW50SW5wdXRzPjtcbiAgICAvKiogVGhlIGxpZ2h0aW5nIGludGVuc2l0eSwgZGVmYXVsdDogMC41ICovXG4gICAgaW50ZW5zaXR5PzogbnVtYmVyO1xuICAgIC8qKiBUbyBhZGp1c3QgY2VudGVyaW5nLCBkZWZhdWx0OiB1bmRlZmluZWQgKi9cbiAgICBjZW50ZXI/OiBQYXJ0aWFsPE5ndHNDZW50ZXI+O1xufTtcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICduZ3RzLXN0YWdlLXJlZml0JyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzU3RhZ2VSZWZpdCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBib3VuZHNBcGkgPSBpbmplY3QoTkdUU19CT1VORFNfQVBJKTtcblxuICAgIEBJbnB1dCgpIHJhZGl1cyA9IDA7XG4gICAgQElucHV0KCkgYWRqdXN0Q2FtZXJhID0gdHJ1ZTtcblxuICAgIG5nT25DaGFuZ2VzKCkge1xuICAgICAgICBpZiAodGhpcy5hZGp1c3RDYW1lcmEpIHtcbiAgICAgICAgICAgIHRoaXMuYm91bmRzQXBpLnJlZnJlc2goKS5jbGlwKCkuZml0KCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4dGVuZCh7IEFtYmllbnRMaWdodCwgU3BvdExpZ2h0LCBWZWN0b3IyLCBQb2ludExpZ2h0LCBHcm91cCB9KTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RzLXN0YWdlJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3QtYW1iaWVudC1saWdodCBbaW50ZW5zaXR5XT1cImdldCgnaW50ZW5zaXR5JykhIC8gM1wiIC8+XG4gICAgICAgIDxuZ3Qtc3BvdC1saWdodFxuICAgICAgICAgICAgW3BlbnVtYnJhXT1cIjFcIlxuICAgICAgICAgICAgW3Bvc2l0aW9uXT1cImdldCgnc3BvdExpZ2h0UG9zaXRpb24nKVwiXG4gICAgICAgICAgICBbaW50ZW5zaXR5XT1cImdldCgnaW50ZW5zaXR5JykhICogMlwiXG4gICAgICAgICAgICBbY2FzdFNoYWRvd109XCIhIWdldCgnc2hhZG93cycpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG5ndC12YWx1ZSBbcmF3VmFsdWVdPVwiZ2V0KCdzaGFkb3dzSW5mbycpLnNoYWRvd0JpYXNcIiBhdHRhY2g9XCJzaGFkb3cuYmlhc1wiIC8+XG4gICAgICAgICAgICA8bmd0LXZhbHVlIFtyYXdWYWx1ZV09XCJnZXQoJ3NoYWRvd3NJbmZvJykubm9ybWFsQmlhc1wiIGF0dGFjaD1cInNoYWRvdy5ub3JtYWxCaWFzXCIgLz5cbiAgICAgICAgICAgIDxuZ3QtdmVjdG9yMlxuICAgICAgICAgICAgICAgICphcmdzPVwiW2dldCgnc2hhZG93c0luZm8nKS5zaGFkb3dTaXplLCBnZXQoJ3NoYWRvd3NJbmZvJykuc2hhZG93U2l6ZV1cIlxuICAgICAgICAgICAgICAgIGF0dGFjaD1cInNoYWRvdy5tYXBTaXplXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvbmd0LXNwb3QtbGlnaHQ+XG4gICAgICAgIDxuZ3QtcG9pbnQtbGlnaHQgW3Bvc2l0aW9uXT1cImdldCgncG9pbnRMaWdodFBvc2l0aW9uJylcIiBbaW50ZW5zaXR5XT1cImdldCgnaW50ZW5zaXR5JylcIiAvPlxuXG4gICAgICAgIDxuZ3RzLWJvdW5kc1xuICAgICAgICAgICAgW2ZpdF09XCIhIWdldCgnYWRqdXN0Q2FtZXJhJylcIlxuICAgICAgICAgICAgW2NsaXBdPVwiISFnZXQoJ2FkanVzdENhbWVyYScpXCJcbiAgICAgICAgICAgIFttYXJnaW5dPVwiTnVtYmVyKGdldCgnYWRqdXN0Q2FtZXJhJykpXCJcbiAgICAgICAgICAgIFtvYnNlcnZlXT1cInRydWVcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmd0cy1zdGFnZS1yZWZpdCBbcmFkaXVzXT1cImdldCgncmFkaXVzJylcIiBbYWRqdXN0Q2FtZXJhXT1cIiEhZ2V0KCdhZGp1c3RDYW1lcmEnKVwiIC8+XG4gICAgICAgICAgICA8bmd0cy1jZW50ZXJcbiAgICAgICAgICAgICAgICBbcG9zaXRpb25dPVwiWzAsIGdldCgnc2hhZG93c0luZm8nKS5zaGFkb3dPZmZzZXQgLyAyLCAwXVwiXG4gICAgICAgICAgICAgICAgW3RvcF09XCIhIWdldCgnY2VudGVyJyk/LnRvcFwiXG4gICAgICAgICAgICAgICAgW3JpZ2h0XT1cIiEhZ2V0KCdjZW50ZXInKT8ucmlnaHRcIlxuICAgICAgICAgICAgICAgIFtib3R0b21dPVwiISFnZXQoJ2NlbnRlcicpPy5ib3R0b21cIlxuICAgICAgICAgICAgICAgIFtsZWZ0XT1cIiEhZ2V0KCdjZW50ZXInKT8ubGVmdFwiXG4gICAgICAgICAgICAgICAgW2Zyb250XT1cIiEhZ2V0KCdjZW50ZXInKT8uZnJvbnRcIlxuICAgICAgICAgICAgICAgIFtiYWNrXT1cIiEhZ2V0KCdjZW50ZXInKT8uYmFja1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVYXT1cIiEhZ2V0KCdjZW50ZXInKT8uZGlzYWJsZVhcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlWV09XCIhIWdldCgnY2VudGVyJyk/LmRpc2FibGVZXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZVpdPVwiISFnZXQoJ2NlbnRlcicpPy5kaXNhYmxlWlwiXG4gICAgICAgICAgICAgICAgW3ByZWNpc2VdPVwiISFnZXQoJ2NlbnRlcicpPy5wcmVjaXNlXCJcbiAgICAgICAgICAgICAgICAoY2VudGVyZWQpPVwib25DZW50ZXJlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGVudCAvPlxuICAgICAgICAgICAgPC9uZ3RzLWNlbnRlcj5cbiAgICAgICAgPC9uZ3RzLWJvdW5kcz5cbiAgICAgICAgPG5ndC1ncm91cCBbcG9zaXRpb25dPVwiWzAsIC1nZXQoJ2hlaWdodCcpIC8gMiAtIGdldCgnc2hhZG93c0luZm8nKS5zaGFkb3dPZmZzZXQgLyAyLCAwXVwiPlxuICAgICAgICAgICAgPG5ndHMtY29udGFjdC1zaGFkb3dzXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJnZXQoJ3NoYWRvd3NJbmZvJykuY29udGFjdFNoYWRvd1wiXG4gICAgICAgICAgICAgICAgW3NjYWxlXT1cImdldCgncmFkaXVzJykgKiA0XCJcbiAgICAgICAgICAgICAgICBbZmFyXT1cImdldCgncmFkaXVzJylcIlxuICAgICAgICAgICAgICAgIFtibHVyXT1cIjJcIlxuICAgICAgICAgICAgICAgIFtvcGFjaXR5XT1cImdldCgnc2hhZG93c0luZm8nKS5vcGFjaXR5XCJcbiAgICAgICAgICAgICAgICBbd2lkdGhdPVwiZ2V0KCdzaGFkb3dzSW5mbycpLndpZHRoXCJcbiAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cImdldCgnc2hhZG93c0luZm8nKS5oZWlnaHRcIlxuICAgICAgICAgICAgICAgIFtzbW9vdGhdPVwiZ2V0KCdzaGFkb3dzSW5mbycpLnNtb290aFwiXG4gICAgICAgICAgICAgICAgW3Jlc29sdXRpb25dPVwiZ2V0KCdzaGFkb3dzSW5mbycpLnJlc29sdXRpb25cIlxuICAgICAgICAgICAgICAgIFtmcmFtZXNdPVwiZ2V0KCdzaGFkb3dzSW5mbycpLmZyYW1lc1wiXG4gICAgICAgICAgICAgICAgW3NjYWxlXT1cImdldCgnc2hhZG93c0luZm8nKS5zY2FsZVwiXG4gICAgICAgICAgICAgICAgW2NvbG9yXT1cImdldCgnc2hhZG93c0luZm8nKS5jb2xvclwiXG4gICAgICAgICAgICAgICAgW2RlcHRoV3JpdGVdPVwiZ2V0KCdzaGFkb3dzSW5mbycpLmRlcHRoV3JpdGVcIlxuICAgICAgICAgICAgICAgIFtyZW5kZXJPcmRlcl09XCJnZXQoJ3NoYWRvd3NJbmZvJykucmVuZGVyT3JkZXJcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxuZ3RzLWFjY3VtdWxhdGl2ZS1zaGFkb3dzXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJnZXQoJ3NoYWRvd3NJbmZvJykuYWNjdW11bGF0aXZlU2hhZG93XCJcbiAgICAgICAgICAgICAgICBbdGVtcG9yYWxdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2ZyYW1lc109XCIxMDBcIlxuICAgICAgICAgICAgICAgIFthbHBoYVRlc3RdPVwiMC45XCJcbiAgICAgICAgICAgICAgICBbdG9uZU1hcHBlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbc2NhbGVdPVwiZ2V0KCdyYWRpdXMnKSAqIDRcIlxuICAgICAgICAgICAgICAgIFtvcGFjaXR5XT1cImdldCgnc2hhZG93c0luZm8nKS5vcGFjaXR5XCJcbiAgICAgICAgICAgICAgICBbYWxwaGFUZXN0XT1cImdldCgnc2hhZG93c0luZm8nKS5hbHBoYVRlc3RcIlxuICAgICAgICAgICAgICAgIFtjb2xvcl09XCJnZXQoJ3NoYWRvd3NJbmZvJykuY29sb3JcIlxuICAgICAgICAgICAgICAgIFtjb2xvckJsZW5kXT1cImdldCgnc2hhZG93c0luZm8nKS5jb2xvckJsZW5kXCJcbiAgICAgICAgICAgICAgICBbcmVzb2x1dGlvbl09XCJnZXQoJ3NoYWRvd3NJbmZvJykucmVzb2x1dGlvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5ndHMtcmFuZG9taXplZC1saWdodHNcbiAgICAgICAgICAgICAgICAgICAgW2Ftb3VudF09XCJnZXQoJ3NoYWRvd3NJbmZvJykuYW1vdW50ID8/IDhcIlxuICAgICAgICAgICAgICAgICAgICBbcmFkaXVzXT1cImdldCgnc2hhZG93c0luZm8nKS5yYWRpdXMgPz8gZ2V0KCdyYWRpdXMnKVwiXG4gICAgICAgICAgICAgICAgICAgIFthbWJpZW50XT1cImdldCgnc2hhZG93c0luZm8nKS5hbWJpZW50ID8/IDAuNVwiXG4gICAgICAgICAgICAgICAgICAgIFtpbnRlbnNpdHldPVwiZ2V0KCdzaGFkb3dzSW5mbycpLmludGVuc2l0eSA/PyAxXCJcbiAgICAgICAgICAgICAgICAgICAgW3Bvc2l0aW9uXT1cImdldCgnc3BvdExpZ2h0UG9zaXRpb24nKVwiXG4gICAgICAgICAgICAgICAgICAgIFtzaXplXT1cImdldCgncmFkaXVzJykgKiA0XCJcbiAgICAgICAgICAgICAgICAgICAgW2JpYXNdPVwiLWdldCgnc2hhZG93c0luZm8nKS5zaGFkb3dCaWFzXCJcbiAgICAgICAgICAgICAgICAgICAgW21hcFNpemVdPVwiZ2V0KCdzaGFkb3dzSW5mbycpLnNoYWRvd1NpemVcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L25ndHMtYWNjdW11bGF0aXZlLXNoYWRvd3M+XG4gICAgICAgIDwvbmd0LWdyb3VwPlxuICAgICAgICA8bmd0cy1lbnZpcm9ubWVudFxuICAgICAgICAgICAgKm5nSWY9XCJnZXQoJ2Vudmlyb25tZW50SW5mbycpXCJcbiAgICAgICAgICAgIFtmcmFtZXNdPVwiZ2V0KCdlbnZpcm9ubWVudEluZm8nKS5mcmFtZXNcIlxuICAgICAgICAgICAgW25lYXJdPVwiZ2V0KCdlbnZpcm9ubWVudEluZm8nKS5uZWFyXCJcbiAgICAgICAgICAgIFtmYXJdPVwiZ2V0KCdlbnZpcm9ubWVudEluZm8nKS5mYXJcIlxuICAgICAgICAgICAgW3Jlc29sdXRpb25dPVwiZ2V0KCdlbnZpcm9ubWVudEluZm8nKS5yZXNvbHV0aW9uXCJcbiAgICAgICAgICAgIFtiYWNrZ3JvdW5kXT1cImdldCgnZW52aXJvbm1lbnRJbmZvJykuYmFja2dyb3VuZFwiXG4gICAgICAgICAgICBbYmx1cl09XCJnZXQoJ2Vudmlyb25tZW50SW5mbycpLmJsdXJcIlxuICAgICAgICAgICAgW21hcF09XCJnZXQoJ2Vudmlyb25tZW50SW5mbycpLm1hcFwiXG4gICAgICAgICAgICBbZmlsZXNdPVwiZ2V0KCdlbnZpcm9ubWVudEluZm8nKS5maWxlc1wiXG4gICAgICAgICAgICBbcGF0aF09XCJnZXQoJ2Vudmlyb25tZW50SW5mbycpLnBhdGhcIlxuICAgICAgICAgICAgW3ByZXNldF09XCJnZXQoJ2Vudmlyb25tZW50SW5mbycpLnByZXNldFwiXG4gICAgICAgICAgICBbc2NlbmVdPVwiZ2V0KCdlbnZpcm9ubWVudEluZm8nKS5zY2VuZVwiXG4gICAgICAgICAgICBbZXh0ZW5zaW9uc109XCJnZXQoJ2Vudmlyb25tZW50SW5mbycpLmV4dGVuc2lvbnNcIlxuICAgICAgICAgICAgW2dyb3VuZF09XCJnZXQoJ2Vudmlyb25tZW50SW5mbycpLmdyb3VuZFwiXG4gICAgICAgICAgICBbZW5jb2RpbmddPVwiZ2V0KCdlbnZpcm9ubWVudEluZm8nKS5lbmNvZGluZ1wiXG4gICAgICAgIC8+XG4gICAgYCxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5ndEFyZ3MsXG4gICAgICAgIE5ndHNCb3VuZHMsXG4gICAgICAgIE5ndHNTdGFnZVJlZml0LFxuICAgICAgICBOZ3RzQ2VudGVyLFxuICAgICAgICBOZ0lmLFxuICAgICAgICBOZ3RzQ29udGFjdFNoYWRvd3MsXG4gICAgICAgIE5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzLFxuICAgICAgICBOZ3RzUmFuZG9taXplZExpZ2h0cyxcbiAgICAgICAgTmd0c0Vudmlyb25tZW50LFxuICAgIF0sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzU3RhZ2UgZXh0ZW5kcyBOZ3RSeFN0b3JlPE5ndHNTdGFnZVByb3BzPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIHJlYWRvbmx5IE51bWJlciA9IE51bWJlcjtcblxuICAgIEBJbnB1dCgpIHNldCBwcmVzZXQocHJlc2V0OiBOZ3RzU3RhZ2VQcm9wc1sncHJlc2V0J10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBwcmVzZXQgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHNoYWRvd3Moc2hhZG93czogTmd0c1N0YWdlUHJvcHNbJ3NoYWRvd3MnXSkge1xuICAgICAgICB0aGlzLnNldCh7IHNoYWRvd3MgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGFkanVzdENhbWVyYShhZGp1c3RDYW1lcmE6IE5ndHNTdGFnZVByb3BzWydhZGp1c3RDYW1lcmEnXSkge1xuICAgICAgICB0aGlzLnNldCh7IGFkanVzdENhbWVyYSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IE5ndHNTdGFnZVByb3BzWydlbnZpcm9ubWVudCddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZW52aXJvbm1lbnQgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGludGVuc2l0eShpbnRlbnNpdHk6IE5ndHNTdGFnZVByb3BzWydpbnRlbnNpdHknXSkge1xuICAgICAgICB0aGlzLnNldCh7IGludGVuc2l0eSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgY2VudGVyKGNlbnRlcjogTmd0c1N0YWdlUHJvcHNbJ2NlbnRlciddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgY2VudGVyIH0pO1xuICAgIH1cblxuICAgIEBPdXRwdXQoKSBjZW50ZXJlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKSBhcyBOZ3RzQ2VudGVyWydjZW50ZXJlZCddO1xuXG4gICAgb3ZlcnJpZGUgaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuICAgICAgICB0aGlzLnNldCh7XG4gICAgICAgICAgICBhZGp1c3RDYW1lcmE6IHRydWUsXG4gICAgICAgICAgICBpbnRlbnNpdHk6IDAuNSxcbiAgICAgICAgICAgIHNoYWRvd3M6ICdjb250YWN0JyxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiAnY2l0eScsXG4gICAgICAgICAgICBwcmVzZXQ6ICdyZW1icmFuZHQnLFxuXG4gICAgICAgICAgICByYWRpdXM6IDAsXG4gICAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgICAgIGRlcHRoOiAwLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNvbm5lY3QoXG4gICAgICAgICAgICAnY29uZmlnJyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0KCdwcmVzZXQnKS5waXBlKG1hcCgocHJlc2V0KSA9PiAodHlwZW9mIHByZXNldCA9PT0gJ3N0cmluZycgPyBwcmVzZXRzW3ByZXNldF0gOiBwcmVzZXQpKSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmNvbm5lY3QoXG4gICAgICAgICAgICAnc2hhZG93c0luZm8nLFxuICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ3NoYWRvd3MnKS5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoc2hhZG93cykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFjdFNoYWRvdzogc2hhZG93cyA9PT0gJ2NvbnRhY3QnIHx8IChzaGFkb3dzIGFzIE5ndHNTdGFnZVNoYWRvd3MpPy50eXBlID09PSAnY29udGFjdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRpdmVTaGFkb3c6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93cyA9PT0gJ2FjY3VtdWxhdGl2ZScgfHwgKHNoYWRvd3MgYXMgTmd0c1N0YWdlU2hhZG93cyk/LnR5cGUgPT09ICdhY2N1bXVsYXRpdmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93QmlhczogKHNoYWRvd3MgYXMgTmd0c1N0YWdlU2hhZG93cyk/LmJpYXMgPz8gLTAuMDAwMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbEJpYXM6IChzaGFkb3dzIGFzIE5ndHNTdGFnZVNoYWRvd3MpPy5ub3JtYWxCaWFzID8/IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dTaXplOiAoc2hhZG93cyBhcyBOZ3RzU3RhZ2VTaGFkb3dzKT8uc2l6ZSA/PyAxMDI0LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93T2Zmc2V0OiAoc2hhZG93cyBhcyBOZ3RzU3RhZ2VTaGFkb3dzKT8ub2Zmc2V0ID8/IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi4odHlwZW9mIHNoYWRvd3MgPT09ICdzdHJpbmcnID8ge30gOiAoc2hhZG93cyBhcyBOZ3RzU3RhZ2VTaGFkb3dzKSB8fCB7fSksXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmNvbm5lY3QoXG4gICAgICAgICAgICAnc3BvdExpZ2h0UG9zaXRpb24nLFxuICAgICAgICAgICAgdGhpcy5zZWxlY3QoWydjb25maWcnLCAncmFkaXVzJ10sICh7IGNvbmZpZywgcmFkaXVzIH0pID0+IFtcbiAgICAgICAgICAgICAgICBjb25maWcubWFpblswXSAqIHJhZGl1cyxcbiAgICAgICAgICAgICAgICBjb25maWcubWFpblsxXSAqIHJhZGl1cyxcbiAgICAgICAgICAgICAgICBjb25maWcubWFpblsyXSAqIHJhZGl1cyxcbiAgICAgICAgICAgIF0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5jb25uZWN0KFxuICAgICAgICAgICAgJ3BvaW50TGlnaHRQb3NpdGlvbicsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdChbJ2NvbmZpZycsICdyYWRpdXMnXSwgKHsgY29uZmlnLCByYWRpdXMgfSkgPT4gW1xuICAgICAgICAgICAgICAgIGNvbmZpZy5maWxsWzBdICogcmFkaXVzLFxuICAgICAgICAgICAgICAgIGNvbmZpZy5maWxsWzFdICogcmFkaXVzLFxuICAgICAgICAgICAgICAgIGNvbmZpZy5maWxsWzJdICogcmFkaXVzLFxuICAgICAgICAgICAgXSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmNvbm5lY3QoXG4gICAgICAgICAgICAnZW52aXJvbm1lbnRJbmZvJyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0KCdlbnZpcm9ubWVudCcpLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChlbnZpcm9ubWVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWVudmlyb25tZW50KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlbnZpcm9ubWVudCA9PT0gJ3N0cmluZycpIHJldHVybiB7IHByZXNldDogZW52aXJvbm1lbnQgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVudmlyb25tZW50O1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgb25DZW50ZXJlZChwcm9wczoge1xuICAgICAgICAvKiogVGhlIG5leHQgcGFyZW50IGFib3ZlIDxDZW50ZXI+ICovXG4gICAgICAgIHBhcmVudDogVEhSRUUuT2JqZWN0M0Q7XG4gICAgICAgIC8qKiBUaGUgb3V0bW9zdCBjb250YWluZXIgZ3JvdXAgb2YgdGhlIDxDZW50ZXI+IGNvbXBvbmVudCAqL1xuICAgICAgICBjb250YWluZXI6IFRIUkVFLk9iamVjdDNEO1xuICAgICAgICB3aWR0aDogbnVtYmVyO1xuICAgICAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICAgICAgZGVwdGg6IG51bWJlcjtcbiAgICAgICAgYm91bmRpbmdCb3g6IFRIUkVFLkJveDM7XG4gICAgICAgIGJvdW5kaW5nU3BoZXJlOiBUSFJFRS5TcGhlcmU7XG4gICAgICAgIGNlbnRlcjogVEhSRUUuVmVjdG9yMztcbiAgICAgICAgdmVydGljYWxBbGlnbm1lbnQ6IG51bWJlcjtcbiAgICAgICAgaG9yaXpvbnRhbEFsaWdubWVudDogbnVtYmVyO1xuICAgICAgICBkZXB0aEFsaWdubWVudDogbnVtYmVyO1xuICAgIH0pIHtcbiAgICAgICAgY29uc3QgeyBib3VuZGluZ1NwaGVyZSwgd2lkdGgsIGhlaWdodCwgZGVwdGggfSA9IHByb3BzO1xuICAgICAgICB0aGlzLnNldCh7IHJhZGl1czogYm91bmRpbmdTcGhlcmUucmFkaXVzLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCB9KTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICBpZiAodGhpcy5jZW50ZXJlZC5vYnNlcnZlZCkgdGhpcy5jZW50ZXJlZC5lbWl0KHByb3BzKTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,171 @@
1
+ import { Component, CUSTOM_ELEMENTS_SCHEMA, Input } from '@angular/core';
2
+ import { extend, injectBeforeRender, injectNgtRef, NgtArgs, NgtRxStore } from 'angular-three';
3
+ import { shaderMaterial } from 'angular-three-soba/shaders';
4
+ import { AdditiveBlending, BufferAttribute, BufferGeometry, Color, Points, Spherical, Vector3 } from 'three';
5
+ import * as i0 from "@angular/core";
6
+ const StarFieldMaterial = shaderMaterial({
7
+ time: 0.0,
8
+ fade: 0.0,
9
+ },
10
+ // language=GLSL
11
+ `
12
+ uniform float time;
13
+ attribute float size;
14
+ varying vec3 vColor;
15
+ void main() {
16
+ vColor = color;
17
+ vec4 mvPosition = modelViewMatrix * vec4(position, 0.5);
18
+ gl_PointSize = size * (30.0 / -mvPosition.z) * (3.0 + sin(time + 100.0));
19
+ gl_Position = projectionMatrix * mvPosition;
20
+ }
21
+ `,
22
+ // language=GLSL
23
+ `
24
+ uniform sampler2D pointTexture;
25
+ uniform float fade;
26
+ varying vec3 vColor;
27
+ void main() {
28
+ float opacity = 1.0;
29
+ if (fade == 1.0) {
30
+ float d = distance(gl_PointCoord, vec2(0.5, 0.5));
31
+ opacity = 1.0 / (1.0 + exp(16.0 * (d - 0.25)));
32
+ }
33
+ gl_FragColor = vec4(vColor, opacity);
34
+
35
+ #include <tonemapping_fragment>
36
+ #include <encodings_fragment>
37
+ }
38
+ `);
39
+ extend({ Points, BufferGeometry, BufferAttribute });
40
+ const genStar = (r) => {
41
+ return new Vector3().setFromSpherical(new Spherical(r, Math.acos(1 - Math.random() * 2), Math.random() * 2 * Math.PI));
42
+ };
43
+ export class NgtsStars extends NgtRxStore {
44
+ set radius(radius) {
45
+ this.set({ radius });
46
+ }
47
+ set depth(depth) {
48
+ this.set({ depth });
49
+ }
50
+ set count(count) {
51
+ this.set({ count });
52
+ }
53
+ set factor(factor) {
54
+ this.set({ factor });
55
+ }
56
+ set saturation(saturation) {
57
+ this.set({ saturation });
58
+ }
59
+ set fade(fade) {
60
+ this.set({ fade });
61
+ }
62
+ set speed(speed) {
63
+ this.set({ speed });
64
+ }
65
+ initialize() {
66
+ super.initialize();
67
+ this.set({
68
+ radius: 100,
69
+ depth: 50,
70
+ count: 5000,
71
+ saturation: 0,
72
+ factor: 4,
73
+ fade: false,
74
+ speed: 1,
75
+ });
76
+ this.connect('bufferAttributes', this.select(['count', 'depth', 'factor', 'radius', 'saturation'], ({ count, depth, factor, radius, saturation }) => {
77
+ const positions = [];
78
+ const colors = [];
79
+ const sizes = Array.from({ length: count }, () => (0.5 + 0.5 * Math.random()) * factor);
80
+ const color = new Color();
81
+ let r = radius + depth;
82
+ const increment = depth / count;
83
+ for (let i = 0; i < count; i++) {
84
+ r -= increment * Math.random();
85
+ positions.push(...genStar(r).toArray());
86
+ color.setHSL(i / count, saturation, 0.9);
87
+ colors.push(color.r, color.g, color.b);
88
+ }
89
+ return {
90
+ positions: new Float32Array(positions),
91
+ colors: new Float32Array(colors),
92
+ sizes: new Float32Array(sizes),
93
+ };
94
+ }));
95
+ }
96
+ constructor() {
97
+ super();
98
+ this.AdditiveBlending = AdditiveBlending;
99
+ this.material = new StarFieldMaterial();
100
+ this.starsRef = injectNgtRef();
101
+ injectBeforeRender(this.onBeforeRender.bind(this));
102
+ }
103
+ onBeforeRender({ clock }) {
104
+ this.material.uniforms['time'].value = clock.getElapsedTime() * this.get('speed');
105
+ }
106
+ }
107
+ NgtsStars.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsStars, deps: [], target: i0.ɵɵFactoryTarget.Component });
108
+ NgtsStars.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.3", type: NgtsStars, isStandalone: true, selector: "ngts-stars", inputs: { starsRef: "starsRef", radius: "radius", depth: "depth", count: "count", factor: "factor", saturation: "saturation", fade: "fade", speed: "speed" }, usesInheritance: true, ngImport: i0, template: `
109
+ <ngt-points [ref]="starsRef">
110
+ <ngt-buffer-geometry>
111
+ <ngt-buffer-attribute attach="attributes.position" *args="[get('bufferAttributes').positions, 3]" />
112
+ <ngt-buffer-attribute attach="attributes.color" *args="[get('bufferAttributes').colors, 3]" />
113
+ <ngt-buffer-attribute attach="attributes.size" *args="[get('bufferAttributes').sizes, 1]" />
114
+ </ngt-buffer-geometry>
115
+ <ngt-primitive
116
+ *args="[material]"
117
+ attach="material"
118
+ [blending]="AdditiveBlending"
119
+ [depthWrite]="false"
120
+ [transparent]="true"
121
+ [vertexColors]="true"
122
+ >
123
+ <ngt-value attach="uniforms.fade.value" [rawValue]="get('fade')" />
124
+ </ngt-primitive>
125
+ </ngt-points>
126
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] });
127
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsStars, decorators: [{
128
+ type: Component,
129
+ args: [{
130
+ selector: 'ngts-stars',
131
+ standalone: true,
132
+ template: `
133
+ <ngt-points [ref]="starsRef">
134
+ <ngt-buffer-geometry>
135
+ <ngt-buffer-attribute attach="attributes.position" *args="[get('bufferAttributes').positions, 3]" />
136
+ <ngt-buffer-attribute attach="attributes.color" *args="[get('bufferAttributes').colors, 3]" />
137
+ <ngt-buffer-attribute attach="attributes.size" *args="[get('bufferAttributes').sizes, 1]" />
138
+ </ngt-buffer-geometry>
139
+ <ngt-primitive
140
+ *args="[material]"
141
+ attach="material"
142
+ [blending]="AdditiveBlending"
143
+ [depthWrite]="false"
144
+ [transparent]="true"
145
+ [vertexColors]="true"
146
+ >
147
+ <ngt-value attach="uniforms.fade.value" [rawValue]="get('fade')" />
148
+ </ngt-primitive>
149
+ </ngt-points>
150
+ `,
151
+ imports: [NgtArgs],
152
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
153
+ }]
154
+ }], ctorParameters: function () { return []; }, propDecorators: { starsRef: [{
155
+ type: Input
156
+ }], radius: [{
157
+ type: Input
158
+ }], depth: [{
159
+ type: Input
160
+ }], count: [{
161
+ type: Input
162
+ }], factor: [{
163
+ type: Input
164
+ }], saturation: [{
165
+ type: Input
166
+ }], fade: [{
167
+ type: Input
168
+ }], speed: [{
169
+ type: Input
170
+ }] } });
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9zdGFnaW5nL3NyYy9saWIvc3RhcnMvc3RhcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFrQixVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQzs7QUFFN0csTUFBTSxpQkFBaUIsR0FBRyxjQUFjLENBQ3BDO0lBQ0ksSUFBSSxFQUFFLEdBQUc7SUFDVCxJQUFJLEVBQUUsR0FBRztDQUNaO0FBQ0QsZ0JBQWdCO0FBQ2hCOzs7Ozs7Ozs7O0dBVUQ7QUFDQyxnQkFBZ0I7QUFDaEI7Ozs7Ozs7Ozs7Ozs7OztHQWVELENBQ0YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztBQUVwRCxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQVMsRUFBRSxFQUFFO0lBQzFCLE9BQU8sSUFBSSxPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FDakMsSUFBSSxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFF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bEIsS0FBSztnQkFJTyxVQUFVO3NCQUF0QixLQUFLO2dCQUlPLElBQUk7c0JBQWhCLEtBQUs7Z0JBSU8sS0FBSztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGV4dGVuZCwgaW5qZWN0QmVmb3JlUmVuZGVyLCBpbmplY3ROZ3RSZWYsIE5ndEFyZ3MsIE5ndFJlbmRlclN0YXRlLCBOZ3RSeFN0b3JlIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBzaGFkZXJNYXRlcmlhbCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtc29iYS9zaGFkZXJzJztcbmltcG9ydCB7IEFkZGl0aXZlQmxlbmRpbmcsIEJ1ZmZlckF0dHJpYnV0ZSwgQnVmZmVyR2VvbWV0cnksIENvbG9yLCBQb2ludHMsIFNwaGVyaWNhbCwgVmVjdG9yMyB9IGZyb20gJ3RocmVlJztcblxuY29uc3QgU3RhckZpZWxkTWF0ZXJpYWwgPSBzaGFkZXJNYXRlcmlhbChcbiAgICB7XG4gICAgICAgIHRpbWU6IDAuMCxcbiAgICAgICAgZmFkZTogMC4wLFxuICAgIH0sXG4gICAgLy8gbGFuZ3VhZ2U9R0xTTFxuICAgIGBcbnVuaWZvcm0gZmxvYXQgdGltZTtcbmF0dHJpYnV0ZSBmbG9hdCBzaXplO1xudmFyeWluZyB2ZWMzIHZDb2xvcjtcbnZvaWQgbWFpbigpIHtcbiAgdkNvbG9yID0gY29sb3I7XG4gIHZlYzQgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQocG9zaXRpb24sIDAuNSk7XG4gIGdsX1BvaW50U2l6ZSA9IHNpemUgKiAoMzAuMCAvIC1tdlBvc2l0aW9uLnopICogKDMuMCArIHNpbih0aW1lICsgMTAwLjApKTtcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtcbn1cbiAgYCxcbiAgICAvLyBsYW5ndWFnZT1HTFNMXG4gICAgYFxudW5pZm9ybSBzYW1wbGVyMkQgcG9pbnRUZXh0dXJlO1xudW5pZm9ybSBmbG9hdCBmYWRlO1xudmFyeWluZyB2ZWMzIHZDb2xvcjtcbnZvaWQgbWFpbigpIHtcbiAgZmxvYXQgb3BhY2l0eSA9IDEuMDtcbiAgaWYgKGZhZGUgPT0gMS4wKSB7XG4gICAgZmxvYXQgZCA9IGRpc3RhbmNlKGdsX1BvaW50Q29vcmQsIHZlYzIoMC41LCAwLjUpKTtcbiAgICBvcGFjaXR5ID0gMS4wIC8gKDEuMCArIGV4cCgxNi4wICogKGQgLSAwLjI1KSkpO1xuICB9XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQodkNvbG9yLCBvcGFjaXR5KTtcblxuICAjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG4gICNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG59XG4gIGBcbik7XG5cbmV4dGVuZCh7IFBvaW50cywgQnVmZmVyR2VvbWV0cnksIEJ1ZmZlckF0dHJpYnV0ZSB9KTtcblxuY29uc3QgZ2VuU3RhciA9IChyOiBudW1iZXIpID0+IHtcbiAgICByZXR1cm4gbmV3IFZlY3RvcjMoKS5zZXRGcm9tU3BoZXJpY2FsKFxuICAgICAgICBuZXcgU3BoZXJpY2FsKHIsIE1hdGguYWNvcygxIC0gTWF0aC5yYW5kb20oKSAqIDIpLCBNYXRoLnJhbmRvbSgpICogMiAqIE1hdGguUEkpXG4gICAgKTtcbn07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0cy1zdGFycycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LXBvaW50cyBbcmVmXT1cInN0YXJzUmVmXCI+XG4gICAgICAgICAgICA8bmd0LWJ1ZmZlci1nZW9tZXRyeT5cbiAgICAgICAgICAgICAgICA8bmd0LWJ1ZmZlci1hdHRyaWJ1dGUgYXR0YWNoPVwiYXR0cmlidXRlcy5wb3NpdGlvblwiICphcmdzPVwiW2dldCgnYnVmZmVyQXR0cmlidXRlcycpLnBvc2l0aW9ucywgM11cIiAvPlxuICAgICAgICAgICAgICAgIDxuZ3QtYnVmZmVyLWF0dHJpYnV0ZSBhdHRhY2g9XCJhdHRyaWJ1dGVzLmNvbG9yXCIgKmFyZ3M9XCJbZ2V0KCdidWZmZXJBdHRyaWJ1dGVzJykuY29sb3JzLCAzXVwiIC8+XG4gICAgICAgICAgICAgICAgPG5ndC1idWZmZXItYXR0cmlidXRlIGF0dGFjaD1cImF0dHJpYnV0ZXMuc2l6ZVwiICphcmdzPVwiW2dldCgnYnVmZmVyQXR0cmlidXRlcycpLnNpemVzLCAxXVwiIC8+XG4gICAgICAgICAgICA8L25ndC1idWZmZXItZ2VvbWV0cnk+XG4gICAgICAgICAgICA8bmd0LXByaW1pdGl2ZVxuICAgICAgICAgICAgICAgICphcmdzPVwiW21hdGVyaWFsXVwiXG4gICAgICAgICAgICAgICAgYXR0YWNoPVwibWF0ZXJpYWxcIlxuICAgICAgICAgICAgICAgIFtibGVuZGluZ109XCJBZGRpdGl2ZUJsZW5kaW5nXCJcbiAgICAgICAgICAgICAgICBbZGVwdGhXcml0ZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW3RyYW5zcGFyZW50XT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt2ZXJ0ZXhDb2xvcnNdPVwidHJ1ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5ndC12YWx1ZSBhdHRhY2g9XCJ1bmlmb3Jtcy5mYWRlLnZhbHVlXCIgW3Jhd1ZhbHVlXT1cImdldCgnZmFkZScpXCIgLz5cbiAgICAgICAgICAgIDwvbmd0LXByaW1pdGl2ZT5cbiAgICAgICAgPC9uZ3QtcG9pbnRzPlxuICAgIGAsXG4gICAgaW1wb3J0czogW05ndEFyZ3NdLFxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c1N0YXJzIGV4dGVuZHMgTmd0UnhTdG9yZSB7XG4gICAgcmVhZG9ubHkgQWRkaXRpdmVCbGVuZGluZyA9IEFkZGl0aXZlQmxlbmRpbmc7XG4gICAgcmVhZG9ubHkgbWF0ZXJpYWwgPSBuZXcgU3RhckZpZWxkTWF0ZXJpYWwoKTtcblxuICAgIEBJbnB1dCgpIHN0YXJzUmVmID0gaW5qZWN0Tmd0UmVmPFBvaW50cz4oKTtcblxuICAgIEBJbnB1dCgpIHNldCByYWRpdXMocmFkaXVzOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyByYWRpdXMgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGRlcHRoKGRlcHRoOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBkZXB0aCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgY291bnQoY291bnQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGNvdW50IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBmYWN0b3IoZmFjdG9yOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBmYWN0b3IgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHNhdHVyYXRpb24oc2F0dXJhdGlvbjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc2F0dXJhdGlvbiB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZmFkZShmYWRlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZmFkZSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgc3BlZWQoc3BlZWQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IHNwZWVkIH0pO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICAgICAgdGhpcy5zZXQoe1xuICAgICAgICAgICAgcmFkaXVzOiAxMDAsXG4gICAgICAgICAgICBkZXB0aDogNTAsXG4gICAgICAgICAgICBjb3VudDogNTAwMCxcbiAgICAgICAgICAgIHNhdHVyYXRpb246IDAsXG4gICAgICAgICAgICBmYWN0b3I6IDQsXG4gICAgICAgICAgICBmYWRlOiBmYWxzZSxcbiAgICAgICAgICAgIHNwZWVkOiAxLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb25uZWN0KFxuICAgICAgICAgICAgJ2J1ZmZlckF0dHJpYnV0ZXMnLFxuICAgICAgICAgICAgdGhpcy5zZWxlY3QoXG4gICAgICAgICAgICAgICAgWydjb3VudCcsICdkZXB0aCcsICdmYWN0b3InLCAncmFkaXVzJywgJ3NhdHVyYXRpb24nXSxcbiAgICAgICAgICAgICAgICAoeyBjb3VudCwgZGVwdGgsIGZhY3RvciwgcmFkaXVzLCBzYXR1cmF0aW9uIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb25zOiBhbnlbXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xvcnM6IGFueVtdID0gW107XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogY291bnQgfSwgKCkgPT4gKDAuNSArIDAuNSAqIE1hdGgucmFuZG9tKCkpICogZmFjdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sb3IgPSBuZXcgQ29sb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHIgPSByYWRpdXMgKyBkZXB0aDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5jcmVtZW50ID0gZGVwdGggLyBjb3VudDtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByIC09IGluY3JlbWVudCAqIE1hdGgucmFuZG9tKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbnMucHVzaCguLi5nZW5TdGFyKHIpLnRvQXJyYXkoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5zZXRIU0woaSAvIGNvdW50LCBzYXR1cmF0aW9uLCAwLjkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzLnB1c2goY29sb3IuciwgY29sb3IuZywgY29sb3IuYik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uczogbmV3IEZsb2F0MzJBcnJheShwb3NpdGlvbnMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzOiBuZXcgRmxvYXQzMkFycmF5KGNvbG9ycyksXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplczogbmV3IEZsb2F0MzJBcnJheShzaXplcyksXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBpbmplY3RCZWZvcmVSZW5kZXIodGhpcy5vbkJlZm9yZVJlbmRlci5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICBvbkJlZm9yZVJlbmRlcih7IGNsb2NrIH06IE5ndFJlbmRlclN0YXRlKSB7XG4gICAgICAgIHRoaXMubWF0ZXJpYWwudW5pZm9ybXNbJ3RpbWUnXS52YWx1ZSA9IGNsb2NrLmdldEVsYXBzZWRUaW1lKCkgKiB0aGlzLmdldCgnc3BlZWQnKTtcbiAgICB9XG59XG4iXX0=
@@ -108,11 +108,11 @@ class NgtsOrbitControls extends NgtRxStore {
108
108
  });
109
109
  }
110
110
  }
111
- NgtsOrbitControls.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtsOrbitControls, deps: [], target: i0.ɵɵFactoryTarget.Component });
112
- NgtsOrbitControls.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.2", type: NgtsOrbitControls, isStandalone: true, selector: "ngts-orbit-controls", inputs: { controlsRef: "controlsRef", camera: "camera", domElement: "domElement", makeDefault: "makeDefault", regress: "regress", target: "target", enableDamping: "enableDamping" }, outputs: { change: "change", start: "start", end: "end" }, usesInheritance: true, ngImport: i0, template: `
111
+ NgtsOrbitControls.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsOrbitControls, deps: [], target: i0.ɵɵFactoryTarget.Component });
112
+ NgtsOrbitControls.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.3", type: NgtsOrbitControls, isStandalone: true, selector: "ngts-orbit-controls", inputs: { controlsRef: "controlsRef", camera: "camera", domElement: "domElement", makeDefault: "makeDefault", regress: "regress", target: "target", enableDamping: "enableDamping" }, outputs: { change: "change", start: "start", end: "end" }, usesInheritance: true, ngImport: i0, template: `
113
113
  <ngt-primitive *args="get('args')" ngtCompound [enableDamping]="enableDamping$ | ngtPush" />
114
114
  `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }, { kind: "pipe", type: NgtPush, name: "ngtPush" }] });
115
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: NgtsOrbitControls, decorators: [{
115
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsOrbitControls, decorators: [{
116
116
  type: Component,
117
117
  args: [{
118
118
  selector: 'ngts-orbit-controls',