angular-three-soba 4.0.0-next.97 → 4.0.0-next.98

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 (69) hide show
  1. package/abstractions/lib/catmull-rom-line.d.ts +55 -55
  2. package/abstractions/lib/edges.d.ts +55 -55
  3. package/abstractions/lib/helper.d.ts +6 -1
  4. package/abstractions/lib/line.d.ts +1 -1
  5. package/abstractions/lib/text-3d.d.ts +1 -1
  6. package/cameras/lib/cube-camera.d.ts +7 -2
  7. package/cameras/lib/orthographic-camera.d.ts +1 -1
  8. package/cameras/lib/perspective-camera.d.ts +1 -1
  9. package/fesm2022/angular-three-soba-abstractions.mjs +16 -11
  10. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  11. package/fesm2022/angular-three-soba-cameras.mjs +16 -11
  12. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  13. package/fesm2022/angular-three-soba-controls.mjs +7 -7
  14. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  15. package/fesm2022/angular-three-soba-gizmos.mjs +10 -10
  16. package/fesm2022/angular-three-soba-gizmos.mjs.map +1 -1
  17. package/fesm2022/angular-three-soba-loaders.mjs +186 -49
  18. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  19. package/fesm2022/angular-three-soba-materials.mjs +14 -14
  20. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  21. package/fesm2022/angular-three-soba-misc.mjs +38 -18
  22. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  23. package/fesm2022/angular-three-soba-performances.mjs +6 -6
  24. package/fesm2022/angular-three-soba-performances.mjs.map +1 -1
  25. package/fesm2022/angular-three-soba-staging.mjs +142 -54
  26. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  27. package/gizmos/lib/pivot-controls/axis-arrow.d.ts +1 -1
  28. package/gizmos/lib/pivot-controls/axis-rotator.d.ts +1 -1
  29. package/gizmos/lib/pivot-controls/pivot-controls.d.ts +1 -1
  30. package/gizmos/lib/pivot-controls/plane-slider.d.ts +1 -1
  31. package/gizmos/lib/pivot-controls/scaling-sphere.d.ts +1 -1
  32. package/loaders/index.d.ts +4 -0
  33. package/loaders/lib/fbx-loader.d.ts +9 -1
  34. package/loaders/lib/fbx-resource.d.ts +7 -0
  35. package/loaders/lib/font-loader.d.ts +6 -20
  36. package/loaders/lib/font-resource.d.ts +28 -0
  37. package/loaders/lib/gltf-loader.d.ts +8 -0
  38. package/loaders/lib/gltf-resource.d.ts +32 -0
  39. package/loaders/lib/loader.d.ts +2 -2
  40. package/loaders/lib/progress.d.ts +6 -1
  41. package/loaders/lib/texture-loader.d.ts +8 -0
  42. package/loaders/lib/texture-resource.d.ts +10 -0
  43. package/materials/lib/custom-shader-material.d.ts +2 -2
  44. package/materials/lib/mesh-portal-material.d.ts +1 -1
  45. package/materials/lib/mesh-refraction-material.d.ts +1 -1
  46. package/materials/lib/mesh-transmission-material.d.ts +1 -1
  47. package/misc/lib/animations.d.ts +6 -1
  48. package/misc/lib/decal.d.ts +1 -1
  49. package/misc/lib/depth-buffer.d.ts +6 -1
  50. package/misc/lib/fbo.d.ts +7 -2
  51. package/misc/lib/intersect.d.ts +6 -1
  52. package/package.json +5 -5
  53. package/performances/lib/bvh.d.ts +1 -1
  54. package/performances/lib/instances/instances.d.ts +1 -1
  55. package/performances/lib/points/points.d.ts +1 -1
  56. package/performances/lib/segments/segments.d.ts +23 -23
  57. package/staging/index.d.ts +1 -0
  58. package/staging/lib/accumulative-shadows.d.ts +1 -1
  59. package/staging/lib/caustics.d.ts +1 -1
  60. package/staging/lib/contact-shadows.d.ts +1 -1
  61. package/staging/lib/environment/environment-resource.d.ts +35 -0
  62. package/staging/lib/environment/environment.d.ts +3 -3
  63. package/staging/lib/environment/inject-environment.d.ts +8 -24
  64. package/staging/lib/lightformer.d.ts +1 -1
  65. package/staging/lib/matcap-texture.d.ts +17 -4
  66. package/staging/lib/normal-texture.d.ts +20 -7
  67. package/staging/lib/render-texture.d.ts +1 -1
  68. package/staging/lib/spot-light.d.ts +4 -4
  69. package/staging/lib/stage.d.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"angular-three-soba-materials.mjs","sources":["../../../../libs/soba/materials/src/lib/custom-shader-material.ts","../../../../libs/soba/materials/src/lib/mesh-distort-material.ts","../../../../libs/soba/materials/src/lib/mesh-portal-material.ts","../../../../libs/soba/materials/src/lib/mesh-reflector-material.ts","../../../../libs/soba/materials/src/lib/mesh-refraction-material.ts","../../../../libs/soba/materials/src/lib/mesh-transmission-material.ts","../../../../libs/soba/materials/src/lib/mesh-wobble-material.ts","../../../../libs/soba/materials/src/lib/point-material.ts","../../../../libs/soba/materials/src/angular-three-soba-materials.ts"],"sourcesContent":["import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\teffect,\n\tElementRef,\n\tinput,\n} from '@angular/core';\nimport { is, NgtAnyRecord, NgtArgs, NgtAttachable, omit, pick } from 'angular-three';\nimport * as THREE from 'three';\nimport CustomShaderMaterial from 'three-custom-shader-material/vanilla';\n\n@Component({\n\tselector: 'ngts-custom-shader-material',\n\ttemplate: `\n\t\t<ngt-primitive *args=\"[material()]\" [attach]=\"attach()\" [parameters]=\"parameters()\">\n\t\t\t<ng-content />\n\t\t</ngt-primitive>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtArgs],\n})\nexport class NgtsCustomShaderMaterial {\n\tbaseMaterial = input.required<THREE.Material | typeof THREE.Material | ElementRef<THREE.Material>>();\n\tattach = input<NgtAttachable>('material');\n\toptions = input({} as Omit<ConstructorParameters<typeof CustomShaderMaterial>[0], 'baseMaterial'>);\n\tparameters = omit(this.options, ['fragmentShader', 'vertexShader', 'uniforms', 'cacheKey']);\n\n\tprivate base = computed(() => {\n\t\tconst baseMaterial = this.baseMaterial();\n\t\treturn is.ref(baseMaterial) ? baseMaterial.nativeElement : baseMaterial;\n\t});\n\n\tprivate fragmentShader = pick(this.options, 'fragmentShader');\n\tprivate vertexShader = pick(this.options, 'vertexShader');\n\tprivate uniforms = pick(this.options, 'uniforms');\n\tprivate cacheKey = pick(this.options, 'cacheKey');\n\n\tmaterial = computed(() => {\n\t\tconst [base, fragmentShader, vertexShader, uniforms, cacheKey] = [\n\t\t\tthis.base(),\n\t\t\tthis.fragmentShader(),\n\t\t\tthis.vertexShader(),\n\t\t\tthis.uniforms(),\n\t\t\tthis.cacheKey(),\n\t\t];\n\n\t\t// NOTE: this is specific to angular-three\n\t\tif (is.instance(base)) {\n\t\t\tdelete (base as NgtAnyRecord)['__ngt__'];\n\t\t\tdelete (base as NgtAnyRecord)['__ngt_renderer__'];\n\t\t}\n\n\t\treturn new CustomShaderMaterial({\n\t\t\tbaseMaterial: base,\n\t\t\tfragmentShader,\n\t\t\tvertexShader,\n\t\t\tuniforms,\n\t\t\tcacheKey,\n\t\t});\n\t});\n\n\tconstructor() {\n\t\teffect((onCleanup) => {\n\t\t\tconst material = this.material();\n\t\t\tonCleanup(() => material.dispose());\n\t\t});\n\t}\n}\n","import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, DestroyRef, inject, input } from '@angular/core';\nimport { injectBeforeRender, NgtArgs, NgtAttachable, NgtThreeElements, omit, pick } from 'angular-three';\nimport { MeshDistortMaterial, MeshDistortMaterialParameters } from 'angular-three-soba/vanilla-exports';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\n\nexport interface NgtsMeshDistortMaterialOptions\n\textends Partial<MeshDistortMaterialParameters>,\n\t\tPartial<NgtThreeElements['ngt-mesh-physical-material']> {\n\tspeed: number;\n\tfactor?: number;\n}\n\nconst defaultOptions: NgtsMeshDistortMaterialOptions = {\n\tspeed: 1,\n};\n\n@Component({\n\tselector: 'ngts-mesh-distort-material',\n\ttemplate: `\n\t\t<ngt-primitive *args=\"[material]\" [attach]=\"attach()\" [parameters]=\"parameters()\">\n\t\t\t<ng-content />\n\t\t</ngt-primitive>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtArgs],\n})\nexport class NgtsMeshDistortMaterial {\n\tattach = input<NgtAttachable>('material');\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\tprotected parameters = omit(this.options, ['speed']);\n\n\tmaterial = new MeshDistortMaterial();\n\n\tprivate speed = pick(this.options, 'speed');\n\n\tconstructor() {\n\t\tinject(DestroyRef).onDestroy(() => this.material.dispose());\n\n\t\tinjectBeforeRender(({ clock }) => {\n\t\t\tthis.material.time = clock.elapsedTime * this.speed();\n\t\t});\n\t}\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tDirective,\n\teffect,\n\tElementRef,\n\tinput,\n\tsignal,\n\tTemplateRef,\n\tviewChild,\n} from '@angular/core';\nimport {\n\textend,\n\tgetInstanceState,\n\tinjectBeforeRender,\n\tinjectStore,\n\tis,\n\tNgtAttachable,\n\tNgtComputeFunction,\n\tNgtThreeElements,\n\tomit,\n\tpick,\n} from 'angular-three';\nimport { getVersion, injectFBO, injectIntersect } from 'angular-three-soba/misc';\nimport { NgtsRenderTexture } from 'angular-three-soba/staging';\nimport {\n\tMeshPortalMaterial,\n\tmeshPortalMaterialApplySDF,\n\tNgtMeshPortalMaterial,\n} from 'angular-three-soba/vanilla-exports';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { FullScreenQuad } from 'three-stdlib';\n\n/**\n * This directive is used inside of the render texture, hence has access to the render texture store (a portal store)\n */\n@Directive({ selector: 'ngts-manage-portal-scene' })\nexport class ManagePortalScene {\n\tevents = input<boolean>();\n\trootScene = input.required<THREE.Scene>();\n\tmaterial = input.required<NgtMeshPortalMaterial>();\n\tpriority = input.required<number>();\n\tworldUnits = input.required<boolean>();\n\n\tconstructor() {\n\t\tconst renderTextureStore = injectStore();\n\n\t\tconst buffer1 = injectFBO();\n\t\tconst buffer2 = injectFBO();\n\n\t\tconst fullScreenQuad = computed(() => {\n\t\t\t// This fullscreen-quad is used to blend the two textures\n\t\t\tconst blend = { value: 0 };\n\t\t\tconst quad = new FullScreenQuad(\n\t\t\t\tnew THREE.ShaderMaterial({\n\t\t\t\t\tuniforms: {\n\t\t\t\t\t\ta: { value: buffer1.texture },\n\t\t\t\t\t\tb: { value: buffer2.texture },\n\t\t\t\t\t\tblend,\n\t\t\t\t\t},\n\t\t\t\t\tvertexShader: /*glsl*/ `\n\t\t varying vec2 vUv;\n\t\t void main() {\n\t\t vUv = uv;\n\t\t gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t }`,\n\t\t\t\t\tfragmentShader: /*glsl*/ `\n\t\t uniform sampler2D a;\n\t\t uniform sampler2D b;\n\t\t uniform float blend;\n\t\t varying vec2 vUv;\n\t\t #include <packing>\n\t\t void main() {\n\t\t vec4 ta = texture2D(a, vUv);\n\t\t vec4 tb = texture2D(b, vUv);\n\t\t gl_FragColor = mix(tb, ta, blend);\n\t\t #include <tonemapping_fragment>\n\t\t #include <${getVersion() >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n\t\t }`,\n\t\t\t\t}),\n\t\t\t);\n\t\t\treturn [quad, blend] as const;\n\t\t});\n\n\t\teffect(() => {\n\t\t\trenderTextureStore.scene().matrixAutoUpdate = false;\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst [events, setEvents] = [this.events(), renderTextureStore.setEvents()];\n\t\t\tif (!events) return;\n\t\t\tsetEvents({ enabled: events });\n\t\t});\n\n\t\tinjectBeforeRender(\n\t\t\t({ gl, camera }) => {\n\t\t\t\tconst material = this.material();\n\n\t\t\t\tconst instanceState = getInstanceState(material);\n\t\t\t\tif (!instanceState) return;\n\n\t\t\t\tconst parent = instanceState.parent();\n\t\t\t\tif (!parent) return;\n\n\t\t\t\tconst priority = this.priority();\n\t\t\t\tconst materialBlend = 'blend' in material && typeof material.blend === 'number' ? material.blend : 0;\n\t\t\t\tconst [worldUnits, rootScene, scene, [quad, blend]] = [\n\t\t\t\t\tthis.worldUnits(),\n\t\t\t\t\tthis.rootScene(),\n\t\t\t\t\trenderTextureStore.snapshot.scene,\n\t\t\t\t\tfullScreenQuad(),\n\t\t\t\t];\n\t\t\t\t// Move portal contents along with the parent if worldUnits is true\n\t\t\t\tif (!worldUnits) {\n\t\t\t\t\t// If the portal renders exclusively the original scene needs to be updated\n\t\t\t\t\tif (priority && materialBlend === 1) parent['updateWorldMatrix'](true, false);\n\t\t\t\t\tscene.matrixWorld.copy(parent['matrixWorld']);\n\t\t\t\t} else {\n\t\t\t\t\tscene.matrixWorld.identity();\n\t\t\t\t}\n\n\t\t\t\t// This bit is only necessary if the portal is blended, now it has a render-priority\n\t\t\t\t// and will take over the render loop\n\t\t\t\tif (priority) {\n\t\t\t\t\tif (materialBlend > 0 && materialBlend < 1) {\n\t\t\t\t\t\t// If blend is ongoing (> 0 and < 1) then we need to render both the root scene\n\t\t\t\t\t\t// and the portal scene, both will then be mixed in the quad from above\n\t\t\t\t\t\tblend.value = materialBlend;\n\t\t\t\t\t\tgl.setRenderTarget(buffer1);\n\t\t\t\t\t\tgl.render(scene, camera);\n\t\t\t\t\t\tgl.setRenderTarget(buffer2);\n\t\t\t\t\t\tgl.render(rootScene, camera);\n\t\t\t\t\t\tgl.setRenderTarget(null);\n\t\t\t\t\t\tquad.render(gl);\n\t\t\t\t\t} else if (materialBlend === 1) {\n\t\t\t\t\t\t// However if blend is 1 we only need to render the portal scene\n\t\t\t\t\t\tgl.render(scene, camera);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ priority: this.priority },\n\t\t);\n\t}\n}\n\nexport interface NgtsMeshPortalMaterialOptions extends Partial<NgtThreeElements['ngt-shader-material']> {\n\t/** Mix the portals own scene with the world scene, 0 = world scene render,\n\t * 0.5 = both scenes render, 1 = portal scene renders, defaults to 0. */\n\tblend: number;\n\t/** Edge fade blur, 0 = no blur (default) */\n\tblur: number;\n\t/** SDF resolution, the smaller the faster is the start-up time (default: 512) */\n\tresolution: number;\n\t/** By default portals use relative coordinates, contents are affects by the local matrix transform */\n\tworldUnits: boolean;\n\t/** Optional event priority, defaults to 0 */\n\teventPriority: number;\n\t/** Optional render priority, defaults to 0 */\n\trenderPriority: number;\n\t/** Optionally diable events inside the portal, defaults to false */\n\tevents: boolean;\n}\n\nconst defaultOptions: NgtsMeshPortalMaterialOptions = {\n\tblend: 0,\n\tblur: 0,\n\tresolution: 512,\n\tworldUnits: false,\n\teventPriority: 0,\n\trenderPriority: 0,\n\tevents: false,\n};\n\n@Component({\n\tselector: 'ngts-mesh-portal-material',\n\ttemplate: `\n\t\t<ngt-mesh-portal-material\n\t\t\t#material\n\t\t\t[attach]=\"attach()\"\n\t\t\t[blur]=\"blur()\"\n\t\t\t[blend]=\"0\"\n\t\t\t[resolution]=\"materialResolution()\"\n\t\t\t[parameters]=\"parameters()\"\n\t\t>\n\t\t\t<ngts-render-texture\n\t\t\t\t[options]=\"{\n\t\t\t\t\tframes: renderTextureFrames(),\n\t\t\t\t\teventPriority: eventPriority(),\n\t\t\t\t\trenderPriority: renderPriority(),\n\t\t\t\t\tcompute: renderTextureCompute,\n\t\t\t\t}\"\n\t\t\t>\n\t\t\t\t<ng-template renderTextureContent let-injector=\"injector\">\n\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"content()\" [ngTemplateOutletInjector]=\"injector\" />\n\t\t\t\t\t<ngts-manage-portal-scene\n\t\t\t\t\t\t[events]=\"events()\"\n\t\t\t\t\t\t[rootScene]=\"rootScene()\"\n\t\t\t\t\t\t[priority]=\"priority()\"\n\t\t\t\t\t\t[material]=\"material\"\n\t\t\t\t\t\t[worldUnits]=\"worldUnits()\"\n\t\t\t\t\t/>\n\t\t\t\t</ng-template>\n\t\t\t</ngts-render-texture>\n\t\t</ngt-mesh-portal-material>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtsRenderTexture, ManagePortalScene, NgTemplateOutlet],\n})\nexport class NgtsMeshPortalMaterial {\n\tattach = input<NgtAttachable>('material');\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\tprotected parameters = omit(this.options, [\n\t\t'blur',\n\t\t'resolution',\n\t\t'worldUnits',\n\t\t'eventPriority',\n\t\t'renderPriority',\n\t\t'events',\n\t]);\n\n\tprotected blur = pick(this.options, 'blur');\n\tprotected eventPriority = pick(this.options, 'eventPriority');\n\tprotected renderPriority = pick(this.options, 'renderPriority');\n\tprotected events = pick(this.options, 'events');\n\tprotected worldUnits = pick(this.options, 'worldUnits');\n\n\tmaterialRef = viewChild.required<ElementRef<InstanceType<typeof MeshPortalMaterial>>>('material');\n\tprotected content = contentChild.required(TemplateRef);\n\n\tprivate store = injectStore();\n\tprotected rootScene = this.store.scene;\n\n\tprotected materialResolution = computed(() => [\n\t\tthis.store.size.width() * this.store.viewport.dpr(),\n\t\tthis.store.size.height() * this.store.viewport.dpr(),\n\t]);\n\tprivate resolution = pick(this.options, 'resolution');\n\n\tprivate parent = signal<THREE.Mesh | null>(null);\n\tprivate visible = injectIntersect(this.parent, { source: signal(true) });\n\n\tprotected renderTextureFrames = computed(() => (this.visible() ? Infinity : 0));\n\n\tprotected renderTextureCompute = (...args: Parameters<NgtComputeFunction>) => {\n\t\tconst [parent, material] = [this.parent(), this.materialRef().nativeElement];\n\t\tif (!parent) return false;\n\n\t\tconst [event, state] = args;\n\n\t\tstate.snapshot.pointer.set(\n\t\t\t(event.offsetX / state.snapshot.size.width) * 2 - 1,\n\t\t\t-(event.offsetY / state.snapshot.size.height) * 2 + 1,\n\t\t);\n\t\tstate.snapshot.raycaster.setFromCamera(state.snapshot.pointer, state.snapshot.camera);\n\n\t\tif ('blend' in material && material.blend === 0) {\n\t\t\t// We run a quick check against the parent, if it isn't hit there's no need to raycast at all\n\t\t\tconst [intersection] = state.snapshot.raycaster.intersectObject(parent);\n\t\t\tif (!intersection) {\n\t\t\t\t// Cancel out the raycast camera if the parent mesh isn't hit\n\t\t\t\tObject.assign(state.snapshot.raycaster, { camera: undefined });\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn;\n\t};\n\n\tprotected priority = signal(0);\n\n\tconstructor() {\n\t\textend({ MeshPortalMaterial });\n\n\t\teffect(() => {\n\t\t\tconst material = this.materialRef().nativeElement;\n\n\t\t\tconst instanceState = getInstanceState(material);\n\t\t\tif (!instanceState) return;\n\n\t\t\tconst materialParent = instanceState.parent();\n\t\t\tif (!materialParent || !is.three<THREE.Mesh>(materialParent, 'isMesh')) return;\n\n\t\t\t// Since the ref above is not tied to a mesh directly (we're inside a material),\n\t\t\t// it has to be tied to the parent mesh here\n\t\t\tthis.parent.set(materialParent);\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst events = this.events();\n\t\t\tif (!events) return;\n\n\t\t\tconst setEvents = this.store.setEvents();\n\t\t\tsetEvents({ enabled: !events });\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst [material, parent] = [this.materialRef().nativeElement, this.parent()];\n\t\t\tif (!parent) return;\n\n\t\t\tconst [resolution, blur, gl] = [this.resolution(), this.blur(), this.store.gl()];\n\n\t\t\t// apply the SDF mask once\n\t\t\tif (blur && material.sdf == null) {\n\t\t\t\tmeshPortalMaterialApplySDF(parent, resolution, gl);\n\t\t\t}\n\t\t});\n\n\t\tinjectBeforeRender(() => {\n\t\t\tconst material = this.materialRef().nativeElement;\n\t\t\tconst priority =\n\t\t\t\t'blend' in material && typeof material.blend === 'number' && material.blend > 0\n\t\t\t\t\t? Math.max(1, this.renderPriority())\n\t\t\t\t\t: 0;\n\n\t\t\t// If blend is > 0 then the portal is being entered, the render-priority must change\n\t\t\tif (this.priority() !== priority) {\n\t\t\t\tthis.priority.set(priority);\n\t\t\t}\n\t\t});\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tDestroyRef,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tuntracked,\n\tviewChild,\n} from '@angular/core';\nimport {\n\tapplyProps,\n\tgetInstanceState,\n\tinjectBeforeRender,\n\tinjectStore,\n\tNgtAnyRecord,\n\tNgtArgs,\n\tNgtAttachable,\n\tNgtThreeElements,\n\tomit,\n\tpick,\n} from 'angular-three';\nimport { BlurPass, MeshReflectorMaterial } from 'angular-three-soba/vanilla-exports';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\n\nexport interface NgtsMeshReflectorMaterialOptions extends Partial<NgtThreeElements['ngt-mesh-standard-material']> {\n\tresolution: number;\n\tmixBlur: number;\n\tmixStrength: number;\n\tblur: [number, number] | number;\n\tmirror: number;\n\tminDepthThreshold: number;\n\tmaxDepthThreshold: number;\n\tdepthScale: number;\n\tdepthToBlurRatioBias: number;\n\tdistortion: number;\n\tmixContrast: number;\n\treflectorOffset: number;\n\tdistortionMap?: THREE.Texture;\n}\n\nconst defaultOptions: NgtsMeshReflectorMaterialOptions = {\n\tmixBlur: 0,\n\tmixStrength: 1,\n\tresolution: 256,\n\tblur: [0, 0],\n\tminDepthThreshold: 0.9,\n\tmaxDepthThreshold: 1,\n\tdepthScale: 0,\n\tdepthToBlurRatioBias: 0.25,\n\tmirror: 0,\n\tdistortion: 1,\n\tmixContrast: 1,\n\treflectorOffset: 0,\n};\n\n@Component({\n\tselector: 'ngts-mesh-reflector-material',\n\ttemplate: `\n\t\t<ngt-primitive #material *args=\"[material()]\" [attach]=\"attach()\">\n\t\t\t<ng-content />\n\t\t</ngt-primitive>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtArgs],\n})\nexport class NgtsMeshReflectorMaterial {\n\tattach = input<NgtAttachable>('material');\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\tprivate parameters = omit(this.options, [\n\t\t'distortionMap',\n\t\t'resolution',\n\t\t'mixBlur',\n\t\t'mixStrength',\n\t\t'blur',\n\t\t'minDepthThreshold',\n\t\t'maxDepthThreshold',\n\t\t'depthScale',\n\t\t'depthToBlurRatioBias',\n\t\t'mirror',\n\t\t'distortion',\n\t\t'mixContrast',\n\t\t'reflectorOffset',\n\t]);\n\n\tprivate store = injectStore();\n\n\tmaterialRef = viewChild<ElementRef<MeshReflectorMaterial>>('material');\n\n\tprivate reflectOptions = pick(this.options, [\n\t\t'distortionMap',\n\t\t'resolution',\n\t\t'mixBlur',\n\t\t'mixStrength',\n\t\t'blur',\n\t\t'minDepthThreshold',\n\t\t'maxDepthThreshold',\n\t\t'depthScale',\n\t\t'depthToBlurRatioBias',\n\t\t'mirror',\n\t\t'distortion',\n\t\t'mixContrast',\n\t\t'reflectorOffset',\n\t]);\n\n\tprivate blur = pick(this.reflectOptions, 'blur');\n\n\tprivate normalizedBlur = computed(() => {\n\t\tconst blur = this.blur();\n\t\treturn Array.isArray(blur) ? blur : [blur, blur];\n\t});\n\tprivate hasBlur = computed(() => this.normalizedBlur()[0] + this.normalizedBlur()[1] > 0);\n\n\tprivate reflectorPlane = new THREE.Plane();\n\tprivate normal = new THREE.Vector3();\n\tprivate reflectorWorldPosition = new THREE.Vector3();\n\tprivate cameraWorldPosition = new THREE.Vector3();\n\tprivate rotationMatrix = new THREE.Matrix4();\n\tprivate lookAtPosition = new THREE.Vector3(0, 0, -1);\n\tprivate clipPlane = new THREE.Vector4();\n\tprivate view = new THREE.Vector3();\n\tprivate target = new THREE.Vector3();\n\tprivate q = new THREE.Vector4();\n\tprivate textureMatrix = new THREE.Matrix4();\n\tprivate virtualCamera = new THREE.PerspectiveCamera();\n\n\tprivate reflectState = computed(() => {\n\t\tconst [\n\t\t\tgl,\n\t\t\t{\n\t\t\t\tresolution,\n\t\t\t\tminDepthThreshold,\n\t\t\t\tmaxDepthThreshold,\n\t\t\t\tdepthScale,\n\t\t\t\tdepthToBlurRatioBias,\n\t\t\t\tmirror,\n\t\t\t\tmixBlur,\n\t\t\t\tmixStrength,\n\t\t\t\tdistortion,\n\t\t\t\tdistortionMap,\n\t\t\t\tmixContrast,\n\t\t\t},\n\t\t\tblur,\n\t\t\thasBlur,\n\t\t] = [this.store.gl(), this.reflectOptions(), this.normalizedBlur(), this.hasBlur()];\n\n\t\tconst renderTargetParameters = {\n\t\t\tminFilter: THREE.LinearFilter,\n\t\t\tmagFilter: THREE.LinearFilter,\n\t\t\ttype: THREE.HalfFloatType,\n\t\t};\n\n\t\tconst fbo1 = new THREE.WebGLRenderTarget(resolution, resolution, renderTargetParameters);\n\t\tfbo1.depthBuffer = true;\n\t\tfbo1.depthTexture = new THREE.DepthTexture(resolution, resolution);\n\t\tfbo1.depthTexture.format = THREE.DepthFormat;\n\t\tfbo1.depthTexture.type = THREE.UnsignedShortType;\n\t\tconst fbo2 = new THREE.WebGLRenderTarget(resolution, resolution, renderTargetParameters);\n\n\t\tconst blurPass = new BlurPass({\n\t\t\tgl,\n\t\t\tresolution,\n\t\t\twidth: blur[0],\n\t\t\theight: blur[1],\n\t\t\tminDepthThreshold,\n\t\t\tmaxDepthThreshold,\n\t\t\tdepthScale,\n\t\t\tdepthToBlurRatioBias,\n\t\t});\n\n\t\tconst defines: NgtAnyRecord = {};\n\n\t\tif (hasBlur) {\n\t\t\tdefines['USE_BLUR'] = '';\n\t\t}\n\n\t\tif (depthScale > 0) {\n\t\t\tdefines['USE_DEPTH'] = '';\n\t\t}\n\n\t\tif (distortionMap) {\n\t\t\tdefines['USE_DISTORTION'] = '';\n\t\t}\n\n\t\tconst reflectorParameters = {\n\t\t\tmirror,\n\t\t\ttextureMatrix: this.textureMatrix,\n\t\t\tmixBlur,\n\t\t\ttDiffuse: fbo1.texture,\n\t\t\ttDepth: fbo1.depthTexture,\n\t\t\ttDiffuseBlur: fbo2.texture,\n\t\t\thasBlur,\n\t\t\tmixStrength,\n\t\t\tminDepthThreshold,\n\t\t\tmaxDepthThreshold,\n\t\t\tdepthScale,\n\t\t\tdepthToBlurRatioBias,\n\t\t\tdistortion,\n\t\t\tdistortionMap,\n\t\t\tmixContrast,\n\t\t\tdefines,\n\t\t};\n\n\t\treturn { fbo1, fbo2, blurPass, reflectorParameters };\n\t});\n\n\tprivate definesKey = computed(() => {\n\t\tconst defines = this.reflectState().reflectorParameters.defines;\n\t\treturn Object.entries(defines).reduce((acc, [key, value]) => (value != null ? `${acc} ${key}` : acc), '');\n\t});\n\n\tmaterial = computed(() => {\n\t\tconst prevMaterial = untracked(this.materialRef)?.nativeElement;\n\n\t\tif (prevMaterial) {\n\t\t\tprevMaterial.dispose();\n\t\t\tdelete (prevMaterial as NgtAnyRecord)['__ngt__'];\n\t\t\tdelete (prevMaterial as NgtAnyRecord)['__ngt_renderer__'];\n\t\t}\n\n\t\t// tracking defines key so that the material is recreated when the defines change\n\t\tthis.definesKey();\n\t\treturn new MeshReflectorMaterial();\n\t});\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst material = this.materialRef()?.nativeElement;\n\t\t\tif (!material) return;\n\t\t\tconst { reflectorParameters } = this.reflectState();\n\t\t\tapplyProps(material, { ...reflectorParameters, ...this.parameters() });\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tconst material = this.materialRef()?.nativeElement;\n\t\t\tif (material) {\n\t\t\t\tmaterial.dispose();\n\t\t\t\tdelete (material as NgtAnyRecord)['__ngt__'];\n\t\t\t\tdelete (material as NgtAnyRecord)['__ngt_renderer__'];\n\t\t\t}\n\t\t});\n\n\t\tinjectBeforeRender(({ gl, scene }) => {\n\t\t\tconst material = this.materialRef()?.nativeElement;\n\t\t\tif (!material) return;\n\n\t\t\tconst instanceState = getInstanceState(material);\n\t\t\tif (!instanceState) return;\n\n\t\t\tconst parent = Reflect.get(material, 'parent') ?? untracked(instanceState.parent);\n\t\t\tif (!parent) return;\n\n\t\t\tconst { fbo1, fbo2, blurPass } = this.reflectState();\n\t\t\tconst hasBlur = this.hasBlur();\n\n\t\t\tparent.visible = false;\n\t\t\tconst currentXrEnabled = gl.xr.enabled;\n\t\t\tconst currentShadowAutoUpdate = gl.shadowMap.autoUpdate;\n\t\t\tthis.beforeRender();\n\t\t\tgl.xr.enabled = false;\n\t\t\tgl.shadowMap.autoUpdate = false;\n\t\t\tgl.setRenderTarget(fbo1);\n\t\t\tgl.state.buffers.depth.setMask(true);\n\t\t\tif (!gl.autoClear) gl.clear();\n\t\t\tgl.render(scene, this.virtualCamera);\n\t\t\tif (hasBlur) blurPass.render(gl, fbo1, fbo2);\n\t\t\tgl.xr.enabled = currentXrEnabled;\n\t\t\tgl.shadowMap.autoUpdate = currentShadowAutoUpdate;\n\t\t\tparent.visible = true;\n\t\t\tgl.setRenderTarget(null);\n\t\t});\n\t}\n\n\tprivate beforeRender() {\n\t\tconst material = this.materialRef()?.nativeElement;\n\t\tif (!material) return;\n\n\t\tconst instanceState = getInstanceState(material);\n\t\tif (!instanceState) return;\n\n\t\tconst parent = Reflect.get(material, 'parent') ?? untracked(instanceState.parent);\n\t\tif (!parent) return;\n\n\t\tconst { camera } = this.store.snapshot;\n\t\tconst { reflectorOffset } = untracked(this.reflectOptions);\n\n\t\tthis.reflectorWorldPosition.setFromMatrixPosition(parent.matrixWorld);\n\t\tthis.cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld);\n\t\tthis.rotationMatrix.extractRotation(parent.matrixWorld);\n\t\tthis.normal.set(0, 0, 1);\n\t\tthis.normal.applyMatrix4(this.rotationMatrix);\n\t\tthis.reflectorWorldPosition.addScaledVector(this.normal, reflectorOffset);\n\t\tthis.view.subVectors(this.reflectorWorldPosition, this.cameraWorldPosition);\n\t\t// Avoid rendering when reflector is facing away\n\t\tif (this.view.dot(this.normal) > 0) return;\n\t\tthis.view.reflect(this.normal).negate();\n\t\tthis.view.add(this.reflectorWorldPosition);\n\t\tthis.rotationMatrix.extractRotation(camera.matrixWorld);\n\t\tthis.lookAtPosition.set(0, 0, -1);\n\t\tthis.lookAtPosition.applyMatrix4(this.rotationMatrix);\n\t\tthis.lookAtPosition.add(this.cameraWorldPosition);\n\t\tthis.target.subVectors(this.reflectorWorldPosition, this.lookAtPosition);\n\t\tthis.target.reflect(this.normal).negate();\n\t\tthis.target.add(this.reflectorWorldPosition);\n\t\tthis.virtualCamera.position.copy(this.view);\n\t\tthis.virtualCamera.up.set(0, 1, 0);\n\t\tthis.virtualCamera.up.applyMatrix4(this.rotationMatrix);\n\t\tthis.virtualCamera.up.reflect(this.normal);\n\t\tthis.virtualCamera.lookAt(this.target);\n\t\tthis.virtualCamera.far = camera.far; // Used in WebGLBackground\n\t\tthis.virtualCamera.updateMatrixWorld();\n\t\tthis.virtualCamera.projectionMatrix.copy(camera.projectionMatrix);\n\t\t// Update the texture matrix\n\t\tthis.textureMatrix.set(0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0);\n\t\tthis.textureMatrix.multiply(this.virtualCamera.projectionMatrix);\n\t\tthis.textureMatrix.multiply(this.virtualCamera.matrixWorldInverse);\n\t\tthis.textureMatrix.multiply(parent.matrixWorld);\n\t\t// Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html\n\t\t// Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf\n\t\tthis.reflectorPlane.setFromNormalAndCoplanarPoint(this.normal, this.reflectorWorldPosition);\n\t\tthis.reflectorPlane.applyMatrix4(this.virtualCamera.matrixWorldInverse);\n\t\tthis.clipPlane.set(\n\t\t\tthis.reflectorPlane.normal.x,\n\t\t\tthis.reflectorPlane.normal.y,\n\t\t\tthis.reflectorPlane.normal.z,\n\t\t\tthis.reflectorPlane.constant,\n\t\t);\n\t\tconst projectionMatrix = this.virtualCamera.projectionMatrix;\n\t\tthis.q.x = (Math.sign(this.clipPlane.x) + projectionMatrix.elements[8]) / projectionMatrix.elements[0];\n\t\tthis.q.y = (Math.sign(this.clipPlane.y) + projectionMatrix.elements[9]) / projectionMatrix.elements[5];\n\t\tthis.q.z = -1.0;\n\t\tthis.q.w = (1.0 + projectionMatrix.elements[10]) / projectionMatrix.elements[14];\n\t\t// Calculate the scaled plane vector\n\t\tthis.clipPlane.multiplyScalar(2.0 / this.clipPlane.dot(this.q));\n\t\t// Replacing the third row of the projection matrix\n\t\tprojectionMatrix.elements[2] = this.clipPlane.x;\n\t\tprojectionMatrix.elements[6] = this.clipPlane.y;\n\t\tprojectionMatrix.elements[10] = this.clipPlane.z + 1.0;\n\t\tprojectionMatrix.elements[14] = this.clipPlane.w;\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tDestroyRef,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tuntracked,\n\tviewChild,\n} from '@angular/core';\nimport {\n\tgetInstanceState,\n\tinjectBeforeRender,\n\tinjectStore,\n\tis,\n\tNgtAnyRecord,\n\tNgtArgs,\n\tNgtAttachable,\n\tNgtThreeElements,\n\tomit,\n\tpick,\n} from 'angular-three';\nimport { MeshRefractionMaterial } from 'angular-three-soba/shaders';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { MeshBVH, MeshBVHUniformStruct, SAH } from 'three-mesh-bvh';\n\nexport interface NgtsMeshRefractionMaterialOptions extends Partial<NgtThreeElements['ngt-shader-material']> {\n\t/** Number of ray-cast bounces, it can be expensive to have too many, 2 */\n\tbounces: number;\n\t/** Refraction index, 2.4 */\n\tior: number;\n\t/** Fresnel (strip light), 0 */\n\tfresnel: number;\n\t/** RGB shift intensity, can be expensive, 0 */\n\taberrationStrength: number;\n\t/** Color, white */\n\tcolor: THREE.ColorRepresentation;\n\t/** If this is on it uses fewer ray casts for the RGB shift sacrificing physical accuracy, true */\n\tfastChroma: boolean;\n}\n\nconst defaultOptions: NgtsMeshRefractionMaterialOptions = {\n\tbounces: 2,\n\tior: 2.4,\n\tfresnel: 0,\n\taberrationStrength: 0,\n\tcolor: 'white',\n\tfastChroma: true,\n};\n\n@Component({\n\tselector: 'ngts-mesh-refraction-material',\n\ttemplate: `\n\t\t<ngt-primitive\n\t\t\t*args=\"[material()]\"\n\t\t\t#material\n\t\t\t[attach]=\"attach()\"\n\t\t\t[parameters]=\"parameters()\"\n\t\t\t[envMap]=\"envMap()\"\n\t\t\t[aberrationStrength]=\"aberrationStrength()\"\n\t\t\t[resolution]=\"resolution()\"\n\t\t\t[defines]=\"defines()\"\n\t\t>\n\t\t\t<ng-content />\n\t\t</ngt-primitive>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtArgs],\n})\nexport class NgtsMeshRefractionMaterial {\n\tenvMap = input.required<THREE.CubeTexture | THREE.Texture>();\n\tattach = input<NgtAttachable>('material');\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\tprotected parameters = omit(this.options, ['fastChroma', 'aberrationStrength']);\n\n\tprivate fastChroma = pick(this.options, 'fastChroma');\n\tprotected aberrationStrength = pick(this.options, 'aberrationStrength');\n\n\tmaterialRef = viewChild<ElementRef<InstanceType<typeof MeshRefractionMaterial>>>('material');\n\n\tprivate store = injectStore();\n\n\tprotected resolution = computed(() => [this.store.size.width(), this.store.size.height()]);\n\tprotected defines = computed(() => {\n\t\tconst _defines = {} as { [key: string]: string };\n\t\tconst [envMap, aberrationStrength, fastChroma] = [\n\t\t\tuntracked(this.envMap),\n\t\t\tthis.aberrationStrength(),\n\t\t\tthis.fastChroma(),\n\t\t];\n\t\tconst isCubeMap = is.three<THREE.CubeTexture>(envMap, 'isCubeTexture');\n\n\t\tconst w = (isCubeMap ? envMap.image[0]?.width : envMap.image.width) ?? 1024;\n\t\tconst cubeSize = w / 4;\n\t\tconst _lodMax = Math.floor(Math.log2(cubeSize));\n\t\tconst _cubeSize = Math.pow(2, _lodMax);\n\t\tconst width = 3 * Math.max(_cubeSize, 16 * 7);\n\t\tconst height = 4 * _cubeSize;\n\n\t\tif (isCubeMap) _defines['ENVMAP_TYPE_CUBEM'] = '';\n\t\t_defines['CUBEUV_TEXEL_WIDTH'] = `${1.0 / width}`;\n\t\t_defines['CUBEUV_TEXEL_HEIGHT'] = `${1.0 / height}`;\n\t\t_defines['CUBEUV_MAX_MIP'] = `${_lodMax}.0`;\n\n\t\t// Add defines from chromatic aberration\n\t\tif (aberrationStrength > 0) _defines['CHROMATIC_ABERRATIONS'] = '';\n\t\tif (fastChroma) _defines['FAST_CHROMA'] = '';\n\n\t\treturn _defines;\n\t});\n\n\tprivate defineKeys = computed(() => {\n\t\treturn Object.keys(this.defines()).join(' ');\n\t});\n\n\tprotected material = computed(() => {\n\t\tconst prevMaterial = untracked(this.materialRef)?.nativeElement;\n\n\t\tif (prevMaterial) {\n\t\t\tprevMaterial.dispose();\n\t\t\tdelete (prevMaterial as NgtAnyRecord)['__ngt__'];\n\t\t\tdelete (prevMaterial as NgtAnyRecord)['__ngt_renderer__'];\n\t\t}\n\n\t\t// track by this.defineKeys\n\t\tthis.defineKeys();\n\t\treturn new MeshRefractionMaterial();\n\t});\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst material = this.materialRef()?.nativeElement;\n\t\t\tif (!material) return;\n\n\t\t\tconst instanceState = getInstanceState(material);\n\t\t\tif (!instanceState) return;\n\n\t\t\tconst parent = untracked(instanceState.parent);\n\t\t\tconst geometry = (parent as unknown as THREE.Mesh).geometry;\n\t\t\tif (geometry) {\n\t\t\t\tconst bvh = new MeshBVHUniformStruct();\n\t\t\t\tbvh.updateFrom(new MeshBVH(geometry.clone().toNonIndexed(), { strategy: SAH }));\n\t\t\t\tObject.assign(material, { bvh });\n\t\t\t}\n\t\t});\n\n\t\tinjectBeforeRender(({ camera }) => {\n\t\t\tconst material = this.materialRef()?.nativeElement;\n\t\t\tif (material) {\n\t\t\t\tObject.assign(material, {\n\t\t\t\t\tviewMatrixInverse: camera.matrixWorld,\n\t\t\t\t\tprojectionMatrixInverse: camera.projectionMatrixInverse,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tconst material = this.materialRef()?.nativeElement;\n\t\t\tif (material) {\n\t\t\t\tmaterial.dispose();\n\t\t\t\tdelete (material as NgtAnyRecord)['__ngt__'];\n\t\t\t\tdelete (material as NgtAnyRecord)['__ngt_renderer__'];\n\t\t\t}\n\t\t});\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tDestroyRef,\n\tElementRef,\n\tinject,\n\tinput,\n\tuntracked,\n\tviewChild,\n} from '@angular/core';\nimport {\n\tgetInstanceState,\n\tinjectBeforeRender,\n\tNgtAnyRecord,\n\tNgtArgs,\n\tNgtAttachable,\n\tNgtThreeElements,\n\tomit,\n\tpick,\n} from 'angular-three';\nimport { injectFBO } from 'angular-three-soba/misc';\nimport { MeshDiscardMaterial, MeshTransmissionMaterial } from 'angular-three-soba/vanilla-exports';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\n\nexport type MeshTransmissionMaterialOptions = Exclude<\n\tConstructorParameters<typeof MeshTransmissionMaterial>[0],\n\tundefined\n>;\n\nexport type NgtsMeshTransmissionMaterialOptions = Partial<NgtThreeElements['ngt-mesh-physical-material']> &\n\tOmit<MeshTransmissionMaterialOptions, 'buffer' | 'anisotropicBlur' | 'samples' | 'transmissionSampler'> & {\n\t\tanisotropicBlur?: number;\n\t\tbuffer?: THREE.Texture;\n\t\t/** transmissionSampler, you can use the threejs transmission sampler texture that is\n\t\t * generated once for all transmissive materials. The upside is that it can be faster if you\n\t\t * use multiple MeshPhysical and Transmission materials, the downside is that transmissive materials\n\t\t * using this can't see other transparent or transmissive objects, default: false */\n\t\ttransmissionSampler: boolean;\n\t\t/** Render the backside of the material (more cost, better results), default: false */\n\t\tbackside: boolean;\n\t\t/** Backside thickness (when backside is true), default: 0 */\n\t\tbacksideThickness: number;\n\t\tbacksideEnvMapIntensity: number;\n\t\t/** Resolution of the local buffer, default: undefined (fullscreen) */\n\t\tresolution?: number;\n\t\t/** Resolution of the local buffer for backfaces, default: undefined (fullscreen) */\n\t\tbacksideResolution?: number;\n\t\t/** Refraction samples, default: 6 */\n\t\tsamples: number;\n\t\t/** Buffer scene background (can be a texture, a cubetexture or a color), default: null */\n\t\tbackground?: THREE.Texture | THREE.Color | null;\n\t};\n\nconst defaultOptions: NgtsMeshTransmissionMaterialOptions = {\n\ttransmissionSampler: false,\n\tbackside: false,\n\tside: THREE.FrontSide,\n\ttransmission: 1,\n\tthickness: 0,\n\tbacksideThickness: 0,\n\tbacksideEnvMapIntensity: 1,\n\tsamples: 10,\n};\n\n@Component({\n\tselector: 'ngts-mesh-transmission-material',\n\ttemplate: `\n\t\t<ngt-primitive\n\t\t\t*args=\"[material()]\"\n\t\t\t#material\n\t\t\t[attach]=\"attach()\"\n\t\t\t[parameters]=\"parameters()\"\n\t\t\t[_transmission]=\"transmission()\"\n\t\t\t[transmission]=\"transmissionSampler() ? transmission() : 0\"\n\t\t\t[buffer]=\"bufferTexture()\"\n\t\t\t[anisotropicBlur]=\"anisotropicBlurOption()\"\n\t\t\t[side]=\"side()\"\n\t\t\t[thickness]=\"thickness()\"\n\t\t>\n\t\t\t<ng-content />\n\t\t</ngt-primitive>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtArgs],\n})\nexport class NgtsMeshTransmissionMaterial {\n\tattach = input<NgtAttachable>('material');\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\tprotected parameters = omit(this.options, [\n\t\t'buffer',\n\t\t'transmissionSampler',\n\t\t'backside',\n\t\t'side',\n\t\t'transmission',\n\t\t'thickness',\n\t\t'backsideThickness',\n\t\t'backsideEnvMapIntensity',\n\t\t'samples',\n\t\t'resolution',\n\t\t'backsideResolution',\n\t\t'background',\n\t\t'anisotropy',\n\t\t'anisotropicBlur',\n\t]);\n\n\tprivate resolution = pick(this.options, 'resolution');\n\tprivate backsideResolution = pick(this.options, 'backsideResolution');\n\tprivate samples = pick(this.options, 'samples');\n\tprivate buffer = pick(this.options, 'buffer');\n\tprivate anisotropy = pick(this.options, 'anisotropy');\n\tprivate anisotropicBlur = pick(this.options, 'anisotropicBlur');\n\tprivate background = pick(this.options, 'background');\n\tprivate backside = pick(this.options, 'backside');\n\tprivate backsideThickness = pick(this.options, 'backsideThickness');\n\tprivate backsideEnvMapIntensity = pick(this.options, 'backsideEnvMapIntensity');\n\n\tprotected transmissionSampler = pick(this.options, 'transmissionSampler');\n\tprotected transmission = pick(this.options, 'transmission');\n\tprotected thickness = pick(this.options, 'thickness');\n\tprotected side = pick(this.options, 'side');\n\n\tmaterialRef = viewChild<ElementRef<MeshTransmissionMaterial & MeshTransmissionMaterialOptions>>('material');\n\n\tprivate backResolution = computed(() => this.backsideResolution() || this.resolution());\n\n\tprivate fboBack = injectFBO(() => ({ width: this.backResolution() }));\n\tprivate fboMain = injectFBO(() => ({ width: this.resolution() }));\n\n\tprotected bufferTexture = computed(() => this.buffer() || this.fboMain.texture);\n\tprotected anisotropicBlurOption = computed(() => this.anisotropicBlur() || this.anisotropy());\n\n\tprivate discardMaterial = new MeshDiscardMaterial();\n\n\tprotected material = computed(() => {\n\t\tconst previousMaterial = untracked(this.materialRef)?.nativeElement;\n\n\t\tif (previousMaterial) {\n\t\t\tpreviousMaterial.dispose();\n\t\t\tdelete (previousMaterial as NgtAnyRecord)['__ngt__'];\n\t\t\tdelete (previousMaterial as NgtAnyRecord)['__ngt_renderer__'];\n\t\t}\n\n\t\tconst [samples, transmissionSampler] = [this.samples(), this.transmissionSampler()];\n\t\treturn new MeshTransmissionMaterial({ samples, transmissionSampler });\n\t});\n\n\tconstructor() {\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tconst material = this.materialRef()?.nativeElement;\n\t\t\tif (material) {\n\t\t\t\tmaterial.dispose();\n\t\t\t\tdelete (material as NgtAnyRecord)['__ngt__'];\n\t\t\t\tdelete (material as NgtAnyRecord)['__ngt_renderer__'];\n\t\t\t}\n\t\t});\n\n\t\tlet oldBg: THREE.Texture | THREE.Color | null;\n\t\tlet oldEnvMapIntensity: number | undefined;\n\t\tlet oldTone: THREE.ToneMapping | undefined;\n\t\tlet parent: THREE.Mesh | undefined;\n\t\tinjectBeforeRender(({ clock, gl, scene, camera }) => {\n\t\t\tconst material = this.materialRef()?.nativeElement;\n\t\t\tif (!material) return;\n\n\t\t\tconst [\n\t\t\t\tfboMain,\n\t\t\t\tfboBack,\n\t\t\t\ttransmissionSampler,\n\t\t\t\tbackground,\n\t\t\t\tbackside,\n\t\t\t\tbacksideThickness,\n\t\t\t\tbacksideEnvMapIntensity,\n\t\t\t\tthickness,\n\t\t\t\tside,\n\t\t\t] = [\n\t\t\t\tthis.fboMain,\n\t\t\t\tthis.fboBack,\n\t\t\t\tthis.transmissionSampler(),\n\t\t\t\tthis.background(),\n\t\t\t\tthis.backside(),\n\t\t\t\tthis.backsideThickness(),\n\t\t\t\tthis.backsideEnvMapIntensity(),\n\t\t\t\tthis.thickness(),\n\t\t\t\tthis.side(),\n\t\t\t];\n\n\t\t\tmaterial.time = clock.elapsedTime;\n\t\t\t// Render only if the buffer matches the built-in and no transmission sampler is set\n\t\t\t// @ts-expect-error - we know material.buffer is not just undefined | null\n\t\t\tif (material.buffer === fboMain.texture && !transmissionSampler) {\n\t\t\t\tparent = getInstanceState(material)?.parent() as unknown as THREE.Mesh;\n\n\t\t\t\tif (parent) {\n\t\t\t\t\t// Save defaults\n\t\t\t\t\toldTone = gl.toneMapping;\n\t\t\t\t\toldBg = scene.background;\n\t\t\t\t\toldEnvMapIntensity = material.envMapIntensity;\n\n\t\t\t\t\t// Switch off tonemapping lest it double tone maps\n\t\t\t\t\t// Save the current background and set the HDR as the new BG\n\t\t\t\t\t// Use discardmaterial, the parent will be invisible, but it's shadows will still be cast\n\t\t\t\t\tgl.toneMapping = THREE.NoToneMapping;\n\t\t\t\t\tif (background) scene.background = background;\n\t\t\t\t\tparent.material = this.discardMaterial;\n\n\t\t\t\t\tif (backside) {\n\t\t\t\t\t\t// Render into the backside buffer\n\t\t\t\t\t\tgl.setRenderTarget(fboBack);\n\t\t\t\t\t\tgl.render(scene, camera);\n\t\t\t\t\t\t// And now prepare the material for the main render using the backside buffer\n\t\t\t\t\t\tparent.material = material;\n\t\t\t\t\t\tObject.assign(parent.material, {\n\t\t\t\t\t\t\tbuffer: fboBack.texture,\n\t\t\t\t\t\t\tthickness: backsideThickness,\n\t\t\t\t\t\t\tside: THREE.BackSide,\n\t\t\t\t\t\t\tenvMapIntensity: backsideEnvMapIntensity,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Render into the main buffer\n\t\t\t\t\tgl.setRenderTarget(fboMain);\n\t\t\t\t\tgl.render(scene, camera);\n\n\t\t\t\t\tparent.material = material;\n\t\t\t\t\tObject.assign(parent.material, {\n\t\t\t\t\t\tbuffer: fboMain.texture,\n\t\t\t\t\t\tthickness,\n\t\t\t\t\t\tside,\n\t\t\t\t\t\tenvMapIntensity: oldEnvMapIntensity,\n\t\t\t\t\t});\n\n\t\t\t\t\t// Set old state back\n\t\t\t\t\tscene.background = oldBg;\n\t\t\t\t\tgl.setRenderTarget(null);\n\t\t\t\t\tgl.toneMapping = oldTone;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n","import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, DestroyRef, inject, input } from '@angular/core';\nimport { injectBeforeRender, NgtArgs, NgtAttachable, NgtThreeElements, omit } from 'angular-three';\nimport { MeshWobbleMaterial, MeshWobbleMaterialParameters } from 'angular-three-soba/vanilla-exports';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\n\nexport interface NgtsMeshWobbleMaterialOptions\n\textends MeshWobbleMaterialParameters,\n\t\tPartial<NgtThreeElements['ngt-mesh-standard-material']> {\n\tspeed: number;\n}\n\nconst defaultOptions: NgtsMeshWobbleMaterialOptions = {\n\tspeed: 1,\n};\n\n@Component({\n\tselector: 'ngts-mesh-wobble-material',\n\ttemplate: `\n\t\t<ngt-primitive *args=\"[material]\" [parameters]=\"parameters()\" [attach]=\"attach()\">\n\t\t\t<ng-content />\n\t\t</ngt-primitive>\n\t`,\n\timports: [NgtArgs],\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsMeshWobbleMaterial {\n\tattach = input<NgtAttachable>('material');\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\tprotected parameters = omit(this.options, ['speed']);\n\n\tprotected material = new MeshWobbleMaterial();\n\n\tconstructor() {\n\t\tinject(DestroyRef).onDestroy(() => this.material.dispose());\n\n\t\tinjectBeforeRender(({ clock }) => {\n\t\t\tconst material = this.material;\n\t\t\tmaterial.time = clock.elapsedTime * this.options().speed;\n\t\t});\n\t}\n}\n","import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, DestroyRef, inject, input } from '@angular/core';\nimport { NgtArgs, NgtAttachable } from 'angular-three';\nimport { PointMaterial } from 'angular-three-soba/shaders';\nimport * as THREE from 'three';\n\n@Component({\n\tselector: 'ngts-point-material',\n\ttemplate: `\n\t\t<ngt-primitive *args=\"[material]\" [attach]=\"attach()\" [parameters]=\"options()\">\n\t\t\t<ng-content />\n\t\t</ngt-primitive>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtArgs],\n})\nexport class NgtsPointMaterial {\n\tattach = input<NgtAttachable>('material');\n\toptions = input({} as THREE.PointsMaterialParameters);\n\n\tprotected material = new PointMaterial(this.options());\n\n\tconstructor() {\n\t\tinject(DestroyRef).onDestroy(() => this.material.dispose());\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["defaultOptions"],"mappings":"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"}
1
+ {"version":3,"file":"angular-three-soba-materials.mjs","sources":["../../../../libs/soba/materials/src/lib/custom-shader-material.ts","../../../../libs/soba/materials/src/lib/mesh-distort-material.ts","../../../../libs/soba/materials/src/lib/mesh-portal-material.ts","../../../../libs/soba/materials/src/lib/mesh-reflector-material.ts","../../../../libs/soba/materials/src/lib/mesh-refraction-material.ts","../../../../libs/soba/materials/src/lib/mesh-transmission-material.ts","../../../../libs/soba/materials/src/lib/mesh-wobble-material.ts","../../../../libs/soba/materials/src/lib/point-material.ts","../../../../libs/soba/materials/src/angular-three-soba-materials.ts"],"sourcesContent":["import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\teffect,\n\tElementRef,\n\tinput,\n} from '@angular/core';\nimport { is, NgtAnyRecord, NgtArgs, NgtAttachable, omit, pick } from 'angular-three';\nimport * as THREE from 'three';\nimport CustomShaderMaterial from 'three-custom-shader-material/vanilla';\n\n@Component({\n\tselector: 'ngts-custom-shader-material',\n\ttemplate: `\n\t\t<ngt-primitive *args=\"[material()]\" [attach]=\"attach()\" [parameters]=\"parameters()\">\n\t\t\t<ng-content />\n\t\t</ngt-primitive>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtArgs],\n})\nexport class NgtsCustomShaderMaterial {\n\tbaseMaterial = input.required<THREE.Material | typeof THREE.Material | ElementRef<THREE.Material>>();\n\tattach = input<NgtAttachable>('material');\n\toptions = input({} as Omit<ConstructorParameters<typeof CustomShaderMaterial>[0], 'baseMaterial'>);\n\tparameters = omit(this.options, ['fragmentShader', 'vertexShader', 'uniforms', 'cacheKey']);\n\n\tprivate base = computed(() => {\n\t\tconst baseMaterial = this.baseMaterial();\n\t\treturn is.ref(baseMaterial) ? baseMaterial.nativeElement : baseMaterial;\n\t});\n\n\tprivate fragmentShader = pick(this.options, 'fragmentShader');\n\tprivate vertexShader = pick(this.options, 'vertexShader');\n\tprivate uniforms = pick(this.options, 'uniforms');\n\tprivate cacheKey = pick(this.options, 'cacheKey');\n\n\tmaterial = computed(() => {\n\t\tconst [base, fragmentShader, vertexShader, uniforms, cacheKey] = [\n\t\t\tthis.base(),\n\t\t\tthis.fragmentShader(),\n\t\t\tthis.vertexShader(),\n\t\t\tthis.uniforms(),\n\t\t\tthis.cacheKey(),\n\t\t];\n\n\t\t// NOTE: this is specific to angular-three\n\t\tif (is.instance(base)) {\n\t\t\tdelete (base as NgtAnyRecord)['__ngt__'];\n\t\t\tdelete (base as NgtAnyRecord)['__ngt_renderer__'];\n\t\t}\n\n\t\treturn new CustomShaderMaterial({\n\t\t\tbaseMaterial: base,\n\t\t\tfragmentShader,\n\t\t\tvertexShader,\n\t\t\tuniforms,\n\t\t\tcacheKey,\n\t\t});\n\t});\n\n\tconstructor() {\n\t\teffect((onCleanup) => {\n\t\t\tconst material = this.material();\n\t\t\tonCleanup(() => material.dispose());\n\t\t});\n\t}\n}\n","import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, DestroyRef, inject, input } from '@angular/core';\nimport { beforeRender, NgtArgs, NgtAttachable, NgtThreeElements, omit, pick } from 'angular-three';\nimport { MeshDistortMaterial, MeshDistortMaterialParameters } from 'angular-three-soba/vanilla-exports';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\n\nexport interface NgtsMeshDistortMaterialOptions\n\textends Partial<MeshDistortMaterialParameters>,\n\t\tPartial<NgtThreeElements['ngt-mesh-physical-material']> {\n\tspeed: number;\n\tfactor?: number;\n}\n\nconst defaultOptions: NgtsMeshDistortMaterialOptions = {\n\tspeed: 1,\n};\n\n@Component({\n\tselector: 'ngts-mesh-distort-material',\n\ttemplate: `\n\t\t<ngt-primitive *args=\"[material]\" [attach]=\"attach()\" [parameters]=\"parameters()\">\n\t\t\t<ng-content />\n\t\t</ngt-primitive>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtArgs],\n})\nexport class NgtsMeshDistortMaterial {\n\tattach = input<NgtAttachable>('material');\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\tprotected parameters = omit(this.options, ['speed']);\n\n\tmaterial = new MeshDistortMaterial();\n\n\tprivate speed = pick(this.options, 'speed');\n\n\tconstructor() {\n\t\tinject(DestroyRef).onDestroy(() => this.material.dispose());\n\n\t\tbeforeRender(({ clock }) => {\n\t\t\tthis.material.time = clock.elapsedTime * this.speed();\n\t\t});\n\t}\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tcontentChild,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tDirective,\n\teffect,\n\tElementRef,\n\tinput,\n\tsignal,\n\tTemplateRef,\n\tviewChild,\n} from '@angular/core';\nimport {\n\tbeforeRender,\n\textend,\n\tgetInstanceState,\n\tinjectStore,\n\tis,\n\tNgtAttachable,\n\tNgtComputeFunction,\n\tNgtThreeElements,\n\tomit,\n\tpick,\n} from 'angular-three';\nimport { fbo, getVersion, intersect } from 'angular-three-soba/misc';\nimport { NgtsRenderTexture } from 'angular-three-soba/staging';\nimport {\n\tMeshPortalMaterial,\n\tmeshPortalMaterialApplySDF,\n\tNgtMeshPortalMaterial,\n} from 'angular-three-soba/vanilla-exports';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { FullScreenQuad } from 'three-stdlib';\n\n/**\n * This directive is used inside of the render texture, hence has access to the render texture store (a portal store)\n */\n@Directive({ selector: 'ngts-manage-portal-scene' })\nexport class ManagePortalScene {\n\tevents = input<boolean>();\n\trootScene = input.required<THREE.Scene>();\n\tmaterial = input.required<NgtMeshPortalMaterial>();\n\tpriority = input.required<number>();\n\tworldUnits = input.required<boolean>();\n\n\tconstructor() {\n\t\tconst renderTextureStore = injectStore();\n\n\t\tconst buffer1 = fbo();\n\t\tconst buffer2 = fbo();\n\n\t\tconst fullScreenQuad = computed(() => {\n\t\t\t// This fullscreen-quad is used to blend the two textures\n\t\t\tconst blend = { value: 0 };\n\t\t\tconst quad = new FullScreenQuad(\n\t\t\t\tnew THREE.ShaderMaterial({\n\t\t\t\t\tuniforms: {\n\t\t\t\t\t\ta: { value: buffer1.texture },\n\t\t\t\t\t\tb: { value: buffer2.texture },\n\t\t\t\t\t\tblend,\n\t\t\t\t\t},\n\t\t\t\t\tvertexShader: /*glsl*/ `\n\t\t varying vec2 vUv;\n\t\t void main() {\n\t\t vUv = uv;\n\t\t gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t }`,\n\t\t\t\t\tfragmentShader: /*glsl*/ `\n\t\t uniform sampler2D a;\n\t\t uniform sampler2D b;\n\t\t uniform float blend;\n\t\t varying vec2 vUv;\n\t\t #include <packing>\n\t\t void main() {\n\t\t vec4 ta = texture2D(a, vUv);\n\t\t vec4 tb = texture2D(b, vUv);\n\t\t gl_FragColor = mix(tb, ta, blend);\n\t\t #include <tonemapping_fragment>\n\t\t #include <${getVersion() >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n\t\t }`,\n\t\t\t\t}),\n\t\t\t);\n\t\t\treturn [quad, blend] as const;\n\t\t});\n\n\t\teffect(() => {\n\t\t\trenderTextureStore.scene().matrixAutoUpdate = false;\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst [events, setEvents] = [this.events(), renderTextureStore.setEvents()];\n\t\t\tif (!events) return;\n\t\t\tsetEvents({ enabled: events });\n\t\t});\n\n\t\tbeforeRender(\n\t\t\t({ gl, camera }) => {\n\t\t\t\tconst material = this.material();\n\n\t\t\t\tconst instanceState = getInstanceState(material);\n\t\t\t\tif (!instanceState) return;\n\n\t\t\t\tconst parent = instanceState.parent();\n\t\t\t\tif (!parent) return;\n\n\t\t\t\tconst priority = this.priority();\n\t\t\t\tconst materialBlend = 'blend' in material && typeof material.blend === 'number' ? material.blend : 0;\n\t\t\t\tconst [worldUnits, rootScene, scene, [quad, blend]] = [\n\t\t\t\t\tthis.worldUnits(),\n\t\t\t\t\tthis.rootScene(),\n\t\t\t\t\trenderTextureStore.snapshot.scene,\n\t\t\t\t\tfullScreenQuad(),\n\t\t\t\t];\n\t\t\t\t// Move portal contents along with the parent if worldUnits is true\n\t\t\t\tif (!worldUnits) {\n\t\t\t\t\t// If the portal renders exclusively the original scene needs to be updated\n\t\t\t\t\tif (priority && materialBlend === 1) parent['updateWorldMatrix'](true, false);\n\t\t\t\t\tscene.matrixWorld.copy(parent['matrixWorld']);\n\t\t\t\t} else {\n\t\t\t\t\tscene.matrixWorld.identity();\n\t\t\t\t}\n\n\t\t\t\t// This bit is only necessary if the portal is blended, now it has a render-priority\n\t\t\t\t// and will take over the render loop\n\t\t\t\tif (priority) {\n\t\t\t\t\tif (materialBlend > 0 && materialBlend < 1) {\n\t\t\t\t\t\t// If blend is ongoing (> 0 and < 1) then we need to render both the root scene\n\t\t\t\t\t\t// and the portal scene, both will then be mixed in the quad from above\n\t\t\t\t\t\tblend.value = materialBlend;\n\t\t\t\t\t\tgl.setRenderTarget(buffer1);\n\t\t\t\t\t\tgl.render(scene, camera);\n\t\t\t\t\t\tgl.setRenderTarget(buffer2);\n\t\t\t\t\t\tgl.render(rootScene, camera);\n\t\t\t\t\t\tgl.setRenderTarget(null);\n\t\t\t\t\t\tquad.render(gl);\n\t\t\t\t\t} else if (materialBlend === 1) {\n\t\t\t\t\t\t// However if blend is 1 we only need to render the portal scene\n\t\t\t\t\t\tgl.render(scene, camera);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ priority: this.priority },\n\t\t);\n\t}\n}\n\nexport interface NgtsMeshPortalMaterialOptions extends Partial<NgtThreeElements['ngt-shader-material']> {\n\t/** Mix the portals own scene with the world scene, 0 = world scene render,\n\t * 0.5 = both scenes render, 1 = portal scene renders, defaults to 0. */\n\tblend: number;\n\t/** Edge fade blur, 0 = no blur (default) */\n\tblur: number;\n\t/** SDF resolution, the smaller the faster is the start-up time (default: 512) */\n\tresolution: number;\n\t/** By default portals use relative coordinates, contents are affects by the local matrix transform */\n\tworldUnits: boolean;\n\t/** Optional event priority, defaults to 0 */\n\teventPriority: number;\n\t/** Optional render priority, defaults to 0 */\n\trenderPriority: number;\n\t/** Optionally diable events inside the portal, defaults to false */\n\tevents: boolean;\n}\n\nconst defaultOptions: NgtsMeshPortalMaterialOptions = {\n\tblend: 0,\n\tblur: 0,\n\tresolution: 512,\n\tworldUnits: false,\n\teventPriority: 0,\n\trenderPriority: 0,\n\tevents: false,\n};\n\n@Component({\n\tselector: 'ngts-mesh-portal-material',\n\ttemplate: `\n\t\t<ngt-mesh-portal-material\n\t\t\t#material\n\t\t\t[attach]=\"attach()\"\n\t\t\t[blur]=\"blur()\"\n\t\t\t[blend]=\"0\"\n\t\t\t[resolution]=\"materialResolution()\"\n\t\t\t[parameters]=\"parameters()\"\n\t\t>\n\t\t\t<ngts-render-texture\n\t\t\t\t[options]=\"{\n\t\t\t\t\tframes: renderTextureFrames(),\n\t\t\t\t\teventPriority: eventPriority(),\n\t\t\t\t\trenderPriority: renderPriority(),\n\t\t\t\t\tcompute: renderTextureCompute,\n\t\t\t\t}\"\n\t\t\t>\n\t\t\t\t<ng-template renderTextureContent let-injector=\"injector\">\n\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"content()\" [ngTemplateOutletInjector]=\"injector\" />\n\t\t\t\t\t<ngts-manage-portal-scene\n\t\t\t\t\t\t[events]=\"events()\"\n\t\t\t\t\t\t[rootScene]=\"rootScene()\"\n\t\t\t\t\t\t[priority]=\"priority()\"\n\t\t\t\t\t\t[material]=\"material\"\n\t\t\t\t\t\t[worldUnits]=\"worldUnits()\"\n\t\t\t\t\t/>\n\t\t\t\t</ng-template>\n\t\t\t</ngts-render-texture>\n\t\t</ngt-mesh-portal-material>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtsRenderTexture, ManagePortalScene, NgTemplateOutlet],\n})\nexport class NgtsMeshPortalMaterial {\n\tattach = input<NgtAttachable>('material');\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\tprotected parameters = omit(this.options, [\n\t\t'blur',\n\t\t'resolution',\n\t\t'worldUnits',\n\t\t'eventPriority',\n\t\t'renderPriority',\n\t\t'events',\n\t]);\n\n\tprotected blur = pick(this.options, 'blur');\n\tprotected eventPriority = pick(this.options, 'eventPriority');\n\tprotected renderPriority = pick(this.options, 'renderPriority');\n\tprotected events = pick(this.options, 'events');\n\tprotected worldUnits = pick(this.options, 'worldUnits');\n\n\tmaterialRef = viewChild.required<ElementRef<InstanceType<typeof MeshPortalMaterial>>>('material');\n\tprotected content = contentChild.required(TemplateRef);\n\n\tprivate store = injectStore();\n\tprotected rootScene = this.store.scene;\n\n\tprotected materialResolution = computed(() => [\n\t\tthis.store.size.width() * this.store.viewport.dpr(),\n\t\tthis.store.size.height() * this.store.viewport.dpr(),\n\t]);\n\tprivate resolution = pick(this.options, 'resolution');\n\n\tprivate parent = signal<THREE.Mesh | null>(null);\n\tprivate visible = intersect(this.parent, { source: signal(true) });\n\n\tprotected renderTextureFrames = computed(() => (this.visible() ? Infinity : 0));\n\n\tprotected renderTextureCompute = (...args: Parameters<NgtComputeFunction>) => {\n\t\tconst [parent, material] = [this.parent(), this.materialRef().nativeElement];\n\t\tif (!parent) return false;\n\n\t\tconst [event, state] = args;\n\n\t\tstate.snapshot.pointer.set(\n\t\t\t(event.offsetX / state.snapshot.size.width) * 2 - 1,\n\t\t\t-(event.offsetY / state.snapshot.size.height) * 2 + 1,\n\t\t);\n\t\tstate.snapshot.raycaster.setFromCamera(state.snapshot.pointer, state.snapshot.camera);\n\n\t\tif ('blend' in material && material.blend === 0) {\n\t\t\t// We run a quick check against the parent, if it isn't hit there's no need to raycast at all\n\t\t\tconst [intersection] = state.snapshot.raycaster.intersectObject(parent);\n\t\t\tif (!intersection) {\n\t\t\t\t// Cancel out the raycast camera if the parent mesh isn't hit\n\t\t\t\tObject.assign(state.snapshot.raycaster, { camera: undefined });\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn;\n\t};\n\n\tprotected priority = signal(0);\n\n\tconstructor() {\n\t\textend({ MeshPortalMaterial });\n\n\t\teffect(() => {\n\t\t\tconst material = this.materialRef().nativeElement;\n\n\t\t\tconst instanceState = getInstanceState(material);\n\t\t\tif (!instanceState) return;\n\n\t\t\tconst materialParent = instanceState.parent();\n\t\t\tif (!materialParent || !is.three<THREE.Mesh>(materialParent, 'isMesh')) return;\n\n\t\t\t// Since the ref above is not tied to a mesh directly (we're inside a material),\n\t\t\t// it has to be tied to the parent mesh here\n\t\t\tthis.parent.set(materialParent);\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst events = this.events();\n\t\t\tif (!events) return;\n\n\t\t\tconst setEvents = this.store.setEvents();\n\t\t\tsetEvents({ enabled: !events });\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst [material, parent] = [this.materialRef().nativeElement, this.parent()];\n\t\t\tif (!parent) return;\n\n\t\t\tconst [resolution, blur, gl] = [this.resolution(), this.blur(), this.store.gl()];\n\n\t\t\t// apply the SDF mask once\n\t\t\tif (blur && material.sdf == null) {\n\t\t\t\tmeshPortalMaterialApplySDF(parent, resolution, gl);\n\t\t\t}\n\t\t});\n\n\t\tbeforeRender(() => {\n\t\t\tconst material = this.materialRef().nativeElement;\n\t\t\tconst priority =\n\t\t\t\t'blend' in material && typeof material.blend === 'number' && material.blend > 0\n\t\t\t\t\t? Math.max(1, this.renderPriority())\n\t\t\t\t\t: 0;\n\n\t\t\t// If blend is > 0 then the portal is being entered, the render-priority must change\n\t\t\tif (this.priority() !== priority) {\n\t\t\t\tthis.priority.set(priority);\n\t\t\t}\n\t\t});\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tDestroyRef,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tuntracked,\n\tviewChild,\n} from '@angular/core';\nimport {\n\tapplyProps,\n\tbeforeRender,\n\tgetInstanceState,\n\tinjectStore,\n\tNgtAnyRecord,\n\tNgtArgs,\n\tNgtAttachable,\n\tNgtThreeElements,\n\tomit,\n\tpick,\n} from 'angular-three';\nimport { BlurPass, MeshReflectorMaterial } from 'angular-three-soba/vanilla-exports';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\n\nexport interface NgtsMeshReflectorMaterialOptions extends Partial<NgtThreeElements['ngt-mesh-standard-material']> {\n\tresolution: number;\n\tmixBlur: number;\n\tmixStrength: number;\n\tblur: [number, number] | number;\n\tmirror: number;\n\tminDepthThreshold: number;\n\tmaxDepthThreshold: number;\n\tdepthScale: number;\n\tdepthToBlurRatioBias: number;\n\tdistortion: number;\n\tmixContrast: number;\n\treflectorOffset: number;\n\tdistortionMap?: THREE.Texture;\n}\n\nconst defaultOptions: NgtsMeshReflectorMaterialOptions = {\n\tmixBlur: 0,\n\tmixStrength: 1,\n\tresolution: 256,\n\tblur: [0, 0],\n\tminDepthThreshold: 0.9,\n\tmaxDepthThreshold: 1,\n\tdepthScale: 0,\n\tdepthToBlurRatioBias: 0.25,\n\tmirror: 0,\n\tdistortion: 1,\n\tmixContrast: 1,\n\treflectorOffset: 0,\n};\n\n@Component({\n\tselector: 'ngts-mesh-reflector-material',\n\ttemplate: `\n\t\t<ngt-primitive #material *args=\"[material()]\" [attach]=\"attach()\">\n\t\t\t<ng-content />\n\t\t</ngt-primitive>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtArgs],\n})\nexport class NgtsMeshReflectorMaterial {\n\tattach = input<NgtAttachable>('material');\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\tprivate parameters = omit(this.options, [\n\t\t'distortionMap',\n\t\t'resolution',\n\t\t'mixBlur',\n\t\t'mixStrength',\n\t\t'blur',\n\t\t'minDepthThreshold',\n\t\t'maxDepthThreshold',\n\t\t'depthScale',\n\t\t'depthToBlurRatioBias',\n\t\t'mirror',\n\t\t'distortion',\n\t\t'mixContrast',\n\t\t'reflectorOffset',\n\t]);\n\n\tprivate store = injectStore();\n\n\tmaterialRef = viewChild<ElementRef<MeshReflectorMaterial>>('material');\n\n\tprivate reflectOptions = pick(this.options, [\n\t\t'distortionMap',\n\t\t'resolution',\n\t\t'mixBlur',\n\t\t'mixStrength',\n\t\t'blur',\n\t\t'minDepthThreshold',\n\t\t'maxDepthThreshold',\n\t\t'depthScale',\n\t\t'depthToBlurRatioBias',\n\t\t'mirror',\n\t\t'distortion',\n\t\t'mixContrast',\n\t\t'reflectorOffset',\n\t]);\n\n\tprivate blur = pick(this.reflectOptions, 'blur');\n\n\tprivate normalizedBlur = computed(() => {\n\t\tconst blur = this.blur();\n\t\treturn Array.isArray(blur) ? blur : [blur, blur];\n\t});\n\tprivate hasBlur = computed(() => this.normalizedBlur()[0] + this.normalizedBlur()[1] > 0);\n\n\tprivate reflectorPlane = new THREE.Plane();\n\tprivate normal = new THREE.Vector3();\n\tprivate reflectorWorldPosition = new THREE.Vector3();\n\tprivate cameraWorldPosition = new THREE.Vector3();\n\tprivate rotationMatrix = new THREE.Matrix4();\n\tprivate lookAtPosition = new THREE.Vector3(0, 0, -1);\n\tprivate clipPlane = new THREE.Vector4();\n\tprivate view = new THREE.Vector3();\n\tprivate target = new THREE.Vector3();\n\tprivate q = new THREE.Vector4();\n\tprivate textureMatrix = new THREE.Matrix4();\n\tprivate virtualCamera = new THREE.PerspectiveCamera();\n\n\tprivate reflectState = computed(() => {\n\t\tconst [\n\t\t\tgl,\n\t\t\t{\n\t\t\t\tresolution,\n\t\t\t\tminDepthThreshold,\n\t\t\t\tmaxDepthThreshold,\n\t\t\t\tdepthScale,\n\t\t\t\tdepthToBlurRatioBias,\n\t\t\t\tmirror,\n\t\t\t\tmixBlur,\n\t\t\t\tmixStrength,\n\t\t\t\tdistortion,\n\t\t\t\tdistortionMap,\n\t\t\t\tmixContrast,\n\t\t\t},\n\t\t\tblur,\n\t\t\thasBlur,\n\t\t] = [this.store.gl(), this.reflectOptions(), this.normalizedBlur(), this.hasBlur()];\n\n\t\tconst renderTargetParameters = {\n\t\t\tminFilter: THREE.LinearFilter,\n\t\t\tmagFilter: THREE.LinearFilter,\n\t\t\ttype: THREE.HalfFloatType,\n\t\t};\n\n\t\tconst fbo1 = new THREE.WebGLRenderTarget(resolution, resolution, renderTargetParameters);\n\t\tfbo1.depthBuffer = true;\n\t\tfbo1.depthTexture = new THREE.DepthTexture(resolution, resolution);\n\t\tfbo1.depthTexture.format = THREE.DepthFormat;\n\t\tfbo1.depthTexture.type = THREE.UnsignedShortType;\n\t\tconst fbo2 = new THREE.WebGLRenderTarget(resolution, resolution, renderTargetParameters);\n\n\t\tconst blurPass = new BlurPass({\n\t\t\tgl,\n\t\t\tresolution,\n\t\t\twidth: blur[0],\n\t\t\theight: blur[1],\n\t\t\tminDepthThreshold,\n\t\t\tmaxDepthThreshold,\n\t\t\tdepthScale,\n\t\t\tdepthToBlurRatioBias,\n\t\t});\n\n\t\tconst defines: NgtAnyRecord = {};\n\n\t\tif (hasBlur) {\n\t\t\tdefines['USE_BLUR'] = '';\n\t\t}\n\n\t\tif (depthScale > 0) {\n\t\t\tdefines['USE_DEPTH'] = '';\n\t\t}\n\n\t\tif (distortionMap) {\n\t\t\tdefines['USE_DISTORTION'] = '';\n\t\t}\n\n\t\tconst reflectorParameters = {\n\t\t\tmirror,\n\t\t\ttextureMatrix: this.textureMatrix,\n\t\t\tmixBlur,\n\t\t\ttDiffuse: fbo1.texture,\n\t\t\ttDepth: fbo1.depthTexture,\n\t\t\ttDiffuseBlur: fbo2.texture,\n\t\t\thasBlur,\n\t\t\tmixStrength,\n\t\t\tminDepthThreshold,\n\t\t\tmaxDepthThreshold,\n\t\t\tdepthScale,\n\t\t\tdepthToBlurRatioBias,\n\t\t\tdistortion,\n\t\t\tdistortionMap,\n\t\t\tmixContrast,\n\t\t\tdefines,\n\t\t};\n\n\t\treturn { fbo1, fbo2, blurPass, reflectorParameters };\n\t});\n\n\tprivate definesKey = computed(() => {\n\t\tconst defines = this.reflectState().reflectorParameters.defines;\n\t\treturn Object.entries(defines).reduce((acc, [key, value]) => (value != null ? `${acc} ${key}` : acc), '');\n\t});\n\n\tmaterial = computed(() => {\n\t\tconst prevMaterial = untracked(this.materialRef)?.nativeElement;\n\n\t\tif (prevMaterial) {\n\t\t\tprevMaterial.dispose();\n\t\t\tdelete (prevMaterial as NgtAnyRecord)['__ngt__'];\n\t\t\tdelete (prevMaterial as NgtAnyRecord)['__ngt_renderer__'];\n\t\t}\n\n\t\t// tracking defines key so that the material is recreated when the defines change\n\t\tthis.definesKey();\n\t\treturn new MeshReflectorMaterial();\n\t});\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst material = this.materialRef()?.nativeElement;\n\t\t\tif (!material) return;\n\t\t\tconst { reflectorParameters } = this.reflectState();\n\t\t\tapplyProps(material, { ...reflectorParameters, ...this.parameters() });\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tconst material = this.materialRef()?.nativeElement;\n\t\t\tif (material) {\n\t\t\t\tmaterial.dispose();\n\t\t\t\tdelete (material as NgtAnyRecord)['__ngt__'];\n\t\t\t\tdelete (material as NgtAnyRecord)['__ngt_renderer__'];\n\t\t\t}\n\t\t});\n\n\t\tbeforeRender(({ gl, scene }) => {\n\t\t\tconst material = this.materialRef()?.nativeElement;\n\t\t\tif (!material) return;\n\n\t\t\tconst instanceState = getInstanceState(material);\n\t\t\tif (!instanceState) return;\n\n\t\t\tconst parent = Reflect.get(material, 'parent') ?? untracked(instanceState.parent);\n\t\t\tif (!parent) return;\n\n\t\t\tconst { fbo1, fbo2, blurPass } = this.reflectState();\n\t\t\tconst hasBlur = this.hasBlur();\n\n\t\t\tparent.visible = false;\n\t\t\tconst currentXrEnabled = gl.xr.enabled;\n\t\t\tconst currentShadowAutoUpdate = gl.shadowMap.autoUpdate;\n\t\t\tthis.beforeRender();\n\t\t\tgl.xr.enabled = false;\n\t\t\tgl.shadowMap.autoUpdate = false;\n\t\t\tgl.setRenderTarget(fbo1);\n\t\t\tgl.state.buffers.depth.setMask(true);\n\t\t\tif (!gl.autoClear) gl.clear();\n\t\t\tgl.render(scene, this.virtualCamera);\n\t\t\tif (hasBlur) blurPass.render(gl, fbo1, fbo2);\n\t\t\tgl.xr.enabled = currentXrEnabled;\n\t\t\tgl.shadowMap.autoUpdate = currentShadowAutoUpdate;\n\t\t\tparent.visible = true;\n\t\t\tgl.setRenderTarget(null);\n\t\t});\n\t}\n\n\tprivate beforeRender() {\n\t\tconst material = this.materialRef()?.nativeElement;\n\t\tif (!material) return;\n\n\t\tconst instanceState = getInstanceState(material);\n\t\tif (!instanceState) return;\n\n\t\tconst parent = Reflect.get(material, 'parent') ?? untracked(instanceState.parent);\n\t\tif (!parent) return;\n\n\t\tconst { camera } = this.store.snapshot;\n\t\tconst { reflectorOffset } = untracked(this.reflectOptions);\n\n\t\tthis.reflectorWorldPosition.setFromMatrixPosition(parent.matrixWorld);\n\t\tthis.cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld);\n\t\tthis.rotationMatrix.extractRotation(parent.matrixWorld);\n\t\tthis.normal.set(0, 0, 1);\n\t\tthis.normal.applyMatrix4(this.rotationMatrix);\n\t\tthis.reflectorWorldPosition.addScaledVector(this.normal, reflectorOffset);\n\t\tthis.view.subVectors(this.reflectorWorldPosition, this.cameraWorldPosition);\n\t\t// Avoid rendering when reflector is facing away\n\t\tif (this.view.dot(this.normal) > 0) return;\n\t\tthis.view.reflect(this.normal).negate();\n\t\tthis.view.add(this.reflectorWorldPosition);\n\t\tthis.rotationMatrix.extractRotation(camera.matrixWorld);\n\t\tthis.lookAtPosition.set(0, 0, -1);\n\t\tthis.lookAtPosition.applyMatrix4(this.rotationMatrix);\n\t\tthis.lookAtPosition.add(this.cameraWorldPosition);\n\t\tthis.target.subVectors(this.reflectorWorldPosition, this.lookAtPosition);\n\t\tthis.target.reflect(this.normal).negate();\n\t\tthis.target.add(this.reflectorWorldPosition);\n\t\tthis.virtualCamera.position.copy(this.view);\n\t\tthis.virtualCamera.up.set(0, 1, 0);\n\t\tthis.virtualCamera.up.applyMatrix4(this.rotationMatrix);\n\t\tthis.virtualCamera.up.reflect(this.normal);\n\t\tthis.virtualCamera.lookAt(this.target);\n\t\tthis.virtualCamera.far = camera.far; // Used in WebGLBackground\n\t\tthis.virtualCamera.updateMatrixWorld();\n\t\tthis.virtualCamera.projectionMatrix.copy(camera.projectionMatrix);\n\t\t// Update the texture matrix\n\t\tthis.textureMatrix.set(0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0);\n\t\tthis.textureMatrix.multiply(this.virtualCamera.projectionMatrix);\n\t\tthis.textureMatrix.multiply(this.virtualCamera.matrixWorldInverse);\n\t\tthis.textureMatrix.multiply(parent.matrixWorld);\n\t\t// Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html\n\t\t// Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf\n\t\tthis.reflectorPlane.setFromNormalAndCoplanarPoint(this.normal, this.reflectorWorldPosition);\n\t\tthis.reflectorPlane.applyMatrix4(this.virtualCamera.matrixWorldInverse);\n\t\tthis.clipPlane.set(\n\t\t\tthis.reflectorPlane.normal.x,\n\t\t\tthis.reflectorPlane.normal.y,\n\t\t\tthis.reflectorPlane.normal.z,\n\t\t\tthis.reflectorPlane.constant,\n\t\t);\n\t\tconst projectionMatrix = this.virtualCamera.projectionMatrix;\n\t\tthis.q.x = (Math.sign(this.clipPlane.x) + projectionMatrix.elements[8]) / projectionMatrix.elements[0];\n\t\tthis.q.y = (Math.sign(this.clipPlane.y) + projectionMatrix.elements[9]) / projectionMatrix.elements[5];\n\t\tthis.q.z = -1.0;\n\t\tthis.q.w = (1.0 + projectionMatrix.elements[10]) / projectionMatrix.elements[14];\n\t\t// Calculate the scaled plane vector\n\t\tthis.clipPlane.multiplyScalar(2.0 / this.clipPlane.dot(this.q));\n\t\t// Replacing the third row of the projection matrix\n\t\tprojectionMatrix.elements[2] = this.clipPlane.x;\n\t\tprojectionMatrix.elements[6] = this.clipPlane.y;\n\t\tprojectionMatrix.elements[10] = this.clipPlane.z + 1.0;\n\t\tprojectionMatrix.elements[14] = this.clipPlane.w;\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tDestroyRef,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tuntracked,\n\tviewChild,\n} from '@angular/core';\nimport {\n\tbeforeRender,\n\tgetInstanceState,\n\tinjectStore,\n\tis,\n\tNgtAnyRecord,\n\tNgtArgs,\n\tNgtAttachable,\n\tNgtThreeElements,\n\tomit,\n\tpick,\n} from 'angular-three';\nimport { MeshRefractionMaterial } from 'angular-three-soba/shaders';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\nimport { MeshBVH, MeshBVHUniformStruct, SAH } from 'three-mesh-bvh';\n\nexport interface NgtsMeshRefractionMaterialOptions extends Partial<NgtThreeElements['ngt-shader-material']> {\n\t/** Number of ray-cast bounces, it can be expensive to have too many, 2 */\n\tbounces: number;\n\t/** Refraction index, 2.4 */\n\tior: number;\n\t/** Fresnel (strip light), 0 */\n\tfresnel: number;\n\t/** RGB shift intensity, can be expensive, 0 */\n\taberrationStrength: number;\n\t/** Color, white */\n\tcolor: THREE.ColorRepresentation;\n\t/** If this is on it uses fewer ray casts for the RGB shift sacrificing physical accuracy, true */\n\tfastChroma: boolean;\n}\n\nconst defaultOptions: NgtsMeshRefractionMaterialOptions = {\n\tbounces: 2,\n\tior: 2.4,\n\tfresnel: 0,\n\taberrationStrength: 0,\n\tcolor: 'white',\n\tfastChroma: true,\n};\n\n@Component({\n\tselector: 'ngts-mesh-refraction-material',\n\ttemplate: `\n\t\t<ngt-primitive\n\t\t\t*args=\"[material()]\"\n\t\t\t#material\n\t\t\t[attach]=\"attach()\"\n\t\t\t[parameters]=\"parameters()\"\n\t\t\t[envMap]=\"envMap()\"\n\t\t\t[aberrationStrength]=\"aberrationStrength()\"\n\t\t\t[resolution]=\"resolution()\"\n\t\t\t[defines]=\"defines()\"\n\t\t>\n\t\t\t<ng-content />\n\t\t</ngt-primitive>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtArgs],\n})\nexport class NgtsMeshRefractionMaterial {\n\tenvMap = input.required<THREE.CubeTexture | THREE.Texture>();\n\tattach = input<NgtAttachable>('material');\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\tprotected parameters = omit(this.options, ['fastChroma', 'aberrationStrength']);\n\n\tprivate fastChroma = pick(this.options, 'fastChroma');\n\tprotected aberrationStrength = pick(this.options, 'aberrationStrength');\n\n\tmaterialRef = viewChild<ElementRef<InstanceType<typeof MeshRefractionMaterial>>>('material');\n\n\tprivate store = injectStore();\n\n\tprotected resolution = computed(() => [this.store.size.width(), this.store.size.height()]);\n\tprotected defines = computed(() => {\n\t\tconst _defines = {} as { [key: string]: string };\n\t\tconst [envMap, aberrationStrength, fastChroma] = [\n\t\t\tuntracked(this.envMap),\n\t\t\tthis.aberrationStrength(),\n\t\t\tthis.fastChroma(),\n\t\t];\n\t\tconst isCubeMap = is.three<THREE.CubeTexture>(envMap, 'isCubeTexture');\n\n\t\tconst w = (isCubeMap ? envMap.image[0]?.width : envMap.image.width) ?? 1024;\n\t\tconst cubeSize = w / 4;\n\t\tconst _lodMax = Math.floor(Math.log2(cubeSize));\n\t\tconst _cubeSize = Math.pow(2, _lodMax);\n\t\tconst width = 3 * Math.max(_cubeSize, 16 * 7);\n\t\tconst height = 4 * _cubeSize;\n\n\t\tif (isCubeMap) _defines['ENVMAP_TYPE_CUBEM'] = '';\n\t\t_defines['CUBEUV_TEXEL_WIDTH'] = `${1.0 / width}`;\n\t\t_defines['CUBEUV_TEXEL_HEIGHT'] = `${1.0 / height}`;\n\t\t_defines['CUBEUV_MAX_MIP'] = `${_lodMax}.0`;\n\n\t\t// Add defines from chromatic aberration\n\t\tif (aberrationStrength > 0) _defines['CHROMATIC_ABERRATIONS'] = '';\n\t\tif (fastChroma) _defines['FAST_CHROMA'] = '';\n\n\t\treturn _defines;\n\t});\n\n\tprivate defineKeys = computed(() => {\n\t\treturn Object.keys(this.defines()).join(' ');\n\t});\n\n\tprotected material = computed(() => {\n\t\tconst prevMaterial = untracked(this.materialRef)?.nativeElement;\n\n\t\tif (prevMaterial) {\n\t\t\tprevMaterial.dispose();\n\t\t\tdelete (prevMaterial as NgtAnyRecord)['__ngt__'];\n\t\t\tdelete (prevMaterial as NgtAnyRecord)['__ngt_renderer__'];\n\t\t}\n\n\t\t// track by this.defineKeys\n\t\tthis.defineKeys();\n\t\treturn new MeshRefractionMaterial();\n\t});\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst material = this.materialRef()?.nativeElement;\n\t\t\tif (!material) return;\n\n\t\t\tconst instanceState = getInstanceState(material);\n\t\t\tif (!instanceState) return;\n\n\t\t\tconst parent = untracked(instanceState.parent);\n\t\t\tconst geometry = (parent as unknown as THREE.Mesh).geometry;\n\t\t\tif (geometry) {\n\t\t\t\tconst bvh = new MeshBVHUniformStruct();\n\t\t\t\tbvh.updateFrom(new MeshBVH(geometry.clone().toNonIndexed(), { strategy: SAH }));\n\t\t\t\tObject.assign(material, { bvh });\n\t\t\t}\n\t\t});\n\n\t\tbeforeRender(({ camera }) => {\n\t\t\tconst material = this.materialRef()?.nativeElement;\n\t\t\tif (material) {\n\t\t\t\tObject.assign(material, {\n\t\t\t\t\tviewMatrixInverse: camera.matrixWorld,\n\t\t\t\t\tprojectionMatrixInverse: camera.projectionMatrixInverse,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tconst material = this.materialRef()?.nativeElement;\n\t\t\tif (material) {\n\t\t\t\tmaterial.dispose();\n\t\t\t\tdelete (material as NgtAnyRecord)['__ngt__'];\n\t\t\t\tdelete (material as NgtAnyRecord)['__ngt_renderer__'];\n\t\t\t}\n\t\t});\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tcomputed,\n\tCUSTOM_ELEMENTS_SCHEMA,\n\tDestroyRef,\n\tElementRef,\n\tinject,\n\tinput,\n\tuntracked,\n\tviewChild,\n} from '@angular/core';\nimport {\n\tbeforeRender,\n\tgetInstanceState,\n\tNgtAnyRecord,\n\tNgtArgs,\n\tNgtAttachable,\n\tNgtThreeElements,\n\tomit,\n\tpick,\n} from 'angular-three';\nimport { fbo } from 'angular-three-soba/misc';\nimport { MeshDiscardMaterial, MeshTransmissionMaterial } from 'angular-three-soba/vanilla-exports';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport * as THREE from 'three';\n\nexport type MeshTransmissionMaterialOptions = Exclude<\n\tConstructorParameters<typeof MeshTransmissionMaterial>[0],\n\tundefined\n>;\n\nexport type NgtsMeshTransmissionMaterialOptions = Partial<NgtThreeElements['ngt-mesh-physical-material']> &\n\tOmit<MeshTransmissionMaterialOptions, 'buffer' | 'anisotropicBlur' | 'samples' | 'transmissionSampler'> & {\n\t\tanisotropicBlur?: number;\n\t\tbuffer?: THREE.Texture;\n\t\t/** transmissionSampler, you can use the threejs transmission sampler texture that is\n\t\t * generated once for all transmissive materials. The upside is that it can be faster if you\n\t\t * use multiple MeshPhysical and Transmission materials, the downside is that transmissive materials\n\t\t * using this can't see other transparent or transmissive objects, default: false */\n\t\ttransmissionSampler: boolean;\n\t\t/** Render the backside of the material (more cost, better results), default: false */\n\t\tbackside: boolean;\n\t\t/** Backside thickness (when backside is true), default: 0 */\n\t\tbacksideThickness: number;\n\t\tbacksideEnvMapIntensity: number;\n\t\t/** Resolution of the local buffer, default: undefined (fullscreen) */\n\t\tresolution?: number;\n\t\t/** Resolution of the local buffer for backfaces, default: undefined (fullscreen) */\n\t\tbacksideResolution?: number;\n\t\t/** Refraction samples, default: 6 */\n\t\tsamples: number;\n\t\t/** Buffer scene background (can be a texture, a cubetexture or a color), default: null */\n\t\tbackground?: THREE.Texture | THREE.Color | null;\n\t};\n\nconst defaultOptions: NgtsMeshTransmissionMaterialOptions = {\n\ttransmissionSampler: false,\n\tbackside: false,\n\tside: THREE.FrontSide,\n\ttransmission: 1,\n\tthickness: 0,\n\tbacksideThickness: 0,\n\tbacksideEnvMapIntensity: 1,\n\tsamples: 10,\n};\n\n@Component({\n\tselector: 'ngts-mesh-transmission-material',\n\ttemplate: `\n\t\t<ngt-primitive\n\t\t\t*args=\"[material()]\"\n\t\t\t#material\n\t\t\t[attach]=\"attach()\"\n\t\t\t[parameters]=\"parameters()\"\n\t\t\t[_transmission]=\"transmission()\"\n\t\t\t[transmission]=\"transmissionSampler() ? transmission() : 0\"\n\t\t\t[buffer]=\"bufferTexture()\"\n\t\t\t[anisotropicBlur]=\"anisotropicBlurOption()\"\n\t\t\t[side]=\"side()\"\n\t\t\t[thickness]=\"thickness()\"\n\t\t>\n\t\t\t<ng-content />\n\t\t</ngt-primitive>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtArgs],\n})\nexport class NgtsMeshTransmissionMaterial {\n\tattach = input<NgtAttachable>('material');\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\tprotected parameters = omit(this.options, [\n\t\t'buffer',\n\t\t'transmissionSampler',\n\t\t'backside',\n\t\t'side',\n\t\t'transmission',\n\t\t'thickness',\n\t\t'backsideThickness',\n\t\t'backsideEnvMapIntensity',\n\t\t'samples',\n\t\t'resolution',\n\t\t'backsideResolution',\n\t\t'background',\n\t\t'anisotropy',\n\t\t'anisotropicBlur',\n\t]);\n\n\tprivate resolution = pick(this.options, 'resolution');\n\tprivate backsideResolution = pick(this.options, 'backsideResolution');\n\tprivate samples = pick(this.options, 'samples');\n\tprivate buffer = pick(this.options, 'buffer');\n\tprivate anisotropy = pick(this.options, 'anisotropy');\n\tprivate anisotropicBlur = pick(this.options, 'anisotropicBlur');\n\tprivate background = pick(this.options, 'background');\n\tprivate backside = pick(this.options, 'backside');\n\tprivate backsideThickness = pick(this.options, 'backsideThickness');\n\tprivate backsideEnvMapIntensity = pick(this.options, 'backsideEnvMapIntensity');\n\n\tprotected transmissionSampler = pick(this.options, 'transmissionSampler');\n\tprotected transmission = pick(this.options, 'transmission');\n\tprotected thickness = pick(this.options, 'thickness');\n\tprotected side = pick(this.options, 'side');\n\n\tmaterialRef = viewChild<ElementRef<MeshTransmissionMaterial & MeshTransmissionMaterialOptions>>('material');\n\n\tprivate backResolution = computed(() => this.backsideResolution() || this.resolution());\n\n\tprivate fboBack = fbo(() => ({ width: this.backResolution() }));\n\tprivate fboMain = fbo(() => ({ width: this.resolution() }));\n\n\tprotected bufferTexture = computed(() => this.buffer() || this.fboMain.texture);\n\tprotected anisotropicBlurOption = computed(() => this.anisotropicBlur() || this.anisotropy());\n\n\tprivate discardMaterial = new MeshDiscardMaterial();\n\n\tprotected material = computed(() => {\n\t\tconst previousMaterial = untracked(this.materialRef)?.nativeElement;\n\n\t\tif (previousMaterial) {\n\t\t\tpreviousMaterial.dispose();\n\t\t\tdelete (previousMaterial as NgtAnyRecord)['__ngt__'];\n\t\t\tdelete (previousMaterial as NgtAnyRecord)['__ngt_renderer__'];\n\t\t}\n\n\t\tconst [samples, transmissionSampler] = [this.samples(), this.transmissionSampler()];\n\t\treturn new MeshTransmissionMaterial({ samples, transmissionSampler });\n\t});\n\n\tconstructor() {\n\t\tinject(DestroyRef).onDestroy(() => {\n\t\t\tconst material = this.materialRef()?.nativeElement;\n\t\t\tif (material) {\n\t\t\t\tmaterial.dispose();\n\t\t\t\tdelete (material as NgtAnyRecord)['__ngt__'];\n\t\t\t\tdelete (material as NgtAnyRecord)['__ngt_renderer__'];\n\t\t\t}\n\t\t});\n\n\t\tlet oldBg: THREE.Texture | THREE.Color | null;\n\t\tlet oldEnvMapIntensity: number | undefined;\n\t\tlet oldTone: THREE.ToneMapping | undefined;\n\t\tlet parent: THREE.Mesh | undefined;\n\t\tbeforeRender(({ clock, gl, scene, camera }) => {\n\t\t\tconst material = this.materialRef()?.nativeElement;\n\t\t\tif (!material) return;\n\n\t\t\tconst [\n\t\t\t\tfboMain,\n\t\t\t\tfboBack,\n\t\t\t\ttransmissionSampler,\n\t\t\t\tbackground,\n\t\t\t\tbackside,\n\t\t\t\tbacksideThickness,\n\t\t\t\tbacksideEnvMapIntensity,\n\t\t\t\tthickness,\n\t\t\t\tside,\n\t\t\t] = [\n\t\t\t\tthis.fboMain,\n\t\t\t\tthis.fboBack,\n\t\t\t\tthis.transmissionSampler(),\n\t\t\t\tthis.background(),\n\t\t\t\tthis.backside(),\n\t\t\t\tthis.backsideThickness(),\n\t\t\t\tthis.backsideEnvMapIntensity(),\n\t\t\t\tthis.thickness(),\n\t\t\t\tthis.side(),\n\t\t\t];\n\n\t\t\tmaterial.time = clock.elapsedTime;\n\t\t\t// Render only if the buffer matches the built-in and no transmission sampler is set\n\t\t\t// @ts-expect-error - we know material.buffer is not just undefined | null\n\t\t\tif (material.buffer === fboMain.texture && !transmissionSampler) {\n\t\t\t\tparent = getInstanceState(material)?.parent() as unknown as THREE.Mesh;\n\n\t\t\t\tif (parent) {\n\t\t\t\t\t// Save defaults\n\t\t\t\t\toldTone = gl.toneMapping;\n\t\t\t\t\toldBg = scene.background;\n\t\t\t\t\toldEnvMapIntensity = material.envMapIntensity;\n\n\t\t\t\t\t// Switch off tonemapping lest it double tone maps\n\t\t\t\t\t// Save the current background and set the HDR as the new BG\n\t\t\t\t\t// Use discardmaterial, the parent will be invisible, but it's shadows will still be cast\n\t\t\t\t\tgl.toneMapping = THREE.NoToneMapping;\n\t\t\t\t\tif (background) scene.background = background;\n\t\t\t\t\tparent.material = this.discardMaterial;\n\n\t\t\t\t\tif (backside) {\n\t\t\t\t\t\t// Render into the backside buffer\n\t\t\t\t\t\tgl.setRenderTarget(fboBack);\n\t\t\t\t\t\tgl.render(scene, camera);\n\t\t\t\t\t\t// And now prepare the material for the main render using the backside buffer\n\t\t\t\t\t\tparent.material = material;\n\t\t\t\t\t\tObject.assign(parent.material, {\n\t\t\t\t\t\t\tbuffer: fboBack.texture,\n\t\t\t\t\t\t\tthickness: backsideThickness,\n\t\t\t\t\t\t\tside: THREE.BackSide,\n\t\t\t\t\t\t\tenvMapIntensity: backsideEnvMapIntensity,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// Render into the main buffer\n\t\t\t\t\tgl.setRenderTarget(fboMain);\n\t\t\t\t\tgl.render(scene, camera);\n\n\t\t\t\t\tparent.material = material;\n\t\t\t\t\tObject.assign(parent.material, {\n\t\t\t\t\t\tbuffer: fboMain.texture,\n\t\t\t\t\t\tthickness,\n\t\t\t\t\t\tside,\n\t\t\t\t\t\tenvMapIntensity: oldEnvMapIntensity,\n\t\t\t\t\t});\n\n\t\t\t\t\t// Set old state back\n\t\t\t\t\tscene.background = oldBg;\n\t\t\t\t\tgl.setRenderTarget(null);\n\t\t\t\t\tgl.toneMapping = oldTone;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n","import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, DestroyRef, inject, input } from '@angular/core';\nimport { beforeRender, NgtArgs, NgtAttachable, NgtThreeElements, omit } from 'angular-three';\nimport { MeshWobbleMaterial, MeshWobbleMaterialParameters } from 'angular-three-soba/vanilla-exports';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\n\nexport interface NgtsMeshWobbleMaterialOptions\n\textends MeshWobbleMaterialParameters,\n\t\tPartial<NgtThreeElements['ngt-mesh-standard-material']> {\n\tspeed: number;\n}\n\nconst defaultOptions: NgtsMeshWobbleMaterialOptions = {\n\tspeed: 1,\n};\n\n@Component({\n\tselector: 'ngts-mesh-wobble-material',\n\ttemplate: `\n\t\t<ngt-primitive *args=\"[material]\" [parameters]=\"parameters()\" [attach]=\"attach()\">\n\t\t\t<ng-content />\n\t\t</ngt-primitive>\n\t`,\n\timports: [NgtArgs],\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgtsMeshWobbleMaterial {\n\tattach = input<NgtAttachable>('material');\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\tprotected parameters = omit(this.options, ['speed']);\n\n\tprotected material = new MeshWobbleMaterial();\n\n\tconstructor() {\n\t\tinject(DestroyRef).onDestroy(() => this.material.dispose());\n\n\t\tbeforeRender(({ clock }) => {\n\t\t\tconst material = this.material;\n\t\t\tmaterial.time = clock.elapsedTime * this.options().speed;\n\t\t});\n\t}\n}\n","import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, DestroyRef, inject, input } from '@angular/core';\nimport { NgtArgs, NgtAttachable } from 'angular-three';\nimport { PointMaterial } from 'angular-three-soba/shaders';\nimport * as THREE from 'three';\n\n@Component({\n\tselector: 'ngts-point-material',\n\ttemplate: `\n\t\t<ngt-primitive *args=\"[material]\" [attach]=\"attach()\" [parameters]=\"options()\">\n\t\t\t<ng-content />\n\t\t</ngt-primitive>\n\t`,\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgtArgs],\n})\nexport class NgtsPointMaterial {\n\tattach = input<NgtAttachable>('material');\n\toptions = input({} as THREE.PointsMaterialParameters);\n\n\tprotected material = new PointMaterial(this.options());\n\n\tconstructor() {\n\t\tinject(DestroyRef).onDestroy(() => this.material.dispose());\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["defaultOptions"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { computed, isSignal, signal, effect, untracked, Directive, input, viewChild, Component, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, inject, DestroyRef, TemplateRef, ViewContainerRef, output, ElementRef, Renderer2, model } from '@angular/core';
3
- import { injectBeforeRender, resolveRef, injectStore, getInstanceState, NgtArgs, omit, pick, extend, is, applyProps, NgtHTML, addEffect, addAfterEffect, checkUpdate } from 'angular-three';
3
+ import { beforeRender, resolveRef, injectStore, getInstanceState, NgtArgs, omit, pick, extend, is, applyProps, NgtHTML, addEffect, addAfterEffect, checkUpdate } from 'angular-three';
4
4
  import { assertInjector } from 'ngxtension/assert-injector';
5
5
  import * as THREE from 'three';
6
6
  import { REVISION, Mesh, BoxGeometry, MeshNormalMaterial, AxesHelper, Group, PlaneGeometry, ShaderMaterial } from 'three';
@@ -11,10 +11,10 @@ import { NgTemplateOutlet } from '@angular/common';
11
11
  /**
12
12
  * Use afterNextRender
13
13
  */
14
- function injectAnimations(animations, object, { injector } = {}) {
15
- return assertInjector(injectAnimations, injector, () => {
14
+ function animations(animationsFactory, object, { injector } = {}) {
15
+ return assertInjector(animations, injector, () => {
16
16
  const mixer = new THREE.AnimationMixer(null);
17
- injectBeforeRender(({ delta }) => {
17
+ beforeRender(({ delta }) => {
18
18
  if (!mixer.getRoot())
19
19
  return;
20
20
  mixer.update(delta);
@@ -35,7 +35,7 @@ function injectAnimations(animations, object, { injector } = {}) {
35
35
  if (!obj)
36
36
  return;
37
37
  Object.assign(mixer, { _root: obj });
38
- const maybeAnimationClips = animations();
38
+ const maybeAnimationClips = animationsFactory();
39
39
  if (!maybeAnimationClips)
40
40
  return;
41
41
  const animationClips = Array.isArray(maybeAnimationClips)
@@ -71,11 +71,16 @@ function injectAnimations(animations, object, { injector } = {}) {
71
71
  });
72
72
  });
73
73
  });
74
- const result = { ready, clips, mixer, actions, names };
74
+ const result = { clips, mixer, actions, names };
75
75
  Object.defineProperty(result, 'isReady', { get: ready });
76
76
  return result;
77
77
  });
78
78
  }
79
+ /**
80
+ * @deprecated use animations instead. Will be removed in v5.0.0
81
+ * @since v4.0.0
82
+ */
83
+ const injectAnimations = animations;
79
84
 
80
85
  class NgtsBakeShadows {
81
86
  constructor() {
@@ -299,8 +304,8 @@ const setUpdateRange = (attribute, updateRange) => {
299
304
  }
300
305
  };
301
306
 
302
- function injectFBO(params = () => ({}), { injector } = {}) {
303
- return assertInjector(injectFBO, injector, () => {
307
+ function fbo(params = () => ({}), { injector } = {}) {
308
+ return assertInjector(fbo, injector, () => {
304
309
  const store = injectStore();
305
310
  const width = computed(() => {
306
311
  const { width } = params();
@@ -346,13 +351,18 @@ function injectFBO(params = () => ({}), { injector } = {}) {
346
351
  return target;
347
352
  });
348
353
  }
354
+ /**
355
+ * @deprecated use fbo instead. Will be removed in v5.0.0
356
+ * @since v4.0.0
357
+ */
358
+ const injectFBO = fbo;
349
359
  class NgtsFBO {
350
360
  constructor() {
351
361
  this.fbo = input({});
352
362
  this.template = inject(TemplateRef);
353
363
  this.viewContainerRef = inject(ViewContainerRef);
354
364
  let ref;
355
- const fboTarget = injectFBO(() => {
365
+ const fboTarget = fbo(() => {
356
366
  const { width, height, ...settings } = this.fbo();
357
367
  return { width, height, settings };
358
368
  });
@@ -375,8 +385,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImpor
375
385
  args: [{ selector: 'ng-template[fbo]' }]
376
386
  }], ctorParameters: () => [] });
377
387
 
378
- function injectDepthBuffer(params = () => ({}), { injector } = {}) {
379
- return assertInjector(injectDepthBuffer, injector, () => {
388
+ function depthBuffer(params = () => ({}), { injector } = {}) {
389
+ return assertInjector(depthBuffer, injector, () => {
380
390
  const size = computed(() => params().size || 256);
381
391
  const frames = computed(() => params().frames || Infinity);
382
392
  const store = injectStore();
@@ -388,9 +398,9 @@ function injectDepthBuffer(params = () => ({}), { injector } = {}) {
388
398
  depthTexture.type = THREE.UnsignedShortType;
389
399
  return { depthTexture };
390
400
  });
391
- const depthFBO = injectFBO(() => ({ width: w(), height: h(), settings: depthConfig() }));
401
+ const depthFBO = fbo(() => ({ width: w(), height: h(), settings: depthConfig() }));
392
402
  let count = 0;
393
- injectBeforeRender(({ gl, scene, camera }) => {
403
+ beforeRender(({ gl, scene, camera }) => {
394
404
  if (frames() === Infinity || count < frames()) {
395
405
  gl.setRenderTarget(depthFBO);
396
406
  gl.render(scene, camera);
@@ -401,6 +411,11 @@ function injectDepthBuffer(params = () => ({}), { injector } = {}) {
401
411
  return depthFBO.depthTexture;
402
412
  });
403
413
  }
414
+ /**
415
+ * @deprecated use depthBuffer instead. Will be removed in v5.0.0
416
+ * @since v4.0.0
417
+ */
418
+ const injectDepthBuffer = depthBuffer;
404
419
 
405
420
  const v1 = new THREE.Vector3();
406
421
  const v2 = new THREE.Vector3();
@@ -582,7 +597,7 @@ class NgtsHTMLContent extends NgtHTML {
582
597
  let visible = true;
583
598
  let oldZoom = 0;
584
599
  let oldPosition = [0, 0];
585
- injectBeforeRender(({ camera: rootCamera }) => {
600
+ beforeRender(({ camera: rootCamera }) => {
586
601
  const [hostEl, transformOuterEl, transformInnerEl, group, occlusionMesh, occlusionGeometry, isRaycastOcclusion, { camera, size, viewport, raycaster, scene }, { calculatePosition, eps, zIndexRange, sprite, distanceFactor }, { transform, occlude, scale },] = [
587
602
  this.host.nativeElement,
588
603
  this.transformOuterRef()?.nativeElement,
@@ -914,8 +929,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImpor
914
929
  }], ctorParameters: () => [] });
915
930
  const NgtsHTML = [NgtsHTMLImpl, NgtsHTMLContent];
916
931
 
917
- function injectIntersect(object, { injector, source = signal(false) } = {}) {
918
- return assertInjector(injectIntersect, injector, () => {
932
+ function intersect(object, { injector, source = signal(false) } = {}) {
933
+ return assertInjector(intersect, injector, () => {
919
934
  let check = false;
920
935
  let temp = false;
921
936
  effect((onCleanup) => {
@@ -945,11 +960,16 @@ function injectIntersect(object, { injector, source = signal(false) } = {}) {
945
960
  return source.asReadonly();
946
961
  });
947
962
  }
963
+ /**
964
+ * @deprecated Use `intersect` instead. Will be removed in v5.0.0
965
+ * @since v4.0.0
966
+ */
967
+ const injectIntersect = intersect;
948
968
  class NgtsIntersect {
949
969
  constructor() {
950
970
  this.intersect = model(false);
951
971
  const host = inject(ElementRef);
952
- injectIntersect(() => host, { source: this.intersect });
972
+ intersect(() => host, { source: this.intersect });
953
973
  }
954
974
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: NgtsIntersect, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
955
975
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.1", type: NgtsIntersect, isStandalone: true, selector: "[intersect]", inputs: { intersect: { classPropertyName: "intersect", publicName: "intersect", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { intersect: "intersectChange" }, ngImport: i0 }); }
@@ -1165,5 +1185,5 @@ function calculateScaleFactor(point3, radiusPx, camera, size) {
1165
1185
  * Generated bundle index. Do not edit.
1166
1186
  */
1167
1187
 
1168
- export { NgtsBakeShadows, NgtsComputedAttribute, NgtsDecal, NgtsFBO, NgtsHTML, NgtsHTMLContent, NgtsHTMLImpl, NgtsIntersect, NgtsPreload, NgtsSampler, calculateScaleFactor, getVersion, injectAnimations, injectDepthBuffer, injectFBO, injectIntersect, setUpdateRange, surfaceSampler };
1188
+ export { NgtsBakeShadows, NgtsComputedAttribute, NgtsDecal, NgtsFBO, NgtsHTML, NgtsHTMLContent, NgtsHTMLImpl, NgtsIntersect, NgtsPreload, NgtsSampler, animations, calculateScaleFactor, depthBuffer, fbo, getVersion, injectAnimations, injectDepthBuffer, injectFBO, injectIntersect, intersect, setUpdateRange, surfaceSampler };
1169
1189
  //# sourceMappingURL=angular-three-soba-misc.mjs.map