@cognite/reveal 4.35.0 → 4.35.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/dist/assets/{eptBinaryDecoder.worker-DGnrhz2t.js.map → eptBinaryDecoder.worker-BT7AmyFD.js.map} +1 -1
- package/dist/index.js +102 -59
- package/dist/index.js.map +1 -1
- package/dist/packages/cad-parsers/src/metadata/CadModelMetadataRepository.d.ts +1 -0
- package/dist/packages/pointclouds/src/PointCloudMetadataRepository.d.ts +1 -0
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -24,7 +24,7 @@ var Jt = Object.create, Yt = Object.defineProperty, Xt = Object.getOwnPropertyDe
|
|
|
24
24
|
enumerable: !0
|
|
25
25
|
}) : n, e)), rn = {
|
|
26
26
|
name: "@cognite/reveal",
|
|
27
|
-
version: "4.35.
|
|
27
|
+
version: "4.35.1",
|
|
28
28
|
description: "WebGL based 3D viewer for CAD and point clouds processed in Cognite Data Fusion.",
|
|
29
29
|
homepage: "https://github.com/cognitedata/reveal/tree/master/viewer",
|
|
30
30
|
repository: {
|
|
@@ -139,7 +139,7 @@ var Jt = Object.create, Yt = Object.defineProperty, Xt = Object.getOwnPropertyDe
|
|
|
139
139
|
three: "0.184.0"
|
|
140
140
|
},
|
|
141
141
|
files: ["dist"],
|
|
142
|
-
packageManager: "pnpm@11.
|
|
142
|
+
packageManager: "pnpm@11.15.0"
|
|
143
143
|
}, an = "precision highp float;vec4 LinearTosRGB(in vec4 value){return vec4(mix(pow(value.rgb,vec3(0.41666))*1.055-vec3(0.055),value.rgb*12.92,vec3(lessThanEqual(value.rgb,vec3(0.0031308)))),value.a);}vec3 derivateNormal(vec3 v_viewPosition){vec3 fdx=vec3(dFdx(v_viewPosition.x),dFdx(v_viewPosition.y),dFdx(v_viewPosition.z));vec3 fdy=vec3(dFdy(v_viewPosition.x),dFdy(v_viewPosition.y),dFdy(v_viewPosition.z));vec3 normal=normalize(cross(fdx,fdy));return normal;}vec3 rgb2hsv(vec3 c){vec4 K=vec4(0.0,-1.0/3.0,2.0/3.0,-1.0);vec4 p=mix(vec4(c.bg,K.wz),vec4(c.gb,K.xy),step(c.b,c.g));vec4 q=mix(vec4(p.xyw,c.r),vec4(c.r,p.yzx),step(p.x,c.r));float d=q.x-min(q.w,q.y);float e=1.0e-10;return vec3(abs(q.z+(q.w-q.y)/(6.0*d+e)),d/(q.x+e),q.x);}vec3 hsv2rgb(vec3 c){vec4 K=vec4(1.0,2.0/3.0,1.0/3.0,3.0);vec3 p=abs(fract(c.xxx+K.xyz)*6.0-K.www);return c.z*mix(K.xxx,clamp(p-K.xxx,0.0,1.0),c.y);}vec3 packIntToColor(float number){float r=floor(number/(255.0*255.0))/255.0;float g=mod(floor(number/255.0),255.0)/255.0;float b=mod(number,255.0)/255.0;return vec3(r,g,b);}struct GeometryTypeEnum{int Quad;int Primitive;int TriangleMesh;int InstancedMesh;};const GeometryTypeEnum GeometryType=GeometryTypeEnum(1,2,3,4);const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;\n#include <packing>\nout vec4 outputColor;vec3 packNormalToRgb(const in vec3 normal){return normalize(normal)*0.5+0.5;}void updateFragmentColor(int renderMode,vec4 color,float treeIndex,vec3 normal,float depth,sampler2D matCapTexture,int geometryType){if(renderMode==RenderTypeColor||renderMode==RenderTypeEffects){\n#if defined(IS_TEXTURED)\nvec3 colorRGB=color.rgb;\n#else\nvec3 hsv=rgb2hsv(color.rgb);hsv.z=min(0.5*hsv.z+0.5,1.0);vec3 colorRGB=hsv2rgb(hsv);\n#endif\nfloat amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));vec4 albedo=vec4(colorRGB*(0.4+0.6*amplitude),1.0);vec2 cap=normal.xy*0.5+0.5;vec4 mc=vec4(texture(matCapTexture,cap).rgb,1.0);outputColor=vec4(albedo.rgb*mc.rgb*1.7,color.a);}else if(renderMode==RenderTypeGhost){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));float s=0.4+0.6*amplitude;outputColor=vec4(vec3(s),0.3);}else if(renderMode==RenderTypeDepthBufferOnly){outputColor=vec4(1.0,0.0,1.0,1.0);}else if(renderMode==RenderTypePackColorAndNormal){vec3 hsv=rgb2hsv(color.rgb);float a=0.0;if(hsv.y>0.01){if(hsv.z>0.5){a=(0.55+hsv.x*0.45);}else{a=(0.1+hsv.x*0.45);}}else{a=hsv.z*0.09;}outputColor=vec4(packNormalToRgb(normal.rgb),color.a);}else if(renderMode==RenderTypeNormal){outputColor=vec4(packNormalToRgb(normal),color.a);}else if(renderMode==RenderTypeTreeIndex){outputColor=vec4(packIntToColor(treeIndex),color.a);}else if(renderMode==RenderTypeDepth){outputColor=packDepthToRGBA(depth);}else if(renderMode==RenderTypeLOD){bool isHighDetail=geometryType!=GeometryType.Quad;vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb*1.5;outputColor=isHighDetail ? vec4(vec3(0.0,1.0,0.0)*mc,color.a): vec4(vec3(1.0,1.0,0.0)*mc,color.a);}else if(renderMode==RenderTypeGeometryType){vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;vec3 geometryColor=float(geometryType==1)*vec3(1.0,0.0,0.0)+float(geometryType==2)*vec3(0.0,1.0,0.0)+float(geometryType==3)*vec3(0.0,0.0,1.0)+float(geometryType==4)*vec3(1.0,1.0,0.0);outputColor=vec4(geometryColor*mc,color.a);}else{outputColor=vec4(1.0,0.0,1.0,1.0);}}struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}vec4 determineColor(vec3 originalColor,NodeAppearance nodeAppearance){vec4 overrideColor=nodeAppearance.colorTexel;if(any(greaterThan(overrideColor.rgb,vec3(0.0)))){return overrideColor;}return vec4(originalColor.rgb,overrideColor.a);}\n#if NUM_CLIPPING_PLANES > 0\nuniform vec4 clippingPlanes[NUM_CLIPPING_PLANES];\n#endif\nbool isClipped(vec3 point){\n#if NUM_CLIPPING_PLANES > 0\nvec3 pointFlipped=-point;vec4 plane;for(int i=0;i<UNION_CLIPPING_PLANES;i++){plane=clippingPlanes[i];if(dot(pointFlipped,plane.xyz)>plane.w)return true;}\n#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\nbool clipped=true;for(int i=UNION_CLIPPING_PLANES;i<NUM_CLIPPING_PLANES;i++){plane=clippingPlanes[i];clipped=(dot(pointFlipped,plane.xyz)>plane.w)&&clipped;}if(clipped)return true;\n#endif\n#endif\nreturn false;}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}uniform sampler2D matCapTexture;uniform lowp int renderMode;\n#if defined(IS_TEXTURED)\nuniform sampler2D tDiffuse;in vec2 v_uv;\n#else\nin vec3 v_color;\n#endif\nin vec3 v_viewPosition;in vec4 v_nodeAppearanceTexel;in highp vec2 v_treeIndexPacked;void main(){highp float v_treeIndex=unpackTreeIndex(v_treeIndexPacked);NodeAppearance appearance=nodeAppearanceFromTexel(v_nodeAppearanceTexel);if(isClipped(v_viewPosition)){discard;}\n#if defined(IS_TEXTURED)\nvec3 diffuseColor=texture(tDiffuse,v_uv).rgb;diffuseColor=LinearTosRGB(vec4(diffuseColor,1.0)).xyz;vec4 color=determineColor(diffuseColor,appearance);color=vec4(mix(diffuseColor,vec3(color),0.6),color.a);\n#else\nvec4 color=determineColor(v_color,appearance);\n#endif\nvec3 normal=derivateNormal(v_viewPosition);updateFragmentColor(renderMode,color,v_treeIndex,normal,gl_FragCoord.z,matCapTexture,GeometryType.TriangleMesh);}", on = "mat4 determineMatrixOverride(float treeIndex,vec2 treeIndexTextureSize,sampler2D transformOverrideIndexTexture,vec2 transformOverrideTextureSize,sampler2D transformOverrideTexture){float dataTextureWidth=treeIndexTextureSize.x;float dataTextureHeight=treeIndexTextureSize.y;int xTreeIndexTextureCoord=int(mod(treeIndex,dataTextureWidth));int yTreeIndexTextureCoord=int(floor(treeIndex/dataTextureWidth));float index=texelFetch(transformOverrideIndexTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0).r;if(index==0.0){return mat4(1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0);}index-=1.0;float matrixElements[12];for(int i=0;i<12;i++){matrixElements[i]=texelFetch(transformOverrideTexture,ivec2(i+int(index)*16,0.0),0).r;}return mat4(matrixElements[0],matrixElements[4],matrixElements[8],0,matrixElements[1],matrixElements[5],matrixElements[9],0,matrixElements[2],matrixElements[6],matrixElements[10],0,matrixElements[3],matrixElements[7],matrixElements[11],1);}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}bool determineVisibility(NodeAppearance nodeAppearance,int renderMode){bool visible=nodeAppearance.isVisible;bool ghost=(renderMode==RenderTypeGhost)&&nodeAppearance.renderGhosted;bool inFront=(renderMode==RenderTypeEffects)&&nodeAppearance.renderInFront;bool back=(renderMode==RenderTypeColor)&&!nodeAppearance.renderGhosted&&!nodeAppearance.renderInFront;bool other=(renderMode!=RenderTypeColor&&renderMode!=RenderTypeEffects&&renderMode!=RenderTypeGhost)&&!nodeAppearance.renderGhosted;return visible&&(ghost||inFront||back||other);}uniform mat4 modelViewMatrix;uniform mat4 projectionMatrix;uniform vec2 treeIndexTextureSize;uniform vec2 transformOverrideTextureSize;uniform sampler2D transformOverrideIndexTexture;uniform sampler2D transformOverrideTexture;uniform sampler2D colorDataTexture;uniform lowp int renderMode;\n#if defined(IS_TEXTURED)\nin vec2 uv;\n#else\nin vec3 color;\n#endif\nin vec3 position;in float treeIndex;out vec3 v_viewPosition;out vec4 v_nodeAppearanceTexel;\n#if defined(IS_TEXTURED)\nout vec2 v_uv;\n#else\nout vec3 v_color;\n#endif\nout highp vec2 v_treeIndexPacked;void main(){NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,treeIndex);if(!determineVisibility(appearance,renderMode)){gl_Position=vec4(2.0,2.0,2.0,1.0);return;}v_nodeAppearanceTexel=appearance.colorTexel;v_treeIndexPacked=packTreeIndex(treeIndex);mat4 treeIndexWorldTransform=determineMatrixOverride(treeIndex,treeIndexTextureSize,transformOverrideIndexTexture,transformOverrideTextureSize,transformOverrideTexture);vec4 modelViewPosition=modelViewMatrix*treeIndexWorldTransform*vec4(position,1.0);v_viewPosition=modelViewPosition.xyz;\n#if defined(IS_TEXTURED)\nv_uv=uv;\n#else\nv_color=color;\n#endif\ngl_Position=projectionMatrix*modelViewPosition;}", sn = "precision highp float;vec3 derivateNormal(vec3 v_viewPosition){vec3 fdx=vec3(dFdx(v_viewPosition.x),dFdx(v_viewPosition.y),dFdx(v_viewPosition.z));vec3 fdy=vec3(dFdy(v_viewPosition.x),dFdy(v_viewPosition.y),dFdy(v_viewPosition.z));vec3 normal=normalize(cross(fdx,fdy));return normal;}vec3 rgb2hsv(vec3 c){vec4 K=vec4(0.0,-1.0/3.0,2.0/3.0,-1.0);vec4 p=mix(vec4(c.bg,K.wz),vec4(c.gb,K.xy),step(c.b,c.g));vec4 q=mix(vec4(p.xyw,c.r),vec4(c.r,p.yzx),step(p.x,c.r));float d=q.x-min(q.w,q.y);float e=1.0e-10;return vec3(abs(q.z+(q.w-q.y)/(6.0*d+e)),d/(q.x+e),q.x);}vec3 hsv2rgb(vec3 c){vec4 K=vec4(1.0,2.0/3.0,1.0/3.0,3.0);vec3 p=abs(fract(c.xxx+K.xyz)*6.0-K.www);return c.z*mix(K.xxx,clamp(p-K.xxx,0.0,1.0),c.y);}vec3 packIntToColor(float number){float r=floor(number/(255.0*255.0))/255.0;float g=mod(floor(number/255.0),255.0)/255.0;float b=mod(number,255.0)/255.0;return vec3(r,g,b);}struct GeometryTypeEnum{int Quad;int Primitive;int TriangleMesh;int InstancedMesh;};const GeometryTypeEnum GeometryType=GeometryTypeEnum(1,2,3,4);const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;\n#include <packing>\nout vec4 outputColor;vec3 packNormalToRgb(const in vec3 normal){return normalize(normal)*0.5+0.5;}void updateFragmentColor(int renderMode,vec4 color,float treeIndex,vec3 normal,float depth,sampler2D matCapTexture,int geometryType){if(renderMode==RenderTypeColor||renderMode==RenderTypeEffects){\n#if defined(IS_TEXTURED)\nvec3 colorRGB=color.rgb;\n#else\nvec3 hsv=rgb2hsv(color.rgb);hsv.z=min(0.5*hsv.z+0.5,1.0);vec3 colorRGB=hsv2rgb(hsv);\n#endif\nfloat amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));vec4 albedo=vec4(colorRGB*(0.4+0.6*amplitude),1.0);vec2 cap=normal.xy*0.5+0.5;vec4 mc=vec4(texture(matCapTexture,cap).rgb,1.0);outputColor=vec4(albedo.rgb*mc.rgb*1.7,color.a);}else if(renderMode==RenderTypeGhost){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));float s=0.4+0.6*amplitude;outputColor=vec4(vec3(s),0.3);}else if(renderMode==RenderTypeDepthBufferOnly){outputColor=vec4(1.0,0.0,1.0,1.0);}else if(renderMode==RenderTypePackColorAndNormal){vec3 hsv=rgb2hsv(color.rgb);float a=0.0;if(hsv.y>0.01){if(hsv.z>0.5){a=(0.55+hsv.x*0.45);}else{a=(0.1+hsv.x*0.45);}}else{a=hsv.z*0.09;}outputColor=vec4(packNormalToRgb(normal.rgb),color.a);}else if(renderMode==RenderTypeNormal){outputColor=vec4(packNormalToRgb(normal),color.a);}else if(renderMode==RenderTypeTreeIndex){outputColor=vec4(packIntToColor(treeIndex),color.a);}else if(renderMode==RenderTypeDepth){outputColor=packDepthToRGBA(depth);}else if(renderMode==RenderTypeLOD){bool isHighDetail=geometryType!=GeometryType.Quad;vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb*1.5;outputColor=isHighDetail ? vec4(vec3(0.0,1.0,0.0)*mc,color.a): vec4(vec3(1.0,1.0,0.0)*mc,color.a);}else if(renderMode==RenderTypeGeometryType){vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;vec3 geometryColor=float(geometryType==1)*vec3(1.0,0.0,0.0)+float(geometryType==2)*vec3(0.0,1.0,0.0)+float(geometryType==3)*vec3(0.0,0.0,1.0)+float(geometryType==4)*vec3(1.0,1.0,0.0);outputColor=vec4(geometryColor*mc,color.a);}else{outputColor=vec4(1.0,0.0,1.0,1.0);}}struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}vec4 determineColor(vec3 originalColor,NodeAppearance nodeAppearance){vec4 overrideColor=nodeAppearance.colorTexel;if(any(greaterThan(overrideColor.rgb,vec3(0.0)))){return overrideColor;}return vec4(originalColor.rgb,overrideColor.a);}\n#if NUM_CLIPPING_PLANES > 0\nuniform vec4 clippingPlanes[NUM_CLIPPING_PLANES];\n#endif\nbool isClipped(vec3 point){\n#if NUM_CLIPPING_PLANES > 0\nvec3 pointFlipped=-point;vec4 plane;for(int i=0;i<UNION_CLIPPING_PLANES;i++){plane=clippingPlanes[i];if(dot(pointFlipped,plane.xyz)>plane.w)return true;}\n#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\nbool clipped=true;for(int i=UNION_CLIPPING_PLANES;i<NUM_CLIPPING_PLANES;i++){plane=clippingPlanes[i];clipped=(dot(pointFlipped,plane.xyz)>plane.w)&&clipped;}if(clipped)return true;\n#endif\n#endif\nreturn false;}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}uniform sampler2D matCapTexture;uniform lowp int renderMode;in vec3 v_color;in vec3 v_viewPosition;in vec4 v_nodeAppearanceTexel;in highp vec2 v_treeIndexPacked;void main(){highp float treeIndex=unpackTreeIndex(v_treeIndexPacked);NodeAppearance appearance=nodeAppearanceFromTexel(v_nodeAppearanceTexel);if(isClipped(v_viewPosition)){discard;}vec4 color=determineColor(v_color,appearance);vec3 normal=derivateNormal(v_viewPosition);updateFragmentColor(renderMode,color,treeIndex,normal,gl_FragCoord.z,matCapTexture,GeometryType.InstancedMesh);}", cn = "mat4 determineMatrixOverride(float treeIndex,vec2 treeIndexTextureSize,sampler2D transformOverrideIndexTexture,vec2 transformOverrideTextureSize,sampler2D transformOverrideTexture){float dataTextureWidth=treeIndexTextureSize.x;float dataTextureHeight=treeIndexTextureSize.y;int xTreeIndexTextureCoord=int(mod(treeIndex,dataTextureWidth));int yTreeIndexTextureCoord=int(floor(treeIndex/dataTextureWidth));float index=texelFetch(transformOverrideIndexTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0).r;if(index==0.0){return mat4(1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0);}index-=1.0;float matrixElements[12];for(int i=0;i<12;i++){matrixElements[i]=texelFetch(transformOverrideTexture,ivec2(i+int(index)*16,0.0),0).r;}return mat4(matrixElements[0],matrixElements[4],matrixElements[8],0,matrixElements[1],matrixElements[5],matrixElements[9],0,matrixElements[2],matrixElements[6],matrixElements[10],0,matrixElements[3],matrixElements[7],matrixElements[11],1);}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}bool determineVisibility(NodeAppearance nodeAppearance,int renderMode){bool visible=nodeAppearance.isVisible;bool ghost=(renderMode==RenderTypeGhost)&&nodeAppearance.renderGhosted;bool inFront=(renderMode==RenderTypeEffects)&&nodeAppearance.renderInFront;bool back=(renderMode==RenderTypeColor)&&!nodeAppearance.renderGhosted&&!nodeAppearance.renderInFront;bool other=(renderMode!=RenderTypeColor&&renderMode!=RenderTypeEffects&&renderMode!=RenderTypeGhost)&&!nodeAppearance.renderGhosted;return visible&&(ghost||inFront||back||other);}uniform mat4 modelViewMatrix;uniform mat4 projectionMatrix;uniform vec2 treeIndexTextureSize;uniform vec2 transformOverrideTextureSize;uniform sampler2D transformOverrideIndexTexture;uniform sampler2D transformOverrideTexture;uniform sampler2D colorDataTexture;uniform lowp int renderMode;in vec3 position;in mat4 a_instanceMatrix;in float a_treeIndex;in vec3 a_color;out vec3 v_color;out vec3 v_viewPosition;out highp vec2 v_treeIndexPacked;out vec4 v_nodeAppearanceTexel;void main(){NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,a_treeIndex);if(!determineVisibility(appearance,renderMode)){gl_Position=vec4(2.0,2.0,2.0,1.0);return;}v_nodeAppearanceTexel=appearance.colorTexel;v_treeIndexPacked=packTreeIndex(a_treeIndex);mat4 treeIndexWorldTransform=determineMatrixOverride(a_treeIndex,treeIndexTextureSize,transformOverrideIndexTexture,transformOverrideTextureSize,transformOverrideTexture);v_color=a_color;vec3 transformed=(a_instanceMatrix*vec4(position,1.0)).xyz;vec4 modelViewPosition=modelViewMatrix*treeIndexWorldTransform*vec4(transformed,1.0);v_viewPosition=modelViewPosition.xyz;gl_Position=projectionMatrix*modelViewPosition;}", ln = "precision highp float;vec3 rgb2hsv(vec3 c){vec4 K=vec4(0.0,-1.0/3.0,2.0/3.0,-1.0);vec4 p=mix(vec4(c.bg,K.wz),vec4(c.gb,K.xy),step(c.b,c.g));vec4 q=mix(vec4(p.xyw,c.r),vec4(c.r,p.yzx),step(p.x,c.r));float d=q.x-min(q.w,q.y);float e=1.0e-10;return vec3(abs(q.z+(q.w-q.y)/(6.0*d+e)),d/(q.x+e),q.x);}vec3 hsv2rgb(vec3 c){vec4 K=vec4(1.0,2.0/3.0,1.0/3.0,3.0);vec3 p=abs(fract(c.xxx+K.xyz)*6.0-K.www);return c.z*mix(K.xxx,clamp(p-K.xxx,0.0,1.0),c.y);}vec3 packIntToColor(float number){float r=floor(number/(255.0*255.0))/255.0;float g=mod(floor(number/255.0),255.0)/255.0;float b=mod(number,255.0)/255.0;return vec3(r,g,b);}struct GeometryTypeEnum{int Quad;int Primitive;int TriangleMesh;int InstancedMesh;};const GeometryTypeEnum GeometryType=GeometryTypeEnum(1,2,3,4);const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;\n#include <packing>\nout vec4 outputColor;vec3 packNormalToRgb(const in vec3 normal){return normalize(normal)*0.5+0.5;}void updateFragmentColor(int renderMode,vec4 color,float treeIndex,vec3 normal,float depth,sampler2D matCapTexture,int geometryType){if(renderMode==RenderTypeColor||renderMode==RenderTypeEffects){\n#if defined(IS_TEXTURED)\nvec3 colorRGB=color.rgb;\n#else\nvec3 hsv=rgb2hsv(color.rgb);hsv.z=min(0.5*hsv.z+0.5,1.0);vec3 colorRGB=hsv2rgb(hsv);\n#endif\nfloat amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));vec4 albedo=vec4(colorRGB*(0.4+0.6*amplitude),1.0);vec2 cap=normal.xy*0.5+0.5;vec4 mc=vec4(texture(matCapTexture,cap).rgb,1.0);outputColor=vec4(albedo.rgb*mc.rgb*1.7,color.a);}else if(renderMode==RenderTypeGhost){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));float s=0.4+0.6*amplitude;outputColor=vec4(vec3(s),0.3);}else if(renderMode==RenderTypeDepthBufferOnly){outputColor=vec4(1.0,0.0,1.0,1.0);}else if(renderMode==RenderTypePackColorAndNormal){vec3 hsv=rgb2hsv(color.rgb);float a=0.0;if(hsv.y>0.01){if(hsv.z>0.5){a=(0.55+hsv.x*0.45);}else{a=(0.1+hsv.x*0.45);}}else{a=hsv.z*0.09;}outputColor=vec4(packNormalToRgb(normal.rgb),color.a);}else if(renderMode==RenderTypeNormal){outputColor=vec4(packNormalToRgb(normal),color.a);}else if(renderMode==RenderTypeTreeIndex){outputColor=vec4(packIntToColor(treeIndex),color.a);}else if(renderMode==RenderTypeDepth){outputColor=packDepthToRGBA(depth);}else if(renderMode==RenderTypeLOD){bool isHighDetail=geometryType!=GeometryType.Quad;vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb*1.5;outputColor=isHighDetail ? vec4(vec3(0.0,1.0,0.0)*mc,color.a): vec4(vec3(1.0,1.0,0.0)*mc,color.a);}else if(renderMode==RenderTypeGeometryType){vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;vec3 geometryColor=float(geometryType==1)*vec3(1.0,0.0,0.0)+float(geometryType==2)*vec3(0.0,1.0,0.0)+float(geometryType==3)*vec3(0.0,0.0,1.0)+float(geometryType==4)*vec3(1.0,1.0,0.0);outputColor=vec4(geometryColor*mc,color.a);}else{outputColor=vec4(1.0,0.0,1.0,1.0);}}struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}vec4 determineColor(vec3 originalColor,NodeAppearance nodeAppearance){vec4 overrideColor=nodeAppearance.colorTexel;if(any(greaterThan(overrideColor.rgb,vec3(0.0)))){return overrideColor;}return vec4(originalColor.rgb,overrideColor.a);}\n#if NUM_CLIPPING_PLANES > 0\nuniform vec4 clippingPlanes[NUM_CLIPPING_PLANES];\n#endif\nbool isClipped(vec3 point){\n#if NUM_CLIPPING_PLANES > 0\nvec3 pointFlipped=-point;vec4 plane;for(int i=0;i<UNION_CLIPPING_PLANES;i++){plane=clippingPlanes[i];if(dot(pointFlipped,plane.xyz)>plane.w)return true;}\n#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\nbool clipped=true;for(int i=UNION_CLIPPING_PLANES;i<NUM_CLIPPING_PLANES;i++){plane=clippingPlanes[i];clipped=(dot(pointFlipped,plane.xyz)>plane.w)&&clipped;}if(clipped)return true;\n#endif\n#endif\nreturn false;}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}uniform sampler2D matCapTexture;uniform lowp int renderMode;in vec2 v_xy;in vec3 v_color;in vec3 v_normal;in vec3 vViewPosition;in vec4 v_nodeAppearanceTexel;in highp vec2 v_treeIndexPacked;void main(){highp float v_treeIndex=unpackTreeIndex(v_treeIndexPacked);float dist=dot(v_xy,v_xy);vec3 normal=normalize(v_normal);if(dist>0.25)discard;NodeAppearance appearance=nodeAppearanceFromTexel(v_nodeAppearanceTexel);if(isClipped(vViewPosition)){discard;}vec4 color=determineColor(v_color,appearance);updateFragmentColor(renderMode,color,v_treeIndex,normal,gl_FragCoord.z,matCapTexture,GeometryType.Primitive);}", un = "mat4 determineMatrixOverride(float treeIndex,vec2 treeIndexTextureSize,sampler2D transformOverrideIndexTexture,vec2 transformOverrideTextureSize,sampler2D transformOverrideTexture){float dataTextureWidth=treeIndexTextureSize.x;float dataTextureHeight=treeIndexTextureSize.y;int xTreeIndexTextureCoord=int(mod(treeIndex,dataTextureWidth));int yTreeIndexTextureCoord=int(floor(treeIndex/dataTextureWidth));float index=texelFetch(transformOverrideIndexTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0).r;if(index==0.0){return mat4(1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0);}index-=1.0;float matrixElements[12];for(int i=0;i<12;i++){matrixElements[i]=texelFetch(transformOverrideTexture,ivec2(i+int(index)*16,0.0),0).r;}return mat4(matrixElements[0],matrixElements[4],matrixElements[8],0,matrixElements[1],matrixElements[5],matrixElements[9],0,matrixElements[2],matrixElements[6],matrixElements[10],0,matrixElements[3],matrixElements[7],matrixElements[11],1);}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}bool determineVisibility(NodeAppearance nodeAppearance,int renderMode){bool visible=nodeAppearance.isVisible;bool ghost=(renderMode==RenderTypeGhost)&&nodeAppearance.renderGhosted;bool inFront=(renderMode==RenderTypeEffects)&&nodeAppearance.renderInFront;bool back=(renderMode==RenderTypeColor)&&!nodeAppearance.renderGhosted&&!nodeAppearance.renderInFront;bool other=(renderMode!=RenderTypeColor&&renderMode!=RenderTypeEffects&&renderMode!=RenderTypeGhost)&&!nodeAppearance.renderGhosted;return visible&&(ghost||inFront||back||other);}uniform mat4 modelViewMatrix;uniform mat4 projectionMatrix;uniform mat3 normalMatrix;uniform vec2 treeIndexTextureSize;uniform vec2 transformOverrideTextureSize;uniform sampler2D transformOverrideIndexTexture;uniform sampler2D transformOverrideTexture;uniform sampler2D colorDataTexture;uniform lowp int renderMode;in vec3 position;in mat4 a_instanceMatrix;in float a_treeIndex;in vec3 a_color;in vec3 a_normal;out vec2 v_xy;out vec3 v_color;out vec3 v_normal;out vec3 vViewPosition;out vec4 v_nodeAppearanceTexel;out highp vec2 v_treeIndexPacked;void main(){NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,a_treeIndex);if(!determineVisibility(appearance,renderMode)){gl_Position=vec4(2.0,2.0,2.0,1.0);return;}v_nodeAppearanceTexel=appearance.colorTexel;v_treeIndexPacked=packTreeIndex(a_treeIndex);v_xy=vec2(position.x,position.y);mat4 treeIndexWorldTransform=determineMatrixOverride(a_treeIndex,treeIndexTextureSize,transformOverrideIndexTexture,transformOverrideTextureSize,transformOverrideTexture);vec3 transformed=(a_instanceMatrix*vec4(position,1.0)).xyz;vec4 mvPosition=modelViewMatrix*treeIndexWorldTransform*vec4(transformed,1.0);v_color=a_color;v_normal=normalMatrix*normalize(treeIndexWorldTransform*vec4(normalize(a_normal),0.0)).xyz;vViewPosition=mvPosition.xyz;gl_Position=projectionMatrix*mvPosition;}", dn = "precision highp float;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};vec3 rgb2hsv(vec3 c){vec4 K=vec4(0.0,-1.0/3.0,2.0/3.0,-1.0);vec4 p=mix(vec4(c.bg,K.wz),vec4(c.gb,K.xy),step(c.b,c.g));vec4 q=mix(vec4(p.xyw,c.r),vec4(c.r,p.yzx),step(p.x,c.r));float d=q.x-min(q.w,q.y);float e=1.0e-10;return vec3(abs(q.z+(q.w-q.y)/(6.0*d+e)),d/(q.x+e),q.x);}vec3 hsv2rgb(vec3 c){vec4 K=vec4(1.0,2.0/3.0,1.0/3.0,3.0);vec3 p=abs(fract(c.xxx+K.xyz)*6.0-K.www);return c.z*mix(K.xxx,clamp(p-K.xxx,0.0,1.0),c.y);}vec3 packIntToColor(float number){float r=floor(number/(255.0*255.0))/255.0;float g=mod(floor(number/255.0),255.0)/255.0;float b=mod(number,255.0)/255.0;return vec3(r,g,b);}struct GeometryTypeEnum{int Quad;int Primitive;int TriangleMesh;int InstancedMesh;};const GeometryTypeEnum GeometryType=GeometryTypeEnum(1,2,3,4);const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;\n#include <packing>\nout vec4 outputColor;vec3 packNormalToRgb(const in vec3 normal){return normalize(normal)*0.5+0.5;}void updateFragmentColor(int renderMode,vec4 color,float treeIndex,vec3 normal,float depth,sampler2D matCapTexture,int geometryType){if(renderMode==RenderTypeColor||renderMode==RenderTypeEffects){\n#if defined(IS_TEXTURED)\nvec3 colorRGB=color.rgb;\n#else\nvec3 hsv=rgb2hsv(color.rgb);hsv.z=min(0.5*hsv.z+0.5,1.0);vec3 colorRGB=hsv2rgb(hsv);\n#endif\nfloat amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));vec4 albedo=vec4(colorRGB*(0.4+0.6*amplitude),1.0);vec2 cap=normal.xy*0.5+0.5;vec4 mc=vec4(texture(matCapTexture,cap).rgb,1.0);outputColor=vec4(albedo.rgb*mc.rgb*1.7,color.a);}else if(renderMode==RenderTypeGhost){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));float s=0.4+0.6*amplitude;outputColor=vec4(vec3(s),0.3);}else if(renderMode==RenderTypeDepthBufferOnly){outputColor=vec4(1.0,0.0,1.0,1.0);}else if(renderMode==RenderTypePackColorAndNormal){vec3 hsv=rgb2hsv(color.rgb);float a=0.0;if(hsv.y>0.01){if(hsv.z>0.5){a=(0.55+hsv.x*0.45);}else{a=(0.1+hsv.x*0.45);}}else{a=hsv.z*0.09;}outputColor=vec4(packNormalToRgb(normal.rgb),color.a);}else if(renderMode==RenderTypeNormal){outputColor=vec4(packNormalToRgb(normal),color.a);}else if(renderMode==RenderTypeTreeIndex){outputColor=vec4(packIntToColor(treeIndex),color.a);}else if(renderMode==RenderTypeDepth){outputColor=packDepthToRGBA(depth);}else if(renderMode==RenderTypeLOD){bool isHighDetail=geometryType!=GeometryType.Quad;vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb*1.5;outputColor=isHighDetail ? vec4(vec3(0.0,1.0,0.0)*mc,color.a): vec4(vec3(1.0,1.0,0.0)*mc,color.a);}else if(renderMode==RenderTypeGeometryType){vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;vec3 geometryColor=float(geometryType==1)*vec3(1.0,0.0,0.0)+float(geometryType==2)*vec3(0.0,1.0,0.0)+float(geometryType==3)*vec3(0.0,0.0,1.0)+float(geometryType==4)*vec3(1.0,1.0,0.0);outputColor=vec4(geometryColor*mc,color.a);}else{outputColor=vec4(1.0,0.0,1.0,1.0);}}float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}vec4 determineColor(vec3 originalColor,NodeAppearance nodeAppearance){vec4 overrideColor=nodeAppearance.colorTexel;if(any(greaterThan(overrideColor.rgb,vec3(0.0)))){return overrideColor;}return vec4(originalColor.rgb,overrideColor.a);}\n#if NUM_CLIPPING_PLANES > 0\nuniform vec4 clippingPlanes[NUM_CLIPPING_PLANES];\n#endif\nbool isClipped(vec3 point){\n#if NUM_CLIPPING_PLANES > 0\nvec3 pointFlipped=-point;vec4 plane;for(int i=0;i<UNION_CLIPPING_PLANES;i++){plane=clippingPlanes[i];if(dot(pointFlipped,plane.xyz)>plane.w)return true;}\n#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\nbool clipped=true;for(int i=UNION_CLIPPING_PLANES;i<NUM_CLIPPING_PLANES;i++){plane=clippingPlanes[i];clipped=(dot(pointFlipped,plane.xyz)>plane.w)&&clipped;}if(clipped)return true;\n#endif\n#endif\nreturn false;}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}\n#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\nuniform sampler2D colorDataTexture;uniform sampler2D matCapTexture;uniform vec2 treeIndexTextureSize;uniform mat4 projectionMatrix;uniform lowp int renderMode;float computeFragmentDepth(vec3 p,mat4 projectionMatrix){float projected_intersection_z=projectionMatrix[0][2]*p.x+projectionMatrix[1][2]*p.y+projectionMatrix[2][2]*p.z+projectionMatrix[3][2];float projected_intersection_w=projectionMatrix[0][3]*p.x+projectionMatrix[1][3]*p.y+projectionMatrix[2][3]*p.z+projectionMatrix[3][3];return((gl_DepthRange.diff*(projected_intersection_z/projected_intersection_w))+gl_DepthRange.near+gl_DepthRange.far)*.5;}float updateFragmentDepth(vec3 p,mat4 projectionMatrix){gl_FragDepth=computeFragmentDepth(p,projectionMatrix);return gl_FragDepth;}in vec4 v_centerB;in vec4 v_W;in vec4 v_U;in float v_angle;in float v_arcAngle;in vec4 v_centerA;in vec4 v_V;in vec3 v_color;in vec3 v_normal;in highp vec2 v_treeIndexPacked;void main(){highp float v_treeIndex=unpackTreeIndex(v_treeIndexPacked);NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,v_treeIndex);vec3 normal=normalize(v_normal);vec4 color=determineColor(v_color,appearance);float R1=v_centerB.w;vec4 U=v_U;vec4 W=v_W;vec4 V=v_V;float height=length(v_centerA.xyz-v_centerB.xyz);float R2=v_centerA.w;float dR=R2-R1;mat3 basis=mat3(U.xyz,V.xyz,W.xyz);vec3 surfacePoint=vec3(U.w,V.w,W.w);vec3 rayTarget=surfacePoint;float rayTargetDist=length(rayTarget);\n#if defined(COGNITE_ORTHOGRAPHIC_CAMERA)\nvec3 rayDirection=vec3(0.0,0.0,-1.0);\n#else\nvec3 rayDirection=normalize(rayTarget);\n#endif\nvec3 diff=rayTarget-v_centerB.xyz;vec3 E=diff*basis;vec3 D=rayDirection*basis;float a=dot(D.xy,D.xy);float b=dot(E.xy,D.xy);float c=dot(E.xy,E.xy)-R1*R1;if(R1!=R2){float dRLInv=dR/height;float dRdRL2Inv=dRLInv*dRLInv;a-=D.z*D.z*dRdRL2Inv;b-=dRLInv*(E.z*D.z*dRLInv+R1*D.z);c-=dRLInv*(E.z*E.z*dRLInv+2.0*R1*E.z);}float d=b*b-a*c;if(d<0.0){discard;}float sqrtd=sqrt(d);float dist1=(-b-sqrtd)/a;float dist2=(-b+sqrtd)/a;if(dist2<dist1){float tmp=dist1;dist1=dist2;dist2=tmp;}float dist=dist1;vec3 intersectionPoint=E+dist*D;float theta=atan(intersectionPoint.y,intersectionPoint.x);if(theta<v_angle)theta+=2.0*PI;if(theta<v_angle)theta+=2.0*PI;vec3 p=rayTarget+dist*rayDirection;bool isInner=false;if(intersectionPoint.z<=0.0||intersectionPoint.z>height||theta>v_angle+v_arcAngle||isClipped(p)||rayTargetDist+dist<0.0){isInner=true;dist=dist2;intersectionPoint=E+dist*D;theta=atan(intersectionPoint.y,intersectionPoint.x);p=rayTarget+dist*rayDirection;if(theta<v_angle)theta+=2.0*PI;if(theta<v_angle)theta+=2.0*PI;if(intersectionPoint.z<=0.0||intersectionPoint.z>height||theta>v_angle+v_arcAngle||isClipped(p)||rayTargetDist+dist<0.0){discard;}}\n#if !defined(COGNITE_RENDER_COLOR_ID) && !defined(COGNITE_RENDER_DEPTH)\nif(R1!=R2){vec3 n=-normalize(W.xyz);vec3 P1=v_centerB.xyz;vec3 P2=v_centerA.xyz;vec3 A=cross(P1-p,P2 - p);vec3 t=normalize(cross(n,A));vec3 o1=P1+R1*t;vec3 o2=P2+R2*t;vec3 B=o2-o1;normal=normalize(cross(A,B));}else{vec3 p_local=p-v_centerB.xyz;normal=normalize(p_local-W.xyz*dot(p_local,W.xyz));}if(dot(normal,vec3(0.0,0.0,1.0))<0.0){normal*=-1.0;}\n#endif\nfloat fragDepth=updateFragmentDepth(p,projectionMatrix);updateFragmentColor(renderMode,color,v_treeIndex,normal,fragDepth,matCapTexture,GeometryType.Primitive);}", fn = "vec3 mul3(mat4 M,vec3 v){vec4 u=M*vec4(v,1.0);return u.xyz/u.w;}bool isWithinSpan(vec3 point,vec3 span){return all(lessThan(abs(point),span));}vec3 transformQuadToCoverScreenInViewSpace(vec3 position,mat4 projectionMatrix,float near){float tanFov=1.0/projectionMatrix[1][1];float aspect=projectionMatrix[1][1]/projectionMatrix[0][0];float maxAspect=max(aspect,1.0/aspect);vec3 fullScreenQuadCorner=vec3(position.xy*maxAspect*tanFov*near,-near - 1e-6);return fullScreenQuadCorner;}mat4 determineMatrixOverride(float treeIndex,vec2 treeIndexTextureSize,sampler2D transformOverrideIndexTexture,vec2 transformOverrideTextureSize,sampler2D transformOverrideTexture){float dataTextureWidth=treeIndexTextureSize.x;float dataTextureHeight=treeIndexTextureSize.y;int xTreeIndexTextureCoord=int(mod(treeIndex,dataTextureWidth));int yTreeIndexTextureCoord=int(floor(treeIndex/dataTextureWidth));float index=texelFetch(transformOverrideIndexTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0).r;if(index==0.0){return mat4(1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0);}index-=1.0;float matrixElements[12];for(int i=0;i<12;i++){matrixElements[i]=texelFetch(transformOverrideTexture,ivec2(i+int(index)*16,0.0),0).r;}return mat4(matrixElements[0],matrixElements[4],matrixElements[8],0,matrixElements[1],matrixElements[5],matrixElements[9],0,matrixElements[2],matrixElements[6],matrixElements[10],0,matrixElements[3],matrixElements[7],matrixElements[11],1);}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}bool determineVisibility(NodeAppearance nodeAppearance,int renderMode){bool visible=nodeAppearance.isVisible;bool ghost=(renderMode==RenderTypeGhost)&&nodeAppearance.renderGhosted;bool inFront=(renderMode==RenderTypeEffects)&&nodeAppearance.renderInFront;bool back=(renderMode==RenderTypeColor)&&!nodeAppearance.renderGhosted&&!nodeAppearance.renderInFront;bool other=(renderMode!=RenderTypeColor&&renderMode!=RenderTypeEffects&&renderMode!=RenderTypeGhost)&&!nodeAppearance.renderGhosted;return visible&&(ghost||inFront||back||other);}uniform mat4 inverseModelMatrix;uniform mat4 modelViewMatrix;uniform mat4 projectionMatrix;uniform mat3 normalMatrix;uniform vec3 cameraPosition;uniform vec2 treeIndexTextureSize;uniform vec2 transformOverrideTextureSize;uniform sampler2D transformOverrideIndexTexture;uniform sampler2D transformOverrideTexture;uniform sampler2D colorDataTexture;uniform lowp int renderMode;in vec3 position;in vec3 normal;in float a_treeIndex;in vec3 a_centerA;in vec3 a_centerB;in float a_radiusA;in float a_radiusB;in vec3 a_color;in vec3 a_localXAxis;in float a_angle;in float a_arcAngle;out vec4 v_centerB;out vec4 v_U;out vec4 v_W;out vec4 v_centerA;out vec4 v_V;out float v_angle;out float v_arcAngle;out vec3 v_color;out vec3 v_normal;out highp vec2 v_treeIndexPacked;void main(){NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,a_treeIndex);if(!determineVisibility(appearance,renderMode)){gl_Position=vec4(2.0,2.0,2.0,1.0);return;}v_treeIndexPacked=packTreeIndex(a_treeIndex);mat4 treeIndexWorldTransform=determineMatrixOverride(a_treeIndex,treeIndexTextureSize,transformOverrideIndexTexture,transformOverrideTextureSize,transformOverrideTexture);vec3 centerA=mul3(treeIndexWorldTransform,a_centerA);vec3 centerB=mul3(treeIndexWorldTransform,a_centerB);vec3 center=0.5*(centerA+centerB);float halfHeight=0.5*length(centerA-centerB);vec3 dir=normalize(centerA-centerB);vec3 newPosition=position;vec3 rayOrigin=(inverseModelMatrix*vec4(cameraPosition,1.0)).xyz;vec3 objectToCameraModelSpace=rayOrigin-center;float maxRadius=max(a_radiusA,a_radiusB);float leftUpScale=maxRadius;vec3 lDir=dir;if(dot(objectToCameraModelSpace,dir)<0.0){lDir=-lDir;}vec3 left=normalize(cross(objectToCameraModelSpace,lDir));vec3 up=normalize(cross(left,lDir));newPosition.x*=1.0-(maxRadius*(position.x+1.0)*0.0025/halfHeight);mat3 billboardWorldRotation=mat3(lDir,left,up);vec3 cylinderAxisScales=vec3(halfHeight,maxRadius,maxRadius);mat3 inverseBillboardWorldRotation=transpose(billboardWorldRotation);vec3 cameraPosInCylinderSpace=inverseBillboardWorldRotation*(rayOrigin-center);mat3 billboardWorldScaleRotation=mat3(halfHeight*lDir,maxRadius*left,maxRadius*up);vec3 localBillboardPosition=center+billboardWorldScaleRotation*newPosition;vec3 surfacePoint=mul3(modelViewMatrix,localBillboardPosition);float near=min(1.0,projectionMatrix[3][2]/(projectionMatrix[2][2]-1.0));if(isWithinSpan(cameraPosInCylinderSpace,cylinderAxisScales+vec3(near))){surfacePoint=transformQuadToCoverScreenInViewSpace(newPosition,projectionMatrix,near);}gl_Position=projectionMatrix*vec4(surfacePoint,1.0);v_angle=a_angle;v_arcAngle=a_arcAngle;v_W.xyz=dir;v_U.xyz=(treeIndexWorldTransform*vec4(a_localXAxis,0.0)).xyz;v_W.xyz=normalize(normalMatrix*v_W.xyz);v_U.xyz=normalize(normalMatrix*v_U.xyz);v_W.w=surfacePoint.z;v_U.w=surfacePoint.x;mat4 modelToTransformOffset=modelViewMatrix*treeIndexWorldTransform;float radiusB=length((modelToTransformOffset*vec4(a_localXAxis*a_radiusB,0.0)).xyz);float radiusA=length((modelToTransformOffset*vec4(a_localXAxis*a_radiusA,0.0)).xyz);v_centerB.xyz=mul3(modelViewMatrix,centerB);v_centerB.w=radiusB;v_V.xyz=-cross(v_U.xyz,v_W.xyz);v_V.w=surfacePoint.y;v_centerA.xyz=mul3(modelViewMatrix,centerA);v_centerA.w=radiusA;v_color=a_color;v_normal=normalMatrix*normal;}", pn = "precision highp float;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};vec3 rgb2hsv(vec3 c){vec4 K=vec4(0.0,-1.0/3.0,2.0/3.0,-1.0);vec4 p=mix(vec4(c.bg,K.wz),vec4(c.gb,K.xy),step(c.b,c.g));vec4 q=mix(vec4(p.xyw,c.r),vec4(c.r,p.yzx),step(p.x,c.r));float d=q.x-min(q.w,q.y);float e=1.0e-10;return vec3(abs(q.z+(q.w-q.y)/(6.0*d+e)),d/(q.x+e),q.x);}vec3 hsv2rgb(vec3 c){vec4 K=vec4(1.0,2.0/3.0,1.0/3.0,3.0);vec3 p=abs(fract(c.xxx+K.xyz)*6.0-K.www);return c.z*mix(K.xxx,clamp(p-K.xxx,0.0,1.0),c.y);}vec3 packIntToColor(float number){float r=floor(number/(255.0*255.0))/255.0;float g=mod(floor(number/255.0),255.0)/255.0;float b=mod(number,255.0)/255.0;return vec3(r,g,b);}struct GeometryTypeEnum{int Quad;int Primitive;int TriangleMesh;int InstancedMesh;};const GeometryTypeEnum GeometryType=GeometryTypeEnum(1,2,3,4);const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;\n#include <packing>\nout vec4 outputColor;vec3 packNormalToRgb(const in vec3 normal){return normalize(normal)*0.5+0.5;}void updateFragmentColor(int renderMode,vec4 color,float treeIndex,vec3 normal,float depth,sampler2D matCapTexture,int geometryType){if(renderMode==RenderTypeColor||renderMode==RenderTypeEffects){\n#if defined(IS_TEXTURED)\nvec3 colorRGB=color.rgb;\n#else\nvec3 hsv=rgb2hsv(color.rgb);hsv.z=min(0.5*hsv.z+0.5,1.0);vec3 colorRGB=hsv2rgb(hsv);\n#endif\nfloat amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));vec4 albedo=vec4(colorRGB*(0.4+0.6*amplitude),1.0);vec2 cap=normal.xy*0.5+0.5;vec4 mc=vec4(texture(matCapTexture,cap).rgb,1.0);outputColor=vec4(albedo.rgb*mc.rgb*1.7,color.a);}else if(renderMode==RenderTypeGhost){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));float s=0.4+0.6*amplitude;outputColor=vec4(vec3(s),0.3);}else if(renderMode==RenderTypeDepthBufferOnly){outputColor=vec4(1.0,0.0,1.0,1.0);}else if(renderMode==RenderTypePackColorAndNormal){vec3 hsv=rgb2hsv(color.rgb);float a=0.0;if(hsv.y>0.01){if(hsv.z>0.5){a=(0.55+hsv.x*0.45);}else{a=(0.1+hsv.x*0.45);}}else{a=hsv.z*0.09;}outputColor=vec4(packNormalToRgb(normal.rgb),color.a);}else if(renderMode==RenderTypeNormal){outputColor=vec4(packNormalToRgb(normal),color.a);}else if(renderMode==RenderTypeTreeIndex){outputColor=vec4(packIntToColor(treeIndex),color.a);}else if(renderMode==RenderTypeDepth){outputColor=packDepthToRGBA(depth);}else if(renderMode==RenderTypeLOD){bool isHighDetail=geometryType!=GeometryType.Quad;vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb*1.5;outputColor=isHighDetail ? vec4(vec3(0.0,1.0,0.0)*mc,color.a): vec4(vec3(1.0,1.0,0.0)*mc,color.a);}else if(renderMode==RenderTypeGeometryType){vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;vec3 geometryColor=float(geometryType==1)*vec3(1.0,0.0,0.0)+float(geometryType==2)*vec3(0.0,1.0,0.0)+float(geometryType==3)*vec3(0.0,0.0,1.0)+float(geometryType==4)*vec3(1.0,1.0,0.0);outputColor=vec4(geometryColor*mc,color.a);}else{outputColor=vec4(1.0,0.0,1.0,1.0);}}float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}vec4 determineColor(vec3 originalColor,NodeAppearance nodeAppearance){vec4 overrideColor=nodeAppearance.colorTexel;if(any(greaterThan(overrideColor.rgb,vec3(0.0)))){return overrideColor;}return vec4(originalColor.rgb,overrideColor.a);}\n#if NUM_CLIPPING_PLANES > 0\nuniform vec4 clippingPlanes[NUM_CLIPPING_PLANES];\n#endif\nbool isClipped(vec3 point){\n#if NUM_CLIPPING_PLANES > 0\nvec3 pointFlipped=-point;vec4 plane;for(int i=0;i<UNION_CLIPPING_PLANES;i++){plane=clippingPlanes[i];if(dot(pointFlipped,plane.xyz)>plane.w)return true;}\n#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\nbool clipped=true;for(int i=UNION_CLIPPING_PLANES;i<NUM_CLIPPING_PLANES;i++){plane=clippingPlanes[i];clipped=(dot(pointFlipped,plane.xyz)>plane.w)&&clipped;}if(clipped)return true;\n#endif\n#endif\nreturn false;}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}\n#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\nuniform sampler2D colorDataTexture;uniform sampler2D matCapTexture;uniform vec2 treeIndexTextureSize;uniform mat4 projectionMatrix;uniform lowp int renderMode;float computeFragmentDepth(vec3 p,mat4 projectionMatrix){float projected_intersection_z=projectionMatrix[0][2]*p.x+projectionMatrix[1][2]*p.y+projectionMatrix[2][2]*p.z+projectionMatrix[3][2];float projected_intersection_w=projectionMatrix[0][3]*p.x+projectionMatrix[1][3]*p.y+projectionMatrix[2][3]*p.z+projectionMatrix[3][3];return((gl_DepthRange.diff*(projected_intersection_z/projected_intersection_w))+gl_DepthRange.near+gl_DepthRange.far)*.5;}float updateFragmentDepth(vec3 p,mat4 projectionMatrix){gl_FragDepth=computeFragmentDepth(p,projectionMatrix);return gl_FragDepth;}in vec4 U;in vec4 V;in vec4 axis;in vec4 v_centerA;in vec4 v_centerB;in float height;in vec3 v_color;in vec3 v_normal;in highp vec2 v_treeIndexPacked;void main(){highp float v_treeIndex=unpackTreeIndex(v_treeIndexPacked);NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,v_treeIndex);vec4 color=determineColor(v_color,appearance);vec3 normal=normalize(v_normal);mat3 basis=mat3(U.xyz,V.xyz,axis.xyz);vec3 surfacePoint=vec3(U.w,V.w,axis.w);vec3 rayTarget=surfacePoint;float rayTargetDist=length(rayTarget);\n#if defined(COGNITE_ORTHOGRAPHIC_CAMERA)\nvec3 rayDirection=vec3(0.0,0.0,-1.0);\n#else\nvec3 rayDirection=normalize(rayTarget);\n#endif\nvec3 diff=rayTarget-v_centerA.xyz;vec3 E=diff*basis;float L=height;vec3 D=rayDirection*basis;float R1=v_centerA.w;float R2=v_centerB.w;float dR=R2-R1;float a=dot(D.xy,D.xy);float b=dot(E.xy,D.xy);float c=dot(E.xy,E.xy)-R1*R1;float L2Inv=1.0/(L*L);if(R1!=R2){float dRLInv=dR/L;float dRdRL2Inv=dRLInv*dRLInv;a-=D.z*D.z*dRdRL2Inv;b-=dRLInv*(E.z*D.z*dRLInv+R1*D.z);c-=dRLInv*(E.z*E.z*dRLInv+2.0*R1*E.z);}vec2 displacement=((v_centerB.xyz-v_centerA.xyz)*basis).xy;float displacementLengthSquared=dot(displacement,displacement);a+=D.z*(D.z*displacementLengthSquared-2.0*L*dot(D.xy,displacement))*L2Inv;b+=(D.z*E.z*displacementLengthSquared-L*(D.x*E.z*displacement.x+D.y*E.z*displacement.y+D.z*E.x*displacement.x+D.z*E.y*displacement.y))*L2Inv;c+=E.z*(E.z*displacementLengthSquared-2.0*L*dot(E.xy,displacement))*L2Inv;float d=b*b-a*c;if(d<0.0){discard;}float sqrtd=sqrt(d);float dist1=(-b-sqrtd)/a;float dist2=(-b+sqrtd)/a;if(dist2<dist1){float tmp=dist1;dist1=dist2;dist2=tmp;}float dist=dist1;float intersectionPointZ=E.z+dist*D.z;vec3 p=rayTarget+dist*rayDirection;if(intersectionPointZ<=0.0||intersectionPointZ>=L||isClipped(p)||rayTargetDist+dist<0.0){dist=dist2;intersectionPointZ=E.z+dist*D.z;p=rayTarget+dist*rayDirection;if(intersectionPointZ<=0.0||intersectionPointZ>=L||isClipped(p)||rayTargetDist+dist<0.0){discard;}}\n#if !defined(COGNITE_RENDER_COLOR_ID) && !defined(COGNITE_RENDER_DEPTH)\nvec3 n=normalize(-axis.xyz);vec3 v_centerA=v_centerA.xyz;vec3 v_centerB=v_centerB.xyz;vec3 A=cross(v_centerA-p,v_centerB - p);vec3 t=normalize(cross(n,A));vec3 o1=v_centerA+R1*t;vec3 o2=v_centerB+R2*t;vec3 B=o2-o1;normal=normalize(cross(A,B));\n#endif\nif(dot(normal,vec3(0.0,0.0,1.0))<0.0){normal*=-1.0;}float fragDepth=updateFragmentDepth(p,projectionMatrix);updateFragmentColor(renderMode,color,v_treeIndex,normal,fragDepth,matCapTexture,GeometryType.Primitive);}", mn = "vec3 mul3(mat4 M,vec3 v){vec4 u=M*vec4(v,1.0);return u.xyz/u.w;}bool isWithinSpan(vec3 point,vec3 span){return all(lessThan(abs(point),span));}vec3 transformQuadToCoverScreenInViewSpace(vec3 position,mat4 projectionMatrix,float near){float tanFov=1.0/projectionMatrix[1][1];float aspect=projectionMatrix[1][1]/projectionMatrix[0][0];float maxAspect=max(aspect,1.0/aspect);vec3 fullScreenQuadCorner=vec3(position.xy*maxAspect*tanFov*near,-near - 1e-6);return fullScreenQuadCorner;}mat4 determineMatrixOverride(float treeIndex,vec2 treeIndexTextureSize,sampler2D transformOverrideIndexTexture,vec2 transformOverrideTextureSize,sampler2D transformOverrideTexture){float dataTextureWidth=treeIndexTextureSize.x;float dataTextureHeight=treeIndexTextureSize.y;int xTreeIndexTextureCoord=int(mod(treeIndex,dataTextureWidth));int yTreeIndexTextureCoord=int(floor(treeIndex/dataTextureWidth));float index=texelFetch(transformOverrideIndexTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0).r;if(index==0.0){return mat4(1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0);}index-=1.0;float matrixElements[12];for(int i=0;i<12;i++){matrixElements[i]=texelFetch(transformOverrideTexture,ivec2(i+int(index)*16,0.0),0).r;}return mat4(matrixElements[0],matrixElements[4],matrixElements[8],0,matrixElements[1],matrixElements[5],matrixElements[9],0,matrixElements[2],matrixElements[6],matrixElements[10],0,matrixElements[3],matrixElements[7],matrixElements[11],1);}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}bool determineVisibility(NodeAppearance nodeAppearance,int renderMode){bool visible=nodeAppearance.isVisible;bool ghost=(renderMode==RenderTypeGhost)&&nodeAppearance.renderGhosted;bool inFront=(renderMode==RenderTypeEffects)&&nodeAppearance.renderInFront;bool back=(renderMode==RenderTypeColor)&&!nodeAppearance.renderGhosted&&!nodeAppearance.renderInFront;bool other=(renderMode!=RenderTypeColor&&renderMode!=RenderTypeEffects&&renderMode!=RenderTypeGhost)&&!nodeAppearance.renderGhosted;return visible&&(ghost||inFront||back||other);}uniform mat4 inverseModelMatrix;uniform mat4 modelViewMatrix;uniform mat4 projectionMatrix;uniform mat3 normalMatrix;uniform vec3 cameraPosition;uniform vec2 treeIndexTextureSize;uniform vec2 transformOverrideTextureSize;uniform sampler2D transformOverrideIndexTexture;uniform sampler2D transformOverrideTexture;uniform sampler2D colorDataTexture;uniform lowp int renderMode;in vec3 position;in vec3 normal;in float a_treeIndex;in vec3 a_centerA;in vec3 a_centerB;in float a_radiusA;in float a_radiusB;in vec3 a_normal;in vec3 a_color;out vec4 v_centerA;out vec4 v_centerB;out vec4 U;out vec4 V;out vec4 axis;out float height;out vec3 v_color;out vec3 v_normal;out highp vec2 v_treeIndexPacked;void main(){NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,a_treeIndex);if(!determineVisibility(appearance,renderMode)){gl_Position=vec4(2.0,2.0,2.0,1.0);return;}v_treeIndexPacked=packTreeIndex(a_treeIndex);mat4 treeIndexWorldTransform=determineMatrixOverride(a_treeIndex,treeIndexTextureSize,transformOverrideIndexTexture,transformOverrideTextureSize,transformOverrideTexture);mat4 modelToTransformOffset=modelViewMatrix*treeIndexWorldTransform;vec3 centerA=mul3(treeIndexWorldTransform,a_centerA);vec3 centerB=mul3(treeIndexWorldTransform,a_centerB);vec3 normalWithOffset=normalize((treeIndexWorldTransform*vec4(a_normal,0)).xyz);vec3 centerAInCameraSpace=(modelViewMatrix*vec4(centerA,1.0)).xyz;vec3 centerBInCameraSpace=(modelViewMatrix*vec4(centerB,1.0)).xyz;height=dot(normalize(centerA-centerB),normalWithOffset)*length(centerAInCameraSpace - centerBInCameraSpace);vec3 lDir;vec3 center=0.5*(centerA+centerB);vec3 newPosition=position;vec3 rayOrigin=(inverseModelMatrix*vec4(cameraPosition,1.0)).xyz;vec3 objectToCameraModelSpace=rayOrigin-center;vec3 maxCenterProjected=centerA-dot(centerA,normalWithOffset)*normalWithOffset;vec3 minCenterProjected=centerB-dot(centerB,normalWithOffset)*normalWithOffset;float distanceBetweenProjectedCenters=length(maxCenterProjected-minCenterProjected);lDir=normalWithOffset;float dirSign=1.0;if(dot(objectToCameraModelSpace,lDir)<0.0){dirSign=-1.0;lDir*=-1.;}vec3 left=normalize(cross(objectToCameraModelSpace,lDir));vec3 up=normalize(cross(left,lDir));axis.xyz=-normalWithOffset;U.xyz=cross(objectToCameraModelSpace,axis.xyz);V.xyz=cross(U.xyz,axis.xyz);axis.xyz=normalize(normalMatrix*axis.xyz);U.xyz=normalize(normalMatrix*U.xyz);V.xyz=normalize(normalMatrix*V.xyz);newPosition.x*=1.0-(a_radiusA*(position.x+1.0)*0.0025/height);v_centerA.xyz=mul3(modelViewMatrix,centerA);v_centerB.xyz=mul3(modelViewMatrix,centerB);float radiusA=length((modelToTransformOffset*vec4(normalize(vec3(1.0))*a_radiusA,0.0)).xyz);float radiusB=length((modelToTransformOffset*vec4(normalize(vec3(1.0))*a_radiusB,0.0)).xyz);v_centerA.w=radiusA;v_centerB.w=radiusB;float radiusIncludedDisplacement=0.5*(2.0*max(a_radiusA,a_radiusB)+distanceBetweenProjectedCenters);mat3 billboardWorldRotation=mat3(lDir,left,up);vec3 cylinderAxisScales=vec3(height,radiusIncludedDisplacement,radiusIncludedDisplacement);mat3 inverseBillboardWorldRotation=transpose(billboardWorldRotation);vec3 cameraPosInCylinderSpace=inverseBillboardWorldRotation*(rayOrigin-center);mat3 billboardWorldScaleRotation=mat3(0.5*height*lDir,radiusIncludedDisplacement*left,radiusIncludedDisplacement*up);vec3 localBillboardPosition=center+billboardWorldScaleRotation*newPosition;vec3 surfacePoint=mul3(modelViewMatrix,localBillboardPosition);float near=min(1.0,projectionMatrix[3][2]/(projectionMatrix[2][2]-1.0));if(isWithinSpan(cameraPosInCylinderSpace,cylinderAxisScales+vec3(near))){surfacePoint=transformQuadToCoverScreenInViewSpace(newPosition,projectionMatrix,near);}U.w=surfacePoint.x;V.w=surfacePoint.y;axis.w=surfacePoint.z;v_color=a_color;v_normal=normalMatrix*normal;gl_Position=projectionMatrix*vec4(surfacePoint,1.0);}", hn = "precision highp float;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};vec3 rgb2hsv(vec3 c){vec4 K=vec4(0.0,-1.0/3.0,2.0/3.0,-1.0);vec4 p=mix(vec4(c.bg,K.wz),vec4(c.gb,K.xy),step(c.b,c.g));vec4 q=mix(vec4(p.xyw,c.r),vec4(c.r,p.yzx),step(p.x,c.r));float d=q.x-min(q.w,q.y);float e=1.0e-10;return vec3(abs(q.z+(q.w-q.y)/(6.0*d+e)),d/(q.x+e),q.x);}vec3 hsv2rgb(vec3 c){vec4 K=vec4(1.0,2.0/3.0,1.0/3.0,3.0);vec3 p=abs(fract(c.xxx+K.xyz)*6.0-K.www);return c.z*mix(K.xxx,clamp(p-K.xxx,0.0,1.0),c.y);}vec3 packIntToColor(float number){float r=floor(number/(255.0*255.0))/255.0;float g=mod(floor(number/255.0),255.0)/255.0;float b=mod(number,255.0)/255.0;return vec3(r,g,b);}struct GeometryTypeEnum{int Quad;int Primitive;int TriangleMesh;int InstancedMesh;};const GeometryTypeEnum GeometryType=GeometryTypeEnum(1,2,3,4);const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;\n#include <packing>\nout vec4 outputColor;vec3 packNormalToRgb(const in vec3 normal){return normalize(normal)*0.5+0.5;}void updateFragmentColor(int renderMode,vec4 color,float treeIndex,vec3 normal,float depth,sampler2D matCapTexture,int geometryType){if(renderMode==RenderTypeColor||renderMode==RenderTypeEffects){\n#if defined(IS_TEXTURED)\nvec3 colorRGB=color.rgb;\n#else\nvec3 hsv=rgb2hsv(color.rgb);hsv.z=min(0.5*hsv.z+0.5,1.0);vec3 colorRGB=hsv2rgb(hsv);\n#endif\nfloat amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));vec4 albedo=vec4(colorRGB*(0.4+0.6*amplitude),1.0);vec2 cap=normal.xy*0.5+0.5;vec4 mc=vec4(texture(matCapTexture,cap).rgb,1.0);outputColor=vec4(albedo.rgb*mc.rgb*1.7,color.a);}else if(renderMode==RenderTypeGhost){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));float s=0.4+0.6*amplitude;outputColor=vec4(vec3(s),0.3);}else if(renderMode==RenderTypeDepthBufferOnly){outputColor=vec4(1.0,0.0,1.0,1.0);}else if(renderMode==RenderTypePackColorAndNormal){vec3 hsv=rgb2hsv(color.rgb);float a=0.0;if(hsv.y>0.01){if(hsv.z>0.5){a=(0.55+hsv.x*0.45);}else{a=(0.1+hsv.x*0.45);}}else{a=hsv.z*0.09;}outputColor=vec4(packNormalToRgb(normal.rgb),color.a);}else if(renderMode==RenderTypeNormal){outputColor=vec4(packNormalToRgb(normal),color.a);}else if(renderMode==RenderTypeTreeIndex){outputColor=vec4(packIntToColor(treeIndex),color.a);}else if(renderMode==RenderTypeDepth){outputColor=packDepthToRGBA(depth);}else if(renderMode==RenderTypeLOD){bool isHighDetail=geometryType!=GeometryType.Quad;vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb*1.5;outputColor=isHighDetail ? vec4(vec3(0.0,1.0,0.0)*mc,color.a): vec4(vec3(1.0,1.0,0.0)*mc,color.a);}else if(renderMode==RenderTypeGeometryType){vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;vec3 geometryColor=float(geometryType==1)*vec3(1.0,0.0,0.0)+float(geometryType==2)*vec3(0.0,1.0,0.0)+float(geometryType==3)*vec3(0.0,0.0,1.0)+float(geometryType==4)*vec3(1.0,1.0,0.0);outputColor=vec4(geometryColor*mc,color.a);}else{outputColor=vec4(1.0,0.0,1.0,1.0);}}float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}vec4 determineColor(vec3 originalColor,NodeAppearance nodeAppearance){vec4 overrideColor=nodeAppearance.colorTexel;if(any(greaterThan(overrideColor.rgb,vec3(0.0)))){return overrideColor;}return vec4(originalColor.rgb,overrideColor.a);}\n#if NUM_CLIPPING_PLANES > 0\nuniform vec4 clippingPlanes[NUM_CLIPPING_PLANES];\n#endif\nbool isClipped(vec3 point){\n#if NUM_CLIPPING_PLANES > 0\nvec3 pointFlipped=-point;vec4 plane;for(int i=0;i<UNION_CLIPPING_PLANES;i++){plane=clippingPlanes[i];if(dot(pointFlipped,plane.xyz)>plane.w)return true;}\n#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\nbool clipped=true;for(int i=UNION_CLIPPING_PLANES;i<NUM_CLIPPING_PLANES;i++){plane=clippingPlanes[i];clipped=(dot(pointFlipped,plane.xyz)>plane.w)&&clipped;}if(clipped)return true;\n#endif\n#endif\nreturn false;}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}uniform sampler2D colorDataTexture;uniform sampler2D matCapTexture;uniform vec2 treeIndexTextureSize;uniform mat4 projectionMatrix;uniform lowp int renderMode;float computeFragmentDepth(vec3 p,mat4 projectionMatrix){float projected_intersection_z=projectionMatrix[0][2]*p.x+projectionMatrix[1][2]*p.y+projectionMatrix[2][2]*p.z+projectionMatrix[3][2];float projected_intersection_w=projectionMatrix[0][3]*p.x+projectionMatrix[1][3]*p.y+projectionMatrix[2][3]*p.z+projectionMatrix[3][3];return((gl_DepthRange.diff*(projected_intersection_z/projected_intersection_w))+gl_DepthRange.near+gl_DepthRange.far)*.5;}float updateFragmentDepth(vec3 p,mat4 projectionMatrix){gl_FragDepth=computeFragmentDepth(p,projectionMatrix);return gl_FragDepth;}in vec4 center;in float hRadius;in float height;in vec4 U;in vec4 V;in vec4 sphereNormal;in vec3 v_color;in vec3 v_normal;in highp vec2 v_treeIndexPacked;void main(){highp float v_treeIndex=unpackTreeIndex(v_treeIndexPacked);NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,v_treeIndex);vec4 color=determineColor(v_color,appearance);vec3 normal=normalize(sphereNormal.xyz);float vRadius=center.w;float ratio=vRadius/hRadius;mat3 basis=mat3(U.xyz,V.xyz,sphereNormal.xyz);mat3 scaledBasis=mat3(ratio*U.xyz,ratio*V.xyz,sphereNormal.xyz);vec3 surfacePoint=vec3(U.w,V.w,sphereNormal.w);vec3 rayTarget=surfacePoint;\n#if defined(COGNITE_ORTHOGRAPHIC_CAMERA)\nvec3 rayDirection=vec3(0.0,0.0,-1.0);\n#else\nvec3 rayDirection=normalize(rayTarget);\n#endif\nvec3 diff=rayTarget-center.xyz;vec3 E=diff*scaledBasis;vec3 D=rayDirection*scaledBasis;float a=dot(D,D);float b=dot(E,D);float c=dot(E,E)-vRadius*vRadius;float d=b*b-a*c;if(d<0.0)discard;float sqrtd=sqrt(d);float dist1=(-b-sqrtd)/a;float dist2=(-b+sqrtd)/a;if(dist2<dist1){float tmp=dist1;dist1=dist2;dist2=tmp;}float dist=dist1;float intersectionPointZ=E.z+dist*D.z;vec3 p=rayTarget+dist*rayDirection;if(intersectionPointZ<=vRadius-height||intersectionPointZ>vRadius||isClipped(p)){dist=dist2;intersectionPointZ=E.z+dist*D.z;p=rayTarget+dist*rayDirection;if(intersectionPointZ<=vRadius-height||intersectionPointZ>vRadius||isClipped(p)){discard;}}\n#if !defined(COGNITE_RENDER_COLOR_ID) && !defined(COGNITE_RENDER_DEPTH)\nnormal=vec3(p-center.xyz)*basis;normal.z=normal.z*(hRadius/vRadius)*(hRadius/vRadius);normal=normalize(basis*normal);if(dot(normal,rayDirection)>0.){normal=-normal;}\n#endif\nfloat fragDepth=updateFragmentDepth(p,projectionMatrix);updateFragmentColor(renderMode,color,v_treeIndex,normal,fragDepth,matCapTexture,GeometryType.Primitive);}", gn = "vec3 mul3(mat4 M,vec3 v){vec4 u=M*vec4(v,1.0);return u.xyz/u.w;}mat4 determineMatrixOverride(float treeIndex,vec2 treeIndexTextureSize,sampler2D transformOverrideIndexTexture,vec2 transformOverrideTextureSize,sampler2D transformOverrideTexture){float dataTextureWidth=treeIndexTextureSize.x;float dataTextureHeight=treeIndexTextureSize.y;int xTreeIndexTextureCoord=int(mod(treeIndex,dataTextureWidth));int yTreeIndexTextureCoord=int(floor(treeIndex/dataTextureWidth));float index=texelFetch(transformOverrideIndexTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0).r;if(index==0.0){return mat4(1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0);}index-=1.0;float matrixElements[12];for(int i=0;i<12;i++){matrixElements[i]=texelFetch(transformOverrideTexture,ivec2(i+int(index)*16,0.0),0).r;}return mat4(matrixElements[0],matrixElements[4],matrixElements[8],0,matrixElements[1],matrixElements[5],matrixElements[9],0,matrixElements[2],matrixElements[6],matrixElements[10],0,matrixElements[3],matrixElements[7],matrixElements[11],1);}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}bool determineVisibility(NodeAppearance nodeAppearance,int renderMode){bool visible=nodeAppearance.isVisible;bool ghost=(renderMode==RenderTypeGhost)&&nodeAppearance.renderGhosted;bool inFront=(renderMode==RenderTypeEffects)&&nodeAppearance.renderInFront;bool back=(renderMode==RenderTypeColor)&&!nodeAppearance.renderGhosted&&!nodeAppearance.renderInFront;bool other=(renderMode!=RenderTypeColor&&renderMode!=RenderTypeEffects&&renderMode!=RenderTypeGhost)&&!nodeAppearance.renderGhosted;return visible&&(ghost||inFront||back||other);}uniform mat4 inverseModelMatrix;uniform mat4 inverseNormalMatrix;uniform mat4 modelViewMatrix;uniform mat4 projectionMatrix;uniform mat3 normalMatrix;uniform vec3 cameraPosition;uniform vec2 treeIndexTextureSize;uniform vec2 transformOverrideTextureSize;uniform sampler2D transformOverrideIndexTexture;uniform sampler2D transformOverrideTexture;uniform sampler2D colorDataTexture;uniform lowp int renderMode;in vec3 position;in float a_treeIndex;in vec3 a_color;in vec3 a_center;in vec3 a_normal;in float a_horizontalRadius;in float a_verticalRadius;in float a_height;out vec4 center;out float hRadius;out float height;out vec4 U;out vec4 V;out vec4 sphereNormal;out vec3 v_color;out vec3 v_normal;out highp vec2 v_treeIndexPacked;void main(){NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,a_treeIndex);if(!determineVisibility(appearance,renderMode)){gl_Position=vec4(2.0,2.0,2.0,1.0);return;}v_treeIndexPacked=packTreeIndex(a_treeIndex);mat4 treeIndexWorldTransform=determineMatrixOverride(a_treeIndex,treeIndexTextureSize,transformOverrideIndexTexture,transformOverrideTextureSize,transformOverrideTexture);vec3 centerWithOffset=mul3(treeIndexWorldTransform,a_center).xyz;vec3 normalWithOffset=(treeIndexWorldTransform*vec4(a_normal,0)).xyz;vec3 lDir;float distanceToCenterOfSegment=a_verticalRadius-a_height*0.5;vec3 centerOfSegment=centerWithOffset+normalWithOffset*distanceToCenterOfSegment;\n#if defined(COGNITE_ORTHOGRAPHIC_CAMERA)\nvec3 objectToCameraModelSpace=inverseNormalMatrix*vec3(0.0,0.0,1.0);\n#else\nvec3 rayOrigin=(inverseModelMatrix*vec4(cameraPosition,1.0)).xyz;vec3 objectToCameraModelSpace=rayOrigin-centerOfSegment;\n#endif\nvec3 newPosition=position;float bb=dot(objectToCameraModelSpace,normalWithOffset);if(bb<0.0){lDir=-normalWithOffset;}else{lDir=normalWithOffset;}vec3 left=normalize(cross(objectToCameraModelSpace,lDir));vec3 up=normalize(cross(left,lDir));newPosition.x*=1.0-(a_verticalRadius*(position.x+1.0)*0.0025/a_height);float ratio=max(0.0,1.0-a_height/a_verticalRadius);float maxRadiusOfSegment=a_horizontalRadius*sqrt(1.0-ratio*ratio);vec3 displacement=vec3(newPosition.x*a_height*0.5,maxRadiusOfSegment*newPosition.y,maxRadiusOfSegment*newPosition.z);vec3 surfacePoint=centerOfSegment+mat3(lDir,left,up)*displacement;vec3 transformed=surfacePoint;surfacePoint=mul3(modelViewMatrix,surfacePoint);center.xyz=mul3(modelViewMatrix,centerWithOffset);center.w=a_verticalRadius;hRadius=a_horizontalRadius;height=a_height;v_color=a_color;sphereNormal.xyz=normalMatrix*normalWithOffset;U.xyz=normalMatrix*up;V.xyz=normalMatrix*left;U.w=surfacePoint.x;V.w=surfacePoint.y;sphereNormal.w=surfacePoint.z;vec4 mvPosition=modelViewMatrix*vec4(transformed,1.0);gl_Position=projectionMatrix*mvPosition;}", _n = "precision highp float;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};vec3 rgb2hsv(vec3 c){vec4 K=vec4(0.0,-1.0/3.0,2.0/3.0,-1.0);vec4 p=mix(vec4(c.bg,K.wz),vec4(c.gb,K.xy),step(c.b,c.g));vec4 q=mix(vec4(p.xyw,c.r),vec4(c.r,p.yzx),step(p.x,c.r));float d=q.x-min(q.w,q.y);float e=1.0e-10;return vec3(abs(q.z+(q.w-q.y)/(6.0*d+e)),d/(q.x+e),q.x);}vec3 hsv2rgb(vec3 c){vec4 K=vec4(1.0,2.0/3.0,1.0/3.0,3.0);vec3 p=abs(fract(c.xxx+K.xyz)*6.0-K.www);return c.z*mix(K.xxx,clamp(p-K.xxx,0.0,1.0),c.y);}vec3 packIntToColor(float number){float r=floor(number/(255.0*255.0))/255.0;float g=mod(floor(number/255.0),255.0)/255.0;float b=mod(number,255.0)/255.0;return vec3(r,g,b);}struct GeometryTypeEnum{int Quad;int Primitive;int TriangleMesh;int InstancedMesh;};const GeometryTypeEnum GeometryType=GeometryTypeEnum(1,2,3,4);const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;\n#include <packing>\nout vec4 outputColor;vec3 packNormalToRgb(const in vec3 normal){return normalize(normal)*0.5+0.5;}void updateFragmentColor(int renderMode,vec4 color,float treeIndex,vec3 normal,float depth,sampler2D matCapTexture,int geometryType){if(renderMode==RenderTypeColor||renderMode==RenderTypeEffects){\n#if defined(IS_TEXTURED)\nvec3 colorRGB=color.rgb;\n#else\nvec3 hsv=rgb2hsv(color.rgb);hsv.z=min(0.5*hsv.z+0.5,1.0);vec3 colorRGB=hsv2rgb(hsv);\n#endif\nfloat amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));vec4 albedo=vec4(colorRGB*(0.4+0.6*amplitude),1.0);vec2 cap=normal.xy*0.5+0.5;vec4 mc=vec4(texture(matCapTexture,cap).rgb,1.0);outputColor=vec4(albedo.rgb*mc.rgb*1.7,color.a);}else if(renderMode==RenderTypeGhost){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));float s=0.4+0.6*amplitude;outputColor=vec4(vec3(s),0.3);}else if(renderMode==RenderTypeDepthBufferOnly){outputColor=vec4(1.0,0.0,1.0,1.0);}else if(renderMode==RenderTypePackColorAndNormal){vec3 hsv=rgb2hsv(color.rgb);float a=0.0;if(hsv.y>0.01){if(hsv.z>0.5){a=(0.55+hsv.x*0.45);}else{a=(0.1+hsv.x*0.45);}}else{a=hsv.z*0.09;}outputColor=vec4(packNormalToRgb(normal.rgb),color.a);}else if(renderMode==RenderTypeNormal){outputColor=vec4(packNormalToRgb(normal),color.a);}else if(renderMode==RenderTypeTreeIndex){outputColor=vec4(packIntToColor(treeIndex),color.a);}else if(renderMode==RenderTypeDepth){outputColor=packDepthToRGBA(depth);}else if(renderMode==RenderTypeLOD){bool isHighDetail=geometryType!=GeometryType.Quad;vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb*1.5;outputColor=isHighDetail ? vec4(vec3(0.0,1.0,0.0)*mc,color.a): vec4(vec3(1.0,1.0,0.0)*mc,color.a);}else if(renderMode==RenderTypeGeometryType){vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;vec3 geometryColor=float(geometryType==1)*vec3(1.0,0.0,0.0)+float(geometryType==2)*vec3(0.0,1.0,0.0)+float(geometryType==3)*vec3(0.0,0.0,1.0)+float(geometryType==4)*vec3(1.0,1.0,0.0);outputColor=vec4(geometryColor*mc,color.a);}else{outputColor=vec4(1.0,0.0,1.0,1.0);}}float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}vec4 determineColor(vec3 originalColor,NodeAppearance nodeAppearance){vec4 overrideColor=nodeAppearance.colorTexel;if(any(greaterThan(overrideColor.rgb,vec3(0.0)))){return overrideColor;}return vec4(originalColor.rgb,overrideColor.a);}\n#if NUM_CLIPPING_PLANES > 0\nuniform vec4 clippingPlanes[NUM_CLIPPING_PLANES];\n#endif\nbool isClipped(vec3 point){\n#if NUM_CLIPPING_PLANES > 0\nvec3 pointFlipped=-point;vec4 plane;for(int i=0;i<UNION_CLIPPING_PLANES;i++){plane=clippingPlanes[i];if(dot(pointFlipped,plane.xyz)>plane.w)return true;}\n#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\nbool clipped=true;for(int i=UNION_CLIPPING_PLANES;i<NUM_CLIPPING_PLANES;i++){plane=clippingPlanes[i];clipped=(dot(pointFlipped,plane.xyz)>plane.w)&&clipped;}if(clipped)return true;\n#endif\n#endif\nreturn false;}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}\n#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\nuniform sampler2D colorDataTexture;uniform sampler2D matCapTexture;uniform vec2 treeIndexTextureSize;uniform mat4 projectionMatrix;uniform lowp int renderMode;float computeFragmentDepth(vec3 p,mat4 projectionMatrix){float projected_intersection_z=projectionMatrix[0][2]*p.x+projectionMatrix[1][2]*p.y+projectionMatrix[2][2]*p.z+projectionMatrix[3][2];float projected_intersection_w=projectionMatrix[0][3]*p.x+projectionMatrix[1][3]*p.y+projectionMatrix[2][3]*p.z+projectionMatrix[3][3];return((gl_DepthRange.diff*(projected_intersection_z/projected_intersection_w))+gl_DepthRange.near+gl_DepthRange.far)*.5;}float updateFragmentDepth(vec3 p,mat4 projectionMatrix){gl_FragDepth=computeFragmentDepth(p,projectionMatrix);return gl_FragDepth;}in highp vec2 v_treeIndexPacked;in vec3 v_color;in vec3 v_viewPos;in mat3 v_modelBasis;in vec3 v_centerB;in vec2 v_angles;in vec4 v_planeA;in vec4 v_planeB;in float v_radius;void main(){highp float v_treeIndex=unpackTreeIndex(v_treeIndexPacked);NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,v_treeIndex);vec4 color=determineColor(v_color,appearance);vec3 rayTarget=v_viewPos;vec3 rayDirection=normalize(rayTarget);float rayTargetDist=length(rayTarget);vec3 diff=rayTarget-v_centerB;vec3 E=diff*v_modelBasis;vec3 D=rayDirection*v_modelBasis;float a=dot(D.xy,D.xy);float b=dot(E.xy,D.xy);float c=dot(E.xy,E.xy)-v_radius*v_radius;float d=b*b-a*c;if(d<0.0)discard;float sqrtd=sqrt(d);float dist1=(-b-sqrtd)/a;float dist2=(-b+sqrtd)/a;float dist=min(dist1,dist2);vec3 intersectionPoint=E+dist*D;float theta=atan(intersectionPoint.y,intersectionPoint.x);theta+=theta<v_angles[0]? 2.0*PI : 0.0;theta+=theta<v_angles[0]? 2.0*PI : 0.0;vec3 p=rayTarget+dist*rayDirection;vec3 planeACenter=vec3(0.0,0.0,v_planeA.w);vec3 planeANormal=v_planeA.xyz;vec3 planeBCenter=vec3(0.0,0.0,v_planeB.w);vec3 planeBNormal=v_planeB.xyz;float normalFactor=1.0;if(dot(intersectionPoint-planeACenter,planeANormal)>0.0||dot(intersectionPoint-planeBCenter,planeBNormal)>0.0||theta>v_angles[1]+v_angles[0]||isClipped(p)||rayTargetDist+dist<0.0){dist=max(dist1,dist2);intersectionPoint=E+dist*D;theta=atan(intersectionPoint.y,intersectionPoint.x);theta+=theta<0.0 ? 2.0*PI : 0.0;theta+=theta<v_angles[0]? 2.0*PI : 0.0;p=rayTarget+dist*rayDirection;if(dot(intersectionPoint-planeACenter,planeANormal)>0.0||dot(intersectionPoint-planeBCenter,planeBNormal)>0.0||theta>v_angles[1]+v_angles[0]||isClipped(p)||rayTargetDist+dist<0.0){discard;}normalFactor=-1.0;}vec3 p_local=p-v_centerB;vec3 normal=normalize(p_local-v_modelBasis[2]*dot(p_local,v_modelBasis[2]))*normalFactor;float fragDepth=updateFragmentDepth(p,projectionMatrix);updateFragmentColor(renderMode,color,v_treeIndex,normal,fragDepth,matCapTexture,GeometryType.Primitive);}", vn = "vec3 mul3(mat4 M,vec3 v){vec4 u=M*vec4(v,1.0);return u.xyz/u.w;}bool isWithinSpan(vec3 point,vec3 span){return all(lessThan(abs(point),span));}vec3 transformQuadToCoverScreenInViewSpace(vec3 position,mat4 projectionMatrix,float near){float tanFov=1.0/projectionMatrix[1][1];float aspect=projectionMatrix[1][1]/projectionMatrix[0][0];float maxAspect=max(aspect,1.0/aspect);vec3 fullScreenQuadCorner=vec3(position.xy*maxAspect*tanFov*near,-near - 1e-6);return fullScreenQuadCorner;}mat4 determineMatrixOverride(float treeIndex,vec2 treeIndexTextureSize,sampler2D transformOverrideIndexTexture,vec2 transformOverrideTextureSize,sampler2D transformOverrideTexture){float dataTextureWidth=treeIndexTextureSize.x;float dataTextureHeight=treeIndexTextureSize.y;int xTreeIndexTextureCoord=int(mod(treeIndex,dataTextureWidth));int yTreeIndexTextureCoord=int(floor(treeIndex/dataTextureWidth));float index=texelFetch(transformOverrideIndexTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0).r;if(index==0.0){return mat4(1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0);}index-=1.0;float matrixElements[12];for(int i=0;i<12;i++){matrixElements[i]=texelFetch(transformOverrideTexture,ivec2(i+int(index)*16,0.0),0).r;}return mat4(matrixElements[0],matrixElements[4],matrixElements[8],0,matrixElements[1],matrixElements[5],matrixElements[9],0,matrixElements[2],matrixElements[6],matrixElements[10],0,matrixElements[3],matrixElements[7],matrixElements[11],1);}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}bool determineVisibility(NodeAppearance nodeAppearance,int renderMode){bool visible=nodeAppearance.isVisible;bool ghost=(renderMode==RenderTypeGhost)&&nodeAppearance.renderGhosted;bool inFront=(renderMode==RenderTypeEffects)&&nodeAppearance.renderInFront;bool back=(renderMode==RenderTypeColor)&&!nodeAppearance.renderGhosted&&!nodeAppearance.renderInFront;bool other=(renderMode!=RenderTypeColor&&renderMode!=RenderTypeEffects&&renderMode!=RenderTypeGhost)&&!nodeAppearance.renderGhosted;return visible&&(ghost||inFront||back||other);}uniform mat4 inverseModelMatrix;uniform mat4 modelViewMatrix;uniform mat4 projectionMatrix;uniform mat3 normalMatrix;uniform vec3 cameraPosition;uniform vec2 treeIndexTextureSize;uniform vec2 transformOverrideTextureSize;uniform sampler2D transformOverrideIndexTexture;uniform sampler2D transformOverrideTexture;uniform sampler2D colorDataTexture;uniform lowp int renderMode;in vec3 position;in vec3 normal;in float a_treeIndex;in vec3 a_centerA;in vec3 a_centerB;in float a_radius;in vec3 a_color;in vec4 a_planeA;in vec4 a_planeB;in vec3 a_localXAxis;in float a_angle;in float a_arcAngle;flat out float v_treeIndex;out vec3 v_centerB;out mat3 v_modelBasis;out vec3 v_viewPos;out vec4 v_planeA;out vec4 v_planeB;out vec2 v_angles;out vec3 v_color;out float v_radius;out highp vec2 v_treeIndexPacked;void main(){NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,a_treeIndex);if(!determineVisibility(appearance,renderMode)){gl_Position=vec4(2.0,2.0,2.0,1.0);return;}v_treeIndexPacked=packTreeIndex(a_treeIndex);mat4 treeIndexWorldTransform=determineMatrixOverride(a_treeIndex,treeIndexTextureSize,transformOverrideIndexTexture,transformOverrideTextureSize,transformOverrideTexture);mat4 modelToView=modelViewMatrix*treeIndexWorldTransform;vec3 centerA=mul3(treeIndexWorldTransform,a_centerA);vec3 centerB=mul3(treeIndexWorldTransform,a_centerB);vec3 center=0.5*(centerA+centerB);float halfHeight=0.5*length(centerA-centerB);vec3 dir=normalize(centerA-centerB);vec3 rayOrigin=(inverseModelMatrix*vec4(cameraPosition,1.0)).xyz;vec3 objectToCameraModelSpace=rayOrigin-center;vec3 lDir=faceforward(dir,-objectToCameraModelSpace,dir);vec3 left=normalize(cross(objectToCameraModelSpace,lDir));vec3 up=normalize(cross(left,lDir));mat3 billboardWorldRotation=mat3(lDir,left,up);vec3 cylinderAxisScales=vec3(halfHeight,a_radius,a_radius);mat3 inverseBillboardWorldRotation=transpose(billboardWorldRotation);vec3 cameraPosInCylinderSpace=inverseBillboardWorldRotation*(rayOrigin-center);mat3 billboardWorldScaleRotation=mat3(halfHeight*lDir,a_radius*left,a_radius*up);vec3 localBillboardPosition=center+billboardWorldScaleRotation*position;vec3 viewBillboardPosition=mul3(modelViewMatrix,localBillboardPosition);float near=min(1.0,projectionMatrix[3][2]/(projectionMatrix[2][2]-1.0));if(isWithinSpan(cameraPosInCylinderSpace,cylinderAxisScales+vec3(near))){viewBillboardPosition=transformQuadToCoverScreenInViewSpace(position,projectionMatrix,near);}gl_Position=projectionMatrix*vec4(viewBillboardPosition,1.0);v_treeIndex=a_treeIndex;v_angles[0]=a_angle;v_angles[1]=a_arcAngle;v_modelBasis[0]=normalize(normalMatrix*(treeIndexWorldTransform*vec4(a_localXAxis,0.0)).xyz);v_modelBasis[2]=normalize(normalMatrix*dir);v_modelBasis[1]=normalize(cross(v_modelBasis[2],v_modelBasis[0]));float radius=length((modelViewMatrix*vec4(a_localXAxis*a_radius,0.0)).xyz);v_centerB=mul3(modelViewMatrix,centerB);v_radius=radius;float planeAngleA=acos(dot(normalize(a_planeA.xyz),normalize(vec3(0.0,0.0,1.0))));float planeAngleB=acos(dot(normalize(a_planeB.xyz),normalize(vec3(0.0,0.0,-1.0))));vec4 planeA=a_planeA;planeA.w=length((modelViewMatrix*vec4(halfHeight*2.0*dir,0.0)).xyz)-tan(planeAngleA)*radius;vec4 planeB=a_planeB;planeB.w=tan(planeAngleB)*radius;v_planeA=planeA;v_planeB=planeB;v_viewPos=viewBillboardPosition;v_color=a_color;}", yn = "precision highp float;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};vec3 rgb2hsv(vec3 c){vec4 K=vec4(0.0,-1.0/3.0,2.0/3.0,-1.0);vec4 p=mix(vec4(c.bg,K.wz),vec4(c.gb,K.xy),step(c.b,c.g));vec4 q=mix(vec4(p.xyw,c.r),vec4(c.r,p.yzx),step(p.x,c.r));float d=q.x-min(q.w,q.y);float e=1.0e-10;return vec3(abs(q.z+(q.w-q.y)/(6.0*d+e)),d/(q.x+e),q.x);}vec3 hsv2rgb(vec3 c){vec4 K=vec4(1.0,2.0/3.0,1.0/3.0,3.0);vec3 p=abs(fract(c.xxx+K.xyz)*6.0-K.www);return c.z*mix(K.xxx,clamp(p-K.xxx,0.0,1.0),c.y);}vec3 packIntToColor(float number){float r=floor(number/(255.0*255.0))/255.0;float g=mod(floor(number/255.0),255.0)/255.0;float b=mod(number,255.0)/255.0;return vec3(r,g,b);}struct GeometryTypeEnum{int Quad;int Primitive;int TriangleMesh;int InstancedMesh;};const GeometryTypeEnum GeometryType=GeometryTypeEnum(1,2,3,4);const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;\n#include <packing>\nout vec4 outputColor;vec3 packNormalToRgb(const in vec3 normal){return normalize(normal)*0.5+0.5;}void updateFragmentColor(int renderMode,vec4 color,float treeIndex,vec3 normal,float depth,sampler2D matCapTexture,int geometryType){if(renderMode==RenderTypeColor||renderMode==RenderTypeEffects){\n#if defined(IS_TEXTURED)\nvec3 colorRGB=color.rgb;\n#else\nvec3 hsv=rgb2hsv(color.rgb);hsv.z=min(0.5*hsv.z+0.5,1.0);vec3 colorRGB=hsv2rgb(hsv);\n#endif\nfloat amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));vec4 albedo=vec4(colorRGB*(0.4+0.6*amplitude),1.0);vec2 cap=normal.xy*0.5+0.5;vec4 mc=vec4(texture(matCapTexture,cap).rgb,1.0);outputColor=vec4(albedo.rgb*mc.rgb*1.7,color.a);}else if(renderMode==RenderTypeGhost){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));float s=0.4+0.6*amplitude;outputColor=vec4(vec3(s),0.3);}else if(renderMode==RenderTypeDepthBufferOnly){outputColor=vec4(1.0,0.0,1.0,1.0);}else if(renderMode==RenderTypePackColorAndNormal){vec3 hsv=rgb2hsv(color.rgb);float a=0.0;if(hsv.y>0.01){if(hsv.z>0.5){a=(0.55+hsv.x*0.45);}else{a=(0.1+hsv.x*0.45);}}else{a=hsv.z*0.09;}outputColor=vec4(packNormalToRgb(normal.rgb),color.a);}else if(renderMode==RenderTypeNormal){outputColor=vec4(packNormalToRgb(normal),color.a);}else if(renderMode==RenderTypeTreeIndex){outputColor=vec4(packIntToColor(treeIndex),color.a);}else if(renderMode==RenderTypeDepth){outputColor=packDepthToRGBA(depth);}else if(renderMode==RenderTypeLOD){bool isHighDetail=geometryType!=GeometryType.Quad;vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb*1.5;outputColor=isHighDetail ? vec4(vec3(0.0,1.0,0.0)*mc,color.a): vec4(vec3(1.0,1.0,0.0)*mc,color.a);}else if(renderMode==RenderTypeGeometryType){vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;vec3 geometryColor=float(geometryType==1)*vec3(1.0,0.0,0.0)+float(geometryType==2)*vec3(0.0,1.0,0.0)+float(geometryType==3)*vec3(0.0,0.0,1.0)+float(geometryType==4)*vec3(1.0,1.0,0.0);outputColor=vec4(geometryColor*mc,color.a);}else{outputColor=vec4(1.0,0.0,1.0,1.0);}}float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}vec4 determineColor(vec3 originalColor,NodeAppearance nodeAppearance){vec4 overrideColor=nodeAppearance.colorTexel;if(any(greaterThan(overrideColor.rgb,vec3(0.0)))){return overrideColor;}return vec4(originalColor.rgb,overrideColor.a);}\n#if NUM_CLIPPING_PLANES > 0\nuniform vec4 clippingPlanes[NUM_CLIPPING_PLANES];\n#endif\nbool isClipped(vec3 point){\n#if NUM_CLIPPING_PLANES > 0\nvec3 pointFlipped=-point;vec4 plane;for(int i=0;i<UNION_CLIPPING_PLANES;i++){plane=clippingPlanes[i];if(dot(pointFlipped,plane.xyz)>plane.w)return true;}\n#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\nbool clipped=true;for(int i=UNION_CLIPPING_PLANES;i<NUM_CLIPPING_PLANES;i++){plane=clippingPlanes[i];clipped=(dot(pointFlipped,plane.xyz)>plane.w)&&clipped;}if(clipped)return true;\n#endif\n#endif\nreturn false;}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}\n#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\nuniform sampler2D colorDataTexture;uniform sampler2D matCapTexture;uniform vec2 treeIndexTextureSize;uniform lowp int renderMode;in float v_oneMinusThicknessSqr;in vec2 v_xy;in float v_angle;in float v_arcAngle;in vec3 v_color;in vec3 v_normal;in vec3 vViewPosition;in highp vec2 v_treeIndexPacked;void main(){highp float v_treeIndex=unpackTreeIndex(v_treeIndexPacked);NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,v_treeIndex);if(isClipped(vViewPosition)){discard;}vec4 color=determineColor(v_color,appearance);float dist=dot(v_xy,v_xy);float theta=atan(v_xy.y,v_xy.x);vec3 normal=normalize(v_normal);theta+=theta<v_angle ? 2.0*PI : 0.0;theta+=theta<v_angle ? 2.0*PI : 0.0;if(dist>0.25||dist<0.25*v_oneMinusThicknessSqr||theta>=v_angle+v_arcAngle){discard;}updateFragmentColor(renderMode,color,v_treeIndex,normal,gl_FragCoord.z,matCapTexture,GeometryType.Primitive);}", bn = "mat4 determineMatrixOverride(float treeIndex,vec2 treeIndexTextureSize,sampler2D transformOverrideIndexTexture,vec2 transformOverrideTextureSize,sampler2D transformOverrideTexture){float dataTextureWidth=treeIndexTextureSize.x;float dataTextureHeight=treeIndexTextureSize.y;int xTreeIndexTextureCoord=int(mod(treeIndex,dataTextureWidth));int yTreeIndexTextureCoord=int(floor(treeIndex/dataTextureWidth));float index=texelFetch(transformOverrideIndexTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0).r;if(index==0.0){return mat4(1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0);}index-=1.0;float matrixElements[12];for(int i=0;i<12;i++){matrixElements[i]=texelFetch(transformOverrideTexture,ivec2(i+int(index)*16,0.0),0).r;}return mat4(matrixElements[0],matrixElements[4],matrixElements[8],0,matrixElements[1],matrixElements[5],matrixElements[9],0,matrixElements[2],matrixElements[6],matrixElements[10],0,matrixElements[3],matrixElements[7],matrixElements[11],1);}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}bool determineVisibility(NodeAppearance nodeAppearance,int renderMode){bool visible=nodeAppearance.isVisible;bool ghost=(renderMode==RenderTypeGhost)&&nodeAppearance.renderGhosted;bool inFront=(renderMode==RenderTypeEffects)&&nodeAppearance.renderInFront;bool back=(renderMode==RenderTypeColor)&&!nodeAppearance.renderGhosted&&!nodeAppearance.renderInFront;bool other=(renderMode!=RenderTypeColor&&renderMode!=RenderTypeEffects&&renderMode!=RenderTypeGhost)&&!nodeAppearance.renderGhosted;return visible&&(ghost||inFront||back||other);}uniform mat4 modelViewMatrix;uniform mat4 projectionMatrix;uniform mat3 normalMatrix;uniform vec2 treeIndexTextureSize;uniform vec2 transformOverrideTextureSize;uniform sampler2D transformOverrideIndexTexture;uniform sampler2D transformOverrideTexture;uniform sampler2D colorDataTexture;uniform lowp int renderMode;in vec3 position;in mat4 a_instanceMatrix;in float a_treeIndex;in vec3 a_color;in float a_angle;in float a_arcAngle;in float a_thickness;in vec3 a_normal;out float v_oneMinusThicknessSqr;out vec2 v_xy;out float v_angle;out float v_arcAngle;out vec3 v_color;out vec3 v_normal;out vec3 vViewPosition;out highp vec2 v_treeIndexPacked;void main(){NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,a_treeIndex);if(!determineVisibility(appearance,renderMode)){gl_Position=vec4(2.0,2.0,2.0,1.0);return;}v_treeIndexPacked=packTreeIndex(a_treeIndex);v_oneMinusThicknessSqr=(1.0-a_thickness)*(1.0 - a_thickness);v_xy=vec2(position.x,position.y);v_angle=a_angle;v_arcAngle=a_arcAngle;mat4 treeIndexWorldTransform=determineMatrixOverride(a_treeIndex,treeIndexTextureSize,transformOverrideIndexTexture,transformOverrideTextureSize,transformOverrideTexture);vec3 transformed=(a_instanceMatrix*vec4(position,1.0)).xyz;vec4 mvPosition=modelViewMatrix*treeIndexWorldTransform*vec4(transformed,1.0);v_color=a_color;v_normal=normalMatrix*normalize(treeIndexWorldTransform*vec4(normalize(a_normal),0.0)).xyz;vViewPosition=mvPosition.xyz;gl_Position=projectionMatrix*mvPosition;}", xn = "precision highp float;vec3 rgb2hsv(vec3 c){vec4 K=vec4(0.0,-1.0/3.0,2.0/3.0,-1.0);vec4 p=mix(vec4(c.bg,K.wz),vec4(c.gb,K.xy),step(c.b,c.g));vec4 q=mix(vec4(p.xyw,c.r),vec4(c.r,p.yzx),step(p.x,c.r));float d=q.x-min(q.w,q.y);float e=1.0e-10;return vec3(abs(q.z+(q.w-q.y)/(6.0*d+e)),d/(q.x+e),q.x);}vec3 hsv2rgb(vec3 c){vec4 K=vec4(1.0,2.0/3.0,1.0/3.0,3.0);vec3 p=abs(fract(c.xxx+K.xyz)*6.0-K.www);return c.z*mix(K.xxx,clamp(p-K.xxx,0.0,1.0),c.y);}vec3 packIntToColor(float number){float r=floor(number/(255.0*255.0))/255.0;float g=mod(floor(number/255.0),255.0)/255.0;float b=mod(number,255.0)/255.0;return vec3(r,g,b);}struct GeometryTypeEnum{int Quad;int Primitive;int TriangleMesh;int InstancedMesh;};const GeometryTypeEnum GeometryType=GeometryTypeEnum(1,2,3,4);const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;\n#include <packing>\nout vec4 outputColor;vec3 packNormalToRgb(const in vec3 normal){return normalize(normal)*0.5+0.5;}void updateFragmentColor(int renderMode,vec4 color,float treeIndex,vec3 normal,float depth,sampler2D matCapTexture,int geometryType){if(renderMode==RenderTypeColor||renderMode==RenderTypeEffects){\n#if defined(IS_TEXTURED)\nvec3 colorRGB=color.rgb;\n#else\nvec3 hsv=rgb2hsv(color.rgb);hsv.z=min(0.5*hsv.z+0.5,1.0);vec3 colorRGB=hsv2rgb(hsv);\n#endif\nfloat amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));vec4 albedo=vec4(colorRGB*(0.4+0.6*amplitude),1.0);vec2 cap=normal.xy*0.5+0.5;vec4 mc=vec4(texture(matCapTexture,cap).rgb,1.0);outputColor=vec4(albedo.rgb*mc.rgb*1.7,color.a);}else if(renderMode==RenderTypeGhost){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));float s=0.4+0.6*amplitude;outputColor=vec4(vec3(s),0.3);}else if(renderMode==RenderTypeDepthBufferOnly){outputColor=vec4(1.0,0.0,1.0,1.0);}else if(renderMode==RenderTypePackColorAndNormal){vec3 hsv=rgb2hsv(color.rgb);float a=0.0;if(hsv.y>0.01){if(hsv.z>0.5){a=(0.55+hsv.x*0.45);}else{a=(0.1+hsv.x*0.45);}}else{a=hsv.z*0.09;}outputColor=vec4(packNormalToRgb(normal.rgb),color.a);}else if(renderMode==RenderTypeNormal){outputColor=vec4(packNormalToRgb(normal),color.a);}else if(renderMode==RenderTypeTreeIndex){outputColor=vec4(packIntToColor(treeIndex),color.a);}else if(renderMode==RenderTypeDepth){outputColor=packDepthToRGBA(depth);}else if(renderMode==RenderTypeLOD){bool isHighDetail=geometryType!=GeometryType.Quad;vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb*1.5;outputColor=isHighDetail ? vec4(vec3(0.0,1.0,0.0)*mc,color.a): vec4(vec3(1.0,1.0,0.0)*mc,color.a);}else if(renderMode==RenderTypeGeometryType){vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;vec3 geometryColor=float(geometryType==1)*vec3(1.0,0.0,0.0)+float(geometryType==2)*vec3(0.0,1.0,0.0)+float(geometryType==3)*vec3(0.0,0.0,1.0)+float(geometryType==4)*vec3(1.0,1.0,0.0);outputColor=vec4(geometryColor*mc,color.a);}else{outputColor=vec4(1.0,0.0,1.0,1.0);}}struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}vec4 determineColor(vec3 originalColor,NodeAppearance nodeAppearance){vec4 overrideColor=nodeAppearance.colorTexel;if(any(greaterThan(overrideColor.rgb,vec3(0.0)))){return overrideColor;}return vec4(originalColor.rgb,overrideColor.a);}\n#if NUM_CLIPPING_PLANES > 0\nuniform vec4 clippingPlanes[NUM_CLIPPING_PLANES];\n#endif\nbool isClipped(vec3 point){\n#if NUM_CLIPPING_PLANES > 0\nvec3 pointFlipped=-point;vec4 plane;for(int i=0;i<UNION_CLIPPING_PLANES;i++){plane=clippingPlanes[i];if(dot(pointFlipped,plane.xyz)>plane.w)return true;}\n#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\nbool clipped=true;for(int i=UNION_CLIPPING_PLANES;i<NUM_CLIPPING_PLANES;i++){plane=clippingPlanes[i];clipped=(dot(pointFlipped,plane.xyz)>plane.w)&&clipped;}if(clipped)return true;\n#endif\n#endif\nreturn false;}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}uniform sampler2D matCapTexture;uniform lowp int renderMode;in vec3 v_color;in vec3 v_normal;in vec3 vViewPosition;in vec4 v_nodeAppearanceTexel;in highp vec2 v_treeIndexPacked;void main(){highp float v_treeIndex=unpackTreeIndex(v_treeIndexPacked);NodeAppearance appearance=nodeAppearanceFromTexel(v_nodeAppearanceTexel);if(isClipped(vViewPosition)){discard;}vec4 color=determineColor(v_color,appearance);vec3 normal=normalize(v_normal);updateFragmentColor(renderMode,color,v_treeIndex,normal,gl_FragCoord.z,matCapTexture,GeometryType.Primitive);}", Sn = "mat4 determineMatrixOverride(float treeIndex,vec2 treeIndexTextureSize,sampler2D transformOverrideIndexTexture,vec2 transformOverrideTextureSize,sampler2D transformOverrideTexture){float dataTextureWidth=treeIndexTextureSize.x;float dataTextureHeight=treeIndexTextureSize.y;int xTreeIndexTextureCoord=int(mod(treeIndex,dataTextureWidth));int yTreeIndexTextureCoord=int(floor(treeIndex/dataTextureWidth));float index=texelFetch(transformOverrideIndexTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0).r;if(index==0.0){return mat4(1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0);}index-=1.0;float matrixElements[12];for(int i=0;i<12;i++){matrixElements[i]=texelFetch(transformOverrideTexture,ivec2(i+int(index)*16,0.0),0).r;}return mat4(matrixElements[0],matrixElements[4],matrixElements[8],0,matrixElements[1],matrixElements[5],matrixElements[9],0,matrixElements[2],matrixElements[6],matrixElements[10],0,matrixElements[3],matrixElements[7],matrixElements[11],1);}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}bool determineVisibility(NodeAppearance nodeAppearance,int renderMode){bool visible=nodeAppearance.isVisible;bool ghost=(renderMode==RenderTypeGhost)&&nodeAppearance.renderGhosted;bool inFront=(renderMode==RenderTypeEffects)&&nodeAppearance.renderInFront;bool back=(renderMode==RenderTypeColor)&&!nodeAppearance.renderGhosted&&!nodeAppearance.renderInFront;bool other=(renderMode!=RenderTypeColor&&renderMode!=RenderTypeEffects&&renderMode!=RenderTypeGhost)&&!nodeAppearance.renderGhosted;return visible&&(ghost||inFront||back||other);}uniform mat4 modelViewMatrix;uniform mat4 projectionMatrix;uniform mat3 normalMatrix;uniform vec2 treeIndexTextureSize;uniform vec2 transformOverrideTextureSize;uniform sampler2D transformOverrideIndexTexture;uniform sampler2D transformOverrideTexture;uniform sampler2D colorDataTexture;uniform lowp int renderMode;in vec3 position;in mat4 a_instanceMatrix;in float a_treeIndex;in vec3 a_color;in float a_arcAngle;in float a_radius;in float a_tubeRadius;out vec3 v_color;out vec3 v_normal;out vec3 vViewPosition;out vec4 v_nodeAppearanceTexel;out highp vec2 v_treeIndexPacked;void main(){NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,a_treeIndex);if(!determineVisibility(appearance,renderMode)){gl_Position=vec4(2.0,2.0,2.0,1.0);return;}v_nodeAppearanceTexel=appearance.colorTexel;v_treeIndexPacked=packTreeIndex(a_treeIndex);float theta=position.x*a_arcAngle;float phi=position.y;float cosTheta=cos(theta);float sinTheta=sin(theta);vec3 pos3=vec3(0);pos3.x=(a_radius+a_tubeRadius*cos(phi))*cosTheta;pos3.y=(a_radius+a_tubeRadius*cos(phi))*sinTheta;pos3.z=a_tubeRadius*sin(phi);mat4 treeIndexWorldTransform=determineMatrixOverride(a_treeIndex,treeIndexTextureSize,transformOverrideIndexTexture,transformOverrideTextureSize,transformOverrideTexture);vec3 transformed=(a_instanceMatrix*vec4(pos3,1.0)).xyz;vec3 center=(a_instanceMatrix*vec4(a_radius*cosTheta,a_radius*sinTheta,0.0,1.0)).xyz;vec3 objectNormal=normalize(transformed.xyz-center);v_color=a_color;v_normal=normalMatrix*normalize(treeIndexWorldTransform*vec4(objectNormal,0.0)).xyz;vec4 modelViewPosition=modelViewMatrix*treeIndexWorldTransform*vec4(transformed,1.0);vViewPosition=modelViewPosition.xyz;gl_Position=projectionMatrix*modelViewPosition;}", Cn = "precision highp float;vec3 rgb2hsv(vec3 c){vec4 K=vec4(0.0,-1.0/3.0,2.0/3.0,-1.0);vec4 p=mix(vec4(c.bg,K.wz),vec4(c.gb,K.xy),step(c.b,c.g));vec4 q=mix(vec4(p.xyw,c.r),vec4(c.r,p.yzx),step(p.x,c.r));float d=q.x-min(q.w,q.y);float e=1.0e-10;return vec3(abs(q.z+(q.w-q.y)/(6.0*d+e)),d/(q.x+e),q.x);}vec3 hsv2rgb(vec3 c){vec4 K=vec4(1.0,2.0/3.0,1.0/3.0,3.0);vec3 p=abs(fract(c.xxx+K.xyz)*6.0-K.www);return c.z*mix(K.xxx,clamp(p-K.xxx,0.0,1.0),c.y);}vec3 packIntToColor(float number){float r=floor(number/(255.0*255.0))/255.0;float g=mod(floor(number/255.0),255.0)/255.0;float b=mod(number,255.0)/255.0;return vec3(r,g,b);}struct GeometryTypeEnum{int Quad;int Primitive;int TriangleMesh;int InstancedMesh;};const GeometryTypeEnum GeometryType=GeometryTypeEnum(1,2,3,4);const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;\n#include <packing>\nout vec4 outputColor;vec3 packNormalToRgb(const in vec3 normal){return normalize(normal)*0.5+0.5;}void updateFragmentColor(int renderMode,vec4 color,float treeIndex,vec3 normal,float depth,sampler2D matCapTexture,int geometryType){if(renderMode==RenderTypeColor||renderMode==RenderTypeEffects){\n#if defined(IS_TEXTURED)\nvec3 colorRGB=color.rgb;\n#else\nvec3 hsv=rgb2hsv(color.rgb);hsv.z=min(0.5*hsv.z+0.5,1.0);vec3 colorRGB=hsv2rgb(hsv);\n#endif\nfloat amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));vec4 albedo=vec4(colorRGB*(0.4+0.6*amplitude),1.0);vec2 cap=normal.xy*0.5+0.5;vec4 mc=vec4(texture(matCapTexture,cap).rgb,1.0);outputColor=vec4(albedo.rgb*mc.rgb*1.7,color.a);}else if(renderMode==RenderTypeGhost){float amplitude=max(0.0,dot(normal,vec3(0.0,0.0,1.0)));float s=0.4+0.6*amplitude;outputColor=vec4(vec3(s),0.3);}else if(renderMode==RenderTypeDepthBufferOnly){outputColor=vec4(1.0,0.0,1.0,1.0);}else if(renderMode==RenderTypePackColorAndNormal){vec3 hsv=rgb2hsv(color.rgb);float a=0.0;if(hsv.y>0.01){if(hsv.z>0.5){a=(0.55+hsv.x*0.45);}else{a=(0.1+hsv.x*0.45);}}else{a=hsv.z*0.09;}outputColor=vec4(packNormalToRgb(normal.rgb),color.a);}else if(renderMode==RenderTypeNormal){outputColor=vec4(packNormalToRgb(normal),color.a);}else if(renderMode==RenderTypeTreeIndex){outputColor=vec4(packIntToColor(treeIndex),color.a);}else if(renderMode==RenderTypeDepth){outputColor=packDepthToRGBA(depth);}else if(renderMode==RenderTypeLOD){bool isHighDetail=geometryType!=GeometryType.Quad;vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb*1.5;outputColor=isHighDetail ? vec4(vec3(0.0,1.0,0.0)*mc,color.a): vec4(vec3(1.0,1.0,0.0)*mc,color.a);}else if(renderMode==RenderTypeGeometryType){vec2 cap=normal.xy*0.5+0.5;vec3 mc=texture(matCapTexture,cap).rgb;vec3 geometryColor=float(geometryType==1)*vec3(1.0,0.0,0.0)+float(geometryType==2)*vec3(0.0,1.0,0.0)+float(geometryType==3)*vec3(0.0,0.0,1.0)+float(geometryType==4)*vec3(1.0,1.0,0.0);outputColor=vec4(geometryColor*mc,color.a);}else{outputColor=vec4(1.0,0.0,1.0,1.0);}}struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}vec4 determineColor(vec3 originalColor,NodeAppearance nodeAppearance){vec4 overrideColor=nodeAppearance.colorTexel;if(any(greaterThan(overrideColor.rgb,vec3(0.0)))){return overrideColor;}return vec4(originalColor.rgb,overrideColor.a);}\n#if NUM_CLIPPING_PLANES > 0\nuniform vec4 clippingPlanes[NUM_CLIPPING_PLANES];\n#endif\nbool isClipped(vec3 point){\n#if NUM_CLIPPING_PLANES > 0\nvec3 pointFlipped=-point;vec4 plane;for(int i=0;i<UNION_CLIPPING_PLANES;i++){plane=clippingPlanes[i];if(dot(pointFlipped,plane.xyz)>plane.w)return true;}\n#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\nbool clipped=true;for(int i=UNION_CLIPPING_PLANES;i<NUM_CLIPPING_PLANES;i++){plane=clippingPlanes[i];clipped=(dot(pointFlipped,plane.xyz)>plane.w)&&clipped;}if(clipped)return true;\n#endif\n#endif\nreturn false;}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}uniform sampler2D matCapTexture;uniform lowp int renderMode;in vec3 v_color;in vec3 v_normal;in vec3 vViewPosition;in vec4 v_nodeAppearanceTexel;in highp vec2 v_treeIndexPacked;void main(){highp float v_treeIndex=unpackTreeIndex(v_treeIndexPacked);NodeAppearance appearance=nodeAppearanceFromTexel(v_nodeAppearanceTexel);if(isClipped(vViewPosition)){discard;}vec4 color=determineColor(v_color,appearance);vec3 normal=normalize(v_normal);updateFragmentColor(renderMode,color,v_treeIndex,normal,gl_FragCoord.z,matCapTexture,GeometryType.Primitive);}", wn = "mat4 determineMatrixOverride(float treeIndex,vec2 treeIndexTextureSize,sampler2D transformOverrideIndexTexture,vec2 transformOverrideTextureSize,sampler2D transformOverrideTexture){float dataTextureWidth=treeIndexTextureSize.x;float dataTextureHeight=treeIndexTextureSize.y;int xTreeIndexTextureCoord=int(mod(treeIndex,dataTextureWidth));int yTreeIndexTextureCoord=int(floor(treeIndex/dataTextureWidth));float index=texelFetch(transformOverrideIndexTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0).r;if(index==0.0){return mat4(1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,1.0);}index-=1.0;float matrixElements[12];for(int i=0;i<12;i++){matrixElements[i]=texelFetch(transformOverrideTexture,ivec2(i+int(index)*16,0.0),0).r;}return mat4(matrixElements[0],matrixElements[4],matrixElements[8],0,matrixElements[1],matrixElements[5],matrixElements[9],0,matrixElements[2],matrixElements[6],matrixElements[10],0,matrixElements[3],matrixElements[7],matrixElements[11],1);}struct UnusedTreeIndexPacked{highp float thousands;highp float subThousands;};highp vec2 packTreeIndex(float treeIndex){highp float roundedTreeIndex=round(treeIndex);highp float treeIndexThousands=floor(roundedTreeIndex/1000.0);highp float treeIndexSubThousands=mod(roundedTreeIndex,1000.0);return vec2(treeIndexThousands,treeIndexSubThousands);}highp float unpackTreeIndex(highp vec2 treeIndexPacked){highp float treeIndex=round(treeIndexPacked.x)*1000.0+round(treeIndexPacked.y);return treeIndex;}const int RenderTypeColor=1;const int RenderTypeNormal=2;const int RenderTypeTreeIndex=3;const int RenderTypePackColorAndNormal=4;const int RenderTypeDepth=5;const int RenderTypeEffects=6;const int RenderTypeGhost=7;const int RenderTypeLOD=8;const int RenderTypeDepthBufferOnly=9;const int RenderTypeGeometryType=10;struct NodeAppearance{vec4 colorTexel;bool isVisible;bool renderInFront;bool renderGhosted;};float floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}NodeAppearance nodeAppearanceFromTexel(vec4 nodeAppearanceTexel){float alphaUnwrapped=floor((nodeAppearanceTexel.a*255.0)+0.5);bool isVisible=floatBitsSubset(alphaUnwrapped,0,1)==1.0;bool renderInFront=floatBitsSubset(alphaUnwrapped,1,2)==1.0;bool renderGhosted=floatBitsSubset(alphaUnwrapped,2,3)==1.0;return NodeAppearance(nodeAppearanceTexel,isVisible,renderInFront,renderGhosted);}NodeAppearance determineNodeAppearance(sampler2D nodeAppearanceTexture,vec2 textureSize,highp float treeIndex){highp int dataTextureWidth=int(textureSize.x);highp int dataTextureHeight=int(textureSize.y);highp int iTreeIndex=int(treeIndex);highp int xTreeIndexTextureCoord=iTreeIndex % dataTextureWidth;highp int yTreeIndexTextureCoord=iTreeIndex/dataTextureWidth;vec4 texel=texelFetch(nodeAppearanceTexture,ivec2(xTreeIndexTextureCoord,yTreeIndexTextureCoord),0);return nodeAppearanceFromTexel(texel);}bool determineVisibility(NodeAppearance nodeAppearance,int renderMode){bool visible=nodeAppearance.isVisible;bool ghost=(renderMode==RenderTypeGhost)&&nodeAppearance.renderGhosted;bool inFront=(renderMode==RenderTypeEffects)&&nodeAppearance.renderInFront;bool back=(renderMode==RenderTypeColor)&&!nodeAppearance.renderGhosted&&!nodeAppearance.renderInFront;bool other=(renderMode!=RenderTypeColor&&renderMode!=RenderTypeEffects&&renderMode!=RenderTypeGhost)&&!nodeAppearance.renderGhosted;return visible&&(ghost||inFront||back||other);}uniform mat4 modelViewMatrix;uniform mat4 projectionMatrix;uniform mat3 normalMatrix;uniform vec2 treeIndexTextureSize;uniform vec2 transformOverrideTextureSize;uniform sampler2D transformOverrideIndexTexture;uniform sampler2D transformOverrideTexture;uniform sampler2D colorDataTexture;uniform lowp int renderMode;in vec3 position;in float a_treeIndex;in vec3 a_color;in vec3 a_vertex1;in vec3 a_vertex2;in vec3 a_vertex3;in vec3 a_vertex4;out vec3 v_color;out vec3 v_normal;out vec3 vViewPosition;out vec4 v_nodeAppearanceTexel;out highp vec2 v_treeIndexPacked;void main(){NodeAppearance appearance=determineNodeAppearance(colorDataTexture,treeIndexTextureSize,a_treeIndex);if(!determineVisibility(appearance,renderMode)){gl_Position=vec4(2.0,2.0,2.0,1.0);return;}v_nodeAppearanceTexel=appearance.colorTexel;v_treeIndexPacked=packTreeIndex(a_treeIndex);vec3 transformed;if(position.x<1.5){transformed=position.x==0.0 ? a_vertex1 : a_vertex2;}else{transformed=position.x==2.0 ? a_vertex3 : a_vertex4;}mat4 treeIndexWorldTransform=determineMatrixOverride(a_treeIndex,treeIndexTextureSize,transformOverrideIndexTexture,transformOverrideTextureSize,transformOverrideTexture);vec3 objectNormal=cross(a_vertex1-a_vertex2,a_vertex1 - a_vertex3);v_color=a_color;v_normal=normalMatrix*normalize(treeIndexWorldTransform*vec4(objectNormal,0.0)).xyz;vec4 mvPosition=modelViewMatrix*treeIndexWorldTransform*vec4(transformed,1.0);vViewPosition=mvPosition.xyz;gl_Position=projectionMatrix*mvPosition;}", Tn = "precision highp float;uniform sampler2D tDepth;uniform sampler2D tDiffuse;\n#if defined(use_edl)\n#define MAX_FLOAT 3.402823466e+38\n#define point_size_relative_to_screen_height (1.0 / 1080.0)\nvec2 calculateObscurance(float depth,float screenWidth,float screenHeight,vec2 neighbours[NEIGHBOUR_COUNT],float radius,vec2 vUv,sampler2D depthTexture,sampler2D logDepthTexture){vec2 uvRadius=radius/vec2(screenWidth/(screenHeight*point_size_relative_to_screen_height),1.0f/point_size_relative_to_screen_height);float sum=0.0;float minNeighbourDepth=MAX_FLOAT;vec2 minNeighbourUv=vec2(0.0,0.0);bool thisOutside=depth==0.0;for(int i=0;i<NEIGHBOUR_COUNT;i++){vec2 uvNeighbour=vUv+uvRadius*neighbours[i];float neighbourDepth=texture(logDepthTexture,uvNeighbour).a;bool isSmallestNeighbourDepth=neighbourDepth<minNeighbourDepth;minNeighbourDepth=isSmallestNeighbourDepth ? neighbourDepth : minNeighbourDepth;minNeighbourUv=isSmallestNeighbourDepth ? uvNeighbour : minNeighbourUv;bool otherOutside=neighbourDepth==0.0;sum+=otherOutside ? 0.0:(thisOutside ? 100.0 : max(0.0,depth-neighbourDepth));}return vec2(sum/float(NEIGHBOUR_COUNT),texture(depthTexture,minNeighbourUv).r);}uniform float screenWidth;uniform float screenHeight;uniform vec2 neighbours[NEIGHBOUR_COUNT];uniform float edlStrength;uniform float radius;\n#if defined(points_blend)\nuniform sampler2D tLogDepth;\n#endif\n#endif\n#define EDL_STRENGTH_FACTOR 400.0\nin vec2 vUv;out vec4 outputColor;void main(){float depth=texture(tDepth,vUv).r;vec4 color=texture(tDiffuse,vUv);bool shouldDiscard=depth>=1.0;\n#if defined(points_blend)\ncolor=color/color.w;\n#endif\noutputColor=vec4(color.rgb,1.0);gl_FragDepth=depth;\n#if defined(use_edl)\n#if defined (points_blend)\nfloat edlDepth=texture(tLogDepth,vUv).a;vec2 obs=calculateObscurance(edlDepth,screenWidth,screenHeight,neighbours,radius,vUv,tDepth,tLogDepth);\n#else\nfloat edlDepth=color.a;vec2 obs=calculateObscurance(edlDepth,screenWidth,screenHeight,neighbours,radius,vUv,tDepth,tDiffuse);\n#endif\nfloat shade=exp(-obs.x*EDL_STRENGTH_FACTOR*edlStrength);shouldDiscard=shouldDiscard&&obs.x==0.0;outputColor.xyz*=shade;gl_FragDepth=obs.y;\n#endif\nif(shouldDiscard){discard;}}", En = "uniform mat4 modelMatrix;uniform mat4 projectionMatrix;in vec3 position;in vec2 uv;out vec2 vUv;const mat4 unitOrthographicProjection=mat4(1.,0.,0.,0.,0.,1.,0.,0.,0.,0.,-1.,0.,0.,0.,0.,1.);void main(){vUv=uv;gl_Position=unitOrthographicProjection*modelMatrix*vec4(position,1.0);}", Dn = "precision highp float;precision highp int;uniform mat4 viewMatrix;uniform vec3 cameraPosition;uniform mat4 projectionMatrix;uniform float spacing;uniform float pcIndex;uniform float screenWidth;uniform float screenHeight;out vec4 outputColor;\n#ifdef highlight_point\nuniform vec4 highlightedPointColor;\n#endif\nin vec3 vColor;\n#if defined(weighted_splats)\nin float vLinearDepth;\n#endif\n#if defined(use_edl)\nin float vLogDepth;\n#endif\n#if defined(paraboloid_point_shape)\nin vec3 vViewPosition;\n#endif\n#if defined(weighted_splats) || defined(paraboloid_point_shape)\nin float vRadius;\n#endif\nfloat specularStrength=1.0;void main(){vec3 color=vColor;float depth=gl_FragCoord.z;\n#if defined(circle_point_shape) || defined(paraboloid_point_shape) || defined (weighted_splats)\nfloat u=2.0*gl_PointCoord.x-1.0;float v=2.0*gl_PointCoord.y-1.0;\n#endif\n#if defined(circle_point_shape) || defined(paraboloid_point_shape)\nfloat cc=u*u+v*v;if(cc>1.0){discard;}\n#endif\n#if defined color_type_point_index\noutputColor=vec4(color,pcIndex/255.0);\n#else\noutputColor=vec4(color,1.0);\n#endif\n#if defined paraboloid_point_shape\nfloat wi=0.0-(u*u+v*v);vec4 pos=vec4(vViewPosition,1.0);pos.z+=wi*vRadius;float linearDepth=-pos.z;pos=projectionMatrix*pos;pos=pos/pos.w;float expDepth=pos.z;depth=(pos.z+1.0)/2.0;gl_FragDepth=depth;\n#if defined(color_type_depth)\noutputColor.r=linearDepth;outputColor.g=expDepth;\n#endif\n#endif\n#if defined(use_edl)\noutputColor.a=vLogDepth;\n#endif\n#if defined weighted_splats\nfloat distance=2.0*length(gl_PointCoord.xy-0.5);float weight=max(0.0,1.0-distance);weight=pow(weight,1.5);outputColor.a=weight;outputColor.rgb=outputColor.rgb*weight;\n#endif\n}", On = "precision highp float;precision highp int;\n#define point_size_relative_to_screen_height (1.0 / 1080.0)\n#if NUM_CLIPPING_PLANES > 0\nuniform vec4 clippingPlanes[NUM_CLIPPING_PLANES];\n#endif\nbool isClipped(vec3 point){\n#if NUM_CLIPPING_PLANES > 0\nvec3 pointFlipped=-point;vec4 plane;for(int i=0;i<UNION_CLIPPING_PLANES;i++){plane=clippingPlanes[i];if(dot(pointFlipped,plane.xyz)>plane.w)return true;}\n#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\nbool clipped=true;for(int i=UNION_CLIPPING_PLANES;i<NUM_CLIPPING_PLANES;i++){plane=clippingPlanes[i];clipped=(dot(pointFlipped,plane.xyz)>plane.w)&&clipped;}if(clipped)return true;\n#endif\n#endif\nreturn false;}\n#define max_clip_boxes 30\nin vec3 position;in vec3 color;in float intensity;in float classification;in float objectId;in vec4 indices;uniform mat4 modelMatrix;uniform mat4 modelViewMatrix;uniform mat4 projectionMatrix;uniform mat4 viewMatrix;uniform float screenWidth;uniform float screenHeight;uniform float fov;uniform float spacing;uniform float heightMin;uniform float heightMax;uniform float size;uniform float minSize;uniform float maxSize;uniform float octreeSize;uniform float level;uniform float vnStart;uniform bool isLeafNode;uniform vec2 intensityRange;uniform float intensityGamma;uniform float intensityContrast;uniform float intensityBrightness;uniform float rgbGamma;uniform float rgbContrast;uniform float rgbBrightness;uniform sampler2D visibleNodes;uniform sampler2D gradient;uniform sampler2D classificationLUT;uniform sampler2D objectIdLUT;out vec3 vColor;\n#if defined(weighted_splats)\nout float vLinearDepth;\n#endif\n#if defined(use_edl)\nout float vLogDepth;\n#endif\n#if defined(weighted_splats) || defined(paraboloid_point_shape) || defined(hq_depth_pass)\nout float vRadius;out vec3 vViewPosition;\n#endif\n#if defined(adaptive_point_size) || defined(color_type_lod)\nint numberOfOnes(int number,int index){int numOnes=0;int tmp=128;for(int i=7;i>=0;i--){if(number>=tmp){number=number-tmp;if(i<=index){numOnes++;}}tmp=tmp/2;}return numOnes;}bool isBitSet(int number,int index){int powi=1;if(index==0){powi=1;}else if(index==1){powi=2;}else if(index==2){powi=4;}else if(index==3){powi=8;}else if(index==4){powi=16;}else if(index==5){powi=32;}else if(index==6){powi=64;}else if(index==7){powi=128;}int ndp=number/powi;return mod(float(ndp),2.0)!=0.0;}/***Gets the the LOD at the point position.*/float getLOD(){vec3 offset=vec3(0.0,0.0,0.0);int iOffset=int(vnStart);float depth=level;for(float i=0.0;i<=30.0;i++){float nodeSizeAtLevel=octreeSize/pow(2.0,i+level+0.0);vec3 index3d=(position-offset)/nodeSizeAtLevel;index3d=floor(index3d+0.5);int index=int(round(4.0*index3d.x+2.0*index3d.y+index3d.z));vec4 value=texture(visibleNodes,vec2(float(iOffset)/2048.0,0.0));int mask=int(round(value.r*255.0));if(isBitSet(mask,index)){int advanceG=int(round(value.g*255.0))*256;int advanceB=int(round(value.b*255.0));int advanceChild=numberOfOnes(mask,index-1);int advance=advanceG+advanceB+advanceChild;iOffset=iOffset+advance;depth++;}else{return value.a*255.0;}offset=offset+(vec3(1.0,1.0,1.0)*nodeSizeAtLevel*0.5)*index3d;}return depth;}float getPointSizeAttenuation(){return 0.5*pow(2.0,getLOD());}\n#endif\nfloat getContrastFactor(float contrast){return(1.0158730158730156*(contrast+1.0))/(1.0158730158730156-contrast);}vec3 getRGB(){return color;}float getIntensity(){float w=(intensity-intensityRange.x)/(intensityRange.y - intensityRange.x);w=pow(w,intensityGamma);w=w+intensityBrightness;w=(w-0.5)*getContrastFactor(intensityContrast)+0.5;w=clamp(w,0.0,1.0);return w;}vec3 getRgbWithIntensityFallback(){vec3 rgb=getRGB();float intensity=getIntensity();return rgb!=vec3(0.0)? rgb : vec3(intensity);}vec3 getElevation(){vec4 world=modelMatrix*vec4(position,1.0);float w=(world.y-heightMin)/(heightMax-heightMin);vec3 cElevation=texture(gradient,vec2(w,1.0-w)).rgb;return cElevation;}vec4 getClassification(){vec2 uv=vec2(classification/255.0,0.5);vec4 classColor=texture(classificationLUT,uv);return classColor;}void main(){vec4 mvPosition=modelViewMatrix*vec4(position,1.0);\n#if defined paraboloid_point_shape\nvViewPosition=mvPosition.xyz;\n#endif\nvec4 classification=getClassification();float outColorAlpha=classification.a;gl_Position=projectionMatrix*mvPosition;\n#if defined weighted_splats\nvLinearDepth=gl_Position.w;\n#endif\n#if defined(use_edl)\nvLogDepth=log2(-mvPosition.z)/10.0;\n#endif\nfloat pointSize=1.0;float slope=tan(fov/2.0);float projFactor=-0.5/(point_size_relative_to_screen_height*slope*mvPosition.z);float size=size*screenHeight*point_size_relative_to_screen_height;float minSize=minSize*screenHeight*point_size_relative_to_screen_height;float maxSize=maxSize*screenHeight*point_size_relative_to_screen_height;\n#if defined fixed_point_size\npointSize=size;\n#elif defined attenuated_point_size\npointSize=size*spacing*projFactor;\n#elif defined adaptive_point_size\nfloat worldSpaceSize=2.0*size*spacing/getPointSizeAttenuation();pointSize=worldSpaceSize*projFactor;\n#endif\npointSize=max(minSize,pointSize);pointSize=min(maxSize,pointSize);\n#if defined(weighted_splats) || defined(paraboloid_point_shape) || defined(hq_depth_pass)\nvRadius=pointSize/projFactor;\n#endif\ngl_PointSize=pointSize;\n#ifdef color_type_rgb\nvColor=getRGB();\n#elif defined color_type_height\nvec3 rgb=getRgbWithIntensityFallback();vColor=rgb==vec3(0.0,0.0,0.0)? getElevation(): mix(getElevation(),rgb,0.4);\n#elif defined color_type_depth\nfloat linearDepth=-mvPosition.z;float expDepth=(gl_Position.z/gl_Position.w)*0.5+0.5;vColor=vec3(linearDepth,expDepth,0.0);\n#elif defined color_type_intensity\nfloat w=getIntensity();vColor=vec3(w,w,w);\n#elif defined color_type_lod\nfloat w=getLOD()/10.0;vColor=texture(gradient,vec2(w,1.0-w)).rgb;\n#elif defined color_type_point_index\nvColor=indices.rgb;\n#elif defined color_type_classification\nvec3 rgb=getRgbWithIntensityFallback();vColor=rgb==vec3(0.0,0.0,0.0)? classification.rgb: mix(classification.rgb,rgb,0.4);\n#endif\nif(outColorAlpha==0.0){gl_Position=vec4(100.0,100.0,100.0,0.0);return;}\n#if defined hq_depth_pass\nfloat originalDepth=gl_Position.w;float adjustedDepth=originalDepth+2.0*vRadius;float adjust=adjustedDepth/originalDepth;mvPosition.xyz=mvPosition.xyz*adjust;gl_Position=projectionMatrix*mvPosition;\n#endif\nif(isClipped((modelViewMatrix*vec4(position,1.0)).xyz)){gl_Position=vec4(1000.0,1000.0,1000.0,1.0);}int lutX=int(objectId)% OBJECT_STYLING_TEXTURE_WIDTH;int lutY=int(objectId)/OBJECT_STYLING_TEXTURE_WIDTH;vec4 styleTexel=texelFetch(objectIdLUT,ivec2(lutX,lutY),0);vec3 styleColor=styleTexel.rgb;float alphaUnwrapped=floor((styleTexel.a*255.0)+0.5);if(mod(alphaUnwrapped,2.0)==0.0){gl_Position=vec4(100.0,100.0,100.0,0.0);return;}\n#if !defined(color_type_point_index)\nif(any(greaterThan(styleColor,vec3(0.0)))){vColor=(styleColor*0.8+vColor*0.2);}\n#endif\n}", kn = "precision highp float;float rand2d(in vec2 co){return fract(sin(dot(co.xy,vec2(12.9898,78.233)))*43758.5453);}uniform mat4 projMatrix;uniform mat4 inverseProjectionMatrix;uniform vec3 kernel[MAX_KERNEL_SIZE];uniform sampler2D tDepth;uniform float sampleRadius;uniform float bias;in vec2 vUv;out vec4 outputColor;vec3 viewPosFromDepth(float depth,vec2 uv){float z=depth*2.0-1.0;vec4 clipSpacePosition=vec4(uv*2.0-1.0,z,1.0);vec4 viewSpacePosition=inverseProjectionMatrix*clipSpacePosition;viewSpacePosition/=viewSpacePosition.w;return viewSpacePosition.xyz;}vec3 computeWorldNormalFromDepth(sampler2D depthTexture,vec2 resolution,vec2 uv,float sampleDepth){float dx=1.0/resolution.x;float dy=1.0/resolution.y;vec2 uv1=uv+vec2(dx,0.0);float d1=texture(depthTexture,uv1).r;vec2 uv2=uv+vec2(0.0,dy);float d2=texture(depthTexture,uv2).r;vec2 uv3=uv+vec2(-dx,0.0);float d3=texture(depthTexture,uv3).r;vec2 uv4=uv+vec2(0.0,-dy);float d4=texture(depthTexture,uv4).r;bool horizontalSampleCondition=abs(d1-sampleDepth)<abs(d3 - sampleDepth);float horizontalSampleDepth=horizontalSampleCondition ? d1 : d3;vec2 horizontalSampleUv=horizontalSampleCondition ? uv1 : uv3;bool verticalSampleCondition=abs(d2-sampleDepth)<abs(d4 - sampleDepth);float verticalSampleDepth=verticalSampleCondition ? d2 : d4;vec2 verticalSampleUv=verticalSampleCondition ? uv2 : uv4;vec3 viewPos=viewPosFromDepth(sampleDepth,vUv);vec3 viewPos1=(horizontalSampleCondition==verticalSampleCondition)? viewPosFromDepth(horizontalSampleDepth,horizontalSampleUv): viewPosFromDepth(verticalSampleDepth,verticalSampleUv);vec3 viewPos2=(horizontalSampleCondition==verticalSampleCondition)? viewPosFromDepth(verticalSampleDepth,verticalSampleUv): viewPosFromDepth(horizontalSampleDepth,horizontalSampleUv);return normalize(cross(viewPos1-viewPos,viewPos2 - viewPos));}float LARGE_DISTANCE_SAMPLE_FACTOR=0.05;void main(){float d=texture(tDepth,vUv).r;ivec2 textureSize=textureSize(tDepth,0);vec3 viewNormal=computeWorldNormalFromDepth(tDepth,vec2(float(textureSize.x),float(textureSize.y)),vUv,d);vec3 viewPosition=viewPosFromDepth(d,vUv);float distanceFactor=max(length(viewPosition)*LARGE_DISTANCE_SAMPLE_FACTOR,1.0);vec3 covector=normalize(vec3(rand2d(vUv),rand2d(vUv*3.0),rand2d(vUv*5.0)));vec3 tangent=normalize(covector-viewNormal*dot(covector,viewNormal));vec3 bitangent=cross(viewNormal,tangent);mat3 TBN=mat3(tangent,bitangent,viewNormal);float occlusion=0.0;for(int i=0;i<MAX_KERNEL_SIZE;i++){vec3 sampleVector=TBN*kernel[i];vec3 samplePosition=viewPosition+sampleVector*sampleRadius*distanceFactor;vec4 offset=projMatrix*vec4(samplePosition,1.0);offset.xyz/=offset.w;offset.xyz=offset.xyz*0.5+0.5;float realDepth=texture(tDepth,offset.xy).r;vec3 realPos=viewPosFromDepth(realDepth,offset.xy);float rangeCheck=smoothstep(0.0,1.0,sampleRadius/length(viewPosition-realPos));occlusion+=(realPos.z>=samplePosition.z+bias ? 1.0 : 0.0)*rangeCheck;}float occlusionFactor=1.0-clamp(occlusion/float(MAX_KERNEL_SIZE),0.0,1.0);outputColor=vec4(occlusionFactor);}", An = "uniform mat4 modelMatrix;uniform mat4 viewMatrix;uniform mat4 projectionMatrix;in vec3 position;in vec2 uv;out vec2 vUv;void main(){vUv=uv;gl_Position=projectionMatrix*viewMatrix*modelMatrix*vec4(position,1.0);}", jn = "precision highp float;uniform sampler2D tDiffuse;\n#if defined(DEPTH_WRITE)\nuniform sampler2D tDepth;\n#endif\n#if defined(SSAO_BLUR)\nuniform sampler2D tSsao;\n#endif\n#if defined(ALPHA)\nuniform float alpha;\n#endif\n#if defined(OUTLINE)\nuniform sampler2D tOutlineColors;\n#endif\nin vec2 vUv;in float near;in float far;out vec4 fragColor;\n#if defined(SSAO_BLUR)\nvec4 gaussianBlur(sampler2D tDiffuse,vec2 uv){ivec2 textureSize=textureSize(tDiffuse,0);vec2 resolution=vec2(float(textureSize.x),float(textureSize.y));return texture(tDiffuse,uv+vec2(-3.1111111,-3.1111111)/resolution)*0.0012360+texture(tDiffuse,uv+vec2(-1.3333333,-3.1111111)/resolution)*0.0115356+texture(tDiffuse,uv+vec2(-3.1111111,-1.3333333)/resolution)*0.0115356+texture(tDiffuse,uv+vec2(-1.3333333,-1.3333333)/resolution)*0.1076660+texture(tDiffuse,uv+vec2(0.0000000,-3.1111111)/resolution)*0.0096130+texture(tDiffuse,uv+vec2(0.0000000,-1.3333333)/resolution)*0.0897217+texture(tDiffuse,uv+vec2(1.3333333,-3.1111111)/resolution)*0.0115356+texture(tDiffuse,uv+vec2(3.1111111,-3.1111111)/resolution)*0.0012360+texture(tDiffuse,uv+vec2(1.3333333,-1.3333333)/resolution)*0.1076660+texture(tDiffuse,uv+vec2(3.1111111,-1.3333333)/resolution)*0.0115356+texture(tDiffuse,uv+vec2(-3.1111111,0.0000000)/resolution)*0.0096130+texture(tDiffuse,uv+vec2(-1.3333333,0.0000000)/resolution)*0.0897217+texture(tDiffuse,uv+vec2(-3.1111111,1.3333333)/resolution)*0.0115356+texture(tDiffuse,uv+vec2(-1.3333333,1.3333333)/resolution)*0.1076660+texture(tDiffuse,uv+vec2(-3.1111111,3.1111111)/resolution)*0.0012360+texture(tDiffuse,uv+vec2(-1.3333333,3.1111111)/resolution)*0.0115356+texture(tDiffuse,uv+vec2(0.0000000,1.3333333)/resolution)*0.0897217+texture(tDiffuse,uv+vec2(0.0000000,3.1111111)/resolution)*0.0096130+texture(tDiffuse,uv+vec2(1.3333333,1.3333333)/resolution)*0.1076660+texture(tDiffuse,uv+vec2(3.1111111,1.3333333)/resolution)*0.0115356+texture(tDiffuse,uv+vec2(1.3333333,3.1111111)/resolution)*0.0115356+texture(tDiffuse,uv+vec2(3.1111111,3.1111111)/resolution)*0.0012360+texture(tDiffuse,uv+vec2(1.3333333,0.0000000)/resolution)*0.0897217+texture(tDiffuse,uv+vec2(3.1111111,0.0000000)/resolution)*0.0096130+texture(tDiffuse,uv)*0.0747681;}\n#endif\n#if defined(FXAA)\n#ifndef FXAA_REDUCE_MIN\n#define FXAA_REDUCE_MIN (1.0/ 128.0)\n#endif\n#ifndef FXAA_REDUCE_MUL\n#define FXAA_REDUCE_MUL (1.0 / 8.0)\n#endif\n#ifndef FXAA_SPAN_MAX\n#define FXAA_SPAN_MAX 8.0\n#endif\nvec4 fxaa(sampler2D tex){vec4 color;vec2 fragCoord=gl_FragCoord.xy;ivec2 textureSize=textureSize(tDiffuse,0);vec2 resolution=vec2(float(textureSize.x),float(textureSize.y));vec2 inverseResolution=vec2(1.0/resolution.x,1.0/resolution.y);vec2 v_rgbNW=(fragCoord+vec2(-1.0,-1.0))*inverseResolution;vec2 v_rgbNE=(fragCoord+vec2(1.0,-1.0))*inverseResolution;vec2 v_rgbSW=(fragCoord+vec2(-1.0,1.0))*inverseResolution;vec2 v_rgbSE=(fragCoord+vec2(1.0,1.0))*inverseResolution;vec2 v_rgbM=vec2(fragCoord*inverseResolution);vec3 rgbNW=texture(tex,v_rgbNW).xyz;vec3 rgbNE=texture(tex,v_rgbNE).xyz;vec3 rgbSW=texture(tex,v_rgbSW).xyz;vec3 rgbSE=texture(tex,v_rgbSE).xyz;vec4 texColor=texture(tex,v_rgbM);vec3 rgbM=texColor.xyz;vec3 luma=vec3(0.299,0.587,0.114);float lumaNW=dot(rgbNW,luma);float lumaNE=dot(rgbNE,luma);float lumaSW=dot(rgbSW,luma);float lumaSE=dot(rgbSE,luma);float lumaM=dot(rgbM,luma);float lumaMin=min(lumaM,min(min(lumaNW,lumaNE),min(lumaSW,lumaSE)));float lumaMax=max(lumaM,max(max(lumaNW,lumaNE),max(lumaSW,lumaSE)));mediump vec2 dir;dir.x=-((lumaNW+lumaNE)-(lumaSW+lumaSE));dir.y=((lumaNW+lumaSW)-(lumaNE+lumaSE));float dirReduce=max((lumaNW+lumaNE+lumaSW+lumaSE)*(0.25*FXAA_REDUCE_MUL),FXAA_REDUCE_MIN);float rcpDirMin=1.0/(min(abs(dir.x),abs(dir.y))+dirReduce);dir=min(vec2(FXAA_SPAN_MAX,FXAA_SPAN_MAX),max(vec2(-FXAA_SPAN_MAX,-FXAA_SPAN_MAX),dir*rcpDirMin));vec4 rgbA=0.5*(texture(tex,inverseResolution*(fragCoord+dir*(1.0/3.0-0.5)))+texture(tex,inverseResolution*(fragCoord+dir*(2.0/3.0-0.5))));vec4 rgbB=rgbA*0.5+0.25*(texture(tex,inverseResolution*(fragCoord+dir*-0.5))+texture(tex,inverseResolution*(fragCoord+dir*0.5)));float lumaB=dot(rgbB.rgb,luma);if((lumaB<lumaMin)||(lumaB>lumaMax)){color=rgbA;}else{color=rgbB;}return color;}\n#endif\n#if defined(EDGES)\nmat3 G[9];const mat3 g0=mat3(0.3535533845424652,0,-0.3535533845424652,0.5,0,-0.5,0.3535533845424652,0,-0.3535533845424652);const mat3 g1=mat3(0.3535533845424652,0.5,0.3535533845424652,0,0,0,-0.3535533845424652,-0.5,-0.3535533845424652);const mat3 g2=mat3(0,0.3535533845424652,-0.5,-0.3535533845424652,0,0.3535533845424652,0.5,-0.3535533845424652,0);const mat3 g3=mat3(0.5,-0.3535533845424652,0,-0.3535533845424652,0,0.3535533845424652,0,0.3535533845424652,-0.5);const mat3 g4=mat3(0,-0.5,0,0.5,0,0.5,0,-0.5,0);const mat3 g5=mat3(-0.5,0,0.5,0,0,0,0.5,0,-0.5);const mat3 g6=mat3(0.1666666716337204,-0.3333333432674408,0.1666666716337204,-0.3333333432674408,0.6666666865348816,-0.3333333432674408,0.1666666716337204,-0.3333333432674408,0.1666666716337204);const mat3 g7=mat3(-0.3333333432674408,0.1666666716337204,-0.3333333432674408,0.1666666716337204,0.6666666865348816,0.1666666716337204,-0.3333333432674408,0.1666666716337204,-0.3333333432674408);const mat3 g8=mat3(0.3333333432674408,0.3333333432674408,0.3333333432674408,0.3333333432674408,0.3333333432674408,0.3333333432674408,0.3333333432674408,0.3333333432674408,0.3333333432674408);float edgeDetectionFilter(sampler2D baseTexture){ivec2 fragCoord=ivec2(gl_FragCoord.xy);G[0]=g0,G[1]=g1,G[2]=g2,G[3]=g3,G[4]=g4,G[5]=g5,G[6]=g6,G[7]=g7,G[8]=g8;mat3 I;I[0][0]=length(texelFetch(baseTexture,fragCoord+ivec2(-1,-1),0).rgb);I[0][1]=length(texelFetch(baseTexture,fragCoord+ivec2(-1,0),0).rgb);I[0][2]=length(texelFetch(baseTexture,fragCoord+ivec2(-1,1),0).rgb);I[1][0]=length(texelFetch(baseTexture,fragCoord+ivec2(0,-1),0).rgb);I[1][1]=length(texelFetch(baseTexture,fragCoord+ivec2(0,0),0).rgb);I[1][2]=length(texelFetch(baseTexture,fragCoord+ivec2(0,1),0).rgb);I[2][0]=length(texelFetch(baseTexture,fragCoord+ivec2(1,-1),0).rgb);I[2][1]=length(texelFetch(baseTexture,fragCoord+ivec2(1,0),0).rgb);I[2][2]=length(texelFetch(baseTexture,fragCoord+ivec2(1,1),0).rgb);float dp0=dot(G[0][0],I[0])+dot(G[0][1],I[1])+dot(G[0][2],I[2]);float cnv0=dp0*dp0;float dp1=dot(G[1][0],I[0])+dot(G[1][1],I[1])+dot(G[1][2],I[2]);float cnv1=dp1*dp1;float dp2=dot(G[2][0],I[0])+dot(G[2][1],I[1])+dot(G[2][2],I[2]);float cnv2=dp2*dp2;float dp3=dot(G[3][0],I[0])+dot(G[3][1],I[1])+dot(G[3][2],I[2]);float cnv3=dp3*dp3;float dp4=dot(G[4][0],I[0])+dot(G[4][1],I[1])+dot(G[4][2],I[2]);float cnv4=dp4*dp4;float dp5=dot(G[5][0],I[0])+dot(G[5][1],I[1])+dot(G[5][2],I[2]);float cnv5=dp5*dp5;float dp6=dot(G[6][0],I[0])+dot(G[6][1],I[1])+dot(G[6][2],I[2]);float cnv6=dp6*dp6;float dp7=dot(G[7][0],I[0])+dot(G[7][1],I[1])+dot(G[7][2],I[2]);float cnv7=dp7*dp7;float dp8=dot(G[8][0],I[0])+dot(G[8][1],I[1])+dot(G[8][2],I[2]);float cnv8=dp8*dp8;float M=(cnv0+cnv1)+(cnv2+cnv3);float S=(cnv4+cnv5)+(cnv6+cnv7)+(cnv8+M);return sqrt(M/S);}\n#endif\n#if defined(OUTLINE)\nfloat floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}const int texelOffset=2;int computeFloatEncodedOutlineIndex(float bitEncodedFloat){return int(floatBitsSubset(floor((bitEncodedFloat*255.0)+0.5),5,8));}ivec4 computeNeighborOutlineIndices(sampler2D tDiffuse,ivec2 fragCoord){int outlineN=computeFloatEncodedOutlineIndex(texelFetchOffset(tDiffuse,fragCoord,0,ivec2(0,texelOffset)).a);int outlineS=computeFloatEncodedOutlineIndex(texelFetchOffset(tDiffuse,fragCoord,0,ivec2(texelOffset,0)).a);int outlineE=computeFloatEncodedOutlineIndex(texelFetchOffset(tDiffuse,fragCoord,0,ivec2(0,-texelOffset)).a);int outlineW=computeFloatEncodedOutlineIndex(texelFetchOffset(tDiffuse,fragCoord,0,ivec2(-texelOffset,0)).a);return ivec4(outlineN,outlineS,outlineE,outlineW);}int fetchOutlineIndex(sampler2D tDiffuse){ivec2 fragCoord=ivec2(gl_FragCoord.xy);int outlineIndex=computeFloatEncodedOutlineIndex(texelFetch(tDiffuse,fragCoord,0).a);ivec4 neighbours=computeNeighborOutlineIndices(tDiffuse,fragCoord);bvec4 isEqualToPixel=equal(neighbours,ivec4(outlineIndex));bvec4 isMiss=equal(neighbours,ivec4(0));bvec4 isEqualOrMiss=bvec4(isEqualToPixel.x||isMiss.x,isEqualToPixel.y||isMiss.y,isEqualToPixel.z||isMiss.z,isEqualToPixel.w||isMiss.w);bool hasOutline=outlineIndex>0&&!(all(isEqualToPixel))&&all(isEqualOrMiss);return hasOutline ? outlineIndex : 0;}\n#endif\n#if defined(EDGES) && defined(DEPTH_WRITE)\nfloat toViewZ(float depth,float near,float far){return near*far/(far-depth*(far - near));}\n#endif\nvoid main(){vec4 diffuse=texture(tDiffuse,vUv);if(diffuse.a==0.0){discard;}\n#if defined(FXAA)\nfragColor=fxaa(tDiffuse);\n#else\nfragColor=diffuse;\n#if defined(SSAO_BLUR)\nfragColor*=gaussianBlur(tSsao,vUv);\n#endif\n#if defined(EDGES)\nfloat edgeStrength=edgeDetectionFilter(tDiffuse);edgeStrength=(1.0-pow(1.0 - edgeStrength,2.0));\n#if defined(DEPTH_WRITE)\nfloat depthEdge=toViewZ(texture(tDepth,vUv).r,near,far);edgeStrength*=(1.0-smoothstep(10.0,40.0,depthEdge));\n#endif\nfragColor.rgb*=isnan(edgeStrength)? 1.0 :(1.0-edgeStrength);\n#endif\n#if defined(OUTLINE)\nint outline=fetchOutlineIndex(tDiffuse);fragColor.rgb=outline>0 ? texelFetch(tOutlineColors,ivec2(outline,0),0).rgb : fragColor.rgb;\n#endif\n#endif\n#if defined(ALPHA)\nfragColor.a=alpha;\n#endif\n#if defined(DEPTH_WRITE)\ngl_FragDepth=texture(tDepth,vUv).r;\n#endif\n}", Mn = "uniform mat4 modelMatrix;uniform mat4 projectionMatrix;in vec3 position;in vec2 uv;out float near;out float far;out vec2 vUv;const mat4 unitOrthographicProjection=mat4(1.,0.,0.,0.,0.,1.,0.,0.,0.,0.,-1.,0.,0.,0.,0.,1.);void main(){vUv=uv;near=projectionMatrix[3][2]/(projectionMatrix[2][2]-1.0);far=projectionMatrix[3][2]/(projectionMatrix[2][2]+1.0);gl_Position=unitOrthographicProjection*modelMatrix*vec4(position,1.0);}", Nn = "precision highp float;uniform sampler2D tDiffuse;uniform sampler2D tDepth;uniform sampler2D tBlendDiffuse;uniform sampler2D tBlendDepth;uniform float blendFactor;\n#if defined(ALPHA)\nuniform float alpha;\n#endif\n#if defined(OUTLINE)\nuniform sampler2D tOutlineColors;\n#endif\nin vec2 vUv;out vec4 fragColor;\n#if defined(OUTLINE)\nfloat floatBitsSubset(float inNumber,int fromLeastSignificantBitIndex,int toMostSignificantBitIndex){float r=float(fromLeastSignificantBitIndex);float l=float(toMostSignificantBitIndex);float bitShift=pow(2.0,r);return mod(((inNumber-mod(inNumber,bitShift))/bitShift),pow(2.0,l - r));}const int texelOffset=2;int computeFloatEncodedOutlineIndex(float bitEncodedFloat){return int(floatBitsSubset(floor((bitEncodedFloat*255.0)+0.5),5,8));}ivec4 computeNeighborOutlineIndices(sampler2D tDiffuse,ivec2 fragCoord){int outlineN=computeFloatEncodedOutlineIndex(texelFetchOffset(tDiffuse,fragCoord,0,ivec2(0,texelOffset)).a);int outlineS=computeFloatEncodedOutlineIndex(texelFetchOffset(tDiffuse,fragCoord,0,ivec2(texelOffset,0)).a);int outlineE=computeFloatEncodedOutlineIndex(texelFetchOffset(tDiffuse,fragCoord,0,ivec2(0,-texelOffset)).a);int outlineW=computeFloatEncodedOutlineIndex(texelFetchOffset(tDiffuse,fragCoord,0,ivec2(-texelOffset,0)).a);return ivec4(outlineN,outlineS,outlineE,outlineW);}int fetchOutlineIndex(sampler2D tDiffuse){ivec2 fragCoord=ivec2(gl_FragCoord.xy);int outlineIndex=computeFloatEncodedOutlineIndex(texelFetch(tDiffuse,fragCoord,0).a);ivec4 neighbours=computeNeighborOutlineIndices(tDiffuse,fragCoord);bvec4 isEqualToPixel=equal(neighbours,ivec4(outlineIndex));bvec4 isMiss=equal(neighbours,ivec4(0));bvec4 isEqualOrMiss=bvec4(isEqualToPixel.x||isMiss.x,isEqualToPixel.y||isMiss.y,isEqualToPixel.z||isMiss.z,isEqualToPixel.w||isMiss.w);bool hasOutline=outlineIndex>0&&!(all(isEqualToPixel))&&all(isEqualOrMiss);return hasOutline ? outlineIndex : 0;}\n#endif\nvoid main(){vec4 diffuse=texture(tDiffuse,vUv);if(diffuse.a==0.0){discard;}float depth=texture(tDepth,vUv).r;vec4 blendDiffuse=texture(tBlendDiffuse,vUv);float blendDepth=texture(tBlendDepth,vUv).r;fragColor=mix(diffuse,blendDiffuse,blendFactor*step(0.0,depth-blendDepth));\n#if defined(OUTLINE)\nint outline=fetchOutlineIndex(tDiffuse);fragColor.rgb=outline>0 ? texelFetch(tOutlineColors,ivec2(outline,0),0).rgb : fragColor.rgb;\n#endif\n#if defined(ALPHA)\nfragColor.a=alpha;\n#endif\ngl_FragDepth=min(depth,blendDepth);}", V = {
|
|
144
144
|
detailedMesh: {
|
|
145
145
|
fragment: an,
|
|
@@ -697,8 +697,10 @@ var sr = class e {
|
|
|
697
697
|
}
|
|
698
698
|
balance() {
|
|
699
699
|
let t = this.left.maxSubtreeDepth, n = this.right.maxSubtreeDepth;
|
|
700
|
-
if (n + 2 <= t)
|
|
701
|
-
|
|
700
|
+
if (n + 2 <= t) {
|
|
701
|
+
let t = this.left.rotateSmallerRight();
|
|
702
|
+
return new e(t, this.right).rotateRight().balance();
|
|
703
|
+
} else if (t + 2 <= n) {
|
|
702
704
|
let t = this.right.rotateSmallerLeft();
|
|
703
705
|
return new e(this.left, t).rotateLeft().balance();
|
|
704
706
|
}
|
|
@@ -1707,7 +1709,7 @@ var Vr = class {
|
|
|
1707
1709
|
};
|
|
1708
1710
|
function Hr(e, t) {
|
|
1709
1711
|
let n = Br(e.headers.get(Rr));
|
|
1710
|
-
return n === void 0
|
|
1712
|
+
return n === void 0 || Date.now() - n > t;
|
|
1711
1713
|
}
|
|
1712
1714
|
function Ur(e) {
|
|
1713
1715
|
if (e instanceof DOMException && e.name === "QuotaExceededError") return !0;
|
|
@@ -2514,13 +2516,16 @@ function Bi(e) {
|
|
|
2514
2516
|
}
|
|
2515
2517
|
var Vi = class e {
|
|
2516
2518
|
constructor(t, n, r, i) {
|
|
2517
|
-
this.items = i.items, this.nextCursor = i.nextCursor, this.nextCursor !== void 0 && (this.next = async () =>
|
|
2518
|
-
|
|
2519
|
-
|
|
2520
|
-
|
|
2521
|
-
|
|
2522
|
-
|
|
2523
|
-
|
|
2519
|
+
this.items = i.items, this.nextCursor = i.nextCursor, this.nextCursor !== void 0 && (this.next = async () => {
|
|
2520
|
+
let i = await Ui(t, n, {
|
|
2521
|
+
...r,
|
|
2522
|
+
data: {
|
|
2523
|
+
...r.data,
|
|
2524
|
+
cursor: this.nextCursor
|
|
2525
|
+
}
|
|
2526
|
+
});
|
|
2527
|
+
return new e(t, n, r, i);
|
|
2528
|
+
});
|
|
2524
2529
|
}
|
|
2525
2530
|
};
|
|
2526
2531
|
async function Hi(e, t, n) {
|
|
@@ -2973,7 +2978,7 @@ function ha(e) {
|
|
|
2973
2978
|
0,
|
|
2974
2979
|
0,
|
|
2975
2980
|
0
|
|
2976
|
-
] : t, o = e.visible === void 0
|
|
2981
|
+
] : t, o = e.visible === void 0 || !!e.visible, s = !!e.renderInFront, c = !!e.renderGhosted, l = e.outlineColor ? Number(e.outlineColor) : 0;
|
|
2977
2982
|
return [
|
|
2978
2983
|
r,
|
|
2979
2984
|
i,
|
|
@@ -3941,7 +3946,7 @@ var Oo = class {
|
|
|
3941
3946
|
logDepthTexture: t.pointCloudLogDepth.texture,
|
|
3942
3947
|
texture: t.pointCloud.texture,
|
|
3943
3948
|
depthTexture: t.pointCloud.depthTexture,
|
|
3944
|
-
pointBlending: (n = t == null ? void 0 : t.pointBlending)
|
|
3949
|
+
pointBlending: (n = t == null ? void 0 : t.pointBlending) != null && n,
|
|
3945
3950
|
edlOptions: t.edlOptions
|
|
3946
3951
|
});
|
|
3947
3952
|
this._pointcloudBlitMaterial = i;
|
|
@@ -4108,11 +4113,11 @@ var Fo = class {
|
|
|
4108
4113
|
let { ssaoRenderParameters: r } = e, i = r == null ? to.ssaoRenderParameters : r;
|
|
4109
4114
|
this._ssaoSampleSize = i.sampleSize, this._ssaoPass.ssaoParameters = i;
|
|
4110
4115
|
let a = $a[(t = e.antiAliasing) == null ? $a.NoAA : t] === $a[$a.FXAA];
|
|
4111
|
-
a !== ((n = this._blitToScreenMaterial.defines.FXAA)
|
|
4116
|
+
a !== ((n = this._blitToScreenMaterial.defines.FXAA) != null && n) && (a ? this._blitToScreenMaterial.defines.FXAA = !0 : delete this._blitToScreenMaterial.defines.FXAA, this._blitToScreenMaterial.needsUpdate = !0);
|
|
4112
4117
|
}
|
|
4113
4118
|
constructor(e, t, n, r, i) {
|
|
4114
4119
|
var a, o, s, c, l;
|
|
4115
|
-
this._materialManager = e, this._viewerScene = n.scene, this._autoResizeOutputTarget = (a = i == null ? void 0 : i.autoSize) == null
|
|
4120
|
+
this._materialManager = e, this._viewerScene = n.scene, this._autoResizeOutputTarget = (a = i == null ? void 0 : i.autoSize) == null || a, this._outputRenderTarget = (o = i == null ? void 0 : i.target) == null ? null : o, this._renderTargetData = {
|
|
4116
4121
|
currentRenderSize: new I(1, 1),
|
|
4117
4122
|
ssaoRenderTarget: fo(),
|
|
4118
4123
|
postProcessingRenderTarget: fo()
|
|
@@ -7648,7 +7653,8 @@ var Ls = class {
|
|
|
7648
7653
|
throw Error(`Unexpected response ${i.status} (payload: '${i.data})`);
|
|
7649
7654
|
}
|
|
7650
7655
|
getModelUriForSignedFiles() {
|
|
7651
|
-
|
|
7656
|
+
let e = this.getRequestPathForSignedFiles();
|
|
7657
|
+
return `${this._client.getBaseUrl()}${e}`;
|
|
7652
7658
|
}
|
|
7653
7659
|
getRequestPath(e) {
|
|
7654
7660
|
return `/api/v1/projects/${this._client.project}/3d/files/${e}`;
|
|
@@ -8606,7 +8612,7 @@ var xc = class {
|
|
|
8606
8612
|
}
|
|
8607
8613
|
getVisible() {
|
|
8608
8614
|
var e, t;
|
|
8609
|
-
return (e = (t = this._appearance.visible) == null ? this._defaultAppearance.visible : t) == null
|
|
8615
|
+
return (e = (t = this._appearance.visible) == null ? this._defaultAppearance.visible : t) == null || e;
|
|
8610
8616
|
}
|
|
8611
8617
|
setVisible(e) {
|
|
8612
8618
|
this._appearance.visible = e, this.updateMaterials();
|
|
@@ -9351,7 +9357,7 @@ function zc(e) {
|
|
|
9351
9357
|
var Bc = class {
|
|
9352
9358
|
constructor(e = {}) {
|
|
9353
9359
|
var t, n, r, i, a;
|
|
9354
|
-
this._elementPool = [], this._activeElements = /* @__PURE__ */ new Map(), this._baseSize = 4e3, this._minSize = 48, this._maxSize = 120, this._pendingReleaseTimeouts = /* @__PURE__ */ new Set(), this._hoveredClusterIcon = void 0, this._isVisible = !0, this._isAttached = !1, this._domElement = void 0, this._stagedScreenInfos = [], this._stagedCanvas = void 0, this._stagedCanvasRect = void 0, this._countSpanCache = /* @__PURE__ */ new WeakMap(), this._maxPoolSize = (t = e.maxPoolSize) == null ? 100 : t, this._classPrefix = (n = e.classPrefix) == null ? "reveal-cluster" : n, this._countSpanName = `${this._classPrefix}-count`, this._enableHoverAnimations = (r = e.enableHoverAnimations) == null
|
|
9360
|
+
this._elementPool = [], this._activeElements = /* @__PURE__ */ new Map(), this._baseSize = 4e3, this._minSize = 48, this._maxSize = 120, this._pendingReleaseTimeouts = /* @__PURE__ */ new Set(), this._hoveredClusterIcon = void 0, this._isVisible = !0, this._isAttached = !1, this._domElement = void 0, this._stagedScreenInfos = [], this._stagedCanvas = void 0, this._stagedCanvasRect = void 0, this._countSpanCache = /* @__PURE__ */ new WeakMap(), this._maxPoolSize = (t = e.maxPoolSize) == null ? 100 : t, this._classPrefix = (n = e.classPrefix) == null ? "reveal-cluster" : n, this._countSpanName = `${this._classPrefix}-count`, this._enableHoverAnimations = (r = e.enableHoverAnimations) == null || r, this._zIndex = e.zIndex, this._clusterFadeStartDistance = (i = e.clusterFadeStartDistance) == null ? 20 : i, this._clusterFadeEndDistance = (a = e.clusterFadeEndDistance) == null ? 150 : a, this._container = this.createContainer(), this.injectStyles();
|
|
9355
9361
|
}
|
|
9356
9362
|
prepareClusters(e, t) {
|
|
9357
9363
|
let { renderer: n, camera: r, modelTransform: i } = t;
|
|
@@ -9601,7 +9607,7 @@ var Uc, Wc = class e {
|
|
|
9601
9607
|
}
|
|
9602
9608
|
constructor(t, n, r, i) {
|
|
9603
9609
|
var a, o, s, c, l, u;
|
|
9604
|
-
this._adaptiveScaleRenderSize = new I(), this._iconRadius = .3, this._renderPositions = [], this._renderColors = [], this._lastLODCameraPosition = new L(), this._minClusterPixelSize = e.MinPixelSize * 2.5, this._htmlRenderer = void 0, this._lastProjectionMatrixElement = e.DefaultProjectionMatrixElement, this._lastRenderHeight = e.DefaultRenderHeight, this._proximityRadius = e.DefaultProximityRadius, this._proximityPointLimit = e.DefaultProximityPointLimit, this._clusterDistanceThreshold = e.DefaultClusterDistanceThreshold, this._maxOctreeDepth = e.DefaultMaxOctreeDepth, this._floorMode = !1, this._preFloorPointsObjectVisible = !0, this._preFloorCullingScheme = "clustered", this._visibleClusteredIcons = [], this._hoveredClusterIcon = void 0, this._cachedClusteredIcons = [], this._setNeedsRedraw = i, this._enableHtmlClusters = (a = r == null ? void 0 : r.enableHtmlClusters)
|
|
9610
|
+
this._adaptiveScaleRenderSize = new I(), this._iconRadius = .3, this._renderPositions = [], this._renderColors = [], this._lastLODCameraPosition = new L(), this._minClusterPixelSize = e.MinPixelSize * 2.5, this._htmlRenderer = void 0, this._lastProjectionMatrixElement = e.DefaultProjectionMatrixElement, this._lastRenderHeight = e.DefaultRenderHeight, this._proximityRadius = e.DefaultProximityRadius, this._proximityPointLimit = e.DefaultProximityPointLimit, this._clusterDistanceThreshold = e.DefaultClusterDistanceThreshold, this._maxOctreeDepth = e.DefaultMaxOctreeDepth, this._floorMode = !1, this._preFloorPointsObjectVisible = !0, this._preFloorCullingScheme = "clustered", this._visibleClusteredIcons = [], this._hoveredClusterIcon = void 0, this._cachedClusteredIcons = [], this._setNeedsRedraw = i, this._enableHtmlClusters = (a = r == null ? void 0 : r.enableHtmlClusters) != null && a, this._maxPixelSize = Math.min(e.DefaultMaxPixelSize, (o = r == null ? void 0 : r.platformMaxPointsSize) == null ? e.DefaultMaxPixelSize : o), this._clusterDistanceThreshold = (s = r == null || (c = r.htmlClusterOptions) == null ? void 0 : c.clusterDistanceThreshold) == null ? this._clusterDistanceThreshold : s, this._maxOctreeDepth = (l = r == null || (u = r.htmlClusterOptions) == null ? void 0 : u.maxOctreeDepth) == null ? this._maxOctreeDepth : l;
|
|
9605
9611
|
let d = this.createOuterRingsTexture(), f = new Fc(t.length, {
|
|
9606
9612
|
spriteTexture: d,
|
|
9607
9613
|
minPixelSize: e.MinPixelSize,
|
|
@@ -9871,7 +9877,7 @@ function Yc(e) {
|
|
|
9871
9877
|
return qc(e) || Jc(e);
|
|
9872
9878
|
}
|
|
9873
9879
|
function Xc(e, t) {
|
|
9874
|
-
return fi(e) && fi(t) ? e.externalId === t.externalId && e.space === t.space : typeof e == "string" && typeof t == "string"
|
|
9880
|
+
return fi(e) && fi(t) ? e.externalId === t.externalId && e.space === t.space : typeof e == "string" && typeof t == "string" && e === t;
|
|
9875
9881
|
}
|
|
9876
9882
|
//#endregion
|
|
9877
9883
|
//#region packages/data-providers/src/Image360Provider.ts
|
|
@@ -11830,19 +11836,34 @@ var fd = class {
|
|
|
11830
11836
|
this._cadSceneParser = new is(), this._modelMetadataProvider = e, this._modelDataProvider = t, this._blobFileName = n;
|
|
11831
11837
|
}
|
|
11832
11838
|
async loadData(e, t) {
|
|
11833
|
-
|
|
11834
|
-
let i = await this.getSupportedOutput(e, t), a = this._modelMetadataProvider.getModelUri(e, i), o = this._modelMetadataProvider.getModelMatrix(e, i.format), s = this._modelMetadataProvider.getModelCamera(e), c = (n = (r = this._modelMetadataProvider).getModelUriForSignedFiles) == null ? void 0 : n.call(r), l = await a, u = e instanceof cs && c !== void 0 ? await this.loadCadMetadataFromSignedFiles(e, c, this._blobFileName) : await this.loadCadMetadataFromBaseUrl(l, this._blobFileName), d = this._cadSceneParser.parse(u), f = pd(d.unit, await o), p = new O().copy(f).invert(), m = await s;
|
|
11839
|
+
let n = await this.getSupportedOutput(e, t), r = this._modelMetadataProvider.getModelUri(e, n), i = this._modelMetadataProvider.getModelMatrix(e, n.format), a = this._modelMetadataProvider.getModelCamera(e), o = await r, { jsonData: s, signedFilesBaseUrl: c } = await this.getJsonDataWithSignedFilesBaseUrl(e, o), l = this._cadSceneParser.parse(s), u = pd(l.unit, await i), d = new O().copy(u).invert(), f = await a;
|
|
11835
11840
|
return {
|
|
11836
11841
|
modelIdentifier: e,
|
|
11837
|
-
modelBaseUrl:
|
|
11842
|
+
modelBaseUrl: o,
|
|
11838
11843
|
signedFilesBaseUrl: c,
|
|
11839
11844
|
geometryClipBox: null,
|
|
11840
|
-
format:
|
|
11841
|
-
formatVersion:
|
|
11842
|
-
modelMatrix:
|
|
11843
|
-
inverseModelMatrix:
|
|
11844
|
-
cameraConfiguration: Un(
|
|
11845
|
-
scene:
|
|
11845
|
+
format: n.format,
|
|
11846
|
+
formatVersion: n.version,
|
|
11847
|
+
modelMatrix: u,
|
|
11848
|
+
inverseModelMatrix: d,
|
|
11849
|
+
cameraConfiguration: Un(f, u),
|
|
11850
|
+
scene: l
|
|
11851
|
+
};
|
|
11852
|
+
}
|
|
11853
|
+
async getJsonDataWithSignedFilesBaseUrl(e, t) {
|
|
11854
|
+
var n, r;
|
|
11855
|
+
let i = (n = (r = this._modelMetadataProvider).getModelUriForSignedFiles) == null ? void 0 : n.call(r);
|
|
11856
|
+
if (e instanceof cs && i !== void 0) try {
|
|
11857
|
+
return {
|
|
11858
|
+
jsonData: await this.loadCadMetadataFromSignedFiles(e, i, this._blobFileName),
|
|
11859
|
+
signedFilesBaseUrl: i
|
|
11860
|
+
};
|
|
11861
|
+
} catch (e) {
|
|
11862
|
+
console.warn(`Failed to load CAD metadata from signed files: ${e}. Using fallback to base URL fetching.`);
|
|
11863
|
+
}
|
|
11864
|
+
return {
|
|
11865
|
+
jsonData: await this.loadCadMetadataFromBaseUrl(t, this._blobFileName),
|
|
11866
|
+
signedFilesBaseUrl: void 0
|
|
11846
11867
|
};
|
|
11847
11868
|
}
|
|
11848
11869
|
async loadCadMetadataFromSignedFiles(e, t, n) {
|
|
@@ -13964,7 +13985,7 @@ var Kf = class extends Wf {
|
|
|
13964
13985
|
Jf = Xf, Jf.POOL_MAX_IDLE = 7e3;
|
|
13965
13986
|
//#endregion
|
|
13966
13987
|
//#region packages/pointclouds/src/potree-three-loader/workers/eptBinaryDecoder.worker.ts?worker&inline
|
|
13967
|
-
var Zf = "/*!\n* Copyright 2021 Cognite AS\n*/\nfunction e(e,t){throw Error(t||`Unexpected object: `+e)}\n/*!\n* Copyright 2022 Cognite AS\n*/\nlet t=function(e){return e[e.Box=0]=`Box`,e[e.Cylinder=1]=`Cylinder`,e[e.Composite=2]=`Composite`,e}({});function n(e,t,n,r){let i=b(e,O.__wbindgen_malloc),a=D,o=y(r,O.__wbindgen_malloc),s=D,c=O.assign_points(i,a,t,n,o,s);if(c[2])throw S(c[1]);return S(c[0])}function r(){return{__proto__:null,\"./pointclouds_wasm_bg.js\":{__proto__:null,__wbg_Error_92b29b0548f8b746:function(e,t){return Error(m(e,t))},__wbg_Number_9a4e0ecb0fa16705:function(e){return Number(e)},__wbg_String_8564e559799eccda:function(e,t){let n=x(String(t),O.__wbindgen_malloc,O.__wbindgen_realloc),r=D;l().setInt32(e+4,r,!0),l().setInt32(e+0,n,!0)},__wbg___wbindgen_boolean_get_fa956cfa2d1bd751:function(e){let t=e,n=typeof t==`boolean`?t:void 0;return v(n)?16777215:+!!n},__wbg___wbindgen_debug_string_c25d447a39f5578f:function(e,t){let n=x(a(t),O.__wbindgen_malloc,O.__wbindgen_realloc),r=D;l().setInt32(e+4,r,!0),l().setInt32(e+0,n,!0)},__wbg___wbindgen_in_aca499c5de7ff5e5:function(e,t){return e in t},__wbg___wbindgen_is_function_1ff95bcc5517c252:function(e){return typeof e==`function`},__wbg___wbindgen_is_object_a27215656b807791:function(e){let t=e;return typeof t==`object`&&!!t},__wbg___wbindgen_is_undefined_c05833b95a3cf397:function(e){return e===void 0},__wbg___wbindgen_jsval_loose_eq_db4c3b15f63fc170:function(e,t){return e==t},__wbg___wbindgen_number_get_394265ed1e1b84ee:function(e,t){let n=t,r=typeof n==`number`?n:void 0;l().setFloat64(e+8,v(r)?0:r,!0),l().setInt32(e+0,!v(r),!0)},__wbg___wbindgen_string_get_b0ca35b86a603356:function(e,t){let n=t,r=typeof n==`string`?n:void 0;var i=v(r)?0:x(r,O.__wbindgen_malloc,O.__wbindgen_realloc),a=D;l().setInt32(e+4,a,!0),l().setInt32(e+0,i,!0)},__wbg___wbindgen_throw_344f42d3211c4765:function(e,t){throw Error(m(e,t))},__wbg_call_8a2dd23819f8a60a:function(){return _(function(e,t){return e.call(t)},arguments)},__wbg_done_89b2b13e91a60321:function(e){return e.done},__wbg_fill_ca7094d925b607bb:function(e,t,n,r){return e.fill(t,n>>>0,r>>>0)},__wbg_get_c7eb1f358a7654df:function(){return _(function(e,t){return Reflect.get(e,t)},arguments)},__wbg_get_unchecked_6e0ad6d2a41b06f6:function(e,t){return e[t>>>0]},__wbg_get_with_ref_key_6412cf3094599694:function(e,t){return e[t]},__wbg_instanceof_ArrayBuffer_4480b9e0068a8adb:function(e){let t;try{t=e instanceof ArrayBuffer}catch{t=!1}return t},__wbg_instanceof_Uint8Array_309b927aaf7a3fc7:function(e){let t;try{t=e instanceof Uint8Array}catch{t=!1}return t},__wbg_isArray_0677c962b281d01a:function(e){return Array.isArray(e)},__wbg_isSafeInteger_04f36e4056f1b851:function(e){return Number.isSafeInteger(e)},__wbg_iterator_6f722e4a93058b71:function(){return Symbol.iterator},__wbg_length_1f0964f4a5e2c6d8:function(e){return e.length},__wbg_length_370319915dc99107:function(e){return e.length},__wbg_length_98f10d1e2f4ea968:function(e){return e.length},__wbg_new_cd45aabdf6073e84:function(e){return new Uint8Array(e)},__wbg_new_with_length_82f839073dfdaa99:function(e){return new Uint16Array(e>>>0)},__wbg_next_6dbf2c0ac8cde20f:function(e){return e.next},__wbg_next_71f2aa1cb3d1e37e:function(){return _(function(e){return e.next()},arguments)},__wbg_prototypesetcall_4770620bbe4688a0:function(e,t,n){Uint8Array.prototype.set.call(s(e,t),n)},__wbg_prototypesetcall_ba9c9a7197c11933:function(e,t,n){Float32Array.prototype.set.call(o(e,t),n)},__wbg_set_index_14ccbbcec64b9031:function(e,t,n){e[t>>>0]=n},__wbg_value_a5d5488a9589444a:function(e){return e.value},__wbindgen_cast_0000000000000001:function(e,t){return m(e,t)},__wbindgen_init_externref_table:function(){let e=O.__wbindgen_externrefs,t=e.grow(4);e.set(0,void 0),e.set(t+0,void 0),e.set(t+1,null),e.set(t+2,!0),e.set(t+3,!1)}}}}function i(e){let t=O.__externref_table_alloc();return O.__wbindgen_externrefs.set(t,e),t}function a(e){let t=typeof e;if(t==`number`||t==`boolean`||e==null)return`${e}`;if(t==`string`)return`\"${e}\"`;if(t==`symbol`){let t=e.description;return t==null?`Symbol`:`Symbol(${t})`}if(t==`function`){let t=e.name;return typeof t==`string`&&t.length>0?`Function(${t})`:`Function`}if(Array.isArray(e)){let t=e.length,n=`[`;t>0&&(n+=a(e[0]));for(let r=1;r<t;r++)n+=`, `+a(e[r]);return n+=`]`,n}let n=/\\[object ([^\\]]+)\\]/.exec(toString.call(e)),r;if(n&&n.length>1)r=n[1];else return toString.call(e);if(r==`Object`)try{return`Object(`+JSON.stringify(e)+`)`}catch{return`Object`}return e instanceof Error?`${e.name}: ${e.message}\\n${e.stack}`:r}function o(e,t){return e>>>=0,d().subarray(e/4,e/4+t)}function s(e,t){return e>>>=0,g().subarray(e/1,e/1+t)}let c=null;function l(){return(c===null||c.buffer.detached===!0||c.buffer.detached===void 0&&c.buffer!==O.memory.buffer)&&(c=new DataView(O.memory.buffer)),c}let u=null;function d(){return(u===null||u.byteLength===0)&&(u=new Float32Array(O.memory.buffer)),u}let f=null;function p(){return(f===null||f.byteLength===0)&&(f=new Float64Array(O.memory.buffer)),f}function m(e,t){return T(e>>>0,t)}let h=null;function g(){return(h===null||h.byteLength===0)&&(h=new Uint8Array(O.memory.buffer)),h}function _(e,t){try{return e.apply(this,t)}catch(e){let t=i(e);O.__wbindgen_exn_store(t)}}function v(e){return e==null}function y(e,t){let n=t(e.length*8,8)>>>0;return p().set(e,n/8),D=e.length,n}function b(e,t){let n=t(e.length*4,4)>>>0;for(let t=0;t<e.length;t++){let r=i(e[t]);l().setUint32(n+4*t,r,!0)}return D=e.length,n}function x(e,t,n){if(n===void 0){let n=E.encode(e),r=t(n.length,1)>>>0;return g().subarray(r,r+n.length).set(n),D=n.length,r}let r=e.length,i=t(r,1)>>>0,a=g(),o=0;for(;o<r;o++){let t=e.charCodeAt(o);if(t>127)break;a[i+o]=t}if(o!==r){o!==0&&(e=e.slice(o)),i=n(i,r,r=o+e.length*3,1)>>>0;let t=g().subarray(i+o,i+r),a=E.encodeInto(e,t);o+=a.written,i=n(i,r,o,1)>>>0}return D=o,i}function S(e){let t=O.__wbindgen_externrefs.get(e);return O.__externref_table_dealloc(e),t}let C=new TextDecoder(`utf-8`,{ignoreBOM:!0,fatal:!0});C.decode();let w=0;function T(e,t){return w+=t,w>=2146435072&&(C=new TextDecoder(`utf-8`,{ignoreBOM:!0,fatal:!0}),C.decode(),w=t),C.decode(g().subarray(e,e+t))}const E=new TextEncoder;`encodeInto`in E||(E.encodeInto=function(e,t){let n=E.encode(e);return t.set(n),{read:e.length,written:n.length}});let D=0,O;function k(e,t){return O=e.exports,c=null,u=null,f=null,h=null,O.__wbindgen_start(),O}async function A(e,t){if(typeof Response==`function`&&e instanceof Response){if(typeof WebAssembly.instantiateStreaming==`function`)try{return await WebAssembly.instantiateStreaming(e,t)}catch(t){if(e.ok&&n(e.type)&&e.headers.get(`Content-Type`)!==`application/wasm`)console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\",t);else throw t}let r=await e.arrayBuffer();return await WebAssembly.instantiate(r,t)}else{let n=await WebAssembly.instantiate(e,t);return n instanceof WebAssembly.Instance?{instance:n,module:e}:n}function n(e){switch(e){case`basic`:case`cors`:case`default`:return!0}return!1}}async function ee(e){if(O!==void 0)return O;e!==void 0&&(Object.getPrototypeOf(e)===Object.prototype?{module_or_path:e}=e:console.warn(`using deprecated parameters for the initialization function; pass a single object instead`)),e===void 0&&(e=new URL(`data:application/wasm;base64,AGFzbQEAAAABkQIoYAJ/fwF/YAN/f38Bf2ACf38AYAF/AX9gA39/fwBgAW8Bf2AEf39/fwBgBX9/f39/AGABfwBgAABgBH9/f38Bf2ABbwFvYAJ/bwBgBn9/f39/fwBgAm9vAW9gBX9/f39/AX9gA39/bwBgAm9vAX9gAn9/AW9gBn9/f39/fwF/YAV/f31/fwBgBX9/fn9/AGAFf398f38AYAADf39/YAF/AW9gBG9/f38Bb2ADb39/AGAAAW9gAW8BfGACb38Bb2AJf39/f39/fn5+AGAAAX9gA39+fgBgBn9/f31/fwBgBn9/f35/fwBgBn9/f3x/fwBgBn9/b29/fwN/f39gBH99f38AYAR/fn9/AGAEf3x/fwACnRIlGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcx5fX3diZ19pc0FycmF5XzA2NzdjOTYyYjI4MWQwMWEABRguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMdX193YmdfbGVuZ3RoXzM3MDMxOTkxNWRjOTkxMDcABRguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMbX193YmdfbmV4dF83MWYyYWExY2IzZDFlMzdlAAsYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzG19fd2JnX2RvbmVfODliMmIxM2U5MWE2MDMyMQAFGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcxxfX3diZ192YWx1ZV9hNWQ1NDg4YTk1ODk0NDRhAAsYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzLF9fd2JnX19fd2JpbmRnZW5fbnVtYmVyX2dldF8zOTQyNjVlZDFlMWI4NGVlAAwYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzHV9fd2JnX2xlbmd0aF85OGYxMGQxZTJmNGVhOTY4AAUYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzJ19fd2JnX3Byb3RvdHlwZXNldGNhbGxfYmE5YzlhNzE5N2MxMTkzMwAQGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcytfX3diZ19fX3diaW5kZ2VuX2lzX29iamVjdF9hMjcyMTU2NTZiODA3NzkxAAUYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzJ19fd2JnX2dldF93aXRoX3JlZl9rZXlfNjQxMmNmMzA5NDU5OTY5NAAOGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcy5fX3diZ19fX3diaW5kZ2VuX2lzX3VuZGVmaW5lZF9jMDU4MzNiOTVhM2NmMzk3AAUYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzJF9fd2JnX19fd2JpbmRnZW5faW5fYWNhNDk5YzVkZTdmZjVlNQARGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcyZfX3diZ19uZXdfd2l0aF9sZW5ndGhfODJmODM5MDczZGZkYWE5OQAYGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcxtfX3diZ19maWxsX2NhNzA5NGQ5MjViNjA3YmIAGRguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMgX193Ymdfc2V0X2luZGV4XzE0Y2NiYmNlYzY0YjkwMzEAGhguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMdX193YmdfbGVuZ3RoXzFmMDk2NGY0YTVlMmM2ZDgABRguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMnX193YmdfcHJvdG90eXBlc2V0Y2FsbF80NzcwNjIwYmJlNDY4OGEwABAYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzH19fd2JnX2l0ZXJhdG9yXzZmNzIyZTRhOTMwNThiNzEAGxguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMaX193YmdfZ2V0X2M3ZWIxZjM1OGE3NjU0ZGYADhguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMtX193YmdfX193YmluZGdlbl9pc19mdW5jdGlvbl8xZmY5NWJjYzU1MTdjMjUyAAUYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzG19fd2JnX2NhbGxfOGEyZGQyMzgxOWY4YTYwYQAOGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcxtfX3diZ19uZXh0XzZkYmYyYzBhYzhjZGUyMGYACxguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMkX193YmdfaXNTYWZlSW50ZWdlcl8wNGYzNmU0MDU2ZjFiODUxAAUYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzHV9fd2JnX051bWJlcl85YTRlMGVjYjBmYTE2NzA1ABwYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzMF9fd2JnX19fd2JpbmRnZW5fanN2YWxfbG9vc2VfZXFfZGI0YzNiMTVmNjNmYzE3MAARGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcxxfX3diZ19FcnJvcl85MmIyOWIwNTQ4ZjhiNzQ2ABIYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzJF9fd2JnX2dldF91bmNoZWNrZWRfNmUwYWQ2ZDJhNDFiMDZmNgAdGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcy1fX3diZ19fX3diaW5kZ2VuX2Jvb2xlYW5fZ2V0X2ZhOTU2Y2ZhMmQxYmQ3NTEABRguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMsX193YmdfX193YmluZGdlbl9zdHJpbmdfZ2V0X2IwY2EzNWI4NmE2MDMzNTYADBguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMsX193YmdfaW5zdGFuY2VvZl9VaW50OEFycmF5XzMwOWI5MjdhYWY3YTNmYzcABRguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMtX193YmdfaW5zdGFuY2VvZl9BcnJheUJ1ZmZlcl80NDgwYjllMDA2OGE4YWRiAAUYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzGl9fd2JnX25ld19jZDQ1YWFiZGY2MDczZTg0AAsYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzHV9fd2JnX1N0cmluZ184NTY0ZTU1OTc5OWVjY2RhAAwYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzJ19fd2JnX19fd2JpbmRnZW5fdGhyb3dfMzQ0ZjQyZDMyMTFjNDc2NQACGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcy5fX3diZ19fX3diaW5kZ2VuX2RlYnVnX3N0cmluZ19jMjVkNDQ3YTM5ZjU1NzhmAAwYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzH19fd2JpbmRnZW5faW5pdF9leHRlcm5yZWZfdGFibGUACRguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMgX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDEAEgOhAZ8BBAMGBAIBAggCAAoCBAAAAAoTAAEAAQECAAIeAgQCDR8AAgYAAAIAAAAAAAIAAAABAgICAgACBggABwAEBCAHAggIBwENCAcCBwYN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LQAAQazJwABBADoAAEGwycAAKAIAIQVBsMnAAEEANgIABEAgACAFNgIIIAFBAToABCAAQgI3AwAMAwsCQCADELoBIgRFBEAgAxCWASEBDAELIAFBAToABAsgA0GECE8EQCADEGoLIARFDQELIABCADcDAAwBCyACIAE2AgQgAkEIaiABELYBIAIrAxAhBiACKAIIIgNFBEAgAkEEaiACQR9qQci8wAAQOCEECyABQYQITwRAIAEQagsgA0UEQCAAQgI3AwAgACAENgIIDAELIAAgBjkDCCAAQgE3AwALIAJBIGokAAvgAQECfyMAQRBrIgMkACAAKAIAIQACfwJAIAEoAggiAkGAgIAQcUUEQCACQYCAgCBxDQEgACABEEkMAgsgACgCACECQQkhAANAIAAgA2pBBmogAkEPcS0AnJpAOgAAIABBAWshACACQQR2IgINAAsgAUEBQaK6wABBAiAAIANqQQdqQQkgAGsQNgwBCyAAKAIAIQJBCSEAA0AgACADakEGaiACQQ9xLQCkukA6AAAgAEEBayEAIAJBBHYiAg0ACyABQQFBorrAAEECIAAgA2pBB2pBCSAAaxA2CyADQRBqJAAL6gECAX4CfyMAQRBrIgMkACAAKAIAIQACfwJAIAEoAggiBEGAgIAQcUUEQCAEQYCAgCBxDQEgACABEEgMAgsgACkDACECQREhAANAIAAgA2pBAmsgAqdBD3EtAJyaQDoAACAAQQFrIQAgAkIEiCICQgBSDQALIAFBAUGiusAAQQIgACADakEBa0ERIABrEDYMAQsgACkDACECQREhAANAIAAgA2pBAmsgAqdBD3EtAKS6QDoAACAAQQFrIQAgAkIEiCICQgBSDQALIAFBAUGiusAAQQIgACADakEBa0ERIABrEDYLIANBEGokAAvQAgIFfAF/AkBEAAAAAAAA8L8gACsDYCABKwMQIgIgACsDQKIgASsDCCIFIAArAyCiIAErAwAiBiAAKwMAoqCgoCIDIANEAAAAAAAA8L9mG0QAAAAAAADwv2INAEQAAAAAAADwvyAAKwNoIAIgACsDSKIgBSAAKwMooiAGIAArAwiioKCgIgQgBEQAAAAAAADwv2YbRAAAAAAAAPC/Yg0ARAAAAAAAAPC/IAArA3AgAiAAKwNQoiAFIAArAzCiIAYgACsDEKKgoKAiAiACRAAA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aiEGCyAEIAY2AtAEIBIgAyADIBJJGyIAQSlJDQALCwwQCyABIAtODQMgBEHgAGpBARA0GiAFIAQoAoACIgAgACAFSRsiAUEpTw0QIAFBAnQhASAEQdwAaiEAIARB0ARqIQIDQCABRQ0BIAEgAmohAyAAIAFqIAFBBGshASgCACIGIAMoAgAiA0YNAAsgAyAGSw0DCyAEQc8AaiAHaiEDIAchAQJAA0AgASIARQ0BIAFBAWsiASAEQc8AaiICai0AAEE5Rg0ACyABIAJqIgEgAS0AAEEBajoAACAHIABrIgFFDQMgACACakEwIAH8CwAMAwsgBEExOgBPIAoEQCAEQdAAakEwIAr8CwALIApBD00EQCADQTA6AAAgE0EBaiETIApBAmohBwwFCyAHQRFBjLjAABB1AAsMCQtBEUERQfy3wAAQdQALIApBEE0NAUEAIAdBEUGcuMAAEEcACwwFCyAEQQhqIARBzwBqIAcgE0EAIARB6AlqEEMgBCgCDCEIIAQoAggMAQsCQCAIQf8BcSIABEBBASEIQcyawABBzZrAACACG0HMmsAAQQEgAhsgARshESAjQj+IpyABciEOIARBAjsB6AkgAEECRg0BIARBAzYC8AkgBEHRmsAANgLsCSAEQegJagwCCyAEQQM2AvAJIARBzprAADYC7AkgBEECOwHoCUEBIRFBASEIIARB6AlqDAELIARBATYC8AkgBEHUmsAANgLsCSAEQegJagshACAEIAg2AswIIAQgADYCyAggBCAONgLECCAEIBE2AsAIIA0gBEHACGoQMyAEQZALaiQADAQLIwBBEGsiACQAIAAgBEHoCWo2AgwgACAEQcAIajYCCCAAQQhqQbyawAAgAEEMakG8msAAQYybwAAQYwALQShBKEHUm8AAEHUAC0G3m8AAQRpB1JvAABCTAQALDAULDwsCfyABIRMgAkEARyEZIAEvAQ4hEiMAQfAOayIFJAAgOL0iJkL/////////B4MiJUKAgICAgICACIQgJkIBhkL+////////D4MgJkI0iKdB/w9xIgEbIiNCAYMhJEECIQACQAJAAn8CQAJAAkACfwJ/AkACQAJAAkACQCAlUCICQQJBAyACG0EEICZCgICAgICAgPj/AIMiJVAbICVCgICAgICAgPj/AFEbQQFrDgQCAAQBAwtBBCEADAILQoCA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IAEoAhARCgALHAAgAEUEQBDAAQALIAAgAiADIAQgASgCEBElAAscACAARQRAEMABAAsgACACIAMgBCABKAIQEQYACxwAIABFBEAQwAEACyAAIAIgAyAEIAEoAhARJgALHAAgAEUEQBDAAQALIAAgAiADIAQgASgCEBEnAAsaACAARQRAEMABAAsgACACIAMgASgCEBEEAAsaACAARQRAEMABAAsgACACIAMgASgCEBEBAAsaAQFvIAAlASABJQEQCSECEEQiACACJgEgAAsPACAABEAQswEACxCqAQALGAAgAEUEQBDAAQALIAAgAiABKAIQEQAACxwAIAEoAgAgACgCACAAKAIEIAEoAgQoAgwRAQALEQAgACABQQF0QQFyIAIQfgALFwAgACgCACABIAAoAgRBDGooAgARAAALFgEBbyAAJQEQAiEBEEQiACABJgEgAAsWAQFvIAAlARAEIQEQRCIAIAEmASAACxYBAW8gACABEBkhAhBEIgAgAiYBIAALFgEBbyAAIAEQJCECEEQiACACJgEgAAsZACABKAIAQYCAwABBFCABKAIEKAIMEQEACxkAIAEoAgBBlIDAAEEVIAEoAgQoAgwRAQALGQAgASgCAEGMwMAAQQMgASgCBCgCDBEBAAsZACABKAIAQY/AwABBAyABKAIEKAIMEQEACxkAIAEoAgBBmJTAAEEFIAEoAgQoAgwRAQALGQAgASgCAEHjvsAAQREgASgCBCgCDBEBAAsZACABKAIAQZ+/wABBFyABKAIEKAIMEQEACxkAIAEoAgBB9L7AAEEUIAEoAgQoAgwRAQALGQAgASgCAEGIv8AAQRcgASgCBCgCDBEBAAscACAAQfjCwAApAgA3AgggAEHwwsAAKQIANwIACxwAIABBiMPAACkCADcCCCAAQYDDwAApAgA3AgALFAAgACgCACABIAAoAgQoAgwRAAALiggBAn8gACEGIwBBMGsiBSQAIAUgAzYCBCAFIAI2AgAgBSABNgIIAkACQAJAAkACQAJAIAEgAk8EQCABIANJDQYgAiADSw0BIAJFIAEgAk1yDQMgACACaiwAAEG/f0oNAyACIQACQANAIAAgBmosAABBv39KDQEgAEEBayIADQALQQAhAAsDQCACIAZqLAAAQb9/Sg0DIAEgAkEBaiICRw0ACyABIQIMAgsgBSAFQQhq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c2VyaWFsaXppbmcgYm91bmRpbmcgYm94OiDAABBhc3NlcnRpb24gYGxlZnQgwBcgcmlnaHRgIGZhaWxlZAogIGxlZnQ6IMAJCiByaWdodDogwAAlR290IGVycm9yIHdoaWxlIGRlc2VyaWFsaXppbmcgc2hhcGU6IMAAwAI6IMAAL3J1c3RjLzMxZmNhM2FkYjI4M2NjOWRmZDU2YjQ5Y2RlZTlhOTZlYjljOTZmZmQvbGlicmFyeS9jb3JlL3NyYy9udW0vaW1wL2ZsdDJkZWMvc3RyYXRlZ3kvZ3Jpc3UucnMAL3J1c3RjLzMxZmNhM2FkYjI4M2NjOWRmZDU2YjQ5Y2RlZTlhOTZlYjljOTZmZmQvbGlicmFyeS9hbGxvYy9zcmMvZm10LnJzAC9ydXN0Yy8zMWZjYTNhZGIyODNjYzlkZmQ1NmI0OWNkZWU5YTk2ZWI5Yzk2ZmZkL2xpYnJhcnkvY29yZS9zcmMvbnVtL2ltcC9kaXlfZmxvYXQucnMAcGFja2FnZXMvcG9pbnRjbG91ZHMvd2FzbS9zcmMvcGFyc2VfaW5wdXRzLnJzAC9ydXN0Yy8zMWZjYTNhZGIyODNjYzlkZmQ1NmI0OWNkZWU5YTk2ZWI5Yzk2ZmZkL2xpYnJhcnkvc3RkL3NyYy9zeXMvdGhyZWFkX2xvY2FsL25vX3RocmVhZHMucnMAL3J1c3RjLzMxZmNhM2FkYjI4M2NjOWRmZDU2YjQ5Y2RlZTlhOTZlYjljOTZmZmQvbGlicmFyeS9zdGQvc3JjL3N5cy9zeW5jL3J3bG9jay9ub190aHJlYWRzLnJzAC9ydXN0Yy8zMWZjYTNhZGIyODNjYzlkZmQ1NmI0OWNkZWU5YTk2ZWI5Yzk2ZmZkL2xpYnJhcnkvY29yZS9zcmMvbnVtL2ltcC9mbHQyZGVjL3N0cmF0ZWd5L2RyYWdvbi5ycwAvcnVzdGMvMzFmY2EzYWRiMjgzY2M5ZGZkNTZiNDljZGVlOWE5NmViOWM5NmZmZC9saWJyYXJ5L2NvcmUvc3JjL251bS9pbXAvYmlnbnVtLnJzAC9ob21lL3J1bm5lci8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3dhc20tYmluZGdlbi0wLjIuMTI2L3NyYy9leHRlcm5yZWYucnMAL3J1c3RjLzMxZmNhM2FkYjI4M2NjOWRmZDU2YjQ5Y2RlZTlhOTZlYjljOTZmZmQvbGlicmFyeS9jb3JlL3NyYy91bmljb2RlL3ByaW50YWJsZS5ycwBwYWNrYWdlcy9wb2ludGNsb3Vkcy93YXNtL3NyYy9wb2ludF9vY3RyZWUvb2N0cmVlX25vZGUucnMAL3J1c3QvZGVwcy9oYXNoYnJvd24tMC4xNi4xL3NyYy9yYXcvbW9kLnJzAC9ydXN0Yy8zMWZjYTNhZGIyODNjYzlkZmQ1NmI0OWNkZWU5YTk2ZWI5Yzk2ZmZkL2xpYnJhcnkvY29yZS9zcmMvZm10L21vZC5ycwAvcnVzdGMvMzFmY2EzYWRiMjgzY2M5ZGZkNTZiNDljZGVlOWE5NmViOWM5NmZmZC9saWJyYXJ5L2FsbG9jL3NyYy9yYXdfdmVjL21vZC5ycwAvcnVzdGMvMzFmY2EzYWRiMjgzY2M5ZGZkNTZiNDljZGVlOWE5NmViOWM5NmZmZC9saWJyYXJ5L2NvcmUvc3JjL251bS9pbXAvZmx0MmRlYy9tb2QucnMAL3J1c3QvZGVwcy9kbG1hbGxvYy0wLjIuMTEvc3JjL2RsbWFsbG9jLnJzAC9ob21lL3J1bm5lci8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3NlcmRlLXdhc20tYmluZGdlbi0wLjYuNS9zcmMvbGliLnJzAC9ob21lL3J1bm5lci8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL2pzLXN5cy0wLjMuMTAzL3NyYy9saWIucnMAEGZsb2F0aW5nIHBvaW50IGDAAWAAC2NoYXJhY3RlciBgwAFgAAlpbnRlZ2VyIGDAAWAACWJvb2xlYW4gYMABYAAPbWlzc2luZyBmaWVsZCBgwAFgABFkdXBsaWNhdGUgZmllbGQgYMABYAARc3RhcnQgYnl0ZSBpbmRleCDAJiBpcyBub3QgYSBjaGFyIGJvdW5kYXJ5OyBpdCBpcyBpbnNpZGUgwAggKGJ5dGVzIMALIG9mIHN0cmluZykAD2VuZCBieXRlIGluZGV4IMAmIGlzIG5vdCBhIGNoYXIgYm91bmRhcnk7IGl0IGlzIGluc2lkZSDACCAoYnl0ZXMgwAsgb2Ygc3RyaW5nKQAISnNWYWx1ZSjAASkAY2FwYWNpdHkgb3ZlcmZsb3e3BhAAUAAAABwAAAAFAAAAMAAAAAwAAAAEAAAAMQAAADIAAAAzAEGok8AAC9QdAQAAADQAAABhIGZvcm1hdHRpbmcgdHJhaXQgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgYW4gZXJyb3Igd2hlbiB0aGUgdW5kZXJseWluZyBzdHJlYW0gZGlkIG5vdAAABwMQAEgAAACPAgAADgAAAEVycm9yAHAABwAtAQEBAgECAQFICzAVEAFlBwIGAgIBBCMBHhtbCzoJCQEYBAEJAQMBBSsDOwkqGAEgNwEBAQQIBAEDBwoCHQE6AQEBAgQIAQkBCgIaAQICOQEEAgQCAgMDAR4CAwELAjkBBAUBAgQBFAIWBgEBOgEBAgEECAEHAwoCHgE7AQEBDAEJASgBAwE3AQEDBQMBBAcCCwIdAToBAgIBAQMDAQQHAgsCHAI5AgEBAgQIAQkBCgIdAUgBBAECAwEBCAFRAQIHDAhiAQIJCwdJAhsBAQEBATcOAQUBAgULASQJAWYEAQYBAgICGQIEAxAEDQECAgYBDwEAAwAEHAMdAh4CQAIBBwgBAgsJAS0DAQF1AiIBdgMEAgkBBgPbAgIBOgEBBwEBAQECCAYKAgEwLgIMFAQwCgQDJgkMAiAEAgY4AQECAwEBBTgIAgKYAwENAQcEAQYBAwLGQAABwyEAA40BYCAABmkCAAQBCiACUAIAAQMBBAEZAgUBlwIaEg0BJggZCwEBLAMwAQIEAgICASQBQwYCAgICDAEIAS8BMwEBAwICBQIBASoCCAHuAQIBBAEAAQAQEBAAAgAB4gGVBQADAQIFBCgDBAGlAgAEQQUAAk0GRgsxBHsBNg8pAQICCgMxBAICBwE9AyQFAQg+AQwCNAkBAQgEAgFfAwIEBgECAZ0BAwgVAjkCAQEBAQwBCQEOBwMFQwECBgEBAgEBAwQDAQEOAlUIAgMBARcBUQECBgEBAgEBAgEC6wECBAYCAQIbAlUIAgEBAmoBAQECCGUBAQECBAEFAAkBAvUBCgQEAZAEAgIEASAKKAYCBAgBCQYCAy4NAQLGAQEDAQHJBwEGAQFSFgIHAQIBAnoGAwEBAgEH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emUgPD0gc2l6ZSArIG1heF9vdmVyaGVhZAAAYAcQACoAAAC3BAAADQAAAHJ3bG9jayBvdmVyZmxvd2VkIHJlYWQgbG9ja3MzBBAAXQAAABUAAAAsAAAAAAAAAAgAAAAEAAAAVAAAADAAAAAMAAAABAAAAFUAAAByd2xvY2sgaGFzIG5vdCBiZWVuIGxvY2tlZCBmb3IgcmVhZGluZwAAMwQQAF0AAAA+AAAACQAAAEgFEABnAAAAhAAAABEAAABIBRAAZwAAAJIAAAARAEG0xcAACwVWAAAABAB8CXByb2R1Y2VycwIIbGFuZ3VhZ2UBBFJ1c3QADHByb2Nlc3NlZC1ieQMFcnVzdGMdMS45Ni4xICgzMWZjYTNhZGIgMjAyNi0wNi0yNikGd2FscnVzBjAuMjYuNAx3YXNtLWJpbmRnZW4TMC4yLjEyNiAoMjFhYzgwNGE5KQBrD3RhcmdldF9mZWF0dXJlcwYrD211dGFibGUtZ2xvYmFscysTbm9udHJhcHBpbmctZnB0b2ludCsLYnVsay1tZW1vcnkrCHNpZ24tZXh0Kw9yZWZlcmVuY2UtdHlwZXMrCm11bHRpdmFsdWU=`,``+import.meta.url));let t=r();(typeof e==`string`||typeof Request==`function`&&e instanceof Request||typeof URL==`function`&&e instanceof URL)&&(e=fetch(e));let{instance:n,module:i}=await A(await e,t);return k(n,i)}\n/*!\n* Copyright 2022 Cognite AS\n*/\nasync function te(e,t,r,i){return ee().then(()=>n(e,t,r,new Float64Array(i)))}\n/*!\n* Copyright 2022 Cognite AS\n*/\nfunction j(n){switch(n.shape.shapeType){case t.Cylinder:{let e=n.shape;return{object_id:n.objectId,cylinder:{center_a:e.centerA,center_b:e.centerB,radius:e.radius}}}case t.Box:{let e=n.shape;return{object_id:n.objectId,oriented_box:{inv_instance_matrix:e.invMatrix.data}}}case t.Composite:throw Error(`Cannot assign points to objects - encountered unexpected composite object`);default:e(n.shape.shapeType)}}async function ne(e,t,n,r){let i=t.map(e=>j(e));try{return await te(i,e,{min:r.min.toArray(),max:r.max.toArray()},n.toArray())}catch(e){return Promise.reject(Error(e))}}var re,M,ie,ae,N,oe;let se,ce,le\n/**\n* @license\n* Copyright 2010-2026 Three.js Authors\n* SPDX-License-Identifier: MIT\n*/\n;const ue=1e3,de=1001,fe=1002,pe=2300,me=2301,he=2302,ge=2303,_e=2400,ve=2401,ye=2402,P=`srgb`,be=`srgb-linear`,xe=`linear`,Se=2e3;function Ce(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function we(e){return document.createElementNS(`http://www.w3.org/1999/xhtml`,e)}const Te={};function Ee(e){let t=e[0];if(typeof t==`string`&&t.startsWith(`TSL:`)){let t=e[1];t&&t.isStackTrace?e[0]+=` `+t.getLocation():e[1]=`Stack trace not available. Enable \"THREE.Node.captureStackTrace\" to capture stack traces.`}return e}function F(...e){e=Ee(e);let t=`THREE.`+e.shift();{let n=e[0];n&&n.isStackTrace?console.warn(n.getError(t)):console.warn(t,...e)}}function I(...e){e=Ee(e);let t=`THREE.`+e.shift();{let n=e[0];n&&n.isStackTrace?console.error(n.getError(t)):console.error(t,...e)}}function De(...e){let t=e.join(` `);t in Te||(Te[t]=!0,F(...e))}var Oe=class{addEventListener(e,t){this._listeners===void 0&&(this._listeners={});let n=this._listeners;n[e]===void 0&&(n[e]=[]),n[e].indexOf(t)===-1&&n[e].push(t)}hasEventListener(e,t){let n=this._listeners;return n===void 0?!1:n[e]!==void 0&&n[e].indexOf(t)!==-1}removeEventListener(e,t){let n=this._listeners;if(n===void 0)return;let r=n[e];if(r!==void 0){let e=r.indexOf(t);e!==-1&&r.splice(e,1)}}dispatchEvent(e){let t=this._listeners;if(t===void 0)return;let n=t[e.type];if(n!==void 0){e.target=this;let t=n.slice(0);for(let n=0,r=t.length;n<r;n++)t[n].call(this,e);e.target=null}}};const L=`00.01.02.03.04.05.06.07.08.09.0a.0b.0c.0d.0e.0f.10.11.12.13.14.15.16.17.18.19.1a.1b.1c.1d.1e.1f.20.21.22.23.24.25.26.27.28.29.2a.2b.2c.2d.2e.2f.30.31.32.33.34.35.36.37.38.39.3a.3b.3c.3d.3e.3f.40.41.42.43.44.45.46.47.48.49.4a.4b.4c.4d.4e.4f.50.51.52.53.54.55.56.57.58.59.5a.5b.5c.5d.5e.5f.60.61.62.63.64.65.66.67.68.69.6a.6b.6c.6d.6e.6f.70.71.72.73.74.75.76.77.78.79.7a.7b.7c.7d.7e.7f.80.81.82.83.84.85.86.87.88.89.8a.8b.8c.8d.8e.8f.90.91.92.93.94.95.96.97.98.99.9a.9b.9c.9d.9e.9f.a0.a1.a2.a3.a4.a5.a6.a7.a8.a9.aa.ab.ac.ad.ae.af.b0.b1.b2.b3.b4.b5.b6.b7.b8.b9.ba.bb.bc.bd.be.bf.c0.c1.c2.c3.c4.c5.c6.c7.c8.c9.ca.cb.cc.cd.ce.cf.d0.d1.d2.d3.d4.d5.d6.d7.d8.d9.da.db.dc.dd.de.df.e0.e1.e2.e3.e4.e5.e6.e7.e8.e9.ea.eb.ec.ed.ee.ef.f0.f1.f2.f3.f4.f5.f6.f7.f8.f9.fa.fb.fc.fd.fe.ff`.split(`.`);Math.PI/180,180/Math.PI;function ke(){let e=Math.random()*4294967295|0,t=Math.random()*4294967295|0,n=Math.random()*4294967295|0,r=Math.random()*4294967295|0;return(L[e&255]+L[e>>8&255]+L[e>>16&255]+L[e>>24&255]+`-`+L[t&255]+L[t>>8&255]+`-`+L[t>>16&15|64]+L[t>>24&255]+`-`+L[n&63|128]+L[n>>8&255]+`-`+L[n>>16&255]+L[n>>24&255]+L[r&255]+L[r>>8&255]+L[r>>16&255]+L[r>>24&255]).toLowerCase()}function R(e,t,n){return Math.max(t,Math.min(n,e))}function Ae(e,t){return(e%t+t)%t}function je(e,t,n){return(1-n)*e+n*t}se=Symbol.iterator;var Me=class{constructor(e=0,t=0){this.x=e,this.y=t}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw Error(`index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw Error(`index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){let t=this.x,n=this.y,r=e.elements;return this.x=r[0]*t+r[3]*n+r[6],this.y=r[1]*t+r[4]*n+r[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=R(this.x,e.x,t.x),this.y=R(this.y,e.y,t.y),this}clampScalar(e,t){return this.x=R(this.x,e,t),this.y=R(this.y,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(R(n,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(R(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y;return t*t+n*n}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){let n=Math.cos(t),r=Math.sin(t),i=this.x-e.x,a=this.y-e.y;return this.x=i*n-a*r+e.x,this.y=i*r+a*n+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[se](){yield this.x,yield this.y}};re=Me,re.prototype.isVector2=!0;var Ne=class{constructor(e=0,t=0,n=0,r=1){this.isQuaternion=!0,this._x=e,this._y=t,this._z=n,this._w=r}static slerpFlat(e,t,n,r,i,a,o){let s=n[r+0],c=n[r+1],l=n[r+2],u=n[r+3],d=i[a+0],f=i[a+1],p=i[a+2],m=i[a+3];if(u!==m||s!==d||c!==f||l!==p){let e=s*d+c*f+l*p+u*m;e<0&&(d=-d,f=-f,p=-p,m=-m,e=-e);let t=1-o;if(e<.9995){let n=Math.acos(e),r=Math.sin(n);t=Math.sin(t*n)/r,o=Math.sin(o*n)/r,s=s*t+d*o,c=c*t+f*o,l=l*t+p*o,u=u*t+m*o}else{s=s*t+d*o,c=c*t+f*o,l=l*t+p*o,u=u*t+m*o;let e=1/Math.sqrt(s*s+c*c+l*l+u*u);s*=e,c*=e,l*=e,u*=e}}e[t]=s,e[t+1]=c,e[t+2]=l,e[t+3]=u}static multiplyQuaternionsFlat(e,t,n,r,i,a){let o=n[r],s=n[r+1],c=n[r+2],l=n[r+3],u=i[a],d=i[a+1],f=i[a+2],p=i[a+3];return e[t]=o*p+l*u+s*f-c*d,e[t+1]=s*p+l*d+c*u-o*f,e[t+2]=c*p+l*f+o*d-s*u,e[t+3]=l*p-o*u-s*d-c*f,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,n,r){return this._x=e,this._y=t,this._z=n,this._w=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t=!0){let n=e._x,r=e._y,i=e._z,a=e._order,o=Math.cos,s=Math.sin,c=o(n/2),l=o(r/2),u=o(i/2),d=s(n/2),f=s(r/2),p=s(i/2);switch(a){case`XYZ`:this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p;break;case`YXZ`:this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p;break;case`ZXY`:this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p;break;case`ZYX`:this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p;break;case`YZX`:this._x=d*l*u+c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u-d*f*p;break;case`XZY`:this._x=d*l*u-c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u+d*f*p;break;default:F(`Quaternion: .setFromEuler() encountered an unknown order: `+a)}return t===!0&&this._onChangeCallback(),this}setFromAxisAngle(e,t){let n=t/2,r=Math.sin(n);return this._x=e.x*r,this._y=e.y*r,this._z=e.z*r,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(e){let t=e.elements,n=t[0],r=t[4],i=t[8],a=t[1],o=t[5],s=t[9],c=t[2],l=t[6],u=t[10],d=n+o+u;if(d>0){let e=.5/Math.sqrt(d+1);this._w=.25/e,this._x=(l-s)*e,this._y=(i-c)*e,this._z=(a-r)*e}else if(n>o&&n>u){let e=2*Math.sqrt(1+n-o-u);this._w=(l-s)/e,this._x=.25*e,this._y=(r+a)/e,this._z=(i+c)/e}else if(o>u){let e=2*Math.sqrt(1+o-n-u);this._w=(i-c)/e,this._x=(r+a)/e,this._y=.25*e,this._z=(s+l)/e}else{let e=2*Math.sqrt(1+u-n-o);this._w=(a-r)/e,this._x=(i+c)/e,this._y=(s+l)/e,this._z=.25*e}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let n=e.dot(t)+1;return n<1e-8?(n=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=n):(this._x=0,this._y=-e.z,this._z=e.y,this._w=n)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=n),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(R(this.dot(e),-1,1)))}rotateTowards(e,t){let n=this.angleTo(e);if(n===0)return this;let r=Math.min(1,t/n);return this.slerp(e,r),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x*=e,this._y*=e,this._z*=e,this._w*=e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){let n=e._x,r=e._y,i=e._z,a=e._w,o=t._x,s=t._y,c=t._z,l=t._w;return this._x=n*l+a*o+r*c-i*s,this._y=r*l+a*s+i*o-n*c,this._z=i*l+a*c+n*s-r*o,this._w=a*l-n*o-r*s-i*c,this._onChangeCallback(),this}slerp(e,t){let n=e._x,r=e._y,i=e._z,a=e._w,o=this.dot(e);o<0&&(n=-n,r=-r,i=-i,a=-a,o=-o);let s=1-t;if(o<.9995){let e=Math.acos(o),c=Math.sin(e);s=Math.sin(s*e)/c,t=Math.sin(t*e)/c,this._x=this._x*s+n*t,this._y=this._y*s+r*t,this._z=this._z*s+i*t,this._w=this._w*s+a*t,this._onChangeCallback()}else this._x=this._x*s+n*t,this._y=this._y*s+r*t,this._z=this._z*s+i*t,this._w=this._w*s+a*t,this.normalize();return this}slerpQuaternions(e,t,n){return this.copy(e).slerp(t,n)}random(){let e=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),n=Math.random(),r=Math.sqrt(1-n),i=Math.sqrt(n);return this.set(r*Math.sin(e),r*Math.cos(e),i*Math.sin(t),i*Math.cos(t))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}};ce=Symbol.iterator;var z=class{constructor(e=0,t=0,n=0){this.x=e,this.y=t,this.z=n}set(e,t,n){return n===void 0&&(n=this.z),this.x=e,this.y=t,this.z=n,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw Error(`index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error(`index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(Fe.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(Fe.setFromAxisAngle(e,t))}applyMatrix3(e){let t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[3]*n+i[6]*r,this.y=i[1]*t+i[4]*n+i[7]*r,this.z=i[2]*t+i[5]*n+i[8]*r,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){let t=this.x,n=this.y,r=this.z,i=e.elements,a=1/(i[3]*t+i[7]*n+i[11]*r+i[15]);return this.x=(i[0]*t+i[4]*n+i[8]*r+i[12])*a,this.y=(i[1]*t+i[5]*n+i[9]*r+i[13])*a,this.z=(i[2]*t+i[6]*n+i[10]*r+i[14])*a,this}applyQuaternion(e){let t=this.x,n=this.y,r=this.z,i=e.x,a=e.y,o=e.z,s=e.w,c=2*(a*r-o*n),l=2*(o*t-i*r),u=2*(i*n-a*t);return this.x=t+s*c+a*u-o*l,this.y=n+s*l+o*c-i*u,this.z=r+s*u+i*l-a*c,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){let t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[4]*n+i[8]*r,this.y=i[1]*t+i[5]*n+i[9]*r,this.z=i[2]*t+i[6]*n+i[10]*r,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=R(this.x,e.x,t.x),this.y=R(this.y,e.y,t.y),this.z=R(this.z,e.z,t.z),this}clampScalar(e,t){return this.x=R(this.x,e,t),this.y=R(this.y,e,t),this.z=R(this.z,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(R(n,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){let n=e.x,r=e.y,i=e.z,a=t.x,o=t.y,s=t.z;return this.x=r*s-i*o,this.y=i*a-n*s,this.z=n*o-r*a,this}projectOnVector(e){let t=e.lengthSq();if(t===0)return this.set(0,0,0);let n=e.dot(this)/t;return this.copy(e).multiplyScalar(n)}projectOnPlane(e){return Pe.copy(this).projectOnVector(e),this.sub(Pe)}reflect(e){return this.sub(Pe.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(R(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y,r=this.z-e.z;return t*t+n*n+r*r}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,n){let r=Math.sin(t)*e;return this.x=r*Math.sin(n),this.y=Math.cos(t)*e,this.z=r*Math.cos(n),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,n){return this.x=e*Math.sin(t),this.y=n,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){let t=this.setFromMatrixColumn(e,0).length(),n=this.setFromMatrixColumn(e,1).length(),r=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=n,this.z=r,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,t*4)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,t*3)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){let e=Math.random()*Math.PI*2,t=Math.random()*2-1,n=Math.sqrt(1-t*t);return this.x=n*Math.cos(e),this.y=t,this.z=n*Math.sin(e),this}*[ce](){yield this.x,yield this.y,yield this.z}};M=z,M.prototype.isVector3=!0;const Pe=new z,Fe=new Ne;var Ie=class{constructor(e,t,n,r,i,a,o,s,c){this.elements=[1,0,0,0,1,0,0,0,1],e!==void 0&&this.set(e,t,n,r,i,a,o,s,c)}set(e,t,n,r,i,a,o,s,c){let l=this.elements;return l[0]=e,l[1]=r,l[2]=o,l[3]=t,l[4]=i,l[5]=s,l[6]=n,l[7]=a,l[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],this}extractBasis(e,t,n){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(e){let t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,r=t.elements,i=this.elements,a=n[0],o=n[3],s=n[6],c=n[1],l=n[4],u=n[7],d=n[2],f=n[5],p=n[8],m=r[0],h=r[3],g=r[6],_=r[1],v=r[4],y=r[7],b=r[2],x=r[5],S=r[8];return i[0]=a*m+o*_+s*b,i[3]=a*h+o*v+s*x,i[6]=a*g+o*y+s*S,i[1]=c*m+l*_+u*b,i[4]=c*h+l*v+u*x,i[7]=c*g+l*y+u*S,i[2]=d*m+f*_+p*b,i[5]=d*h+f*v+p*x,i[8]=d*g+f*y+p*S,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8];return t*a*l-t*o*c-n*i*l+n*o*s+r*i*c-r*a*s}invert(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8],u=l*a-o*c,d=o*s-l*i,f=c*i-a*s,p=t*u+n*d+r*f;if(p===0)return this.set(0,0,0,0,0,0,0,0,0);let m=1/p;return e[0]=u*m,e[1]=(r*c-l*n)*m,e[2]=(o*n-r*a)*m,e[3]=d*m,e[4]=(l*t-r*s)*m,e[5]=(r*i-o*t)*m,e[6]=f*m,e[7]=(n*s-c*t)*m,e[8]=(a*t-n*i)*m,this}transpose(){let e,t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){let t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,n,r,i,a,o){let s=Math.cos(i),c=Math.sin(i);return this.set(n*s,n*c,-n*(s*a+c*o)+a+e,-r*c,r*s,-r*(-c*a+s*o)+o+t,0,0,1),this}scale(e,t){return this.premultiply(Le.makeScale(e,t)),this}rotate(e){return this.premultiply(Le.makeRotation(-e)),this}translate(e,t){return this.premultiply(Le.makeTranslation(e,t)),this}makeTranslation(e,t){return e.isVector2?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,n,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){let t=this.elements,n=e.elements;for(let e=0;e<9;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<9;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e}clone(){return new this.constructor().fromArray(this.elements)}};ie=Ie,ie.prototype.isMatrix3=!0;const Le=new Ie,Re=new Ie().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),ze=new Ie().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function Be(){let e={enabled:!0,workingColorSpace:be,spaces:{},convert:function(e,t,n){return this.enabled===!1||t===n||!t||!n?e:(this.spaces[t].transfer===`srgb`&&(e.r=V(e.r),e.g=V(e.g),e.b=V(e.b)),this.spaces[t].primaries!==this.spaces[n].primaries&&(e.applyMatrix3(this.spaces[t].toXYZ),e.applyMatrix3(this.spaces[n].fromXYZ)),this.spaces[n].transfer===`srgb`&&(e.r=Ve(e.r),e.g=Ve(e.g),e.b=Ve(e.b)),e)},workingToColorSpace:function(e,t){return this.convert(e,this.workingColorSpace,t)},colorSpaceToWorking:function(e,t){return this.convert(e,t,this.workingColorSpace)},getPrimaries:function(e){return this.spaces[e].primaries},getTransfer:function(e){return e===``?xe:this.spaces[e].transfer},getToneMappingMode:function(e){return this.spaces[e].outputColorSpaceConfig.toneMappingMode||`standard`},getLuminanceCoefficients:function(e,t=this.workingColorSpace){return e.fromArray(this.spaces[t].luminanceCoefficients)},define:function(e){Object.assign(this.spaces,e)},_getMatrix:function(e,t,n){return e.copy(this.spaces[t].toXYZ).multiply(this.spaces[n].fromXYZ)},_getDrawingBufferColorSpace:function(e){return this.spaces[e].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(e=this.workingColorSpace){return this.spaces[e].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(t,n){return De(`ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace().`),e.workingToColorSpace(t,n)},toWorkingColorSpace:function(t,n){return De(`ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking().`),e.colorSpaceToWorking(t,n)}},t=[.64,.33,.3,.6,.15,.06],n=[.2126,.7152,.0722],r=[.3127,.329];return e.define({[be]:{primaries:t,whitePoint:r,transfer:xe,toXYZ:Re,fromXYZ:ze,luminanceCoefficients:n,workingColorSpaceConfig:{unpackColorSpace:P},outputColorSpaceConfig:{drawingBufferColorSpace:P}},[P]:{primaries:t,whitePoint:r,transfer:`srgb`,toXYZ:Re,fromXYZ:ze,luminanceCoefficients:n,outputColorSpaceConfig:{drawingBufferColorSpace:P}}}),e}const B=Be();function V(e){return e<.04045?e*.0773993808:(e*.9478672986+.0521327014)**2.4}function Ve(e){return e<.0031308?e*12.92:1.055*e**.41666-.055}let He;var Ue=class{static getDataURL(e,t=`image/png`){if(/^data:/i.test(e.src)||typeof HTMLCanvasElement>`u`)return e.src;let n;if(e instanceof HTMLCanvasElement)n=e;else{He===void 0&&(He=we(`canvas`)),He.width=e.width,He.height=e.height;let t=He.getContext(`2d`);e instanceof ImageData?t.putImageData(e,0,0):t.drawImage(e,0,0,e.width,e.height),n=He}return n.toDataURL(t)}static sRGBToLinear(e){if(typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement||typeof ImageBitmap<`u`&&e instanceof ImageBitmap){let t=we(`canvas`);t.width=e.width,t.height=e.height;let n=t.getContext(`2d`);n.drawImage(e,0,0,e.width,e.height);let r=n.getImageData(0,0,e.width,e.height),i=r.data;for(let e=0;e<i.length;e++)i[e]=V(i[e]/255)*255;return n.putImageData(r,0,0),t}else if(e.data){let t=e.data.slice(0);for(let e=0;e<t.length;e++)t instanceof Uint8Array||t instanceof Uint8ClampedArray?t[e]=Math.floor(V(t[e]/255)*255):t[e]=V(t[e]);return{data:t,width:e.width,height:e.height}}else return F(`ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.`),e}};let We=0;var Ge=class{constructor(e=null){this.isSource=!0,Object.defineProperty(this,\"id\",{value:We++}),this.uuid=ke(),this.data=e,this.dataReady=!0,this.version=0}getSize(e){let t=this.data;return typeof HTMLVideoElement<`u`&&t instanceof HTMLVideoElement?e.set(t.videoWidth,t.videoHeight,0):typeof VideoFrame<`u`&&t instanceof VideoFrame?e.set(t.displayWidth,t.displayHeight,0):t===null?e.set(0,0,0):e.set(t.width,t.height,t.depth||0),e}set needsUpdate(e){e===!0&&this.version++}toJSON(e){let t=e===void 0||typeof e==`string`;if(!t&&e.images[this.uuid]!==void 0)return e.images[this.uuid];let n={uuid:this.uuid,url:``},r=this.data;if(r!==null){let e;if(Array.isArray(r)){e=[];for(let t=0,n=r.length;t<n;t++)r[t].isDataTexture?e.push(Ke(r[t].image)):e.push(Ke(r[t]))}else e=Ke(r);n.url=e}return t||(e.images[this.uuid]=n),n}};function Ke(e){return typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement||typeof ImageBitmap<`u`&&e instanceof ImageBitmap?Ue.getDataURL(e):e.data?{data:Array.from(e.data),width:e.width,height:e.height,type:e.data.constructor.name}:(F(`Texture: Unable to serialize Texture.`),{})}let qe=0;const Je=new z;var Ye=class e extends Oe{constructor(t=e.DEFAULT_IMAGE,n=e.DEFAULT_MAPPING,r=de,i=de,a=1006,o=1008,s=1023,c=1009,l=e.DEFAULT_ANISOTROPY,u=``){super(),this.isTexture=!0,Object.defineProperty(this,\"id\",{value:qe++}),this.uuid=ke(),this.name=``,this.source=new Ge(t),this.mipmaps=[],this.mapping=n,this.channel=0,this.wrapS=r,this.wrapT=i,this.magFilter=a,this.minFilter=o,this.anisotropy=l,this.format=s,this.internalFormat=null,this.type=c,this.offset=new Me(0,0),this.repeat=new Me(1,1),this.center=new Me(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new Ie,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.colorSpace=u,this.userData={},this.updateRanges=[],this.version=0,this.onUpdate=null,this.renderTarget=null,this.isRenderTargetTexture=!1,this.isArrayTexture=!!(t&&t.depth&&t.depth>1),this.pmremVersion=0,this.normalized=!1}get width(){return this.source.getSize(Je).x}get height(){return this.source.getSize(Je).y}get depth(){return this.source.getSize(Je).z}get image(){return this.source.data}set image(e){this.source.data=e}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.channel=e.channel,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.normalized=e.normalized,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.colorSpace=e.colorSpace,this.renderTarget=e.renderTarget,this.isRenderTargetTexture=e.isRenderTargetTexture,this.isArrayTexture=e.isArrayTexture,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}setValues(e){for(let t in e){let n=e[t];if(n===void 0){F(`Texture.setValues(): parameter '${t}' has value of undefined.`);continue}let r=this[t];if(r===void 0){F(`Texture.setValues(): property '${t}' does not exist.`);continue}r&&n&&r.isVector2&&n.isVector2||r&&n&&r.isVector3&&n.isVector3||r&&n&&r.isMatrix3&&n.isMatrix3?r.copy(n):this[t]=n}}toJSON(e){let t=e===void 0||typeof e==`string`;if(!t&&e.textures[this.uuid]!==void 0)return e.textures[this.uuid];let n={metadata:{version:4.7,type:`Texture`,generator:`Texture.toJSON`},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,normalized:this.normalized,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(n.userData=this.userData),t||(e.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:`dispose`})}transformUv(e){if(this.mapping!==300)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case ue:e.x-=Math.floor(e.x);break;case de:e.x=e.x<0?0:1;break;case fe:Math.abs(Math.floor(e.x)%2)===1?e.x=Math.ceil(e.x)-e.x:e.x-=Math.floor(e.x);break}if(e.y<0||e.y>1)switch(this.wrapT){case ue:e.y-=Math.floor(e.y);break;case de:e.y=e.y<0?0:1;break;case fe:Math.abs(Math.floor(e.y)%2)===1?e.y=Math.ceil(e.y)-e.y:e.y-=Math.floor(e.y);break}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){e===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(e){e===!0&&this.pmremVersion++}};Ye.DEFAULT_IMAGE=null,Ye.DEFAULT_MAPPING=300,Ye.DEFAULT_ANISOTROPY=1,le=Symbol.iterator,ae=class{constructor(e=0,t=0,n=0,r=1){this.x=e,this.y=t,this.z=n,this.w=r}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,n,r){return this.x=e,this.y=t,this.z=n,this.w=r,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw Error(`index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error(`index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w===void 0?1:e.w,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){let t=this.x,n=this.y,r=this.z,i=this.w,a=e.elements;return this.x=a[0]*t+a[4]*n+a[8]*r+a[12]*i,this.y=a[1]*t+a[5]*n+a[9]*r+a[13]*i,this.z=a[2]*t+a[6]*n+a[10]*r+a[14]*i,this.w=a[3]*t+a[7]*n+a[11]*r+a[15]*i,this}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this.w/=e.w,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);let t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,n,r,i,a=.01,o=.1,s=e.elements,c=s[0],l=s[4],u=s[8],d=s[1],f=s[5],p=s[9],m=s[2],h=s[6],g=s[10];if(Math.abs(l-d)<a&&Math.abs(u-m)<a&&Math.abs(p-h)<a){if(Math.abs(l+d)<o&&Math.abs(u+m)<o&&Math.abs(p+h)<o&&Math.abs(c+f+g-3)<o)return this.set(1,0,0,0),this;t=Math.PI;let e=(c+1)/2,s=(f+1)/2,_=(g+1)/2,v=(l+d)/4,y=(u+m)/4,b=(p+h)/4;return e>s&&e>_?e<a?(n=0,r=.707106781,i=.707106781):(n=Math.sqrt(e),r=v/n,i=y/n):s>_?s<a?(n=.707106781,r=0,i=.707106781):(r=Math.sqrt(s),n=v/r,i=b/r):_<a?(n=.707106781,r=.707106781,i=0):(i=Math.sqrt(_),n=y/i,r=b/i),this.set(n,r,i,t),this}let _=Math.sqrt((h-p)*(h-p)+(u-m)*(u-m)+(d-l)*(d-l));return Math.abs(_)<.001&&(_=1),this.x=(h-p)/_,this.y=(u-m)/_,this.z=(d-l)/_,this.w=Math.acos((c+f+g-1)/2),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this.w=t[15],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this.w=Math.min(this.w,e.w),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this.w=Math.max(this.w,e.w),this}clamp(e,t){return this.x=R(this.x,e.x,t.x),this.y=R(this.y,e.y,t.y),this.z=R(this.z,e.z,t.z),this.w=R(this.w,e.w,t.w),this}clampScalar(e,t){return this.x=R(this.x,e,t),this.y=R(this.y,e,t),this.z=R(this.z,e,t),this.w=R(this.w,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(R(n,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this.w+=(e.w-this.w)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this.w=e.w+(t.w-e.w)*n,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z&&e.w===this.w}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this.w=e[t+3],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e[t+3]=this.w,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this.w=e.getW(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[le](){yield this.x,yield this.y,yield this.z,yield this.w}},ae.prototype.isVector4=!0;var Xe=class e{constructor(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],e!==void 0&&this.set(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h)}set(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h){let g=this.elements;return g[0]=e,g[4]=t,g[8]=n,g[12]=r,g[1]=i,g[5]=a,g[9]=o,g[13]=s,g[2]=c,g[6]=l,g[10]=u,g[14]=d,g[3]=f,g[7]=p,g[11]=m,g[15]=h,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new e().fromArray(this.elements)}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t[9]=n[9],t[10]=n[10],t[11]=n[11],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15],this}copyPosition(e){let t=this.elements,n=e.elements;return t[12]=n[12],t[13]=n[13],t[14]=n[14],this}setFromMatrix3(e){let t=e.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(e,t,n){return this.determinant()===0?(e.set(1,0,0),t.set(0,1,0),n.set(0,0,1),this):(e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this)}makeBasis(e,t,n){return this.set(e.x,t.x,n.x,0,e.y,t.y,n.y,0,e.z,t.z,n.z,0,0,0,0,1),this}extractRotation(e){if(e.determinant()===0)return this.identity();let t=this.elements,n=e.elements,r=1/Ze.setFromMatrixColumn(e,0).length(),i=1/Ze.setFromMatrixColumn(e,1).length(),a=1/Ze.setFromMatrixColumn(e,2).length();return t[0]=n[0]*r,t[1]=n[1]*r,t[2]=n[2]*r,t[3]=0,t[4]=n[4]*i,t[5]=n[5]*i,t[6]=n[6]*i,t[7]=0,t[8]=n[8]*a,t[9]=n[9]*a,t[10]=n[10]*a,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){let t=this.elements,n=e.x,r=e.y,i=e.z,a=Math.cos(n),o=Math.sin(n),s=Math.cos(r),c=Math.sin(r),l=Math.cos(i),u=Math.sin(i);if(e.order===`XYZ`){let e=a*l,n=a*u,r=o*l,i=o*u;t[0]=s*l,t[4]=-s*u,t[8]=c,t[1]=n+r*c,t[5]=e-i*c,t[9]=-o*s,t[2]=i-e*c,t[6]=r+n*c,t[10]=a*s}else if(e.order===`YXZ`){let e=s*l,n=s*u,r=c*l,i=c*u;t[0]=e+i*o,t[4]=r*o-n,t[8]=a*c,t[1]=a*u,t[5]=a*l,t[9]=-o,t[2]=n*o-r,t[6]=i+e*o,t[10]=a*s}else if(e.order===`ZXY`){let e=s*l,n=s*u,r=c*l,i=c*u;t[0]=e-i*o,t[4]=-a*u,t[8]=r+n*o,t[1]=n+r*o,t[5]=a*l,t[9]=i-e*o,t[2]=-a*c,t[6]=o,t[10]=a*s}else if(e.order===`ZYX`){let e=a*l,n=a*u,r=o*l,i=o*u;t[0]=s*l,t[4]=r*c-n,t[8]=e*c+i,t[1]=s*u,t[5]=i*c+e,t[9]=n*c-r,t[2]=-c,t[6]=o*s,t[10]=a*s}else if(e.order===`YZX`){let e=a*s,n=a*c,r=o*s,i=o*c;t[0]=s*l,t[4]=i-e*u,t[8]=r*u+n,t[1]=u,t[5]=a*l,t[9]=-o*l,t[2]=-c*l,t[6]=n*u+r,t[10]=e-i*u}else if(e.order===`XZY`){let e=a*s,n=a*c,r=o*s,i=o*c;t[0]=s*l,t[4]=-u,t[8]=c*l,t[1]=e*u+i,t[5]=a*l,t[9]=n*u-r,t[2]=r*u-n,t[6]=o*l,t[10]=i*u+e}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(e){return this.compose(Qe,e,$e)}lookAt(e,t,n){let r=this.elements;return W.subVectors(e,t),W.lengthSq()===0&&(W.z=1),W.normalize(),U.crossVectors(n,W),U.lengthSq()===0&&(Math.abs(n.z)===1?W.x+=1e-4:W.z+=1e-4,W.normalize(),U.crossVectors(n,W)),U.normalize(),et.crossVectors(W,U),r[0]=U.x,r[4]=et.x,r[8]=W.x,r[1]=U.y,r[5]=et.y,r[9]=W.y,r[2]=U.z,r[6]=et.z,r[10]=W.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,r=t.elements,i=this.elements,a=n[0],o=n[4],s=n[8],c=n[12],l=n[1],u=n[5],d=n[9],f=n[13],p=n[2],m=n[6],h=n[10],g=n[14],_=n[3],v=n[7],y=n[11],b=n[15],x=r[0],S=r[4],C=r[8],w=r[12],T=r[1],E=r[5],D=r[9],O=r[13],k=r[2],A=r[6],ee=r[10],te=r[14],j=r[3],ne=r[7],re=r[11],M=r[15];return i[0]=a*x+o*T+s*k+c*j,i[4]=a*S+o*E+s*A+c*ne,i[8]=a*C+o*D+s*ee+c*re,i[12]=a*w+o*O+s*te+c*M,i[1]=l*x+u*T+d*k+f*j,i[5]=l*S+u*E+d*A+f*ne,i[9]=l*C+u*D+d*ee+f*re,i[13]=l*w+u*O+d*te+f*M,i[2]=p*x+m*T+h*k+g*j,i[6]=p*S+m*E+h*A+g*ne,i[10]=p*C+m*D+h*ee+g*re,i[14]=p*w+m*O+h*te+g*M,i[3]=_*x+v*T+y*k+b*j,i[7]=_*S+v*E+y*A+b*ne,i[11]=_*C+v*D+y*ee+b*re,i[15]=_*w+v*O+y*te+b*M,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[4],r=e[8],i=e[12],a=e[1],o=e[5],s=e[9],c=e[13],l=e[2],u=e[6],d=e[10],f=e[14],p=e[3],m=e[7],h=e[11],g=e[15],_=s*f-c*d,v=o*f-c*u,y=o*d-s*u,b=a*f-c*l,x=a*d-s*l,S=a*u-o*l;return t*(m*_-h*v+g*y)-n*(p*_-h*b+g*x)+r*(p*v-m*b+g*S)-i*(p*y-m*x+h*S)}transpose(){let e=this.elements,t;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this}setPosition(e,t,n){let r=this.elements;return e.isVector3?(r[12]=e.x,r[13]=e.y,r[14]=e.z):(r[12]=e,r[13]=t,r[14]=n),this}invert(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8],u=e[9],d=e[10],f=e[11],p=e[12],m=e[13],h=e[14],g=e[15],_=t*o-n*a,v=t*s-r*a,y=t*c-i*a,b=n*s-r*o,x=n*c-i*o,S=r*c-i*s,C=l*m-u*p,w=l*h-d*p,T=l*g-f*p,E=u*h-d*m,D=u*g-f*m,O=d*g-f*h,k=_*O-v*D+y*E+b*T-x*w+S*C;if(k===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);let A=1/k;return e[0]=(o*O-s*D+c*E)*A,e[1]=(r*D-n*O-i*E)*A,e[2]=(m*S-h*x+g*b)*A,e[3]=(d*x-u*S-f*b)*A,e[4]=(s*T-a*O-c*w)*A,e[5]=(t*O-r*T+i*w)*A,e[6]=(h*y-p*S-g*v)*A,e[7]=(l*S-d*y+f*v)*A,e[8]=(a*D-o*T+c*C)*A,e[9]=(n*T-t*D-i*C)*A,e[10]=(p*x-m*y+g*_)*A,e[11]=(u*y-l*x-f*_)*A,e[12]=(o*w-a*E-s*C)*A,e[13]=(t*E-n*w+r*C)*A,e[14]=(m*v-p*b-h*_)*A,e[15]=(l*b-u*v+d*_)*A,this}scale(e){let t=this.elements,n=e.x,r=e.y,i=e.z;return t[0]*=n,t[4]*=r,t[8]*=i,t[1]*=n,t[5]*=r,t[9]*=i,t[2]*=n,t[6]*=r,t[10]*=i,t[3]*=n,t[7]*=r,t[11]*=i,this}getMaxScaleOnAxis(){let e=this.elements,t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],n=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],r=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(t,n,r))}makeTranslation(e,t,n){return e.isVector3?this.set(1,0,0,e.x,0,1,0,e.y,0,0,1,e.z,0,0,0,1):this.set(1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1),this}makeRotationX(e){let t=Math.cos(e),n=Math.sin(e);return this.set(1,0,0,0,0,t,-n,0,0,n,t,0,0,0,0,1),this}makeRotationY(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,0,n,0,0,1,0,0,-n,0,t,0,0,0,0,1),this}makeRotationZ(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,0,n,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){let n=Math.cos(t),r=Math.sin(t),i=1-n,a=e.x,o=e.y,s=e.z,c=i*a,l=i*o;return this.set(c*a+n,c*o-r*s,c*s+r*o,0,c*o+r*s,l*o+n,l*s-r*a,0,c*s-r*o,l*s+r*a,i*s*s+n,0,0,0,0,1),this}makeScale(e,t,n){return this.set(e,0,0,0,0,t,0,0,0,0,n,0,0,0,0,1),this}makeShear(e,t,n,r,i,a){return this.set(1,n,i,0,e,1,a,0,t,r,1,0,0,0,0,1),this}compose(e,t,n){let r=this.elements,i=t._x,a=t._y,o=t._z,s=t._w,c=i+i,l=a+a,u=o+o,d=i*c,f=i*l,p=i*u,m=a*l,h=a*u,g=o*u,_=s*c,v=s*l,y=s*u,b=n.x,x=n.y,S=n.z;return r[0]=(1-(m+g))*b,r[1]=(f+y)*b,r[2]=(p-v)*b,r[3]=0,r[4]=(f-y)*x,r[5]=(1-(d+g))*x,r[6]=(h+_)*x,r[7]=0,r[8]=(p+v)*S,r[9]=(h-_)*S,r[10]=(1-(d+m))*S,r[11]=0,r[12]=e.x,r[13]=e.y,r[14]=e.z,r[15]=1,this}decompose(e,t,n){let r=this.elements;e.x=r[12],e.y=r[13],e.z=r[14];let i=this.determinant();if(i===0)return n.set(1,1,1),t.identity(),this;let a=Ze.set(r[0],r[1],r[2]).length(),o=Ze.set(r[4],r[5],r[6]).length(),s=Ze.set(r[8],r[9],r[10]).length();i<0&&(a=-a),H.copy(this);let c=1/a,l=1/o,u=1/s;return H.elements[0]*=c,H.elements[1]*=c,H.elements[2]*=c,H.elements[4]*=l,H.elements[5]*=l,H.elements[6]*=l,H.elements[8]*=u,H.elements[9]*=u,H.elements[10]*=u,t.setFromRotationMatrix(H),n.x=a,n.y=o,n.z=s,this}makePerspective(e,t,n,r,i,a,o=Se,s=!1){let c=this.elements,l=2*i/(t-e),u=2*i/(n-r),d=(t+e)/(t-e),f=(n+r)/(n-r),p,m;if(s)p=i/(a-i),m=a*i/(a-i);else if(o===2e3)p=-(a+i)/(a-i),m=-2*a*i/(a-i);else if(o===2001)p=-a/(a-i),m=-a*i/(a-i);else throw Error(`THREE.Matrix4.makePerspective(): Invalid coordinate system: `+o);return c[0]=l,c[4]=0,c[8]=d,c[12]=0,c[1]=0,c[5]=u,c[9]=f,c[13]=0,c[2]=0,c[6]=0,c[10]=p,c[14]=m,c[3]=0,c[7]=0,c[11]=-1,c[15]=0,this}makeOrthographic(e,t,n,r,i,a,o=Se,s=!1){let c=this.elements,l=2/(t-e),u=2/(n-r),d=-(t+e)/(t-e),f=-(n+r)/(n-r),p,m;if(s)p=1/(a-i),m=a/(a-i);else if(o===2e3)p=-2/(a-i),m=-(a+i)/(a-i);else if(o===2001)p=-1/(a-i),m=-i/(a-i);else throw Error(`THREE.Matrix4.makeOrthographic(): Invalid coordinate system: `+o);return c[0]=l,c[4]=0,c[8]=0,c[12]=d,c[1]=0,c[5]=u,c[9]=0,c[13]=f,c[2]=0,c[6]=0,c[10]=p,c[14]=m,c[3]=0,c[7]=0,c[11]=0,c[15]=1,this}equals(e){let t=this.elements,n=e.elements;for(let e=0;e<16;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<16;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e[t+9]=n[9],e[t+10]=n[10],e[t+11]=n[11],e[t+12]=n[12],e[t+13]=n[13],e[t+14]=n[14],e[t+15]=n[15],e}};N=Xe,N.prototype.isMatrix4=!0;const Ze=new z,H=new Xe,Qe=new z(0,0,0),$e=new z(1,1,1),U=new z,et=new z,W=new z,tt=new Xe,nt=new Ne;var rt=class e{constructor(t=0,n=0,r=0,i=e.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=n,this._z=r,this._order=i}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,t,n,r=this._order){return this._x=e,this._y=t,this._z=n,this._order=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,t=this._order,n=!0){let r=e.elements,i=r[0],a=r[4],o=r[8],s=r[1],c=r[5],l=r[9],u=r[2],d=r[6],f=r[10];switch(t){case`XYZ`:this._y=Math.asin(R(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-l,f),this._z=Math.atan2(-a,i)):(this._x=Math.atan2(d,c),this._z=0);break;case`YXZ`:this._x=Math.asin(-R(l,-1,1)),Math.abs(l)<.9999999?(this._y=Math.atan2(o,f),this._z=Math.atan2(s,c)):(this._y=Math.atan2(-u,i),this._z=0);break;case`ZXY`:this._x=Math.asin(R(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-u,f),this._z=Math.atan2(-a,c)):(this._y=0,this._z=Math.atan2(s,i));break;case`ZYX`:this._y=Math.asin(-R(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(d,f),this._z=Math.atan2(s,i)):(this._x=0,this._z=Math.atan2(-a,c));break;case`YZX`:this._z=Math.asin(R(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(-l,c),this._y=Math.atan2(-u,i)):(this._x=0,this._y=Math.atan2(o,f));break;case`XZY`:this._z=Math.asin(-R(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(d,c),this._y=Math.atan2(o,i)):(this._x=Math.atan2(-l,f),this._y=0);break;default:F(`Euler: .setFromRotationMatrix() encountered an unknown order: `+t)}return this._order=t,n===!0&&this._onChangeCallback(),this}setFromQuaternion(e,t,n){return tt.makeRotationFromQuaternion(e),this.setFromRotationMatrix(tt,t,n)}setFromVector3(e,t=this._order){return this.set(e.x,e.y,e.z,t)}reorder(e){return nt.setFromEuler(this),this.setFromQuaternion(nt,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],e[3]!==void 0&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}};rt.DEFAULT_ORDER=`XYZ`;var it=class{constructor(){this.mask=1}set(e){this.mask=(1<<e|0)>>>0}enable(e){this.mask|=1<<e|0}enableAll(){this.mask=-1}toggle(e){this.mask^=1<<e|0}disable(e){this.mask&=~(1<<e|0)}disableAll(){this.mask=0}test(e){return(this.mask&e.mask)!==0}isEnabled(e){return(this.mask&(1<<e|0))!=0}};let at=0;const ot=new z,st=new Ne,G=new Xe,ct=new z,lt=new z,ut=new z,dt=new Ne,ft=new z(1,0,0),pt=new z(0,1,0),mt=new z(0,0,1),ht={type:`added`},gt={type:`removed`},_t={type:`childadded`,child:null},vt={type:`childremoved`,child:null};var yt=class e extends Oe{constructor(){super(),this.isObject3D=!0,Object.defineProperty(this,\"id\",{value:at++}),this.uuid=ke(),this.name=``,this.type=`Object3D`,this.parent=null,this.children=[],this.up=e.DEFAULT_UP.clone();let t=new z,n=new rt,r=new Ne,i=new z(1,1,1);function a(){r.setFromEuler(n,!1)}function o(){n.setFromQuaternion(r,void 0,!1)}n._onChange(a),r._onChange(o),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:n},quaternion:{configurable:!0,enumerable:!0,value:r},scale:{configurable:!0,enumerable:!0,value:i},modelViewMatrix:{value:new Xe},normalMatrix:{value:new Ie}}),this.matrix=new Xe,this.matrixWorld=new Xe,this.matrixAutoUpdate=e.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldAutoUpdate=e.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.layers=new it,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.customDepthMaterial=void 0,this.customDistanceMaterial=void 0,this.static=!1,this.userData={},this.pivot=null}onBeforeShadow(){}onAfterShadow(){}onBeforeRender(){}onAfterRender(){}applyMatrix4(e){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(e),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(e){return this.quaternion.premultiply(e),this}setRotationFromAxisAngle(e,t){this.quaternion.setFromAxisAngle(e,t)}setRotationFromEuler(e){this.quaternion.setFromEuler(e,!0)}setRotationFromMatrix(e){this.quaternion.setFromRotationMatrix(e)}setRotationFromQuaternion(e){this.quaternion.copy(e)}rotateOnAxis(e,t){return st.setFromAxisAngle(e,t),this.quaternion.multiply(st),this}rotateOnWorldAxis(e,t){return st.setFromAxisAngle(e,t),this.quaternion.premultiply(st),this}rotateX(e){return this.rotateOnAxis(ft,e)}rotateY(e){return this.rotateOnAxis(pt,e)}rotateZ(e){return this.rotateOnAxis(mt,e)}translateOnAxis(e,t){return ot.copy(e).applyQuaternion(this.quaternion),this.position.add(ot.multiplyScalar(t)),this}translateX(e){return this.translateOnAxis(ft,e)}translateY(e){return this.translateOnAxis(pt,e)}translateZ(e){return this.translateOnAxis(mt,e)}localToWorld(e){return this.updateWorldMatrix(!0,!1),e.applyMatrix4(this.matrixWorld)}worldToLocal(e){return this.updateWorldMatrix(!0,!1),e.applyMatrix4(G.copy(this.matrixWorld).invert())}lookAt(e,t,n){e.isVector3?ct.copy(e):ct.set(e,t,n);let r=this.parent;this.updateWorldMatrix(!0,!1),lt.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?G.lookAt(lt,ct,this.up):G.lookAt(ct,lt,this.up),this.quaternion.setFromRotationMatrix(G),r&&(G.extractRotation(r.matrixWorld),st.setFromRotationMatrix(G),this.quaternion.premultiply(st.invert()))}add(e){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.add(arguments[e]);return this}return e===this?(I(`Object3D.add: object can't be added as a child of itself.`,e),this):(e&&e.isObject3D?(e.removeFromParent(),e.parent=this,this.children.push(e),e.dispatchEvent(ht),_t.child=e,this.dispatchEvent(_t),_t.child=null):I(`Object3D.add: object not an instance of THREE.Object3D.`,e),this)}remove(e){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.remove(arguments[e]);return this}let t=this.children.indexOf(e);return t!==-1&&(e.parent=null,this.children.splice(t,1),e.dispatchEvent(gt),vt.child=e,this.dispatchEvent(vt),vt.child=null),this}removeFromParent(){let e=this.parent;return e!==null&&e.remove(this),this}clear(){return this.remove(...this.children)}attach(e){return this.updateWorldMatrix(!0,!1),G.copy(this.matrixWorld).invert(),e.parent!==null&&(e.parent.updateWorldMatrix(!0,!1),G.multiply(e.parent.matrixWorld)),e.applyMatrix4(G),e.removeFromParent(),e.parent=this,this.children.push(e),e.updateWorldMatrix(!1,!0),e.dispatchEvent(ht),_t.child=e,this.dispatchEvent(_t),_t.child=null,this}getObjectById(e){return this.getObjectByProperty(`id`,e)}getObjectByName(e){return this.getObjectByProperty(`name`,e)}getObjectByProperty(e,t){if(this[e]===t)return this;for(let n=0,r=this.children.length;n<r;n++){let r=this.children[n].getObjectByProperty(e,t);if(r!==void 0)return r}}getObjectsByProperty(e,t,n=[]){this[e]===t&&n.push(this);let r=this.children;for(let i=0,a=r.length;i<a;i++)r[i].getObjectsByProperty(e,t,n);return n}getWorldPosition(e){return this.updateWorldMatrix(!0,!1),e.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(lt,e,ut),e}getWorldScale(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(lt,dt,e),e}getWorldDirection(e){this.updateWorldMatrix(!0,!1);let t=this.matrixWorld.elements;return e.set(t[8],t[9],t[10]).normalize()}raycast(){}traverse(e){e(this);let t=this.children;for(let n=0,r=t.length;n<r;n++)t[n].traverse(e)}traverseVisible(e){if(this.visible===!1)return;e(this);let t=this.children;for(let n=0,r=t.length;n<r;n++)t[n].traverseVisible(e)}traverseAncestors(e){let t=this.parent;t!==null&&(e(t),t.traverseAncestors(e))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale);let e=this.pivot;if(e!==null){let t=e.x,n=e.y,r=e.z,i=this.matrix.elements;i[12]+=t-i[0]*t-i[4]*n-i[8]*r,i[13]+=n-i[1]*t-i[5]*n-i[9]*r,i[14]+=r-i[2]*t-i[6]*n-i[10]*r}this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(e){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||e)&&(this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),this.matrixWorldNeedsUpdate=!1,e=!0);let t=this.children;for(let n=0,r=t.length;n<r;n++)t[n].updateMatrixWorld(e)}updateWorldMatrix(e,t){let n=this.parent;if(e===!0&&n!==null&&n.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),t===!0){let e=this.children;for(let t=0,n=e.length;t<n;t++)e[t].updateWorldMatrix(!1,!0)}}toJSON(e){let t=e===void 0||typeof e==`string`,n={};t&&(e={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},n.metadata={version:4.7,type:`Object`,generator:`Object3D.toJSON`});let r={};r.uuid=this.uuid,r.type=this.type,this.name!==``&&(r.name=this.name),this.castShadow===!0&&(r.castShadow=!0),this.receiveShadow===!0&&(r.receiveShadow=!0),this.visible===!1&&(r.visible=!1),this.frustumCulled===!1&&(r.frustumCulled=!1),this.renderOrder!==0&&(r.renderOrder=this.renderOrder),this.static!==!1&&(r.static=this.static),Object.keys(this.userData).length>0&&(r.userData=this.userData),r.layers=this.layers.mask,r.matrix=this.matrix.toArray(),r.up=this.up.toArray(),this.pivot!==null&&(r.pivot=this.pivot.toArray()),this.matrixAutoUpdate===!1&&(r.matrixAutoUpdate=!1),this.morphTargetDictionary!==void 0&&(r.morphTargetDictionary=Object.assign({},this.morphTargetDictionary)),this.morphTargetInfluences!==void 0&&(r.morphTargetInfluences=this.morphTargetInfluences.slice()),this.isInstancedMesh&&(r.type=`InstancedMesh`,r.count=this.count,r.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(r.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(r.type=`BatchedMesh`,r.perObjectFrustumCulled=this.perObjectFrustumCulled,r.sortObjects=this.sortObjects,r.drawRanges=this._drawRanges,r.reservedRanges=this._reservedRanges,r.geometryInfo=this._geometryInfo.map(e=>({...e,boundingBox:e.boundingBox?e.boundingBox.toJSON():void 0,boundingSphere:e.boundingSphere?e.boundingSphere.toJSON():void 0})),r.instanceInfo=this._instanceInfo.map(e=>({...e})),r.availableInstanceIds=this._availableInstanceIds.slice(),r.availableGeometryIds=this._availableGeometryIds.slice(),r.nextIndexStart=this._nextIndexStart,r.nextVertexStart=this._nextVertexStart,r.geometryCount=this._geometryCount,r.maxInstanceCount=this._maxInstanceCount,r.maxVertexCount=this._maxVertexCount,r.maxIndexCount=this._maxIndexCount,r.geometryInitialized=this._geometryInitialized,r.matricesTexture=this._matricesTexture.toJSON(e),r.indirectTexture=this._indirectTexture.toJSON(e),this._colorsTexture!==null&&(r.colorsTexture=this._colorsTexture.toJSON(e)),this.boundingSphere!==null&&(r.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(r.boundingBox=this.boundingBox.toJSON()));function i(t,n){return t[n.uuid]===void 0&&(t[n.uuid]=n.toJSON(e)),n.uuid}if(this.isScene)this.background&&(this.background.isColor?r.background=this.background.toJSON():this.background.isTexture&&(r.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(r.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){r.geometry=i(e.geometries,this.geometry);let t=this.geometry.parameters;if(t!==void 0&&t.shapes!==void 0){let n=t.shapes;if(Array.isArray(n))for(let t=0,r=n.length;t<r;t++){let r=n[t];i(e.shapes,r)}else i(e.shapes,n)}}if(this.isSkinnedMesh&&(r.bindMode=this.bindMode,r.bindMatrix=this.bindMatrix.toArray(),this.skeleton!==void 0&&(i(e.skeletons,this.skeleton),r.skeleton=this.skeleton.uuid)),this.material!==void 0)if(Array.isArray(this.material)){let t=[];for(let n=0,r=this.material.length;n<r;n++)t.push(i(e.materials,this.material[n]));r.material=t}else r.material=i(e.materials,this.material);if(this.children.length>0){r.children=[];for(let t=0;t<this.children.length;t++)r.children.push(this.children[t].toJSON(e).object)}if(this.animations.length>0){r.animations=[];for(let t=0;t<this.animations.length;t++){let n=this.animations[t];r.animations.push(i(e.animations,n))}}if(t){let t=a(e.geometries),r=a(e.materials),i=a(e.textures),o=a(e.images),s=a(e.shapes),c=a(e.skeletons),l=a(e.animations),u=a(e.nodes);t.length>0&&(n.geometries=t),r.length>0&&(n.materials=r),i.length>0&&(n.textures=i),o.length>0&&(n.images=o),s.length>0&&(n.shapes=s),c.length>0&&(n.skeletons=c),l.length>0&&(n.animations=l),u.length>0&&(n.nodes=u)}return n.object=r,n;function a(e){let t=[];for(let n in e){let r=e[n];delete r.metadata,t.push(r)}return t}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.pivot=e.pivot===null?null:e.pivot.clone(),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.static=e.static,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),t===!0)for(let t=0;t<e.children.length;t++){let n=e.children[t];this.add(n.clone())}return this}};yt.DEFAULT_UP=new z(0,1,0),yt.DEFAULT_MATRIX_AUTO_UPDATE=!0,yt.DEFAULT_MATRIX_WORLD_AUTO_UPDATE=!0;const bt={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},K={h:0,s:0,l:0},xt={h:0,s:0,l:0};function St(e,t,n){return n<0&&(n+=1),n>1&&--n,n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*6*(2/3-n):e}var Ct=class{constructor(e,t,n){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,t,n)}set(e,t,n){if(t===void 0&&n===void 0){let t=e;t&&t.isColor?this.copy(t):typeof t==`number`?this.setHex(t):typeof t==`string`&&this.setStyle(t)}else this.setRGB(e,t,n);return this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=P){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,B.colorSpaceToWorking(this,t),this}setRGB(e,t,n,r=B.workingColorSpace){return this.r=e,this.g=t,this.b=n,B.colorSpaceToWorking(this,r),this}setHSL(e,t,n,r=B.workingColorSpace){if(e=Ae(e,1),t=R(t,0,1),n=R(n,0,1),t===0)this.r=this.g=this.b=n;else{let r=n<=.5?n*(1+t):n+t-n*t,i=2*n-r;this.r=St(i,r,e+1/3),this.g=St(i,r,e),this.b=St(i,r,e-1/3)}return B.colorSpaceToWorking(this,r),this}setStyle(e,t=P){function n(t){t!==void 0&&parseFloat(t)<1&&F(`Color: Alpha component of `+e+` will be ignored.`)}let r;if(r=/^(\\w+)\\(([^\\)]*)\\)/.exec(e)){let i,a=r[1],o=r[2];switch(a){case`rgb`:case`rgba`:if(i=/^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(o))return n(i[4]),this.setRGB(Math.min(255,parseInt(i[1],10))/255,Math.min(255,parseInt(i[2],10))/255,Math.min(255,parseInt(i[3],10))/255,t);if(i=/^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(o))return n(i[4]),this.setRGB(Math.min(100,parseInt(i[1],10))/100,Math.min(100,parseInt(i[2],10))/100,Math.min(100,parseInt(i[3],10))/100,t);break;case`hsl`:case`hsla`:if(i=/^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(o))return n(i[4]),this.setHSL(parseFloat(i[1])/360,parseFloat(i[2])/100,parseFloat(i[3])/100,t);break;default:F(`Color: Unknown color model `+e)}}else if(r=/^\\#([A-Fa-f\\d]+)$/.exec(e)){let n=r[1],i=n.length;if(i===3)return this.setRGB(parseInt(n.charAt(0),16)/15,parseInt(n.charAt(1),16)/15,parseInt(n.charAt(2),16)/15,t);if(i===6)return this.setHex(parseInt(n,16),t);F(`Color: Invalid hex color `+e)}else if(e&&e.length>0)return this.setColorName(e,t);return this}setColorName(e,t=P){let n=bt[e.toLowerCase()];return n===void 0?F(`Color: Unknown color `+e):this.setHex(n,t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=V(e.r),this.g=V(e.g),this.b=V(e.b),this}copyLinearToSRGB(e){return this.r=Ve(e.r),this.g=Ve(e.g),this.b=Ve(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=P){return B.workingToColorSpace(q.copy(this),e),Math.round(R(q.r*255,0,255))*65536+Math.round(R(q.g*255,0,255))*256+Math.round(R(q.b*255,0,255))}getHexString(e=P){return(`000000`+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=B.workingColorSpace){B.workingToColorSpace(q.copy(this),t);let n=q.r,r=q.g,i=q.b,a=Math.max(n,r,i),o=Math.min(n,r,i),s,c,l=(o+a)/2;if(o===a)s=0,c=0;else{let e=a-o;switch(c=l<=.5?e/(a+o):e/(2-a-o),a){case n:s=(r-i)/e+(r<i?6:0);break;case r:s=(i-n)/e+2;break;case i:s=(n-r)/e+4;break}s/=6}return e.h=s,e.s=c,e.l=l,e}getRGB(e,t=B.workingColorSpace){return B.workingToColorSpace(q.copy(this),t),e.r=q.r,e.g=q.g,e.b=q.b,e}getStyle(e=P){B.workingToColorSpace(q.copy(this),e);let t=q.r,n=q.g,r=q.b;return e===`srgb`?`rgb(${Math.round(t*255)},${Math.round(n*255)},${Math.round(r*255)})`:`color(${e} ${t.toFixed(3)} ${n.toFixed(3)} ${r.toFixed(3)})`}offsetHSL(e,t,n){return this.getHSL(K),this.setHSL(K.h+e,K.s+t,K.l+n)}add(e){return this.r+=e.r,this.g+=e.g,this.b+=e.b,this}addColors(e,t){return this.r=e.r+t.r,this.g=e.g+t.g,this.b=e.b+t.b,this}addScalar(e){return this.r+=e,this.g+=e,this.b+=e,this}sub(e){return this.r=Math.max(0,this.r-e.r),this.g=Math.max(0,this.g-e.g),this.b=Math.max(0,this.b-e.b),this}multiply(e){return this.r*=e.r,this.g*=e.g,this.b*=e.b,this}multiplyScalar(e){return this.r*=e,this.g*=e,this.b*=e,this}lerp(e,t){return this.r+=(e.r-this.r)*t,this.g+=(e.g-this.g)*t,this.b+=(e.b-this.b)*t,this}lerpColors(e,t,n){return this.r=e.r+(t.r-e.r)*n,this.g=e.g+(t.g-e.g)*n,this.b=e.b+(t.b-e.b)*n,this}lerpHSL(e,t){this.getHSL(K),e.getHSL(xt);let n=je(K.h,xt.h,t),r=je(K.s,xt.s,t),i=je(K.l,xt.l,t);return this.setHSL(n,r,i),this}setFromVector3(e){return this.r=e.x,this.g=e.y,this.b=e.z,this}applyMatrix3(e){let t=this.r,n=this.g,r=this.b,i=e.elements;return this.r=i[0]*t+i[3]*n+i[6]*r,this.g=i[1]*t+i[4]*n+i[7]*r,this.b=i[2]*t+i[5]*n+i[8]*r,this}equals(e){return e.r===this.r&&e.g===this.g&&e.b===this.b}fromArray(e,t=0){return this.r=e[t],this.g=e[t+1],this.b=e[t+2],this}toArray(e=[],t=0){return e[t]=this.r,e[t+1]=this.g,e[t+2]=this.b,e}fromBufferAttribute(e,t){return this.r=e.getX(t),this.g=e.getY(t),this.b=e.getZ(t),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}};const q=new Ct;Ct.NAMES=bt;var wt=class{constructor(e=new z(1/0,1/0,1/0),t=new z(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromArray(e){this.makeEmpty();for(let t=0,n=e.length;t<n;t+=3)this.expandByPoint(Y.fromArray(e,t));return this}setFromBufferAttribute(e){this.makeEmpty();for(let t=0,n=e.count;t<n;t++)this.expandByPoint(Y.fromBufferAttribute(e,t));return this}setFromPoints(e){this.makeEmpty();for(let t=0,n=e.length;t<n;t++)this.expandByPoint(e[t]);return this}setFromCenterAndSize(e,t){let n=Y.copy(t).multiplyScalar(.5);return this.min.copy(e).sub(n),this.max.copy(e).add(n),this}setFromObject(e,t=!1){return this.makeEmpty(),this.expandByObject(e,t)}clone(){return new this.constructor().copy(this)}copy(e){return this.min.copy(e.min),this.max.copy(e.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(e){return this.isEmpty()?e.set(0,0,0):e.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(e){return this.isEmpty()?e.set(0,0,0):e.subVectors(this.max,this.min)}expandByPoint(e){return this.min.min(e),this.max.max(e),this}expandByVector(e){return this.min.sub(e),this.max.add(e),this}expandByScalar(e){return this.min.addScalar(-e),this.max.addScalar(e),this}expandByObject(e,t=!1){e.updateWorldMatrix(!1,!1);let n=e.geometry;if(n!==void 0){let r=n.getAttribute(`position`);if(t===!0&&r!==void 0&&e.isInstancedMesh!==!0)for(let t=0,n=r.count;t<n;t++)e.isMesh===!0?e.getVertexPosition(t,Y):Y.fromBufferAttribute(r,t),Y.applyMatrix4(e.matrixWorld),this.expandByPoint(Y);else e.boundingBox===void 0?(n.boundingBox===null&&n.computeBoundingBox(),Tt.copy(n.boundingBox)):(e.boundingBox===null&&e.computeBoundingBox(),Tt.copy(e.boundingBox)),Tt.applyMatrix4(e.matrixWorld),this.union(Tt)}let r=e.children;for(let e=0,n=r.length;e<n;e++)this.expandByObject(r[e],t);return this}containsPoint(e){return e.x>=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y&&e.z>=this.min.z&&e.z<=this.max.z}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y&&e.max.z>=this.min.z&&e.min.z<=this.max.z}intersectsSphere(e){return this.clampPoint(e.center,Y),Y.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,n;return e.normal.x>0?(t=e.normal.x*this.min.x,n=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,n=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,n+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,n+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,n+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,n+=e.normal.z*this.min.z),t<=-e.constant&&n>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(At),jt.subVectors(this.max,At),Et.subVectors(e.a,At),Dt.subVectors(e.b,At),Ot.subVectors(e.c,At),X.subVectors(Dt,Et),Z.subVectors(Ot,Dt),kt.subVectors(Et,Ot);let t=[0,-X.z,X.y,0,-Z.z,Z.y,0,-kt.z,kt.y,X.z,0,-X.x,Z.z,0,-Z.x,kt.z,0,-kt.x,-X.y,X.x,0,-Z.y,Z.x,0,-kt.y,kt.x,0];return!Pt(t,Et,Dt,Ot,jt)||(t=[1,0,0,0,1,0,0,0,1],!Pt(t,Et,Dt,Ot,jt))?!1:(Mt.crossVectors(X,Z),t=[Mt.x,Mt.y,Mt.z],Pt(t,Et,Dt,Ot,jt))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,Y).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(Y).length()*.5),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()?this:(J[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),J[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),J[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),J[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),J[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),J[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),J[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),J[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(J),this)}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(e){return this.min.fromArray(e.min),this.max.fromArray(e.max),this}};const J=[new z,new z,new z,new z,new z,new z,new z,new z],Y=new z,Tt=new wt,Et=new z,Dt=new z,Ot=new z,X=new z,Z=new z,kt=new z,At=new z,jt=new z,Mt=new z,Nt=new z;function Pt(e,t,n,r,i){for(let a=0,o=e.length-3;a<=o;a+=3){Nt.fromArray(e,a);let o=i.x*Math.abs(Nt.x)+i.y*Math.abs(Nt.y)+i.z*Math.abs(Nt.z),s=t.dot(Nt),c=n.dot(Nt),l=r.dot(Nt);if(Math.max(-Math.max(s,c,l),Math.min(s,c,l))>o)return!1}return!0}function Ft(e,t){return!e||e.constructor===t?e:typeof t.BYTES_PER_ELEMENT==`number`?new t(e):Array.prototype.slice.call(e)}var It=class{constructor(e,t,n,r){this.parameterPositions=e,this._cachedIndex=0,this.resultBuffer=r===void 0?new t.constructor(n):r,this.sampleValues=t,this.valueSize=n,this.settings=null,this.DefaultSettings_={}}evaluate(e){let t=this.parameterPositions,n=this._cachedIndex,r=t[n],i=t[n-1];validate_interval:{seek:{let a;linear_scan:{forward_scan:if(!(e<r)){for(let a=n+2;;){if(r===void 0){if(e<i)break forward_scan;return n=t.length,this._cachedIndex=n,this.copySampleValue_(n-1)}if(n===a)break;if(i=r,r=t[++n],e<r)break seek}a=t.length;break linear_scan}if(!(e>=i)){let o=t[1];e<o&&(n=2,i=o);for(let a=n-2;;){if(i===void 0)return this._cachedIndex=0,this.copySampleValue_(0);if(n===a)break;if(r=i,i=t[--n-1],e>=i)break seek}a=n,n=0;break linear_scan}break validate_interval}for(;n<a;){let r=n+a>>>1;e<t[r]?a=r:n=r+1}if(r=t[n],i=t[n-1],i===void 0)return this._cachedIndex=0,this.copySampleValue_(0);if(r===void 0)return n=t.length,this._cachedIndex=n,this.copySampleValue_(n-1)}this._cachedIndex=n,this.intervalChanged_(n,i,r)}return this.interpolate_(n,i,e,r)}getSettings_(){return this.settings||this.DefaultSettings_}copySampleValue_(e){let t=this.resultBuffer,n=this.sampleValues,r=this.valueSize,i=e*r;for(let e=0;e!==r;++e)t[e]=n[i+e];return t}interpolate_(){throw Error(`call to abstract method`)}intervalChanged_(){}},Lt=class extends It{constructor(e,t,n,r){super(e,t,n,r),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0,this.DefaultSettings_={endingStart:_e,endingEnd:_e}}intervalChanged_(e,t,n){let r=this.parameterPositions,i=e-2,a=e+1,o=r[i],s=r[a];if(o===void 0)switch(this.getSettings_().endingStart){case ve:i=e,o=2*t-n;break;case ye:i=r.length-2,o=t+r[i]-r[i+1];break;default:i=e,o=n}if(s===void 0)switch(this.getSettings_().endingEnd){case ve:a=e,s=2*n-t;break;case ye:a=1,s=n+r[1]-r[0];break;default:a=e-1,s=t}let c=(n-t)*.5,l=this.valueSize;this._weightPrev=c/(t-o),this._weightNext=c/(s-n),this._offsetPrev=i*l,this._offsetNext=a*l}interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=e*o,c=s-o,l=this._offsetPrev,u=this._offsetNext,d=this._weightPrev,f=this._weightNext,p=(n-t)/(r-t),m=p*p,h=m*p,g=-d*h+2*d*m-d*p,_=(1+d)*h+(-1.5-2*d)*m+(-.5+d)*p+1,v=(-1-f)*h+(1.5+f)*m+.5*p,y=f*h-f*m;for(let e=0;e!==o;++e)i[e]=g*a[l+e]+_*a[c+e]+v*a[s+e]+y*a[u+e];return i}},Rt=class extends It{constructor(e,t,n,r){super(e,t,n,r)}interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=e*o,c=s-o,l=(n-t)/(r-t),u=1-l;for(let e=0;e!==o;++e)i[e]=a[c+e]*u+a[s+e]*l;return i}},zt=class extends It{constructor(e,t,n,r){super(e,t,n,r)}interpolate_(e){return this.copySampleValue_(e-1)}},Bt=class extends It{interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=e*o,c=s-o,l=this.settings||this.DefaultSettings_,u=l.inTangents,d=l.outTangents;if(!u||!d){let e=(n-t)/(r-t),l=1-e;for(let t=0;t!==o;++t)i[t]=a[c+t]*l+a[s+t]*e;return i}let f=o*2,p=e-1;for(let l=0;l!==o;++l){let o=a[c+l],m=a[s+l],h=p*f+l*2,g=d[h],_=d[h+1],v=e*f+l*2,y=u[v],b=u[v+1],x=(n-t)/(r-t),S,C,w,T,E;for(let e=0;e<8;e++){S=x*x,C=S*x,w=1-x,T=w*w,E=T*w;let e=E*t+3*T*x*g+3*w*S*y+C*r-n;if(Math.abs(e)<1e-10)break;let i=3*T*(g-t)+6*w*x*(y-g)+3*S*(r-y);if(Math.abs(i)<1e-10)break;x-=e/i,x=Math.max(0,Math.min(1,x))}i[l]=E*o+3*T*x*_+3*w*S*b+C*m}return i}},Q=class{constructor(e,t,n,r){if(e===void 0)throw Error(`THREE.KeyframeTrack: track name is undefined`);if(t===void 0||t.length===0)throw Error(`THREE.KeyframeTrack: no keyframes in track named `+e);this.name=e,this.times=Ft(t,this.TimeBufferType),this.values=Ft(n,this.ValueBufferType),this.setInterpolation(r||this.DefaultInterpolation)}static toJSON(e){let t=e.constructor,n;if(t.toJSON!==this.toJSON)n=t.toJSON(e);else{n={name:e.name,times:Ft(e.times,Array),values:Ft(e.values,Array)};let t=e.getInterpolation();t!==e.DefaultInterpolation&&(n.interpolation=t)}return n.type=e.ValueTypeName,n}InterpolantFactoryMethodDiscrete(e){return new zt(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodLinear(e){return new Rt(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodSmooth(e){return new Lt(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodBezier(e){let t=new Bt(this.times,this.values,this.getValueSize(),e);return this.settings&&(t.settings=this.settings),t}setInterpolation(e){let t;switch(e){case pe:t=this.InterpolantFactoryMethodDiscrete;break;case me:t=this.InterpolantFactoryMethodLinear;break;case he:t=this.InterpolantFactoryMethodSmooth;break;case ge:t=this.InterpolantFactoryMethodBezier;break}if(t===void 0){let t=`unsupported interpolation for `+this.ValueTypeName+` keyframe track named `+this.name;if(this.createInterpolant===void 0)if(e!==this.DefaultInterpolation)this.setInterpolation(this.DefaultInterpolation);else throw Error(t);return F(`KeyframeTrack:`,t),this}return this.createInterpolant=t,this}getInterpolation(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return pe;case this.InterpolantFactoryMethodLinear:return me;case this.InterpolantFactoryMethodSmooth:return he;case this.InterpolantFactoryMethodBezier:return ge}}getValueSize(){return this.values.length/this.times.length}shift(e){if(e!==0){let t=this.times;for(let n=0,r=t.length;n!==r;++n)t[n]+=e}return this}scale(e){if(e!==1){let t=this.times;for(let n=0,r=t.length;n!==r;++n)t[n]*=e}return this}trim(e,t){let n=this.times,r=n.length,i=0,a=r-1;for(;i!==r&&n[i]<e;)++i;for(;a!==-1&&n[a]>t;)--a;if(++a,i!==0||a!==r){i>=a&&(a=Math.max(a,1),i=a-1);let e=this.getValueSize();this.times=n.slice(i,a),this.values=this.values.slice(i*e,a*e)}return this}validate(){let e=!0,t=this.getValueSize();t-Math.floor(t)!==0&&(I(`KeyframeTrack: Invalid value size in track.`,this),e=!1);let n=this.times,r=this.values,i=n.length;i===0&&(I(`KeyframeTrack: Track is empty.`,this),e=!1);let a=null;for(let t=0;t!==i;t++){let r=n[t];if(typeof r==`number`&&isNaN(r)){I(`KeyframeTrack: Time is not a valid number.`,this,t,r),e=!1;break}if(a!==null&&a>r){I(`KeyframeTrack: Out of order keys.`,this,t,r,a),e=!1;break}a=r}if(r!==void 0&&Ce(r))for(let t=0,n=r.length;t!==n;++t){let n=r[t];if(isNaN(n)){I(`KeyframeTrack: Value is not a valid number.`,this,t,n),e=!1;break}}return e}optimize(){let e=this.times.slice(),t=this.values.slice(),n=this.getValueSize(),r=this.getInterpolation()===he,i=e.length-1,a=1;for(let o=1;o<i;++o){let i=!1,s=e[o];if(s!==e[o+1]&&(o!==1||s!==e[0]))if(r)i=!0;else{let e=o*n,r=e-n,a=e+n;for(let o=0;o!==n;++o){let n=t[e+o];if(n!==t[r+o]||n!==t[a+o]){i=!0;break}}}if(i){if(o!==a){e[a]=e[o];let r=o*n,i=a*n;for(let e=0;e!==n;++e)t[i+e]=t[r+e]}++a}}if(i>0){e[a]=e[i];for(let e=i*n,r=a*n,o=0;o!==n;++o)t[r+o]=t[e+o];++a}return a===e.length?(this.times=e,this.values=t):(this.times=e.slice(0,a),this.values=t.slice(0,a*n)),this}clone(){let e=this.times.slice(),t=this.values.slice(),n=this.constructor,r=new n(this.name,e,t);return r.createInterpolant=this.createInterpolant,r}};Q.prototype.ValueTypeName=``,Q.prototype.TimeBufferType=Float32Array,Q.prototype.ValueBufferType=Float32Array,Q.prototype.DefaultInterpolation=me;var Vt=class extends Q{constructor(e,t,n){super(e,t,n)}};Vt.prototype.ValueTypeName=`bool`,Vt.prototype.ValueBufferType=Array,Vt.prototype.DefaultInterpolation=pe,Vt.prototype.InterpolantFactoryMethodLinear=void 0,Vt.prototype.InterpolantFactoryMethodSmooth=void 0;var Ht=class extends Q{constructor(e,t,n,r){super(e,t,n,r)}};Ht.prototype.ValueTypeName=`color`;var Ut=class extends Q{constructor(e,t,n,r){super(e,t,n,r)}};Ut.prototype.ValueTypeName=`number`;var Wt=class extends It{constructor(e,t,n,r){super(e,t,n,r)}interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=(n-t)/(r-t),c=e*o;for(let e=c+o;c!==e;c+=4)Ne.slerpFlat(i,0,a,c-o,a,c,s);return i}},Gt=class extends Q{constructor(e,t,n,r){super(e,t,n,r)}InterpolantFactoryMethodLinear(e){return new Wt(this.times,this.values,this.getValueSize(),e)}};Gt.prototype.ValueTypeName=`quaternion`,Gt.prototype.InterpolantFactoryMethodSmooth=void 0;var Kt=class extends Q{constructor(e,t,n){super(e,t,n)}};Kt.prototype.ValueTypeName=`string`,Kt.prototype.ValueBufferType=Array,Kt.prototype.DefaultInterpolation=pe,Kt.prototype.InterpolantFactoryMethodLinear=void 0,Kt.prototype.InterpolantFactoryMethodSmooth=void 0;var qt=class extends Q{constructor(e,t,n,r){super(e,t,n,r)}};qt.prototype.ValueTypeName=`vector`;const Jt=new class{constructor(e,t,n){let r=this,i=!1,a=0,o=0,s,c=[];this.onStart=void 0,this.onLoad=e,this.onProgress=t,this.onError=n,this._abortController=null,this.itemStart=function(e){o++,i===!1&&r.onStart!==void 0&&r.onStart(e,a,o),i=!0},this.itemEnd=function(e){a++,r.onProgress!==void 0&&r.onProgress(e,a,o),a===o&&(i=!1,r.onLoad!==void 0&&r.onLoad())},this.itemError=function(e){r.onError!==void 0&&r.onError(e)},this.resolveURL=function(e){return s?s(e):e},this.setURLModifier=function(e){return s=e,this},this.addHandler=function(e,t){return c.push(e,t),this},this.removeHandler=function(e){let t=c.indexOf(e);return t!==-1&&c.splice(t,2),this},this.getHandler=function(e){for(let t=0,n=c.length;t<n;t+=2){let n=c[t],r=c[t+1];if(n.global&&(n.lastIndex=0),n.test(e))return r}return null},this.abort=function(){return this.abortController.abort(),this._abortController=null,this}}get abortController(){return this._abortController||(this._abortController=new AbortController),this._abortController}};var Yt=class{constructor(e){this.manager=e===void 0?Jt:e,this.crossOrigin=`anonymous`,this.withCredentials=!1,this.path=``,this.resourcePath=``,this.requestHeader={},typeof __THREE_DEVTOOLS__<`u`&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(`observe`,{detail:this}))}load(){}loadAsync(e,t){let n=this;return new Promise(function(r,i){n.load(e,r,t,i)})}parse(){}setCrossOrigin(e){return this.crossOrigin=e,this}setWithCredentials(e){return this.withCredentials=e,this}setPath(e){return this.path=e,this}setResourcePath(e){return this.resourcePath=e,this}setRequestHeader(e){return this.requestHeader=e,this}abort(){return this}};Yt.DEFAULT_MATERIAL_NAME=`__DEFAULT`;const Xt=RegExp(`[\\\\[\\\\]\\\\.:\\\\/]`,`g`),Zt=RegExp(`^((?:[^\\\\[\\\\]\\\\.:\\\\/]+[\\\\/:])*)([^\\\\[\\\\]:\\\\/]+)?(?:\\\\.([^\\\\[\\\\]\\\\.:\\\\/]+)(?:\\\\[(.+)\\\\])?)?\\\\.([^\\\\[\\\\]\\\\.:\\\\/]+)(?:\\\\[(.+)\\\\])?$`),Qt=[`material`,`materials`,`bones`,`map`];var $t=class{constructor(e,t,n){let r=n||$.parseTrackName(t);this._targetGroup=e,this._bindings=e.subscribe_(t,r)}getValue(e,t){this.bind();let n=this._targetGroup.nCachedObjects_,r=this._bindings[n];r!==void 0&&r.getValue(e,t)}setValue(e,t){let n=this._bindings;for(let r=this._targetGroup.nCachedObjects_,i=n.length;r!==i;++r)n[r].setValue(e,t)}bind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,n=e.length;t!==n;++t)e[t].bind()}unbind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,n=e.length;t!==n;++t)e[t].unbind()}},$=class e{constructor(t,n,r){this.path=n,this.parsedPath=r||e.parseTrackName(n),this.node=e.findNode(t,this.parsedPath.nodeName),this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,n,r){return t&&t.isAnimationObjectGroup?new e.Composite(t,n,r):new e(t,n,r)}static sanitizeNodeName(e){return e.replace(/\\s/g,`_`).replace(Xt,``)}static parseTrackName(e){let t=Zt.exec(e);if(t===null)throw Error(`PropertyBinding: Cannot parse trackName: `+e);let n={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]},r=n.nodeName&&n.nodeName.lastIndexOf(`.`);if(r!==void 0&&r!==-1){let e=n.nodeName.substring(r+1);Qt.indexOf(e)!==-1&&(n.nodeName=n.nodeName.substring(0,r),n.objectName=e)}if(n.propertyName===null||n.propertyName.length===0)throw Error(`PropertyBinding: can not parse propertyName from trackName: `+e);return n}static findNode(e,t){if(t===void 0||t===``||t===`.`||t===-1||t===e.name||t===e.uuid)return e;if(e.skeleton){let n=e.skeleton.getBoneByName(t);if(n!==void 0)return n}if(e.children){let n=function(e){for(let r=0;r<e.length;r++){let i=e[r];if(i.name===t||i.uuid===t)return i;let a=n(i.children);if(a)return a}return null},r=n(e.children);if(r)return r}return null}_getValue_unavailable(){}_setValue_unavailable(){}_getValue_direct(e,t){e[t]=this.targetObject[this.propertyName]}_getValue_array(e,t){let n=this.resolvedProperty;for(let r=0,i=n.length;r!==i;++r)e[t++]=n[r]}_getValue_arrayElement(e,t){e[t]=this.resolvedProperty[this.propertyIndex]}_getValue_toArray(e,t){this.resolvedProperty.toArray(e,t)}_setValue_direct(e,t){this.targetObject[this.propertyName]=e[t]}_setValue_direct_setNeedsUpdate(e,t){this.targetObject[this.propertyName]=e[t],this.targetObject.needsUpdate=!0}_setValue_direct_setMatrixWorldNeedsUpdate(e,t){this.targetObject[this.propertyName]=e[t],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_array(e,t){let n=this.resolvedProperty;for(let r=0,i=n.length;r!==i;++r)n[r]=e[t++]}_setValue_array_setNeedsUpdate(e,t){let n=this.resolvedProperty;for(let r=0,i=n.length;r!==i;++r)n[r]=e[t++];this.targetObject.needsUpdate=!0}_setValue_array_setMatrixWorldNeedsUpdate(e,t){let n=this.resolvedProperty;for(let r=0,i=n.length;r!==i;++r)n[r]=e[t++];this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_arrayElement(e,t){this.resolvedProperty[this.propertyIndex]=e[t]}_setValue_arrayElement_setNeedsUpdate(e,t){this.resolvedProperty[this.propertyIndex]=e[t],this.targetObject.needsUpdate=!0}_setValue_arrayElement_setMatrixWorldNeedsUpdate(e,t){this.resolvedProperty[this.propertyIndex]=e[t],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_fromArray(e,t){this.resolvedProperty.fromArray(e,t)}_setValue_fromArray_setNeedsUpdate(e,t){this.resolvedProperty.fromArray(e,t),this.targetObject.needsUpdate=!0}_setValue_fromArray_setMatrixWorldNeedsUpdate(e,t){this.resolvedProperty.fromArray(e,t),this.targetObject.matrixWorldNeedsUpdate=!0}_getValue_unbound(e,t){this.bind(),this.getValue(e,t)}_setValue_unbound(e,t){this.bind(),this.setValue(e,t)}bind(){let t=this.node,n=this.parsedPath,r=n.objectName,i=n.propertyName,a=n.propertyIndex;if(t||(t=e.findNode(this.rootNode,n.nodeName),this.node=t),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,!t){F(`PropertyBinding: No target node found for track: `+this.path+`.`);return}if(r){let e=n.objectIndex;switch(r){case`materials`:if(!t.material){I(`PropertyBinding: Can not bind to material as node does not have a material.`,this);return}if(!t.material.materials){I(`PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.`,this);return}t=t.material.materials;break;case`bones`:if(!t.skeleton){I(`PropertyBinding: Can not bind to bones as node does not have a skeleton.`,this);return}t=t.skeleton.bones;for(let n=0;n<t.length;n++)if(t[n].name===e){e=n;break}break;case`map`:if(`map`in t){t=t.map;break}if(!t.material){I(`PropertyBinding: Can not bind to material as node does not have a material.`,this);return}if(!t.material.map){I(`PropertyBinding: Can not bind to material.map as node.material does not have a map.`,this);return}t=t.material.map;break;default:if(t[r]===void 0){I(`PropertyBinding: Can not bind to objectName of node undefined.`,this);return}t=t[r]}if(e!==void 0){if(t[e]===void 0){I(`PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.`,this,t);return}t=t[e]}}let o=t[i];if(o===void 0){let e=n.nodeName;I(`PropertyBinding: Trying to update property for track: `+e+`.`+i+` but it wasn't found.`,t);return}let s=this.Versioning.None;this.targetObject=t,t.isMaterial===!0?s=this.Versioning.NeedsUpdate:t.isObject3D===!0&&(s=this.Versioning.MatrixWorldNeedsUpdate);let c=this.BindingType.Direct;if(a!==void 0){if(i===`morphTargetInfluences`){if(!t.geometry){I(`PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.`,this);return}if(!t.geometry.morphAttributes){I(`PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.`,this);return}t.morphTargetDictionary[a]!==void 0&&(a=t.morphTargetDictionary[a])}c=this.BindingType.ArrayElement,this.resolvedProperty=o,this.propertyIndex=a}else o.fromArray!==void 0&&o.toArray!==void 0?(c=this.BindingType.HasFromToArray,this.resolvedProperty=o):Array.isArray(o)?(c=this.BindingType.EntireArray,this.resolvedProperty=o):this.propertyName=i;this.getValue=this.GetterByBindingType[c],this.setValue=this.SetterByBindingTypeAndVersioning[c][s]}unbind(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}};$.Composite=$t,$.prototype.BindingType={Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},$.prototype.Versioning={None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},$.prototype.GetterByBindingType=[$.prototype._getValue_direct,$.prototype._getValue_array,$.prototype._getValue_arrayElement,$.prototype._getValue_toArray],$.prototype.SetterByBindingTypeAndVersioning=[[$.prototype._setValue_direct,$.prototype._setValue_direct_setNeedsUpdate,$.prototype._setValue_direct_setMatrixWorldNeedsUpdate],[$.prototype._setValue_array,$.prototype._setValue_array_setNeedsUpdate,$.prototype._setValue_array_setMatrixWorldNeedsUpdate],[$.prototype._setValue_arrayElement,$.prototype._setValue_arrayElement_setNeedsUpdate,$.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate],[$.prototype._setValue_fromArray,$.prototype._setValue_fromArray_setNeedsUpdate,$.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate]],oe=class{constructor(e,t,n,r){this.elements=[1,0,0,1],e!==void 0&&this.set(e,t,n,r)}identity(){return this.set(1,0,0,1),this}fromArray(e,t=0){for(let n=0;n<4;n++)this.elements[n]=e[n+t];return this}set(e,t,n,r){let i=this.elements;return i[0]=e,i[2]=t,i[1]=n,i[3]=r,this}},oe.prototype.isMatrix2=!0,typeof __THREE_DEVTOOLS__<`u`&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(`register`,{detail:{revision:`184`}})),typeof window<`u`&&(window.__THREE__?F(`WARNING: Multiple instances of Three.js being imported.`):window.__THREE__=`184`);async function en(e,t,n,r){let i=e.buffer,a=new DataView(i),o=e.schema,s=e.scale,c=e.offset,l=e.mins,u=o.reduce((e,t)=>(e[t.name]=t,e),{}),d=e=>{let t=0;for(let n=0;n<o.length;++n){if(o[n].name===e)return t;t+=o[n].size}};function f(e){let t=d(e),n=u[e].type,r=u[e].size;if(n==`signed`)switch(r){case 1:return e=>a.getInt8(e+t);case 2:return e=>a.getInt16(e+t,!0);case 4:return e=>a.getInt32(e+t,!0);default:throw Error(`Unrecognized byte size for \"signed\" numbers`)}if(n==`unsigned`)switch(r){case 1:return e=>a.getUint8(e+t);case 2:return e=>a.getUint16(e+t,!0);case 4:return e=>a.getUint32(e+t,!0);default:throw Error(`Unrecognized byte size for \"unsigned\" numbers`)}if(n==`float`)switch(r){case 4:return e=>a.getFloat32(e+t,!0);case 8:return e=>a.getFloat64(e+t,!0);default:throw Error(`Unrecognized byte size for \"float\" numbers`)}let i=JSON.stringify(u[e]);throw Error(`Invalid dimension specification for ${e}: ${i}`)}let p=o.reduce((e,t)=>e+t.size,0);if(p===0||i.byteLength===0)throw Error(`Invalid buffer: pointSize=${p}, byteLength=${i.byteLength}`);let m=Math.floor(i.byteLength/p);if(m===0)throw Error(`Buffer too small: ${i.byteLength} bytes for point size ${p}`);let h,g,_,v,y,b,x,S,C,w,T,E,D,O,k,A,ee,te,j=!1,re=new ArrayBuffer(m*4*3),M=new Float32Array(re),ie=[f(`X`),f(`Y`),f(`Z`)];if(u.Red&&u.Green&&u.Blue){h=new ArrayBuffer(m*4),x=new Uint8Array(h),D=[f(`Red`),f(`Green`),f(`Blue`)];let e,t,n,r;for(let i=0;i<m&&!j;++i)r=i*p,e=D[0](r),t=D[1](r),n=D[2](r),(e>255||t>255||n>255)&&(j=!0)}u.Intensity&&(g=new ArrayBuffer(m*4),S=new Float32Array(g),O=f(`Intensity`)),u.Classification&&(_=new ArrayBuffer(m),C=new Uint8Array(_),k=f(`Classification`)),u.ReturnNumber&&(v=new ArrayBuffer(m),w=new Uint8Array(v),A=f(`ReturnNumber`)),u.NumberOfReturns&&(y=new ArrayBuffer(m),T=new Uint8Array(y),ee=f(`NumberOfReturns`)),u.PointSourceId&&(b=new ArrayBuffer(m*2),E=new Uint16Array(b),te=f(`PointSourceId`));let ae=[0,0,0],N={min:[Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE],max:[-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE]},oe,se,ce,le,ue,de;for(let e=0;e<m;++e){let t=e*p;M&&(oe=ie[0](t)*s[0]+c[0]-l[0],se=ie[1](t)*s[1]+c[1]-l[1],ce=ie[2](t)*s[2]+c[2]-l[2],ae[0]+=oe/m,ae[1]+=se/m,ae[2]+=ce/m,N.min[0]=Math.min(N.min[0],oe),N.min[1]=Math.min(N.min[1],se),N.min[2]=Math.min(N.min[2],ce),N.max[0]=Math.max(N.max[0],oe),N.max[1]=Math.max(N.max[1],se),N.max[2]=Math.max(N.max[2],ce),M[3*e+0]=oe,M[3*e+1]=se,M[3*e+2]=ce),x&&(le=D[0](t),ue=D[1](t),de=D[2](t),j&&(le/=256,ue/=256,de/=256),x[4*e+0]=le,x[4*e+1]=ue,x[4*e+2]=de),S&&(S[e]=O(t)),C&&(C[e]=k(t)),w&&(w[e]=A(t)),T&&(T[e]=ee(t)),E&&(E[e]=te(t))}let fe=new ArrayBuffer(m*4),pe=new Uint32Array(fe);for(let e=0;e<m;++e)pe[e]=e;let me=(await ne(M,t,new z().fromArray(n),new wt(new z().fromArray(r.min),new z().fromArray(r.max)))).buffer;return{numPoints:m,tightBoundingBox:N,mean:ae,position:re,color:h,intensity:g,classification:_,returnNumber:v,numberOfReturns:y,pointSourceId:b,indices:fe,objectId:me}}\n/**\n* @license\n* Copyright 2019 Google LLC\n* SPDX-License-Identifier: Apache-2.0\n*/\nconst tn=Symbol(`Comlink.proxy`),nn=Symbol(`Comlink.endpoint`),rn=Symbol(`Comlink.releaseProxy`),an=Symbol(`Comlink.finalizer`),on=Symbol(`Comlink.thrown`),sn=e=>typeof e==`object`&&!!e||typeof e==`function`,cn=new Map([[`proxy`,{canHandle:e=>sn(e)&&e[tn],serialize(e){let{port1:t,port2:n}=new MessageChannel;return un(e,t),[n,[n]]},deserialize(e){return e.start(),pn(e)}}],[`throw`,{canHandle:e=>sn(e)&&on in e,serialize({value:e}){let t;return t=e instanceof Error?{isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:{isError:!1,value:e},[t,[]]},deserialize(e){throw e.isError?Object.assign(Error(e.value.message),e.value):e.value}}]]);function ln(e,t){for(let n of e)if(t===n||n===`*`||n instanceof RegExp&&n.test(t))return!0;return!1}function un(e,t=globalThis,n=[`*`]){t.addEventListener(`message`,function r(i){if(!i||!i.data)return;if(!ln(n,i.origin)){console.warn(`Invalid origin '${i.origin}' for comlink proxy`);return}let{id:a,type:o,path:s}=Object.assign({path:[]},i.data),c=(i.data.argumentList||[]).map(Dn),l;try{let t=s.slice(0,-1).reduce((e,t)=>e[t],e),n=s.reduce((e,t)=>e[t],e);switch(o){case`GET`:l=n;break;case`SET`:t[s.slice(-1)[0]]=Dn(i.data.value),l=!0;break;case`APPLY`:l=n.apply(t,c);break;case`CONSTRUCT`:l=Tn(new n(...c));break;case`ENDPOINT`:{let{port1:t,port2:n}=new MessageChannel;un(e,n),l=wn(t,[t])}break;case`RELEASE`:l=void 0;break;default:return}}catch(e){l={value:e,[on]:0}}Promise.resolve(l).catch(e=>({value:e,[on]:0})).then(n=>{let[i,s]=En(n);t.postMessage(Object.assign(Object.assign({},i),{id:a}),s),o===`RELEASE`&&(t.removeEventListener(`message`,r),fn(t),an in e&&typeof e[an]==`function`&&e[an]())}).catch(e=>{let[n,r]=En({value:TypeError(`Unserializable return value`),[on]:0});t.postMessage(Object.assign(Object.assign({},n),{id:a}),r)})}),t.start&&t.start()}function dn(e){return e.constructor.name===`MessagePort`}function fn(e){dn(e)&&e.close()}function pn(e,t){let n=new Map;return e.addEventListener(`message`,function(e){let{data:t}=e;if(!t||!t.id)return;let r=n.get(t.id);if(r)try{r(t)}finally{n.delete(t.id)}}),bn(e,n,[],t)}function mn(e){if(e)throw Error(`Proxy has been released and is not useable`)}function hn(e){return On(e,new Map,{type:`RELEASE`}).then(()=>{fn(e)})}const gn=new WeakMap,_n=`FinalizationRegistry`in globalThis&&new FinalizationRegistry(e=>{let t=(gn.get(e)||0)-1;gn.set(e,t),t===0&&hn(e)});function vn(e,t){let n=(gn.get(t)||0)+1;gn.set(t,n),_n&&_n.register(e,t,e)}function yn(e){_n&&_n.unregister(e)}function bn(e,t,n=[],r=function(){}){let i=!1,a=new Proxy(r,{get(r,o){if(mn(i),o===rn)return()=>{yn(a),hn(e),t.clear(),i=!0};if(o===`then`){if(n.length===0)return{then:()=>a};let r=On(e,t,{type:`GET`,path:n.map(e=>e.toString())}).then(Dn);return r.then.bind(r)}return bn(e,t,[...n,o])},set(r,a,o){mn(i);let[s,c]=En(o);return On(e,t,{type:`SET`,path:[...n,a].map(e=>e.toString()),value:s},c).then(Dn)},apply(r,a,o){mn(i);let s=n[n.length-1];if(s===nn)return On(e,t,{type:`ENDPOINT`}).then(Dn);if(s===`bind`)return bn(e,t,n.slice(0,-1));let[c,l]=Sn(o);return On(e,t,{type:`APPLY`,path:n.map(e=>e.toString()),argumentList:c},l).then(Dn)},construct(r,a){mn(i);let[o,s]=Sn(a);return On(e,t,{type:`CONSTRUCT`,path:n.map(e=>e.toString()),argumentList:o},s).then(Dn)}});return vn(a,e),a}function xn(e){return Array.prototype.concat.apply([],e)}function Sn(e){let t=e.map(En);return[t.map(e=>e[0]),xn(t.map(e=>e[1]))]}const Cn=new WeakMap;function wn(e,t){return Cn.set(e,t),e}function Tn(e){return Object.assign(e,{[tn]:!0})}function En(e){for(let[t,n]of cn)if(n.canHandle(e)){let[r,i]=n.serialize(e);return[{type:`HANDLER`,name:t,value:r},i]}return[{type:`RAW`,value:e},Cn.get(e)||[]]}function Dn(e){switch(e.type){case`HANDLER`:return cn.get(e.name).deserialize(e.value);case`RAW`:return e.value}}function On(e,t,n,r){return new Promise(i=>{let a=kn();t.set(a,i),e.start&&e.start(),e.postMessage(Object.assign({id:a},n),r)})}function kn(){return[,,,,].fill(0).map(()=>Math.floor(Math.random()*(2**53-1)).toString(16)).join(`-`)}\n/*!\n* Copyright 2022 Cognite AS\n*/\nasync function An(e,t,n,r){let i=await en(e,t,n,r);return wn(i,[i.position,i.color,i.intensity,i.classification,i.returnNumber,i.numberOfReturns,i.pointSourceId,i.indices,i.objectId].filter(jn))}function jn(e){return e!==void 0}un(An);\n//# sourceMappingURL=eptBinaryDecoder.worker-DGnrhz2t.js.map", Qf = typeof self < "u" && self.Blob && new Blob(["URL.revokeObjectURL(import.meta.url);", Zf], { type: "text/javascript;charset=utf-8" });
|
|
13988
|
+
var Zf = "/*!\n* Copyright 2021 Cognite AS\n*/\nfunction e(e,t){throw Error(t||`Unexpected object: `+e)}\n/*!\n* Copyright 2022 Cognite AS\n*/\nlet t=function(e){return e[e.Box=0]=`Box`,e[e.Cylinder=1]=`Cylinder`,e[e.Composite=2]=`Composite`,e}({});function n(e,t,n,r){let i=b(e,O.__wbindgen_malloc),a=D,o=y(r,O.__wbindgen_malloc),s=D,c=O.assign_points(i,a,t,n,o,s);if(c[2])throw S(c[1]);return S(c[0])}function r(){return{__proto__:null,\"./pointclouds_wasm_bg.js\":{__proto__:null,__wbg_Error_92b29b0548f8b746:function(e,t){return Error(m(e,t))},__wbg_Number_9a4e0ecb0fa16705:function(e){return Number(e)},__wbg_String_8564e559799eccda:function(e,t){let n=x(String(t),O.__wbindgen_malloc,O.__wbindgen_realloc),r=D;l().setInt32(e+4,r,!0),l().setInt32(e+0,n,!0)},__wbg___wbindgen_boolean_get_fa956cfa2d1bd751:function(e){let t=e,n=typeof t==`boolean`?t:void 0;return v(n)?16777215:+!!n},__wbg___wbindgen_debug_string_c25d447a39f5578f:function(e,t){let n=x(a(t),O.__wbindgen_malloc,O.__wbindgen_realloc),r=D;l().setInt32(e+4,r,!0),l().setInt32(e+0,n,!0)},__wbg___wbindgen_in_aca499c5de7ff5e5:function(e,t){return e in t},__wbg___wbindgen_is_function_1ff95bcc5517c252:function(e){return typeof e==`function`},__wbg___wbindgen_is_object_a27215656b807791:function(e){let t=e;return typeof t==`object`&&!!t},__wbg___wbindgen_is_undefined_c05833b95a3cf397:function(e){return e===void 0},__wbg___wbindgen_jsval_loose_eq_db4c3b15f63fc170:function(e,t){return e==t},__wbg___wbindgen_number_get_394265ed1e1b84ee:function(e,t){let n=t,r=typeof n==`number`?n:void 0;l().setFloat64(e+8,v(r)?0:r,!0),l().setInt32(e+0,!v(r),!0)},__wbg___wbindgen_string_get_b0ca35b86a603356:function(e,t){let n=t,r=typeof n==`string`?n:void 0;var i=v(r)?0:x(r,O.__wbindgen_malloc,O.__wbindgen_realloc),a=D;l().setInt32(e+4,a,!0),l().setInt32(e+0,i,!0)},__wbg___wbindgen_throw_344f42d3211c4765:function(e,t){throw Error(m(e,t))},__wbg_call_8a2dd23819f8a60a:function(){return _(function(e,t){return e.call(t)},arguments)},__wbg_done_89b2b13e91a60321:function(e){return e.done},__wbg_fill_ca7094d925b607bb:function(e,t,n,r){return e.fill(t,n>>>0,r>>>0)},__wbg_get_c7eb1f358a7654df:function(){return _(function(e,t){return Reflect.get(e,t)},arguments)},__wbg_get_unchecked_6e0ad6d2a41b06f6:function(e,t){return e[t>>>0]},__wbg_get_with_ref_key_6412cf3094599694:function(e,t){return e[t]},__wbg_instanceof_ArrayBuffer_4480b9e0068a8adb:function(e){let t;try{t=e instanceof ArrayBuffer}catch{t=!1}return t},__wbg_instanceof_Uint8Array_309b927aaf7a3fc7:function(e){let t;try{t=e instanceof Uint8Array}catch{t=!1}return t},__wbg_isArray_0677c962b281d01a:function(e){return Array.isArray(e)},__wbg_isSafeInteger_04f36e4056f1b851:function(e){return Number.isSafeInteger(e)},__wbg_iterator_6f722e4a93058b71:function(){return Symbol.iterator},__wbg_length_1f0964f4a5e2c6d8:function(e){return e.length},__wbg_length_370319915dc99107:function(e){return e.length},__wbg_length_98f10d1e2f4ea968:function(e){return e.length},__wbg_new_cd45aabdf6073e84:function(e){return new Uint8Array(e)},__wbg_new_with_length_82f839073dfdaa99:function(e){return new Uint16Array(e>>>0)},__wbg_next_6dbf2c0ac8cde20f:function(e){return e.next},__wbg_next_71f2aa1cb3d1e37e:function(){return _(function(e){return e.next()},arguments)},__wbg_prototypesetcall_4770620bbe4688a0:function(e,t,n){Uint8Array.prototype.set.call(s(e,t),n)},__wbg_prototypesetcall_ba9c9a7197c11933:function(e,t,n){Float32Array.prototype.set.call(o(e,t),n)},__wbg_set_index_14ccbbcec64b9031:function(e,t,n){e[t>>>0]=n},__wbg_value_a5d5488a9589444a:function(e){return e.value},__wbindgen_cast_0000000000000001:function(e,t){return m(e,t)},__wbindgen_init_externref_table:function(){let e=O.__wbindgen_externrefs,t=e.grow(4);e.set(0,void 0),e.set(t+0,void 0),e.set(t+1,null),e.set(t+2,!0),e.set(t+3,!1)}}}}function i(e){let t=O.__externref_table_alloc();return O.__wbindgen_externrefs.set(t,e),t}function a(e){let t=typeof e;if(t==`number`||t==`boolean`||e==null)return`${e}`;if(t==`string`)return`\"${e}\"`;if(t==`symbol`){let t=e.description;return t==null?`Symbol`:`Symbol(${t})`}if(t==`function`){let t=e.name;return typeof t==`string`&&t.length>0?`Function(${t})`:`Function`}if(Array.isArray(e)){let t=e.length,n=`[`;t>0&&(n+=a(e[0]));for(let r=1;r<t;r++)n+=`, `+a(e[r]);return n+=`]`,n}let n=/\\[object ([^\\]]+)\\]/.exec(toString.call(e)),r;if(n&&n.length>1)r=n[1];else return toString.call(e);if(r==`Object`)try{return`Object(`+JSON.stringify(e)+`)`}catch{return`Object`}return e instanceof Error?`${e.name}: ${e.message}\\n${e.stack}`:r}function o(e,t){return e>>>=0,d().subarray(e/4,e/4+t)}function s(e,t){return e>>>=0,g().subarray(e/1,e/1+t)}let c=null;function l(){return(c===null||c.buffer.detached===!0||c.buffer.detached===void 0&&c.buffer!==O.memory.buffer)&&(c=new DataView(O.memory.buffer)),c}let u=null;function d(){return(u===null||u.byteLength===0)&&(u=new Float32Array(O.memory.buffer)),u}let f=null;function p(){return(f===null||f.byteLength===0)&&(f=new Float64Array(O.memory.buffer)),f}function m(e,t){return T(e>>>0,t)}let h=null;function g(){return(h===null||h.byteLength===0)&&(h=new Uint8Array(O.memory.buffer)),h}function _(e,t){try{return e.apply(this,t)}catch(e){let t=i(e);O.__wbindgen_exn_store(t)}}function v(e){return e==null}function y(e,t){let n=t(e.length*8,8)>>>0;return p().set(e,n/8),D=e.length,n}function b(e,t){let n=t(e.length*4,4)>>>0;for(let t=0;t<e.length;t++){let r=i(e[t]);l().setUint32(n+4*t,r,!0)}return D=e.length,n}function x(e,t,n){if(n===void 0){let n=E.encode(e),r=t(n.length,1)>>>0;return g().subarray(r,r+n.length).set(n),D=n.length,r}let r=e.length,i=t(r,1)>>>0,a=g(),o=0;for(;o<r;o++){let t=e.charCodeAt(o);if(t>127)break;a[i+o]=t}if(o!==r){o!==0&&(e=e.slice(o)),i=n(i,r,r=o+e.length*3,1)>>>0;let t=g().subarray(i+o,i+r),a=E.encodeInto(e,t);o+=a.written,i=n(i,r,o,1)>>>0}return D=o,i}function S(e){let t=O.__wbindgen_externrefs.get(e);return O.__externref_table_dealloc(e),t}let C=new TextDecoder(`utf-8`,{ignoreBOM:!0,fatal:!0});C.decode();let w=0;function T(e,t){return w+=t,w>=2146435072&&(C=new TextDecoder(`utf-8`,{ignoreBOM:!0,fatal:!0}),C.decode(),w=t),C.decode(g().subarray(e,e+t))}const E=new TextEncoder;`encodeInto`in E||(E.encodeInto=function(e,t){let n=E.encode(e);return t.set(n),{read:e.length,written:n.length}});let D=0,O;function k(e,t){return O=e.exports,c=null,u=null,f=null,h=null,O.__wbindgen_start(),O}async function A(e,t){if(typeof Response==`function`&&e instanceof Response){if(typeof WebAssembly.instantiateStreaming==`function`)try{return await WebAssembly.instantiateStreaming(e,t)}catch(t){if(e.ok&&n(e.type)&&e.headers.get(`Content-Type`)!==`application/wasm`)console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\",t);else throw t}let r=await e.arrayBuffer();return await WebAssembly.instantiate(r,t)}else{let n=await WebAssembly.instantiate(e,t);return n instanceof WebAssembly.Instance?{instance:n,module:e}:n}function n(e){switch(e){case`basic`:case`cors`:case`default`:return!0}return!1}}async function ee(e){if(O!==void 0)return O;e!==void 0&&(Object.getPrototypeOf(e)===Object.prototype?{module_or_path:e}=e:console.warn(`using deprecated parameters for the initialization function; pass a single object instead`)),e===void 0&&(e=new URL(`data:application/wasm;base64,AGFzbQEAAAABkQIoYAJ/fwF/YAN/f38Bf2ACf38AYAF/AX9gAW8Bf2AEf39/fwBgA39/fwBgAX8AYAV/f39/fwBgAABgBH9/f38Bf2ABbwFvYAJ/bwBgBn9/f39/fwBgAm9vAW9gBX9/f39/AX9gAn9/AW9gAm9vAX9gA39/bwBgBn9/f39/fwF/YAV/f31/fwBgBX9/fn9/AGAFf398f38AYAADf39/YAJvfwFvYAFvAXxgAX8Bb2AEb39/fwFvYANvf38AYAABb2AJf39/f39/fn5+AGAAAX9gA39+fgBgBn9/f31/fwBgBn9/f35/fwBgBn9/f3x/fwBgBn9/b29/fwN/f39gBH99f38AYAR/fn9/AGAEf3x/fwACnRIlGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcx5fX3diZ19pc0FycmF5XzA2NzdjOTYyYjI4MWQwMWEABBguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMdX193YmdfbGVuZ3RoXzM3MDMxOTkxNWRjOTkxMDcABBguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMbX193YmdfbmV4dF83MWYyYWExY2IzZDFlMzdlAAsYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzG19fd2JnX2RvbmVfODliMmIxM2U5MWE2MDMyMQAEGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcxxfX3diZ192YWx1ZV9hNWQ1NDg4YTk1ODk0NDRhAAsYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzLF9fd2JnX19fd2JpbmRnZW5fbnVtYmVyX2dldF8zOTQyNjVlZDFlMWI4NGVlAAwYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzHF9fd2JnX0Vycm9yXzkyYjI5YjA1NDhmOGI3NDYAEBguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMkX193YmdfZ2V0X3VuY2hlY2tlZF82ZTBhZDZkMmE0MWIwNmY2ABgYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzK19fd2JnX19fd2JpbmRnZW5faXNfb2JqZWN0X2EyNzIxNTY1NmI4MDc3OTEABBguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMnX193YmdfZ2V0X3dpdGhfcmVmX2tleV82NDEyY2YzMDk0NTk5Njk0AA4YLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzLl9fd2JnX19fd2JpbmRnZW5faXNfdW5kZWZpbmVkX2MwNTgzM2I5NWEzY2YzOTcABBguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMkX193YmdfX193YmluZGdlbl9pbl9hY2E0OTljNWRlN2ZmNWU1ABEYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzJF9fd2JnX2lzU2FmZUludGVnZXJfMDRmMzZlNDA1NmYxYjg1MQAEGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcx1fX3diZ19OdW1iZXJfOWE0ZTBlY2IwZmExNjcwNQAZGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qczBfX3diZ19fX3diaW5kZ2VuX2pzdmFsX2xvb3NlX2VxX2RiNGMzYjE1ZjYzZmMxNzAAERguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMdX193YmdfbGVuZ3RoXzk4ZjEwZDFlMmY0ZWE5NjgABBguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMnX193YmdfcHJvdG90eXBlc2V0Y2FsbF9iYTljOWE3MTk3YzExOTMzABIYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzJl9fd2JnX25ld193aXRoX2xlbmd0aF84MmY4MzkwNzNkZmRhYTk5ABoYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzG19fd2JnX2ZpbGxfY2E3MDk0ZDkyNWI2MDdiYgAbGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcyBfX3diZ19zZXRfaW5kZXhfMTRjY2JiY2VjNjRiOTAzMQAcGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcx9fX3diZ19pdGVyYXRvcl82ZjcyMmU0YTkzMDU4YjcxAB0YLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzGl9fd2JnX2dldF9jN2ViMWYzNThhNzY1NGRmAA4YLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzLV9fd2JnX19fd2JpbmRnZW5faXNfZnVuY3Rpb25fMWZmOTViY2M1NTE3YzI1MgAEGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcxtfX3diZ19jYWxsXzhhMmRkMjM4MTlmOGE2MGEADhguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMbX193YmdfbmV4dF82ZGJmMmMwYWM4Y2RlMjBmAAsYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzHV9fd2JnX2xlbmd0aF8xZjA5NjRmNGE1ZTJjNmQ4AAQYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzJ19fd2JnX3Byb3RvdHlwZXNldGNhbGxfNDc3MDYyMGJiZTQ2ODhhMAASGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcy1fX3diZ19fX3diaW5kZ2VuX2Jvb2xlYW5fZ2V0X2ZhOTU2Y2ZhMmQxYmQ3NTEABBguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMsX193YmdfX193YmluZGdlbl9zdHJpbmdfZ2V0X2IwY2EzNWI4NmE2MDMzNTYADBguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMsX193YmdfaW5zdGFuY2VvZl9VaW50OEFycmF5XzMwOWI5MjdhYWY3YTNmYzcABBguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMtX193YmdfaW5zdGFuY2VvZl9BcnJheUJ1ZmZlcl80NDgwYjllMDA2OGE4YWRiAAQYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzGl9fd2JnX25ld19jZDQ1YWFiZGY2MDczZTg0AAsYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzHV9fd2JnX1N0cmluZ184NTY0ZTU1OTc5OWVjY2RhAAwYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzJ19fd2JnX19fd2JpbmRnZW5fdGhyb3dfMzQ0ZjQyZDMyMTFjNDc2NQACGC4vcG9pbnRjbG91ZHNfd2FzbV9iZy5qcy5fX3diZ19fX3diaW5kZ2VuX2RlYnVnX3N0cmluZ19jMjVkNDQ3YTM5ZjU1NzhmAAwYLi9wb2ludGNsb3Vkc193YXNtX2JnLmpzH19fd2JpbmRnZW5faW5pdF9leHRlcm5yZWZfdGFibGUACRguL3BvaW50Y2xvdWRzX3dhc21fYmcuanMgX193YmluZGdlbl9jYXN0XzAwMDAwMDAwMDAwMDAwMDEAEAOhAZ8BAgMFBgIBAgcCAAoCBgAAAAoAEwABAQECAAIGAh4CDQACHwUAAAIAAAAAAgAAAAcBAAICAgcABQIACAAGBiAIAgcHCAENBwgCCAUN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IiM+AgAgI0IgiCEkIAFBEGohASAIQQRrIggNAAsgAEUNAQsgAEECdCEIA0AgASABNQIAQgp+ICR8IiM+AgAgAUEEaiEBICNCIIghJCAIQQRrIggNAAsLICRQDQAgBkEoRg0NIARBsANqIAJqICQ+AgAgBkEBaiEGCyAEIAY2AtAEIBIgAyADIBJJGyIAQSlJDQALCwwQCyABIAtODQMgBEHgAGpBARA0GiAFIAQoAoACIgAgACAFSRsiAUEpTw0QIAFBAnQhASAEQdwAaiEAIARB0ARqIQIDQCABRQ0BIAEgAmohAyAAIAFqIAFBBGshASgCACIGIAMoAgAiA0YNAAsgAyAGSw0DCyAEQc8AaiAHaiEDIAchAQJAA0AgASIARQ0BIAFBAWsiASAEQc8AaiICai0AAEE5Rg0ACyABIAJqIgEgAS0AAEEBajoAACAHIABrIgFFDQMgACACakEwIAH8CwAMAwsgBEExOgBPIAoEQCAEQdAAakEwIAr8CwALIApBD00EQCADQTA6AAAgE0EBaiETIApBAmohBwwFCyAHQRFBnLjAABB1AAsMCQtBEUERQYy4wAAQdQALIApBEE0NAUEAIAdBEUGsuMAAEEcACwwFCyAEQQhqIARBzwBqIAcgE0EAIARB6AlqEEMgBCgCDCEIIAQoAggMAQsCQCAIQf8BcSIABEBBASEIQeCawABB4ZrAACACG0HgmsAAQQEgAhsgARshESAjQj+IpyABciEOIARBAjsB6AkgAEECRg0BIARBAzYC8AkgBEHlmsAANgLsCSAEQegJagwCCyAEQQM2AvAJIARB4prAADYC7AkgBEECOwHoCUEBIRFBASEIIARB6AlqDAELIARBATYC8AkgBEHomsAANgLsCSAEQegJagshACAEIAg2AswIIAQgADYCyAggBCAONgLECCAEIBE2AsAIIA0gBEHACGoQMyAEQZALaiQADAQLIwBBEGsiACQAIAAgBEHoCWo2AgwgACAEQcAIajYCCCAAQQhqQdCawAAgAEEMakHQmsAAQaCbwAAQYwALQShBKEHom8AAEHUAC0HLm8AAQRpB6JvAABCTAQALDAULDwsCfyABIRMgAkEARyEZIAEvAQ4hEiMAQfAOayIFJAAgOL0iJkL/////////B4MiJUKAgICAgICACIQgJkIBhkL+////////D4Mg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YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvY29yZS9zcmMvbnVtL2ltcC9mbHQyZGVjL3N0cmF0ZWd5L2dyaXN1LnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvYWxsb2Mvc3JjL2ZtdC5ycwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L2NvcmUvc3JjL251bS9pbXAvZGl5X2Zsb2F0LnJzAHBhY2thZ2VzL3BvaW50Y2xvdWRzL3dhc20vc3JjL3BhcnNlX2lucHV0cy5ycwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L3N0ZC9zcmMvc3lzL3RocmVhZF9sb2NhbC9ub190aHJlYWRzLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvc3RkL3NyYy9zeXMvc3luYy9yd2xvY2svbm9fdGhyZWFkcy5ycwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L2NvcmUvc3JjL251bS9pbXAvZmx0MmRlYy9zdHJhdGVneS9kcmFnb24ucnMAL3J1c3RjLzhiYWIyNmY0ZjY4ZTBlMjZmMGJiNzk2MGJlMzM0ZDViNTIwZWE0NTIvbGlicmFyeS9jb3JlL3NyYy9udW0vaW1wL2JpZ251bS5ycwAvaG9tZS9ydW5uZXIvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi93YXNtLWJpbmRnZW4tMC4yLjEyNi9zcmMvZXh0ZXJucmVmLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvY29yZS9zcmMvdW5pY29kZS9wcmludGFibGUucnMAcGFja2FnZXMvcG9pbnRjbG91ZHMvd2FzbS9zcmMvcG9pbnRfb2N0cmVlL29jdHJlZV9ub2RlLnJzAC9ydXN0Yy84YmFiMjZmNGY2OGUwZTI2ZjBiYjc5NjBiZTMzNGQ1YjUyMGVhNDUyL2xpYnJhcnkvY29yZS9zcmMvZm10L21vZC5ycwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L2FsbG9jL3NyYy9yYXdfdmVjL21vZC5ycwAvcnVzdGMvOGJhYjI2ZjRmNjhlMGUyNmYwYmI3OTYwYmUzMzRkNWI1MjBlYTQ1Mi9saWJyYXJ5L2NvcmUvc3JjL251bS9pbXAvZmx0MmRlYy9tb2QucnMAL3J1c3QvZGVwcy9kbG1hbGxvYy0wLjIuMTMvc3JjL2RsbWFsbG9jLnJzAC9ob21lL3J1bm5lci8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3NlcmRlLXdhc20tYmluZGdlbi0wLjYuNS9zcmMvbGliLnJzAC9ob21lL3J1bm5lci8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL2pzLXN5cy0wLjMuMTAzL3NyYy9saWIucnMAEGZsb2F0aW5nIHBvaW50IGDAAWAAC2NoYXJhY3RlciBgwAFgAAlpbnRlZ2VyIGDAAWAACWJvb2xlYW4gYMABYAAPbWlzc2luZyBmaWVsZCBgwAFgABFkdXBsaWNhdGUgZmllbGQgYMABYAARc3RhcnQgYnl0ZSBpbmRleCDAJiBpcyBub3QgYSBjaGFyIGJvdW5kYXJ5OyBpdCBpcyBpbnNpZGUgwAggKGJ5dGVzIMALIG9mIHN0cmluZykAD2VuZCBieXRlIGluZGV4IMAmIGlzIG5vdCBhIGNoYXIgYm91bmRhcnk7IGl0IGlzIGluc2lkZSDACCAoYnl0ZXMgwAsgb2Ygc3RyaW5nKQAISnNWYWx1ZSjAASkAAMcfEAADAAAAyh8QAAMAAABhbiBhcnJheSBvZiBsZW5ndGggM2FuIGFycmF5IG9mIGxlbmd0aCAxNmNhcGFjaXR5IG92ZXJmbG93AACPBhAAUAAAABwAAAAFAAAAMAAAAAwAAAAEAAAAMQAAADIAAAAzAEG8k8AAC9AdAQAAADQAAABhIGZvcm1hdHRpbmcgdHJhaXQgaW1wbGVtZW50YXRpb24gcmV0dXJuZWQgYW4gZXJyb3Igd2hlbiB0aGUgdW5kZXJseWluZyBzdHJlYW0gZGlkIG5vdAAACgMQAEgAAACPAgAADgAAAEVycm9yAHAABwAtAQEBAgECAQFICzAVEAFlBwIGAgIBBCMBHhtbCzoJCQEYBAEJAQMBBSsDOwkqGAEgNwEBAQQIBAEDBwoCHQE6AQEBAgQIAQkBCgIaAQICOQEEAgQCAgMDAR4CAwELAjkBBAUBAgQBFAIWBgEBOgEBAgEECAEHAwoCHgE7AQEBDAEJASgBAwE3AQEDBQMBBAcCCwIdAToBAgIBAQMDAQQHAgsCHAI5AgEBAgQIAQkBCgIdAUgBBAECAwEBCAFRAQIHDAhiAQIJCwdJAhsBAQEBATcOAQUBAgULASQJAWYEAQYBAgICGQIEAxAEDQECAgYBDwEAAwAEHAMdAh4CQAIBBwgBAgsJAS0DAQF1AiIBdgMEAgkBBgPbAgIBOgEBBwEBAQECCAYKAgEwLgIMFAQwCgQDJgkMAiAEAgY4AQECAwEBBTgIAgKYAwENAQcEAQYBAwLGQAABwyEAA40BYCAABmkCAAQBCiACUAIAAQMBBAEZAgUBlwIaEg0BJggZCwEBLAMwAQIEAgICASQBQwYCAgICDAEIAS8BMwEBAwICBQIBASoCCAHuAQIBBAEAAQAQEBAAAgAB4gGVBQADAQIFBCgDBAGlAgAEQQUAAk0GRgsxBHsBNg8pAQICCgMxBAICBwE9AyQFAQg+AQwCNAkBAQgEAgFfAwIEBgECAZ0BAwgVAjkCAQEBAQwBCQEOBwMFQwECBgEBAgEBAwQDAQEOAlUIAgMBARcBUQECBgEBAgEBAgEC6wECBAYCAQIbAlUIAgEBAmoBAQECCGUBAQECBAEFAAkBAvUBCgQEAZAEAgIEASAKKAYCBAgBCQYCAy4NAQLGAQEDAQHJBwEGAQFSFgIHAQIBAnoGAwEBAgEHAQFIAgMBAQEAAgsCNAUFAxcBAAEGDwAMAwMABTsHAAE/BFEBCwIAAgAuAhcABQMGCAgCBx4ElAMANwQyCAEOARYFAQ8ABwERAgcBAgEFZAGgBwABPQQABP4C8wECAQcCBQEAB20HAGCA8AAwMTIzNDU2Nzg5YWJj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cnN0cnVjdCBJbnB1dFNoYXBlc3RydWN0IElucHV0Qm91bmRpbmdCb3hzdHJ1Y3QgSW5wdXRPcmllbnRlZEJveABBnL7AAAsFAQAAAD0AQay+wAALBQEAAAA+AEG8vsAACwUBAAAAPwBBzL7AAAsFAQAAAEAAQdy+wAALBQEAAABBAEHsvsAACwUBAAAAQgBB/L7AAAsFAQAAAEMAQYy/wAAL5wIBAAAARAAAAGNlbnRlcl9hY2VudGVyX2JyYWRpdXNvYmplY3RfaWRjeWxpbmRlcm9yaWVudGVkX2JveG1pbm1heGludl9pbnN0YW5jZV9tYXRyaXgJBhAAOQAAAIQAAAAdAAAACQYQADkAAACKAAAAGgAAAGJ5dGUgYXJyYXl1bml0IHZhbHVlT3B0aW9uIHZhbHVlbmV3dHlwZSBzdHJ1Y3RzZXF1ZW5jZW1hcGVudW11bml0IHZhcmlhbnRuZXd0eXBlIHZhcmlhbnR0dXBsZSB2YXJpYW50c3RydWN0IHZhcmlhbnRmNjR1MTYAAAAAAAAACAAAAAQAAABFAAAARgAAAEcAAAAuMEF0dGVtcHRlZCB0byBpbml0aWFsaXplIHRocmVhZC1sb2NhbCB3aGlsZSBpdCBpcyBiZWluZyBkcm9wcGVk1wMQAF4AAABrAAAADQAAAAAAAAD//////////+ggEABBgMLAAAuhA2MHEABlAAAANQAAAA4AAAAwAAAADAAAAAQAAABIAAAASQAAAEoAAAAAAAAACAAAAAQAAABLAAAATAAAAE0AAABOAAAATwAAABAAAAAEAAAAUAAAAFEAAABSAAAAUwAAAFz26V/cAva58cFwbPJhwSTaB4xJeGVM08J9j02WnybPYXNzZXJ0aW9uIGZhaWxlZDogcHNpemUgPj0gc2l6ZSArIG1pbl9vdmVyaGVhZAAAOAcQACoAAACxBAAACQAAAGFzc2VydGlvbiBmYWlsZWQ6IHBzaXplIDw9IHNpemUgKyBtYXhfb3ZlcmhlYWQAADgHEAAqAAAAtwQAAA0AAAByd2xvY2sgb3ZlcmZsb3dlZCByZWFkIGxvY2tzNgQQAF0AAAAVAAAALAAAAAAAAAAIAAAABAAAAFQAAAAwAAAADAAAAAQAAABVAAAAcndsb2NrIGhhcyBub3QgYmVlbiBsb2NrZWQgZm9yIHJlYWRpbmcAADYEEABdAAAAPgAAAAkAAABLBRAAZwAAAIQAAAARAAAASwUQAGcAAACSAAAAEQBBpMXAAAsFVgAAAAQAfAlwcm9kdWNlcnMCCGxhbmd1YWdlAQRSdXN0AAxwcm9jZXNzZWQtYnkDBXJ1c3RjHTEuOTcuMSAoOGJhYjI2ZjRmIDIwMjYtMDctMTQpBndhbHJ1cwYwLjI2LjQMd2FzbS1iaW5kZ2VuEzAuMi4xMjYgKDIxYWM4MDRhOSkAaw90YXJnZXRfZmVhdHVyZXMGKw9tdXRhYmxlLWdsb2JhbHMrE25vbnRyYXBwaW5nLWZwdG9pbnQrC2J1bGstbWVtb3J5KwhzaWduLWV4dCsPcmVmZXJlbmNlLXR5cGVzKwptdWx0aXZhbHVl`,``+import.meta.url));let t=r();(typeof e==`string`||typeof Request==`function`&&e instanceof Request||typeof URL==`function`&&e instanceof URL)&&(e=fetch(e));let{instance:n,module:i}=await A(await e,t);return k(n,i)}\n/*!\n* Copyright 2022 Cognite AS\n*/\nasync function te(e,t,r,i){return ee().then(()=>n(e,t,r,new Float64Array(i)))}\n/*!\n* Copyright 2022 Cognite AS\n*/\nfunction j(n){switch(n.shape.shapeType){case t.Cylinder:{let e=n.shape;return{object_id:n.objectId,cylinder:{center_a:e.centerA,center_b:e.centerB,radius:e.radius}}}case t.Box:{let e=n.shape;return{object_id:n.objectId,oriented_box:{inv_instance_matrix:e.invMatrix.data}}}case t.Composite:throw Error(`Cannot assign points to objects - encountered unexpected composite object`);default:e(n.shape.shapeType)}}async function ne(e,t,n,r){let i=t.map(e=>j(e));try{return await te(i,e,{min:r.min.toArray(),max:r.max.toArray()},n.toArray())}catch(e){return Promise.reject(Error(e))}}var re,M,ie,ae,N,oe;let se,ce,le\n/**\n* @license\n* Copyright 2010-2026 Three.js Authors\n* SPDX-License-Identifier: MIT\n*/\n;const ue=1e3,de=1001,fe=1002,pe=2300,me=2301,he=2302,ge=2303,_e=2400,ve=2401,ye=2402,P=`srgb`,be=`srgb-linear`,xe=`linear`,Se=2e3;function Ce(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function we(e){return document.createElementNS(`http://www.w3.org/1999/xhtml`,e)}const Te={};function Ee(e){let t=e[0];if(typeof t==`string`&&t.startsWith(`TSL:`)){let t=e[1];t&&t.isStackTrace?e[0]+=` `+t.getLocation():e[1]=`Stack trace not available. Enable \"THREE.Node.captureStackTrace\" to capture stack traces.`}return e}function F(...e){e=Ee(e);let t=`THREE.`+e.shift();{let n=e[0];n&&n.isStackTrace?console.warn(n.getError(t)):console.warn(t,...e)}}function I(...e){e=Ee(e);let t=`THREE.`+e.shift();{let n=e[0];n&&n.isStackTrace?console.error(n.getError(t)):console.error(t,...e)}}function De(...e){let t=e.join(` `);t in Te||(Te[t]=!0,F(...e))}var Oe=class{addEventListener(e,t){this._listeners===void 0&&(this._listeners={});let n=this._listeners;n[e]===void 0&&(n[e]=[]),n[e].indexOf(t)===-1&&n[e].push(t)}hasEventListener(e,t){let n=this._listeners;return n!==void 0&&n[e]!==void 0&&n[e].indexOf(t)!==-1}removeEventListener(e,t){let n=this._listeners;if(n===void 0)return;let r=n[e];if(r!==void 0){let e=r.indexOf(t);e!==-1&&r.splice(e,1)}}dispatchEvent(e){let t=this._listeners;if(t===void 0)return;let n=t[e.type];if(n!==void 0){e.target=this;let t=n.slice(0);for(let n=0,r=t.length;n<r;n++)t[n].call(this,e);e.target=null}}};const L=`00.01.02.03.04.05.06.07.08.09.0a.0b.0c.0d.0e.0f.10.11.12.13.14.15.16.17.18.19.1a.1b.1c.1d.1e.1f.20.21.22.23.24.25.26.27.28.29.2a.2b.2c.2d.2e.2f.30.31.32.33.34.35.36.37.38.39.3a.3b.3c.3d.3e.3f.40.41.42.43.44.45.46.47.48.49.4a.4b.4c.4d.4e.4f.50.51.52.53.54.55.56.57.58.59.5a.5b.5c.5d.5e.5f.60.61.62.63.64.65.66.67.68.69.6a.6b.6c.6d.6e.6f.70.71.72.73.74.75.76.77.78.79.7a.7b.7c.7d.7e.7f.80.81.82.83.84.85.86.87.88.89.8a.8b.8c.8d.8e.8f.90.91.92.93.94.95.96.97.98.99.9a.9b.9c.9d.9e.9f.a0.a1.a2.a3.a4.a5.a6.a7.a8.a9.aa.ab.ac.ad.ae.af.b0.b1.b2.b3.b4.b5.b6.b7.b8.b9.ba.bb.bc.bd.be.bf.c0.c1.c2.c3.c4.c5.c6.c7.c8.c9.ca.cb.cc.cd.ce.cf.d0.d1.d2.d3.d4.d5.d6.d7.d8.d9.da.db.dc.dd.de.df.e0.e1.e2.e3.e4.e5.e6.e7.e8.e9.ea.eb.ec.ed.ee.ef.f0.f1.f2.f3.f4.f5.f6.f7.f8.f9.fa.fb.fc.fd.fe.ff`.split(`.`);Math.PI/180,180/Math.PI;function ke(){let e=Math.random()*4294967295|0,t=Math.random()*4294967295|0,n=Math.random()*4294967295|0,r=Math.random()*4294967295|0;return(L[e&255]+L[e>>8&255]+L[e>>16&255]+L[e>>24&255]+`-`+L[t&255]+L[t>>8&255]+`-`+L[t>>16&15|64]+L[t>>24&255]+`-`+L[n&63|128]+L[n>>8&255]+`-`+L[n>>16&255]+L[n>>24&255]+L[r&255]+L[r>>8&255]+L[r>>16&255]+L[r>>24&255]).toLowerCase()}function R(e,t,n){return Math.max(t,Math.min(n,e))}function Ae(e,t){return(e%t+t)%t}function je(e,t,n){return(1-n)*e+n*t}se=Symbol.iterator;var Me=class{constructor(e=0,t=0){this.x=e,this.y=t}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw Error(`index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw Error(`index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){let t=this.x,n=this.y,r=e.elements;return this.x=r[0]*t+r[3]*n+r[6],this.y=r[1]*t+r[4]*n+r[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=R(this.x,e.x,t.x),this.y=R(this.y,e.y,t.y),this}clampScalar(e,t){return this.x=R(this.x,e,t),this.y=R(this.y,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(R(n,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(R(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y;return t*t+n*n}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){let n=Math.cos(t),r=Math.sin(t),i=this.x-e.x,a=this.y-e.y;return this.x=i*n-a*r+e.x,this.y=i*r+a*n+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[se](){yield this.x,yield this.y}};re=Me,re.prototype.isVector2=!0;var Ne=class{constructor(e=0,t=0,n=0,r=1){this.isQuaternion=!0,this._x=e,this._y=t,this._z=n,this._w=r}static slerpFlat(e,t,n,r,i,a,o){let s=n[r+0],c=n[r+1],l=n[r+2],u=n[r+3],d=i[a+0],f=i[a+1],p=i[a+2],m=i[a+3];if(u!==m||s!==d||c!==f||l!==p){let e=s*d+c*f+l*p+u*m;e<0&&(d=-d,f=-f,p=-p,m=-m,e=-e);let t=1-o;if(e<.9995){let n=Math.acos(e),r=Math.sin(n);t=Math.sin(t*n)/r,o=Math.sin(o*n)/r,s=s*t+d*o,c=c*t+f*o,l=l*t+p*o,u=u*t+m*o}else{s=s*t+d*o,c=c*t+f*o,l=l*t+p*o,u=u*t+m*o;let e=1/Math.sqrt(s*s+c*c+l*l+u*u);s*=e,c*=e,l*=e,u*=e}}e[t]=s,e[t+1]=c,e[t+2]=l,e[t+3]=u}static multiplyQuaternionsFlat(e,t,n,r,i,a){let o=n[r],s=n[r+1],c=n[r+2],l=n[r+3],u=i[a],d=i[a+1],f=i[a+2],p=i[a+3];return e[t]=o*p+l*u+s*f-c*d,e[t+1]=s*p+l*d+c*u-o*f,e[t+2]=c*p+l*f+o*d-s*u,e[t+3]=l*p-o*u-s*d-c*f,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,n,r){return this._x=e,this._y=t,this._z=n,this._w=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t=!0){let n=e._x,r=e._y,i=e._z,a=e._order,o=Math.cos,s=Math.sin,c=o(n/2),l=o(r/2),u=o(i/2),d=s(n/2),f=s(r/2),p=s(i/2);switch(a){case`XYZ`:this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p;break;case`YXZ`:this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p;break;case`ZXY`:this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p;break;case`ZYX`:this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p;break;case`YZX`:this._x=d*l*u+c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u-d*f*p;break;case`XZY`:this._x=d*l*u-c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u+d*f*p;break;default:F(`Quaternion: .setFromEuler() encountered an unknown order: `+a)}return t===!0&&this._onChangeCallback(),this}setFromAxisAngle(e,t){let n=t/2,r=Math.sin(n);return this._x=e.x*r,this._y=e.y*r,this._z=e.z*r,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(e){let t=e.elements,n=t[0],r=t[4],i=t[8],a=t[1],o=t[5],s=t[9],c=t[2],l=t[6],u=t[10],d=n+o+u;if(d>0){let e=.5/Math.sqrt(d+1);this._w=.25/e,this._x=(l-s)*e,this._y=(i-c)*e,this._z=(a-r)*e}else if(n>o&&n>u){let e=2*Math.sqrt(1+n-o-u);this._w=(l-s)/e,this._x=.25*e,this._y=(r+a)/e,this._z=(i+c)/e}else if(o>u){let e=2*Math.sqrt(1+o-n-u);this._w=(i-c)/e,this._x=(r+a)/e,this._y=.25*e,this._z=(s+l)/e}else{let e=2*Math.sqrt(1+u-n-o);this._w=(a-r)/e,this._x=(i+c)/e,this._y=(s+l)/e,this._z=.25*e}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let n=e.dot(t)+1;return n<1e-8?(n=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=n):(this._x=0,this._y=-e.z,this._z=e.y,this._w=n)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=n),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(R(this.dot(e),-1,1)))}rotateTowards(e,t){let n=this.angleTo(e);if(n===0)return this;let r=Math.min(1,t/n);return this.slerp(e,r),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x*=e,this._y*=e,this._z*=e,this._w*=e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){let n=e._x,r=e._y,i=e._z,a=e._w,o=t._x,s=t._y,c=t._z,l=t._w;return this._x=n*l+a*o+r*c-i*s,this._y=r*l+a*s+i*o-n*c,this._z=i*l+a*c+n*s-r*o,this._w=a*l-n*o-r*s-i*c,this._onChangeCallback(),this}slerp(e,t){let n=e._x,r=e._y,i=e._z,a=e._w,o=this.dot(e);o<0&&(n=-n,r=-r,i=-i,a=-a,o=-o);let s=1-t;if(o<.9995){let e=Math.acos(o),c=Math.sin(e);s=Math.sin(s*e)/c,t=Math.sin(t*e)/c,this._x=this._x*s+n*t,this._y=this._y*s+r*t,this._z=this._z*s+i*t,this._w=this._w*s+a*t,this._onChangeCallback()}else this._x=this._x*s+n*t,this._y=this._y*s+r*t,this._z=this._z*s+i*t,this._w=this._w*s+a*t,this.normalize();return this}slerpQuaternions(e,t,n){return this.copy(e).slerp(t,n)}random(){let e=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),n=Math.random(),r=Math.sqrt(1-n),i=Math.sqrt(n);return this.set(r*Math.sin(e),r*Math.cos(e),i*Math.sin(t),i*Math.cos(t))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}};ce=Symbol.iterator;var z=class{constructor(e=0,t=0,n=0){this.x=e,this.y=t,this.z=n}set(e,t,n){return n===void 0&&(n=this.z),this.x=e,this.y=t,this.z=n,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw Error(`index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error(`index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(Fe.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(Fe.setFromAxisAngle(e,t))}applyMatrix3(e){let t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[3]*n+i[6]*r,this.y=i[1]*t+i[4]*n+i[7]*r,this.z=i[2]*t+i[5]*n+i[8]*r,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){let t=this.x,n=this.y,r=this.z,i=e.elements,a=1/(i[3]*t+i[7]*n+i[11]*r+i[15]);return this.x=(i[0]*t+i[4]*n+i[8]*r+i[12])*a,this.y=(i[1]*t+i[5]*n+i[9]*r+i[13])*a,this.z=(i[2]*t+i[6]*n+i[10]*r+i[14])*a,this}applyQuaternion(e){let t=this.x,n=this.y,r=this.z,i=e.x,a=e.y,o=e.z,s=e.w,c=2*(a*r-o*n),l=2*(o*t-i*r),u=2*(i*n-a*t);return this.x=t+s*c+a*u-o*l,this.y=n+s*l+o*c-i*u,this.z=r+s*u+i*l-a*c,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){let t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[4]*n+i[8]*r,this.y=i[1]*t+i[5]*n+i[9]*r,this.z=i[2]*t+i[6]*n+i[10]*r,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=R(this.x,e.x,t.x),this.y=R(this.y,e.y,t.y),this.z=R(this.z,e.z,t.z),this}clampScalar(e,t){return this.x=R(this.x,e,t),this.y=R(this.y,e,t),this.z=R(this.z,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(R(n,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){let n=e.x,r=e.y,i=e.z,a=t.x,o=t.y,s=t.z;return this.x=r*s-i*o,this.y=i*a-n*s,this.z=n*o-r*a,this}projectOnVector(e){let t=e.lengthSq();if(t===0)return this.set(0,0,0);let n=e.dot(this)/t;return this.copy(e).multiplyScalar(n)}projectOnPlane(e){return Pe.copy(this).projectOnVector(e),this.sub(Pe)}reflect(e){return this.sub(Pe.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(R(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y,r=this.z-e.z;return t*t+n*n+r*r}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,n){let r=Math.sin(t)*e;return this.x=r*Math.sin(n),this.y=Math.cos(t)*e,this.z=r*Math.cos(n),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,n){return this.x=e*Math.sin(t),this.y=n,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){let t=this.setFromMatrixColumn(e,0).length(),n=this.setFromMatrixColumn(e,1).length(),r=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=n,this.z=r,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,t*4)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,t*3)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){let e=Math.random()*Math.PI*2,t=Math.random()*2-1,n=Math.sqrt(1-t*t);return this.x=n*Math.cos(e),this.y=t,this.z=n*Math.sin(e),this}*[ce](){yield this.x,yield this.y,yield this.z}};M=z,M.prototype.isVector3=!0;const Pe=new z,Fe=new Ne;var Ie=class{constructor(e,t,n,r,i,a,o,s,c){this.elements=[1,0,0,0,1,0,0,0,1],e!==void 0&&this.set(e,t,n,r,i,a,o,s,c)}set(e,t,n,r,i,a,o,s,c){let l=this.elements;return l[0]=e,l[1]=r,l[2]=o,l[3]=t,l[4]=i,l[5]=s,l[6]=n,l[7]=a,l[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],this}extractBasis(e,t,n){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(e){let t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,r=t.elements,i=this.elements,a=n[0],o=n[3],s=n[6],c=n[1],l=n[4],u=n[7],d=n[2],f=n[5],p=n[8],m=r[0],h=r[3],g=r[6],_=r[1],v=r[4],y=r[7],b=r[2],x=r[5],S=r[8];return i[0]=a*m+o*_+s*b,i[3]=a*h+o*v+s*x,i[6]=a*g+o*y+s*S,i[1]=c*m+l*_+u*b,i[4]=c*h+l*v+u*x,i[7]=c*g+l*y+u*S,i[2]=d*m+f*_+p*b,i[5]=d*h+f*v+p*x,i[8]=d*g+f*y+p*S,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8];return t*a*l-t*o*c-n*i*l+n*o*s+r*i*c-r*a*s}invert(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8],u=l*a-o*c,d=o*s-l*i,f=c*i-a*s,p=t*u+n*d+r*f;if(p===0)return this.set(0,0,0,0,0,0,0,0,0);let m=1/p;return e[0]=u*m,e[1]=(r*c-l*n)*m,e[2]=(o*n-r*a)*m,e[3]=d*m,e[4]=(l*t-r*s)*m,e[5]=(r*i-o*t)*m,e[6]=f*m,e[7]=(n*s-c*t)*m,e[8]=(a*t-n*i)*m,this}transpose(){let e,t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){let t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,n,r,i,a,o){let s=Math.cos(i),c=Math.sin(i);return this.set(n*s,n*c,-n*(s*a+c*o)+a+e,-r*c,r*s,-r*(-c*a+s*o)+o+t,0,0,1),this}scale(e,t){return this.premultiply(Le.makeScale(e,t)),this}rotate(e){return this.premultiply(Le.makeRotation(-e)),this}translate(e,t){return this.premultiply(Le.makeTranslation(e,t)),this}makeTranslation(e,t){return e.isVector2?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,n,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){let t=this.elements,n=e.elements;for(let e=0;e<9;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<9;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e}clone(){return new this.constructor().fromArray(this.elements)}};ie=Ie,ie.prototype.isMatrix3=!0;const Le=new Ie,Re=new Ie().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),ze=new Ie().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function Be(){let e={enabled:!0,workingColorSpace:be,spaces:{},convert:function(e,t,n){return this.enabled===!1||t===n||!t||!n?e:(this.spaces[t].transfer===`srgb`&&(e.r=V(e.r),e.g=V(e.g),e.b=V(e.b)),this.spaces[t].primaries!==this.spaces[n].primaries&&(e.applyMatrix3(this.spaces[t].toXYZ),e.applyMatrix3(this.spaces[n].fromXYZ)),this.spaces[n].transfer===`srgb`&&(e.r=Ve(e.r),e.g=Ve(e.g),e.b=Ve(e.b)),e)},workingToColorSpace:function(e,t){return this.convert(e,this.workingColorSpace,t)},colorSpaceToWorking:function(e,t){return this.convert(e,t,this.workingColorSpace)},getPrimaries:function(e){return this.spaces[e].primaries},getTransfer:function(e){return e===``?xe:this.spaces[e].transfer},getToneMappingMode:function(e){return this.spaces[e].outputColorSpaceConfig.toneMappingMode||`standard`},getLuminanceCoefficients:function(e,t=this.workingColorSpace){return e.fromArray(this.spaces[t].luminanceCoefficients)},define:function(e){Object.assign(this.spaces,e)},_getMatrix:function(e,t,n){return e.copy(this.spaces[t].toXYZ).multiply(this.spaces[n].fromXYZ)},_getDrawingBufferColorSpace:function(e){return this.spaces[e].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(e=this.workingColorSpace){return this.spaces[e].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(t,n){return De(`ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace().`),e.workingToColorSpace(t,n)},toWorkingColorSpace:function(t,n){return De(`ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking().`),e.colorSpaceToWorking(t,n)}},t=[.64,.33,.3,.6,.15,.06],n=[.2126,.7152,.0722],r=[.3127,.329];return e.define({[be]:{primaries:t,whitePoint:r,transfer:xe,toXYZ:Re,fromXYZ:ze,luminanceCoefficients:n,workingColorSpaceConfig:{unpackColorSpace:P},outputColorSpaceConfig:{drawingBufferColorSpace:P}},[P]:{primaries:t,whitePoint:r,transfer:`srgb`,toXYZ:Re,fromXYZ:ze,luminanceCoefficients:n,outputColorSpaceConfig:{drawingBufferColorSpace:P}}}),e}const B=Be();function V(e){return e<.04045?e*.0773993808:(e*.9478672986+.0521327014)**2.4}function Ve(e){return e<.0031308?e*12.92:1.055*e**.41666-.055}let He;var Ue=class{static getDataURL(e,t=`image/png`){if(/^data:/i.test(e.src)||typeof HTMLCanvasElement>`u`)return e.src;let n;if(e instanceof HTMLCanvasElement)n=e;else{He===void 0&&(He=we(`canvas`)),He.width=e.width,He.height=e.height;let t=He.getContext(`2d`);e instanceof ImageData?t.putImageData(e,0,0):t.drawImage(e,0,0,e.width,e.height),n=He}return n.toDataURL(t)}static sRGBToLinear(e){if(typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement||typeof ImageBitmap<`u`&&e instanceof ImageBitmap){let t=we(`canvas`);t.width=e.width,t.height=e.height;let n=t.getContext(`2d`);n.drawImage(e,0,0,e.width,e.height);let r=n.getImageData(0,0,e.width,e.height),i=r.data;for(let e=0;e<i.length;e++)i[e]=V(i[e]/255)*255;return n.putImageData(r,0,0),t}else if(e.data){let t=e.data.slice(0);for(let e=0;e<t.length;e++)t instanceof Uint8Array||t instanceof Uint8ClampedArray?t[e]=Math.floor(V(t[e]/255)*255):t[e]=V(t[e]);return{data:t,width:e.width,height:e.height}}else return F(`ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.`),e}};let We=0;var Ge=class{constructor(e=null){this.isSource=!0,Object.defineProperty(this,\"id\",{value:We++}),this.uuid=ke(),this.data=e,this.dataReady=!0,this.version=0}getSize(e){let t=this.data;return typeof HTMLVideoElement<`u`&&t instanceof HTMLVideoElement?e.set(t.videoWidth,t.videoHeight,0):typeof VideoFrame<`u`&&t instanceof VideoFrame?e.set(t.displayWidth,t.displayHeight,0):t===null?e.set(0,0,0):e.set(t.width,t.height,t.depth||0),e}set needsUpdate(e){e===!0&&this.version++}toJSON(e){let t=e===void 0||typeof e==`string`;if(!t&&e.images[this.uuid]!==void 0)return e.images[this.uuid];let n={uuid:this.uuid,url:``},r=this.data;if(r!==null){let e;if(Array.isArray(r)){e=[];for(let t=0,n=r.length;t<n;t++)r[t].isDataTexture?e.push(Ke(r[t].image)):e.push(Ke(r[t]))}else e=Ke(r);n.url=e}return t||(e.images[this.uuid]=n),n}};function Ke(e){return typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement||typeof ImageBitmap<`u`&&e instanceof ImageBitmap?Ue.getDataURL(e):e.data?{data:Array.from(e.data),width:e.width,height:e.height,type:e.data.constructor.name}:(F(`Texture: Unable to serialize Texture.`),{})}let qe=0;const Je=new z;var Ye=class e extends Oe{constructor(t=e.DEFAULT_IMAGE,n=e.DEFAULT_MAPPING,r=de,i=de,a=1006,o=1008,s=1023,c=1009,l=e.DEFAULT_ANISOTROPY,u=``){super(),this.isTexture=!0,Object.defineProperty(this,\"id\",{value:qe++}),this.uuid=ke(),this.name=``,this.source=new Ge(t),this.mipmaps=[],this.mapping=n,this.channel=0,this.wrapS=r,this.wrapT=i,this.magFilter=a,this.minFilter=o,this.anisotropy=l,this.format=s,this.internalFormat=null,this.type=c,this.offset=new Me(0,0),this.repeat=new Me(1,1),this.center=new Me(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new Ie,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.colorSpace=u,this.userData={},this.updateRanges=[],this.version=0,this.onUpdate=null,this.renderTarget=null,this.isRenderTargetTexture=!1,this.isArrayTexture=!!(t&&t.depth&&t.depth>1),this.pmremVersion=0,this.normalized=!1}get width(){return this.source.getSize(Je).x}get height(){return this.source.getSize(Je).y}get depth(){return this.source.getSize(Je).z}get image(){return this.source.data}set image(e){this.source.data=e}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.channel=e.channel,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.normalized=e.normalized,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.colorSpace=e.colorSpace,this.renderTarget=e.renderTarget,this.isRenderTargetTexture=e.isRenderTargetTexture,this.isArrayTexture=e.isArrayTexture,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}setValues(e){for(let t in e){let n=e[t];if(n===void 0){F(`Texture.setValues(): parameter '${t}' has value of undefined.`);continue}let r=this[t];if(r===void 0){F(`Texture.setValues(): property '${t}' does not exist.`);continue}r&&n&&r.isVector2&&n.isVector2||r&&n&&r.isVector3&&n.isVector3||r&&n&&r.isMatrix3&&n.isMatrix3?r.copy(n):this[t]=n}}toJSON(e){let t=e===void 0||typeof e==`string`;if(!t&&e.textures[this.uuid]!==void 0)return e.textures[this.uuid];let n={metadata:{version:4.7,type:`Texture`,generator:`Texture.toJSON`},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,normalized:this.normalized,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(n.userData=this.userData),t||(e.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:`dispose`})}transformUv(e){if(this.mapping!==300)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case ue:e.x-=Math.floor(e.x);break;case de:e.x=e.x<0?0:1;break;case fe:Math.abs(Math.floor(e.x)%2)===1?e.x=Math.ceil(e.x)-e.x:e.x-=Math.floor(e.x);break}if(e.y<0||e.y>1)switch(this.wrapT){case ue:e.y-=Math.floor(e.y);break;case de:e.y=e.y<0?0:1;break;case fe:Math.abs(Math.floor(e.y)%2)===1?e.y=Math.ceil(e.y)-e.y:e.y-=Math.floor(e.y);break}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){e===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(e){e===!0&&this.pmremVersion++}};Ye.DEFAULT_IMAGE=null,Ye.DEFAULT_MAPPING=300,Ye.DEFAULT_ANISOTROPY=1,le=Symbol.iterator,ae=class{constructor(e=0,t=0,n=0,r=1){this.x=e,this.y=t,this.z=n,this.w=r}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,n,r){return this.x=e,this.y=t,this.z=n,this.w=r,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw Error(`index is out of range: `+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error(`index is out of range: `+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w===void 0?1:e.w,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){let t=this.x,n=this.y,r=this.z,i=this.w,a=e.elements;return this.x=a[0]*t+a[4]*n+a[8]*r+a[12]*i,this.y=a[1]*t+a[5]*n+a[9]*r+a[13]*i,this.z=a[2]*t+a[6]*n+a[10]*r+a[14]*i,this.w=a[3]*t+a[7]*n+a[11]*r+a[15]*i,this}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this.w/=e.w,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);let t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,n,r,i,a=.01,o=.1,s=e.elements,c=s[0],l=s[4],u=s[8],d=s[1],f=s[5],p=s[9],m=s[2],h=s[6],g=s[10];if(Math.abs(l-d)<a&&Math.abs(u-m)<a&&Math.abs(p-h)<a){if(Math.abs(l+d)<o&&Math.abs(u+m)<o&&Math.abs(p+h)<o&&Math.abs(c+f+g-3)<o)return this.set(1,0,0,0),this;t=Math.PI;let e=(c+1)/2,s=(f+1)/2,_=(g+1)/2,v=(l+d)/4,y=(u+m)/4,b=(p+h)/4;return e>s&&e>_?e<a?(n=0,r=.707106781,i=.707106781):(n=Math.sqrt(e),r=v/n,i=y/n):s>_?s<a?(n=.707106781,r=0,i=.707106781):(r=Math.sqrt(s),n=v/r,i=b/r):_<a?(n=.707106781,r=.707106781,i=0):(i=Math.sqrt(_),n=y/i,r=b/i),this.set(n,r,i,t),this}let _=Math.sqrt((h-p)*(h-p)+(u-m)*(u-m)+(d-l)*(d-l));return Math.abs(_)<.001&&(_=1),this.x=(h-p)/_,this.y=(u-m)/_,this.z=(d-l)/_,this.w=Math.acos((c+f+g-1)/2),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this.w=t[15],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this.w=Math.min(this.w,e.w),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this.w=Math.max(this.w,e.w),this}clamp(e,t){return this.x=R(this.x,e.x,t.x),this.y=R(this.y,e.y,t.y),this.z=R(this.z,e.z,t.z),this.w=R(this.w,e.w,t.w),this}clampScalar(e,t){return this.x=R(this.x,e,t),this.y=R(this.y,e,t),this.z=R(this.z,e,t),this.w=R(this.w,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(R(n,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this.w+=(e.w-this.w)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this.w=e.w+(t.w-e.w)*n,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z&&e.w===this.w}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this.w=e[t+3],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e[t+3]=this.w,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this.w=e.getW(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[le](){yield this.x,yield this.y,yield this.z,yield this.w}},ae.prototype.isVector4=!0;var Xe=class e{constructor(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],e!==void 0&&this.set(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h)}set(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h){let g=this.elements;return g[0]=e,g[4]=t,g[8]=n,g[12]=r,g[1]=i,g[5]=a,g[9]=o,g[13]=s,g[2]=c,g[6]=l,g[10]=u,g[14]=d,g[3]=f,g[7]=p,g[11]=m,g[15]=h,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new e().fromArray(this.elements)}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t[9]=n[9],t[10]=n[10],t[11]=n[11],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15],this}copyPosition(e){let t=this.elements,n=e.elements;return t[12]=n[12],t[13]=n[13],t[14]=n[14],this}setFromMatrix3(e){let t=e.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(e,t,n){return this.determinant()===0?(e.set(1,0,0),t.set(0,1,0),n.set(0,0,1),this):(e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this)}makeBasis(e,t,n){return this.set(e.x,t.x,n.x,0,e.y,t.y,n.y,0,e.z,t.z,n.z,0,0,0,0,1),this}extractRotation(e){if(e.determinant()===0)return this.identity();let t=this.elements,n=e.elements,r=1/Ze.setFromMatrixColumn(e,0).length(),i=1/Ze.setFromMatrixColumn(e,1).length(),a=1/Ze.setFromMatrixColumn(e,2).length();return t[0]=n[0]*r,t[1]=n[1]*r,t[2]=n[2]*r,t[3]=0,t[4]=n[4]*i,t[5]=n[5]*i,t[6]=n[6]*i,t[7]=0,t[8]=n[8]*a,t[9]=n[9]*a,t[10]=n[10]*a,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){let t=this.elements,n=e.x,r=e.y,i=e.z,a=Math.cos(n),o=Math.sin(n),s=Math.cos(r),c=Math.sin(r),l=Math.cos(i),u=Math.sin(i);if(e.order===`XYZ`){let e=a*l,n=a*u,r=o*l,i=o*u;t[0]=s*l,t[4]=-s*u,t[8]=c,t[1]=n+r*c,t[5]=e-i*c,t[9]=-o*s,t[2]=i-e*c,t[6]=r+n*c,t[10]=a*s}else if(e.order===`YXZ`){let e=s*l,n=s*u,r=c*l,i=c*u;t[0]=e+i*o,t[4]=r*o-n,t[8]=a*c,t[1]=a*u,t[5]=a*l,t[9]=-o,t[2]=n*o-r,t[6]=i+e*o,t[10]=a*s}else if(e.order===`ZXY`){let e=s*l,n=s*u,r=c*l,i=c*u;t[0]=e-i*o,t[4]=-a*u,t[8]=r+n*o,t[1]=n+r*o,t[5]=a*l,t[9]=i-e*o,t[2]=-a*c,t[6]=o,t[10]=a*s}else if(e.order===`ZYX`){let e=a*l,n=a*u,r=o*l,i=o*u;t[0]=s*l,t[4]=r*c-n,t[8]=e*c+i,t[1]=s*u,t[5]=i*c+e,t[9]=n*c-r,t[2]=-c,t[6]=o*s,t[10]=a*s}else if(e.order===`YZX`){let e=a*s,n=a*c,r=o*s,i=o*c;t[0]=s*l,t[4]=i-e*u,t[8]=r*u+n,t[1]=u,t[5]=a*l,t[9]=-o*l,t[2]=-c*l,t[6]=n*u+r,t[10]=e-i*u}else if(e.order===`XZY`){let e=a*s,n=a*c,r=o*s,i=o*c;t[0]=s*l,t[4]=-u,t[8]=c*l,t[1]=e*u+i,t[5]=a*l,t[9]=n*u-r,t[2]=r*u-n,t[6]=o*l,t[10]=i*u+e}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(e){return this.compose(Qe,e,$e)}lookAt(e,t,n){let r=this.elements;return W.subVectors(e,t),W.lengthSq()===0&&(W.z=1),W.normalize(),U.crossVectors(n,W),U.lengthSq()===0&&(Math.abs(n.z)===1?W.x+=1e-4:W.z+=1e-4,W.normalize(),U.crossVectors(n,W)),U.normalize(),et.crossVectors(W,U),r[0]=U.x,r[4]=et.x,r[8]=W.x,r[1]=U.y,r[5]=et.y,r[9]=W.y,r[2]=U.z,r[6]=et.z,r[10]=W.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,r=t.elements,i=this.elements,a=n[0],o=n[4],s=n[8],c=n[12],l=n[1],u=n[5],d=n[9],f=n[13],p=n[2],m=n[6],h=n[10],g=n[14],_=n[3],v=n[7],y=n[11],b=n[15],x=r[0],S=r[4],C=r[8],w=r[12],T=r[1],E=r[5],D=r[9],O=r[13],k=r[2],A=r[6],ee=r[10],te=r[14],j=r[3],ne=r[7],re=r[11],M=r[15];return i[0]=a*x+o*T+s*k+c*j,i[4]=a*S+o*E+s*A+c*ne,i[8]=a*C+o*D+s*ee+c*re,i[12]=a*w+o*O+s*te+c*M,i[1]=l*x+u*T+d*k+f*j,i[5]=l*S+u*E+d*A+f*ne,i[9]=l*C+u*D+d*ee+f*re,i[13]=l*w+u*O+d*te+f*M,i[2]=p*x+m*T+h*k+g*j,i[6]=p*S+m*E+h*A+g*ne,i[10]=p*C+m*D+h*ee+g*re,i[14]=p*w+m*O+h*te+g*M,i[3]=_*x+v*T+y*k+b*j,i[7]=_*S+v*E+y*A+b*ne,i[11]=_*C+v*D+y*ee+b*re,i[15]=_*w+v*O+y*te+b*M,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[4],r=e[8],i=e[12],a=e[1],o=e[5],s=e[9],c=e[13],l=e[2],u=e[6],d=e[10],f=e[14],p=e[3],m=e[7],h=e[11],g=e[15],_=s*f-c*d,v=o*f-c*u,y=o*d-s*u,b=a*f-c*l,x=a*d-s*l,S=a*u-o*l;return t*(m*_-h*v+g*y)-n*(p*_-h*b+g*x)+r*(p*v-m*b+g*S)-i*(p*y-m*x+h*S)}transpose(){let e=this.elements,t;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this}setPosition(e,t,n){let r=this.elements;return e.isVector3?(r[12]=e.x,r[13]=e.y,r[14]=e.z):(r[12]=e,r[13]=t,r[14]=n),this}invert(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8],u=e[9],d=e[10],f=e[11],p=e[12],m=e[13],h=e[14],g=e[15],_=t*o-n*a,v=t*s-r*a,y=t*c-i*a,b=n*s-r*o,x=n*c-i*o,S=r*c-i*s,C=l*m-u*p,w=l*h-d*p,T=l*g-f*p,E=u*h-d*m,D=u*g-f*m,O=d*g-f*h,k=_*O-v*D+y*E+b*T-x*w+S*C;if(k===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);let A=1/k;return e[0]=(o*O-s*D+c*E)*A,e[1]=(r*D-n*O-i*E)*A,e[2]=(m*S-h*x+g*b)*A,e[3]=(d*x-u*S-f*b)*A,e[4]=(s*T-a*O-c*w)*A,e[5]=(t*O-r*T+i*w)*A,e[6]=(h*y-p*S-g*v)*A,e[7]=(l*S-d*y+f*v)*A,e[8]=(a*D-o*T+c*C)*A,e[9]=(n*T-t*D-i*C)*A,e[10]=(p*x-m*y+g*_)*A,e[11]=(u*y-l*x-f*_)*A,e[12]=(o*w-a*E-s*C)*A,e[13]=(t*E-n*w+r*C)*A,e[14]=(m*v-p*b-h*_)*A,e[15]=(l*b-u*v+d*_)*A,this}scale(e){let t=this.elements,n=e.x,r=e.y,i=e.z;return t[0]*=n,t[4]*=r,t[8]*=i,t[1]*=n,t[5]*=r,t[9]*=i,t[2]*=n,t[6]*=r,t[10]*=i,t[3]*=n,t[7]*=r,t[11]*=i,this}getMaxScaleOnAxis(){let e=this.elements,t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],n=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],r=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(t,n,r))}makeTranslation(e,t,n){return e.isVector3?this.set(1,0,0,e.x,0,1,0,e.y,0,0,1,e.z,0,0,0,1):this.set(1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1),this}makeRotationX(e){let t=Math.cos(e),n=Math.sin(e);return this.set(1,0,0,0,0,t,-n,0,0,n,t,0,0,0,0,1),this}makeRotationY(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,0,n,0,0,1,0,0,-n,0,t,0,0,0,0,1),this}makeRotationZ(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,0,n,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){let n=Math.cos(t),r=Math.sin(t),i=1-n,a=e.x,o=e.y,s=e.z,c=i*a,l=i*o;return this.set(c*a+n,c*o-r*s,c*s+r*o,0,c*o+r*s,l*o+n,l*s-r*a,0,c*s-r*o,l*s+r*a,i*s*s+n,0,0,0,0,1),this}makeScale(e,t,n){return this.set(e,0,0,0,0,t,0,0,0,0,n,0,0,0,0,1),this}makeShear(e,t,n,r,i,a){return this.set(1,n,i,0,e,1,a,0,t,r,1,0,0,0,0,1),this}compose(e,t,n){let r=this.elements,i=t._x,a=t._y,o=t._z,s=t._w,c=i+i,l=a+a,u=o+o,d=i*c,f=i*l,p=i*u,m=a*l,h=a*u,g=o*u,_=s*c,v=s*l,y=s*u,b=n.x,x=n.y,S=n.z;return r[0]=(1-(m+g))*b,r[1]=(f+y)*b,r[2]=(p-v)*b,r[3]=0,r[4]=(f-y)*x,r[5]=(1-(d+g))*x,r[6]=(h+_)*x,r[7]=0,r[8]=(p+v)*S,r[9]=(h-_)*S,r[10]=(1-(d+m))*S,r[11]=0,r[12]=e.x,r[13]=e.y,r[14]=e.z,r[15]=1,this}decompose(e,t,n){let r=this.elements;e.x=r[12],e.y=r[13],e.z=r[14];let i=this.determinant();if(i===0)return n.set(1,1,1),t.identity(),this;let a=Ze.set(r[0],r[1],r[2]).length(),o=Ze.set(r[4],r[5],r[6]).length(),s=Ze.set(r[8],r[9],r[10]).length();i<0&&(a=-a),H.copy(this);let c=1/a,l=1/o,u=1/s;return H.elements[0]*=c,H.elements[1]*=c,H.elements[2]*=c,H.elements[4]*=l,H.elements[5]*=l,H.elements[6]*=l,H.elements[8]*=u,H.elements[9]*=u,H.elements[10]*=u,t.setFromRotationMatrix(H),n.x=a,n.y=o,n.z=s,this}makePerspective(e,t,n,r,i,a,o=Se,s=!1){let c=this.elements,l=2*i/(t-e),u=2*i/(n-r),d=(t+e)/(t-e),f=(n+r)/(n-r),p,m;if(s)p=i/(a-i),m=a*i/(a-i);else if(o===2e3)p=-(a+i)/(a-i),m=-2*a*i/(a-i);else if(o===2001)p=-a/(a-i),m=-a*i/(a-i);else throw Error(`THREE.Matrix4.makePerspective(): Invalid coordinate system: `+o);return c[0]=l,c[4]=0,c[8]=d,c[12]=0,c[1]=0,c[5]=u,c[9]=f,c[13]=0,c[2]=0,c[6]=0,c[10]=p,c[14]=m,c[3]=0,c[7]=0,c[11]=-1,c[15]=0,this}makeOrthographic(e,t,n,r,i,a,o=Se,s=!1){let c=this.elements,l=2/(t-e),u=2/(n-r),d=-(t+e)/(t-e),f=-(n+r)/(n-r),p,m;if(s)p=1/(a-i),m=a/(a-i);else if(o===2e3)p=-2/(a-i),m=-(a+i)/(a-i);else if(o===2001)p=-1/(a-i),m=-i/(a-i);else throw Error(`THREE.Matrix4.makeOrthographic(): Invalid coordinate system: `+o);return c[0]=l,c[4]=0,c[8]=0,c[12]=d,c[1]=0,c[5]=u,c[9]=0,c[13]=f,c[2]=0,c[6]=0,c[10]=p,c[14]=m,c[3]=0,c[7]=0,c[11]=0,c[15]=1,this}equals(e){let t=this.elements,n=e.elements;for(let e=0;e<16;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<16;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e[t+9]=n[9],e[t+10]=n[10],e[t+11]=n[11],e[t+12]=n[12],e[t+13]=n[13],e[t+14]=n[14],e[t+15]=n[15],e}};N=Xe,N.prototype.isMatrix4=!0;const Ze=new z,H=new Xe,Qe=new z(0,0,0),$e=new z(1,1,1),U=new z,et=new z,W=new z,tt=new Xe,nt=new Ne;var rt=class e{constructor(t=0,n=0,r=0,i=e.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=n,this._z=r,this._order=i}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,t,n,r=this._order){return this._x=e,this._y=t,this._z=n,this._order=r,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,t=this._order,n=!0){let r=e.elements,i=r[0],a=r[4],o=r[8],s=r[1],c=r[5],l=r[9],u=r[2],d=r[6],f=r[10];switch(t){case`XYZ`:this._y=Math.asin(R(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-l,f),this._z=Math.atan2(-a,i)):(this._x=Math.atan2(d,c),this._z=0);break;case`YXZ`:this._x=Math.asin(-R(l,-1,1)),Math.abs(l)<.9999999?(this._y=Math.atan2(o,f),this._z=Math.atan2(s,c)):(this._y=Math.atan2(-u,i),this._z=0);break;case`ZXY`:this._x=Math.asin(R(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-u,f),this._z=Math.atan2(-a,c)):(this._y=0,this._z=Math.atan2(s,i));break;case`ZYX`:this._y=Math.asin(-R(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(d,f),this._z=Math.atan2(s,i)):(this._x=0,this._z=Math.atan2(-a,c));break;case`YZX`:this._z=Math.asin(R(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(-l,c),this._y=Math.atan2(-u,i)):(this._x=0,this._y=Math.atan2(o,f));break;case`XZY`:this._z=Math.asin(-R(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(d,c),this._y=Math.atan2(o,i)):(this._x=Math.atan2(-l,f),this._y=0);break;default:F(`Euler: .setFromRotationMatrix() encountered an unknown order: `+t)}return this._order=t,n===!0&&this._onChangeCallback(),this}setFromQuaternion(e,t,n){return tt.makeRotationFromQuaternion(e),this.setFromRotationMatrix(tt,t,n)}setFromVector3(e,t=this._order){return this.set(e.x,e.y,e.z,t)}reorder(e){return nt.setFromEuler(this),this.setFromQuaternion(nt,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],e[3]!==void 0&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}};rt.DEFAULT_ORDER=`XYZ`;var it=class{constructor(){this.mask=1}set(e){this.mask=(1<<e|0)>>>0}enable(e){this.mask|=1<<e|0}enableAll(){this.mask=-1}toggle(e){this.mask^=1<<e|0}disable(e){this.mask&=~(1<<e|0)}disableAll(){this.mask=0}test(e){return(this.mask&e.mask)!==0}isEnabled(e){return(this.mask&(1<<e|0))!=0}};let at=0;const ot=new z,st=new Ne,G=new Xe,ct=new z,lt=new z,ut=new z,dt=new Ne,ft=new z(1,0,0),pt=new z(0,1,0),mt=new z(0,0,1),ht={type:`added`},gt={type:`removed`},_t={type:`childadded`,child:null},vt={type:`childremoved`,child:null};var yt=class e extends Oe{constructor(){super(),this.isObject3D=!0,Object.defineProperty(this,\"id\",{value:at++}),this.uuid=ke(),this.name=``,this.type=`Object3D`,this.parent=null,this.children=[],this.up=e.DEFAULT_UP.clone();let t=new z,n=new rt,r=new Ne,i=new z(1,1,1);function a(){r.setFromEuler(n,!1)}function o(){n.setFromQuaternion(r,void 0,!1)}n._onChange(a),r._onChange(o),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:n},quaternion:{configurable:!0,enumerable:!0,value:r},scale:{configurable:!0,enumerable:!0,value:i},modelViewMatrix:{value:new Xe},normalMatrix:{value:new Ie}}),this.matrix=new Xe,this.matrixWorld=new Xe,this.matrixAutoUpdate=e.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldAutoUpdate=e.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.layers=new it,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.customDepthMaterial=void 0,this.customDistanceMaterial=void 0,this.static=!1,this.userData={},this.pivot=null}onBeforeShadow(){}onAfterShadow(){}onBeforeRender(){}onAfterRender(){}applyMatrix4(e){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(e),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(e){return this.quaternion.premultiply(e),this}setRotationFromAxisAngle(e,t){this.quaternion.setFromAxisAngle(e,t)}setRotationFromEuler(e){this.quaternion.setFromEuler(e,!0)}setRotationFromMatrix(e){this.quaternion.setFromRotationMatrix(e)}setRotationFromQuaternion(e){this.quaternion.copy(e)}rotateOnAxis(e,t){return st.setFromAxisAngle(e,t),this.quaternion.multiply(st),this}rotateOnWorldAxis(e,t){return st.setFromAxisAngle(e,t),this.quaternion.premultiply(st),this}rotateX(e){return this.rotateOnAxis(ft,e)}rotateY(e){return this.rotateOnAxis(pt,e)}rotateZ(e){return this.rotateOnAxis(mt,e)}translateOnAxis(e,t){return ot.copy(e).applyQuaternion(this.quaternion),this.position.add(ot.multiplyScalar(t)),this}translateX(e){return this.translateOnAxis(ft,e)}translateY(e){return this.translateOnAxis(pt,e)}translateZ(e){return this.translateOnAxis(mt,e)}localToWorld(e){return this.updateWorldMatrix(!0,!1),e.applyMatrix4(this.matrixWorld)}worldToLocal(e){return this.updateWorldMatrix(!0,!1),e.applyMatrix4(G.copy(this.matrixWorld).invert())}lookAt(e,t,n){e.isVector3?ct.copy(e):ct.set(e,t,n);let r=this.parent;this.updateWorldMatrix(!0,!1),lt.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?G.lookAt(lt,ct,this.up):G.lookAt(ct,lt,this.up),this.quaternion.setFromRotationMatrix(G),r&&(G.extractRotation(r.matrixWorld),st.setFromRotationMatrix(G),this.quaternion.premultiply(st.invert()))}add(e){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.add(arguments[e]);return this}return e===this?(I(`Object3D.add: object can't be added as a child of itself.`,e),this):(e&&e.isObject3D?(e.removeFromParent(),e.parent=this,this.children.push(e),e.dispatchEvent(ht),_t.child=e,this.dispatchEvent(_t),_t.child=null):I(`Object3D.add: object not an instance of THREE.Object3D.`,e),this)}remove(e){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.remove(arguments[e]);return this}let t=this.children.indexOf(e);return t!==-1&&(e.parent=null,this.children.splice(t,1),e.dispatchEvent(gt),vt.child=e,this.dispatchEvent(vt),vt.child=null),this}removeFromParent(){let e=this.parent;return e!==null&&e.remove(this),this}clear(){return this.remove(...this.children)}attach(e){return this.updateWorldMatrix(!0,!1),G.copy(this.matrixWorld).invert(),e.parent!==null&&(e.parent.updateWorldMatrix(!0,!1),G.multiply(e.parent.matrixWorld)),e.applyMatrix4(G),e.removeFromParent(),e.parent=this,this.children.push(e),e.updateWorldMatrix(!1,!0),e.dispatchEvent(ht),_t.child=e,this.dispatchEvent(_t),_t.child=null,this}getObjectById(e){return this.getObjectByProperty(`id`,e)}getObjectByName(e){return this.getObjectByProperty(`name`,e)}getObjectByProperty(e,t){if(this[e]===t)return this;for(let n=0,r=this.children.length;n<r;n++){let r=this.children[n].getObjectByProperty(e,t);if(r!==void 0)return r}}getObjectsByProperty(e,t,n=[]){this[e]===t&&n.push(this);let r=this.children;for(let i=0,a=r.length;i<a;i++)r[i].getObjectsByProperty(e,t,n);return n}getWorldPosition(e){return this.updateWorldMatrix(!0,!1),e.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(lt,e,ut),e}getWorldScale(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(lt,dt,e),e}getWorldDirection(e){this.updateWorldMatrix(!0,!1);let t=this.matrixWorld.elements;return e.set(t[8],t[9],t[10]).normalize()}raycast(){}traverse(e){e(this);let t=this.children;for(let n=0,r=t.length;n<r;n++)t[n].traverse(e)}traverseVisible(e){if(this.visible===!1)return;e(this);let t=this.children;for(let n=0,r=t.length;n<r;n++)t[n].traverseVisible(e)}traverseAncestors(e){let t=this.parent;t!==null&&(e(t),t.traverseAncestors(e))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale);let e=this.pivot;if(e!==null){let t=e.x,n=e.y,r=e.z,i=this.matrix.elements;i[12]+=t-i[0]*t-i[4]*n-i[8]*r,i[13]+=n-i[1]*t-i[5]*n-i[9]*r,i[14]+=r-i[2]*t-i[6]*n-i[10]*r}this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(e){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||e)&&(this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),this.matrixWorldNeedsUpdate=!1,e=!0);let t=this.children;for(let n=0,r=t.length;n<r;n++)t[n].updateMatrixWorld(e)}updateWorldMatrix(e,t){let n=this.parent;if(e===!0&&n!==null&&n.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),t===!0){let e=this.children;for(let t=0,n=e.length;t<n;t++)e[t].updateWorldMatrix(!1,!0)}}toJSON(e){let t=e===void 0||typeof e==`string`,n={};t&&(e={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},n.metadata={version:4.7,type:`Object`,generator:`Object3D.toJSON`});let r={};r.uuid=this.uuid,r.type=this.type,this.name!==``&&(r.name=this.name),this.castShadow===!0&&(r.castShadow=!0),this.receiveShadow===!0&&(r.receiveShadow=!0),this.visible===!1&&(r.visible=!1),this.frustumCulled===!1&&(r.frustumCulled=!1),this.renderOrder!==0&&(r.renderOrder=this.renderOrder),this.static!==!1&&(r.static=this.static),Object.keys(this.userData).length>0&&(r.userData=this.userData),r.layers=this.layers.mask,r.matrix=this.matrix.toArray(),r.up=this.up.toArray(),this.pivot!==null&&(r.pivot=this.pivot.toArray()),this.matrixAutoUpdate===!1&&(r.matrixAutoUpdate=!1),this.morphTargetDictionary!==void 0&&(r.morphTargetDictionary=Object.assign({},this.morphTargetDictionary)),this.morphTargetInfluences!==void 0&&(r.morphTargetInfluences=this.morphTargetInfluences.slice()),this.isInstancedMesh&&(r.type=`InstancedMesh`,r.count=this.count,r.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(r.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(r.type=`BatchedMesh`,r.perObjectFrustumCulled=this.perObjectFrustumCulled,r.sortObjects=this.sortObjects,r.drawRanges=this._drawRanges,r.reservedRanges=this._reservedRanges,r.geometryInfo=this._geometryInfo.map(e=>({...e,boundingBox:e.boundingBox?e.boundingBox.toJSON():void 0,boundingSphere:e.boundingSphere?e.boundingSphere.toJSON():void 0})),r.instanceInfo=this._instanceInfo.map(e=>({...e})),r.availableInstanceIds=this._availableInstanceIds.slice(),r.availableGeometryIds=this._availableGeometryIds.slice(),r.nextIndexStart=this._nextIndexStart,r.nextVertexStart=this._nextVertexStart,r.geometryCount=this._geometryCount,r.maxInstanceCount=this._maxInstanceCount,r.maxVertexCount=this._maxVertexCount,r.maxIndexCount=this._maxIndexCount,r.geometryInitialized=this._geometryInitialized,r.matricesTexture=this._matricesTexture.toJSON(e),r.indirectTexture=this._indirectTexture.toJSON(e),this._colorsTexture!==null&&(r.colorsTexture=this._colorsTexture.toJSON(e)),this.boundingSphere!==null&&(r.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(r.boundingBox=this.boundingBox.toJSON()));function i(t,n){return t[n.uuid]===void 0&&(t[n.uuid]=n.toJSON(e)),n.uuid}if(this.isScene)this.background&&(this.background.isColor?r.background=this.background.toJSON():this.background.isTexture&&(r.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(r.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){r.geometry=i(e.geometries,this.geometry);let t=this.geometry.parameters;if(t!==void 0&&t.shapes!==void 0){let n=t.shapes;if(Array.isArray(n))for(let t=0,r=n.length;t<r;t++){let r=n[t];i(e.shapes,r)}else i(e.shapes,n)}}if(this.isSkinnedMesh&&(r.bindMode=this.bindMode,r.bindMatrix=this.bindMatrix.toArray(),this.skeleton!==void 0&&(i(e.skeletons,this.skeleton),r.skeleton=this.skeleton.uuid)),this.material!==void 0)if(Array.isArray(this.material)){let t=[];for(let n=0,r=this.material.length;n<r;n++)t.push(i(e.materials,this.material[n]));r.material=t}else r.material=i(e.materials,this.material);if(this.children.length>0){r.children=[];for(let t=0;t<this.children.length;t++)r.children.push(this.children[t].toJSON(e).object)}if(this.animations.length>0){r.animations=[];for(let t=0;t<this.animations.length;t++){let n=this.animations[t];r.animations.push(i(e.animations,n))}}if(t){let t=a(e.geometries),r=a(e.materials),i=a(e.textures),o=a(e.images),s=a(e.shapes),c=a(e.skeletons),l=a(e.animations),u=a(e.nodes);t.length>0&&(n.geometries=t),r.length>0&&(n.materials=r),i.length>0&&(n.textures=i),o.length>0&&(n.images=o),s.length>0&&(n.shapes=s),c.length>0&&(n.skeletons=c),l.length>0&&(n.animations=l),u.length>0&&(n.nodes=u)}return n.object=r,n;function a(e){let t=[];for(let n in e){let r=e[n];delete r.metadata,t.push(r)}return t}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.pivot=e.pivot===null?null:e.pivot.clone(),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.static=e.static,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),t===!0)for(let t=0;t<e.children.length;t++){let n=e.children[t];this.add(n.clone())}return this}};yt.DEFAULT_UP=new z(0,1,0),yt.DEFAULT_MATRIX_AUTO_UPDATE=!0,yt.DEFAULT_MATRIX_WORLD_AUTO_UPDATE=!0;const bt={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},K={h:0,s:0,l:0},xt={h:0,s:0,l:0};function St(e,t,n){return n<0&&(n+=1),n>1&&--n,n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*6*(2/3-n):e}var Ct=class{constructor(e,t,n){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,t,n)}set(e,t,n){if(t===void 0&&n===void 0){let t=e;t&&t.isColor?this.copy(t):typeof t==`number`?this.setHex(t):typeof t==`string`&&this.setStyle(t)}else this.setRGB(e,t,n);return this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=P){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,B.colorSpaceToWorking(this,t),this}setRGB(e,t,n,r=B.workingColorSpace){return this.r=e,this.g=t,this.b=n,B.colorSpaceToWorking(this,r),this}setHSL(e,t,n,r=B.workingColorSpace){if(e=Ae(e,1),t=R(t,0,1),n=R(n,0,1),t===0)this.r=this.g=this.b=n;else{let r=n<=.5?n*(1+t):n+t-n*t,i=2*n-r;this.r=St(i,r,e+1/3),this.g=St(i,r,e),this.b=St(i,r,e-1/3)}return B.colorSpaceToWorking(this,r),this}setStyle(e,t=P){function n(t){t!==void 0&&parseFloat(t)<1&&F(`Color: Alpha component of `+e+` will be ignored.`)}let r;if(r=/^(\\w+)\\(([^\\)]*)\\)/.exec(e)){let i,a=r[1],o=r[2];switch(a){case`rgb`:case`rgba`:if(i=/^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(o))return n(i[4]),this.setRGB(Math.min(255,parseInt(i[1],10))/255,Math.min(255,parseInt(i[2],10))/255,Math.min(255,parseInt(i[3],10))/255,t);if(i=/^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(o))return n(i[4]),this.setRGB(Math.min(100,parseInt(i[1],10))/100,Math.min(100,parseInt(i[2],10))/100,Math.min(100,parseInt(i[3],10))/100,t);break;case`hsl`:case`hsla`:if(i=/^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(o))return n(i[4]),this.setHSL(parseFloat(i[1])/360,parseFloat(i[2])/100,parseFloat(i[3])/100,t);break;default:F(`Color: Unknown color model `+e)}}else if(r=/^\\#([A-Fa-f\\d]+)$/.exec(e)){let n=r[1],i=n.length;if(i===3)return this.setRGB(parseInt(n.charAt(0),16)/15,parseInt(n.charAt(1),16)/15,parseInt(n.charAt(2),16)/15,t);if(i===6)return this.setHex(parseInt(n,16),t);F(`Color: Invalid hex color `+e)}else if(e&&e.length>0)return this.setColorName(e,t);return this}setColorName(e,t=P){let n=bt[e.toLowerCase()];return n===void 0?F(`Color: Unknown color `+e):this.setHex(n,t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=V(e.r),this.g=V(e.g),this.b=V(e.b),this}copyLinearToSRGB(e){return this.r=Ve(e.r),this.g=Ve(e.g),this.b=Ve(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=P){return B.workingToColorSpace(q.copy(this),e),Math.round(R(q.r*255,0,255))*65536+Math.round(R(q.g*255,0,255))*256+Math.round(R(q.b*255,0,255))}getHexString(e=P){return(`000000`+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=B.workingColorSpace){B.workingToColorSpace(q.copy(this),t);let n=q.r,r=q.g,i=q.b,a=Math.max(n,r,i),o=Math.min(n,r,i),s,c,l=(o+a)/2;if(o===a)s=0,c=0;else{let e=a-o;switch(c=l<=.5?e/(a+o):e/(2-a-o),a){case n:s=(r-i)/e+(r<i?6:0);break;case r:s=(i-n)/e+2;break;case i:s=(n-r)/e+4;break}s/=6}return e.h=s,e.s=c,e.l=l,e}getRGB(e,t=B.workingColorSpace){return B.workingToColorSpace(q.copy(this),t),e.r=q.r,e.g=q.g,e.b=q.b,e}getStyle(e=P){B.workingToColorSpace(q.copy(this),e);let t=q.r,n=q.g,r=q.b;return e===`srgb`?`rgb(${Math.round(t*255)},${Math.round(n*255)},${Math.round(r*255)})`:`color(${e} ${t.toFixed(3)} ${n.toFixed(3)} ${r.toFixed(3)})`}offsetHSL(e,t,n){return this.getHSL(K),this.setHSL(K.h+e,K.s+t,K.l+n)}add(e){return this.r+=e.r,this.g+=e.g,this.b+=e.b,this}addColors(e,t){return this.r=e.r+t.r,this.g=e.g+t.g,this.b=e.b+t.b,this}addScalar(e){return this.r+=e,this.g+=e,this.b+=e,this}sub(e){return this.r=Math.max(0,this.r-e.r),this.g=Math.max(0,this.g-e.g),this.b=Math.max(0,this.b-e.b),this}multiply(e){return this.r*=e.r,this.g*=e.g,this.b*=e.b,this}multiplyScalar(e){return this.r*=e,this.g*=e,this.b*=e,this}lerp(e,t){return this.r+=(e.r-this.r)*t,this.g+=(e.g-this.g)*t,this.b+=(e.b-this.b)*t,this}lerpColors(e,t,n){return this.r=e.r+(t.r-e.r)*n,this.g=e.g+(t.g-e.g)*n,this.b=e.b+(t.b-e.b)*n,this}lerpHSL(e,t){this.getHSL(K),e.getHSL(xt);let n=je(K.h,xt.h,t),r=je(K.s,xt.s,t),i=je(K.l,xt.l,t);return this.setHSL(n,r,i),this}setFromVector3(e){return this.r=e.x,this.g=e.y,this.b=e.z,this}applyMatrix3(e){let t=this.r,n=this.g,r=this.b,i=e.elements;return this.r=i[0]*t+i[3]*n+i[6]*r,this.g=i[1]*t+i[4]*n+i[7]*r,this.b=i[2]*t+i[5]*n+i[8]*r,this}equals(e){return e.r===this.r&&e.g===this.g&&e.b===this.b}fromArray(e,t=0){return this.r=e[t],this.g=e[t+1],this.b=e[t+2],this}toArray(e=[],t=0){return e[t]=this.r,e[t+1]=this.g,e[t+2]=this.b,e}fromBufferAttribute(e,t){return this.r=e.getX(t),this.g=e.getY(t),this.b=e.getZ(t),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}};const q=new Ct;Ct.NAMES=bt;var wt=class{constructor(e=new z(1/0,1/0,1/0),t=new z(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromArray(e){this.makeEmpty();for(let t=0,n=e.length;t<n;t+=3)this.expandByPoint(Y.fromArray(e,t));return this}setFromBufferAttribute(e){this.makeEmpty();for(let t=0,n=e.count;t<n;t++)this.expandByPoint(Y.fromBufferAttribute(e,t));return this}setFromPoints(e){this.makeEmpty();for(let t=0,n=e.length;t<n;t++)this.expandByPoint(e[t]);return this}setFromCenterAndSize(e,t){let n=Y.copy(t).multiplyScalar(.5);return this.min.copy(e).sub(n),this.max.copy(e).add(n),this}setFromObject(e,t=!1){return this.makeEmpty(),this.expandByObject(e,t)}clone(){return new this.constructor().copy(this)}copy(e){return this.min.copy(e.min),this.max.copy(e.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(e){return this.isEmpty()?e.set(0,0,0):e.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(e){return this.isEmpty()?e.set(0,0,0):e.subVectors(this.max,this.min)}expandByPoint(e){return this.min.min(e),this.max.max(e),this}expandByVector(e){return this.min.sub(e),this.max.add(e),this}expandByScalar(e){return this.min.addScalar(-e),this.max.addScalar(e),this}expandByObject(e,t=!1){e.updateWorldMatrix(!1,!1);let n=e.geometry;if(n!==void 0){let r=n.getAttribute(`position`);if(t===!0&&r!==void 0&&e.isInstancedMesh!==!0)for(let t=0,n=r.count;t<n;t++)e.isMesh===!0?e.getVertexPosition(t,Y):Y.fromBufferAttribute(r,t),Y.applyMatrix4(e.matrixWorld),this.expandByPoint(Y);else e.boundingBox===void 0?(n.boundingBox===null&&n.computeBoundingBox(),Tt.copy(n.boundingBox)):(e.boundingBox===null&&e.computeBoundingBox(),Tt.copy(e.boundingBox)),Tt.applyMatrix4(e.matrixWorld),this.union(Tt)}let r=e.children;for(let e=0,n=r.length;e<n;e++)this.expandByObject(r[e],t);return this}containsPoint(e){return e.x>=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y&&e.z>=this.min.z&&e.z<=this.max.z}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y&&e.max.z>=this.min.z&&e.min.z<=this.max.z}intersectsSphere(e){return this.clampPoint(e.center,Y),Y.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,n;return e.normal.x>0?(t=e.normal.x*this.min.x,n=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,n=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,n+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,n+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,n+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,n+=e.normal.z*this.min.z),t<=-e.constant&&n>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(At),jt.subVectors(this.max,At),Et.subVectors(e.a,At),Dt.subVectors(e.b,At),Ot.subVectors(e.c,At),X.subVectors(Dt,Et),Z.subVectors(Ot,Dt),kt.subVectors(Et,Ot);let t=[0,-X.z,X.y,0,-Z.z,Z.y,0,-kt.z,kt.y,X.z,0,-X.x,Z.z,0,-Z.x,kt.z,0,-kt.x,-X.y,X.x,0,-Z.y,Z.x,0,-kt.y,kt.x,0];return!Pt(t,Et,Dt,Ot,jt)||(t=[1,0,0,0,1,0,0,0,1],!Pt(t,Et,Dt,Ot,jt))?!1:(Mt.crossVectors(X,Z),t=[Mt.x,Mt.y,Mt.z],Pt(t,Et,Dt,Ot,jt))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,Y).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(Y).length()*.5),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()?this:(J[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),J[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),J[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),J[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),J[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),J[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),J[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),J[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(J),this)}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(e){return this.min.fromArray(e.min),this.max.fromArray(e.max),this}};const J=[new z,new z,new z,new z,new z,new z,new z,new z],Y=new z,Tt=new wt,Et=new z,Dt=new z,Ot=new z,X=new z,Z=new z,kt=new z,At=new z,jt=new z,Mt=new z,Nt=new z;function Pt(e,t,n,r,i){for(let a=0,o=e.length-3;a<=o;a+=3){Nt.fromArray(e,a);let o=i.x*Math.abs(Nt.x)+i.y*Math.abs(Nt.y)+i.z*Math.abs(Nt.z),s=t.dot(Nt),c=n.dot(Nt),l=r.dot(Nt);if(Math.max(-Math.max(s,c,l),Math.min(s,c,l))>o)return!1}return!0}function Ft(e,t){return!e||e.constructor===t?e:typeof t.BYTES_PER_ELEMENT==`number`?new t(e):Array.prototype.slice.call(e)}var It=class{constructor(e,t,n,r){this.parameterPositions=e,this._cachedIndex=0,this.resultBuffer=r===void 0?new t.constructor(n):r,this.sampleValues=t,this.valueSize=n,this.settings=null,this.DefaultSettings_={}}evaluate(e){let t=this.parameterPositions,n=this._cachedIndex,r=t[n],i=t[n-1];validate_interval:{seek:{let a;linear_scan:{forward_scan:if(!(e<r)){for(let a=n+2;;){if(r===void 0){if(e<i)break forward_scan;return n=t.length,this._cachedIndex=n,this.copySampleValue_(n-1)}if(n===a)break;if(i=r,r=t[++n],e<r)break seek}a=t.length;break linear_scan}if(!(e>=i)){let o=t[1];e<o&&(n=2,i=o);for(let a=n-2;;){if(i===void 0)return this._cachedIndex=0,this.copySampleValue_(0);if(n===a)break;if(r=i,i=t[--n-1],e>=i)break seek}a=n,n=0;break linear_scan}break validate_interval}for(;n<a;){let r=n+a>>>1;e<t[r]?a=r:n=r+1}if(r=t[n],i=t[n-1],i===void 0)return this._cachedIndex=0,this.copySampleValue_(0);if(r===void 0)return n=t.length,this._cachedIndex=n,this.copySampleValue_(n-1)}this._cachedIndex=n,this.intervalChanged_(n,i,r)}return this.interpolate_(n,i,e,r)}getSettings_(){return this.settings||this.DefaultSettings_}copySampleValue_(e){let t=this.resultBuffer,n=this.sampleValues,r=this.valueSize,i=e*r;for(let e=0;e!==r;++e)t[e]=n[i+e];return t}interpolate_(){throw Error(`call to abstract method`)}intervalChanged_(){}},Lt=class extends It{constructor(e,t,n,r){super(e,t,n,r),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0,this.DefaultSettings_={endingStart:_e,endingEnd:_e}}intervalChanged_(e,t,n){let r=this.parameterPositions,i=e-2,a=e+1,o=r[i],s=r[a];if(o===void 0)switch(this.getSettings_().endingStart){case ve:i=e,o=2*t-n;break;case ye:i=r.length-2,o=t+r[i]-r[i+1];break;default:i=e,o=n}if(s===void 0)switch(this.getSettings_().endingEnd){case ve:a=e,s=2*n-t;break;case ye:a=1,s=n+r[1]-r[0];break;default:a=e-1,s=t}let c=(n-t)*.5,l=this.valueSize;this._weightPrev=c/(t-o),this._weightNext=c/(s-n),this._offsetPrev=i*l,this._offsetNext=a*l}interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=e*o,c=s-o,l=this._offsetPrev,u=this._offsetNext,d=this._weightPrev,f=this._weightNext,p=(n-t)/(r-t),m=p*p,h=m*p,g=-d*h+2*d*m-d*p,_=(1+d)*h+(-1.5-2*d)*m+(-.5+d)*p+1,v=(-1-f)*h+(1.5+f)*m+.5*p,y=f*h-f*m;for(let e=0;e!==o;++e)i[e]=g*a[l+e]+_*a[c+e]+v*a[s+e]+y*a[u+e];return i}},Rt=class extends It{constructor(e,t,n,r){super(e,t,n,r)}interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=e*o,c=s-o,l=(n-t)/(r-t),u=1-l;for(let e=0;e!==o;++e)i[e]=a[c+e]*u+a[s+e]*l;return i}},zt=class extends It{constructor(e,t,n,r){super(e,t,n,r)}interpolate_(e){return this.copySampleValue_(e-1)}},Bt=class extends It{interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=e*o,c=s-o,l=this.settings||this.DefaultSettings_,u=l.inTangents,d=l.outTangents;if(!u||!d){let e=(n-t)/(r-t),l=1-e;for(let t=0;t!==o;++t)i[t]=a[c+t]*l+a[s+t]*e;return i}let f=o*2,p=e-1;for(let l=0;l!==o;++l){let o=a[c+l],m=a[s+l],h=p*f+l*2,g=d[h],_=d[h+1],v=e*f+l*2,y=u[v],b=u[v+1],x=(n-t)/(r-t),S,C,w,T,E;for(let e=0;e<8;e++){S=x*x,C=S*x,w=1-x,T=w*w,E=T*w;let e=E*t+3*T*x*g+3*w*S*y+C*r-n;if(Math.abs(e)<1e-10)break;let i=3*T*(g-t)+6*w*x*(y-g)+3*S*(r-y);if(Math.abs(i)<1e-10)break;x-=e/i,x=Math.max(0,Math.min(1,x))}i[l]=E*o+3*T*x*_+3*w*S*b+C*m}return i}},Q=class{constructor(e,t,n,r){if(e===void 0)throw Error(`THREE.KeyframeTrack: track name is undefined`);if(t===void 0||t.length===0)throw Error(`THREE.KeyframeTrack: no keyframes in track named `+e);this.name=e,this.times=Ft(t,this.TimeBufferType),this.values=Ft(n,this.ValueBufferType),this.setInterpolation(r||this.DefaultInterpolation)}static toJSON(e){let t=e.constructor,n;if(t.toJSON!==this.toJSON)n=t.toJSON(e);else{n={name:e.name,times:Ft(e.times,Array),values:Ft(e.values,Array)};let t=e.getInterpolation();t!==e.DefaultInterpolation&&(n.interpolation=t)}return n.type=e.ValueTypeName,n}InterpolantFactoryMethodDiscrete(e){return new zt(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodLinear(e){return new Rt(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodSmooth(e){return new Lt(this.times,this.values,this.getValueSize(),e)}InterpolantFactoryMethodBezier(e){let t=new Bt(this.times,this.values,this.getValueSize(),e);return this.settings&&(t.settings=this.settings),t}setInterpolation(e){let t;switch(e){case pe:t=this.InterpolantFactoryMethodDiscrete;break;case me:t=this.InterpolantFactoryMethodLinear;break;case he:t=this.InterpolantFactoryMethodSmooth;break;case ge:t=this.InterpolantFactoryMethodBezier;break}if(t===void 0){let t=`unsupported interpolation for `+this.ValueTypeName+` keyframe track named `+this.name;if(this.createInterpolant===void 0)if(e!==this.DefaultInterpolation)this.setInterpolation(this.DefaultInterpolation);else throw Error(t);return F(`KeyframeTrack:`,t),this}return this.createInterpolant=t,this}getInterpolation(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return pe;case this.InterpolantFactoryMethodLinear:return me;case this.InterpolantFactoryMethodSmooth:return he;case this.InterpolantFactoryMethodBezier:return ge}}getValueSize(){return this.values.length/this.times.length}shift(e){if(e!==0){let t=this.times;for(let n=0,r=t.length;n!==r;++n)t[n]+=e}return this}scale(e){if(e!==1){let t=this.times;for(let n=0,r=t.length;n!==r;++n)t[n]*=e}return this}trim(e,t){let n=this.times,r=n.length,i=0,a=r-1;for(;i!==r&&n[i]<e;)++i;for(;a!==-1&&n[a]>t;)--a;if(++a,i!==0||a!==r){i>=a&&(a=Math.max(a,1),i=a-1);let e=this.getValueSize();this.times=n.slice(i,a),this.values=this.values.slice(i*e,a*e)}return this}validate(){let e=!0,t=this.getValueSize();t-Math.floor(t)!==0&&(I(`KeyframeTrack: Invalid value size in track.`,this),e=!1);let n=this.times,r=this.values,i=n.length;i===0&&(I(`KeyframeTrack: Track is empty.`,this),e=!1);let a=null;for(let t=0;t!==i;t++){let r=n[t];if(typeof r==`number`&&isNaN(r)){I(`KeyframeTrack: Time is not a valid number.`,this,t,r),e=!1;break}if(a!==null&&a>r){I(`KeyframeTrack: Out of order keys.`,this,t,r,a),e=!1;break}a=r}if(r!==void 0&&Ce(r))for(let t=0,n=r.length;t!==n;++t){let n=r[t];if(isNaN(n)){I(`KeyframeTrack: Value is not a valid number.`,this,t,n),e=!1;break}}return e}optimize(){let e=this.times.slice(),t=this.values.slice(),n=this.getValueSize(),r=this.getInterpolation()===he,i=e.length-1,a=1;for(let o=1;o<i;++o){let i=!1,s=e[o];if(s!==e[o+1]&&(o!==1||s!==e[0]))if(r)i=!0;else{let e=o*n,r=e-n,a=e+n;for(let o=0;o!==n;++o){let n=t[e+o];if(n!==t[r+o]||n!==t[a+o]){i=!0;break}}}if(i){if(o!==a){e[a]=e[o];let r=o*n,i=a*n;for(let e=0;e!==n;++e)t[i+e]=t[r+e]}++a}}if(i>0){e[a]=e[i];for(let e=i*n,r=a*n,o=0;o!==n;++o)t[r+o]=t[e+o];++a}return a===e.length?(this.times=e,this.values=t):(this.times=e.slice(0,a),this.values=t.slice(0,a*n)),this}clone(){let e=this.times.slice(),t=this.values.slice(),n=this.constructor,r=new n(this.name,e,t);return r.createInterpolant=this.createInterpolant,r}};Q.prototype.ValueTypeName=``,Q.prototype.TimeBufferType=Float32Array,Q.prototype.ValueBufferType=Float32Array,Q.prototype.DefaultInterpolation=me;var Vt=class extends Q{constructor(e,t,n){super(e,t,n)}};Vt.prototype.ValueTypeName=`bool`,Vt.prototype.ValueBufferType=Array,Vt.prototype.DefaultInterpolation=pe,Vt.prototype.InterpolantFactoryMethodLinear=void 0,Vt.prototype.InterpolantFactoryMethodSmooth=void 0;var Ht=class extends Q{constructor(e,t,n,r){super(e,t,n,r)}};Ht.prototype.ValueTypeName=`color`;var Ut=class extends Q{constructor(e,t,n,r){super(e,t,n,r)}};Ut.prototype.ValueTypeName=`number`;var Wt=class extends It{constructor(e,t,n,r){super(e,t,n,r)}interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=(n-t)/(r-t),c=e*o;for(let e=c+o;c!==e;c+=4)Ne.slerpFlat(i,0,a,c-o,a,c,s);return i}},Gt=class extends Q{constructor(e,t,n,r){super(e,t,n,r)}InterpolantFactoryMethodLinear(e){return new Wt(this.times,this.values,this.getValueSize(),e)}};Gt.prototype.ValueTypeName=`quaternion`,Gt.prototype.InterpolantFactoryMethodSmooth=void 0;var Kt=class extends Q{constructor(e,t,n){super(e,t,n)}};Kt.prototype.ValueTypeName=`string`,Kt.prototype.ValueBufferType=Array,Kt.prototype.DefaultInterpolation=pe,Kt.prototype.InterpolantFactoryMethodLinear=void 0,Kt.prototype.InterpolantFactoryMethodSmooth=void 0;var qt=class extends Q{constructor(e,t,n,r){super(e,t,n,r)}};qt.prototype.ValueTypeName=`vector`;const Jt=new class{constructor(e,t,n){let r=this,i=!1,a=0,o=0,s,c=[];this.onStart=void 0,this.onLoad=e,this.onProgress=t,this.onError=n,this._abortController=null,this.itemStart=function(e){o++,i===!1&&r.onStart!==void 0&&r.onStart(e,a,o),i=!0},this.itemEnd=function(e){a++,r.onProgress!==void 0&&r.onProgress(e,a,o),a===o&&(i=!1,r.onLoad!==void 0&&r.onLoad())},this.itemError=function(e){r.onError!==void 0&&r.onError(e)},this.resolveURL=function(e){return s?s(e):e},this.setURLModifier=function(e){return s=e,this},this.addHandler=function(e,t){return c.push(e,t),this},this.removeHandler=function(e){let t=c.indexOf(e);return t!==-1&&c.splice(t,2),this},this.getHandler=function(e){for(let t=0,n=c.length;t<n;t+=2){let n=c[t],r=c[t+1];if(n.global&&(n.lastIndex=0),n.test(e))return r}return null},this.abort=function(){return this.abortController.abort(),this._abortController=null,this}}get abortController(){return this._abortController||(this._abortController=new AbortController),this._abortController}};var Yt=class{constructor(e){this.manager=e===void 0?Jt:e,this.crossOrigin=`anonymous`,this.withCredentials=!1,this.path=``,this.resourcePath=``,this.requestHeader={},typeof __THREE_DEVTOOLS__<`u`&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(`observe`,{detail:this}))}load(){}loadAsync(e,t){let n=this;return new Promise(function(r,i){n.load(e,r,t,i)})}parse(){}setCrossOrigin(e){return this.crossOrigin=e,this}setWithCredentials(e){return this.withCredentials=e,this}setPath(e){return this.path=e,this}setResourcePath(e){return this.resourcePath=e,this}setRequestHeader(e){return this.requestHeader=e,this}abort(){return this}};Yt.DEFAULT_MATERIAL_NAME=`__DEFAULT`;const Xt=RegExp(`[\\\\[\\\\]\\\\.:\\\\/]`,`g`),Zt=RegExp(`^((?:[^\\\\[\\\\]\\\\.:\\\\/]+[\\\\/:])*)([^\\\\[\\\\]:\\\\/]+)?(?:\\\\.([^\\\\[\\\\]\\\\.:\\\\/]+)(?:\\\\[(.+)\\\\])?)?\\\\.([^\\\\[\\\\]\\\\.:\\\\/]+)(?:\\\\[(.+)\\\\])?$`),Qt=[`material`,`materials`,`bones`,`map`];var $t=class{constructor(e,t,n){let r=n||$.parseTrackName(t);this._targetGroup=e,this._bindings=e.subscribe_(t,r)}getValue(e,t){this.bind();let n=this._targetGroup.nCachedObjects_,r=this._bindings[n];r!==void 0&&r.getValue(e,t)}setValue(e,t){let n=this._bindings;for(let r=this._targetGroup.nCachedObjects_,i=n.length;r!==i;++r)n[r].setValue(e,t)}bind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,n=e.length;t!==n;++t)e[t].bind()}unbind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,n=e.length;t!==n;++t)e[t].unbind()}},$=class e{constructor(t,n,r){this.path=n,this.parsedPath=r||e.parseTrackName(n),this.node=e.findNode(t,this.parsedPath.nodeName),this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,n,r){return t&&t.isAnimationObjectGroup?new e.Composite(t,n,r):new e(t,n,r)}static sanitizeNodeName(e){return e.replace(/\\s/g,`_`).replace(Xt,``)}static parseTrackName(e){let t=Zt.exec(e);if(t===null)throw Error(`PropertyBinding: Cannot parse trackName: `+e);let n={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]},r=n.nodeName&&n.nodeName.lastIndexOf(`.`);if(r!==void 0&&r!==-1){let e=n.nodeName.substring(r+1);Qt.indexOf(e)!==-1&&(n.nodeName=n.nodeName.substring(0,r),n.objectName=e)}if(n.propertyName===null||n.propertyName.length===0)throw Error(`PropertyBinding: can not parse propertyName from trackName: `+e);return n}static findNode(e,t){if(t===void 0||t===``||t===`.`||t===-1||t===e.name||t===e.uuid)return e;if(e.skeleton){let n=e.skeleton.getBoneByName(t);if(n!==void 0)return n}if(e.children){let n=function(e){for(let r=0;r<e.length;r++){let i=e[r];if(i.name===t||i.uuid===t)return i;let a=n(i.children);if(a)return a}return null},r=n(e.children);if(r)return r}return null}_getValue_unavailable(){}_setValue_unavailable(){}_getValue_direct(e,t){e[t]=this.targetObject[this.propertyName]}_getValue_array(e,t){let n=this.resolvedProperty;for(let r=0,i=n.length;r!==i;++r)e[t++]=n[r]}_getValue_arrayElement(e,t){e[t]=this.resolvedProperty[this.propertyIndex]}_getValue_toArray(e,t){this.resolvedProperty.toArray(e,t)}_setValue_direct(e,t){this.targetObject[this.propertyName]=e[t]}_setValue_direct_setNeedsUpdate(e,t){this.targetObject[this.propertyName]=e[t],this.targetObject.needsUpdate=!0}_setValue_direct_setMatrixWorldNeedsUpdate(e,t){this.targetObject[this.propertyName]=e[t],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_array(e,t){let n=this.resolvedProperty;for(let r=0,i=n.length;r!==i;++r)n[r]=e[t++]}_setValue_array_setNeedsUpdate(e,t){let n=this.resolvedProperty;for(let r=0,i=n.length;r!==i;++r)n[r]=e[t++];this.targetObject.needsUpdate=!0}_setValue_array_setMatrixWorldNeedsUpdate(e,t){let n=this.resolvedProperty;for(let r=0,i=n.length;r!==i;++r)n[r]=e[t++];this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_arrayElement(e,t){this.resolvedProperty[this.propertyIndex]=e[t]}_setValue_arrayElement_setNeedsUpdate(e,t){this.resolvedProperty[this.propertyIndex]=e[t],this.targetObject.needsUpdate=!0}_setValue_arrayElement_setMatrixWorldNeedsUpdate(e,t){this.resolvedProperty[this.propertyIndex]=e[t],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_fromArray(e,t){this.resolvedProperty.fromArray(e,t)}_setValue_fromArray_setNeedsUpdate(e,t){this.resolvedProperty.fromArray(e,t),this.targetObject.needsUpdate=!0}_setValue_fromArray_setMatrixWorldNeedsUpdate(e,t){this.resolvedProperty.fromArray(e,t),this.targetObject.matrixWorldNeedsUpdate=!0}_getValue_unbound(e,t){this.bind(),this.getValue(e,t)}_setValue_unbound(e,t){this.bind(),this.setValue(e,t)}bind(){let t=this.node,n=this.parsedPath,r=n.objectName,i=n.propertyName,a=n.propertyIndex;if(t||(t=e.findNode(this.rootNode,n.nodeName),this.node=t),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,!t){F(`PropertyBinding: No target node found for track: `+this.path+`.`);return}if(r){let e=n.objectIndex;switch(r){case`materials`:if(!t.material){I(`PropertyBinding: Can not bind to material as node does not have a material.`,this);return}if(!t.material.materials){I(`PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.`,this);return}t=t.material.materials;break;case`bones`:if(!t.skeleton){I(`PropertyBinding: Can not bind to bones as node does not have a skeleton.`,this);return}t=t.skeleton.bones;for(let n=0;n<t.length;n++)if(t[n].name===e){e=n;break}break;case`map`:if(`map`in t){t=t.map;break}if(!t.material){I(`PropertyBinding: Can not bind to material as node does not have a material.`,this);return}if(!t.material.map){I(`PropertyBinding: Can not bind to material.map as node.material does not have a map.`,this);return}t=t.material.map;break;default:if(t[r]===void 0){I(`PropertyBinding: Can not bind to objectName of node undefined.`,this);return}t=t[r]}if(e!==void 0){if(t[e]===void 0){I(`PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.`,this,t);return}t=t[e]}}let o=t[i];if(o===void 0){let e=n.nodeName;I(`PropertyBinding: Trying to update property for track: `+e+`.`+i+` but it wasn't found.`,t);return}let s=this.Versioning.None;this.targetObject=t,t.isMaterial===!0?s=this.Versioning.NeedsUpdate:t.isObject3D===!0&&(s=this.Versioning.MatrixWorldNeedsUpdate);let c=this.BindingType.Direct;if(a!==void 0){if(i===`morphTargetInfluences`){if(!t.geometry){I(`PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.`,this);return}if(!t.geometry.morphAttributes){I(`PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.`,this);return}t.morphTargetDictionary[a]!==void 0&&(a=t.morphTargetDictionary[a])}c=this.BindingType.ArrayElement,this.resolvedProperty=o,this.propertyIndex=a}else o.fromArray!==void 0&&o.toArray!==void 0?(c=this.BindingType.HasFromToArray,this.resolvedProperty=o):Array.isArray(o)?(c=this.BindingType.EntireArray,this.resolvedProperty=o):this.propertyName=i;this.getValue=this.GetterByBindingType[c],this.setValue=this.SetterByBindingTypeAndVersioning[c][s]}unbind(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}};$.Composite=$t,$.prototype.BindingType={Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},$.prototype.Versioning={None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},$.prototype.GetterByBindingType=[$.prototype._getValue_direct,$.prototype._getValue_array,$.prototype._getValue_arrayElement,$.prototype._getValue_toArray],$.prototype.SetterByBindingTypeAndVersioning=[[$.prototype._setValue_direct,$.prototype._setValue_direct_setNeedsUpdate,$.prototype._setValue_direct_setMatrixWorldNeedsUpdate],[$.prototype._setValue_array,$.prototype._setValue_array_setNeedsUpdate,$.prototype._setValue_array_setMatrixWorldNeedsUpdate],[$.prototype._setValue_arrayElement,$.prototype._setValue_arrayElement_setNeedsUpdate,$.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate],[$.prototype._setValue_fromArray,$.prototype._setValue_fromArray_setNeedsUpdate,$.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate]],oe=class{constructor(e,t,n,r){this.elements=[1,0,0,1],e!==void 0&&this.set(e,t,n,r)}identity(){return this.set(1,0,0,1),this}fromArray(e,t=0){for(let n=0;n<4;n++)this.elements[n]=e[n+t];return this}set(e,t,n,r){let i=this.elements;return i[0]=e,i[2]=t,i[1]=n,i[3]=r,this}},oe.prototype.isMatrix2=!0,typeof __THREE_DEVTOOLS__<`u`&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(`register`,{detail:{revision:`184`}})),typeof window<`u`&&(window.__THREE__?F(`WARNING: Multiple instances of Three.js being imported.`):window.__THREE__=`184`);async function en(e,t,n,r){let i=e.buffer,a=new DataView(i),o=e.schema,s=e.scale,c=e.offset,l=e.mins,u=o.reduce((e,t)=>(e[t.name]=t,e),{}),d=e=>{let t=0;for(let n=0;n<o.length;++n){if(o[n].name===e)return t;t+=o[n].size}};function f(e){let t=d(e),n=u[e].type,r=u[e].size;if(n==`signed`)switch(r){case 1:return e=>a.getInt8(e+t);case 2:return e=>a.getInt16(e+t,!0);case 4:return e=>a.getInt32(e+t,!0);default:throw Error(`Unrecognized byte size for \"signed\" numbers`)}if(n==`unsigned`)switch(r){case 1:return e=>a.getUint8(e+t);case 2:return e=>a.getUint16(e+t,!0);case 4:return e=>a.getUint32(e+t,!0);default:throw Error(`Unrecognized byte size for \"unsigned\" numbers`)}if(n==`float`)switch(r){case 4:return e=>a.getFloat32(e+t,!0);case 8:return e=>a.getFloat64(e+t,!0);default:throw Error(`Unrecognized byte size for \"float\" numbers`)}let i=JSON.stringify(u[e]);throw Error(`Invalid dimension specification for ${e}: ${i}`)}let p=o.reduce((e,t)=>e+t.size,0);if(p===0||i.byteLength===0)throw Error(`Invalid buffer: pointSize=${p}, byteLength=${i.byteLength}`);let m=Math.floor(i.byteLength/p);if(m===0)throw Error(`Buffer too small: ${i.byteLength} bytes for point size ${p}`);let h,g,_,v,y,b,x,S,C,w,T,E,D,O,k,A,ee,te,j=!1,re=new ArrayBuffer(m*4*3),M=new Float32Array(re),ie=[f(`X`),f(`Y`),f(`Z`)];if(u.Red&&u.Green&&u.Blue){h=new ArrayBuffer(m*4),x=new Uint8Array(h),D=[f(`Red`),f(`Green`),f(`Blue`)];let e,t,n,r;for(let i=0;i<m&&!j;++i)r=i*p,e=D[0](r),t=D[1](r),n=D[2](r),(e>255||t>255||n>255)&&(j=!0)}u.Intensity&&(g=new ArrayBuffer(m*4),S=new Float32Array(g),O=f(`Intensity`)),u.Classification&&(_=new ArrayBuffer(m),C=new Uint8Array(_),k=f(`Classification`)),u.ReturnNumber&&(v=new ArrayBuffer(m),w=new Uint8Array(v),A=f(`ReturnNumber`)),u.NumberOfReturns&&(y=new ArrayBuffer(m),T=new Uint8Array(y),ee=f(`NumberOfReturns`)),u.PointSourceId&&(b=new ArrayBuffer(m*2),E=new Uint16Array(b),te=f(`PointSourceId`));let ae=[0,0,0],N={min:[Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE],max:[-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE]},oe,se,ce,le,ue,de;for(let e=0;e<m;++e){let t=e*p;M&&(oe=ie[0](t)*s[0]+c[0]-l[0],se=ie[1](t)*s[1]+c[1]-l[1],ce=ie[2](t)*s[2]+c[2]-l[2],ae[0]+=oe/m,ae[1]+=se/m,ae[2]+=ce/m,N.min[0]=Math.min(N.min[0],oe),N.min[1]=Math.min(N.min[1],se),N.min[2]=Math.min(N.min[2],ce),N.max[0]=Math.max(N.max[0],oe),N.max[1]=Math.max(N.max[1],se),N.max[2]=Math.max(N.max[2],ce),M[3*e+0]=oe,M[3*e+1]=se,M[3*e+2]=ce),x&&(le=D[0](t),ue=D[1](t),de=D[2](t),j&&(le/=256,ue/=256,de/=256),x[4*e+0]=le,x[4*e+1]=ue,x[4*e+2]=de),S&&(S[e]=O(t)),C&&(C[e]=k(t)),w&&(w[e]=A(t)),T&&(T[e]=ee(t)),E&&(E[e]=te(t))}let fe=new ArrayBuffer(m*4),pe=new Uint32Array(fe);for(let e=0;e<m;++e)pe[e]=e;let me=(await ne(M,t,new z().fromArray(n),new wt(new z().fromArray(r.min),new z().fromArray(r.max)))).buffer;return{numPoints:m,tightBoundingBox:N,mean:ae,position:re,color:h,intensity:g,classification:_,returnNumber:v,numberOfReturns:y,pointSourceId:b,indices:fe,objectId:me}}\n/**\n* @license\n* Copyright 2019 Google LLC\n* SPDX-License-Identifier: Apache-2.0\n*/\nconst tn=Symbol(`Comlink.proxy`),nn=Symbol(`Comlink.endpoint`),rn=Symbol(`Comlink.releaseProxy`),an=Symbol(`Comlink.finalizer`),on=Symbol(`Comlink.thrown`),sn=e=>typeof e==`object`&&!!e||typeof e==`function`,cn=new Map([[`proxy`,{canHandle:e=>sn(e)&&e[tn],serialize(e){let{port1:t,port2:n}=new MessageChannel;return un(e,t),[n,[n]]},deserialize(e){return e.start(),pn(e)}}],[`throw`,{canHandle:e=>sn(e)&&on in e,serialize({value:e}){let t;return t=e instanceof Error?{isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:{isError:!1,value:e},[t,[]]},deserialize(e){throw e.isError?Object.assign(Error(e.value.message),e.value):e.value}}]]);function ln(e,t){for(let n of e)if(t===n||n===`*`||n instanceof RegExp&&n.test(t))return!0;return!1}function un(e,t=globalThis,n=[`*`]){t.addEventListener(`message`,function r(i){if(!i||!i.data)return;if(!ln(n,i.origin)){console.warn(`Invalid origin '${i.origin}' for comlink proxy`);return}let{id:a,type:o,path:s}=Object.assign({path:[]},i.data),c=(i.data.argumentList||[]).map(Dn),l;try{let t=s.slice(0,-1).reduce((e,t)=>e[t],e),n=s.reduce((e,t)=>e[t],e);switch(o){case`GET`:l=n;break;case`SET`:t[s.slice(-1)[0]]=Dn(i.data.value),l=!0;break;case`APPLY`:l=n.apply(t,c);break;case`CONSTRUCT`:l=Tn(new n(...c));break;case`ENDPOINT`:{let{port1:t,port2:n}=new MessageChannel;un(e,n),l=wn(t,[t])}break;case`RELEASE`:l=void 0;break;default:return}}catch(e){l={value:e,[on]:0}}Promise.resolve(l).catch(e=>({value:e,[on]:0})).then(n=>{let[i,s]=En(n);t.postMessage(Object.assign(Object.assign({},i),{id:a}),s),o===`RELEASE`&&(t.removeEventListener(`message`,r),fn(t),an in e&&typeof e[an]==`function`&&e[an]())}).catch(e=>{let[n,r]=En({value:TypeError(`Unserializable return value`),[on]:0});t.postMessage(Object.assign(Object.assign({},n),{id:a}),r)})}),t.start&&t.start()}function dn(e){return e.constructor.name===`MessagePort`}function fn(e){dn(e)&&e.close()}function pn(e,t){let n=new Map;return e.addEventListener(`message`,function(e){let{data:t}=e;if(!t||!t.id)return;let r=n.get(t.id);if(r)try{r(t)}finally{n.delete(t.id)}}),bn(e,n,[],t)}function mn(e){if(e)throw Error(`Proxy has been released and is not useable`)}function hn(e){return On(e,new Map,{type:`RELEASE`}).then(()=>{fn(e)})}const gn=new WeakMap,_n=`FinalizationRegistry`in globalThis&&new FinalizationRegistry(e=>{let t=(gn.get(e)||0)-1;gn.set(e,t),t===0&&hn(e)});function vn(e,t){let n=(gn.get(t)||0)+1;gn.set(t,n),_n&&_n.register(e,t,e)}function yn(e){_n&&_n.unregister(e)}function bn(e,t,n=[],r=function(){}){let i=!1,a=new Proxy(r,{get(r,o){if(mn(i),o===rn)return()=>{yn(a),hn(e),t.clear(),i=!0};if(o===`then`){if(n.length===0)return{then:()=>a};let r=On(e,t,{type:`GET`,path:n.map(e=>e.toString())}).then(Dn);return r.then.bind(r)}return bn(e,t,[...n,o])},set(r,a,o){mn(i);let[s,c]=En(o);return On(e,t,{type:`SET`,path:[...n,a].map(e=>e.toString()),value:s},c).then(Dn)},apply(r,a,o){mn(i);let s=n[n.length-1];if(s===nn)return On(e,t,{type:`ENDPOINT`}).then(Dn);if(s===`bind`)return bn(e,t,n.slice(0,-1));let[c,l]=Sn(o);return On(e,t,{type:`APPLY`,path:n.map(e=>e.toString()),argumentList:c},l).then(Dn)},construct(r,a){mn(i);let[o,s]=Sn(a);return On(e,t,{type:`CONSTRUCT`,path:n.map(e=>e.toString()),argumentList:o},s).then(Dn)}});return vn(a,e),a}function xn(e){return Array.prototype.concat.apply([],e)}function Sn(e){let t=e.map(En);return[t.map(e=>e[0]),xn(t.map(e=>e[1]))]}const Cn=new WeakMap;function wn(e,t){return Cn.set(e,t),e}function Tn(e){return Object.assign(e,{[tn]:!0})}function En(e){for(let[t,n]of cn)if(n.canHandle(e)){let[r,i]=n.serialize(e);return[{type:`HANDLER`,name:t,value:r},i]}return[{type:`RAW`,value:e},Cn.get(e)||[]]}function Dn(e){switch(e.type){case`HANDLER`:return cn.get(e.name).deserialize(e.value);case`RAW`:return e.value}}function On(e,t,n,r){return new Promise(i=>{let a=kn();t.set(a,i),e.start&&e.start(),e.postMessage(Object.assign({id:a},n),r)})}function kn(){return[,,,,].fill(0).map(()=>Math.floor(Math.random()*(2**53-1)).toString(16)).join(`-`)}\n/*!\n* Copyright 2022 Cognite AS\n*/\nasync function An(e,t,n,r){let i=await en(e,t,n,r);return wn(i,[i.position,i.color,i.intensity,i.classification,i.returnNumber,i.numberOfReturns,i.pointSourceId,i.indices,i.objectId].filter(jn))}function jn(e){return e!==void 0}un(An);\n//# sourceMappingURL=eptBinaryDecoder.worker-BT7AmyFD.js.map", Qf = typeof self < "u" && self.Blob && new Blob(["URL.revokeObjectURL(import.meta.url);", Zf], { type: "text/javascript;charset=utf-8" });
|
|
13968
13989
|
function $f(e) {
|
|
13969
13990
|
let t;
|
|
13970
13991
|
try {
|
|
@@ -14347,10 +14368,10 @@ var mp, hp = class e {
|
|
|
14347
14368
|
let [n, r, i, a] = e.split("-").map((e) => parseInt(e, 10)), [o, s, c, l] = t.split("-").map((e) => parseInt(e, 10));
|
|
14348
14369
|
return n < o ? -1 : n > o ? 1 : r < s ? -1 : r > s ? 1 : i < c ? -1 : i > c ? 1 : a < l ? -1 : +(a > l);
|
|
14349
14370
|
}).forEach((n) => {
|
|
14350
|
-
let [i, a, o, s] = n.split("-").map((e) => parseInt(e, 10)), c = a & 1, l = o & 1, u = s & 1, d =
|
|
14351
|
-
if (!
|
|
14352
|
-
let
|
|
14353
|
-
|
|
14371
|
+
let [i, a, o, s] = n.split("-").map((e) => parseInt(e, 10)), c = a & 1, l = o & 1, u = s & 1, d = i - 1 + "-" + (a >> 1) + "-" + (o >> 1) + "-" + (s >> 1), f = t[d];
|
|
14372
|
+
if (!f) return;
|
|
14373
|
+
let p = f.key.step(c, l, u), m = new e(this.ept, this._dataLoader, this._modelIdentifier, this._eptMetadata, this._signedFilesBaseUrl, p.b, p.d, p.x, p.y, p.z);
|
|
14374
|
+
m._level = i, m._numPoints = r[n], f.addChild(m), t[p.name()] = m;
|
|
14354
14375
|
});
|
|
14355
14376
|
}
|
|
14356
14377
|
doneLoading(e, t, n, r) {
|
|
@@ -15086,18 +15107,33 @@ var Rp = class {
|
|
|
15086
15107
|
this._modelMetadataProvider = e, this._modelDataProvider = t, this._blobFileName = n;
|
|
15087
15108
|
}
|
|
15088
15109
|
async loadData(e) {
|
|
15089
|
-
|
|
15090
|
-
let r = await this.getSupportedOutput(e), i = this._modelMetadataProvider.getModelUri(e, r), a = (t = (n = this._modelMetadataProvider).getModelUriForSignedFiles) == null ? void 0 : t.call(n), o = this._modelMetadataProvider.getModelMatrix(e, Z.EptPointCloud), s = this._modelMetadataProvider.getModelCamera(e), c = await i, l = await o, u = e instanceof cs && a !== void 0 ? await this.loadPointCloudMetadataFromSignedFiles(e, a, this._blobFileName) : await this.loadPointCloudMetadataFromBaseUrl(c, this._blobFileName), d = u.fileData, f = await s;
|
|
15110
|
+
let t = await this.getSupportedOutput(e), n = this._modelMetadataProvider.getModelUri(e, t), r = this._modelMetadataProvider.getModelMatrix(e, Z.EptPointCloud), i = this._modelMetadataProvider.getModelCamera(e), [a, o] = await Promise.all([n, r]), { jsonData: s, signedFilesBaseUrl: c } = await this.getJsonDataWithSignedFilesBaseUrl(e, a), l = s.fileData, u = await i;
|
|
15091
15111
|
return {
|
|
15092
15112
|
modelIdentifier: e,
|
|
15093
|
-
format:
|
|
15094
|
-
formatVersion:
|
|
15095
|
-
modelBaseUrl:
|
|
15096
|
-
signedFilesBaseUrl:
|
|
15097
|
-
modelMatrix:
|
|
15098
|
-
cameraConfiguration: Un(
|
|
15099
|
-
scene:
|
|
15100
|
-
signedFiles:
|
|
15113
|
+
format: t.format,
|
|
15114
|
+
formatVersion: t.version,
|
|
15115
|
+
modelBaseUrl: a,
|
|
15116
|
+
signedFilesBaseUrl: c,
|
|
15117
|
+
modelMatrix: o,
|
|
15118
|
+
cameraConfiguration: Un(u, o),
|
|
15119
|
+
scene: l,
|
|
15120
|
+
signedFiles: s.signedFiles
|
|
15121
|
+
};
|
|
15122
|
+
}
|
|
15123
|
+
async getJsonDataWithSignedFilesBaseUrl(e, t) {
|
|
15124
|
+
var n, r;
|
|
15125
|
+
let i = (n = (r = this._modelMetadataProvider).getModelUriForSignedFiles) == null ? void 0 : n.call(r);
|
|
15126
|
+
if (e instanceof cs && i !== void 0) try {
|
|
15127
|
+
return {
|
|
15128
|
+
jsonData: await this.loadPointCloudMetadataFromSignedFiles(e, i, this._blobFileName),
|
|
15129
|
+
signedFilesBaseUrl: i
|
|
15130
|
+
};
|
|
15131
|
+
} catch (e) {
|
|
15132
|
+
console.warn(`Failed to load point cloud metadata from signed files: ${e}. Using fallback to base URL fetching.`);
|
|
15133
|
+
}
|
|
15134
|
+
return {
|
|
15135
|
+
jsonData: await this.loadPointCloudMetadataFromBaseUrl(t, this._blobFileName),
|
|
15136
|
+
signedFilesBaseUrl: void 0
|
|
15101
15137
|
};
|
|
15102
15138
|
}
|
|
15103
15139
|
async loadPointCloudMetadataFromSignedFiles(e, t, n) {
|
|
@@ -15988,7 +16024,7 @@ var xm = class {
|
|
|
15988
16024
|
this._materialManager.setRenderMode(e);
|
|
15989
16025
|
}
|
|
15990
16026
|
doesModelHaveCompatibleFormat(e) {
|
|
15991
|
-
return this._compatibleFileFormat === void 0
|
|
16027
|
+
return this._compatibleFileFormat === void 0 || (this._compatibleFileFormat.format === e.format || this._compatibleGltfFormats.includes(this._compatibleFileFormat.format) && this._compatibleGltfFormats.includes(e.format)) && this._compatibleFileFormat.version === e.formatVersion;
|
|
15992
16028
|
}
|
|
15993
16029
|
updateModelCompatibilityFormat(e) {
|
|
15994
16030
|
var t;
|
|
@@ -16350,13 +16386,16 @@ var Jm = class e {
|
|
|
16350
16386
|
this._revealManager = t, this._type = e;
|
|
16351
16387
|
}
|
|
16352
16388
|
static createLocalHelper(t, n, r, i) {
|
|
16353
|
-
|
|
16389
|
+
let a = Wm(t, n, r, i);
|
|
16390
|
+
return new e("local", a);
|
|
16354
16391
|
}
|
|
16355
16392
|
static createCdfHelper(t, n, r, i, a) {
|
|
16356
|
-
|
|
16393
|
+
let o = Gm(a, t, n, r, i);
|
|
16394
|
+
return new e("cdf", o);
|
|
16357
16395
|
}
|
|
16358
16396
|
static createCustomDataSourceHelper(t, n, r, i, a) {
|
|
16359
|
-
|
|
16397
|
+
let o = Km("custom-datasource", "custom-datasource-app", a.getModelMetadataProvider(), a.getModelDataProvider(), new Zu(), new sd(), new Yp(), t, n, r, i);
|
|
16398
|
+
return new e("cdf", o);
|
|
16360
16399
|
}
|
|
16361
16400
|
get revealManager() {
|
|
16362
16401
|
return this._revealManager;
|
|
@@ -18077,7 +18116,7 @@ var ug = class extends Gn {
|
|
|
18077
18116
|
var t;
|
|
18078
18117
|
let n = await this._raycastCallback(e.x, e.y, !1);
|
|
18079
18118
|
return (t = n.intersection) != null && t.point ? n.intersection.point : this.getTargetByBoundingBox(e, n.modelsBoundingBox);
|
|
18080
|
-
}, this._hasEventListeners = a == null
|
|
18119
|
+
}, this._hasEventListeners = a == null || a, this._controls = new Lh(n, e, new Yh()), this._controls.getPickedPointByPixelCoordinates = this.getPickedPointByPixelCoordinates, this._raycastCallback = t, this._hasEventListeners && (this._pointerEventsTarget = new Xn(e, this), this.addEventListeners()), r && (this._markers = new $h(r)), this.isEnabled = !0, this.on("cameraChange", () => {
|
|
18081
18120
|
this.isEnabled && (this._nearAndFarNeedsUpdate = !0, this._markers && this._markers.update(this));
|
|
18082
18121
|
});
|
|
18083
18122
|
}
|
|
@@ -18514,7 +18553,7 @@ var Tg = class {
|
|
|
18514
18553
|
}, this.onHover = (e) => this.setHoverIconOnIntersect(e.offsetX, e.offsetY), this.onClick = (e) => this.enter360ImageOnIntersect(e), this.updateHoverStateOnRenderHandler = () => {
|
|
18515
18554
|
let e = this._interactionState.lastMousePosition;
|
|
18516
18555
|
e !== void 0 && this.setHoverIconOnIntersect(e.offsetX, e.offsetY);
|
|
18517
|
-
}, this._hasEventListeners = o == null
|
|
18556
|
+
}, this._hasEventListeners = o == null || o, this._enableFloorIcons = (c = s == null ? void 0 : s.enableFloorIcons) != null && c;
|
|
18518
18557
|
let l = new _l(e), u = new Vu(e), d = new Mu(e), f = new wu(e), p = new cl(ll(e)), m = new Fu(e), h = new cd(l, m, p), g = new cd(u, m, p), _ = new cd(d, m, f), v = new Qc(/* @__PURE__ */ new Map([
|
|
18519
18558
|
["event", h],
|
|
18520
18559
|
["dm", g],
|
|
@@ -18879,7 +18918,7 @@ var kg = class {
|
|
|
18879
18918
|
temporaryBox: new i()
|
|
18880
18919
|
}, rn.peerDependencies.three.split(".")[1].toString() != Se && Vo.warn(`The version of the dependency \"three\" is different from what Reveal expects, which may cause unexpected results.
|
|
18881
18920
|
In case of unexpected issues, please set the version to ${rn.peerDependencies.three}`), this._renderer = (t = e.renderer) == null ? Mg() : t, this._renderer.localClippingEnabled = !0, this._ownsRenderer = e.renderer === void 0, this.canvas.style.width = "640px", this.canvas.style.height = "480px", this.canvas.style.minWidth = "100%", this.canvas.style.minHeight = "100%", this.canvas.style.maxWidth = "100%", this.canvas.style.maxHeight = "100%", this.canvas.style.touchAction = "none", this._domElement = (n = e.domElement) == null ? jg() : n, this._domElement.tabIndex = 0, this._domElement.appendChild(this.canvas), this._domElementResizeObserver = this.setupDomElementResizeListener(this._domElement), this.sessionLogger = new Xo(), this.spinner = new nm(this.domElement), this.spinner.placement = (r = (a = e.loadingIndicatorStyle) == null ? void 0 : a.placement) == null ? "topLeft" : r, this.spinner.opacity = Math.max(.2, (o = (s = e.loadingIndicatorStyle) == null ? void 0 : s.opacity) == null ? 1 : o), this._sceneHandler = new ni(), this._mouseHandler = new tr(this.domElement);
|
|
18882
|
-
let u = (c = e.useFlexibleCameraManager)
|
|
18921
|
+
let u = (c = e.useFlexibleCameraManager) != null && c, f = (l = e.cameraManager) == null ? u ? new ug(this._domElement, (e, t, n) => this.modelIntersectionCallback(e, t, n), void 0, this._sceneHandler.scene, e.hasEventListeners) : new hh(this._domElement, this._mouseHandler, (e, t, n) => this.modelIntersectionCallback(e, t, n), void 0) : l;
|
|
18883
18922
|
this._activeCameraManager = new vh(f);
|
|
18884
18923
|
let p = Pg(e, this._renderer.getPixelRatio());
|
|
18885
18924
|
if (e._localModels === !0) this._dataSource = new yg(), this._cdfSdkClient = void 0, this._revealManagerHelper = Jm.createLocalHelper(this._renderer, this._sceneHandler, this._activeCameraManager, p);
|
|
@@ -18888,14 +18927,14 @@ var kg = class {
|
|
|
18888
18927
|
var m, h, g, _, v, y;
|
|
18889
18928
|
this._dataSource = new vg(e.sdk), this._cdfSdkClient = e.sdk, this._revealManagerHelper = Jm.createCdfHelper(this._renderer, this._sceneHandler, this._activeCameraManager, p, e.sdk), this._image360ApiHelper = new Tg(e.sdk, this._sceneHandler, this._domElement, this._activeCameraManager, this._mouseHandler, this._events.beforeSceneRendered, e.hasEventListeners, {
|
|
18890
18929
|
platformMaxPointsSize: Fg(this._renderer),
|
|
18891
|
-
enableHtmlClusters: (m = e.enableHtmlClusters)
|
|
18930
|
+
enableHtmlClusters: (m = e.enableHtmlClusters) != null && m,
|
|
18892
18931
|
htmlClusterOptions: {
|
|
18893
18932
|
clusterFadeStartDistance: (h = e.htmlClusterOptions) == null ? void 0 : h.fadeStartDistance,
|
|
18894
18933
|
clusterFadeEndDistance: (g = e.htmlClusterOptions) == null ? void 0 : g.fadeEndDistance,
|
|
18895
18934
|
clusterDistanceThreshold: (_ = e.htmlClusterOptions) == null ? void 0 : _.clusterDistanceThreshold,
|
|
18896
18935
|
maxOctreeDepth: (v = e.htmlClusterOptions) == null ? void 0 : v.maxOctreeDepth
|
|
18897
18936
|
},
|
|
18898
|
-
enableFloorIcons: (y = e.enableFloorIcons)
|
|
18937
|
+
enableFloorIcons: (y = e.enableFloorIcons) != null && y
|
|
18899
18938
|
});
|
|
18900
18939
|
}
|
|
18901
18940
|
this._pickingHandler = new bf(this._renderer, this._revealManagerHelper.revealManager.materialManager, this._sceneHandler), this._pointCloudPickingHandler = new Dp(this._renderer);
|
|
@@ -19075,7 +19114,7 @@ var kg = class {
|
|
|
19075
19114
|
var r, i;
|
|
19076
19115
|
if (e !== "events" && e !== "datamodels") throw Error(`${e} is an unknown datasource from 360 images`);
|
|
19077
19116
|
if (this._cdfSdkClient === void 0 || this._image360ApiHelper === void 0) throw Error("Adding 360 image sets is only supported when connecting to Cognite Data Fusion");
|
|
19078
|
-
let a = (r = n == null ? void 0 : n.collectionTransform) == null ? new O() : r, o = (i = n == null ? void 0 : n.preMultipliedRotation) == null
|
|
19117
|
+
let a = (r = n == null ? void 0 : n.collectionTransform) == null ? new O() : r, o = (i = n == null ? void 0 : n.preMultipliedRotation) == null || i, s = await this._image360ApiHelper.add360ImageSet(t, a, o, n == null ? void 0 : n.annotationFilter), c = s.image360Entities.length;
|
|
19079
19118
|
return X.trackEvent("360ImageCollectionAdded", {
|
|
19080
19119
|
datasource: e,
|
|
19081
19120
|
numberOf360Images: c
|
|
@@ -19341,7 +19380,7 @@ var kg = class {
|
|
|
19341
19380
|
B.update(e), this.recalculateBoundingBox();
|
|
19342
19381
|
let c = this._activeCameraManager.innerCameraManager;
|
|
19343
19382
|
c instanceof ug && c.updateModelBoundingBox(this.getSceneBoundingBox()), this._activeCameraManager.update(this.cameraManagerClock.getDelta(), this._boundingBoxes.nearFarPlaneBoundingBox), this.revealManager.update(s);
|
|
19344
|
-
let l = (t = (n = this._image360ApiHelper) == null ? void 0 : n.needsRedraw)
|
|
19383
|
+
let l = (t = (n = this._image360ApiHelper) == null ? void 0 : n.needsRedraw) != null && t, u = (this.revealManager.needsRedraw || this._clippingNeedsUpdate || l) && !this._forceStopRendering;
|
|
19345
19384
|
if (this.sessionLogger.tickCurrentAnimationFrame(u), !u) return;
|
|
19346
19385
|
let d = this.renderer.info.render.frame, f = Date.now();
|
|
19347
19386
|
this._events.beforeSceneRendered.fire({
|
|
@@ -19391,7 +19430,7 @@ var kg = class {
|
|
|
19391
19430
|
{
|
|
19392
19431
|
var o;
|
|
19393
19432
|
this._forceStopRendering = !0;
|
|
19394
|
-
let e = this.getModels("cad"), t = e.map((e) => e.cadNode), a = await this._pickingHandler.intersectCadNodes(t, r, (o = n == null ? void 0 : n.asyncCADIntersection) == null
|
|
19433
|
+
let e = this.getModels("cad"), t = e.map((e) => e.cadNode), a = await this._pickingHandler.intersectCadNodes(t, r, (o = n == null ? void 0 : n.asyncCADIntersection) == null || o);
|
|
19395
19434
|
if (this._forceStopRendering = !1, a.length > 0) {
|
|
19396
19435
|
let t = a[0];
|
|
19397
19436
|
for (let n of e) if (n.cadNode === t.cadNode) {
|
|
@@ -19637,7 +19676,11 @@ var Ig = class {
|
|
|
19637
19676
|
let t = e == null ? this.viewerCamera : e, n = this._viewer.canvas, { camPos: r, camNormal: i, point: a, nearPlane: o, farPlane: s, position2D: c } = this._preallocatedVariables;
|
|
19638
19677
|
t.getWorldPosition(r), t.getWorldDirection(i), a.copy(r).addScaledVector(i, t.near), o.setFromNormalAndCoplanarPoint(i, a), a.copy(r).addScaledVector(i, t.far), s.setFromNormalAndCoplanarPoint(i, a), this._htmlOverlays.forEach((e, i) => {
|
|
19639
19678
|
let { position3D: a, options: { positionUpdatedCallback: l, userData: u }, state: d } = e, f = o.distanceToPoint(a) >= 0 && s.distanceToPoint(a) <= 0, p = ri(this._viewer.getGlobalClippingPlanes(), a), { x: m, y: h } = Xr(n, t, a);
|
|
19640
|
-
f && p ? (d.position2D.set(m, h), d.visible = !0) : d.visible = !1, l
|
|
19679
|
+
if (f && p ? (d.position2D.set(m, h), d.visible = !0) : d.visible = !1, l) {
|
|
19680
|
+
c.set(m, h);
|
|
19681
|
+
let e = r.distanceTo(a);
|
|
19682
|
+
l(i, c, a, e, u);
|
|
19683
|
+
}
|
|
19641
19684
|
}), this.clusterElements(), this.commitDOMChanges();
|
|
19642
19685
|
}
|
|
19643
19686
|
updateNewElementSizes() {
|
|
@@ -20703,7 +20746,7 @@ var __ = class {
|
|
|
20703
20746
|
this._measurements.forEach((t) => {
|
|
20704
20747
|
t.visible(e);
|
|
20705
20748
|
});
|
|
20706
|
-
let t = e
|
|
20749
|
+
let t = e !== !1 && this._showLabels;
|
|
20707
20750
|
this._htmlOverlay.visible(t), this._showMeasurements = e, this._viewer.requestRedraw();
|
|
20708
20751
|
}
|
|
20709
20752
|
dispose() {
|