angular-three-soba 2.0.0-beta.3 → 2.0.0-beta.5

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 (98) hide show
  1. package/abstractions/edges/edges.d.ts +1 -1
  2. package/abstractions/grid/grid.d.ts +59 -0
  3. package/abstractions/index.d.ts +1 -0
  4. package/abstractions/text/text.d.ts +0 -1
  5. package/abstractions/text-3d/text-3d.d.ts +1 -1
  6. package/esm2022/abstractions/billboard/billboard.mjs +3 -3
  7. package/esm2022/abstractions/catmull-rom-line/catmull-rom-line.mjs +3 -3
  8. package/esm2022/abstractions/cubic-bezier-line/cubic-bezier-line.mjs +3 -3
  9. package/esm2022/abstractions/edges/edges.mjs +3 -3
  10. package/esm2022/abstractions/gizmo-helper/gizmo-helper.mjs +8 -8
  11. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +3 -3
  12. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +6 -6
  13. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +3 -3
  14. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +3 -3
  15. package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +6 -6
  16. package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +3 -3
  17. package/esm2022/abstractions/grid/grid.mjs +150 -0
  18. package/esm2022/abstractions/index.mjs +2 -1
  19. package/esm2022/abstractions/line/line-input.mjs +3 -3
  20. package/esm2022/abstractions/line/line.mjs +3 -3
  21. package/esm2022/abstractions/quadratic-bezier-line/quadratic-bezier-line.mjs +3 -3
  22. package/esm2022/abstractions/text/text.mjs +5 -7
  23. package/esm2022/abstractions/text-3d/text-3d.mjs +3 -3
  24. package/esm2022/cameras/camera/camera-content.mjs +3 -3
  25. package/esm2022/cameras/camera/camera.mjs +3 -3
  26. package/esm2022/cameras/cube-camera/cube-camera.mjs +3 -3
  27. package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +3 -3
  28. package/esm2022/cameras/perspective-camera/perspective-camera.mjs +3 -3
  29. package/esm2022/controls/orbit-controls/orbit-controls.mjs +3 -3
  30. package/esm2022/loaders/loader/loader.mjs +3 -3
  31. package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +3 -3
  32. package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +3 -3
  33. package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +7 -6
  34. package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +3 -3
  35. package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +3 -3
  36. package/esm2022/misc/animations/animations.mjs +20 -20
  37. package/esm2022/misc/bake-shadows/bake-shadows.mjs +3 -3
  38. package/esm2022/performance/adaptive/adaptive-dpr.mjs +3 -3
  39. package/esm2022/performance/adaptive/adaptive-events.mjs +3 -3
  40. package/esm2022/performance/detailed/detailed.mjs +3 -3
  41. package/esm2022/performance/instances/instance.mjs +3 -3
  42. package/esm2022/performance/instances/instances.mjs +3 -3
  43. package/esm2022/performance/stats/stats.mjs +3 -3
  44. package/esm2022/shaders/grid-material/grid-material.mjs +62 -0
  45. package/esm2022/shaders/index.mjs +2 -1
  46. package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +5 -5
  47. package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +3 -3
  48. package/esm2022/staging/bounds/bounds.mjs +3 -3
  49. package/esm2022/staging/camera-shake/camera-shake.mjs +3 -3
  50. package/esm2022/staging/caustics/caustisc.mjs +5 -5
  51. package/esm2022/staging/center/center.mjs +3 -3
  52. package/esm2022/staging/cloud/cloud.mjs +3 -3
  53. package/esm2022/staging/contact-shadows/contact-shadows.mjs +3 -3
  54. package/esm2022/staging/environment/environment-cube.mjs +3 -3
  55. package/esm2022/staging/environment/environment-ground.mjs +3 -3
  56. package/esm2022/staging/environment/environment-input.mjs +3 -3
  57. package/esm2022/staging/environment/environment-map.mjs +3 -3
  58. package/esm2022/staging/environment/environment-portal.mjs +5 -5
  59. package/esm2022/staging/environment/environment.mjs +6 -6
  60. package/esm2022/staging/float/float.mjs +3 -3
  61. package/esm2022/staging/sky/sky.mjs +3 -3
  62. package/esm2022/staging/sparkles/sparkles.mjs +3 -3
  63. package/esm2022/staging/spot-light/spot-light-input.mjs +3 -3
  64. package/esm2022/staging/spot-light/spot-light-shadow-mesh-input.mjs +3 -3
  65. package/esm2022/staging/spot-light/spot-light-shadow-mesh.mjs +13 -11
  66. package/esm2022/staging/spot-light/spot-light.mjs +3 -3
  67. package/esm2022/staging/spot-light/volumetric-mesh.mjs +3 -3
  68. package/esm2022/staging/stage/stage.mjs +6 -6
  69. package/esm2022/staging/stars/stars.mjs +3 -3
  70. package/fesm2022/angular-three-soba-abstractions.mjs +205 -63
  71. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  72. package/fesm2022/angular-three-soba-cameras.mjs +15 -15
  73. package/fesm2022/angular-three-soba-controls.mjs +3 -3
  74. package/fesm2022/angular-three-soba-loaders.mjs +3 -3
  75. package/fesm2022/angular-three-soba-materials.mjs +18 -17
  76. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  77. package/fesm2022/angular-three-soba-misc.mjs +22 -22
  78. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  79. package/fesm2022/angular-three-soba-performance.mjs +18 -18
  80. package/fesm2022/angular-three-soba-shaders.mjs +61 -1
  81. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  82. package/fesm2022/angular-three-soba-staging.mjs +90 -88
  83. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  84. package/misc/animations/animations.d.ts +1 -1
  85. package/package.json +16 -16
  86. package/performance/instances/instances.d.ts +2 -2
  87. package/performance/instances/position-mesh.d.ts +1 -1
  88. package/plugin/package.json +2 -2
  89. package/plugin/src/generators/init/init.d.ts +3 -0
  90. package/plugin/src/generators/init/init.js +7 -1
  91. package/plugin/src/generators/init/init.js.map +1 -1
  92. package/shaders/grid-material/grid-material.d.ts +4 -0
  93. package/shaders/index.d.ts +1 -0
  94. package/staging/caustics/caustisc.d.ts +1 -1
  95. package/staging/sparkles/sparkles.d.ts +1 -1
  96. package/staging/spot-light/spot-light-shadow-mesh.d.ts +2 -2
  97. package/staging/spot-light/volumetric-mesh.d.ts +1 -1
  98. package/staging/stars/stars.d.ts +1 -1
