@takram/three-geospatial 0.9.0 → 0.9.1

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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.9.1] - 2026-05-06
4
+
5
+ ### Fixed
6
+
7
+ - Fixed subclasses of TextureNode not being properly cloned.
8
+
3
9
  ## [0.9.0] - 2026-04-27
4
10
 
5
11
  All changes were made to the WebGPU implementation, unless otherwise noted.
package/build/webgpu.cjs CHANGED
@@ -1,7 +1,7 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("three/tsl"),f=require("three/webgpu"),g=require("three"),He=require("three/examples/jsm/csm/CSMShadowNode.js"),ce=require("./shared2.cjs"),w=require("./shared.cjs"),ee=require("three/src/nodes/core/NodeUtils.js");function Te(o){if(typeof o=="string")return o;if("layout"in o&&o.layout instanceof f.StructTypeNode){if(o.layout.name==null)throw new Error("Struct name is required.");return o.layout.name}throw new Error(`Unsupported layout type: ${o}`)}function B({typeOnly:o=!1,...t}){return o?s=>e.Fn(s):s=>e.Fn(s).setLayout({...t,type:Te(t.type),inputs:t.inputs?.map(n=>({...n,type:Te(n.type)}))??[]})}function O(o){return e.Fn((t,s)=>{const n=o(...t);return typeof n=="function"?n(s):n})}const de=O((o,t,s,n)=>i=>{s??=Z(t),n??=Y(t);const r=t?.isPerspectiveCamera===!0;return i.renderer.logarithmicDepthBuffer?e.logarithmicDepthToViewZ(o,s,n):r?e.perspectiveDepthToViewZ(o,s,n):e.orthographicDepthToViewZ(o,s,n)}),J=(o,t,s)=>{t??=e.cameraNear,s??=e.cameraFar;const n=e.logarithmicDepthToViewZ(o,t,s);return e.viewZToPerspectiveDepth(n,t,s)},Ze=(o,t,s)=>{t??=e.cameraNear,s??=e.cameraFar;const n=e.perspectiveDepthToViewZ(o,t,s);return e.viewZToLogarithmicDepth(n,t,s)},Ye=(o,t,s,n,i)=>{const r=n.element(e.int(2)).element(e.int(3)),a=n.element(e.int(3)).element(e.int(3)),c=e.vec4(e.vec3(o.flipY(),t).mul(2).sub(1),1).mul(s.mul(r).add(a));return i.mul(c).xyz},re=[[58.1375,2.7747,26.8183],[-150.5666,4.2109,-88.5066],[130.5887,-14.0195,109.0745],[-42.3277,4.8052,-60.1097],[4.5974,2.1856,12.5925],[.1357,.0914,.1067]],Re=B({name:"turbo",type:"vec3",inputs:[{name:"x",type:"float"}]})(([o])=>{const t=e.vec3(...re[0]).toVar();for(let s=1;s<re.length;++s)t.assign(e.vec3(...re[s]).add(o.mul(t)));return t}),_e=O((o,t,s,n)=>{s??=Z(t),n??=Y(t);const i=de(o,t,s,n);return Re(e.viewZToLogarithmicDepth(i,s,n))}),Xe=B({name:"equirectToDirectionWorld",type:"vec3",inputs:[{name:"uv",type:"vec2"}]})(([o])=>{const t=e.sub(.5,o.x).mul(e.PI2),s=e.sub(o.y,.5).mul(e.PI),n=e.cos(s);return e.vec3(n.mul(e.cos(t)),e.sin(s),n.mul(e.sin(t)))});let ae;function W(o,t,s){ae??=new WeakMap;let n=ae.get(o);return n==null&&(n={},ae.set(o,n)),n[t]??=s()}const Ke=o=>o!=null?W(o,"projectionMatrix",()=>e.reference("projectionMatrix","mat4",o).setName("projectionMatrix")):e.cameraProjectionMatrix,Qe=o=>o!=null?W(o,"viewMatrix",()=>e.reference("matrixWorldInverse","mat4",o).setName("viewMatrix")):e.cameraViewMatrix,Je=o=>o!=null?W(o,"inverseProjectionMatrix",()=>e.reference("projectionMatrixInverse","mat4",o).setName("inverseProjectionMatrix")):e.cameraProjectionMatrixInverse,et=o=>o!=null?W(o,"inverseViewMatrix",()=>e.reference("matrixWorld","mat4",o).setName("inverseViewMatrix")):e.cameraWorldMatrix,tt=o=>o!=null?W(o,"cameraPositionWorld",()=>e.uniform("vec3").setName("cameraPositionWorld").onRenderUpdate((t,{value:s})=>{s.setFromMatrixPosition(o.matrixWorld)})):e.cameraPosition,Z=o=>o!=null?W(o,"cameraNear",()=>e.reference("near","float",o).setName("cameraNear")):e.cameraNear,Y=o=>o!=null?W(o,"cameraFar",()=>e.reference("far","float",o).setName("cameraFar")):e.cameraFar,st=e.Fn(({camera:o})=>de(e.depth,o)).once()().toVar("viewZ"),ot=new g.Vector3,nt=new g.Plane;class it extends He.CSMShadowNode{updateBefore(t){super.updateBefore(t);const{lights:s}=this;if(s.length<2)return;const n=s[s.length-1],i=ot.subVectors(n.target.position,n.position).normalize(),r=nt.setFromNormalAndCoplanarPoint(i,n.position);for(let a=0;a<s.length-1;++a){const u=s[a];r.projectPoint(u.position,u.position),u.target.position.copy(u.position).add(i)}}}async function te(o,t){const s=new g.Mesh(new ce.QuadGeometry,t);try{return await o.debug.getShaderAsync(new g.Scene,new g.Camera,s)}catch(n){return console.error(n),{vertexShader:null,fragmentShader:null}}finally{s.geometry.dispose()}}async function rt(o,t){const{vertexShader:s,fragmentShader:n}=await te(o,t);return s!=null&&n!=null?`// Vertex shader
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("three/tsl"),g=require("three"),He=require("three/examples/jsm/csm/CSMShadowNode.js"),f=require("three/webgpu"),ce=require("./shared2.cjs"),w=require("./shared.cjs"),ee=require("three/src/nodes/core/NodeUtils.js");let re;function W(o,t,s){re??=new WeakMap;let n=re.get(o);return n==null&&(n={},re.set(o,n)),n[t]??=s()}const Ze=o=>o!=null?W(o,"projectionMatrix",()=>e.reference("projectionMatrix","mat4",o).setName("projectionMatrix")):e.cameraProjectionMatrix,Ye=o=>o!=null?W(o,"viewMatrix",()=>e.reference("matrixWorldInverse","mat4",o).setName("viewMatrix")):e.cameraViewMatrix,_e=o=>o!=null?W(o,"inverseProjectionMatrix",()=>e.reference("projectionMatrixInverse","mat4",o).setName("inverseProjectionMatrix")):e.cameraProjectionMatrixInverse,Xe=o=>o!=null?W(o,"inverseViewMatrix",()=>e.reference("matrixWorld","mat4",o).setName("inverseViewMatrix")):e.cameraWorldMatrix,Ke=o=>o!=null?W(o,"cameraPositionWorld",()=>e.uniform("vec3").setName("cameraPositionWorld").onRenderUpdate((t,{value:s})=>{s.setFromMatrixPosition(o.matrixWorld)})):e.cameraPosition,Z=o=>o!=null?W(o,"cameraNear",()=>e.reference("near","float",o).setName("cameraNear")):e.cameraNear,Y=o=>o!=null?W(o,"cameraFar",()=>e.reference("far","float",o).setName("cameraFar")):e.cameraFar,Qe=e.Fn(()=>e.positionView.z).once()().toVar("viewZ"),Je=new g.Vector3,et=new g.Plane;class tt extends He.CSMShadowNode{updateBefore(t){super.updateBefore(t);const{lights:s}=this;if(s.length<2)return;const n=s[s.length-1],i=Je.subVectors(n.target.position,n.position).normalize(),r=et.setFromNormalAndCoplanarPoint(i,n.position);for(let a=0;a<s.length-1;++a){const u=s[a];r.projectPoint(u.position,u.position),u.target.position.copy(u.position).add(i)}}}async function te(o,t){const s=new g.Mesh(new ce.QuadGeometry,t);try{return await o.debug.getShaderAsync(new g.Scene,new g.Camera,s)}catch(n){return console.error(n),{vertexShader:null,fragmentShader:null}}finally{s.geometry.dispose()}}async function st(o,t){const{vertexShader:s,fragmentShader:n}=await te(o,t);return s!=null&&n!=null?`// Vertex shader
2
2
 
3
3
  ${s}
4
4
  // Fragment shader
5
5
 
6
- ${n}`:null}async function at(o,t){return(await te(o,t)).vertexShader}async function ct(o,t){return(await te(o,t)).fragmentShader}async function ut(o,t){const s=new f.NodeMaterial;s.vertexNode=e.vec4(e.positionGeometry.xy,0,1),s.fragmentNode=t.toConst("debugNode");const n=await te(o,s);return s.dispose(),n.fragmentShader}function lt(o,t,s){const n=o[t];return o[t]=((...i)=>(s(...i),n.apply(o,i))),o}class De extends f.TextureNode{static get type(){return"OutputTextureNode"}constructor(t,s){super(s),this.owner=t,this.setUpdateMatrix(!1)}setup(t){return this.owner.build(t),super.setup(t)}clone(){return new this.constructor(this.owner,this.value)}}const se=(...o)=>new De(...o);class oe extends f.TempNode{constructor(t){super("vec4"),this.resolutionScale=1,this.renderTargets=[],this.updateBeforeType=f.NodeUpdateType.FRAME,this.inputNode=t}static get type(){return"FilterNode"}createRenderTarget(t){const s=new g.RenderTarget(1,1,{depthBuffer:!1,type:g.HalfFloatType,format:g.RGBAFormat}),n=s.texture;n.minFilter=g.LinearFilter,n.magFilter=g.LinearFilter,n.generateMipmaps=!1;const i=this.constructor.type;return n.name=t!=null?`${i}_${t}`:i,this.renderTargets.push(s),s}getTextureNode(){return w.invariant(this.textureNode!=null,"outputTexture must be specified before getTextureNode() is called."),this.textureNode}get outputTexture(){return this.textureNode?.value??null}set outputTexture(t){this.textureNode=t!=null?se(this,t):void 0}setup(t){const{inputNode:s,textureNode:n}=this;return w.invariant(s!=null,"inputNode must be specified before being setup."),w.invariant(n!=null,"outputTexture must be specified before being setup."),n.uvNode=s.uvNode,n}dispose(){for(const t of this.renderTargets)t.dispose();super.dispose()}}const{resetRendererState:dt,restoreRendererState:ht}=f.RendererUtils;class he extends oe{constructor(t,s){super(t),this.downsampleRTs=[],this.upsampleRTs=[],this.downsampleMaterial=new f.NodeMaterial,this.upsampleMaterial=new f.NodeMaterial,this.mesh=new f.QuadMesh,this.inputTexelSize=e.uniform("vec2"),this.downsampleNode=e.texture();const n=this.constructor.type.replace(/Node$/,"");this.downsampleMaterial.name=`${n}_downsample`,this.upsampleMaterial.name=`${n}_upsample`,this.mesh.name=n;for(let i=0;i<s;++i)this.downsampleRTs[i]=this.createRenderTarget(`downsample${i}`),i<s-1&&(this.upsampleRTs[i]=this.createRenderTarget(`upsample${i}`));this.outputTexture=this.upsampleRTs[0].texture}setSize(t,s){const{resolutionScale:n}=this;let i=Math.max(Math.round(t*n),1),r=Math.max(Math.round(s*n),1);const{downsampleRTs:a,upsampleRTs:u}=this;for(let c=0;c<a.length;++c)i=Math.max(Math.round(i/2),1),r=Math.max(Math.round(r/2),1),a[c].setSize(i,r),c<u.length&&u[c].setSize(i,r);return this}updateBefore({renderer:t}){if(t==null)return;const{downsampleRTs:s,upsampleRTs:n,mesh:i,inputNode:r,inputTexelSize:a,downsampleNode:u}=this;w.invariant(r!=null);const{width:c,height:h}=r.value;this.setSize(c,h);const d=r.value;this.rendererState=dt(t,this.rendererState),i.material=this.downsampleMaterial;for(const l of s){const{width:m,height:p}=r.value;a.value.set(1/m,1/p),t.setRenderTarget(l),i.render(t),r.value=l.texture}i.material=this.upsampleMaterial;for(let l=n.length-1;l>=0;--l){const m=n[l],{width:p,height:v}=r.value;a.value.set(1/p,1/v),u.value=s[l].texture,t.setRenderTarget(m),i.render(t),r.value=m.texture}ht(t,this.rendererState),r.value=d}setup(t){const{inputNode:s}=this;w.invariant(s!=null);const{downsampleMaterial:n,upsampleMaterial:i}=this;return n.fragmentNode=this.setupDownsampleNode(t),i.fragmentNode=this.setupUpsampleNode(t),n.needsUpdate=!0,i.needsUpdate=!0,super.setup(t)}dispose(){for(const t of this.downsampleRTs)t.dispose();for(const t of this.upsampleRTs)t.dispose();this.downsampleMaterial.dispose(),this.upsampleMaterial.dispose(),this.mesh.geometry.dispose(),super.dispose()}}const pe=(o,t)=>{const s=e.uv(),n=e.vec4(1,1,-1,-1).mul(t.xyxy).add(s.xyxy).toVertexStage(),i=e.vec4(2,2,-2,-2).mul(t.xyxy).add(s.xyxy).toVertexStage(),r=n.zy,a=n.xy,u=n.zw,c=n.xw,h=e.vec2(s.x,i.y),d=e.vec2(i.z,s.y),l=e.vec2(i.x,s.y),m=e.vec2(s.x,i.w),p=i.zy,v=i.xy,x=i.zw,T=i.xw;return e.add(e.add(o.sample(s),o.sample(r),o.sample(a),o.sample(u),o.sample(c)).mul(1/8),e.add(o.sample(h),o.sample(d),o.sample(l),o.sample(m)).mul(1/16),e.add(o.sample(p),o.sample(v),o.sample(x),o.sample(T)).mul(1/32))},Be=(o,t)=>{const s=e.uv(),n=e.vec4(1,1,-1,-1).mul(t.xyxy).add(s.xyxy).toVertexStage(),i=e.vec2(s.x,n.y),r=e.vec2(n.z,s.y),a=e.vec2(n.x,s.y),u=e.vec2(s.x,n.w),c=n.zy,h=n.xy,d=n.zw,l=n.xw;return e.add(o.sample(s).mul(.25),e.add(o.sample(i),o.sample(r),o.sample(a),o.sample(u)).mul(.125),e.add(o.sample(c),o.sample(h),o.sample(d),o.sample(l)).mul(.0625))};class Fe extends he{static get type(){return"MipmapBlurNode"}constructor(t,s=4){super(t,s),this.resolutionScale=.5}setupDownsampleNode(t){return w.invariant(this.inputNode!=null),pe(this.inputNode,this.inputTexelSize)}setupUpsampleNode(t){return w.invariant(this.inputNode!=null),Be(this.inputNode,this.inputTexelSize)}}const pt=(...o)=>new Fe(...o),{resetRendererState:mt,restoreRendererState:vt}=f.RendererUtils;class ft extends oe{constructor(t){super(t),this.material=new f.NodeMaterial,this.mesh=new f.QuadMesh(this.material),this.inputTexelSize=e.uniform("vec2");const s=this.constructor.type.replace(/Node$/,"");this.material.name=s,this.mesh.name=s,this.renderTarget=this.createRenderTarget(),this.outputTexture=this.renderTarget.texture}setSize(t,s){const{resolutionScale:n}=this,i=Math.max(Math.round(t*n),1),r=Math.max(Math.round(s*n),1);return this.renderTarget.setSize(i,r),this}updateBefore({renderer:t}){if(t==null)return;const{inputNode:s}=this;w.invariant(s!=null);const{width:n,height:i}=s.value;this.setSize(n,i),this.inputTexelSize.value.set(1/n,1/i),this.rendererState=mt(t,this.rendererState),t.setRenderTarget(this.renderTarget),this.mesh.render(t),vt(t,this.rendererState)}setup(t){const{inputNode:s}=this;w.invariant(s!=null);const{material:n}=this;return n.fragmentNode=this.setupOutputNode(t),n.needsUpdate=!0,super.setup(t)}dispose(){this.renderTarget.dispose(),this.material.dispose(),this.mesh.geometry.dispose(),super.dispose()}}class me extends ft{constructor(t){super(t),this.thresholdLevel=e.uniform(5),this.thresholdRange=e.uniform(1),this.resolutionScale=.5}static get type(){return"DownsampleThresholdNode"}setupOutputNode(){const{inputNode:t,thresholdLevel:s,thresholdRange:n,inputTexelSize:i}=this;w.invariant(t!=null);const r=pe(t,i),a=e.luminance(r.rgb),u=e.smoothstep(s,s.add(n),a);return e.vec4(r.rgb,a).mul(u)}}const xt=(...o)=>new me(...o),gt=o=>{const t=e.OnObjectUpdate(o);return t.updateType=f.NodeUpdateType.NONE,t},yt=o=>{const t=e.OnBeforeObjectUpdate(o);return t.updateBeforeType=f.NodeUpdateType.FRAME,t},{resetRendererState:wt,restoreRendererState:Tt}=f.RendererUtils;class Nt extends oe{constructor(t){super(t),this.iterations=1,this.material=new f.NodeMaterial,this.mesh=new f.QuadMesh(this.material),this.inputTexelSize=e.uniform("vec2"),this.direction=e.uniform("vec2");const s=this.constructor.type.replace(/Node$/,"");this.material.name=s,this.mesh.name=s,this.horizontalRT=this.createRenderTarget("horizontal"),this.verticalRT=this.createRenderTarget("vertical"),this.outputTexture=this.verticalRT.texture}setSize(t,s){const{resolutionScale:n}=this,i=Math.max(Math.round(t*n),1),r=Math.max(Math.round(s*n),1);return this.horizontalRT.setSize(i,r),this.verticalRT.setSize(i,r),this}updateBefore({renderer:t}){if(t==null)return;const{horizontalRT:s,verticalRT:n,mesh:i,inputNode:r,direction:a}=this;w.invariant(r!=null);const{width:u,height:c}=r.value;this.setSize(u,c),this.inputTexelSize.value.set(1/u,1/c);const h=r.value;this.rendererState=wt(t,this.rendererState);for(let d=0;d<this.iterations;++d)a.value.set(1,0),t.setRenderTarget(s),i.render(t),r.value=s.texture,a.value.set(0,1),t.setRenderTarget(n),i.render(t),r.value=n.texture;Tt(t,this.rendererState),r.value=h}setup(t){const{inputNode:s}=this;w.invariant(s!=null);const{material:n}=this;return n.fragmentNode=this.setupOutputNode(t),n.needsUpdate=!0,super.setup(t)}dispose(){this.horizontalRT.dispose(),this.verticalRT.dispose(),this.material.dispose(),this.mesh.geometry.dispose(),super.dispose()}}function Ne(o){if(w.invariant(o>=0),o===0)return new Float64Array(0);if(o===1)return new Float64Array([1]);let t=new Float64Array(o),s=new Float64Array(o),n=s;for(let i=1;i<=o;++i){for(let r=0;r<i;++r)s[r]=r===0||r===i-1?1:t[r-1]+t[r];n=s,s=t,t=n}return n}function bt(o,t=2){w.invariant(o>=3);const s=o+t*2,n=t>0?Ne(s).slice(t,-t):Ne(s),i=Math.floor((n.length-1)/2),r=n.reduce((l,m)=>l+m,0),a=n.slice(i),u=[...Array(i+1).keys()],c=new Float64Array(Math.floor(u.length/2)),h=new Float64Array(c.length);c[0]=a[0]/r;for(let l=1,m=1;l<u.length-1;l+=2,++m){const p=u[l],v=u[l+1],x=a[l],T=a[l+1],N=x+T,z=(p*x+v*T)/N;c[m]=N/r,h[m]=z}const d=(c.reduce((l,m)=>l+m,0)-c[0]*.5)*2;if(d!==0){const l=1/d;for(let m=0;m<c.length;++m)c[m]*=l}return{offsets:h,weights:c}}class ve extends Nt{static get type(){return"GaussianBlurNode"}constructor(t,s=35){super(t),this.kernelSize=s}setupOutputNode(t){const{inputNode:s,inputTexelSize:n,direction:i}=this;w.invariant(s!=null);const{offsets:r,weights:a}=bt(this.kernelSize);return e.Fn(()=>{const u=e.uv(),c=i.mul(n).toVertexStage(),h=s.sample(u).mul(a[0]);for(let d=1;d<r.length;++d){const l=c.mul(r[d]);h.addAssign(e.add(s.sample(u.add(l)),s.sample(u.sub(l))).mul(a[d]))}return h})()}}const St=(...o)=>new ve(...o),Ve=o=>o.dot(e.vec2(.06711056,.00583715)).fract().mul(52.9829189).fract(),Mt=e.Fn(()=>{const o=e.vec2(e.screenCoordinate.xy).add(e.time.fract().mul(1337)),t=Ve(o);return e.vec3(t,t.oneMinus(),t).sub(.5).div(255)}).once()(),zt=(o,t,s=e.vec2(90,45))=>{const n=e.equirectUV(o),i=e.fwidth(n),r=t.mul(i).mul(.5),a=e.abs(n.mul(s).fract().sub(.5)).div(s),u=e.smoothstep(r,r.add(i),a).oneMinus();return u.x.add(u.y).clamp(0,1)};class Ae extends f.TempNode{constructor(){super("vec3"),this.currentProjectionMatrix=e.uniform("mat4"),this.previousProjectionMatrix=e.uniform("mat4"),this.currentModelViewMatrix=e.uniform("mat4"),this.previousModelViewMatrix=e.uniform("mat4"),this.objectModelViewMatrices=new WeakMap,this.updateType=f.NodeUpdateType.FRAME,this.updateBeforeType=f.NodeUpdateType.OBJECT,this.updateAfterType=f.NodeUpdateType.OBJECT}static get type(){return"HighpVelocityNode"}setProjectionMatrix(t){return this.projectionMatrix=t,this}update({camera:t}){if(t==null)return;const{currentProjectionMatrix:s,previousProjectionMatrix:n}=this,i=this.projectionMatrix??t.projectionMatrix;n.value==null?n.value=new g.Matrix4().copy(i):n.value.copy(s.value),s.value.copy(i)}updateBefore({object:t,camera:s}){if(t==null||s==null)return;const{currentModelViewMatrix:n,previousModelViewMatrix:i,objectModelViewMatrices:r}=this;n.value.multiplyMatrices(s.matrixWorldInverse,t.matrixWorld),i.value=r.get(t)??n.value}updateAfter({object:t}){if(t==null)return;const{currentModelViewMatrix:s,objectModelViewMatrices:n}=this;let i=n.get(t);i==null&&(i=new g.Matrix4,n.set(t,i)),i.copy(s.value)}setup(t){const s=this.currentProjectionMatrix.mul(this.currentModelViewMatrix).mul(e.positionLocal).toVertexStage(),n=this.previousProjectionMatrix.mul(this.previousModelViewMatrix).mul(e.positionPrevious).toVertexStage(),i=s.xyz.div(s.w),r=n.xyz.div(n.w);return e.sub(i,r)}}const ue=e.nodeImmutable(Ae);class Pe extends he{static get type(){return"KawaseBlurNode"}constructor(t,s=4){super(t,s),this.resolutionScale=.5}setupDownsampleNode(t){const{inputNode:s,inputTexelSize:n}=this;w.invariant(s!=null);const i=e.uv(),r=e.vec4(1,1,-1,-1).mul(n.xyxy.mul(.5)).add(i.xyxy).toVertexStage(),a=r.zy,u=r.xy,c=r.xw,h=r.zw;return e.add(s.sample(i).mul(4),s.sample(a),s.sample(u),s.sample(c),s.sample(h)).mul(1/8)}setupUpsampleNode(t){const{inputNode:s,inputTexelSize:n}=this;w.invariant(s!=null);const i=e.uv(),r=e.vec4(1,1,-1,-1).mul(n.xyxy.mul(.5)).add(i.xyxy).toVertexStage(),a=r.zy,u=r.xy,c=r.xw,h=r.zw,d=e.vec2(r.z,i.y),l=e.vec2(r.x,i.y),m=e.vec2(i.x,r.y),p=e.vec2(i.x,r.w);return e.add(e.add(s.sample(a),s.sample(u),s.sample(c),s.sample(h)).mul(1/12),e.add(s.sample(d),s.sample(l),s.sample(m),s.sample(p)).mul(1/6))}}const Ct=(...o)=>new Pe(...o);class Rt extends f.TempNode{constructor(t){super("vec3"),this.intensity=e.uniform(1e-5),this.inputNode=t}static get type(){return"LensGhostNode"}setup(t){const{inputNode:s,intensity:n}=this;w.invariant(s!=null);const i=B({name:"sampleGhost",type:"vec3",inputs:[{name:"uv",type:"vec2"},{name:"direction",type:"vec2"},{name:"color",type:"vec3"},{name:"offset",type:"float"}]})(([c,h,d,l])=>{const m=h.mul(l).add(c.oneMinus()).saturate(),p=s.sample(m).rgb.mul(d),v=e.sub(.5,m).length().mul(1/(Math.SQRT2/4)).saturate();return p.mulAssign(v.oneMinus().pow(3)),p}),r=e.uv(),a=r.sub(.5);return e.add(i(r,a,e.vec3(.8,.8,1),-5),i(r,a,e.vec3(1,.8,.4),-1.5),i(r,a,e.vec3(.9,1,.8),-.4),i(r,a,e.vec3(1,.8,.4),-.2),i(r,a,e.vec3(.9,.7,.7),-.1),i(r,a,e.vec3(.5,1,.4),.7),i(r,a,e.vec3(.5,.5,.5),1),i(r,a,e.vec3(1,1,.6),2.5),i(r,a,e.vec3(.5,.8,1),10)).mul(n)}}const{resetRendererState:Dt,restoreRendererState:Bt}=f.RendererUtils;function Ft(){const n=document.createElement("canvas");n.width=256,n.height=32;const i=n.getContext("2d");w.invariant(i!=null),i.beginPath(),i.moveTo(0,32/2),i.lineTo(256/2,5),i.lineTo(256,32/2),i.lineTo(256/2,27),i.closePath();const r=i.createLinearGradient(0,0,256,0);return r.addColorStop(0,"#000000"),r.addColorStop(.5,"#ffffff"),r.addColorStop(1,"#000000"),i.fillStyle=r,i.fill(),new g.CanvasTexture(n)}const be=e.struct({color:"vec3",luminance:"float",position:"vec2",scale:"float",sin:"float",cos:"float"});class Vt extends oe{constructor(t){super(t),this.spikePairCount=6,this.wireframe=!1,this.intensity=e.uniform(1e-5),this.sizeScale=e.uniform(new g.Vector2(1.5,.01)),this.luminanceThreshold=e.uniform(100),this.indirectBuffer=new f.IndirectStorageBufferAttribute(new Uint32Array([6,0,0,0,0]),1),this.instanceBuffer=e.instancedArray(1,be),this.renderTarget=this.createRenderTarget(),this.material=new f.MeshBasicNodeMaterial({depthTest:!1,depthWrite:!1,transparent:!0,blending:g.AdditiveBlending}),this.mesh=new g.Mesh(new g.PlaneGeometry(1,1),this.material),this.camera=new g.PerspectiveCamera,this.inputTexelSize=e.uniform("vec2"),this.outputTexelSize=e.uniform("vec2"),this.geometryRatio=e.uniform("vec2"),this.material.name="LensGlare",this.inputNode=t,this.resolutionScale=.5,this.outputTexture=this.renderTarget.texture,this.mesh.geometry.indirect=this.indirectBuffer}customCacheKey(){return ee.hash(this.spikePairCount,+this.wireframe)}setSize(t,s){const{resolutionScale:n}=this,i=Math.max(Math.round(t*n),1),r=Math.max(Math.round(s*n),1);this.renderTarget.setSize(i,r);const a=Math.floor(i/2),u=Math.floor(r/2),c=a*u;return this.instanceBuffer.bufferCount<c&&(this.instanceBuffer.dispose(),this.instanceBuffer=e.instancedArray(c,be),this.setupCompute(a,u),this.setupMaterial()),this}updateBefore({renderer:t}){if(t==null)return;const{inputNode:s}=this;w.invariant(s!=null);const{width:n,height:i}=s.value;this.setSize(n,i);const{computeNode:r,indirectBuffer:a,renderTarget:u}=this;w.invariant(r!=null),this.inputTexelSize.value.set(1/n,1/i);const c=n/i;c>1?this.geometryRatio.value.set(1/c,1):this.geometryRatio.value.set(1,c);const{width:h,height:d}=u;this.outputTexelSize.value.set(1/h,1/d),a.array[1]=0,a.needsUpdate=!0,t.compute(r),this.rendererState=Dt(t,this.rendererState),t.setRenderTarget(u),t.render(this.mesh,this.camera),Bt(t,this.rendererState)}setupCompute(t,s){const{spikePairCount:n,inputNode:i,indirectBuffer:r,instanceBuffer:a,outputTexelSize:u}=this;w.invariant(i!=null);const c=e.storage(r,"uint",r.count).toAtomic();this.computeNode=e.Fn(()=>{const h=e.uvec2(t,s);e.If(e.globalId.xy.greaterThanEqual(h).any(),()=>{e.Return()});const d=e.vec2(e.globalId.xy).mul(u).mul(2),l=i.sample(d),m=l.a;e.If(m.greaterThan(.1),()=>{const p=e.atomicAdd(c.element(1),n);for(let v=0;v<n;++v){const x=a.element(p.add(v));x.get("color").assign(l.rgb),x.get("luminance").assign(m),x.get("position").assign(e.globalId.xy),x.get("scale").assign(v%2===0?1:.5);const T=Math.PI*(3-Math.sqrt(5)),N=Math.PI/n*v+T;x.get("sin").assign(Math.sin(N)),x.get("cos").assign(Math.cos(N))}})})().compute([Math.ceil(t/8),Math.ceil(s/8),1],[8,8,1])}setupMaterial(){const{inputNode:t,spikeNode:s,instanceBuffer:n,luminanceThreshold:i,intensity:r,sizeScale:a,outputTexelSize:u,geometryRatio:c}=this;w.invariant(t!=null),w.invariant(s!=null);const h=n.element(e.instanceIndex);this.material.colorNode=this.wireframe?e.vec4(1):s.mul(h.get("color").mul(r)),this.material.vertexNode=e.Fn(()=>{const d=h.get("sin"),l=h.get("cos"),m=e.mat3(l,d,0,d.negate(),l,0,0,0,1),v=h.get("position").mul(u).mul(2),x=v.flipY().mul(2).sub(1),N=h.get("luminance").div(i).saturate(),z=e.vec2(N,1).mul(h.get("scale"),a,v.sub(.5).length().mul(2).oneMinus().mul(.5).add(.5)),A=m.mul(e.positionGeometry.mul(e.vec4(z,1,1))).mul(c).add(e.vec3(x,0));return e.vec4(A,1)})(),this.material.wireframe=this.wireframe,this.material.needsUpdate=!0}setup(t){if(this.spikeNode==null){const s=Ft();s.colorSpace=g.SRGBColorSpace,this.spikeNode=e.texture(s)}return this.setupMaterial(),super.setup(t)}dispose(){this.renderTarget.dispose(),this.material.dispose(),this.mesh.geometry.dispose(),super.dispose()}}const At=new g.Vector2;class Pt extends f.TempNode{constructor(t){super("vec3"),this.intensity=e.uniform(1e-5),this.chromaticAberration=e.uniform(.005),this.aspectRatio=e.uniform(0),this.updateBeforeType=f.NodeUpdateType.FRAME,this.inputNode=t}static get type(){return"LensHaloNode"}updateBefore({renderer:t}){if(t==null)return;const{width:s,height:n}=t.getDrawingBufferSize(At);this.aspectRatio.value=s/n}setup(t){const{inputNode:s,intensity:n,chromaticAberration:i,aspectRatio:r}=this;w.invariant(s!=null);const a=B({name:"cubicRingMask",type:"float",inputs:[{name:"x",type:"float"},{name:"radius",type:"float"},{name:"thickness",type:"float"}]})(([d,l,m])=>{const p=e.min(e.abs(d.sub(l)).div(m),1);return e.mul(p,p,e.sub(3,p.mul(2))).oneMinus()}),u=B({name:"sampleHalo",type:"vec3",inputs:[{name:"uv",type:"vec2"},{name:"radius",type:"float"}]})(([d,l])=>{const m=e.vec2(r,1),p=d.sub(.5).mul(m).normalize().div(m),v=e.vec3(i).mul(e.vec3(-1,0,1)),x=e.fract(p.mul(l).add(d.oneMinus())),T=e.vec3(s.sample(p.mul(v.r).add(x)).r,s.sample(p.mul(v.g).add(x)).g,s.sample(p.mul(v.b).add(x)).b),N=d.sub(e.vec2(.5,0)).mul(m).add(e.vec2(.5,0)),z=e.distance(N,e.vec2(.5)).saturate();return T.mulAssign(a(z,.45,.25)),T}),c=e.uv();return u(c,.3).mul(n)}}const P=o=>o.greaterThanEqual(0).all().and(o.lessThanEqual(1).all()).toFloat();class fe extends he{constructor(t,s=4){super(t,s),this.blendAmount=e.uniform(.85),this.resolutionScale=.5}static get type(){return"MipmapSurfaceBlurNode"}setupDownsampleNode(t){const{inputNode:s,inputTexelSize:n}=this;return w.invariant(s!=null),e.Fn(()=>{const i=e.uv(),r=e.vec4(1,1,-1,-1).mul(n.xyxy).add(i.xyxy).toVertexStage(),a=e.vec4(2,2,-2,-2).mul(n.xyxy).add(i.xyxy).toVertexStage(),u=r.zy,c=r.xy,h=r.zw,d=r.xw,l=a.zy,m=a.xy,p=a.zw,v=a.xw,x=e.vec2(i.x,a.y),T=e.vec2(a.z,i.y),N=e.vec2(a.x,i.y),z=e.vec2(i.x,a.w),A=1/4/2,C=1/9/2,V=s.sample(i).mul(C);let M;return M=e.vec4(P(u),P(c),P(h),P(d)).mul(A),V.addAssign(s.sample(u).mul(M.x),s.sample(c).mul(M.y),s.sample(h).mul(M.z),s.sample(d).mul(M.w)),M=e.vec4(P(l),P(m),P(p),P(v)).mul(C),V.addAssign(s.sample(l).mul(M.x),s.sample(m).mul(M.y),s.sample(p).mul(M.z),s.sample(v).mul(M.w)),M=e.vec4(P(x),P(T),P(N),P(z)).mul(C),V.addAssign(s.sample(x).mul(M.x),s.sample(T).mul(M.y),s.sample(N).mul(M.z),s.sample(z).mul(M.w)),V})()}setupUpsampleNode(t){const{inputNode:s,inputTexelSize:n,downsampleNode:i}=this;w.invariant(s!=null);const r=e.uv(),a=e.vec4(1,1,-1,-1).mul(n.xyxy).add(r.xyxy).toVertexStage(),u=e.vec2(r.x,a.y),c=e.vec2(a.z,r.y),h=e.vec2(a.x,r.y),d=e.vec2(r.x,a.w),l=a.zy,m=a.xy,p=a.zw,v=a.xw,x=e.add(s.sample(r).mul(1/4),e.add(s.sample(u),s.sample(c),s.sample(h),s.sample(d)).mul(1/8),e.add(s.sample(l),s.sample(m),s.sample(p),s.sample(v)).mul(1/16));return e.mix(i.sample(r),x,this.blendAmount)}}const Ut=(...o)=>new fe(...o);function xe(o){return(o instanceof f.NodeBuilder?o.renderer.backend:"backend"in o?o.backend:o).isWebGPUBackend===!0}class Ue extends f.TempNode{constructor(t){super("vec4"),this.bloomIntensity=e.uniform(.05),this.inputNode=t,this.thresholdNode=new me,this.blurNode=new ve,this.ghostNode=new Rt,this.haloNode=new Pt,this.bloomNode=new fe(null,8),this.glareNode=new Vt,this.featuresNode=e.rtt(e.add(this.ghostNode,this.haloNode)),this.featuresNode.value.name="LensFlare_features",this.featuresNode.pixelRatio=.5,this.blurNode.resolutionScale=1,this.bloomNode.resolutionScale=1,this.glareNode.resolutionScale=1}static get type(){return"LensFlareNode"}setup(t){const{inputNode:s,thresholdNode:n,blurNode:i,ghostNode:r,haloNode:a,bloomNode:u,featuresNode:c,glareNode:h}=this;w.invariant(s!=null);const d=n.getTextureNode(),l=i.getTextureNode();n.inputNode=s,i.inputNode=d,r.inputNode=l,a.inputNode=l,u.inputNode=d,h.inputNode=d;const m=u.getTextureNode().mul(this.bloomIntensity),p=h.getTextureNode();return e.Fn(()=>{const v=s;return v.addAssign(m),xe(t)&&v.addAssign(p),v.add(c)})()}dispose(){this.thresholdNode.dispose(),this.blurNode.dispose(),this.ghostNode.dispose(),this.haloNode.dispose(),this.bloomNode.dispose(),this.glareNode.dispose(),this.featuresNode.dispose(),super.dispose()}}const Ot=o=>new Ue(o!=null?e.convertToTexture(o):null),It=B({name:"bvec2Not",type:"bvec2",inputs:[{name:"x",type:"bvec2"}]})(([o])=>o.notEqual(e.bool(!0))),Lt=B({name:"bvec3Not",type:"bvec3",inputs:[{name:"x",type:"bvec3"}]})(([o])=>o.notEqual(e.bool(!0))),jt=B({name:"bvec4Not",type:"bvec4",inputs:[{name:"x",type:"bvec4"}]})(([o])=>o.notEqual(e.bool(!0))),Et=e.overloadingFn([It,Lt,jt]),kt=B({name:"bvec2And",type:"bvec2",inputs:[{name:"x",type:"bvec2"},{name:"y",type:"bvec2"}]})(([o,t])=>e.bvec2(e.uvec2(o).mul(e.uvec2(t)))),qt=B({name:"bvec3And",type:"bvec3",inputs:[{name:"x",type:"bvec3"},{name:"y",type:"bvec3"}]})(([o,t])=>e.bvec3(e.uvec3(o).mul(e.uvec3(t)))),Wt=B({name:"bvec4And",type:"bvec4",inputs:[{name:"x",type:"bvec4"},{name:"y",type:"bvec4"}]})(([o,t])=>e.bvec4(e.uvec4(o).mul(e.uvec4(t)))),Gt=e.overloadingFn([kt,qt,Wt]),$t=B({name:"bvec2Or",type:"bvec2",inputs:[{name:"x",type:"bvec2"},{name:"y",type:"bvec2"}]})(([o,t])=>e.uvec2(o).add(e.uvec2(t)).notEqual(0)),Ht=B({name:"bvec3Or",type:"bvec3",inputs:[{name:"x",type:"bvec3"},{name:"y",type:"bvec3"}]})(([o,t])=>e.uvec3(o).add(e.uvec3(t)).notEqual(0)),Zt=B({name:"bvec4Or",type:"bvec4",inputs:[{name:"x",type:"bvec4"},{name:"y",type:"bvec4"}]})(([o,t])=>e.uvec4(o).add(e.uvec4(t)).notEqual(0)),Yt=e.overloadingFn([$t,Ht,Zt]),_t=O((o,t,s,n)=>{const i=o.sub(s),r=e.dot(t,i),a=e.dot(i,i).sub(n.pow2()),u=r.pow2().sub(a).toConst(),c=e.vec2(-1);return e.If(u.greaterThanEqual(0),()=>{const h=e.sqrt(u);c.assign(e.vec2(r.negate().sub(h),r.negate().add(h)))}),c}),Oe=e.struct({near:"vec4",far:"vec4"}),Xt=O((o,t,s,n)=>{const i=o.sub(s),r=e.dot(t,i),a=e.dot(i,i).sub(n.pow2()),u=r.pow2().sub(a).toConst(),c=e.vec2(u.greaterThanEqual(0)).toConst(),h=c.oneMinus().toConst(),d=e.sqrt(u.max(0)).toConst(),l=c.mul(r.negate().sub(d)).sub(h),m=c.mul(r.negate().add(d)).sub(h);return Oe(l,m)}),Kt=O((o,t,s)=>{const n=o.div(s),i=t.div(s),r=i.dot(i),a=n.dot(i),u=n.dot(n),c=a.pow2().sub(r.mul(u.sub(1))).toConst(),h=e.vec2(-1);return e.If(c.greaterThanEqual(0),()=>{const d=e.sqrt(c);h.assign(e.vec2(a.negate().sub(d),a.negate().add(d)).div(r))}),h}),Qt={float:e.float,int:e.int,uint:e.uint,bool:e.bool,vec2:e.vec2,ivec2:e.ivec2,uvec2:e.uvec2,bvec2:e.bvec2,vec3:e.vec3,ivec3:e.ivec3,uvec3:e.uvec3,bvec3:e.bvec3,vec4:e.vec4,ivec4:e.ivec4,uvec4:e.uvec4,bvec4:e.bvec4,mat2:e.mat2,mat3:e.mat3,mat4:e.mat4,color:e.color},Jt=f.Node;function es(o){return Qt[o]}class Ie extends f.Texture3DNode{static get type(){return"OutputTexture3DNode"}constructor(t,s){super(s),this.owner=t,this.setUpdateMatrix(!1)}setup(t){return this.owner.build(t),super.setup(t)}clone(){return new this.constructor(this.owner,this.value)}}const ts=(...o)=>new Ie(...o),ss=["x","y","z","w"],os=O((o,t,s=0)=>{let n;if(typeof s=="number")n=s;else if(s?.isConstNode===!0)n=s.value;else throw new Error("Component must be a constant.");const i=o.size(),r=e.ivec2(t.mul(i).sub(.5).floor()).toConst(),a=e.ivec4(r,r.add(1)).toConst(),u=ss[n];return e.vec4(o.load(a.xw)[u],o.load(a.zw)[u],o.load(a.zy)[u],o.load(a.xy)[u])}),ns=O((o,t=e.uv())=>{const s=e.vec2(o.size()),n=s.reciprocal(),i=t.mul(s),r=i.sub(.5).floor().add(.5),a=i.sub(r),u=a.mul(a.mul(a.mul(.5).oneMinus()).sub(.5)),c=a.mul(a).mul(a.mul(1.5).sub(2.5)).add(1),h=a.mul(a.mul(e.sub(2,a.mul(1.5))).add(.5)),d=a.mul(a).mul(a.mul(.5).sub(.5)),l=c.add(h),m=h.div(c.add(h)),p=r.sub(1).mul(n),v=r.add(2).mul(n),x=r.add(m).mul(n);return e.add(o.sample(e.vec2(p.x,p.y)).mul(u.x).mul(u.y),o.sample(e.vec2(x.x,p.y)).mul(l.x).mul(u.y),o.sample(e.vec2(v.x,p.y)).mul(d.x).mul(u.y),o.sample(e.vec2(p.x,x.y)).mul(u.x).mul(l.y),o.sample(e.vec2(x.x,x.y)).mul(l.x).mul(l.y),o.sample(e.vec2(v.x,x.y)).mul(d.x).mul(l.y),o.sample(e.vec2(p.x,v.y)).mul(u.x).mul(d.y),o.sample(e.vec2(x.x,v.y)).mul(l.x).mul(d.y),o.sample(e.vec2(v.x,v.y)).mul(d.x).mul(d.y))}),R=64;function Q(o){return Math.floor(Math.max(0,o)/R)}class is{constructor(){this.size=[0,0,0],this.offset={x:0,y:0}}copy(t){return[this.size[0],this.size[1],this.size[2]]=t.size,this.offset.x=t.offset.x,this.offset.y=t.offset.y,this}}const rs=new g.Vector3,as=new g.Vector4,cs=new g.Vector2,us=new g.Matrix4;class Le extends f.TempNode{constructor(t,s,n){super("float"),this.sampleCount=60,this.hardShadowSamples=4,this.fadeOutSamples=8,this.thickness=e.uniform(.005),this.shadowContrast=e.uniform(4),this.shadowIntensity=e.uniform(1),this.bilinearThreshold=e.uniform(.02),this.lightCoordinate=e.uniform("vec4"),this.dispatchOffset=e.uniform("ivec2"),this.dispatchIndex=e.uniform(0),this.dispatches=Array.from({length:8},()=>new is),this.dispatchCount=0,this.updateBeforeType=f.NodeUpdateType.FRAME,this.depthNode=t,this.camera=s,this.mainLight=n;const i=new f.StorageTexture(1,1);i.colorSpace=g.NoColorSpace,i.minFilter=g.LinearFilter,i.magFilter=g.LinearFilter,i.generateMipmaps=!1,i.name="ScreenSpaceShadow",this.outputTexture=i,this.textureNode=se(this,i),this.computeNode=this.createComputeNode()}get type(){return"ScreenSpaceShadowNode"}customCacheKey(){return ee.hash(this.camera?.id??-1,this.mainLight?.id??-1,this.sampleCount,this.hardShadowSamples,this.fadeOutSamples)}getTextureNode(){return this.textureNode}setSize(t,s){const{outputTexture:n}=this;return(t!==n.width||s!==n.height)&&(n.setSize(t,s,0),n.needsUpdate=!0),this}updateBefore(t){const{renderer:s}=t;if(s==null)return;const n=s.getDrawingBufferSize(cs);this.setSize(n.width,n.height);const{camera:i,mainLight:r}=this,a=us.multiplyMatrices(i.projectionMatrix,i.matrixWorldInverse),u=rs.copy(r.position).sub(r.target.position).normalize(),c=as.set(u.x,u.y,u.z,0).applyMatrix4(a);this.updateDispatchList(c,n);for(let h=0;h<this.dispatchCount;++h){const d=this.dispatches[h];this.dispatchOffset.value.set(d.offset.x,d.offset.y),this.dispatchIndex.value=h,s.compute(this.computeNode,d.size)}}updateDispatchList(t,{width:s,height:n}){let i=t.w;const r=2e-6*R;i>=0&&i<r?i=r:i<0&&i>-r&&(i=-r),this.lightCoordinate.value.set((t.x/i*.5+.5)*s,(t.y/i*-.5+.5)*n,t.w===0?0:t.z/t.w,t.w>0?1:-1);const a=Math.round(this.lightCoordinate.value.x),u=Math.round(this.lightCoordinate.value.y),c=-a,h=-(n-u),d=s-a,l=u;let m=0;for(let p=0;p<4;++p){const v=p===0||p===3,x=(p&1)>0,T=(p&2)>0,N=Q(x?c:-d),z=Q(T?h:-l),A=R*(v?1:2)-1,C=R*(v?2:1)-1,V=Q((x?d:-c)+A),M=Q((T?l:-h)+C);if(V-N>0&&M-z>0){const U=p===2||p===3?1:0,I=p===1||p===3?1:0,y=this.dispatches[m++];y.size[0]=R,y.size[1]=V-N,y.size[2]=M-z,y.offset.x=(x?N:-V)+U,y.offset.y=(T?-M:z)+I;let D;if(p===0?D=c-h:p===1?D=d+h:p===2?D=-c-l:D=-d+l,D=(D+R-1)/R|0,D>0){const b=this.dispatches[m++].copy(y);p===0?(b.size[2]=Math.min(y.size[2],D),y.size[2]-=b.size[2],b.offset.y=y.offset.y+y.size[2],b.offset.x-=1,b.size[1]+=1):p===1?(b.size[1]=Math.min(y.size[1],D),y.size[1]-=b.size[1],b.offset.x=y.offset.x+y.size[1],b.size[2]+=1):p===2?(b.size[1]=Math.min(y.size[1],D),y.size[1]-=b.size[1],y.offset.x+=b.size[1],b.size[2]+=1,b.offset.y-=1):p===3&&(b.size[2]=Math.min(y.size[2],D),y.size[2]-=b.size[2],y.offset.y+=b.size[2],++b.size[1]),(b.size[1]<=0||b.size[2]<=0)&&b.copy(this.dispatches[--m]),(y.size[1]<=0||y.size[2]<=0)&&y.copy(this.dispatches[--m])}}}for(let p=0;p<m;++p){const v=this.dispatches[p];v.offset.x*=R,v.offset.y*=R}this.dispatchCount=m}createComputeNode(){const{depthNode:t,camera:s,sampleCount:n,hardShadowSamples:i,fadeOutSamples:r,outputTexture:a,thickness:u,shadowContrast:c,shadowIntensity:h,bilinearThreshold:d,lightCoordinate:l,dispatchOffset:m}=this,p=Math.floor(n/R)+2,v=e.workgroupArray("float",p*R),x=()=>{const T=e.ivec2(e.workgroupId.yz).mul(R).add(m).toConst(),N=l.xy.floor().add(.5).toConst(),z=l.xy.sub(N).toConst(),A=l.w.greaterThan(0),C=e.ivec2(T.sign()).toConst(),V=e.abs(T.x.add(C.y)).lessThan(e.abs(T.y.sub(C.x))).toConst(),M=e.ivec2(V.select(C.y,0),V.select(0,C.x.negate())),U=e.vec2(M.mul(e.workgroupId.x).add(T)).toConst(),I=e.abs(U.x).greaterThan(e.abs(U.y)).toConst(),y=I.select(U.x,U.y).toConst(),D=y.abs().toConst(),b=D.sub(R),L=I.select(z.x,z.y).toVar();L.assign(y.greaterThan(0).select(L.negate(),L));const E=U.add(N).toConst(),k=e.mix(l.xy,E,b.add(L).div(D.add(L))).toConst(),G=E.sub(k).toConst(),$=e.float(A.select(e.invocationLocalIndex,e.invocationLocalIndex.bitXor(R-1))).toConst(),q=e.mix(E,k,$.div(R)).toVar(),j=D.sub($).add(L).toConst();return{pixelXY:q,pixelDistance:j,xyDelta:G,xAxisMajor:I}};return e.Fn(T=>{const[N,z]=T.renderer.reversedDepthBuffer?[e.float(1),e.float(0)]:[e.float(0),e.float(1)],A=S=>{let F=t.load(S);return T.renderer.logarithmicDepthBuffer&&(F=J(F,Z(s),Y(s))),F=F.toConst(),e.and(S.greaterThanEqual(0).all(),S.lessThan(t.size()).all()).select(F,z)},{pixelXY:C,xyDelta:V,pixelDistance:M,xAxisMajor:U}=x(),I=l.w.negate(),y=N.greaterThan(z).select(-1,1).toConst(),D=e.ivec2(C.floor()).toConst();let b,L,E;for(let S=0;S<p;++S){const F=e.ivec2(C.floor()).toConst(),X=U.select(C.y,C.x).fract().sub(.5).greaterThan(0).select(1,-1).toConst(),qe=e.ivec2(U.select(0,X),U.select(X,0)),H=A(F).toConst(),ye=A(F.add(qe)).toConst(),we=z.sub(H).abs().toConst(),We=e.greaterThan(H.sub(ye).abs(),we.mul(d)),Ge=H.add(e.abs(H.sub(ye)).mul(y)),$e=We.select(H,Ge),ne=S===0?M:I.mul(R*S).add(M).toConst();let ie=$e.sub(l.z).div(ne).toConst();S>0&&(ie=ne.greaterThan(0).select(ie,1e10).toConst()),v.element(e.invocationLocalIndex.add(R*S)).assign(ie),S===0&&(b=H,L=we,E=ne),C.addAssign(V.mul(I))}e.workgroupBarrier();const k=b.sub(l.z).div(E).toVar(),G=E.add(I).min(u.reciprocal()).mul(E).div(L).toConst();k.assign(k.mul(G).sub(y));const $=e.invocationLocalIndex.add(1).toConst(),q=e.float(1).toVar();for(let S=0;S<i;++S){const F=k.sub(v.element($.add(S)).mul(G)).abs();q.assign(q.min(F))}const j=e.vec4(1).toVar();for(let S=i;S<n-r;++S){const F=k.sub(v.element($.add(S)).mul(G)).abs(),_=e.int(S&3).toConst();j.element(_).assign(j.element(_).min(F))}for(let S=n-r;S<n;++S){const F=k.sub(v.element($.add(S)).mul(G)).abs(),_=(S+1-(n-r))/(r+1)*.75,X=e.int(S&3).toConst();j.element(X).assign(j.element(X).min(F.add(_)))}const ge=c.oneMinus().toConst();q.assign(q.mul(c).add(ge).saturate()),j.assign(j.mul(c).add(ge).saturate());const K=e.float(0).toVar();K.assign(j.dot(e.vec4(.25))),K.assign(e.min(q,K)),e.textureStore(a,D,e.mix(1,K,h))})().computeKernel([R,1,1])}setup(t){return this.textureNode}dispose(){this.outputTexture.dispose()}}const ls=(...o)=>new Le(...o),ds=(()=>{const o=new f.Data3DTexture(new Uint8Array(1));return o.format=f.RedFormat,o.minFilter=f.NearestFilter,o.magFilter=f.NearestFilter,o.wrapS=f.RepeatWrapping,o.wrapT=f.RepeatWrapping,o.wrapR=f.RepeatWrapping,o.needsUpdate=!0,o})();class je extends f.Texture3DNode{constructor(){super(ds),this.url=ce.DEFAULT_STBN_URL}customCacheKey(){return ee.hashString(this.url)}setup(t){return new ce.STBNLoader().loadAsync(this.url).then(s=>{this.value=s}).catch(s=>{console.error(s)}),super.setup(t)}}const Ee=e.nodeImmutable(je),hs=e.Fn(()=>Ee.sample(e.vec3(e.screenCoordinate.xy,e.frameId.mod(64)).div(e.vec3(128,128,64))).r.toConst("stbn")).once()();class ke extends f.StorageTextureNode{static get type(){return"StorageTexture3DNode"}getDefaultUV(){return e.vec3(.5,.5,.5)}setUpdateMatrix(t){}generateUV(t,s){return s.build(t,this.sampler?"vec3":"ivec3")}generateOffset(t,s){return s.build(t,"ivec3")}}const ps=(...o)=>new ke(...o);function Se(o,t){let s=1,n=0;for(;o>0;)s/=t,n+=s*(o%t),o=Math.floor(o/t);return n}const Me=Array.from({length:16},(o,t)=>new g.Vector2(Se(t+1,2),Se(t+1,3))),{resetRendererState:ms,restoreRendererState:vs}=f.RendererUtils;function fs(o){return o.isPerspectiveCamera===!0||o.isOrthographicCamera===!0||"updateProjectionMatrix"in o&&"setViewOffset"in o&&"clearViewOffset"in o}const xs=B({name:"clipAABB",type:"vec4",inputs:[{name:"current",type:"vec4"},{name:"history",type:"vec4"},{name:"minColor",type:"vec4"},{name:"maxColor",type:"vec4"}]})(([o,t,s,n])=>{const i=n.rgb.add(s.rgb).mul(.5).toConst(),r=n.rgb.sub(s.rgb).mul(.5).add(1e-7),a=t.sub(e.vec4(i,o.a)).toConst(),c=a.xyz.div(r).abs().toConst(),h=e.max(c.x,c.y,c.z).toConst();return h.greaterThan(1).select(e.vec4(i,o.a).add(a.div(h)),t)}),ze=[[-1,-1],[-1,1],[1,-1],[1,1],[1,0],[0,-1],[0,1],[-1,0]],gs=O((o,t,s,n,i)=>{const r=s.toVar(),a=s.pow2().toVar();for(const[m,p]of ze){const v=o.load(t.add(e.ivec2(m,p))).toConst();r.addAssign(v),a.addAssign(v.pow2())}const u=ze.length+1,c=r.div(u).toConst(),h=e.sqrt(a.div(u).sub(c.pow2()).max(0)).mul(i).toConst(),d=c.sub(h).toConst(),l=c.add(h).toConst();return xs(c.clamp(d,l),n,d,l)}),ys=[[-1,-1],[-1,0],[-1,1],[0,-1],[0,0],[0,1],[1,-1],[1,0],[1,1]],ws=e.struct({closestCoord:"ivec2",closestDepth:"float"}),Ts=O((o,t)=>s=>{const n=e.ivec2(0).toVar(),i=e.float(1).toVar();for(const[r,a]of ys){const u=t.add(e.ivec2(r,a)).toConst();let c=o.load(u).r;s.renderer.reversedDepthBuffer&&(c=c.oneMinus()),c=c.toConst(),e.If(c.lessThan(i),()=>{n.assign(u),i.assign(c)})}return ws(n,i)}),Ns=O((o,t)=>{const n=o.mul(t).fract().abs(),i=e.max(n,n.oneMinus());return i.x.mul(i.y).oneMinus().div(.75)}),Ce=new g.Vector2,bs=new g.DepthTexture(1,1);class le extends f.TempNode{constructor(t,s,n,i){if(super("vec4"),this.temporalAlpha=e.uniform(.05),this.varianceGamma=e.uniform(1),this.velocityThreshold=e.uniform(.1),this.depthError=e.uniform(.001),this.debugShowRejection=!1,this.resolveRT=this.createRenderTarget("resolve"),this.historyRT=this.createRenderTarget("history"),this.resolveMaterial=new f.NodeMaterial,this.mesh=new f.QuadMesh,this.needsSyncRenderPipeline=!1,this.needsClearHistory=!1,this.resolveNode=e.texture(this.resolveRT.texture),this.historyNode=e.texture(this.historyRT.texture),this.previousDepthNode=e.texture(bs),this.originalProjectionMatrix=new g.Matrix4,this.jitterIndex=0,this.updateBeforeType=f.NodeUpdateType.FRAME,this.resolveMaterial.name="TemporalAntialias_resolve",this.mesh.name="TemporalAntialias",this.inputNode=t,this.depthNode=s,this.velocityNode=n,!fs(i))throw new Error("The provided camera is not supported.");this.camera=i,this.textureNode=se(this,this.resolveRT.texture)}static get type(){return"TemporalAntialiasNode"}customCacheKey(){return ee.hash(this.camera.id,+this.debugShowRejection)}createRenderTarget(t){const s=new g.RenderTarget(1,1,{depthBuffer:!1,type:g.HalfFloatType,format:g.RGBAFormat}),n=s.texture;n.minFilter=g.LinearFilter,n.magFilter=g.LinearFilter,n.generateMipmaps=!1;const i=this.constructor.type;return n.name=t!=null?`${i}_${t}`:i,s}getTextureNode(){return this.textureNode}setSize(t,s){const{resolveRT:n,historyRT:i}=this;return(t!==i.width||s!==i.height)&&(n.setSize(t,s),i.setSize(t,s),this.needsClearHistory=!0),this}clearHistory(t){t.setRenderTarget(this.resolveRT),t.clear(),t.setRenderTarget(this.historyRT),t.clear(),this.needsClearHistory=!1}setViewOffset(t,s){const{camera:n}=this;n.updateProjectionMatrix(),this.originalProjectionMatrix.copy(n.projectionMatrix),ue.setProjectionMatrix(this.originalProjectionMatrix);const i=Me[this.jitterIndex],r=i.x-.5,a=i.y-.5;n.setViewOffset(t,s,r,a,t,s)}clearViewOffset(){this.camera.clearViewOffset(),ue.setProjectionMatrix(null),this.jitterIndex=(this.jitterIndex+1)%Me.length}copyDepthTexture(t){const s=this.depthNode.value,n=this.previousDepthTexture??=s.clone();(n.image.width!==s.width||n.image.height!==s.height)&&(n.image.width=s.width,n.image.height=s.height,n.needsUpdate=!0),t.copyTextureToTexture(s,n),this.previousDepthNode.value=n}swapBuffers(){const{resolveRT:t,historyRT:s}=this;this.resolveRT=s,this.historyRT=t,this.resolveNode.value=s.texture,this.historyNode.value=t.texture,this.textureNode.value=t.texture}updateBefore({renderer:t}){if(t==null)return;const s=t.getDrawingBufferSize(Ce);this.setSize(s.x,s.y),this.rendererState=ms(t,this.rendererState),this.needsClearHistory&&this.clearHistory(t),t.setRenderTarget(this.resolveRT),this.mesh.material=this.resolveMaterial,this.mesh.render(t),vs(t,this.rendererState),xe(t)&&this.copyDepthTexture(t),this.swapBuffers(),this.needsSyncRenderPipeline&&this.clearViewOffset()}setupResolveNode({renderer:t}){const s=n=>{const{previousDepthNode:i}=this,r=i.load(e.ivec2(n.mul(i.size()).sub(.5))).toConst();return t.logarithmicDepthBuffer?J(r,Z(this.camera),Y(this.camera)):t.reversedDepthBuffer?r.oneMinus():r};return e.Fn(()=>{const n=e.ivec2(e.screenCoordinate),i=e.screenUV,r=Ts(this.depthNode,n).toConst(),a=r.get("closestCoord"),u=r.get("closestDepth"),c=this.velocityNode.load(a).xyz.mul(e.vec3(.5,-.5,.5)).toConst(),h=c.xy.length().div(this.velocityThreshold).oneMinus().saturate(),d=i.sub(c.xy).toConst(),l=s(d),m=t.logarithmicDepthBuffer?J(u,Z(this.camera),Y(this.camera)):u,p=e.step(m.add(c.z),l.add(this.depthError)),v=h.mul(p),x=e.and(d.greaterThanEqual(0).all(),d.lessThanEqual(1).all()).toFloat(),T=u.notEqual(1).toFloat(),N=this.inputNode.load(n).toVar();return e.If(x.mul(T).mul(v).greaterThan(0),()=>{const z=e.texture(this.historyNode,d),A=gs(this.inputNode,n,N,z,this.varianceGamma),C=e.mix(this.temporalAlpha,.4,Ns(c.xy,e.textureSize(this.inputNode))).saturate();N.assign(e.mix(A,N,C))}).Else(()=>{this.debugShowRejection&&N.assign(e.vec3(1,0,0))}),N})()}setup(t){const s=()=>{const i=t.renderer.getDrawingBufferSize(Ce);this.setViewOffset(i.width,i.height)};if(t.context.renderPipeline!=null){const{context:i}=t.context.renderPipeline;i.onBeforeRenderPipeline=s,this.needsSyncRenderPipeline=!0}if(t.context.postProcessing!=null){const{context:i}=t.context.postProcessing;i.onBeforePostProcessing=s,this.needsSyncRenderPipeline=!0}const{resolveMaterial:n}=this;return n.fragmentNode=this.setupResolveNode(t),n.needsUpdate=!0,this.textureNode.uvNode=this.inputNode.uvNode,this.textureNode}dispose(){this.resolveRT.dispose(),this.historyRT.dispose(),this.previousDepthTexture?.dispose(),this.resolveMaterial.dispose(),this.mesh.geometry.dispose(),super.dispose()}}function Ss(...o){if(o.length===1)return(r,a,u,c)=>new le(e.convertToTexture(r),a,u,c);const[t,s,n,i]=o;return new le(e.convertToTexture(t),s,n,i)}exports.CascadedShadowMapsNode=it;exports.DownsampleThresholdNode=me;exports.FnLayout=B;exports.FnVar=O;exports.GaussianBlurNode=ve;exports.HighpVelocityNode=Ae;exports.KawaseBlurNode=Pe;exports.LensFlareNode=Ue;exports.MipmapBlurNode=Fe;exports.MipmapSurfaceBlurNode=fe;exports.Node=Jt;exports.OnBeforeFrameUpdate=yt;exports.OnFrameUpdate=gt;exports.OutputTexture3DNode=Ie;exports.OutputTextureNode=De;exports.STBNTextureNode=je;exports.ScreenSpaceShadowNode=Le;exports.StorageTexture3DNode=ke;exports.TemporalAntialiasNode=le;exports.bvecAnd=Gt;exports.bvecNot=Et;exports.bvecOr=Yt;exports.cameraFar=Y;exports.cameraNear=Z;exports.cameraPositionWorld=tt;exports.debugFragmentNode=ct;exports.debugMaterial=rt;exports.debugNode=ut;exports.debugVertexNode=at;exports.depthToColor=_e;exports.depthToViewZ=de;exports.dithering=Mt;exports.downsampleThreshold=xt;exports.equirectGrid=zt;exports.equirectToDirectionWorld=Xe;exports.gaussianBlur=St;exports.highpVelocity=ue;exports.hookFunction=lt;exports.interleavedGradientNoise=Ve;exports.inverseProjectionMatrix=Je;exports.inverseViewMatrix=et;exports.isWebGPU=xe;exports.kawaseBlur=Ct;exports.lensFlare=Ot;exports.logarithmicToPerspectiveDepth=J;exports.mipmapBlur=pt;exports.mipmapBlurDownsample=pe;exports.mipmapBlurUpsample=Be;exports.mipmapSurfaceBlur=Ut;exports.node=es;exports.outputTexture=se;exports.outputTexture3D=ts;exports.perspectiveToLogarithmicDepth=Ze;exports.projectionMatrix=Ke;exports.rayEllipsoidIntersection=Kt;exports.raySphereIntersection=_t;exports.raySpheresIntersections=Xt;exports.raySpheresIntersectionsStruct=Oe;exports.screenSpaceShadow=ls;exports.screenToPositionView=Ye;exports.stbn=hs;exports.stbnTexture=Ee;exports.storageTexture3D=ps;exports.temporalAntialias=Ss;exports.textureCatmullRom=ns;exports.textureGather=os;exports.turbo=Re;exports.viewMatrix=Qe;exports.viewZ=st;
6
+ ${n}`:null}async function ot(o,t){return(await te(o,t)).vertexShader}async function nt(o,t){return(await te(o,t)).fragmentShader}async function it(o,t){const s=new f.NodeMaterial;s.vertexNode=e.vec4(e.positionGeometry.xy,0,1),s.fragmentNode=t.toConst("debugNode");const n=await te(o,s);return s.dispose(),n.fragmentShader}function rt(o,t,s){const n=o[t];return o[t]=((...i)=>(s(...i),n.apply(o,i))),o}class Ce extends f.TextureNode{static get type(){return"OutputTextureNode"}constructor(t,s){super(s),this.owner=t,this.setUpdateMatrix(!1)}setup(t){return this.owner.build(t),super.setup(t)}clone(){const t=new this.constructor(this.owner,this.value);return t.uvNode=this.uvNode,t.levelNode=this.levelNode,t.biasNode=this.biasNode,t.sampler=this.sampler,t.depthNode=this.depthNode,t.compareNode=this.compareNode,t.gradNode=this.gradNode,t.offsetNode=this.offsetNode,t}}const se=(...o)=>new Ce(...o);class oe extends f.TempNode{constructor(t){super("vec4"),this.resolutionScale=1,this.renderTargets=[],this.updateBeforeType=f.NodeUpdateType.FRAME,this.inputNode=t}static get type(){return"FilterNode"}createRenderTarget(t){const s=new g.RenderTarget(1,1,{depthBuffer:!1,type:g.HalfFloatType,format:g.RGBAFormat}),n=s.texture;n.minFilter=g.LinearFilter,n.magFilter=g.LinearFilter,n.generateMipmaps=!1;const i=this.constructor.type;return n.name=t!=null?`${i}_${t}`:i,this.renderTargets.push(s),s}getTextureNode(){return w.invariant(this.textureNode!=null,"outputTexture must be specified before getTextureNode() is called."),this.textureNode}get outputTexture(){return this.textureNode?.value??null}set outputTexture(t){this.textureNode=t!=null?se(this,t):void 0}setup(t){const{inputNode:s,textureNode:n}=this;return w.invariant(s!=null,"inputNode must be specified before being setup."),w.invariant(n!=null,"outputTexture must be specified before being setup."),n.uvNode=s.uvNode,n}dispose(){for(const t of this.renderTargets)t.dispose();super.dispose()}}const{resetRendererState:at,restoreRendererState:ct}=f.RendererUtils;class de extends oe{constructor(t,s){super(t),this.downsampleRTs=[],this.upsampleRTs=[],this.downsampleMaterial=new f.NodeMaterial,this.upsampleMaterial=new f.NodeMaterial,this.mesh=new f.QuadMesh,this.inputTexelSize=e.uniform("vec2"),this.downsampleNode=e.texture();const n=this.constructor.type.replace(/Node$/,"");this.downsampleMaterial.name=`${n}_downsample`,this.upsampleMaterial.name=`${n}_upsample`,this.mesh.name=n;for(let i=0;i<s;++i)this.downsampleRTs[i]=this.createRenderTarget(`downsample${i}`),i<s-1&&(this.upsampleRTs[i]=this.createRenderTarget(`upsample${i}`));this.outputTexture=this.upsampleRTs[0].texture}setSize(t,s){const{resolutionScale:n}=this;let i=Math.max(Math.round(t*n),1),r=Math.max(Math.round(s*n),1);const{downsampleRTs:a,upsampleRTs:u}=this;for(let c=0;c<a.length;++c)i=Math.max(Math.round(i/2),1),r=Math.max(Math.round(r/2),1),a[c].setSize(i,r),c<u.length&&u[c].setSize(i,r);return this}updateBefore({renderer:t}){if(t==null)return;const{downsampleRTs:s,upsampleRTs:n,mesh:i,inputNode:r,inputTexelSize:a,downsampleNode:u}=this;w.invariant(r!=null);const{width:c,height:h}=r.value;this.setSize(c,h);const d=r.value;this.rendererState=at(t,this.rendererState),i.material=this.downsampleMaterial;for(const l of s){const{width:m,height:p}=r.value;a.value.set(1/m,1/p),t.setRenderTarget(l),i.render(t),r.value=l.texture}i.material=this.upsampleMaterial;for(let l=n.length-1;l>=0;--l){const m=n[l],{width:p,height:v}=r.value;a.value.set(1/p,1/v),u.value=s[l].texture,t.setRenderTarget(m),i.render(t),r.value=m.texture}ct(t,this.rendererState),r.value=d}setup(t){const{inputNode:s}=this;w.invariant(s!=null);const{downsampleMaterial:n,upsampleMaterial:i}=this;return n.fragmentNode=this.setupDownsampleNode(t),i.fragmentNode=this.setupUpsampleNode(t),n.needsUpdate=!0,i.needsUpdate=!0,super.setup(t)}dispose(){for(const t of this.downsampleRTs)t.dispose();for(const t of this.upsampleRTs)t.dispose();this.downsampleMaterial.dispose(),this.upsampleMaterial.dispose(),this.mesh.geometry.dispose(),super.dispose()}}const he=(o,t)=>{const s=e.uv(),n=e.vec4(1,1,-1,-1).mul(t.xyxy).add(s.xyxy).toVertexStage(),i=e.vec4(2,2,-2,-2).mul(t.xyxy).add(s.xyxy).toVertexStage(),r=n.zy,a=n.xy,u=n.zw,c=n.xw,h=e.vec2(s.x,i.y),d=e.vec2(i.z,s.y),l=e.vec2(i.x,s.y),m=e.vec2(s.x,i.w),p=i.zy,v=i.xy,x=i.zw,N=i.xw;return e.add(e.add(o.sample(s),o.sample(r),o.sample(a),o.sample(u),o.sample(c)).mul(1/8),e.add(o.sample(h),o.sample(d),o.sample(l),o.sample(m)).mul(1/16),e.add(o.sample(p),o.sample(v),o.sample(x),o.sample(N)).mul(1/32))},Re=(o,t)=>{const s=e.uv(),n=e.vec4(1,1,-1,-1).mul(t.xyxy).add(s.xyxy).toVertexStage(),i=e.vec2(s.x,n.y),r=e.vec2(n.z,s.y),a=e.vec2(n.x,s.y),u=e.vec2(s.x,n.w),c=n.zy,h=n.xy,d=n.zw,l=n.xw;return e.add(o.sample(s).mul(.25),e.add(o.sample(i),o.sample(r),o.sample(a),o.sample(u)).mul(.125),e.add(o.sample(c),o.sample(h),o.sample(d),o.sample(l)).mul(.0625))};class De extends de{static get type(){return"MipmapBlurNode"}constructor(t,s=4){super(t,s),this.resolutionScale=.5}setupDownsampleNode(t){return w.invariant(this.inputNode!=null),he(this.inputNode,this.inputTexelSize)}setupUpsampleNode(t){return w.invariant(this.inputNode!=null),Re(this.inputNode,this.inputTexelSize)}}const ut=(...o)=>new De(...o),{resetRendererState:lt,restoreRendererState:dt}=f.RendererUtils;class ht extends oe{constructor(t){super(t),this.material=new f.NodeMaterial,this.mesh=new f.QuadMesh(this.material),this.inputTexelSize=e.uniform("vec2");const s=this.constructor.type.replace(/Node$/,"");this.material.name=s,this.mesh.name=s,this.renderTarget=this.createRenderTarget(),this.outputTexture=this.renderTarget.texture}setSize(t,s){const{resolutionScale:n}=this,i=Math.max(Math.round(t*n),1),r=Math.max(Math.round(s*n),1);return this.renderTarget.setSize(i,r),this}updateBefore({renderer:t}){if(t==null)return;const{inputNode:s}=this;w.invariant(s!=null);const{width:n,height:i}=s.value;this.setSize(n,i),this.inputTexelSize.value.set(1/n,1/i),this.rendererState=lt(t,this.rendererState),t.setRenderTarget(this.renderTarget),this.mesh.render(t),dt(t,this.rendererState)}setup(t){const{inputNode:s}=this;w.invariant(s!=null);const{material:n}=this;return n.fragmentNode=this.setupOutputNode(t),n.needsUpdate=!0,super.setup(t)}dispose(){this.renderTarget.dispose(),this.material.dispose(),this.mesh.geometry.dispose(),super.dispose()}}class pe extends ht{constructor(t){super(t),this.thresholdLevel=e.uniform(5),this.thresholdRange=e.uniform(1),this.resolutionScale=.5}static get type(){return"DownsampleThresholdNode"}setupOutputNode(){const{inputNode:t,thresholdLevel:s,thresholdRange:n,inputTexelSize:i}=this;w.invariant(t!=null);const r=he(t,i),a=e.luminance(r.rgb),u=e.smoothstep(s,s.add(n),a);return e.vec4(r.rgb,a).mul(u)}}const pt=(...o)=>new pe(...o),mt=o=>{const t=e.OnObjectUpdate(o);return t.updateType=f.NodeUpdateType.NONE,t},vt=o=>{const t=e.OnBeforeObjectUpdate(o);return t.updateBeforeType=f.NodeUpdateType.FRAME,t};function we(o){if(typeof o=="string")return o;if("layout"in o&&o.layout instanceof f.StructTypeNode){if(o.layout.name==null)throw new Error("Struct name is required.");return o.layout.name}throw new Error(`Unsupported layout type: ${o}`)}function B({typeOnly:o=!1,...t}){return o?s=>e.Fn(s):s=>e.Fn(s).setLayout({...t,type:we(t.type),inputs:t.inputs?.map(n=>({...n,type:we(n.type)}))??[]})}function O(o){return e.Fn((t,s)=>{const n=o(...t);return typeof n=="function"?n(s):n})}const{resetRendererState:ft,restoreRendererState:xt}=f.RendererUtils;class gt extends oe{constructor(t){super(t),this.iterations=1,this.material=new f.NodeMaterial,this.mesh=new f.QuadMesh(this.material),this.inputTexelSize=e.uniform("vec2"),this.direction=e.uniform("vec2");const s=this.constructor.type.replace(/Node$/,"");this.material.name=s,this.mesh.name=s,this.horizontalRT=this.createRenderTarget("horizontal"),this.verticalRT=this.createRenderTarget("vertical"),this.outputTexture=this.verticalRT.texture}setSize(t,s){const{resolutionScale:n}=this,i=Math.max(Math.round(t*n),1),r=Math.max(Math.round(s*n),1);return this.horizontalRT.setSize(i,r),this.verticalRT.setSize(i,r),this}updateBefore({renderer:t}){if(t==null)return;const{horizontalRT:s,verticalRT:n,mesh:i,inputNode:r,direction:a}=this;w.invariant(r!=null);const{width:u,height:c}=r.value;this.setSize(u,c),this.inputTexelSize.value.set(1/u,1/c);const h=r.value;this.rendererState=ft(t,this.rendererState);for(let d=0;d<this.iterations;++d)a.value.set(1,0),t.setRenderTarget(s),i.render(t),r.value=s.texture,a.value.set(0,1),t.setRenderTarget(n),i.render(t),r.value=n.texture;xt(t,this.rendererState),r.value=h}setup(t){const{inputNode:s}=this;w.invariant(s!=null);const{material:n}=this;return n.fragmentNode=this.setupOutputNode(t),n.needsUpdate=!0,super.setup(t)}dispose(){this.horizontalRT.dispose(),this.verticalRT.dispose(),this.material.dispose(),this.mesh.geometry.dispose(),super.dispose()}}function Ne(o){if(w.invariant(o>=0),o===0)return new Float64Array(0);if(o===1)return new Float64Array([1]);let t=new Float64Array(o),s=new Float64Array(o),n=s;for(let i=1;i<=o;++i){for(let r=0;r<i;++r)s[r]=r===0||r===i-1?1:t[r-1]+t[r];n=s,s=t,t=n}return n}function yt(o,t=2){w.invariant(o>=3);const s=o+t*2,n=t>0?Ne(s).slice(t,-t):Ne(s),i=Math.floor((n.length-1)/2),r=n.reduce((l,m)=>l+m,0),a=n.slice(i),u=[...Array(i+1).keys()],c=new Float64Array(Math.floor(u.length/2)),h=new Float64Array(c.length);c[0]=a[0]/r;for(let l=1,m=1;l<u.length-1;l+=2,++m){const p=u[l],v=u[l+1],x=a[l],N=a[l+1],T=x+N,z=(p*x+v*N)/T;c[m]=T/r,h[m]=z}const d=(c.reduce((l,m)=>l+m,0)-c[0]*.5)*2;if(d!==0){const l=1/d;for(let m=0;m<c.length;++m)c[m]*=l}return{offsets:h,weights:c}}class me extends gt{static get type(){return"GaussianBlurNode"}constructor(t,s=35){super(t),this.kernelSize=s}setupOutputNode(t){const{inputNode:s,inputTexelSize:n,direction:i}=this;w.invariant(s!=null);const{offsets:r,weights:a}=yt(this.kernelSize);return e.Fn(()=>{const u=e.uv(),c=i.mul(n).toVertexStage(),h=s.sample(u).mul(a[0]);for(let d=1;d<r.length;++d){const l=c.mul(r[d]);h.addAssign(e.add(s.sample(u.add(l)),s.sample(u.sub(l))).mul(a[d]))}return h})()}}const wt=(...o)=>new me(...o),Be=o=>o.dot(e.vec2(.06711056,.00583715)).fract().mul(52.9829189).fract(),Nt=e.Fn(()=>{const o=e.vec2(e.screenCoordinate.xy).add(e.time.fract().mul(1337)),t=Be(o);return e.vec3(t,t.oneMinus(),t).sub(.5).div(255)}).once()(),Tt=(o,t,s=e.vec2(90,45))=>{const n=e.equirectUV(o),i=e.fwidth(n),r=t.mul(i).mul(.5),a=e.abs(n.mul(s).fract().sub(.5)).div(s),u=e.smoothstep(r,r.add(i),a).oneMinus();return u.x.add(u.y).clamp(0,1)};class Fe extends f.TempNode{constructor(){super("vec3"),this.currentProjectionMatrix=e.uniform("mat4"),this.previousProjectionMatrix=e.uniform("mat4"),this.currentModelViewMatrix=e.uniform("mat4"),this.previousModelViewMatrix=e.uniform("mat4"),this.objectModelViewMatrices=new WeakMap,this.updateType=f.NodeUpdateType.FRAME,this.updateBeforeType=f.NodeUpdateType.OBJECT,this.updateAfterType=f.NodeUpdateType.OBJECT}static get type(){return"HighpVelocityNode"}setProjectionMatrix(t){return this.projectionMatrix=t,this}update({camera:t}){if(t==null)return;const{currentProjectionMatrix:s,previousProjectionMatrix:n}=this,i=this.projectionMatrix??t.projectionMatrix;n.value==null?n.value=new g.Matrix4().copy(i):n.value.copy(s.value),s.value.copy(i)}updateBefore({object:t,camera:s}){if(t==null||s==null)return;const{currentModelViewMatrix:n,previousModelViewMatrix:i,objectModelViewMatrices:r}=this;n.value.multiplyMatrices(s.matrixWorldInverse,t.matrixWorld),i.value=r.get(t)??n.value}updateAfter({object:t}){if(t==null)return;const{currentModelViewMatrix:s,objectModelViewMatrices:n}=this;let i=n.get(t);i==null&&(i=new g.Matrix4,n.set(t,i)),i.copy(s.value)}setup(t){const s=this.currentProjectionMatrix.mul(this.currentModelViewMatrix).mul(e.positionLocal).toVertexStage(),n=this.previousProjectionMatrix.mul(this.previousModelViewMatrix).mul(e.positionPrevious).toVertexStage(),i=s.xyz.div(s.w),r=n.xyz.div(n.w);return e.sub(i,r)}}const ue=e.nodeImmutable(Fe);class Ve extends de{static get type(){return"KawaseBlurNode"}constructor(t,s=4){super(t,s),this.resolutionScale=.5}setupDownsampleNode(t){const{inputNode:s,inputTexelSize:n}=this;w.invariant(s!=null);const i=e.uv(),r=e.vec4(1,1,-1,-1).mul(n.xyxy.mul(.5)).add(i.xyxy).toVertexStage(),a=r.zy,u=r.xy,c=r.xw,h=r.zw;return e.add(s.sample(i).mul(4),s.sample(a),s.sample(u),s.sample(c),s.sample(h)).mul(1/8)}setupUpsampleNode(t){const{inputNode:s,inputTexelSize:n}=this;w.invariant(s!=null);const i=e.uv(),r=e.vec4(1,1,-1,-1).mul(n.xyxy.mul(.5)).add(i.xyxy).toVertexStage(),a=r.zy,u=r.xy,c=r.xw,h=r.zw,d=e.vec2(r.z,i.y),l=e.vec2(r.x,i.y),m=e.vec2(i.x,r.y),p=e.vec2(i.x,r.w);return e.add(e.add(s.sample(a),s.sample(u),s.sample(c),s.sample(h)).mul(1/12),e.add(s.sample(d),s.sample(l),s.sample(m),s.sample(p)).mul(1/6))}}const bt=(...o)=>new Ve(...o);class St extends f.TempNode{constructor(t){super("vec3"),this.intensity=e.uniform(1e-5),this.inputNode=t}static get type(){return"LensGhostNode"}setup(t){const{inputNode:s,intensity:n}=this;w.invariant(s!=null);const i=B({name:"sampleGhost",type:"vec3",inputs:[{name:"uv",type:"vec2"},{name:"direction",type:"vec2"},{name:"color",type:"vec3"},{name:"offset",type:"float"}]})(([c,h,d,l])=>{const m=h.mul(l).add(c.oneMinus()).saturate(),p=s.sample(m).rgb.mul(d),v=e.sub(.5,m).length().mul(1/(Math.SQRT2/4)).saturate();return p.mulAssign(v.oneMinus().pow(3)),p}),r=e.uv(),a=r.sub(.5);return e.add(i(r,a,e.vec3(.8,.8,1),-5),i(r,a,e.vec3(1,.8,.4),-1.5),i(r,a,e.vec3(.9,1,.8),-.4),i(r,a,e.vec3(1,.8,.4),-.2),i(r,a,e.vec3(.9,.7,.7),-.1),i(r,a,e.vec3(.5,1,.4),.7),i(r,a,e.vec3(.5,.5,.5),1),i(r,a,e.vec3(1,1,.6),2.5),i(r,a,e.vec3(.5,.8,1),10)).mul(n)}}const{resetRendererState:Mt,restoreRendererState:zt}=f.RendererUtils;function Ct(){const n=document.createElement("canvas");n.width=256,n.height=32;const i=n.getContext("2d");w.invariant(i!=null),i.beginPath(),i.moveTo(0,32/2),i.lineTo(256/2,5),i.lineTo(256,32/2),i.lineTo(256/2,27),i.closePath();const r=i.createLinearGradient(0,0,256,0);return r.addColorStop(0,"#000000"),r.addColorStop(.5,"#ffffff"),r.addColorStop(1,"#000000"),i.fillStyle=r,i.fill(),new g.CanvasTexture(n)}const Te=e.struct({color:"vec3",luminance:"float",position:"vec2",scale:"float",sin:"float",cos:"float"});class Rt extends oe{constructor(t){super(t),this.spikePairCount=6,this.wireframe=!1,this.intensity=e.uniform(1e-5),this.sizeScale=e.uniform(new g.Vector2(1.5,.01)),this.luminanceThreshold=e.uniform(100),this.indirectBuffer=new f.IndirectStorageBufferAttribute(new Uint32Array([6,0,0,0,0]),1),this.instanceBuffer=e.instancedArray(1,Te),this.renderTarget=this.createRenderTarget(),this.material=new f.MeshBasicNodeMaterial({depthTest:!1,depthWrite:!1,transparent:!0,blending:g.AdditiveBlending}),this.mesh=new g.Mesh(new g.PlaneGeometry(1,1),this.material),this.camera=new g.PerspectiveCamera,this.inputTexelSize=e.uniform("vec2"),this.outputTexelSize=e.uniform("vec2"),this.geometryRatio=e.uniform("vec2"),this.material.name="LensGlare",this.inputNode=t,this.resolutionScale=.5,this.outputTexture=this.renderTarget.texture,this.mesh.geometry.indirect=this.indirectBuffer}customCacheKey(){return ee.hash(this.spikePairCount,+this.wireframe)}setSize(t,s){const{resolutionScale:n}=this,i=Math.max(Math.round(t*n),1),r=Math.max(Math.round(s*n),1);this.renderTarget.setSize(i,r);const a=Math.floor(i/2),u=Math.floor(r/2),c=a*u;return this.instanceBuffer.bufferCount<c&&(this.instanceBuffer.dispose(),this.instanceBuffer=e.instancedArray(c,Te),this.setupCompute(a,u),this.setupMaterial()),this}updateBefore({renderer:t}){if(t==null)return;const{inputNode:s}=this;w.invariant(s!=null);const{width:n,height:i}=s.value;this.setSize(n,i);const{computeNode:r,indirectBuffer:a,renderTarget:u}=this;w.invariant(r!=null),this.inputTexelSize.value.set(1/n,1/i);const c=n/i;c>1?this.geometryRatio.value.set(1/c,1):this.geometryRatio.value.set(1,c);const{width:h,height:d}=u;this.outputTexelSize.value.set(1/h,1/d),a.array[1]=0,a.needsUpdate=!0,t.compute(r),this.rendererState=Mt(t,this.rendererState),t.setRenderTarget(u),t.render(this.mesh,this.camera),zt(t,this.rendererState)}setupCompute(t,s){const{spikePairCount:n,inputNode:i,indirectBuffer:r,instanceBuffer:a,outputTexelSize:u}=this;w.invariant(i!=null);const c=e.storage(r,"uint",r.count).toAtomic();this.computeNode=e.Fn(()=>{const h=e.uvec2(t,s);e.If(e.globalId.xy.greaterThanEqual(h).any(),()=>{e.Return()});const d=e.vec2(e.globalId.xy).mul(u).mul(2),l=i.sample(d),m=l.a;e.If(m.greaterThan(.1),()=>{const p=e.atomicAdd(c.element(1),n);for(let v=0;v<n;++v){const x=a.element(p.add(v));x.get("color").assign(l.rgb),x.get("luminance").assign(m),x.get("position").assign(e.globalId.xy),x.get("scale").assign(v%2===0?1:.5);const N=Math.PI*(3-Math.sqrt(5)),T=Math.PI/n*v+N;x.get("sin").assign(Math.sin(T)),x.get("cos").assign(Math.cos(T))}})})().compute([Math.ceil(t/8),Math.ceil(s/8),1],[8,8,1])}setupMaterial(){const{inputNode:t,spikeNode:s,instanceBuffer:n,luminanceThreshold:i,intensity:r,sizeScale:a,outputTexelSize:u,geometryRatio:c}=this;w.invariant(t!=null),w.invariant(s!=null);const h=n.element(e.instanceIndex);this.material.colorNode=this.wireframe?e.vec4(1):s.mul(h.get("color").mul(r)),this.material.vertexNode=e.Fn(()=>{const d=h.get("sin"),l=h.get("cos"),m=e.mat3(l,d,0,d.negate(),l,0,0,0,1),v=h.get("position").mul(u).mul(2),x=v.flipY().mul(2).sub(1),T=h.get("luminance").div(i).saturate(),z=e.vec2(T,1).mul(h.get("scale"),a,v.sub(.5).length().mul(2).oneMinus().mul(.5).add(.5)),A=m.mul(e.positionGeometry.mul(e.vec4(z,1,1))).mul(c).add(e.vec3(x,0));return e.vec4(A,1)})(),this.material.wireframe=this.wireframe,this.material.needsUpdate=!0}setup(t){if(this.spikeNode==null){const s=Ct();s.colorSpace=g.SRGBColorSpace,this.spikeNode=e.texture(s)}return this.setupMaterial(),super.setup(t)}dispose(){this.renderTarget.dispose(),this.material.dispose(),this.mesh.geometry.dispose(),super.dispose()}}const Dt=new g.Vector2;class Bt extends f.TempNode{constructor(t){super("vec3"),this.intensity=e.uniform(1e-5),this.chromaticAberration=e.uniform(.005),this.aspectRatio=e.uniform(0),this.updateBeforeType=f.NodeUpdateType.FRAME,this.inputNode=t}static get type(){return"LensHaloNode"}updateBefore({renderer:t}){if(t==null)return;const{width:s,height:n}=t.getDrawingBufferSize(Dt);this.aspectRatio.value=s/n}setup(t){const{inputNode:s,intensity:n,chromaticAberration:i,aspectRatio:r}=this;w.invariant(s!=null);const a=B({name:"cubicRingMask",type:"float",inputs:[{name:"x",type:"float"},{name:"radius",type:"float"},{name:"thickness",type:"float"}]})(([d,l,m])=>{const p=e.min(e.abs(d.sub(l)).div(m),1);return e.mul(p,p,e.sub(3,p.mul(2))).oneMinus()}),u=B({name:"sampleHalo",type:"vec3",inputs:[{name:"uv",type:"vec2"},{name:"radius",type:"float"}]})(([d,l])=>{const m=e.vec2(r,1),p=d.sub(.5).mul(m).normalize().div(m),v=e.vec3(i).mul(e.vec3(-1,0,1)),x=e.fract(p.mul(l).add(d.oneMinus())),N=e.vec3(s.sample(p.mul(v.r).add(x)).r,s.sample(p.mul(v.g).add(x)).g,s.sample(p.mul(v.b).add(x)).b),T=d.sub(e.vec2(.5,0)).mul(m).add(e.vec2(.5,0)),z=e.distance(T,e.vec2(.5)).saturate();return N.mulAssign(a(z,.45,.25)),N}),c=e.uv();return u(c,.3).mul(n)}}const P=o=>o.greaterThanEqual(0).all().and(o.lessThanEqual(1).all()).toFloat();class ve extends de{constructor(t,s=4){super(t,s),this.blendAmount=e.uniform(.85),this.resolutionScale=.5}static get type(){return"MipmapSurfaceBlurNode"}setupDownsampleNode(t){const{inputNode:s,inputTexelSize:n}=this;return w.invariant(s!=null),e.Fn(()=>{const i=e.uv(),r=e.vec4(1,1,-1,-1).mul(n.xyxy).add(i.xyxy).toVertexStage(),a=e.vec4(2,2,-2,-2).mul(n.xyxy).add(i.xyxy).toVertexStage(),u=r.zy,c=r.xy,h=r.zw,d=r.xw,l=a.zy,m=a.xy,p=a.zw,v=a.xw,x=e.vec2(i.x,a.y),N=e.vec2(a.z,i.y),T=e.vec2(a.x,i.y),z=e.vec2(i.x,a.w),A=1/4/2,C=1/9/2,V=s.sample(i).mul(C);let M;return M=e.vec4(P(u),P(c),P(h),P(d)).mul(A),V.addAssign(s.sample(u).mul(M.x),s.sample(c).mul(M.y),s.sample(h).mul(M.z),s.sample(d).mul(M.w)),M=e.vec4(P(l),P(m),P(p),P(v)).mul(C),V.addAssign(s.sample(l).mul(M.x),s.sample(m).mul(M.y),s.sample(p).mul(M.z),s.sample(v).mul(M.w)),M=e.vec4(P(x),P(N),P(T),P(z)).mul(C),V.addAssign(s.sample(x).mul(M.x),s.sample(N).mul(M.y),s.sample(T).mul(M.z),s.sample(z).mul(M.w)),V})()}setupUpsampleNode(t){const{inputNode:s,inputTexelSize:n,downsampleNode:i}=this;w.invariant(s!=null);const r=e.uv(),a=e.vec4(1,1,-1,-1).mul(n.xyxy).add(r.xyxy).toVertexStage(),u=e.vec2(r.x,a.y),c=e.vec2(a.z,r.y),h=e.vec2(a.x,r.y),d=e.vec2(r.x,a.w),l=a.zy,m=a.xy,p=a.zw,v=a.xw,x=e.add(s.sample(r).mul(1/4),e.add(s.sample(u),s.sample(c),s.sample(h),s.sample(d)).mul(1/8),e.add(s.sample(l),s.sample(m),s.sample(p),s.sample(v)).mul(1/16));return e.mix(i.sample(r),x,this.blendAmount)}}const Ft=(...o)=>new ve(...o);function fe(o){return(o instanceof f.NodeBuilder?o.renderer.backend:"backend"in o?o.backend:o).isWebGPUBackend===!0}class Ae extends f.TempNode{constructor(t){super("vec4"),this.bloomIntensity=e.uniform(.05),this.inputNode=t,this.thresholdNode=new pe,this.blurNode=new me,this.ghostNode=new St,this.haloNode=new Bt,this.bloomNode=new ve(null,8),this.glareNode=new Rt,this.featuresNode=e.rtt(e.add(this.ghostNode,this.haloNode)),this.featuresNode.value.name="LensFlare_features",this.featuresNode.pixelRatio=.5,this.blurNode.resolutionScale=1,this.bloomNode.resolutionScale=1,this.glareNode.resolutionScale=1}static get type(){return"LensFlareNode"}setup(t){const{inputNode:s,thresholdNode:n,blurNode:i,ghostNode:r,haloNode:a,bloomNode:u,featuresNode:c,glareNode:h}=this;w.invariant(s!=null);const d=n.getTextureNode(),l=i.getTextureNode();n.inputNode=s,i.inputNode=d,r.inputNode=l,a.inputNode=l,u.inputNode=d,h.inputNode=d;const m=u.getTextureNode().mul(this.bloomIntensity),p=h.getTextureNode();return e.Fn(()=>{const v=s;return v.addAssign(m),fe(t)&&v.addAssign(p),v.add(c)})()}dispose(){this.thresholdNode.dispose(),this.blurNode.dispose(),this.ghostNode.dispose(),this.haloNode.dispose(),this.bloomNode.dispose(),this.glareNode.dispose(),this.featuresNode.dispose(),super.dispose()}}const Vt=o=>new Ae(o!=null?e.convertToTexture(o):null),At=B({name:"bvec2Not",type:"bvec2",inputs:[{name:"x",type:"bvec2"}]})(([o])=>o.notEqual(e.bool(!0))),Pt=B({name:"bvec3Not",type:"bvec3",inputs:[{name:"x",type:"bvec3"}]})(([o])=>o.notEqual(e.bool(!0))),Ut=B({name:"bvec4Not",type:"bvec4",inputs:[{name:"x",type:"bvec4"}]})(([o])=>o.notEqual(e.bool(!0))),Ot=e.overloadingFn([At,Pt,Ut]),It=B({name:"bvec2And",type:"bvec2",inputs:[{name:"x",type:"bvec2"},{name:"y",type:"bvec2"}]})(([o,t])=>e.bvec2(e.uvec2(o).mul(e.uvec2(t)))),Lt=B({name:"bvec3And",type:"bvec3",inputs:[{name:"x",type:"bvec3"},{name:"y",type:"bvec3"}]})(([o,t])=>e.bvec3(e.uvec3(o).mul(e.uvec3(t)))),jt=B({name:"bvec4And",type:"bvec4",inputs:[{name:"x",type:"bvec4"},{name:"y",type:"bvec4"}]})(([o,t])=>e.bvec4(e.uvec4(o).mul(e.uvec4(t)))),Et=e.overloadingFn([It,Lt,jt]),kt=B({name:"bvec2Or",type:"bvec2",inputs:[{name:"x",type:"bvec2"},{name:"y",type:"bvec2"}]})(([o,t])=>e.uvec2(o).add(e.uvec2(t)).notEqual(0)),qt=B({name:"bvec3Or",type:"bvec3",inputs:[{name:"x",type:"bvec3"},{name:"y",type:"bvec3"}]})(([o,t])=>e.uvec3(o).add(e.uvec3(t)).notEqual(0)),Wt=B({name:"bvec4Or",type:"bvec4",inputs:[{name:"x",type:"bvec4"},{name:"y",type:"bvec4"}]})(([o,t])=>e.uvec4(o).add(e.uvec4(t)).notEqual(0)),Gt=e.overloadingFn([kt,qt,Wt]),$t=O((o,t,s,n)=>{const i=o.sub(s),r=e.dot(t,i),a=e.dot(i,i).sub(n.pow2()),u=r.pow2().sub(a).toConst(),c=e.vec2(-1);return e.If(u.greaterThanEqual(0),()=>{const h=e.sqrt(u);c.assign(e.vec2(r.negate().sub(h),r.negate().add(h)))}),c}),Pe=e.struct({near:"vec4",far:"vec4"}),Ht=O((o,t,s,n)=>{const i=o.sub(s),r=e.dot(t,i),a=e.dot(i,i).sub(n.pow2()),u=r.pow2().sub(a).toConst(),c=e.vec2(u.greaterThanEqual(0)).toConst(),h=c.oneMinus().toConst(),d=e.sqrt(u.max(0)).toConst(),l=c.mul(r.negate().sub(d)).sub(h),m=c.mul(r.negate().add(d)).sub(h);return Pe(l,m)}),Zt=O((o,t,s)=>{const n=o.div(s),i=t.div(s),r=i.dot(i),a=n.dot(i),u=n.dot(n),c=a.pow2().sub(r.mul(u.sub(1))).toConst(),h=e.vec2(-1);return e.If(c.greaterThanEqual(0),()=>{const d=e.sqrt(c);h.assign(e.vec2(a.negate().sub(d),a.negate().add(d)).div(r))}),h}),Yt={float:e.float,int:e.int,uint:e.uint,bool:e.bool,vec2:e.vec2,ivec2:e.ivec2,uvec2:e.uvec2,bvec2:e.bvec2,vec3:e.vec3,ivec3:e.ivec3,uvec3:e.uvec3,bvec3:e.bvec3,vec4:e.vec4,ivec4:e.ivec4,uvec4:e.uvec4,bvec4:e.bvec4,mat2:e.mat2,mat3:e.mat3,mat4:e.mat4,color:e.color},_t=f.Node;function Xt(o){return Yt[o]}class Ue extends f.Texture3DNode{static get type(){return"OutputTexture3DNode"}constructor(t,s){super(s),this.owner=t,this.setUpdateMatrix(!1)}setup(t){return this.owner.build(t),super.setup(t)}clone(){const t=new this.constructor(this.owner,this.value);return t.uvNode=this.uvNode,t.levelNode=this.levelNode,t.biasNode=this.biasNode,t.sampler=this.sampler,t.depthNode=this.depthNode,t.compareNode=this.compareNode,t.gradNode=this.gradNode,t.offsetNode=this.offsetNode,t}}const Kt=(...o)=>new Ue(...o),Qt=["x","y","z","w"],Jt=O((o,t,s=0)=>{let n;if(typeof s=="number")n=s;else if(s?.isConstNode===!0)n=s.value;else throw new Error("Component must be a constant.");const i=o.size(),r=e.ivec2(t.mul(i).sub(.5).floor()).toConst(),a=e.ivec4(r,r.add(1)).toConst(),u=Qt[n];return e.vec4(o.load(a.xw)[u],o.load(a.zw)[u],o.load(a.zy)[u],o.load(a.xy)[u])}),es=O((o,t=e.uv())=>{const s=e.vec2(o.size()),n=s.reciprocal(),i=t.mul(s),r=i.sub(.5).floor().add(.5),a=i.sub(r),u=a.mul(a.mul(a.mul(.5).oneMinus()).sub(.5)),c=a.mul(a).mul(a.mul(1.5).sub(2.5)).add(1),h=a.mul(a.mul(e.sub(2,a.mul(1.5))).add(.5)),d=a.mul(a).mul(a.mul(.5).sub(.5)),l=c.add(h),m=h.div(c.add(h)),p=r.sub(1).mul(n),v=r.add(2).mul(n),x=r.add(m).mul(n);return e.add(o.sample(e.vec2(p.x,p.y)).mul(u.x).mul(u.y),o.sample(e.vec2(x.x,p.y)).mul(l.x).mul(u.y),o.sample(e.vec2(v.x,p.y)).mul(d.x).mul(u.y),o.sample(e.vec2(p.x,x.y)).mul(u.x).mul(l.y),o.sample(e.vec2(x.x,x.y)).mul(l.x).mul(l.y),o.sample(e.vec2(v.x,x.y)).mul(d.x).mul(l.y),o.sample(e.vec2(p.x,v.y)).mul(u.x).mul(d.y),o.sample(e.vec2(x.x,v.y)).mul(l.x).mul(d.y),o.sample(e.vec2(v.x,v.y)).mul(d.x).mul(d.y))}),Oe=O((o,t,s,n)=>i=>{s??=Z(t),n??=Y(t);const r=t?.isPerspectiveCamera===!0;return i.renderer.logarithmicDepthBuffer?e.logarithmicDepthToViewZ(o,s,n):r?e.perspectiveDepthToViewZ(o,s,n):e.orthographicDepthToViewZ(o,s,n)}),J=(o,t,s)=>{t??=e.cameraNear,s??=e.cameraFar;const n=e.logarithmicDepthToViewZ(o,t,s);return e.viewZToPerspectiveDepth(n,t,s)},ts=(o,t,s)=>{t??=e.cameraNear,s??=e.cameraFar;const n=e.perspectiveDepthToViewZ(o,t,s);return e.viewZToLogarithmicDepth(n,t,s)},ss=(o,t,s,n,i)=>{const r=n.element(e.int(2)).element(e.int(3)),a=n.element(e.int(3)).element(e.int(3)),c=e.vec4(e.vec3(o.flipY(),t).mul(2).sub(1),1).mul(s.mul(r).add(a));return i.mul(c).xyz},ae=[[58.1375,2.7747,26.8183],[-150.5666,4.2109,-88.5066],[130.5887,-14.0195,109.0745],[-42.3277,4.8052,-60.1097],[4.5974,2.1856,12.5925],[.1357,.0914,.1067]],Ie=B({name:"turbo",type:"vec3",inputs:[{name:"x",type:"float"}]})(([o])=>{const t=e.vec3(...ae[0]).toVar();for(let s=1;s<ae.length;++s)t.assign(e.vec3(...ae[s]).add(o.mul(t)));return t}),os=O((o,t,s,n)=>{s??=Z(t),n??=Y(t);const i=Oe(o,t,s,n);return Ie(e.viewZToLogarithmicDepth(i,s,n))}),ns=B({name:"equirectToDirectionWorld",type:"vec3",inputs:[{name:"uv",type:"vec2"}]})(([o])=>{const t=e.sub(.5,o.x).mul(e.PI2),s=e.sub(o.y,.5).mul(e.PI),n=e.cos(s);return e.vec3(n.mul(e.cos(t)),e.sin(s),n.mul(e.sin(t)))}),R=64;function Q(o){return Math.floor(Math.max(0,o)/R)}class is{constructor(){this.size=[0,0,0],this.offset={x:0,y:0}}copy(t){return[this.size[0],this.size[1],this.size[2]]=t.size,this.offset.x=t.offset.x,this.offset.y=t.offset.y,this}}const rs=new g.Vector3,as=new g.Vector4,cs=new g.Vector2,us=new g.Matrix4;class Le extends f.TempNode{constructor(t,s,n){super("float"),this.sampleCount=60,this.hardShadowSamples=4,this.fadeOutSamples=8,this.thickness=e.uniform(.005),this.shadowContrast=e.uniform(4),this.shadowIntensity=e.uniform(1),this.bilinearThreshold=e.uniform(.02),this.lightCoordinate=e.uniform("vec4"),this.dispatchOffset=e.uniform("ivec2"),this.dispatchIndex=e.uniform(0),this.dispatches=Array.from({length:8},()=>new is),this.dispatchCount=0,this.updateBeforeType=f.NodeUpdateType.FRAME,this.depthNode=t,this.camera=s,this.mainLight=n;const i=new f.StorageTexture(1,1);i.colorSpace=g.NoColorSpace,i.minFilter=g.LinearFilter,i.magFilter=g.LinearFilter,i.generateMipmaps=!1,i.name="ScreenSpaceShadow",this.outputTexture=i,this.textureNode=se(this,i),this.computeNode=this.createComputeNode()}get type(){return"ScreenSpaceShadowNode"}customCacheKey(){return ee.hash(this.camera?.id??-1,this.mainLight?.id??-1,this.sampleCount,this.hardShadowSamples,this.fadeOutSamples)}getTextureNode(){return this.textureNode}setSize(t,s){const{outputTexture:n}=this;return(t!==n.width||s!==n.height)&&(n.setSize(t,s,0),n.needsUpdate=!0),this}updateBefore(t){const{renderer:s}=t;if(s==null)return;const n=s.getDrawingBufferSize(cs);this.setSize(n.width,n.height);const{camera:i,mainLight:r}=this,a=us.multiplyMatrices(i.projectionMatrix,i.matrixWorldInverse),u=rs.copy(r.position).sub(r.target.position).normalize(),c=as.set(u.x,u.y,u.z,0).applyMatrix4(a);this.updateDispatchList(c,n);for(let h=0;h<this.dispatchCount;++h){const d=this.dispatches[h];this.dispatchOffset.value.set(d.offset.x,d.offset.y),this.dispatchIndex.value=h,s.compute(this.computeNode,d.size)}}updateDispatchList(t,{width:s,height:n}){let i=t.w;const r=2e-6*R;i>=0&&i<r?i=r:i<0&&i>-r&&(i=-r),this.lightCoordinate.value.set((t.x/i*.5+.5)*s,(t.y/i*-.5+.5)*n,t.w===0?0:t.z/t.w,t.w>0?1:-1);const a=Math.round(this.lightCoordinate.value.x),u=Math.round(this.lightCoordinate.value.y),c=-a,h=-(n-u),d=s-a,l=u;let m=0;for(let p=0;p<4;++p){const v=p===0||p===3,x=(p&1)>0,N=(p&2)>0,T=Q(x?c:-d),z=Q(N?h:-l),A=R*(v?1:2)-1,C=R*(v?2:1)-1,V=Q((x?d:-c)+A),M=Q((N?l:-h)+C);if(V-T>0&&M-z>0){const U=p===2||p===3?1:0,I=p===1||p===3?1:0,y=this.dispatches[m++];y.size[0]=R,y.size[1]=V-T,y.size[2]=M-z,y.offset.x=(x?T:-V)+U,y.offset.y=(N?-M:z)+I;let D;if(p===0?D=c-h:p===1?D=d+h:p===2?D=-c-l:D=-d+l,D=(D+R-1)/R|0,D>0){const b=this.dispatches[m++].copy(y);p===0?(b.size[2]=Math.min(y.size[2],D),y.size[2]-=b.size[2],b.offset.y=y.offset.y+y.size[2],b.offset.x-=1,b.size[1]+=1):p===1?(b.size[1]=Math.min(y.size[1],D),y.size[1]-=b.size[1],b.offset.x=y.offset.x+y.size[1],b.size[2]+=1):p===2?(b.size[1]=Math.min(y.size[1],D),y.size[1]-=b.size[1],y.offset.x+=b.size[1],b.size[2]+=1,b.offset.y-=1):p===3&&(b.size[2]=Math.min(y.size[2],D),y.size[2]-=b.size[2],y.offset.y+=b.size[2],++b.size[1]),(b.size[1]<=0||b.size[2]<=0)&&b.copy(this.dispatches[--m]),(y.size[1]<=0||y.size[2]<=0)&&y.copy(this.dispatches[--m])}}}for(let p=0;p<m;++p){const v=this.dispatches[p];v.offset.x*=R,v.offset.y*=R}this.dispatchCount=m}createComputeNode(){const{depthNode:t,camera:s,sampleCount:n,hardShadowSamples:i,fadeOutSamples:r,outputTexture:a,thickness:u,shadowContrast:c,shadowIntensity:h,bilinearThreshold:d,lightCoordinate:l,dispatchOffset:m}=this,p=Math.floor(n/R)+2,v=e.workgroupArray("float",p*R),x=()=>{const N=e.ivec2(e.workgroupId.yz).mul(R).add(m).toConst(),T=l.xy.floor().add(.5).toConst(),z=l.xy.sub(T).toConst(),A=l.w.greaterThan(0),C=e.ivec2(N.sign()).toConst(),V=e.abs(N.x.add(C.y)).lessThan(e.abs(N.y.sub(C.x))).toConst(),M=e.ivec2(V.select(C.y,0),V.select(0,C.x.negate())),U=e.vec2(M.mul(e.workgroupId.x).add(N)).toConst(),I=e.abs(U.x).greaterThan(e.abs(U.y)).toConst(),y=I.select(U.x,U.y).toConst(),D=y.abs().toConst(),b=D.sub(R),L=I.select(z.x,z.y).toVar();L.assign(y.greaterThan(0).select(L.negate(),L));const E=U.add(T).toConst(),k=e.mix(l.xy,E,b.add(L).div(D.add(L))).toConst(),G=E.sub(k).toConst(),$=e.float(A.select(e.invocationLocalIndex,e.invocationLocalIndex.bitXor(R-1))).toConst(),q=e.mix(E,k,$.div(R)).toVar(),j=D.sub($).add(L).toConst();return{pixelXY:q,pixelDistance:j,xyDelta:G,xAxisMajor:I}};return e.Fn(N=>{const[T,z]=N.renderer.reversedDepthBuffer?[e.float(1),e.float(0)]:[e.float(0),e.float(1)],A=S=>{let F=t.load(S);return N.renderer.logarithmicDepthBuffer&&(F=J(F,Z(s),Y(s))),F=F.toConst(),e.and(S.greaterThanEqual(0).all(),S.lessThan(t.size()).all()).select(F,z)},{pixelXY:C,xyDelta:V,pixelDistance:M,xAxisMajor:U}=x(),I=l.w.negate(),y=T.greaterThan(z).select(-1,1).toConst(),D=e.ivec2(C.floor()).toConst();let b,L,E;for(let S=0;S<p;++S){const F=e.ivec2(C.floor()).toConst(),X=U.select(C.y,C.x).fract().sub(.5).greaterThan(0).select(1,-1).toConst(),qe=e.ivec2(U.select(0,X),U.select(X,0)),H=A(F).toConst(),ge=A(F.add(qe)).toConst(),ye=z.sub(H).abs().toConst(),We=e.greaterThan(H.sub(ge).abs(),ye.mul(d)),Ge=H.add(e.abs(H.sub(ge)).mul(y)),$e=We.select(H,Ge),ne=S===0?M:I.mul(R*S).add(M).toConst();let ie=$e.sub(l.z).div(ne).toConst();S>0&&(ie=ne.greaterThan(0).select(ie,1e10).toConst()),v.element(e.invocationLocalIndex.add(R*S)).assign(ie),S===0&&(b=H,L=ye,E=ne),C.addAssign(V.mul(I))}e.workgroupBarrier();const k=b.sub(l.z).div(E).toVar(),G=E.add(I).min(u.reciprocal()).mul(E).div(L).toConst();k.assign(k.mul(G).sub(y));const $=e.invocationLocalIndex.add(1).toConst(),q=e.float(1).toVar();for(let S=0;S<i;++S){const F=k.sub(v.element($.add(S)).mul(G)).abs();q.assign(q.min(F))}const j=e.vec4(1).toVar();for(let S=i;S<n-r;++S){const F=k.sub(v.element($.add(S)).mul(G)).abs(),_=e.int(S&3).toConst();j.element(_).assign(j.element(_).min(F))}for(let S=n-r;S<n;++S){const F=k.sub(v.element($.add(S)).mul(G)).abs(),_=(S+1-(n-r))/(r+1)*.75,X=e.int(S&3).toConst();j.element(X).assign(j.element(X).min(F.add(_)))}const xe=c.oneMinus().toConst();q.assign(q.mul(c).add(xe).saturate()),j.assign(j.mul(c).add(xe).saturate());const K=e.float(0).toVar();K.assign(j.dot(e.vec4(.25))),K.assign(e.min(q,K)),e.textureStore(a,D,e.mix(1,K,h))})().computeKernel([R,1,1])}setup(t){return this.textureNode}dispose(){this.outputTexture.dispose()}}const ls=(...o)=>new Le(...o),ds=(()=>{const o=new f.Data3DTexture(new Uint8Array(1));return o.format=f.RedFormat,o.minFilter=f.NearestFilter,o.magFilter=f.NearestFilter,o.wrapS=f.RepeatWrapping,o.wrapT=f.RepeatWrapping,o.wrapR=f.RepeatWrapping,o.needsUpdate=!0,o})();class je extends f.Texture3DNode{constructor(){super(ds),this.url=ce.DEFAULT_STBN_URL}customCacheKey(){return ee.hashString(this.url)}setup(t){return new ce.STBNLoader().loadAsync(this.url).then(s=>{this.value=s}).catch(s=>{console.error(s)}),super.setup(t)}clone(){const t=new this.constructor;return t.uvNode=this.uvNode,t.levelNode=this.levelNode,t.biasNode=this.biasNode,t.sampler=this.sampler,t.depthNode=this.depthNode,t.compareNode=this.compareNode,t.gradNode=this.gradNode,t.offsetNode=this.offsetNode,t}}const Ee=e.nodeImmutable(je),hs=e.Fn(()=>Ee.sample(e.vec3(e.screenCoordinate.xy,e.frameId.mod(64)).div(e.vec3(128,128,64))).r.toConst("stbn")).once()();class ke extends f.StorageTextureNode{static get type(){return"StorageTexture3DNode"}getDefaultUV(){return e.vec3(.5,.5,.5)}setUpdateMatrix(t){}generateUV(t,s){return s.build(t,this.sampler?"vec3":"ivec3")}generateOffset(t,s){return s.build(t,"ivec3")}}const ps=(...o)=>new ke(...o);function be(o,t){let s=1,n=0;for(;o>0;)s/=t,n+=s*(o%t),o=Math.floor(o/t);return n}const Se=Array.from({length:16},(o,t)=>new g.Vector2(be(t+1,2),be(t+1,3))),{resetRendererState:ms,restoreRendererState:vs}=f.RendererUtils;function fs(o){return o.isPerspectiveCamera===!0||o.isOrthographicCamera===!0||"updateProjectionMatrix"in o&&"setViewOffset"in o&&"clearViewOffset"in o}const xs=B({name:"clipAABB",type:"vec4",inputs:[{name:"current",type:"vec4"},{name:"history",type:"vec4"},{name:"minColor",type:"vec4"},{name:"maxColor",type:"vec4"}]})(([o,t,s,n])=>{const i=n.rgb.add(s.rgb).mul(.5).toConst(),r=n.rgb.sub(s.rgb).mul(.5).add(1e-7),a=t.sub(e.vec4(i,o.a)).toConst(),c=a.xyz.div(r).abs().toConst(),h=e.max(c.x,c.y,c.z).toConst();return h.greaterThan(1).select(e.vec4(i,o.a).add(a.div(h)),t)}),Me=[[-1,-1],[-1,1],[1,-1],[1,1],[1,0],[0,-1],[0,1],[-1,0]],gs=O((o,t,s,n,i)=>{const r=s.toVar(),a=s.pow2().toVar();for(const[m,p]of Me){const v=o.load(t.add(e.ivec2(m,p))).toConst();r.addAssign(v),a.addAssign(v.pow2())}const u=Me.length+1,c=r.div(u).toConst(),h=e.sqrt(a.div(u).sub(c.pow2()).max(0)).mul(i).toConst(),d=c.sub(h).toConst(),l=c.add(h).toConst();return xs(c.clamp(d,l),n,d,l)}),ys=[[-1,-1],[-1,0],[-1,1],[0,-1],[0,0],[0,1],[1,-1],[1,0],[1,1]],ws=e.struct({closestCoord:"ivec2",closestDepth:"float"}),Ns=O((o,t)=>s=>{const n=e.ivec2(0).toVar(),i=e.float(1).toVar();for(const[r,a]of ys){const u=t.add(e.ivec2(r,a)).toConst();let c=o.load(u).r;s.renderer.reversedDepthBuffer&&(c=c.oneMinus()),c=c.toConst(),e.If(c.lessThan(i),()=>{n.assign(u),i.assign(c)})}return ws(n,i)}),Ts=O((o,t)=>{const n=o.mul(t).fract().abs(),i=e.max(n,n.oneMinus());return i.x.mul(i.y).oneMinus().div(.75)}),ze=new g.Vector2,bs=new g.DepthTexture(1,1);class le extends f.TempNode{constructor(t,s,n,i){if(super("vec4"),this.temporalAlpha=e.uniform(.05),this.varianceGamma=e.uniform(1),this.velocityThreshold=e.uniform(.1),this.depthError=e.uniform(.001),this.debugShowRejection=!1,this.resolveRT=this.createRenderTarget("resolve"),this.historyRT=this.createRenderTarget("history"),this.resolveMaterial=new f.NodeMaterial,this.mesh=new f.QuadMesh,this.needsSyncRenderPipeline=!1,this.needsClearHistory=!1,this.resolveNode=e.texture(this.resolveRT.texture),this.historyNode=e.texture(this.historyRT.texture),this.previousDepthNode=e.texture(bs),this.originalProjectionMatrix=new g.Matrix4,this.jitterIndex=0,this.updateBeforeType=f.NodeUpdateType.FRAME,this.resolveMaterial.name="TemporalAntialias_resolve",this.mesh.name="TemporalAntialias",this.inputNode=t,this.depthNode=s,this.velocityNode=n,!fs(i))throw new Error("The provided camera is not supported.");this.camera=i,this.textureNode=se(this,this.resolveRT.texture)}static get type(){return"TemporalAntialiasNode"}customCacheKey(){return ee.hash(this.camera.id,+this.debugShowRejection)}createRenderTarget(t){const s=new g.RenderTarget(1,1,{depthBuffer:!1,type:g.HalfFloatType,format:g.RGBAFormat}),n=s.texture;n.minFilter=g.LinearFilter,n.magFilter=g.LinearFilter,n.generateMipmaps=!1;const i=this.constructor.type;return n.name=t!=null?`${i}_${t}`:i,s}getTextureNode(){return this.textureNode}setSize(t,s){const{resolveRT:n,historyRT:i}=this;return(t!==i.width||s!==i.height)&&(n.setSize(t,s),i.setSize(t,s),this.needsClearHistory=!0),this}clearHistory(t){t.setRenderTarget(this.resolveRT),t.clear(),t.setRenderTarget(this.historyRT),t.clear(),this.needsClearHistory=!1}setViewOffset(t,s){const{camera:n}=this;n.updateProjectionMatrix(),this.originalProjectionMatrix.copy(n.projectionMatrix),ue.setProjectionMatrix(this.originalProjectionMatrix);const i=Se[this.jitterIndex],r=i.x-.5,a=i.y-.5;n.setViewOffset(t,s,r,a,t,s)}clearViewOffset(){this.camera.clearViewOffset(),ue.setProjectionMatrix(null),this.jitterIndex=(this.jitterIndex+1)%Se.length}copyDepthTexture(t){const s=this.depthNode.value,n=this.previousDepthTexture??=s.clone();(n.image.width!==s.width||n.image.height!==s.height)&&(n.image.width=s.width,n.image.height=s.height,n.needsUpdate=!0),t.copyTextureToTexture(s,n),this.previousDepthNode.value=n}swapBuffers(){const{resolveRT:t,historyRT:s}=this;this.resolveRT=s,this.historyRT=t,this.resolveNode.value=s.texture,this.historyNode.value=t.texture,this.textureNode.value=t.texture}updateBefore({renderer:t}){if(t==null)return;const s=t.getDrawingBufferSize(ze);this.setSize(s.x,s.y),this.rendererState=ms(t,this.rendererState),this.needsClearHistory&&this.clearHistory(t),t.setRenderTarget(this.resolveRT),this.mesh.material=this.resolveMaterial,this.mesh.render(t),vs(t,this.rendererState),fe(t)&&this.copyDepthTexture(t),this.swapBuffers(),this.needsSyncRenderPipeline&&this.clearViewOffset()}setupResolveNode({renderer:t}){const s=n=>{const{previousDepthNode:i}=this,r=i.load(e.ivec2(n.mul(i.size()).sub(.5))).toConst();return t.logarithmicDepthBuffer?J(r,Z(this.camera),Y(this.camera)):t.reversedDepthBuffer?r.oneMinus():r};return e.Fn(()=>{const n=e.ivec2(e.screenCoordinate),i=e.screenUV,r=Ns(this.depthNode,n).toConst(),a=r.get("closestCoord"),u=r.get("closestDepth"),c=this.velocityNode.load(a).xyz.mul(e.vec3(.5,-.5,.5)).toConst(),h=c.xy.length().div(this.velocityThreshold).oneMinus().saturate(),d=i.sub(c.xy).toConst(),l=s(d),m=t.logarithmicDepthBuffer?J(u,Z(this.camera),Y(this.camera)):u,p=e.step(m.add(c.z),l.add(this.depthError)),v=h.mul(p),x=e.and(d.greaterThanEqual(0).all(),d.lessThanEqual(1).all()).toFloat(),N=u.notEqual(1).toFloat(),T=this.inputNode.load(n).toVar();return e.If(x.mul(N).mul(v).greaterThan(0),()=>{const z=e.texture(this.historyNode,d),A=gs(this.inputNode,n,T,z,this.varianceGamma),C=e.mix(this.temporalAlpha,.4,Ts(c.xy,e.textureSize(this.inputNode))).saturate();T.assign(e.mix(A,T,C))}).Else(()=>{this.debugShowRejection&&T.assign(e.vec3(1,0,0))}),T})()}setup(t){const s=()=>{const i=t.renderer.getDrawingBufferSize(ze);this.setViewOffset(i.width,i.height)};if(t.context.renderPipeline!=null){const{context:i}=t.context.renderPipeline;i.onBeforeRenderPipeline=s,this.needsSyncRenderPipeline=!0}if(t.context.postProcessing!=null){const{context:i}=t.context.postProcessing;i.onBeforePostProcessing=s,this.needsSyncRenderPipeline=!0}const{resolveMaterial:n}=this;return n.fragmentNode=this.setupResolveNode(t),n.needsUpdate=!0,this.textureNode.uvNode=this.inputNode.uvNode,this.textureNode}dispose(){this.resolveRT.dispose(),this.historyRT.dispose(),this.previousDepthTexture?.dispose(),this.resolveMaterial.dispose(),this.mesh.geometry.dispose(),super.dispose()}}function Ss(...o){if(o.length===1)return(r,a,u,c)=>new le(e.convertToTexture(r),a,u,c);const[t,s,n,i]=o;return new le(e.convertToTexture(t),s,n,i)}exports.CascadedShadowMapsNode=tt;exports.DownsampleThresholdNode=pe;exports.FnLayout=B;exports.FnVar=O;exports.GaussianBlurNode=me;exports.HighpVelocityNode=Fe;exports.KawaseBlurNode=Ve;exports.LensFlareNode=Ae;exports.MipmapBlurNode=De;exports.MipmapSurfaceBlurNode=ve;exports.Node=_t;exports.OnBeforeFrameUpdate=vt;exports.OnFrameUpdate=mt;exports.OutputTexture3DNode=Ue;exports.OutputTextureNode=Ce;exports.STBNTextureNode=je;exports.ScreenSpaceShadowNode=Le;exports.StorageTexture3DNode=ke;exports.TemporalAntialiasNode=le;exports.bvecAnd=Et;exports.bvecNot=Ot;exports.bvecOr=Gt;exports.cameraFar=Y;exports.cameraNear=Z;exports.cameraPositionWorld=Ke;exports.debugFragmentNode=nt;exports.debugMaterial=st;exports.debugNode=it;exports.debugVertexNode=ot;exports.depthToColor=os;exports.depthToViewZ=Oe;exports.dithering=Nt;exports.downsampleThreshold=pt;exports.equirectGrid=Tt;exports.equirectToDirectionWorld=ns;exports.gaussianBlur=wt;exports.highpVelocity=ue;exports.hookFunction=rt;exports.interleavedGradientNoise=Be;exports.inverseProjectionMatrix=_e;exports.inverseViewMatrix=Xe;exports.isWebGPU=fe;exports.kawaseBlur=bt;exports.lensFlare=Vt;exports.logarithmicToPerspectiveDepth=J;exports.mipmapBlur=ut;exports.mipmapBlurDownsample=he;exports.mipmapBlurUpsample=Re;exports.mipmapSurfaceBlur=Ft;exports.node=Xt;exports.outputTexture=se;exports.outputTexture3D=Kt;exports.perspectiveToLogarithmicDepth=ts;exports.projectionMatrix=Ze;exports.rayEllipsoidIntersection=Zt;exports.raySphereIntersection=$t;exports.raySpheresIntersections=Ht;exports.raySpheresIntersectionsStruct=Pe;exports.screenSpaceShadow=ls;exports.screenToPositionView=ss;exports.stbn=hs;exports.stbnTexture=Ee;exports.storageTexture3D=ps;exports.temporalAntialias=Ss;exports.textureCatmullRom=es;exports.textureGather=Jt;exports.turbo=Ie;exports.viewMatrix=Ye;exports.viewZ=Qe;
7
7
  //# sourceMappingURL=webgpu.cjs.map