angular-three-soba 3.0.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/abstractions/lib/catmull-rom-line.d.ts +218 -218
- package/abstractions/lib/edges.d.ts +245 -245
- package/abstractions/lib/grid.d.ts +42 -42
- package/abstractions/lib/line.d.ts +2 -2
- package/abstractions/lib/prism-geometry.d.ts +2 -2
- package/abstractions/lib/rounded-box.d.ts +1 -1
- package/abstractions/lib/text-3d.d.ts +44 -44
- package/abstractions/lib/text.d.ts +1 -1
- package/controls/README.md +28 -29
- package/controls/lib/camera-controls.d.ts +1 -1
- package/controls/lib/orbit-controls.d.ts +1 -1
- package/fesm2022/angular-three-soba-abstractions.mjs +1 -3
- package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
- package/fesm2022/angular-three-soba-cameras.mjs +1 -1
- package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
- package/fesm2022/angular-three-soba-controls.mjs +1 -3
- package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
- package/fesm2022/angular-three-soba-gizmos.mjs +1 -3
- package/fesm2022/angular-three-soba-gizmos.mjs.map +1 -1
- package/fesm2022/angular-three-soba-loaders.mjs +20 -30
- package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-materials.mjs +2 -2
- package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
- package/fesm2022/angular-three-soba-misc.mjs +9 -17
- package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
- package/fesm2022/angular-three-soba-performances.mjs +2 -8
- package/fesm2022/angular-three-soba-performances.mjs.map +1 -1
- package/fesm2022/angular-three-soba-staging.mjs +45 -61
- package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
- package/fesm2022/angular-three-soba-stats.mjs +1 -4
- package/fesm2022/angular-three-soba-stats.mjs.map +1 -1
- package/loaders/README.md +39 -40
- package/materials/lib/custom-shader-material.d.ts +2 -2
- package/materials/lib/mesh-portal-material.d.ts +24 -24
- package/materials/lib/mesh-refraction-material.d.ts +3 -3
- package/materials/lib/mesh-transmission-material.d.ts +1 -1
- package/misc/lib/computed-attribute.d.ts +6 -6
- package/misc/lib/decal.d.ts +1 -1
- package/misc/lib/html/html.d.ts +1 -1
- package/misc/lib/sampler.d.ts +1 -1
- package/package.json +5 -5
- package/performances/lib/instances/instances.d.ts +7 -7
- package/performances/lib/points/points.d.ts +15 -15
- package/performances/lib/segments/segments.d.ts +1 -1
- package/staging/lib/accumulative-shadows.d.ts +1 -1
- package/staging/lib/caustics.d.ts +1 -1
- package/staging/lib/center.d.ts +2 -2
- package/staging/lib/contact-shadows.d.ts +1 -1
- package/staging/lib/lightformer.d.ts +1 -1
- package/staging/lib/mask.d.ts +1 -1
- package/staging/lib/sky.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 { Material } 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<Material | typeof Material | ElementRef<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, NgtMeshPhysicalMaterial, 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<NgtMeshPhysicalMaterial> {\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\tparameters = 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.getElapsedTime() * 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\tinject,\n\tInjector,\n\tinput,\n\tsignal,\n\tTemplateRef,\n\tviewChild,\n} from '@angular/core';\nimport {\n\textend,\n\tgetLocalState,\n\tinjectBeforeRender,\n\tinjectStore,\n\tNgtAttachable,\n\tNgtComputeFunction,\n\tNgtShaderMaterial,\n\tomit,\n\tpick,\n} from 'angular-three';\nimport { getVersion, injectFBO, injectIntersect } from 'angular-three-soba/misc';\nimport { NgtsRenderTexture, NgtsRenderTextureContent } 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 { Mesh, Scene, ShaderMaterial } 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', standalone: true })\nexport class ManagePortalScene {\n\tevents = input<boolean>();\n\trootScene = input.required<Scene>();\n\tmaterial = input.required<NgtMeshPortalMaterial>();\n\tpriority = input.required<number>();\n\tworldUnits = input.required<boolean>();\n\n\tconstructor() {\n\t\tconst injector = inject(Injector);\n\t\tconst renderTextureStore = injectStore();\n\t\tconst portalScene = renderTextureStore.select('scene');\n\t\tconst portalSetEvents = renderTextureStore.select('setEvents');\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 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\tportalScene().matrixAutoUpdate = false;\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst [events, setEvents] = [this.events(), portalSetEvents()];\n\t\t\tif (!events) return;\n\t\t\tsetEvents({ enabled: events });\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst priority = this.priority();\n\n\t\t\t// we start the before render in effect because we need the priority input to be resolved\n\t\t\tconst sub = injectBeforeRender(\n\t\t\t\t({ gl, camera }) => {\n\t\t\t\t\tconst material = this.material();\n\n\t\t\t\t\tconst localState = getLocalState(material);\n\t\t\t\t\tif (!localState) return;\n\n\t\t\t\t\tconst parent = localState.parent();\n\t\t\t\t\tif (!parent) return;\n\n\t\t\t\t\tconst materialBlend = 'blend' in material && typeof material.blend === 'number' ? material.blend : 0;\n\t\t\t\t\tconst [worldUnits, rootScene, scene, [quad, blend]] = [\n\t\t\t\t\t\tthis.worldUnits(),\n\t\t\t\t\t\tthis.rootScene(),\n\t\t\t\t\t\tportalScene(),\n\t\t\t\t\t\tfullScreenQuad(),\n\t\t\t\t\t];\n\t\t\t\t\t// Move portal contents along with the parent if worldUnits is true\n\t\t\t\t\tif (!worldUnits) {\n\t\t\t\t\t\t// If the portal renders exclusively the original scene needs to be updated\n\t\t\t\t\t\tif (priority && materialBlend === 1) parent.updateWorldMatrix(true, false);\n\t\t\t\t\t\tscene.matrixWorld.copy(parent.matrixWorld);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tscene.matrixWorld.identity();\n\t\t\t\t\t}\n\n\t\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\t// and will take over the render loop\n\t\t\t\t\tif (priority) {\n\t\t\t\t\t\tif (materialBlend > 0 && materialBlend < 1) {\n\t\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\t// and the portal scene, both will then be mixed in the quad from above\n\t\t\t\t\t\t\tblend.value = materialBlend;\n\t\t\t\t\t\t\tgl.setRenderTarget(buffer1());\n\t\t\t\t\t\t\tgl.render(scene, camera);\n\t\t\t\t\t\t\tgl.setRenderTarget(buffer2());\n\t\t\t\t\t\t\tgl.render(rootScene, camera);\n\t\t\t\t\t\t\tgl.setRenderTarget(null);\n\t\t\t\t\t\t\tquad.render(gl);\n\t\t\t\t\t\t} else if (materialBlend === 1) {\n\t\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\t\tgl.render(scene, camera);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ injector, priority },\n\t\t\t);\n\t\t\tonCleanup(() => sub());\n\t\t});\n\t}\n}\n\nexport interface NgtsMeshPortalMaterialOptions extends Partial<NgtShaderMaterial> {\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(); injector: 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, NgtsRenderTextureContent, ManagePortalScene, NgTemplateOutlet],\n})\nexport class NgtsMeshPortalMaterial {\n\tattach = input<NgtAttachable>('material');\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\tparameters = omit(this.options, ['blur', 'resolution', 'worldUnits', 'eventPriority', 'renderPriority', 'events']);\n\n\tblur = pick(this.options, 'blur');\n\teventPriority = pick(this.options, 'eventPriority');\n\trenderPriority = pick(this.options, 'renderPriority');\n\tevents = pick(this.options, 'events');\n\tworldUnits = pick(this.options, 'worldUnits');\n\n\tmaterialRef = viewChild.required<ElementRef<InstanceType<typeof MeshPortalMaterial>>>('material');\n\tcontent = contentChild.required(TemplateRef);\n\n\tprivate store = injectStore();\n\tprivate size = this.store.select('size');\n\tprivate viewport = this.store.select('viewport');\n\tprivate gl = this.store.select('gl');\n\tprivate setEvents = this.store.select('setEvents');\n\trootScene = this.store.select('scene');\n\n\tmaterialResolution = computed(() => [\n\t\tthis.size().width * this.viewport().dpr,\n\t\tthis.size().height * this.viewport().dpr,\n\t]);\n\tprivate resolution = pick(this.options, 'resolution');\n\n\tprivate parent = signal<Mesh | null>(null);\n\tprivate visible = injectIntersect(this.parent, { source: signal(true) });\n\n\trenderTextureFrames = computed(() => (this.visible() ? Infinity : 0));\n\trenderTextureCompute = computed(() => {\n\t\tconst [parent, material] = [this.parent(), this.materialRef().nativeElement];\n\n\t\tconst computeFn: (...args: Parameters<NgtComputeFunction>) => false | undefined = (event, state) => {\n\t\t\tif (!parent) return false;\n\t\t\tstate.snapshot.pointer.set(\n\t\t\t\t(event.offsetX / state.snapshot.size.width) * 2 - 1,\n\t\t\t\t-(event.offsetY / state.snapshot.size.height) * 2 + 1,\n\t\t\t);\n\t\t\tstate.snapshot.raycaster.setFromCamera(state.snapshot.pointer, state.snapshot.camera);\n\n\t\t\tif ('blend' in material && material.blend === 0) {\n\t\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\t\tconst [intersection] = state.snapshot.raycaster.intersectObject(parent);\n\t\t\t\tif (!intersection) {\n\t\t\t\t\t// Cancel out the raycast camera if the parent mesh isn't hit\n\t\t\t\t\tObject.assign(state.snapshot.raycaster, { camera: undefined });\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t};\n\n\t\treturn computeFn;\n\t});\n\n\tpriority = signal(0);\n\n\tconstructor() {\n\t\textend({ MeshPortalMaterial });\n\n\t\teffect(\n\t\t\t() => {\n\t\t\t\tconst material = this.materialRef().nativeElement;\n\n\t\t\t\tconst localState = getLocalState(material);\n\t\t\t\tif (!localState) return;\n\n\t\t\t\tconst materialParent = localState.parent();\n\t\t\t\tif (!materialParent || !(materialParent instanceof Mesh)) return;\n\n\t\t\t\t// Since the ref above is not tied to a mesh directly (we're inside a material),\n\t\t\t\t// it has to be tied to the parent mesh here\n\t\t\t\tthis.parent.set(materialParent);\n\t\t\t},\n\t\t\t{ allowSignalWrites: true },\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.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.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\tgetLocalState,\n\tinjectBeforeRender,\n\tinjectStore,\n\tNgtAnyRecord,\n\tNgtArgs,\n\tNgtAttachable,\n\tNgtMeshStandardMaterial,\n\tomit,\n\tpick,\n} from 'angular-three';\nimport { BlurPass, MeshReflectorMaterial } from 'angular-three-soba/vanilla-exports';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport {\n\tDepthFormat,\n\tDepthTexture,\n\tHalfFloatType,\n\tLinearFilter,\n\tMatrix4,\n\tPerspectiveCamera,\n\tPlane,\n\tTexture,\n\tUnsignedShortType,\n\tVector3,\n\tVector4,\n\tWebGLRenderTarget,\n} from 'three';\n\nexport interface NgtsMeshReflectorMaterialOptions extends Partial<NgtMeshStandardMaterial> {\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?: 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\tprivate gl = this.store.select('gl');\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 Plane();\n\tprivate normal = new Vector3();\n\tprivate reflectorWorldPosition = new Vector3();\n\tprivate cameraWorldPosition = new Vector3();\n\tprivate rotationMatrix = new Matrix4();\n\tprivate lookAtPosition = new Vector3(0, 0, -1);\n\tprivate clipPlane = new Vector4();\n\tprivate view = new Vector3();\n\tprivate target = new Vector3();\n\tprivate q = new Vector4();\n\tprivate textureMatrix = new Matrix4();\n\tprivate virtualCamera = new 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.gl(), this.reflectOptions(), this.normalizedBlur(), this.hasBlur()];\n\n\t\tconst renderTargetParameters = {\n\t\t\tminFilter: LinearFilter,\n\t\t\tmagFilter: LinearFilter,\n\t\t\ttype: HalfFloatType,\n\t\t};\n\n\t\tconst fbo1 = new WebGLRenderTarget(resolution, resolution, renderTargetParameters);\n\t\tfbo1.depthBuffer = true;\n\t\tfbo1.depthTexture = new DepthTexture(resolution, resolution);\n\t\tfbo1.depthTexture.format = DepthFormat;\n\t\tfbo1.depthTexture.type = UnsignedShortType;\n\t\tconst fbo2 = new 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 localState = getLocalState(material);\n\t\t\tif (!localState) return;\n\n\t\t\tconst parent = Reflect.get(material, 'parent') ?? untracked(localState.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 localState = getLocalState(material);\n\t\tif (!localState) return;\n\n\t\tconst parent = Reflect.get(material, 'parent') ?? untracked(localState.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\tgetLocalState,\n\tinjectBeforeRender,\n\tinjectStore,\n\tNgtAnyRecord,\n\tNgtArgs,\n\tNgtAttachable,\n\tNgtShaderMaterial,\n\tomit,\n\tpick,\n} from 'angular-three';\nimport { MeshRefractionMaterial } from 'angular-three-soba/shaders';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport { ColorRepresentation, CubeTexture, Mesh, Texture } from 'three';\nimport { MeshBVH, MeshBVHUniformStruct, SAH } from 'three-mesh-bvh';\n\nexport interface NgtsMeshRefractionMaterialOptions extends Partial<NgtShaderMaterial> {\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: 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\nfunction isCubeTexture(def: CubeTexture | Texture): def is CubeTexture {\n\treturn def && (def as CubeTexture).isCubeTexture;\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<CubeTexture | Texture>();\n\tattach = input<NgtAttachable>('material');\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\tparameters = omit(this.options, ['fastChroma', 'aberrationStrength']);\n\n\tprivate fastChroma = pick(this.options, 'fastChroma');\n\taberrationStrength = pick(this.options, 'aberrationStrength');\n\n\tmaterialRef = viewChild<ElementRef<InstanceType<typeof MeshRefractionMaterial>>>('material');\n\n\tprivate store = injectStore();\n\tprivate size = this.store.select('size');\n\n\tresolution = computed(() => [this.size().width, this.size().height]);\n\tdefines = 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 = isCubeTexture(envMap);\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\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// 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 localState = getLocalState(material);\n\t\t\tif (!localState) return;\n\n\t\t\tconst parent = untracked(localState.parent);\n\t\t\tconst geometry = (parent as Mesh).geometry;\n\t\t\tif (geometry) {\n\t\t\t\t(material as any).bvh = new MeshBVHUniformStruct();\n\t\t\t\t(material as any).bvh.updateFrom(new MeshBVH(geometry.clone().toNonIndexed(), { strategy: SAH }));\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\t(material as any).viewMatrixInverse = camera.matrixWorld;\n\t\t\t\t(material as any).projectionMatrixInverse = camera.projectionMatrixInverse;\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\tgetLocalState,\n\tinjectBeforeRender,\n\tNgtAnyRecord,\n\tNgtArgs,\n\tNgtAttachable,\n\tNgtMeshPhysicalMaterial,\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 { BackSide, Color, FrontSide, Mesh, NoToneMapping, Texture, ToneMapping } from 'three';\n\nexport type MeshTransmissionMaterialOptions = ConstructorParameters<typeof MeshTransmissionMaterial>[0];\n\nexport type NgtsMeshTransmissionMaterialOptions = Partial<NgtMeshPhysicalMaterial> &\n\tOmit<MeshTransmissionMaterialOptions, 'buffer' | 'anisotropicBlur' | 'samples' | 'transmissionSampler'> & {\n\t\tanisotropicBlur?: number;\n\t\tbuffer?: 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?: Texture | Color;\n\t};\n\nconst defaultOptions: NgtsMeshTransmissionMaterialOptions = {\n\ttransmissionSampler: false,\n\tbackside: false,\n\tside: 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\tparameters = 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\ttransmissionSampler = pick(this.options, 'transmissionSampler');\n\ttransmission = pick(this.options, 'transmission');\n\tthickness = pick(this.options, 'thickness');\n\tside = 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\tbufferTexture = computed(() => this.buffer() || this.fboMain().texture);\n\tanisotropicBlurOption = computed(() => this.anisotropicBlur() || this.anisotropy());\n\n\tprivate discardMaterial = new MeshDiscardMaterial();\n\n\tmaterial = 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: Texture | Color | null;\n\t\tlet oldEnvMapIntensity: number | undefined;\n\t\tlet oldTone: ToneMapping | undefined;\n\t\tlet parent: 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.getElapsedTime();\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 = getLocalState(material)?.parent() as 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 = 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: 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, NgtMeshStandardMaterial, omit } from 'angular-three';\nimport { MeshWobbleMaterial, MeshWobbleMaterialParameters } from 'angular-three-soba/vanilla-exports';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\n\nexport interface NgtsMeshWobbleMaterialOptions extends MeshWobbleMaterialParameters, Partial<NgtMeshStandardMaterial> {\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\tparameters = omit(this.options, ['speed']);\n\n\tmaterial = 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 { PointsMaterialParameters } 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 PointsMaterialParameters);\n\n\tmaterial = 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 { Material } 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<Material | typeof Material | ElementRef<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, NgtMeshPhysicalMaterial, 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<NgtMeshPhysicalMaterial> {\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\tparameters = 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.getElapsedTime() * 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\tinject,\n\tInjector,\n\tinput,\n\tsignal,\n\tTemplateRef,\n\tviewChild,\n} from '@angular/core';\nimport {\n\textend,\n\tgetLocalState,\n\tinjectBeforeRender,\n\tinjectStore,\n\tNgtAttachable,\n\tNgtComputeFunction,\n\tNgtShaderMaterial,\n\tomit,\n\tpick,\n} from 'angular-three';\nimport { getVersion, injectFBO, injectIntersect } from 'angular-three-soba/misc';\nimport { NgtsRenderTexture, NgtsRenderTextureContent } 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 { Mesh, Scene, ShaderMaterial } 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<Scene>();\n\tmaterial = input.required<NgtMeshPortalMaterial>();\n\tpriority = input.required<number>();\n\tworldUnits = input.required<boolean>();\n\n\tconstructor() {\n\t\tconst injector = inject(Injector);\n\t\tconst renderTextureStore = injectStore();\n\t\tconst portalScene = renderTextureStore.select('scene');\n\t\tconst portalSetEvents = renderTextureStore.select('setEvents');\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 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\tportalScene().matrixAutoUpdate = false;\n\t\t});\n\n\t\teffect(() => {\n\t\t\tconst [events, setEvents] = [this.events(), portalSetEvents()];\n\t\t\tif (!events) return;\n\t\t\tsetEvents({ enabled: events });\n\t\t});\n\n\t\teffect((onCleanup) => {\n\t\t\tconst priority = this.priority();\n\n\t\t\t// we start the before render in effect because we need the priority input to be resolved\n\t\t\tconst sub = injectBeforeRender(\n\t\t\t\t({ gl, camera }) => {\n\t\t\t\t\tconst material = this.material();\n\n\t\t\t\t\tconst localState = getLocalState(material);\n\t\t\t\t\tif (!localState) return;\n\n\t\t\t\t\tconst parent = localState.parent();\n\t\t\t\t\tif (!parent) return;\n\n\t\t\t\t\tconst materialBlend = 'blend' in material && typeof material.blend === 'number' ? material.blend : 0;\n\t\t\t\t\tconst [worldUnits, rootScene, scene, [quad, blend]] = [\n\t\t\t\t\t\tthis.worldUnits(),\n\t\t\t\t\t\tthis.rootScene(),\n\t\t\t\t\t\tportalScene(),\n\t\t\t\t\t\tfullScreenQuad(),\n\t\t\t\t\t];\n\t\t\t\t\t// Move portal contents along with the parent if worldUnits is true\n\t\t\t\t\tif (!worldUnits) {\n\t\t\t\t\t\t// If the portal renders exclusively the original scene needs to be updated\n\t\t\t\t\t\tif (priority && materialBlend === 1) parent.updateWorldMatrix(true, false);\n\t\t\t\t\t\tscene.matrixWorld.copy(parent.matrixWorld);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tscene.matrixWorld.identity();\n\t\t\t\t\t}\n\n\t\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\t// and will take over the render loop\n\t\t\t\t\tif (priority) {\n\t\t\t\t\t\tif (materialBlend > 0 && materialBlend < 1) {\n\t\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\t// and the portal scene, both will then be mixed in the quad from above\n\t\t\t\t\t\t\tblend.value = materialBlend;\n\t\t\t\t\t\t\tgl.setRenderTarget(buffer1());\n\t\t\t\t\t\t\tgl.render(scene, camera);\n\t\t\t\t\t\t\tgl.setRenderTarget(buffer2());\n\t\t\t\t\t\t\tgl.render(rootScene, camera);\n\t\t\t\t\t\t\tgl.setRenderTarget(null);\n\t\t\t\t\t\t\tquad.render(gl);\n\t\t\t\t\t\t} else if (materialBlend === 1) {\n\t\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\t\tgl.render(scene, camera);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ injector, priority },\n\t\t\t);\n\t\t\tonCleanup(() => sub());\n\t\t});\n\t}\n}\n\nexport interface NgtsMeshPortalMaterialOptions extends Partial<NgtShaderMaterial> {\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(); injector: 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, NgtsRenderTextureContent, ManagePortalScene, NgTemplateOutlet],\n})\nexport class NgtsMeshPortalMaterial {\n\tattach = input<NgtAttachable>('material');\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\tparameters = omit(this.options, ['blur', 'resolution', 'worldUnits', 'eventPriority', 'renderPriority', 'events']);\n\n\tblur = pick(this.options, 'blur');\n\teventPriority = pick(this.options, 'eventPriority');\n\trenderPriority = pick(this.options, 'renderPriority');\n\tevents = pick(this.options, 'events');\n\tworldUnits = pick(this.options, 'worldUnits');\n\n\tmaterialRef = viewChild.required<ElementRef<InstanceType<typeof MeshPortalMaterial>>>('material');\n\tcontent = contentChild.required(TemplateRef);\n\n\tprivate store = injectStore();\n\tprivate size = this.store.select('size');\n\tprivate viewport = this.store.select('viewport');\n\tprivate gl = this.store.select('gl');\n\tprivate setEvents = this.store.select('setEvents');\n\trootScene = this.store.select('scene');\n\n\tmaterialResolution = computed(() => [\n\t\tthis.size().width * this.viewport().dpr,\n\t\tthis.size().height * this.viewport().dpr,\n\t]);\n\tprivate resolution = pick(this.options, 'resolution');\n\n\tprivate parent = signal<Mesh | null>(null);\n\tprivate visible = injectIntersect(this.parent, { source: signal(true) });\n\n\trenderTextureFrames = computed(() => (this.visible() ? Infinity : 0));\n\trenderTextureCompute = computed(() => {\n\t\tconst [parent, material] = [this.parent(), this.materialRef().nativeElement];\n\n\t\tconst computeFn: (...args: Parameters<NgtComputeFunction>) => false | undefined = (event, state) => {\n\t\t\tif (!parent) return false;\n\t\t\tstate.snapshot.pointer.set(\n\t\t\t\t(event.offsetX / state.snapshot.size.width) * 2 - 1,\n\t\t\t\t-(event.offsetY / state.snapshot.size.height) * 2 + 1,\n\t\t\t);\n\t\t\tstate.snapshot.raycaster.setFromCamera(state.snapshot.pointer, state.snapshot.camera);\n\n\t\t\tif ('blend' in material && material.blend === 0) {\n\t\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\t\tconst [intersection] = state.snapshot.raycaster.intersectObject(parent);\n\t\t\t\tif (!intersection) {\n\t\t\t\t\t// Cancel out the raycast camera if the parent mesh isn't hit\n\t\t\t\t\tObject.assign(state.snapshot.raycaster, { camera: undefined });\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn;\n\t\t};\n\n\t\treturn computeFn;\n\t});\n\n\tpriority = 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 localState = getLocalState(material);\n\t\t\tif (!localState) return;\n\n\t\t\tconst materialParent = localState.parent();\n\t\t\tif (!materialParent || !(materialParent instanceof Mesh)) 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.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.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\tgetLocalState,\n\tinjectBeforeRender,\n\tinjectStore,\n\tNgtAnyRecord,\n\tNgtArgs,\n\tNgtAttachable,\n\tNgtMeshStandardMaterial,\n\tomit,\n\tpick,\n} from 'angular-three';\nimport { BlurPass, MeshReflectorMaterial } from 'angular-three-soba/vanilla-exports';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport {\n\tDepthFormat,\n\tDepthTexture,\n\tHalfFloatType,\n\tLinearFilter,\n\tMatrix4,\n\tPerspectiveCamera,\n\tPlane,\n\tTexture,\n\tUnsignedShortType,\n\tVector3,\n\tVector4,\n\tWebGLRenderTarget,\n} from 'three';\n\nexport interface NgtsMeshReflectorMaterialOptions extends Partial<NgtMeshStandardMaterial> {\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?: 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\tprivate gl = this.store.select('gl');\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 Plane();\n\tprivate normal = new Vector3();\n\tprivate reflectorWorldPosition = new Vector3();\n\tprivate cameraWorldPosition = new Vector3();\n\tprivate rotationMatrix = new Matrix4();\n\tprivate lookAtPosition = new Vector3(0, 0, -1);\n\tprivate clipPlane = new Vector4();\n\tprivate view = new Vector3();\n\tprivate target = new Vector3();\n\tprivate q = new Vector4();\n\tprivate textureMatrix = new Matrix4();\n\tprivate virtualCamera = new 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.gl(), this.reflectOptions(), this.normalizedBlur(), this.hasBlur()];\n\n\t\tconst renderTargetParameters = {\n\t\t\tminFilter: LinearFilter,\n\t\t\tmagFilter: LinearFilter,\n\t\t\ttype: HalfFloatType,\n\t\t};\n\n\t\tconst fbo1 = new WebGLRenderTarget(resolution, resolution, renderTargetParameters);\n\t\tfbo1.depthBuffer = true;\n\t\tfbo1.depthTexture = new DepthTexture(resolution, resolution);\n\t\tfbo1.depthTexture.format = DepthFormat;\n\t\tfbo1.depthTexture.type = UnsignedShortType;\n\t\tconst fbo2 = new 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 localState = getLocalState(material);\n\t\t\tif (!localState) return;\n\n\t\t\tconst parent = Reflect.get(material, 'parent') ?? untracked(localState.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 localState = getLocalState(material);\n\t\tif (!localState) return;\n\n\t\tconst parent = Reflect.get(material, 'parent') ?? untracked(localState.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\tgetLocalState,\n\tinjectBeforeRender,\n\tinjectStore,\n\tNgtAnyRecord,\n\tNgtArgs,\n\tNgtAttachable,\n\tNgtShaderMaterial,\n\tomit,\n\tpick,\n} from 'angular-three';\nimport { MeshRefractionMaterial } from 'angular-three-soba/shaders';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\nimport { ColorRepresentation, CubeTexture, Mesh, Texture } from 'three';\nimport { MeshBVH, MeshBVHUniformStruct, SAH } from 'three-mesh-bvh';\n\nexport interface NgtsMeshRefractionMaterialOptions extends Partial<NgtShaderMaterial> {\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: 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\nfunction isCubeTexture(def: CubeTexture | Texture): def is CubeTexture {\n\treturn def && (def as CubeTexture).isCubeTexture;\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<CubeTexture | Texture>();\n\tattach = input<NgtAttachable>('material');\n\toptions = input(defaultOptions, { transform: mergeInputs(defaultOptions) });\n\tparameters = omit(this.options, ['fastChroma', 'aberrationStrength']);\n\n\tprivate fastChroma = pick(this.options, 'fastChroma');\n\taberrationStrength = pick(this.options, 'aberrationStrength');\n\n\tmaterialRef = viewChild<ElementRef<InstanceType<typeof MeshRefractionMaterial>>>('material');\n\n\tprivate store = injectStore();\n\tprivate size = this.store.select('size');\n\n\tresolution = computed(() => [this.size().width, this.size().height]);\n\tdefines = 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 = isCubeTexture(envMap);\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\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// 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 localState = getLocalState(material);\n\t\t\tif (!localState) return;\n\n\t\t\tconst parent = untracked(localState.parent);\n\t\t\tconst geometry = (parent as Mesh).geometry;\n\t\t\tif (geometry) {\n\t\t\t\t(material as any).bvh = new MeshBVHUniformStruct();\n\t\t\t\t(material as any).bvh.updateFrom(new MeshBVH(geometry.clone().toNonIndexed(), { strategy: SAH }));\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\t(material as any).viewMatrixInverse = camera.matrixWorld;\n\t\t\t\t(material as any).projectionMatrixInverse = camera.projectionMatrixInverse;\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\tgetLocalState,\n\tinjectBeforeRender,\n\tNgtAnyRecord,\n\tNgtArgs,\n\tNgtAttachable,\n\tNgtMeshPhysicalMaterial,\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 { BackSide, Color, FrontSide, Mesh, NoToneMapping, Texture, ToneMapping } from 'three';\n\nexport type MeshTransmissionMaterialOptions = ConstructorParameters<typeof MeshTransmissionMaterial>[0];\n\nexport type NgtsMeshTransmissionMaterialOptions = Partial<NgtMeshPhysicalMaterial> &\n\tOmit<MeshTransmissionMaterialOptions, 'buffer' | 'anisotropicBlur' | 'samples' | 'transmissionSampler'> & {\n\t\tanisotropicBlur?: number;\n\t\tbuffer?: 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?: Texture | Color;\n\t};\n\nconst defaultOptions: NgtsMeshTransmissionMaterialOptions = {\n\ttransmissionSampler: false,\n\tbackside: false,\n\tside: 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\tparameters = 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\ttransmissionSampler = pick(this.options, 'transmissionSampler');\n\ttransmission = pick(this.options, 'transmission');\n\tthickness = pick(this.options, 'thickness');\n\tside = 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\tbufferTexture = computed(() => this.buffer() || this.fboMain().texture);\n\tanisotropicBlurOption = computed(() => this.anisotropicBlur() || this.anisotropy());\n\n\tprivate discardMaterial = new MeshDiscardMaterial();\n\n\tmaterial = 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: Texture | Color | null;\n\t\tlet oldEnvMapIntensity: number | undefined;\n\t\tlet oldTone: ToneMapping | undefined;\n\t\tlet parent: 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.getElapsedTime();\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 = getLocalState(material)?.parent() as 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 = 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: 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, NgtMeshStandardMaterial, omit } from 'angular-three';\nimport { MeshWobbleMaterial, MeshWobbleMaterialParameters } from 'angular-three-soba/vanilla-exports';\nimport { mergeInputs } from 'ngxtension/inject-inputs';\n\nexport interface NgtsMeshWobbleMaterialOptions extends MeshWobbleMaterialParameters, Partial<NgtMeshStandardMaterial> {\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\tparameters = omit(this.options, ['speed']);\n\n\tmaterial = 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 { PointsMaterialParameters } 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 PointsMaterialParameters);\n\n\tmaterial = 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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"}
|
|
@@ -54,11 +54,9 @@ function injectAnimations(animations, object, { injector } = {}) {
|
|
|
54
54
|
});
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
|
-
untracked(
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
});
|
|
57
|
+
if (!untracked(ready)) {
|
|
58
|
+
ready.set(true);
|
|
59
|
+
}
|
|
62
60
|
onCleanup(() => {
|
|
63
61
|
// clear cached
|
|
64
62
|
cached = {};
|
|
@@ -92,7 +90,7 @@ class NgtsBakeShadows {
|
|
|
92
90
|
}
|
|
93
91
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NgtsBakeShadows, decorators: [{
|
|
94
92
|
type: Directive,
|
|
95
|
-
args: [{
|
|
93
|
+
args: [{ selector: 'ngts-bake-shadows' }]
|
|
96
94
|
}], ctorParameters: () => [] });
|
|
97
95
|
|
|
98
96
|
/**
|
|
@@ -254,7 +252,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
254
252
|
type: Component,
|
|
255
253
|
args: [{
|
|
256
254
|
selector: 'ngts-decal',
|
|
257
|
-
standalone: true,
|
|
258
255
|
template: `
|
|
259
256
|
<ngt-mesh #mesh [parameters]="parameters()">
|
|
260
257
|
<ngt-value [rawValue]="true" attach="material.transparent" />
|
|
@@ -356,11 +353,8 @@ class NgtsFBO {
|
|
|
356
353
|
return { width, height, settings };
|
|
357
354
|
});
|
|
358
355
|
effect(() => {
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
ref = this.viewContainerRef.createEmbeddedView(this.template, { $implicit: fboTarget });
|
|
362
|
-
ref.detectChanges();
|
|
363
|
-
});
|
|
356
|
+
ref = this.viewContainerRef.createEmbeddedView(this.template, { $implicit: fboTarget });
|
|
357
|
+
ref.detectChanges();
|
|
364
358
|
});
|
|
365
359
|
inject(DestroyRef).onDestroy(() => {
|
|
366
360
|
ref?.destroy();
|
|
@@ -374,7 +368,7 @@ class NgtsFBO {
|
|
|
374
368
|
}
|
|
375
369
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NgtsFBO, decorators: [{
|
|
376
370
|
type: Directive,
|
|
377
|
-
args: [{ selector: 'ng-template[fbo]'
|
|
371
|
+
args: [{ selector: 'ng-template[fbo]' }]
|
|
378
372
|
}], ctorParameters: () => [] });
|
|
379
373
|
|
|
380
374
|
function injectDepthBuffer(params = () => ({}), { injector } = {}) {
|
|
@@ -505,7 +499,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
505
499
|
type: Component,
|
|
506
500
|
args: [{
|
|
507
501
|
selector: 'ngts-html',
|
|
508
|
-
standalone: true,
|
|
509
502
|
template: `
|
|
510
503
|
<ngt-group #group [parameters]="parameters()">
|
|
511
504
|
@if (occlude() && !isRaycastOcclusion()) {
|
|
@@ -959,7 +952,7 @@ class NgtsIntersect {
|
|
|
959
952
|
}
|
|
960
953
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NgtsIntersect, decorators: [{
|
|
961
954
|
type: Directive,
|
|
962
|
-
args: [{
|
|
955
|
+
args: [{ selector: '[intersect]' }]
|
|
963
956
|
}], ctorParameters: () => [] });
|
|
964
957
|
|
|
965
958
|
class NgtsPreload {
|
|
@@ -1013,7 +1006,7 @@ class NgtsPreload {
|
|
|
1013
1006
|
}
|
|
1014
1007
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NgtsPreload, decorators: [{
|
|
1015
1008
|
type: Directive,
|
|
1016
|
-
args: [{ selector: 'ngts-preload'
|
|
1009
|
+
args: [{ selector: 'ngts-preload' }]
|
|
1017
1010
|
}], ctorParameters: () => [] });
|
|
1018
1011
|
|
|
1019
1012
|
function injectSurfaceSampler(mesh, options = () => ({}), { injector } = {}) {
|
|
@@ -1120,7 +1113,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
1120
1113
|
type: Component,
|
|
1121
1114
|
args: [{
|
|
1122
1115
|
selector: 'ngts-sampler',
|
|
1123
|
-
standalone: true,
|
|
1124
1116
|
template: `
|
|
1125
1117
|
<ngt-group #group [parameters]="parameters()">
|
|
1126
1118
|
<ng-content />
|