@@ -3,7 +3,7 @@ import { runInInjectionContext, inject, DestroyRef, effect, Directive, ChangeDet
3
3
  import { assertInjectionContext, injectNgtRef, injectBeforeRender, NgtStore, safeDetectChanges } from 'angular-three';
4
4
  import * as THREE from 'three';
5
5
 
6
- function injectNgtsAnimations(animationsFactory, { ref, injector }) {
6
+ function injectNgtsAnimations(animationsFactory, { ref, injector } = {}) {
7
7
  injector = assertInjectionContext(injectNgtsAnimations, injector);
8
8
  return runInInjectionContext(injector, () => {
9
9
  let actualRef = injectNgtRef();
@@ -31,25 +31,25 @@ function injectNgtsAnimations(animationsFactory, { ref, injector }) {
31
31
  mixer.stopAllAction();
32
32
  });
33
33
  injectBeforeRender(({ delta }) => mixer.update(delta));
34
- requestAnimationFrame(() => {
35
- effect(() => {
36
- const actual = actualRef.nativeElement;
37
- const animations = animationsFactory();
38
- for (let i = 0; i < animations.length; i++) {
39
- const clip = animations[i];
40
- names.push(clip.name);
41
- clips.push(clip);
42
- Object.defineProperty(actions, clip.name, {
43
- enumerable: true,
44
- get: () => {
45
- return cached[clip.name] || (cached[clip.name] = mixer.clipAction(clip, actual));
46
- },
47
- });
48
- if (i === 0) {
49
- actions[clip.name].play();
50
- }
34
+ effect(() => {
35
+ const actual = actualRef.nativeElement;
36
+ if (!actual)
37
+ return;
38
+ const animations = animationsFactory();
39
+ for (let i = 0; i < animations.length; i++) {
40
+ const clip = animations[i];
41
+ names.push(clip.name);
42
+ clips.push(clip);
43
+ Object.defineProperty(actions, clip.name, {
44
+ enumerable: true,
45
+ get: () => {
46
+ return cached[clip.name] || (cached[clip.name] = mixer.clipAction(clip, actual));
47
+ },
48
+ });
49
+ if (i === 0) {
50
+ actions[clip.name].play();
51
51
  }
52
- }, { injector });
52
+ }
53
53
  });
54
54
  return { ref: actualRef, actions, mixer, names, clips };
55
55
  });
@@ -67,10 +67,10 @@ class NgtsBakeShadows {
67
67
  });
68
68
  });
69
69
  }
70
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsBakeShadows, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
71
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: NgtsBakeShadows, isStandalone: true, selector: "ngts-bake-shadows", ngImport: i0 }); }
70
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsBakeShadows, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
71
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.2", type: NgtsBakeShadows, isStandalone: true, selector: "ngts-bake-shadows", ngImport: i0 }); }
72
72
  }
73
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsBakeShadows, decorators: [{
73
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsBakeShadows, decorators: [{
74
74
  type: Directive,
75
75
  args: [{ selector: 'ngts-bake-shadows', standalone: true }]
76
76
  }], ctorParameters: function () { return []; } });
@@ -1 +1 @@
1
- {"version":3,"file":"angular-three-soba-misc.mjs","sources":["../../../../libs/soba/misc/src/animations/animations.ts","../../../../libs/soba/misc/src/bake-shadows/bake-shadows.ts","../../../../libs/soba/misc/src/fbo/fbo.ts","../../../../libs/soba/misc/src/depth-buffer/depth-buffer.ts","../../../../libs/soba/misc/src/angular-three-soba-misc.ts"],"sourcesContent":["import { DestroyRef, Injector, effect, inject, runInInjectionContext } from '@angular/core';\nimport { assertInjectionContext, injectBeforeRender, injectNgtRef, type NgtInjectedRef } from 'angular-three';\nimport * as THREE from 'three';\n\nexport function injectNgtsAnimations(\n animationsFactory: () => THREE.AnimationClip[],\n { ref, injector }: { ref?: NgtInjectedRef<THREE.Object3D> | THREE.Object3D; injector?: Injector }\n) {\n injector = assertInjectionContext(injectNgtsAnimations, injector);\n return runInInjectionContext(injector, () => {\n let actualRef = injectNgtRef<THREE.Object3D>();\n\n if (ref) {\n if (ref instanceof THREE.Object3D) {\n actualRef.nativeElement = ref;\n } else {\n actualRef = ref;\n }\n }\n\n const mixer = new THREE.AnimationMixer(null!);\n const actions = {} as Record<string, THREE.AnimationAction>;\n let cached = {} as Record<string, THREE.AnimationAction>;\n\n const clips = [] as THREE.AnimationClip[];\n const names = [] as string[];\n\n inject(DestroyRef).onDestroy(() => {\n // clear cached\n cached = {};\n // uncache actions\n Object.values(actions).forEach((action) => {\n mixer.uncacheAction(action as unknown as THREE.AnimationClip, actualRef.untracked);\n });\n // stop all actions\n mixer.stopAllAction();\n });\n\n injectBeforeRender(({ delta }) => mixer.update(delta));\n\n requestAnimationFrame(() => {\n effect(\n () => {\n const actual = actualRef.nativeElement;\n const animations = animationsFactory();\n\n for (let i = 0; i < animations.length; i++) {\n const clip = animations[i];\n\n names.push(clip.name);\n clips.push(clip);\n\n Object.defineProperty(actions, clip.name, {\n enumerable: true,\n get: () => {\n return cached[clip.name] || (cached[clip.name] = mixer.clipAction(clip, actual));\n },\n });\n\n if (i === 0) {\n actions[clip.name].play();\n }\n }\n },\n { injector }\n );\n });\n\n return { ref: actualRef, actions, mixer, names, clips };\n });\n}\n","import { Directive, effect, inject } from '@angular/core';\nimport { NgtStore } from 'angular-three';\n\n@Directive({ selector: 'ngts-bake-shadows', standalone: true })\nexport class NgtsBakeShadows {\n constructor() {\n const store = inject(NgtStore);\n const gl = store.select('gl');\n effect((onCleanup) => {\n gl().shadowMap.autoUpdate = false;\n gl().shadowMap.needsUpdate = true;\n onCleanup(() => {\n gl().shadowMap.autoUpdate = gl().shadowMap.needsUpdate = true;\n });\n });\n }\n}\n","import {\n ChangeDetectorRef,\n computed,\n DestroyRef,\n effect,\n inject,\n Injector,\n runInInjectionContext,\n signal,\n untracked,\n} from '@angular/core';\nimport { assertInjectionContext, NgtStore, safeDetectChanges } from 'angular-three';\nimport * as THREE from 'three';\n\ninterface FBOSettings extends THREE.WebGLRenderTargetOptions {\n /** Defines the count of MSAA samples. Can only be used with WebGL 2. Default: 0 */\n samples?: number;\n /** If set, the scene depth will be rendered into buffer.depthTexture. Default: false */\n depth?: boolean;\n}\n\nexport interface NgtsFBOParams {\n width?: number | FBOSettings;\n height?: number;\n settings?: FBOSettings;\n}\n\nexport function injectNgtsFBO(fboParams: () => NgtsFBOParams, { injector }: { injector?: Injector } = {}) {\n injector = assertInjectionContext(injectNgtsFBO, injector);\n return runInInjectionContext(injector, () => {\n const store = inject(NgtStore);\n const cdr = inject(ChangeDetectorRef);\n\n const targetRef = signal<THREE.WebGLRenderTarget>(null!);\n\n inject(DestroyRef).onDestroy(() => targetRef().dispose());\n\n requestAnimationFrame(() => {\n const size = store.select('size');\n const dpr = store.select('viewport', 'dpr');\n const trigger = computed(() => {\n const { width, height, settings } = fboParams();\n const _width = typeof width === 'number' ? width : size().width * dpr();\n const _height = typeof height === 'number' ? height : size().height * dpr();\n const _settings = (typeof width === 'number' ? settings : (width as FBOSettings)) || {};\n\n return { width: _width, height: _height, settings: _settings };\n });\n\n effect(\n () => {\n const { width, height, settings } = trigger();\n const { samples = 0, depth, ...targetSettings } = settings;\n let untrackedTarget = untracked(targetRef);\n if (!untrackedTarget) {\n const target = new THREE.WebGLRenderTarget(width, height, {\n minFilter: THREE.LinearFilter,\n magFilter: THREE.LinearFilter,\n type: THREE.HalfFloatType,\n ...targetSettings,\n });\n if (depth) target.depthTexture = new THREE.DepthTexture(width, height, THREE.FloatType);\n\n target.samples = samples;\n targetRef.set(target);\n untrackedTarget = untracked(targetRef);\n }\n\n untrackedTarget.setSize(width, height);\n if (samples) untrackedTarget.samples = samples;\n safeDetectChanges(cdr);\n },\n { allowSignalWrites: true, injector }\n );\n });\n\n return targetRef.asReadonly();\n });\n}\n","import {\n ChangeDetectorRef,\n computed,\n effect,\n inject,\n Injector,\n runInInjectionContext,\n signal,\n untracked,\n} from '@angular/core';\nimport { assertInjectionContext, injectBeforeRender, NgtStore, safeDetectChanges } from 'angular-three';\nimport * as THREE from 'three';\nimport { injectNgtsFBO } from '../fbo/fbo';\n\nexport interface NgtsDepthBufferParams {\n size: number;\n frames: number;\n}\n\nexport function injectNgtsDepthBuffer(\n paramsFactory: () => Partial<NgtsDepthBufferParams> = () => ({}),\n { injector }: { injector?: Injector } = {}\n) {\n injector = assertInjectionContext(injectNgtsDepthBuffer, injector);\n return runInInjectionContext(injector, () => {\n const depthBufferRef = signal<THREE.DepthTexture>(null!);\n const store = inject(NgtStore);\n const cdr = inject(ChangeDetectorRef);\n\n const size = store.select('size');\n const dpr = store.select('viewport', 'dpr');\n\n requestAnimationFrame(() => {\n const fboParams = computed(() => {\n const params = { size: 256, frames: Infinity, ...paramsFactory() };\n const width = params.size || size().width * dpr();\n const height = params.size || size().height * dpr();\n const depthTexture = new THREE.DepthTexture(width, height);\n depthTexture.format = THREE.DepthFormat;\n depthTexture.type = THREE.UnsignedShortType;\n return { width, height, settings: { depthTexture } };\n });\n\n const fboRef = injectNgtsFBO(fboParams, { injector });\n\n effect(\n () => {\n const fbo = fboRef();\n if (fbo) {\n depthBufferRef.set(fbo.depthTexture);\n safeDetectChanges(cdr);\n }\n },\n { allowSignalWrites: true, injector }\n );\n\n let count = 0;\n injectBeforeRender(\n ({ gl, scene, camera }) => {\n const params = { size: 256, frames: Infinity, ...paramsFactory() };\n const fbo = untracked(fboRef);\n if ((params.frames === Infinity || count < params.frames) && fbo) {\n gl.setRenderTarget(fbo);\n gl.render(scene, camera);\n gl.setRenderTarget(null);\n count++;\n }\n },\n { injector }\n );\n });\n\n return depthBufferRef.asReadonly();\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"angular-three-soba-misc.mjs","sources":["../../../../libs/soba/misc/src/animations/animations.ts","../../../../libs/soba/misc/src/bake-shadows/bake-shadows.ts","../../../../libs/soba/misc/src/fbo/fbo.ts","../../../../libs/soba/misc/src/depth-buffer/depth-buffer.ts","../../../../libs/soba/misc/src/angular-three-soba-misc.ts"],"sourcesContent":["import { DestroyRef, Injector, effect, inject, runInInjectionContext } from '@angular/core';\nimport { assertInjectionContext, injectBeforeRender, injectNgtRef, type NgtInjectedRef } from 'angular-three';\nimport * as THREE from 'three';\n\nexport function injectNgtsAnimations(\n animationsFactory: () => THREE.AnimationClip[],\n { ref, injector }: { ref?: NgtInjectedRef<THREE.Object3D> | THREE.Object3D; injector?: Injector } = {}\n) {\n injector = assertInjectionContext(injectNgtsAnimations, injector);\n return runInInjectionContext(injector, () => {\n let actualRef = injectNgtRef<THREE.Object3D>();\n\n if (ref) {\n if (ref instanceof THREE.Object3D) {\n actualRef.nativeElement = ref;\n } else {\n actualRef = ref;\n }\n }\n\n const mixer = new THREE.AnimationMixer(null!);\n const actions = {} as Record<string, THREE.AnimationAction>;\n let cached = {} as Record<string, THREE.AnimationAction>;\n\n const clips = [] as THREE.AnimationClip[];\n const names = [] as string[];\n\n inject(DestroyRef).onDestroy(() => {\n // clear cached\n cached = {};\n // uncache actions\n Object.values(actions).forEach((action) => {\n mixer.uncacheAction(action as unknown as THREE.AnimationClip, actualRef.untracked);\n });\n // stop all actions\n mixer.stopAllAction();\n });\n\n injectBeforeRender(({ delta }) => mixer.update(delta));\n\n effect(() => {\n const actual = actualRef.nativeElement;\n if (!actual) return;\n const animations = animationsFactory();\n\n for (let i = 0; i < animations.length; i++) {\n const clip = animations[i];\n\n names.push(clip.name);\n clips.push(clip);\n\n Object.defineProperty(actions, clip.name, {\n enumerable: true,\n get: () => {\n return cached[clip.name] || (cached[clip.name] = mixer.clipAction(clip, actual));\n },\n });\n\n if (i === 0) {\n actions[clip.name].play();\n }\n }\n });\n\n return { ref: actualRef, actions, mixer, names, clips };\n });\n}\n","import { Directive, effect, inject } from '@angular/core';\nimport { NgtStore } from 'angular-three';\n\n@Directive({ selector: 'ngts-bake-shadows', standalone: true })\nexport class NgtsBakeShadows {\n constructor() {\n const store = inject(NgtStore);\n const gl = store.select('gl');\n effect((onCleanup) => {\n gl().shadowMap.autoUpdate = false;\n gl().shadowMap.needsUpdate = true;\n onCleanup(() => {\n gl().shadowMap.autoUpdate = gl().shadowMap.needsUpdate = true;\n });\n });\n }\n}\n","import {\n ChangeDetectorRef,\n computed,\n DestroyRef,\n effect,\n inject,\n Injector,\n runInInjectionContext,\n signal,\n untracked,\n} from '@angular/core';\nimport { assertInjectionContext, NgtStore, safeDetectChanges } from 'angular-three';\nimport * as THREE from 'three';\n\ninterface FBOSettings extends THREE.WebGLRenderTargetOptions {\n /** Defines the count of MSAA samples. Can only be used with WebGL 2. Default: 0 */\n samples?: number;\n /** If set, the scene depth will be rendered into buffer.depthTexture. Default: false */\n depth?: boolean;\n}\n\nexport interface NgtsFBOParams {\n width?: number | FBOSettings;\n height?: number;\n settings?: FBOSettings;\n}\n\nexport function injectNgtsFBO(fboParams: () => NgtsFBOParams, { injector }: { injector?: Injector } = {}) {\n injector = assertInjectionContext(injectNgtsFBO, injector);\n return runInInjectionContext(injector, () => {\n const store = inject(NgtStore);\n const cdr = inject(ChangeDetectorRef);\n\n const targetRef = signal<THREE.WebGLRenderTarget>(null!);\n\n inject(DestroyRef).onDestroy(() => targetRef().dispose());\n\n requestAnimationFrame(() => {\n const size = store.select('size');\n const dpr = store.select('viewport', 'dpr');\n const trigger = computed(() => {\n const { width, height, settings } = fboParams();\n const _width = typeof width === 'number' ? width : size().width * dpr();\n const _height = typeof height === 'number' ? height : size().height * dpr();\n const _settings = (typeof width === 'number' ? settings : (width as FBOSettings)) || {};\n\n return { width: _width, height: _height, settings: _settings };\n });\n\n effect(\n () => {\n const { width, height, settings } = trigger();\n const { samples = 0, depth, ...targetSettings } = settings;\n let untrackedTarget = untracked(targetRef);\n if (!untrackedTarget) {\n const target = new THREE.WebGLRenderTarget(width, height, {\n minFilter: THREE.LinearFilter,\n magFilter: THREE.LinearFilter,\n type: THREE.HalfFloatType,\n ...targetSettings,\n });\n if (depth) target.depthTexture = new THREE.DepthTexture(width, height, THREE.FloatType);\n\n target.samples = samples;\n targetRef.set(target);\n untrackedTarget = untracked(targetRef);\n }\n\n untrackedTarget.setSize(width, height);\n if (samples) untrackedTarget.samples = samples;\n safeDetectChanges(cdr);\n },\n { allowSignalWrites: true, injector }\n );\n });\n\n return targetRef.asReadonly();\n });\n}\n","import {\n ChangeDetectorRef,\n computed,\n effect,\n inject,\n Injector,\n runInInjectionContext,\n signal,\n untracked,\n} from '@angular/core';\nimport { assertInjectionContext, injectBeforeRender, NgtStore, safeDetectChanges } from 'angular-three';\nimport * as THREE from 'three';\nimport { injectNgtsFBO } from '../fbo/fbo';\n\nexport interface NgtsDepthBufferParams {\n size: number;\n frames: number;\n}\n\nexport function injectNgtsDepthBuffer(\n paramsFactory: () => Partial<NgtsDepthBufferParams> = () => ({}),\n { injector }: { injector?: Injector } = {}\n) {\n injector = assertInjectionContext(injectNgtsDepthBuffer, injector);\n return runInInjectionContext(injector, () => {\n const depthBufferRef = signal<THREE.DepthTexture>(null!);\n const store = inject(NgtStore);\n const cdr = inject(ChangeDetectorRef);\n\n const size = store.select('size');\n const dpr = store.select('viewport', 'dpr');\n\n requestAnimationFrame(() => {\n const fboParams = computed(() => {\n const params = { size: 256, frames: Infinity, ...paramsFactory() };\n const width = params.size || size().width * dpr();\n const height = params.size || size().height * dpr();\n const depthTexture = new THREE.DepthTexture(width, height);\n depthTexture.format = THREE.DepthFormat;\n depthTexture.type = THREE.UnsignedShortType;\n return { width, height, settings: { depthTexture } };\n });\n\n const fboRef = injectNgtsFBO(fboParams, { injector });\n\n effect(\n () => {\n const fbo = fboRef();\n if (fbo) {\n depthBufferRef.set(fbo.depthTexture);\n safeDetectChanges(cdr);\n }\n },\n { allowSignalWrites: true, injector }\n );\n\n let count = 0;\n injectBeforeRender(\n ({ gl, scene, camera }) => {\n const params = { size: 256, frames: Infinity, ...paramsFactory() };\n const fbo = untracked(fboRef);\n if ((params.frames === Infinity || count < params.frames) && fbo) {\n gl.setRenderTarget(fbo);\n gl.render(scene, camera);\n gl.setRenderTarget(null);\n count++;\n }\n },\n { injector }\n );\n });\n\n return depthBufferRef.asReadonly();\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -35,10 +35,10 @@ class NgtsAdaptiveDpr {
35
35
  gl.domElement.style.imageRendering = current === 1 ? 'auto' : 'pixelated';
36
36
  }, { allowSignalWrites: true });
37
37
  }
38
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsAdaptiveDpr, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
39
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: NgtsAdaptiveDpr, isStandalone: true, selector: "ngts-adaptive-dpr", inputs: { pixelated: "pixelated" }, ngImport: i0 }); }
38
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsAdaptiveDpr, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
39
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.2", type: NgtsAdaptiveDpr, isStandalone: true, selector: "ngts-adaptive-dpr", inputs: { pixelated: "pixelated" }, ngImport: i0 }); }
40
40
  }
41
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsAdaptiveDpr, decorators: [{
41
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsAdaptiveDpr, decorators: [{
42
42
  type: Directive,
43
43
  args: [{
44
44
  selector: 'ngts-adaptive-dpr',
@@ -64,10 +64,10 @@ class NgtsAdaptiveEvents {
64
64
  setEvents({ enabled: performanceCurrent() === 1 });
65
65
  }, { allowSignalWrites: true });
66
66
  }
67
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsAdaptiveEvents, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
68
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: NgtsAdaptiveEvents, isStandalone: true, selector: "ngts-adaptive-events", ngImport: i0 }); }
67
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsAdaptiveEvents, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
68
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.2", type: NgtsAdaptiveEvents, isStandalone: true, selector: "ngts-adaptive-events", ngImport: i0 }); }
69
69
  }
70
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsAdaptiveEvents, decorators: [{
70
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsAdaptiveEvents, decorators: [{
71
71
  type: Directive,
72
72
  args: [{
73
73
  selector: 'ngts-adaptive-events',
@@ -105,14 +105,14 @@ class NgtsDetailed extends NgtSignalStore {
105
105
  }
106
106
  });
107
107
  }
108
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsDetailed, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
109
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtsDetailed, isStandalone: true, selector: "ngts-detailed", inputs: { lodRef: "lodRef", distances: "distances" }, usesInheritance: true, ngImport: i0, template: `
108
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsDetailed, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
109
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.2", type: NgtsDetailed, isStandalone: true, selector: "ngts-detailed", inputs: { lodRef: "lodRef", distances: "distances" }, usesInheritance: true, ngImport: i0, template: `
110
110
  <ngt-lOD ngtCompound [ref]="lodRef" (beforeRender)="onLODBeforeRender($event)">
111
111
  <ng-content />
112
112
  </ngt-lOD>
113
113
  `, isInline: true }); }
114
114
  }
115
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsDetailed, decorators: [{
115
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsDetailed, decorators: [{
116
116
  type: Component,
117
117
  args: [{
118
118
  selector: 'ngts-detailed',
@@ -234,8 +234,8 @@ class NgtsInstances extends NgtSignalStore {
234
234
  }
235
235
  });
236
236
  }
237
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsInstances, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
238
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtsInstances, isStandalone: true, selector: "ngts-instances", inputs: { instancesRef: "instancesRef", range: "range", limit: "limit", frames: "frames" }, providers: [
237
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsInstances, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
238
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.2", type: NgtsInstances, isStandalone: true, selector: "ngts-instances", inputs: { instancesRef: "instancesRef", range: "range", limit: "limit", frames: "frames" }, providers: [
239
239
  { provide: NGTS_INSTANCES_API, useFactory: (instances) => instances.api, deps: [NgtsInstances] },
240
240
  ], usesInheritance: true, ngImport: i0, template: `
241
241
  <ngt-instanced-mesh
@@ -265,7 +265,7 @@ class NgtsInstances extends NgtSignalStore {
265
265
  </ngt-instanced-mesh>
266
266
  `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] }); }
267
267
  }
268
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsInstances, decorators: [{
268
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsInstances, decorators: [{
269
269
  type: Component,
270
270
  args: [{
271
271
  selector: 'ngts-instances',
@@ -375,8 +375,8 @@ class NgtsInstance {
375
375
  });
376
376
  });
377
377
  }
378
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsInstance, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
379
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtsInstance, isStandalone: true, selector: "ngts-instance", ngImport: i0, template: `
378
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsInstance, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
379
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.2", type: NgtsInstance, isStandalone: true, selector: "ngts-instance", ngImport: i0, template: `
380
380
  <ngt-position-mesh
381
381
  ngtCompound
382
382
  [ref]="positionMeshRef"
@@ -387,7 +387,7 @@ class NgtsInstance {
387
387
  </ngt-position-mesh>
388
388
  `, isInline: true }); }
389
389
  }
390
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsInstance, decorators: [{
390
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsInstance, decorators: [{
391
391
  type: Component,
392
392
  args: [{
393
393
  selector: 'ngts-instance',
@@ -460,10 +460,10 @@ class NgtsStats extends NgtSignalStore {
460
460
  });
461
461
  });
462
462
  }
463
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsStats, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
464
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.0", type: NgtsStats, isStandalone: true, selector: "ngts-stats", inputs: { showPanel: "showPanel", parent: "parent", classes: "classes", right: "right" }, usesInheritance: true, ngImport: i0 }); }
463
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsStats, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
464
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.2", type: NgtsStats, isStandalone: true, selector: "ngts-stats", inputs: { showPanel: "showPanel", parent: "parent", classes: "classes", right: "right" }, usesInheritance: true, ngImport: i0 }); }
465
465
  }
466
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsStats, decorators: [{
466
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: NgtsStats, decorators: [{
467
467
  type: Directive,
468
468
  args: [{
469
469
  selector: 'ngts-stats',
@@ -347,6 +347,66 @@ uniform mat4 lightViewMatrix;
347
347
 
348
348
  const DiscardMaterial = shaderMaterial({}, 'void main() { }', 'void main() { gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); discard; }');
349
349
 
350
+ const GridMaterial = shaderMaterial({
351
+ cellSize: 0.5,
352
+ sectionSize: 1,
353
+ fadeDistance: 100,
354
+ fadeStrength: 1,
355
+ cellThickness: 0.5,
356
+ sectionThickness: 1,
357
+ cellColor: new THREE.Color(),
358
+ sectionColor: new THREE.Color(),
359
+ infiniteGrid: false,
360
+ followCamera: false,
361
+ },
362
+ /* glsl */ `
363
+ varying vec3 worldPosition;
364
+ uniform float fadeDistance;
365
+ uniform bool infiniteGrid;
366
+ uniform bool followCamera;
367
+
368
+ void main() {
369
+ worldPosition = position.xzy;
370
+ if (infiniteGrid) worldPosition *= 1.0 + fadeDistance;
371
+ if (followCamera) worldPosition.xz +=cameraPosition.xz;
372
+
373
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(worldPosition, 1.0);
374
+ }
375
+ `,
376
+ /* glsl */ `
377
+ varying vec3 worldPosition;
378
+ uniform float cellSize;
379
+ uniform float sectionSize;
380
+ uniform vec3 cellColor;
381
+ uniform vec3 sectionColor;
382
+ uniform float fadeDistance;
383
+ uniform float fadeStrength;
384
+ uniform float cellThickness;
385
+ uniform float sectionThickness;
386
+
387
+ float getGrid(float size, float thickness) {
388
+ vec2 r = worldPosition.xz / size;
389
+ vec2 grid = abs(fract(r - 0.5) - 0.5) / fwidth(r);
390
+ float line = min(grid.x, grid.y) + 1. - thickness;
391
+ return 1.0 - min(line, 1.);
392
+ }
393
+
394
+ void main() {
395
+ float g1 = getGrid(cellSize, cellThickness);
396
+ float g2 = getGrid(sectionSize, sectionThickness);
397
+
398
+ float d = 1.0 - min(distance(cameraPosition.xz, worldPosition.xz) / fadeDistance, 1.);
399
+ vec3 color = mix(cellColor, sectionColor, min(1.,sectionThickness * g2));
400
+
401
+ gl_FragColor = vec4(color, (g1 + g2) * pow(d,fadeStrength));
402
+ gl_FragColor.a = mix(0.75 * gl_FragColor.a, gl_FragColor.a, g2);
403
+ if (gl_FragColor.a <= 0.0) discard;
404
+
405
+ #include <tonemapping_fragment>
406
+ #include <encodings_fragment>
407
+ }
408
+ `);
409
+
350
410
  const NGTS_DISTORT_MATERIAL_SHADER = new InjectionToken('DistortMaterialShader');
351
411
  function provideNgtsMeshDistortMaterialShader(distortShader) {
352
412
  return {
@@ -1288,5 +1348,5 @@ void main() {
1288
1348
  * Generated bundle index. Do not edit.
1289
1349
  */
1290
1350
 
1291
- export { BlurPass, CausticsMaterial, CausticsProjectionMaterial, ConvolutionMaterial, DiscardMaterial, MeshReflectorMaterial, MeshRefractionMaterial, MeshTransmissionMaterial, MeshWobbleMaterial, NGTS_DISTORT_MATERIAL_SHADER, SoftShadowMaterial, SparklesMaterial, SpotLightMaterial, StarFieldMaterial, provideNgtsMeshDistortMaterialShader };
1351
+ export { BlurPass, CausticsMaterial, CausticsProjectionMaterial, ConvolutionMaterial, DiscardMaterial, GridMaterial, MeshReflectorMaterial, MeshRefractionMaterial, MeshTransmissionMaterial, MeshWobbleMaterial, NGTS_DISTORT_MATERIAL_SHADER, SoftShadowMaterial, SparklesMaterial, SpotLightMaterial, StarFieldMaterial, provideNgtsMeshDistortMaterialShader };
1292
1352
  //# sourceMappingURL=angular-three-soba-shaders.mjs.map