diff --git a/pr-preview/pr-29/404.html b/pr-preview/pr-29/404.html deleted file mode 100644 index d5cd8dc..0000000 --- a/pr-preview/pr-29/404.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - Wode "Nimo" Ni - - - - - -
- - - - diff --git a/pr-preview/pr-29/android-chrome-192x192.png b/pr-preview/pr-29/android-chrome-192x192.png deleted file mode 100644 index 33dce7c..0000000 Binary files a/pr-preview/pr-29/android-chrome-192x192.png and /dev/null differ diff --git a/pr-preview/pr-29/android-chrome-512x512.png b/pr-preview/pr-29/android-chrome-512x512.png deleted file mode 100644 index 35c0f59..0000000 Binary files a/pr-preview/pr-29/android-chrome-512x512.png and /dev/null differ diff --git a/pr-preview/pr-29/apple-touch-icon-114x114.png b/pr-preview/pr-29/apple-touch-icon-114x114.png deleted file mode 100644 index 88427d8..0000000 Binary files a/pr-preview/pr-29/apple-touch-icon-114x114.png and /dev/null differ diff --git a/pr-preview/pr-29/apple-touch-icon-120x120.png b/pr-preview/pr-29/apple-touch-icon-120x120.png deleted file mode 100644 index 9ce634f..0000000 Binary files a/pr-preview/pr-29/apple-touch-icon-120x120.png and /dev/null differ diff --git a/pr-preview/pr-29/apple-touch-icon-144x144.png b/pr-preview/pr-29/apple-touch-icon-144x144.png deleted file mode 100644 index c2719ea..0000000 Binary files a/pr-preview/pr-29/apple-touch-icon-144x144.png and /dev/null differ diff --git a/pr-preview/pr-29/apple-touch-icon-152x152.png b/pr-preview/pr-29/apple-touch-icon-152x152.png deleted file mode 100644 index 0763f80..0000000 Binary files a/pr-preview/pr-29/apple-touch-icon-152x152.png and /dev/null differ diff --git a/pr-preview/pr-29/apple-touch-icon-167x167.png b/pr-preview/pr-29/apple-touch-icon-167x167.png deleted file mode 100644 index 2d624e0..0000000 Binary files a/pr-preview/pr-29/apple-touch-icon-167x167.png and /dev/null differ diff --git a/pr-preview/pr-29/apple-touch-icon-180x180.png b/pr-preview/pr-29/apple-touch-icon-180x180.png deleted file mode 100644 index d0b295e..0000000 Binary files a/pr-preview/pr-29/apple-touch-icon-180x180.png and /dev/null differ diff --git a/pr-preview/pr-29/apple-touch-icon-57x57.png b/pr-preview/pr-29/apple-touch-icon-57x57.png deleted file mode 100644 index 86d78df..0000000 Binary files a/pr-preview/pr-29/apple-touch-icon-57x57.png and /dev/null differ diff --git a/pr-preview/pr-29/apple-touch-icon-60x60.png b/pr-preview/pr-29/apple-touch-icon-60x60.png deleted file mode 100644 index 34c1d41..0000000 Binary files a/pr-preview/pr-29/apple-touch-icon-60x60.png and /dev/null differ diff --git a/pr-preview/pr-29/apple-touch-icon-72x72.png b/pr-preview/pr-29/apple-touch-icon-72x72.png deleted file mode 100644 index 50cc9e8..0000000 Binary files a/pr-preview/pr-29/apple-touch-icon-72x72.png and /dev/null differ diff --git a/pr-preview/pr-29/apple-touch-icon-76x76.png b/pr-preview/pr-29/apple-touch-icon-76x76.png deleted file mode 100644 index dfd17da..0000000 Binary files a/pr-preview/pr-29/apple-touch-icon-76x76.png and /dev/null differ diff --git a/pr-preview/pr-29/assets/chi-20-natural-diagramming.pdf b/pr-preview/pr-29/assets/chi-20-natural-diagramming.pdf deleted file mode 100644 index dd9cf26..0000000 Binary files a/pr-preview/pr-29/assets/chi-20-natural-diagramming.pdf and /dev/null differ diff --git a/pr-preview/pr-29/assets/diagrams-24-penrose.pdf b/pr-preview/pr-29/assets/diagrams-24-penrose.pdf deleted file mode 100644 index 0750918..0000000 Binary files a/pr-preview/pr-29/assets/diagrams-24-penrose.pdf and /dev/null differ diff --git a/pr-preview/pr-29/assets/edgeworth.svg b/pr-preview/pr-29/assets/edgeworth.svg deleted file mode 100644 index af97f52..0000000 --- a/pr-preview/pr-29/assets/edgeworth.svg +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pr-preview/pr-29/assets/index-7d5d3948.js b/pr-preview/pr-29/assets/index-7d5d3948.js deleted file mode 100644 index bc3d376..0000000 --- a/pr-preview/pr-29/assets/index-7d5d3948.js +++ /dev/null @@ -1,5184 +0,0 @@ -(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))i(s);new MutationObserver(s=>{for(const r of s)if(r.type==="childList")for(const o of r.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&i(o)}).observe(document,{childList:!0,subtree:!0});function t(s){const r={};return s.integrity&&(r.integrity=s.integrity),s.referrerPolicy&&(r.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?r.credentials="include":s.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function i(s){if(s.ep)return;s.ep=!0;const r=t(s);fetch(s.href,r)}})();var A5=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Xb(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var zS={exports:{}},ZA={},LS={exports:{}},Yt={};/** - * @license React - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var zu=Symbol.for("react.element"),p5=Symbol.for("react.portal"),m5=Symbol.for("react.fragment"),f5=Symbol.for("react.strict_mode"),b5=Symbol.for("react.profiler"),y5=Symbol.for("react.provider"),v5=Symbol.for("react.context"),G5=Symbol.for("react.forward_ref"),B5=Symbol.for("react.suspense"),Z5=Symbol.for("react.memo"),w5=Symbol.for("react.lazy"),mB=Symbol.iterator;function S5(n){return n===null||typeof n!="object"?null:(n=mB&&n[mB]||n["@@iterator"],typeof n=="function"?n:null)}var TS={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},ES=Object.assign,kS={};function pc(n,e,t){this.props=n,this.context=e,this.refs=kS,this.updater=t||TS}pc.prototype.isReactComponent={};pc.prototype.setState=function(n,e){if(typeof n!="object"&&typeof n!="function"&&n!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,n,e,"setState")};pc.prototype.forceUpdate=function(n){this.updater.enqueueForceUpdate(this,n,"forceUpdate")};function DS(){}DS.prototype=pc.prototype;function Yb(n,e,t){this.props=n,this.context=e,this.refs=kS,this.updater=t||TS}var Fb=Yb.prototype=new DS;Fb.constructor=Yb;ES(Fb,pc.prototype);Fb.isPureReactComponent=!0;var fB=Array.isArray,US=Object.prototype.hasOwnProperty,Kb={current:null},PS={key:!0,ref:!0,__self:!0,__source:!0};function _S(n,e,t){var i,s={},r=null,o=null;if(e!=null)for(i in e.ref!==void 0&&(o=e.ref),e.key!==void 0&&(r=""+e.key),e)US.call(e,i)&&!PS.hasOwnProperty(i)&&(s[i]=e[i]);var a=arguments.length-2;if(a===1)s.children=t;else if(1>>1,ge=L[ce];if(0>>1;ces(Ze,O))wes(J,Ze)?(L[ce]=J,L[we]=O,ce=we):(L[ce]=Ze,L[re]=O,ce=re);else if(wes(J,O))L[ce]=J,L[we]=O,ce=we;else break e}}return P}function s(L,P){var O=L.sortIndex-P.sortIndex;return O!==0?O:L.id-P.id}if(typeof performance=="object"&&typeof performance.now=="function"){var r=performance;n.unstable_now=function(){return r.now()}}else{var o=Date,a=o.now();n.unstable_now=function(){return o.now()-a}}var l=[],c=[],u=1,C=null,d=3,h=!1,m=!1,y=!1,v=typeof setTimeout=="function"?setTimeout:null,A=typeof clearTimeout=="function"?clearTimeout:null,b=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function f(L){for(var P=t(c);P!==null;){if(P.callback===null)i(c);else if(P.startTime<=L)i(c),P.sortIndex=P.expirationTime,e(l,P);else break;P=t(c)}}function B(L){if(y=!1,f(L),!m)if(t(l)!==null)m=!0,ue(S);else{var P=t(c);P!==null&&le(B,P.startTime-L)}}function S(L,P){m=!1,y&&(y=!1,A(V),V=-1),h=!0;var O=d;try{for(f(P),C=t(l);C!==null&&(!(C.expirationTime>P)||L&&!H());){var ce=C.callback;if(typeof ce=="function"){C.callback=null,d=C.priorityLevel;var ge=ce(C.expirationTime<=P);P=n.unstable_now(),typeof ge=="function"?C.callback=ge:C===t(l)&&i(l),f(P)}else i(l);C=t(l)}if(C!==null)var te=!0;else{var re=t(c);re!==null&&le(B,re.startTime-P),te=!1}return te}finally{C=null,d=O,h=!1}}var x=!1,R=null,V=-1,Z=5,M=-1;function H(){return!(n.unstable_now()-ML||125ce?(L.sortIndex=O,e(c,L),t(l)===null&&L===t(c)&&(y?(A(V),V=-1):y=!0,le(B,O-ce))):(L.sortIndex=ge,e(l,L),m||h||(m=!0,ue(S))),L},n.unstable_shouldYield=H,n.unstable_wrapCallback=function(L){var P=d;return function(){var O=d;d=P;try{return L.apply(this,arguments)}finally{d=O}}}})(jS);QS.exports=jS;var K5=QS.exports;/** - * @license React - * react-dom.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var qS=E,As=K5;function Re(n){for(var e="https://reactjs.org/docs/error-decoder.html?invariant="+n,t=1;t"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),kf=Object.prototype.hasOwnProperty,z5=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,yB={},vB={};function L5(n){return kf.call(vB,n)?!0:kf.call(yB,n)?!1:z5.test(n)?vB[n]=!0:(yB[n]=!0,!1)}function T5(n,e,t,i){if(t!==null&&t.type===0)return!1;switch(typeof e){case"function":case"symbol":return!0;case"boolean":return i?!1:t!==null?!t.acceptsBooleans:(n=n.toLowerCase().slice(0,5),n!=="data-"&&n!=="aria-");default:return!1}}function E5(n,e,t,i){if(e===null||typeof e>"u"||T5(n,e,t,i))return!0;if(i)return!1;if(t!==null)switch(t.type){case 3:return!e;case 4:return e===!1;case 5:return isNaN(e);case 6:return isNaN(e)||1>e}return!1}function Xi(n,e,t,i,s,r,o){this.acceptsBooleans=e===2||e===3||e===4,this.attributeName=i,this.attributeNamespace=s,this.mustUseProperty=t,this.propertyName=n,this.type=e,this.sanitizeURL=r,this.removeEmptyString=o}var ci={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(n){ci[n]=new Xi(n,0,!1,n,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(n){var e=n[0];ci[e]=new Xi(e,1,!1,n[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(n){ci[n]=new Xi(n,2,!1,n.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(n){ci[n]=new Xi(n,2,!1,n,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(n){ci[n]=new Xi(n,3,!1,n.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(n){ci[n]=new Xi(n,3,!0,n,null,!1,!1)});["capture","download"].forEach(function(n){ci[n]=new Xi(n,4,!1,n,null,!1,!1)});["cols","rows","size","span"].forEach(function(n){ci[n]=new Xi(n,6,!1,n,null,!1,!1)});["rowSpan","start"].forEach(function(n){ci[n]=new Xi(n,5,!1,n.toLowerCase(),null,!1,!1)});var Lb=/[\-:]([a-z])/g;function Tb(n){return n[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(n){var e=n.replace(Lb,Tb);ci[e]=new Xi(e,1,!1,n,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(n){var e=n.replace(Lb,Tb);ci[e]=new Xi(e,1,!1,n,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(n){var e=n.replace(Lb,Tb);ci[e]=new Xi(e,1,!1,n,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(n){ci[n]=new Xi(n,1,!1,n.toLowerCase(),null,!1,!1)});ci.xlinkHref=new Xi("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(n){ci[n]=new Xi(n,1,!1,n.toLowerCase(),null,!0,!0)});function Eb(n,e,t,i){var s=ci.hasOwnProperty(e)?ci[e]:null;(s!==null?s.type!==0:i||!(2a||s[o]!==r[a]){var l=` -`+s[o].replace(" at new "," at ");return n.displayName&&l.includes("")&&(l=l.replace("",n.displayName)),l}while(1<=o&&0<=a);break}}}finally{fm=!1,Error.prepareStackTrace=t}return(n=n?n.displayName||n.name:"")?SI(n):""}function k5(n){switch(n.tag){case 5:return SI(n.type);case 16:return SI("Lazy");case 13:return SI("Suspense");case 19:return SI("SuspenseList");case 0:case 2:case 15:return n=bm(n.type,!1),n;case 11:return n=bm(n.type.render,!1),n;case 1:return n=bm(n.type,!0),n;default:return""}}function _f(n){if(n==null)return null;if(typeof n=="function")return n.displayName||n.name||null;if(typeof n=="string")return n;switch(n){case Sg:return"Fragment";case wg:return"Portal";case Df:return"Profiler";case kb:return"StrictMode";case Uf:return"Suspense";case Pf:return"SuspenseList"}if(typeof n=="object")switch(n.$$typeof){case tx:return(n.displayName||"Context")+".Consumer";case ex:return(n._context.displayName||"Context")+".Provider";case Db:var e=n.render;return n=n.displayName,n||(n=e.displayName||e.name||"",n=n!==""?"ForwardRef("+n+")":"ForwardRef"),n;case Ub:return e=n.displayName||null,e!==null?e:_f(n.type)||"Memo";case ko:e=n._payload,n=n._init;try{return _f(n(e))}catch{}}return null}function D5(n){var e=n.type;switch(n.tag){case 24:return"Cache";case 9:return(e.displayName||"Context")+".Consumer";case 10:return(e._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return n=e.render,n=n.displayName||n.name||"",e.displayName||(n!==""?"ForwardRef("+n+")":"ForwardRef");case 7:return"Fragment";case 5:return e;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return _f(e);case 8:return e===kb?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e}return null}function Ia(n){switch(typeof n){case"boolean":case"number":case"string":case"undefined":return n;case"object":return n;default:return""}}function ix(n){var e=n.type;return(n=n.nodeName)&&n.toLowerCase()==="input"&&(e==="checkbox"||e==="radio")}function U5(n){var e=ix(n)?"checked":"value",t=Object.getOwnPropertyDescriptor(n.constructor.prototype,e),i=""+n[e];if(!n.hasOwnProperty(e)&&typeof t<"u"&&typeof t.get=="function"&&typeof t.set=="function"){var s=t.get,r=t.set;return Object.defineProperty(n,e,{configurable:!0,get:function(){return s.call(this)},set:function(o){i=""+o,r.call(this,o)}}),Object.defineProperty(n,e,{enumerable:t.enumerable}),{getValue:function(){return i},setValue:function(o){i=""+o},stopTracking:function(){n._valueTracker=null,delete n[e]}}}}function ad(n){n._valueTracker||(n._valueTracker=U5(n))}function sx(n){if(!n)return!1;var e=n._valueTracker;if(!e)return!0;var t=e.getValue(),i="";return n&&(i=ix(n)?n.checked?"true":"false":n.value),n=i,n!==t?(e.setValue(n),!0):!1}function Uh(n){if(n=n||(typeof document<"u"?document:void 0),typeof n>"u")return null;try{return n.activeElement||n.body}catch{return n.body}}function Jf(n,e){var t=e.checked;return yn({},e,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:t??n._wrapperState.initialChecked})}function BB(n,e){var t=e.defaultValue==null?"":e.defaultValue,i=e.checked!=null?e.checked:e.defaultChecked;t=Ia(e.value!=null?e.value:t),n._wrapperState={initialChecked:i,initialValue:t,controlled:e.type==="checkbox"||e.type==="radio"?e.checked!=null:e.value!=null}}function rx(n,e){e=e.checked,e!=null&&Eb(n,"checked",e,!1)}function Of(n,e){rx(n,e);var t=Ia(e.value),i=e.type;if(t!=null)i==="number"?(t===0&&n.value===""||n.value!=t)&&(n.value=""+t):n.value!==""+t&&(n.value=""+t);else if(i==="submit"||i==="reset"){n.removeAttribute("value");return}e.hasOwnProperty("value")?Qf(n,e.type,t):e.hasOwnProperty("defaultValue")&&Qf(n,e.type,Ia(e.defaultValue)),e.checked==null&&e.defaultChecked!=null&&(n.defaultChecked=!!e.defaultChecked)}function ZB(n,e,t){if(e.hasOwnProperty("value")||e.hasOwnProperty("defaultValue")){var i=e.type;if(!(i!=="submit"&&i!=="reset"||e.value!==void 0&&e.value!==null))return;e=""+n._wrapperState.initialValue,t||e===n.value||(n.value=e),n.defaultValue=e}t=n.name,t!==""&&(n.name=""),n.defaultChecked=!!n._wrapperState.initialChecked,t!==""&&(n.name=t)}function Qf(n,e,t){(e!=="number"||Uh(n.ownerDocument)!==n)&&(t==null?n.defaultValue=""+n._wrapperState.initialValue:n.defaultValue!==""+t&&(n.defaultValue=""+t))}var xI=Array.isArray;function Pg(n,e,t,i){if(n=n.options,e){e={};for(var s=0;s"+e.valueOf().toString()+"",e=ld.firstChild;n.firstChild;)n.removeChild(n.firstChild);for(;e.firstChild;)n.appendChild(e.firstChild)}});function tu(n,e){if(e){var t=n.firstChild;if(t&&t===n.lastChild&&t.nodeType===3){t.nodeValue=e;return}}n.textContent=e}var XI={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},P5=["Webkit","ms","Moz","O"];Object.keys(XI).forEach(function(n){P5.forEach(function(e){e=e+n.charAt(0).toUpperCase()+n.substring(1),XI[e]=XI[n]})});function gx(n,e,t){return e==null||typeof e=="boolean"||e===""?"":t||typeof e!="number"||e===0||XI.hasOwnProperty(n)&&XI[n]?(""+e).trim():e+"px"}function cx(n,e){n=n.style;for(var t in e)if(e.hasOwnProperty(t)){var i=t.indexOf("--")===0,s=gx(t,e[t],i);t==="float"&&(t="cssFloat"),i?n.setProperty(t,s):n[t]=s}}var _5=yn({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function $f(n,e){if(e){if(_5[n]&&(e.children!=null||e.dangerouslySetInnerHTML!=null))throw Error(Re(137,n));if(e.dangerouslySetInnerHTML!=null){if(e.children!=null)throw Error(Re(60));if(typeof e.dangerouslySetInnerHTML!="object"||!("__html"in e.dangerouslySetInnerHTML))throw Error(Re(61))}if(e.style!=null&&typeof e.style!="object")throw Error(Re(62))}}function e0(n,e){if(n.indexOf("-")===-1)return typeof e.is=="string";switch(n){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var t0=null;function Pb(n){return n=n.target||n.srcElement||window,n.correspondingUseElement&&(n=n.correspondingUseElement),n.nodeType===3?n.parentNode:n}var n0=null,_g=null,Jg=null;function xB(n){if(n=Eu(n)){if(typeof n0!="function")throw Error(Re(280));var e=n.stateNode;e&&(e=WA(e),n0(n.stateNode,n.type,e))}}function Ix(n){_g?Jg?Jg.push(n):Jg=[n]:_g=n}function ux(){if(_g){var n=_g,e=Jg;if(Jg=_g=null,xB(n),e)for(n=0;n>>=0,n===0?32:31-(sN(n)/rN|0)|0}var gd=64,cd=4194304;function RI(n){switch(n&-n){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return n&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return n&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return n}}function Oh(n,e){var t=n.pendingLanes;if(t===0)return 0;var i=0,s=n.suspendedLanes,r=n.pingedLanes,o=t&268435455;if(o!==0){var a=o&~s;a!==0?i=RI(a):(r&=o,r!==0&&(i=RI(r)))}else o=t&~s,o!==0?i=RI(o):r!==0&&(i=RI(r));if(i===0)return 0;if(e!==0&&e!==i&&!(e&s)&&(s=i&-i,r=e&-e,s>=r||s===16&&(r&4194240)!==0))return e;if(i&4&&(i|=t&16),e=n.entangledLanes,e!==0)for(n=n.entanglements,e&=i;0t;t++)e.push(n);return e}function Lu(n,e,t){n.pendingLanes|=e,e!==536870912&&(n.suspendedLanes=0,n.pingedLanes=0),n=n.eventTimes,e=31-gr(e),n[e]=t}function gN(n,e){var t=n.pendingLanes&~e;n.pendingLanes=e,n.suspendedLanes=0,n.pingedLanes=0,n.expiredLanes&=e,n.mutableReadLanes&=e,n.entangledLanes&=e,e=n.entanglements;var i=n.eventTimes;for(n=n.expirationTimes;0=FI),FB=String.fromCharCode(32),KB=!1;function Mx(n,e){switch(n){case"keyup":return FN.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Nx(n){return n=n.detail,typeof n=="object"&&"data"in n?n.data:null}var xg=!1;function zN(n,e){switch(n){case"compositionend":return Nx(e);case"keypress":return e.which!==32?null:(KB=!0,FB);case"textInput":return n=e.data,n===FB&&KB?null:n;default:return null}}function LN(n,e){if(xg)return n==="compositionend"||!ey&&Mx(n,e)?(n=Wx(),Zh=jb=Oo=null,xg=!1,n):null;switch(n){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1=e)return{node:t,offset:e-n};n=i}e:{for(;t;){if(t.nextSibling){t=t.nextSibling;break e}t=t.parentNode}t=void 0}t=EB(t)}}function Fx(n,e){return n&&e?n===e?!0:n&&n.nodeType===3?!1:e&&e.nodeType===3?Fx(n,e.parentNode):"contains"in n?n.contains(e):n.compareDocumentPosition?!!(n.compareDocumentPosition(e)&16):!1:!1}function Kx(){for(var n=window,e=Uh();e instanceof n.HTMLIFrameElement;){try{var t=typeof e.contentWindow.location.href=="string"}catch{t=!1}if(t)n=e.contentWindow;else break;e=Uh(n.document)}return e}function ty(n){var e=n&&n.nodeName&&n.nodeName.toLowerCase();return e&&(e==="input"&&(n.type==="text"||n.type==="search"||n.type==="tel"||n.type==="url"||n.type==="password")||e==="textarea"||n.contentEditable==="true")}function ON(n){var e=Kx(),t=n.focusedElem,i=n.selectionRange;if(e!==t&&t&&t.ownerDocument&&Fx(t.ownerDocument.documentElement,t)){if(i!==null&&ty(t)){if(e=i.start,n=i.end,n===void 0&&(n=e),"selectionStart"in t)t.selectionStart=e,t.selectionEnd=Math.min(n,t.value.length);else if(n=(e=t.ownerDocument||document)&&e.defaultView||window,n.getSelection){n=n.getSelection();var s=t.textContent.length,r=Math.min(i.start,s);i=i.end===void 0?r:Math.min(i.end,s),!n.extend&&r>i&&(s=i,i=r,r=s),s=kB(t,r);var o=kB(t,i);s&&o&&(n.rangeCount!==1||n.anchorNode!==s.node||n.anchorOffset!==s.offset||n.focusNode!==o.node||n.focusOffset!==o.offset)&&(e=e.createRange(),e.setStart(s.node,s.offset),n.removeAllRanges(),r>i?(n.addRange(e),n.extend(o.node,o.offset)):(e.setEnd(o.node,o.offset),n.addRange(e)))}}for(e=[],n=t;n=n.parentNode;)n.nodeType===1&&e.push({element:n,left:n.scrollLeft,top:n.scrollTop});for(typeof t.focus=="function"&&t.focus(),t=0;t=document.documentMode,Rg=null,l0=null,zI=null,g0=!1;function DB(n,e,t){var i=t.window===t?t.document:t.nodeType===9?t:t.ownerDocument;g0||Rg==null||Rg!==Uh(i)||(i=Rg,"selectionStart"in i&&ty(i)?i={start:i.selectionStart,end:i.selectionEnd}:(i=(i.ownerDocument&&i.ownerDocument.defaultView||window).getSelection(),i={anchorNode:i.anchorNode,anchorOffset:i.anchorOffset,focusNode:i.focusNode,focusOffset:i.focusOffset}),zI&&au(zI,i)||(zI=i,i=qh(l0,"onSelect"),0Mg||(n.current=h0[Mg],h0[Mg]=null,Mg--)}function an(n,e){Mg++,h0[Mg]=n.current,n.current=e}var ua={},Bi=fa(ua),qi=fa(!1),ml=ua;function sc(n,e){var t=n.type.contextTypes;if(!t)return ua;var i=n.stateNode;if(i&&i.__reactInternalMemoizedUnmaskedChildContext===e)return i.__reactInternalMemoizedMaskedChildContext;var s={},r;for(r in t)s[r]=e[r];return i&&(n=n.stateNode,n.__reactInternalMemoizedUnmaskedChildContext=e,n.__reactInternalMemoizedMaskedChildContext=s),s}function $i(n){return n=n.childContextTypes,n!=null}function eA(){In(qi),In(Bi)}function jB(n,e,t){if(Bi.current!==ua)throw Error(Re(168));an(Bi,e),an(qi,t)}function _x(n,e,t){var i=n.stateNode;if(e=e.childContextTypes,typeof i.getChildContext!="function")return t;i=i.getChildContext();for(var s in i)if(!(s in e))throw Error(Re(108,D5(n)||"Unknown",s));return yn({},t,i)}function tA(n){return n=(n=n.stateNode)&&n.__reactInternalMemoizedMergedChildContext||ua,ml=Bi.current,an(Bi,n),an(qi,qi.current),!0}function qB(n,e,t){var i=n.stateNode;if(!i)throw Error(Re(169));t?(n=_x(n,e,ml),i.__reactInternalMemoizedMergedChildContext=n,In(qi),In(Bi),an(Bi,n)):In(qi),an(qi,t)}var no=null,VA=!1,Hm=!1;function Jx(n){no===null?no=[n]:no.push(n)}function a3(n){VA=!0,Jx(n)}function ba(){if(!Hm&&no!==null){Hm=!0;var n=0,e=jt;try{var t=no;for(jt=1;n>=o,s-=o,ro=1<<32-gr(e)+s|t<V?(Z=R,R=null):Z=R.sibling;var M=d(A,R,f[V],B);if(M===null){R===null&&(R=Z);break}n&&R&&M.alternate===null&&e(A,R),b=r(M,b,V),x===null?S=M:x.sibling=M,x=M,R=Z}if(V===f.length)return t(A,R),dn&&Pa(A,V),S;if(R===null){for(;VV?(Z=R,R=null):Z=R.sibling;var H=d(A,R,M.value,B);if(H===null){R===null&&(R=Z);break}n&&R&&H.alternate===null&&e(A,R),b=r(H,b,V),x===null?S=H:x.sibling=H,x=H,R=Z}if(M.done)return t(A,R),dn&&Pa(A,V),S;if(R===null){for(;!M.done;V++,M=f.next())M=C(A,M.value,B),M!==null&&(b=r(M,b,V),x===null?S=M:x.sibling=M,x=M);return dn&&Pa(A,V),S}for(R=i(A,R);!M.done;V++,M=f.next())M=h(R,A,V,M.value,B),M!==null&&(n&&M.alternate!==null&&R.delete(M.key===null?V:M.key),b=r(M,b,V),x===null?S=M:x.sibling=M,x=M);return n&&R.forEach(function(U){return e(A,U)}),dn&&Pa(A,V),S}function v(A,b,f,B){if(typeof f=="object"&&f!==null&&f.type===Sg&&f.key===null&&(f=f.props.children),typeof f=="object"&&f!==null){switch(f.$$typeof){case od:e:{for(var S=f.key,x=b;x!==null;){if(x.key===S){if(S=f.type,S===Sg){if(x.tag===7){t(A,x.sibling),b=s(x,f.props.children),b.return=A,A=b;break e}}else if(x.elementType===S||typeof S=="object"&&S!==null&&S.$$typeof===ko&&r2(S)===x.type){t(A,x.sibling),b=s(x,f.props),b.ref=nI(A,x,f),b.return=A,A=b;break e}t(A,x);break}else e(A,x);x=x.sibling}f.type===Sg?(b=ul(f.props.children,A.mode,B,f.key),b.return=A,A=b):(B=Nh(f.type,f.key,f.props,null,A.mode,B),B.ref=nI(A,b,f),B.return=A,A=B)}return o(A);case wg:e:{for(x=f.key;b!==null;){if(b.key===x)if(b.tag===4&&b.stateNode.containerInfo===f.containerInfo&&b.stateNode.implementation===f.implementation){t(A,b.sibling),b=s(b,f.children||[]),b.return=A,A=b;break e}else{t(A,b);break}else e(A,b);b=b.sibling}b=Em(f,A.mode,B),b.return=A,A=b}return o(A);case ko:return x=f._init,v(A,b,x(f._payload),B)}if(xI(f))return m(A,b,f,B);if(jc(f))return y(A,b,f,B);pd(A,f)}return typeof f=="string"&&f!==""||typeof f=="number"?(f=""+f,b!==null&&b.tag===6?(t(A,b.sibling),b=s(b,f),b.return=A,A=b):(t(A,b),b=Tm(f,A.mode,B),b.return=A,A=b),o(A)):t(A,b)}return v}var oc=nR(!0),iR=nR(!1),ku={},Mr=fa(ku),Iu=fa(ku),uu=fa(ku);function rl(n){if(n===ku)throw Error(Re(174));return n}function cy(n,e){switch(an(uu,e),an(Iu,n),an(Mr,ku),n=e.nodeType,n){case 9:case 11:e=(e=e.documentElement)?e.namespaceURI:qf(null,"");break;default:n=n===8?e.parentNode:e,e=n.namespaceURI||null,n=n.tagName,e=qf(e,n)}In(Mr),an(Mr,e)}function ac(){In(Mr),In(Iu),In(uu)}function sR(n){rl(uu.current);var e=rl(Mr.current),t=qf(e,n.type);e!==t&&(an(Iu,n),an(Mr,t))}function Iy(n){Iu.current===n&&(In(Mr),In(Iu))}var pn=fa(0);function aA(n){for(var e=n;e!==null;){if(e.tag===13){var t=e.memoizedState;if(t!==null&&(t=t.dehydrated,t===null||t.data==="$?"||t.data==="$!"))return e}else if(e.tag===19&&e.memoizedProps.revealOrder!==void 0){if(e.flags&128)return e}else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===n)break;for(;e.sibling===null;){if(e.return===null||e.return===n)return null;e=e.return}e.sibling.return=e.return,e=e.sibling}return null}var Xm=[];function uy(){for(var n=0;nt?t:4,n(!0);var i=Ym.transition;Ym.transition={};try{n(!1),e()}finally{jt=t,Ym.transition=i}}function bR(){return Ts().memoizedState}function I3(n,e,t){var i=ra(n);if(t={lane:i,action:t,hasEagerState:!1,eagerState:null,next:null},yR(n))vR(e,t);else if(t=qx(n,e,t,i),t!==null){var s=Ni();cr(t,n,i,s),GR(t,e,i)}}function u3(n,e,t){var i=ra(n),s={lane:i,action:t,hasEagerState:!1,eagerState:null,next:null};if(yR(n))vR(e,s);else{var r=n.alternate;if(n.lanes===0&&(r===null||r.lanes===0)&&(r=e.lastRenderedReducer,r!==null))try{var o=e.lastRenderedState,a=r(o,t);if(s.hasEagerState=!0,s.eagerState=a,ur(a,o)){var l=e.interleaved;l===null?(s.next=s,ly(e)):(s.next=l.next,l.next=s),e.interleaved=s;return}}catch{}finally{}t=qx(n,e,s,i),t!==null&&(s=Ni(),cr(t,n,i,s),GR(t,e,i))}}function yR(n){var e=n.alternate;return n===fn||e!==null&&e===fn}function vR(n,e){LI=lA=!0;var t=n.pending;t===null?e.next=e:(e.next=t.next,t.next=e),n.pending=e}function GR(n,e,t){if(t&4194240){var i=e.lanes;i&=n.pendingLanes,t|=i,e.lanes=t,Jb(n,t)}}var gA={readContext:Ls,useCallback:pi,useContext:pi,useEffect:pi,useImperativeHandle:pi,useInsertionEffect:pi,useLayoutEffect:pi,useMemo:pi,useReducer:pi,useRef:pi,useState:pi,useDebugValue:pi,useDeferredValue:pi,useTransition:pi,useMutableSource:pi,useSyncExternalStore:pi,useId:pi,unstable_isNewReconciler:!1},C3={readContext:Ls,useCallback:function(n,e){return Rr().memoizedState=[n,e===void 0?null:e],n},useContext:Ls,useEffect:a2,useImperativeHandle:function(n,e,t){return t=t!=null?t.concat([n]):null,Rh(4194308,4,hR.bind(null,e,n),t)},useLayoutEffect:function(n,e){return Rh(4194308,4,n,e)},useInsertionEffect:function(n,e){return Rh(4,2,n,e)},useMemo:function(n,e){var t=Rr();return e=e===void 0?null:e,n=n(),t.memoizedState=[n,e],n},useReducer:function(n,e,t){var i=Rr();return e=t!==void 0?t(e):e,i.memoizedState=i.baseState=e,n={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:n,lastRenderedState:e},i.queue=n,n=n.dispatch=I3.bind(null,fn,n),[i.memoizedState,n]},useRef:function(n){var e=Rr();return n={current:n},e.memoizedState=n},useState:o2,useDebugValue:py,useDeferredValue:function(n){return Rr().memoizedState=n},useTransition:function(){var n=o2(!1),e=n[0];return n=c3.bind(null,n[1]),Rr().memoizedState=n,[e,n]},useMutableSource:function(){},useSyncExternalStore:function(n,e,t){var i=fn,s=Rr();if(dn){if(t===void 0)throw Error(Re(407));t=t()}else{if(t=e(),ii===null)throw Error(Re(349));bl&30||aR(i,e,t)}s.memoizedState=t;var r={value:t,getSnapshot:e};return s.queue=r,a2(gR.bind(null,i,r,n),[n]),i.flags|=2048,hu(9,lR.bind(null,i,r,t,e),void 0,null),t},useId:function(){var n=Rr(),e=ii.identifierPrefix;if(dn){var t=oo,i=ro;t=(i&~(1<<32-gr(i)-1)).toString(32)+t,e=":"+e+"R"+t,t=Cu++,0<\/script>",n=n.removeChild(n.firstChild)):typeof i.is=="string"?n=o.createElement(t,{is:i.is}):(n=o.createElement(t),t==="select"&&(o=n,i.multiple?o.multiple=!0:i.size&&(o.size=i.size))):n=o.createElementNS(n,t),n[Wr]=e,n[cu]=i,MR(n,e,!1,!1),e.stateNode=n;e:{switch(o=e0(t,i),t){case"dialog":gn("cancel",n),gn("close",n),s=i;break;case"iframe":case"object":case"embed":gn("load",n),s=i;break;case"video":case"audio":for(s=0;sgc&&(e.flags|=128,i=!0,iI(r,!1),e.lanes=4194304)}else{if(!i)if(n=aA(o),n!==null){if(e.flags|=128,i=!0,t=n.updateQueue,t!==null&&(e.updateQueue=t,e.flags|=4),iI(r,!0),r.tail===null&&r.tailMode==="hidden"&&!o.alternate&&!dn)return mi(e),null}else 2*Wn()-r.renderingStartTime>gc&&t!==1073741824&&(e.flags|=128,i=!0,iI(r,!1),e.lanes=4194304);r.isBackwards?(o.sibling=e.child,e.child=o):(t=r.last,t!==null?t.sibling=o:e.child=o,r.last=o)}return r.tail!==null?(e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=Wn(),e.sibling=null,t=pn.current,an(pn,i?t&1|2:t&1),e):(mi(e),null);case 22:case 23:return Gy(),i=e.memoizedState!==null,n!==null&&n.memoizedState!==null!==i&&(e.flags|=8192),i&&e.mode&1?gs&1073741824&&(mi(e),e.subtreeFlags&6&&(e.flags|=8192)):mi(e),null;case 24:return null;case 25:return null}throw Error(Re(156,e.tag))}function y3(n,e){switch(iy(e),e.tag){case 1:return $i(e.type)&&eA(),n=e.flags,n&65536?(e.flags=n&-65537|128,e):null;case 3:return ac(),In(qi),In(Bi),uy(),n=e.flags,n&65536&&!(n&128)?(e.flags=n&-65537|128,e):null;case 5:return Iy(e),null;case 13:if(In(pn),n=e.memoizedState,n!==null&&n.dehydrated!==null){if(e.alternate===null)throw Error(Re(340));rc()}return n=e.flags,n&65536?(e.flags=n&-65537|128,e):null;case 19:return In(pn),null;case 4:return ac(),null;case 10:return ay(e.type._context),null;case 22:case 23:return Gy(),null;case 24:return null;default:return null}}var fd=!1,Gi=!1,v3=typeof WeakSet=="function"?WeakSet:Set,De=null;function Yg(n,e){var t=n.ref;if(t!==null)if(typeof t=="function")try{t(null)}catch(i){Bn(n,e,i)}else t.current=null}function S0(n,e,t){try{t()}catch(i){Bn(n,e,i)}}var A2=!1;function G3(n,e){if(c0=Qh,n=Kx(),ty(n)){if("selectionStart"in n)var t={start:n.selectionStart,end:n.selectionEnd};else e:{t=(t=n.ownerDocument)&&t.defaultView||window;var i=t.getSelection&&t.getSelection();if(i&&i.rangeCount!==0){t=i.anchorNode;var s=i.anchorOffset,r=i.focusNode;i=i.focusOffset;try{t.nodeType,r.nodeType}catch{t=null;break e}var o=0,a=-1,l=-1,c=0,u=0,C=n,d=null;t:for(;;){for(var h;C!==t||s!==0&&C.nodeType!==3||(a=o+s),C!==r||i!==0&&C.nodeType!==3||(l=o+i),C.nodeType===3&&(o+=C.nodeValue.length),(h=C.firstChild)!==null;)d=C,C=h;for(;;){if(C===n)break t;if(d===t&&++c===s&&(a=o),d===r&&++u===i&&(l=o),(h=C.nextSibling)!==null)break;C=d,d=C.parentNode}C=h}t=a===-1||l===-1?null:{start:a,end:l}}else t=null}t=t||{start:0,end:0}}else t=null;for(I0={focusedElem:n,selectionRange:t},Qh=!1,De=e;De!==null;)if(e=De,n=e.child,(e.subtreeFlags&1028)!==0&&n!==null)n.return=e,De=n;else for(;De!==null;){e=De;try{var m=e.alternate;if(e.flags&1024)switch(e.tag){case 0:case 11:case 15:break;case 1:if(m!==null){var y=m.memoizedProps,v=m.memoizedState,A=e.stateNode,b=A.getSnapshotBeforeUpdate(e.elementType===e.type?y:sr(e.type,y),v);A.__reactInternalSnapshotBeforeUpdate=b}break;case 3:var f=e.stateNode.containerInfo;f.nodeType===1?f.textContent="":f.nodeType===9&&f.documentElement&&f.removeChild(f.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(Re(163))}}catch(B){Bn(e,e.return,B)}if(n=e.sibling,n!==null){n.return=e.return,De=n;break}De=e.return}return m=A2,A2=!1,m}function TI(n,e,t){var i=e.updateQueue;if(i=i!==null?i.lastEffect:null,i!==null){var s=i=i.next;do{if((s.tag&n)===n){var r=s.destroy;s.destroy=void 0,r!==void 0&&S0(e,t,r)}s=s.next}while(s!==i)}}function HA(n,e){if(e=e.updateQueue,e=e!==null?e.lastEffect:null,e!==null){var t=e=e.next;do{if((t.tag&n)===n){var i=t.create;t.destroy=i()}t=t.next}while(t!==e)}}function x0(n){var e=n.ref;if(e!==null){var t=n.stateNode;switch(n.tag){case 5:n=t;break;default:n=t}typeof e=="function"?e(n):e.current=n}}function XR(n){var e=n.alternate;e!==null&&(n.alternate=null,XR(e)),n.child=null,n.deletions=null,n.sibling=null,n.tag===5&&(e=n.stateNode,e!==null&&(delete e[Wr],delete e[cu],delete e[d0],delete e[r3],delete e[o3])),n.stateNode=null,n.return=null,n.dependencies=null,n.memoizedProps=null,n.memoizedState=null,n.pendingProps=null,n.stateNode=null,n.updateQueue=null}function YR(n){return n.tag===5||n.tag===3||n.tag===4}function p2(n){e:for(;;){for(;n.sibling===null;){if(n.return===null||YR(n.return))return null;n=n.return}for(n.sibling.return=n.return,n=n.sibling;n.tag!==5&&n.tag!==6&&n.tag!==18;){if(n.flags&2||n.child===null||n.tag===4)continue e;n.child.return=n,n=n.child}if(!(n.flags&2))return n.stateNode}}function R0(n,e,t){var i=n.tag;if(i===5||i===6)n=n.stateNode,e?t.nodeType===8?t.parentNode.insertBefore(n,e):t.insertBefore(n,e):(t.nodeType===8?(e=t.parentNode,e.insertBefore(n,t)):(e=t,e.appendChild(n)),t=t._reactRootContainer,t!=null||e.onclick!==null||(e.onclick=$h));else if(i!==4&&(n=n.child,n!==null))for(R0(n,e,t),n=n.sibling;n!==null;)R0(n,e,t),n=n.sibling}function W0(n,e,t){var i=n.tag;if(i===5||i===6)n=n.stateNode,e?t.insertBefore(n,e):t.appendChild(n);else if(i!==4&&(n=n.child,n!==null))for(W0(n,e,t),n=n.sibling;n!==null;)W0(n,e,t),n=n.sibling}var li=null,or=!1;function Ho(n,e,t){for(t=t.child;t!==null;)FR(n,e,t),t=t.sibling}function FR(n,e,t){if(Vr&&typeof Vr.onCommitFiberUnmount=="function")try{Vr.onCommitFiberUnmount(wA,t)}catch{}switch(t.tag){case 5:Gi||Yg(t,e);case 6:var i=li,s=or;li=null,Ho(n,e,t),li=i,or=s,li!==null&&(or?(n=li,t=t.stateNode,n.nodeType===8?n.parentNode.removeChild(t):n.removeChild(t)):li.removeChild(t.stateNode));break;case 18:li!==null&&(or?(n=li,t=t.stateNode,n.nodeType===8?Nm(n.parentNode,t):n.nodeType===1&&Nm(n,t),ru(n)):Nm(li,t.stateNode));break;case 4:i=li,s=or,li=t.stateNode.containerInfo,or=!0,Ho(n,e,t),li=i,or=s;break;case 0:case 11:case 14:case 15:if(!Gi&&(i=t.updateQueue,i!==null&&(i=i.lastEffect,i!==null))){s=i=i.next;do{var r=s,o=r.destroy;r=r.tag,o!==void 0&&(r&2||r&4)&&S0(t,e,o),s=s.next}while(s!==i)}Ho(n,e,t);break;case 1:if(!Gi&&(Yg(t,e),i=t.stateNode,typeof i.componentWillUnmount=="function"))try{i.props=t.memoizedProps,i.state=t.memoizedState,i.componentWillUnmount()}catch(a){Bn(t,e,a)}Ho(n,e,t);break;case 21:Ho(n,e,t);break;case 22:t.mode&1?(Gi=(i=Gi)||t.memoizedState!==null,Ho(n,e,t),Gi=i):Ho(n,e,t);break;default:Ho(n,e,t)}}function m2(n){var e=n.updateQueue;if(e!==null){n.updateQueue=null;var t=n.stateNode;t===null&&(t=n.stateNode=new v3),e.forEach(function(i){var s=M3.bind(null,n,i);t.has(i)||(t.add(i),i.then(s,s))})}}function js(n,e){var t=e.deletions;if(t!==null)for(var i=0;is&&(s=o),i&=~r}if(i=s,i=Wn()-i,i=(120>i?120:480>i?480:1080>i?1080:1920>i?1920:3e3>i?3e3:4320>i?4320:1960*Z3(i/1960))-i,10n?16:n,Qo===null)var i=!1;else{if(n=Qo,Qo=null,uA=0,zt&6)throw Error(Re(331));var s=zt;for(zt|=4,De=n.current;De!==null;){var r=De,o=r.child;if(De.flags&16){var a=r.deletions;if(a!==null){for(var l=0;lWn()-yy?Il(n,0):by|=t),es(n,e)}function UR(n,e){e===0&&(n.mode&1?(e=cd,cd<<=1,!(cd&130023424)&&(cd=4194304)):e=1);var t=Ni();n=Ao(n,e),n!==null&&(Lu(n,e,t),es(n,t))}function V3(n){var e=n.memoizedState,t=0;e!==null&&(t=e.retryLane),UR(n,t)}function M3(n,e){var t=0;switch(n.tag){case 13:var i=n.stateNode,s=n.memoizedState;s!==null&&(t=s.retryLane);break;case 19:i=n.stateNode;break;default:throw Error(Re(314))}i!==null&&i.delete(e),UR(n,t)}var PR;PR=function(n,e,t){if(n!==null)if(n.memoizedProps!==e.pendingProps||qi.current)Qi=!0;else{if(!(n.lanes&t)&&!(e.flags&128))return Qi=!1,f3(n,e,t);Qi=!!(n.flags&131072)}else Qi=!1,dn&&e.flags&1048576&&Ox(e,iA,e.index);switch(e.lanes=0,e.tag){case 2:var i=e.type;Wh(n,e),n=e.pendingProps;var s=sc(e,Bi.current);Qg(e,t),s=dy(null,e,i,n,s,t);var r=hy();return e.flags|=1,typeof s=="object"&&s!==null&&typeof s.render=="function"&&s.$$typeof===void 0?(e.tag=1,e.memoizedState=null,e.updateQueue=null,$i(i)?(r=!0,tA(e)):r=!1,e.memoizedState=s.state!==null&&s.state!==void 0?s.state:null,gy(e),s.updater=MA,e.stateNode=s,s._reactInternals=e,b0(e,i,n,t),e=G0(null,e,i,!0,r,t)):(e.tag=0,dn&&r&&ny(e),Wi(null,e,s,t),e=e.child),e;case 16:i=e.elementType;e:{switch(Wh(n,e),n=e.pendingProps,s=i._init,i=s(i._payload),e.type=i,s=e.tag=H3(i),n=sr(i,n),s){case 0:e=v0(null,e,i,n,t);break e;case 1:e=C2(null,e,i,n,t);break e;case 11:e=I2(null,e,i,n,t);break e;case 14:e=u2(null,e,i,sr(i.type,n),t);break e}throw Error(Re(306,i,""))}return e;case 0:return i=e.type,s=e.pendingProps,s=e.elementType===i?s:sr(i,s),v0(n,e,i,s,t);case 1:return i=e.type,s=e.pendingProps,s=e.elementType===i?s:sr(i,s),C2(n,e,i,s,t);case 3:e:{if(RR(e),n===null)throw Error(Re(387));i=e.pendingProps,r=e.memoizedState,s=r.element,$x(n,e),oA(e,i,null,t);var o=e.memoizedState;if(i=o.element,r.isDehydrated)if(r={element:i,isDehydrated:!1,cache:o.cache,pendingSuspenseBoundaries:o.pendingSuspenseBoundaries,transitions:o.transitions},e.updateQueue.baseState=r,e.memoizedState=r,e.flags&256){s=lc(Error(Re(423)),e),e=d2(n,e,i,t,s);break e}else if(i!==s){s=lc(Error(Re(424)),e),e=d2(n,e,i,t,s);break e}else for(Is=na(e.stateNode.containerInfo.firstChild),Cs=e,dn=!0,ar=null,t=iR(e,null,i,t),e.child=t;t;)t.flags=t.flags&-3|4096,t=t.sibling;else{if(rc(),i===s){e=po(n,e,t);break e}Wi(n,e,i,t)}e=e.child}return e;case 5:return sR(e),n===null&&p0(e),i=e.type,s=e.pendingProps,r=n!==null?n.memoizedProps:null,o=s.children,u0(i,s)?o=null:r!==null&&u0(i,r)&&(e.flags|=32),xR(n,e),Wi(n,e,o,t),e.child;case 6:return n===null&&p0(e),null;case 13:return WR(n,e,t);case 4:return cy(e,e.stateNode.containerInfo),i=e.pendingProps,n===null?e.child=oc(e,null,i,t):Wi(n,e,i,t),e.child;case 11:return i=e.type,s=e.pendingProps,s=e.elementType===i?s:sr(i,s),I2(n,e,i,s,t);case 7:return Wi(n,e,e.pendingProps,t),e.child;case 8:return Wi(n,e,e.pendingProps.children,t),e.child;case 12:return Wi(n,e,e.pendingProps.children,t),e.child;case 10:e:{if(i=e.type._context,s=e.pendingProps,r=e.memoizedProps,o=s.value,an(sA,i._currentValue),i._currentValue=o,r!==null)if(ur(r.value,o)){if(r.children===s.children&&!qi.current){e=po(n,e,t);break e}}else for(r=e.child,r!==null&&(r.return=e);r!==null;){var a=r.dependencies;if(a!==null){o=r.child;for(var l=a.firstContext;l!==null;){if(l.context===i){if(r.tag===1){l=co(-1,t&-t),l.tag=2;var c=r.updateQueue;if(c!==null){c=c.shared;var u=c.pending;u===null?l.next=l:(l.next=u.next,u.next=l),c.pending=l}}r.lanes|=t,l=r.alternate,l!==null&&(l.lanes|=t),m0(r.return,t,e),a.lanes|=t;break}l=l.next}}else if(r.tag===10)o=r.type===e.type?null:r.child;else if(r.tag===18){if(o=r.return,o===null)throw Error(Re(341));o.lanes|=t,a=o.alternate,a!==null&&(a.lanes|=t),m0(o,t,e),o=r.sibling}else o=r.child;if(o!==null)o.return=r;else for(o=r;o!==null;){if(o===e){o=null;break}if(r=o.sibling,r!==null){r.return=o.return,o=r;break}o=o.return}r=o}Wi(n,e,s.children,t),e=e.child}return e;case 9:return s=e.type,i=e.pendingProps.children,Qg(e,t),s=Ls(s),i=i(s),e.flags|=1,Wi(n,e,i,t),e.child;case 14:return i=e.type,s=sr(i,e.pendingProps),s=sr(i.type,s),u2(n,e,i,s,t);case 15:return wR(n,e,e.type,e.pendingProps,t);case 17:return i=e.type,s=e.pendingProps,s=e.elementType===i?s:sr(i,s),Wh(n,e),e.tag=1,$i(i)?(n=!0,tA(e)):n=!1,Qg(e,t),tR(e,i,s),b0(e,i,s,t),G0(null,e,i,!0,n,t);case 19:return VR(n,e,t);case 22:return SR(n,e,t)}throw Error(Re(156,e.tag))};function _R(n,e){return fx(n,e)}function N3(n,e,t,i){this.tag=n,this.key=t,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=e,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=i,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Fs(n,e,t,i){return new N3(n,e,t,i)}function Zy(n){return n=n.prototype,!(!n||!n.isReactComponent)}function H3(n){if(typeof n=="function")return Zy(n)?1:0;if(n!=null){if(n=n.$$typeof,n===Db)return 11;if(n===Ub)return 14}return 2}function oa(n,e){var t=n.alternate;return t===null?(t=Fs(n.tag,e,n.key,n.mode),t.elementType=n.elementType,t.type=n.type,t.stateNode=n.stateNode,t.alternate=n,n.alternate=t):(t.pendingProps=e,t.type=n.type,t.flags=0,t.subtreeFlags=0,t.deletions=null),t.flags=n.flags&14680064,t.childLanes=n.childLanes,t.lanes=n.lanes,t.child=n.child,t.memoizedProps=n.memoizedProps,t.memoizedState=n.memoizedState,t.updateQueue=n.updateQueue,e=n.dependencies,t.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext},t.sibling=n.sibling,t.index=n.index,t.ref=n.ref,t}function Nh(n,e,t,i,s,r){var o=2;if(i=n,typeof n=="function")Zy(n)&&(o=1);else if(typeof n=="string")o=5;else e:switch(n){case Sg:return ul(t.children,s,r,e);case kb:o=8,s|=8;break;case Df:return n=Fs(12,t,e,s|2),n.elementType=Df,n.lanes=r,n;case Uf:return n=Fs(13,t,e,s),n.elementType=Uf,n.lanes=r,n;case Pf:return n=Fs(19,t,e,s),n.elementType=Pf,n.lanes=r,n;case nx:return YA(t,s,r,e);default:if(typeof n=="object"&&n!==null)switch(n.$$typeof){case ex:o=10;break e;case tx:o=9;break e;case Db:o=11;break e;case Ub:o=14;break e;case ko:o=16,i=null;break e}throw Error(Re(130,n==null?n:typeof n,""))}return e=Fs(o,t,e,s),e.elementType=n,e.type=i,e.lanes=r,e}function ul(n,e,t,i){return n=Fs(7,n,i,e),n.lanes=t,n}function YA(n,e,t,i){return n=Fs(22,n,i,e),n.elementType=nx,n.lanes=t,n.stateNode={isHidden:!1},n}function Tm(n,e,t){return n=Fs(6,n,null,e),n.lanes=t,n}function Em(n,e,t){return e=Fs(4,n.children!==null?n.children:[],n.key,e),e.lanes=t,e.stateNode={containerInfo:n.containerInfo,pendingChildren:null,implementation:n.implementation},e}function X3(n,e,t,i,s){this.tag=e,this.containerInfo=n,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=vm(0),this.expirationTimes=vm(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=vm(0),this.identifierPrefix=i,this.onRecoverableError=s,this.mutableSourceEagerHydrationData=null}function wy(n,e,t,i,s,r,o,a,l){return n=new X3(n,e,t,a,l),e===1?(e=1,r===!0&&(e|=8)):e=0,r=Fs(3,null,null,e),n.current=r,r.stateNode=n,r.memoizedState={element:i,isDehydrated:t,cache:null,transitions:null,pendingSuspenseBoundaries:null},gy(r),n}function Y3(n,e,t){var i=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(jR)}catch(n){console.error(n)}}jR(),OS.exports=ms;var T3=OS.exports,w2=T3;Ef.createRoot=w2.createRoot,Ef.hydrateRoot=w2.hydrateRoot;/** - * @remix-run/router v1.6.2 - * - * Copyright (c) Remix Software Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */function pu(){return pu=Object.assign?Object.assign.bind():function(n){for(var e=1;e"u")throw new Error(e)}function Wy(n,e){if(!n){typeof console<"u"&&console.warn(e);try{throw new Error(e)}catch{}}}function k3(){return Math.random().toString(36).substr(2,8)}function x2(n,e){return{usr:n.state,key:n.key,idx:e}}function X0(n,e,t,i){return t===void 0&&(t=null),pu({pathname:typeof n=="string"?n:n.pathname,search:"",hash:""},typeof e=="string"?bc(e):e,{state:t,key:e&&e.key||i||k3()})}function hA(n){let{pathname:e="/",search:t="",hash:i=""}=n;return t&&t!=="?"&&(e+=t.charAt(0)==="?"?t:"?"+t),i&&i!=="#"&&(e+=i.charAt(0)==="#"?i:"#"+i),e}function bc(n){let e={};if(n){let t=n.indexOf("#");t>=0&&(e.hash=n.substr(t),n=n.substr(0,t));let i=n.indexOf("?");i>=0&&(e.search=n.substr(i),n=n.substr(0,i)),n&&(e.pathname=n)}return e}function D3(n,e,t,i){i===void 0&&(i={});let{window:s=document.defaultView,v5Compat:r=!1}=i,o=s.history,a=jo.Pop,l=null,c=u();c==null&&(c=0,o.replaceState(pu({},o.state,{idx:c}),""));function u(){return(o.state||{idx:null}).idx}function C(){a=jo.Pop;let v=u(),A=v==null?null:v-c;c=v,l&&l({action:a,location:y.location,delta:A})}function d(v,A){a=jo.Push;let b=X0(y.location,v,A);t&&t(b,v),c=u()+1;let f=x2(b,c),B=y.createHref(b);try{o.pushState(f,"",B)}catch{s.location.assign(B)}r&&l&&l({action:a,location:y.location,delta:1})}function h(v,A){a=jo.Replace;let b=X0(y.location,v,A);t&&t(b,v),c=u();let f=x2(b,c),B=y.createHref(b);o.replaceState(f,"",B),r&&l&&l({action:a,location:y.location,delta:0})}function m(v){let A=s.location.origin!=="null"?s.location.origin:s.location.href,b=typeof v=="string"?v:hA(v);return Kn(A,"No window.location.(origin|href) available to create URL for href: "+b),new URL(b,A)}let y={get action(){return a},get location(){return n(s,o)},listen(v){if(l)throw new Error("A history only accepts one active listener");return s.addEventListener(S2,C),l=v,()=>{s.removeEventListener(S2,C),l=null}},createHref(v){return e(s,v)},createURL:m,encodeLocation(v){let A=m(v);return{pathname:A.pathname,search:A.search,hash:A.hash}},push:d,replace:h,go(v){return o.go(v)}};return y}var R2;(function(n){n.data="data",n.deferred="deferred",n.redirect="redirect",n.error="error"})(R2||(R2={}));function U3(n,e,t){t===void 0&&(t="/");let i=typeof e=="string"?bc(e):e,s=Vy(i.pathname||"/",t);if(s==null)return null;let r=qR(n);P3(r);let o=null;for(let a=0;o==null&&a{let l={relativePath:a===void 0?r.path||"":a,caseSensitive:r.caseSensitive===!0,childrenIndex:o,route:r};l.relativePath.startsWith("/")&&(Kn(l.relativePath.startsWith(i),'Absolute route path "'+l.relativePath+'" nested under path '+('"'+i+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),l.relativePath=l.relativePath.slice(i.length));let c=aa([i,l.relativePath]),u=t.concat(l);r.children&&r.children.length>0&&(Kn(r.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+c+'".')),qR(r.children,e,u,c)),!(r.path==null&&!r.index)&&e.push({path:c,score:$3(c,r.index),routesMeta:u})};return n.forEach((r,o)=>{var a;if(r.path===""||!((a=r.path)!=null&&a.includes("?")))s(r,o);else for(let l of $R(r.path))s(r,o,l)}),e}function $R(n){let e=n.split("/");if(e.length===0)return[];let[t,...i]=e,s=t.endsWith("?"),r=t.replace(/\?$/,"");if(i.length===0)return s?[r,""]:[r];let o=$R(i.join("/")),a=[];return a.push(...o.map(l=>l===""?r:[r,l].join("/"))),s&&a.push(...o),a.map(l=>n.startsWith("/")&&l===""?"/":l)}function P3(n){n.sort((e,t)=>e.score!==t.score?t.score-e.score:eH(e.routesMeta.map(i=>i.childrenIndex),t.routesMeta.map(i=>i.childrenIndex)))}const _3=/^:\w+$/,J3=3,O3=2,Q3=1,j3=10,q3=-2,W2=n=>n==="*";function $3(n,e){let t=n.split("/"),i=t.length;return t.some(W2)&&(i+=q3),e&&(i+=O3),t.filter(s=>!W2(s)).reduce((s,r)=>s+(_3.test(r)?J3:r===""?Q3:j3),i)}function eH(n,e){return n.length===e.length&&n.slice(0,-1).every((i,s)=>i===e[s])?n[n.length-1]-e[e.length-1]:0}function tH(n,e){let{routesMeta:t}=n,i={},s="/",r=[];for(let o=0;o{if(u==="*"){let d=a[C]||"";o=r.slice(0,r.length-d.length).replace(/(.)\/+$/,"$1")}return c[u]=rH(a[C]||"",u),c},{}),pathname:r,pathnameBase:o,pattern:n}}function iH(n,e,t){e===void 0&&(e=!1),t===void 0&&(t=!0),Wy(n==="*"||!n.endsWith("*")||n.endsWith("/*"),'Route path "'+n+'" will be treated as if it were '+('"'+n.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+n.replace(/\*$/,"/*")+'".'));let i=[],s="^"+n.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^$?{}|()[\]]/g,"\\$&").replace(/\/:(\w+)/g,(o,a)=>(i.push(a),"/([^\\/]+)"));return n.endsWith("*")?(i.push("*"),s+=n==="*"||n==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):t?s+="\\/*$":n!==""&&n!=="/"&&(s+="(?:(?=\\/|$))"),[new RegExp(s,e?void 0:"i"),i]}function sH(n){try{return decodeURI(n)}catch(e){return Wy(!1,'The URL path "'+n+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+e+").")),n}}function rH(n,e){try{return decodeURIComponent(n)}catch(t){return Wy(!1,'The value for the URL param "'+e+'" will not be decoded because'+(' the string "'+n+'" is a malformed URL segment. This is probably')+(" due to a bad percent encoding ("+t+").")),n}}function Vy(n,e){if(e==="/")return n;if(!n.toLowerCase().startsWith(e.toLowerCase()))return null;let t=e.endsWith("/")?e.length-1:e.length,i=n.charAt(t);return i&&i!=="/"?null:n.slice(t)||"/"}function oH(n,e){e===void 0&&(e="/");let{pathname:t,search:i="",hash:s=""}=typeof n=="string"?bc(n):n;return{pathname:t?t.startsWith("/")?t:aH(t,e):e,search:gH(i),hash:cH(s)}}function aH(n,e){let t=e.replace(/\/+$/,"").split("/");return n.split("/").forEach(s=>{s===".."?t.length>1&&t.pop():s!=="."&&t.push(s)}),t.length>1?t.join("/"):"/"}function km(n,e,t,i){return"Cannot include a '"+n+"' character in a manually specified "+("`to."+e+"` field ["+JSON.stringify(i)+"]. Please separate it out to the ")+("`to."+t+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function e1(n){return n.filter((e,t)=>t===0||e.route.path&&e.route.path.length>0)}function t1(n,e,t,i){i===void 0&&(i=!1);let s;typeof n=="string"?s=bc(n):(s=pu({},n),Kn(!s.pathname||!s.pathname.includes("?"),km("?","pathname","search",s)),Kn(!s.pathname||!s.pathname.includes("#"),km("#","pathname","hash",s)),Kn(!s.search||!s.search.includes("#"),km("#","search","hash",s)));let r=n===""||s.pathname==="",o=r?"/":s.pathname,a;if(i||o==null)a=t;else{let C=e.length-1;if(o.startsWith("..")){let d=o.split("/");for(;d[0]==="..";)d.shift(),C-=1;s.pathname=d.join("/")}a=C>=0?e[C]:"/"}let l=oH(s,a),c=o&&o!=="/"&&o.endsWith("/"),u=(r||o===".")&&t.endsWith("/");return!l.pathname.endsWith("/")&&(c||u)&&(l.pathname+="/"),l}const aa=n=>n.join("/").replace(/\/\/+/g,"/"),lH=n=>n.replace(/\/+$/,"").replace(/^\/*/,"/"),gH=n=>!n||n==="?"?"":n.startsWith("?")?n:"?"+n,cH=n=>!n||n==="#"?"":n.startsWith("#")?n:"#"+n;function IH(n){return n!=null&&typeof n.status=="number"&&typeof n.statusText=="string"&&typeof n.internal=="boolean"&&"data"in n}const n1=["post","put","patch","delete"];new Set(n1);const uH=["get",...n1];new Set(uH);/** - * React Router v6.11.2 - * - * Copyright (c) Remix Software Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */function AA(){return AA=Object.assign?Object.assign.bind():function(n){for(var e=1;el.pathnameBase)),o=E.useRef(!1);return r1(()=>{o.current=!0}),E.useCallback(function(l,c){if(c===void 0&&(c={}),!o.current)return;if(typeof l=="number"){t.go(l);return}let u=t1(l,JSON.parse(r),s,c.relative==="path");n==null&&e!=="/"&&(u.pathname=u.pathname==="/"?e:aa([e,u.pathname])),(c.replace?t.replace:t.push)(u,c.state,c)},[e,t,r,s,n])}const AH=E.createContext(null);function pH(n){let e=E.useContext(yo).outlet;return e&&E.createElement(AH.Provider,{value:n},e)}function mH(){let{matches:n}=E.useContext(yo),e=n[n.length-1];return e?e.params:{}}function Ny(n,e){let{relative:t}=e===void 0?{}:e,{matches:i}=E.useContext(yo),{pathname:s}=Wl(),r=JSON.stringify(e1(i).map(o=>o.pathnameBase));return E.useMemo(()=>t1(n,JSON.parse(r),s,t==="path"),[n,r,s,t])}function fH(n,e){return bH(n,e)}function bH(n,e,t){Du()||Kn(!1);let{navigator:i}=E.useContext(Rl),{matches:s}=E.useContext(yo),r=s[s.length-1],o=r?r.params:{};r&&r.pathname;let a=r?r.pathnameBase:"/";r&&r.route;let l=Wl(),c;if(e){var u;let y=typeof e=="string"?bc(e):e;a==="/"||(u=y.pathname)!=null&&u.startsWith(a)||Kn(!1),c=y}else c=l;let C=c.pathname||"/",d=a==="/"?C:C.slice(a.length)||"/",h=U3(n,{pathname:d}),m=ZH(h&&h.map(y=>Object.assign({},y,{params:Object.assign({},o,y.params),pathname:aa([a,i.encodeLocation?i.encodeLocation(y.pathname).pathname:y.pathname]),pathnameBase:y.pathnameBase==="/"?a:aa([a,i.encodeLocation?i.encodeLocation(y.pathnameBase).pathname:y.pathnameBase])})),s,t);return e&&m?E.createElement(TA.Provider,{value:{location:AA({pathname:"/",search:"",hash:"",state:null,key:"default"},c),navigationType:jo.Pop}},m):m}function yH(){let n=RH(),e=IH(n)?n.status+" "+n.statusText:n instanceof Error?n.message:JSON.stringify(n),t=n instanceof Error?n.stack:null,s={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"},r=null;return E.createElement(E.Fragment,null,E.createElement("h2",null,"Unexpected Application Error!"),E.createElement("h3",{style:{fontStyle:"italic"}},e),t?E.createElement("pre",{style:s},t):null,r)}const vH=E.createElement(yH,null);class GH extends E.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||t.revalidation!=="idle"&&e.revalidation==="idle"?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:e.error||t.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){console.error("React Router caught the following error during render",e,t)}render(){return this.state.error?E.createElement(yo.Provider,{value:this.props.routeContext},E.createElement(s1.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function BH(n){let{routeContext:e,match:t,children:i}=n,s=E.useContext(My);return s&&s.static&&s.staticContext&&(t.route.errorElement||t.route.ErrorBoundary)&&(s.staticContext._deepestRenderedBoundaryId=t.route.id),E.createElement(yo.Provider,{value:e},i)}function ZH(n,e,t){var i;if(e===void 0&&(e=[]),t===void 0&&(t=null),n==null){var s;if((s=t)!=null&&s.errors)n=t.matches;else return null}let r=n,o=(i=t)==null?void 0:i.errors;if(o!=null){let a=r.findIndex(l=>l.route.id&&o?.[l.route.id]);a>=0||Kn(!1),r=r.slice(0,Math.min(r.length,a+1))}return r.reduceRight((a,l,c)=>{let u=l.route.id?o?.[l.route.id]:null,C=null;t&&(C=l.route.errorElement||vH);let d=e.concat(r.slice(0,c+1)),h=()=>{let m;return u?m=C:l.route.Component?m=E.createElement(l.route.Component,null):l.route.element?m=l.route.element:m=a,E.createElement(BH,{match:l,routeContext:{outlet:a,matches:d,isDataRoute:t!=null},children:m})};return t&&(l.route.ErrorBoundary||l.route.errorElement||c===0)?E.createElement(GH,{location:t.location,revalidation:t.revalidation,component:C,error:u,children:h(),routeContext:{outlet:null,matches:d,isDataRoute:!0}}):h()},null)}var Y0;(function(n){n.UseBlocker="useBlocker",n.UseRevalidator="useRevalidator",n.UseNavigateStable="useNavigate"})(Y0||(Y0={}));var mu;(function(n){n.UseBlocker="useBlocker",n.UseLoaderData="useLoaderData",n.UseActionData="useActionData",n.UseRouteError="useRouteError",n.UseNavigation="useNavigation",n.UseRouteLoaderData="useRouteLoaderData",n.UseMatches="useMatches",n.UseRevalidator="useRevalidator",n.UseNavigateStable="useNavigate",n.UseRouteId="useRouteId"})(mu||(mu={}));function wH(n){let e=E.useContext(My);return e||Kn(!1),e}function SH(n){let e=E.useContext(i1);return e||Kn(!1),e}function xH(n){let e=E.useContext(yo);return e||Kn(!1),e}function o1(n){let e=xH(),t=e.matches[e.matches.length-1];return t.route.id||Kn(!1),t.route.id}function RH(){var n;let e=E.useContext(s1),t=SH(mu.UseRouteError),i=o1(mu.UseRouteError);return e||((n=t.errors)==null?void 0:n[i])}function WH(){let{router:n}=wH(Y0.UseNavigateStable),e=o1(mu.UseNavigateStable),t=E.useRef(!1);return r1(()=>{t.current=!0}),E.useCallback(function(s,r){r===void 0&&(r={}),t.current&&(typeof s=="number"?n.navigate(s):n.navigate(s,AA({fromRouteId:e},r)))},[n,e])}function VH(n){return pH(n.context)}function Eo(n){Kn(!1)}function MH(n){let{basename:e="/",children:t=null,location:i,navigationType:s=jo.Pop,navigator:r,static:o=!1}=n;Du()&&Kn(!1);let a=e.replace(/^\/*/,"/"),l=E.useMemo(()=>({basename:a,navigator:r,static:o}),[a,r,o]);typeof i=="string"&&(i=bc(i));let{pathname:c="/",search:u="",hash:C="",state:d=null,key:h="default"}=i,m=E.useMemo(()=>{let y=Vy(c,a);return y==null?null:{location:{pathname:y,search:u,hash:C,state:d,key:h},navigationType:s}},[a,c,u,C,d,h,s]);return m==null?null:E.createElement(Rl.Provider,{value:l},E.createElement(TA.Provider,{children:t,value:m}))}function NH(n){let{children:e,location:t}=n;return fH(F0(e),t)}var V2;(function(n){n[n.pending=0]="pending",n[n.success=1]="success",n[n.error=2]="error"})(V2||(V2={}));new Promise(()=>{});function F0(n,e){e===void 0&&(e=[]);let t=[];return E.Children.forEach(n,(i,s)=>{if(!E.isValidElement(i))return;let r=[...e,s];if(i.type===E.Fragment){t.push.apply(t,F0(i.props.children,r));return}i.type!==Eo&&Kn(!1),!i.props.index||!i.props.children||Kn(!1);let o={id:i.props.id||r.join("-"),caseSensitive:i.props.caseSensitive,element:i.props.element,Component:i.props.Component,index:i.props.index,path:i.props.path,loader:i.props.loader,action:i.props.action,errorElement:i.props.errorElement,ErrorBoundary:i.props.ErrorBoundary,hasErrorBoundary:i.props.ErrorBoundary!=null||i.props.errorElement!=null,shouldRevalidate:i.props.shouldRevalidate,handle:i.props.handle,lazy:i.props.lazy};i.props.children&&(o.children=F0(i.props.children,r)),t.push(o)}),t}/** - * React Router DOM v6.11.2 - * - * Copyright (c) Remix Software Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE.md file in the root directory of this source tree. - * - * @license MIT - */function pA(){return pA=Object.assign?Object.assign.bind():function(n){for(var e=1;e=0)&&(t[s]=n[s]);return t}function HH(n){return!!(n.metaKey||n.altKey||n.ctrlKey||n.shiftKey)}function XH(n,e){return n.button===0&&(!e||e==="_self")&&!HH(n)}const YH=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset"],FH=["aria-current","caseSensitive","className","end","style","to","children"];function KH(n){let{basename:e,children:t,window:i}=n,s=E.useRef();s.current==null&&(s.current=E3({window:i,v5Compat:!0}));let r=s.current,[o,a]=E.useState({action:r.action,location:r.location});return E.useLayoutEffect(()=>r.listen(a),[r]),E.createElement(MH,{basename:e,children:t,location:o.location,navigationType:o.action,navigator:r})}const zH=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",LH=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,EA=E.forwardRef(function(e,t){let{onClick:i,relative:s,reloadDocument:r,replace:o,state:a,target:l,to:c,preventScrollReset:u}=e,C=a1(e,YH),{basename:d}=E.useContext(Rl),h,m=!1;if(typeof c=="string"&&LH.test(c)&&(h=c,zH))try{let b=new URL(window.location.href),f=c.startsWith("//")?new URL(b.protocol+c):new URL(c),B=Vy(f.pathname,d);f.origin===b.origin&&B!=null?c=B+f.search+f.hash:m=!0}catch{}let y=CH(c,{relative:s}),v=TH(c,{replace:o,state:a,target:l,preventScrollReset:u,relative:s});function A(b){i&&i(b),b.defaultPrevented||v(b)}return E.createElement("a",pA({},C,{href:h||y,onClick:m||r?i:A,ref:t,target:l}))}),l1=E.forwardRef(function(e,t){let{"aria-current":i="page",caseSensitive:s=!1,className:r="",end:o=!1,style:a,to:l,children:c}=e,u=a1(e,FH),C=Ny(l,{relative:u.relative}),d=Wl(),h=E.useContext(i1),{navigator:m}=E.useContext(Rl),y=m.encodeLocation?m.encodeLocation(C).pathname:C.pathname,v=d.pathname,A=h&&h.navigation&&h.navigation.location?h.navigation.location.pathname:null;s||(v=v.toLowerCase(),A=A?A.toLowerCase():null,y=y.toLowerCase());let b=v===y||!o&&v.startsWith(y)&&v.charAt(y.length)==="/",f=A!=null&&(A===y||!o&&A.startsWith(y)&&A.charAt(y.length)==="/"),B=b?i:void 0,S;typeof r=="function"?S=r({isActive:b,isPending:f}):S=[r,b?"active":null,f?"pending":null].filter(Boolean).join(" ");let x=typeof a=="function"?a({isActive:b,isPending:f}):a;return E.createElement(EA,pA({},u,{"aria-current":B,className:S,ref:t,style:x,to:l}),typeof c=="function"?c({isActive:b,isPending:f}):c)});var M2;(function(n){n.UseScrollRestoration="useScrollRestoration",n.UseSubmitImpl="useSubmitImpl",n.UseFetcher="useFetcher"})(M2||(M2={}));var N2;(function(n){n.UseFetchers="useFetchers",n.UseScrollRestoration="useScrollRestoration"})(N2||(N2={}));function TH(n,e){let{target:t,replace:i,state:s,preventScrollReset:r,relative:o}=e===void 0?{}:e,a=dH(),l=Wl(),c=Ny(n,{relative:o});return E.useCallback(u=>{if(XH(u,t)){u.preventDefault();let C=i!==void 0?i:hA(l)===hA(c);a(n,{replace:C,state:s,preventScrollReset:r,relative:o})}},[l,a,c,i,s,t,n,r,o])}const g1=({className:n})=>N.jsxs("svg",{className:n,width:"100%",height:"100%",viewBox:"0 0 180 180",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[N.jsx("path",{className:"fill-icontext dark:fill-icontext-dark",d:"M76.875 5.3125L65.25 51H54.2188L48.0312 27C47.9062 26.5417 47.7396 25.8438 47.5312 24.9062C47.3229 23.9688 47.1042 22.9479 46.875 21.8438C46.6458 20.7188 46.4375 19.6667 46.25 18.6875C46.0833 17.6875 45.9688 16.8958 45.9062 16.3125C45.8438 16.8958 45.7188 17.6771 45.5312 18.6562C45.3646 19.6354 45.1667 20.6771 44.9375 21.7812C44.7292 22.8854 44.5208 23.9167 44.3125 24.875C44.1042 25.8333 43.9375 26.5625 43.8125 27.0625L37.6562 51H26.6562L15 5.3125H24.5312L30.375 30.25C30.5417 31 30.7292 31.8958 30.9375 32.9375C31.1667 33.9792 31.3854 35.0729 31.5938 36.2188C31.8229 37.3438 32.0208 38.4375 32.1875 39.5C32.375 40.5417 32.5104 41.4479 32.5938 42.2188C32.6979 41.4271 32.8333 40.5104 33 39.4688C33.1667 38.4062 33.3438 37.3333 33.5312 36.25C33.7396 35.1458 33.9479 34.125 34.1562 33.1875C34.3646 32.25 34.5521 31.4896 34.7188 30.9062L41.375 5.3125H50.5312L57.1875 30.9062C57.3333 31.4688 57.5 32.2292 57.6875 33.1875C57.8958 34.125 58.1042 35.1458 58.3125 36.25C58.5208 37.3542 58.7083 38.4375 58.875 39.5C59.0625 40.5417 59.1979 41.4479 59.2812 42.2188C59.4271 41.1771 59.625 39.9167 59.875 38.4375C60.1458 36.9375 60.4271 35.4479 60.7188 33.9688C61.0312 32.4896 61.3021 31.25 61.5312 30.25L67.3438 5.3125H76.875ZM107.225 33.4688C107.225 36.3854 106.829 38.9688 106.037 41.2188C105.267 43.4688 104.131 45.375 102.631 46.9375C101.152 48.4792 99.3604 49.6458 97.2562 50.4375C95.1729 51.2292 92.8187 51.625 90.1937 51.625C87.7354 51.625 85.475 51.2292 83.4125 50.4375C81.3708 49.6458 79.5896 48.4792 78.0687 46.9375C76.5687 45.375 75.4021 43.4688 74.5687 41.2188C73.7562 38.9688 73.35 36.3854 73.35 33.4688C73.35 29.5938 74.0375 26.3125 75.4125 23.625C76.7875 20.9375 78.7458 18.8958 81.2875 17.5C83.8292 16.1042 86.8604 15.4062 90.3812 15.4062C93.6521 15.4062 96.5479 16.1042 99.0687 17.5C101.61 18.8958 103.6 20.9375 105.037 23.625C106.496 26.3125 107.225 29.5938 107.225 33.4688ZM83.0687 33.4688C83.0687 35.7604 83.3187 37.6875 83.8187 39.25C84.3187 40.8125 85.1 41.9896 86.1625 42.7812C87.225 43.5729 88.6104 43.9688 90.3187 43.9688C92.0062 43.9688 93.3708 43.5729 94.4125 42.7812C95.475 41.9896 96.2458 40.8125 96.725 39.25C97.225 37.6875 97.475 35.7604 97.475 33.4688C97.475 31.1562 97.225 29.2396 96.725 27.7188C96.2458 26.1771 95.475 25.0208 94.4125 24.25C93.35 23.4792 91.9646 23.0938 90.2562 23.0938C87.7354 23.0938 85.9021 23.9583 84.7562 25.6875C83.6312 27.4167 83.0687 30.0104 83.0687 33.4688ZM122.003 51.625C118.107 51.625 114.93 50.1042 112.471 47.0625C110.034 44 108.815 39.5104 108.815 33.5938C108.815 27.6146 110.055 23.0938 112.534 20.0312C115.013 16.9479 118.253 15.4062 122.253 15.4062C123.919 15.4062 125.388 15.6354 126.659 16.0938C127.93 16.5521 129.023 17.1667 129.94 17.9375C130.878 18.7083 131.669 19.5729 132.315 20.5312H132.628C132.503 19.8646 132.346 18.8854 132.159 17.5938C131.992 16.2812 131.909 14.9375 131.909 13.5625V2.375H141.471V51H134.159L132.315 46.4688H131.909C131.305 47.4271 130.544 48.3021 129.628 49.0938C128.732 49.8646 127.659 50.4792 126.409 50.9375C125.159 51.3958 123.69 51.625 122.003 51.625ZM125.346 44.0312C127.95 44.0312 129.784 43.2604 130.846 41.7188C131.93 40.1562 132.503 37.8125 132.565 34.6875V33.6562C132.565 30.2604 132.044 27.6667 131.003 25.875C129.961 24.0625 128.023 23.1562 125.19 23.1562C123.086 23.1562 121.44 24.0625 120.253 25.875C119.065 27.6875 118.471 30.3021 118.471 33.7188C118.471 37.1354 119.065 39.7083 120.253 41.4375C121.461 43.1667 123.159 44.0312 125.346 44.0312ZM159.446 15.4062C162.675 15.4062 165.457 16.0312 167.79 17.2812C170.123 18.5104 171.925 20.3021 173.196 22.6562C174.467 25.0104 175.103 27.8854 175.103 31.2812V35.9062H152.571C152.675 38.5938 153.478 40.7083 154.978 42.25C156.498 43.7708 158.603 44.5312 161.29 44.5312C163.519 44.5312 165.561 44.3021 167.415 43.8438C169.269 43.3854 171.175 42.6979 173.134 41.7812V49.1562C171.405 50.0104 169.592 50.6354 167.696 51.0312C165.821 51.4271 163.54 51.625 160.853 51.625C157.353 51.625 154.248 50.9792 151.54 49.6875C148.853 48.3958 146.738 46.4271 145.196 43.7812C143.675 41.1354 142.915 37.8021 142.915 33.7812C142.915 29.6979 143.603 26.3021 144.978 23.5938C146.373 20.8646 148.311 18.8229 150.79 17.4688C153.269 16.0938 156.155 15.4062 159.446 15.4062ZM159.509 22.1875C157.655 22.1875 156.113 22.7812 154.884 23.9688C153.675 25.1562 152.978 27.0208 152.79 29.5625H166.165C166.144 28.1458 165.884 26.8854 165.384 25.7812C164.905 24.6771 164.175 23.8021 163.196 23.1562C162.238 22.5104 161.009 22.1875 159.509 22.1875ZM61.2812 155H48.9688L29.0938 120.438H28.8125C28.8958 121.875 28.9688 123.323 29.0312 124.781C29.0938 126.24 29.1562 127.698 29.2188 129.156C29.2812 130.594 29.3438 132.042 29.4062 133.5V155H20.75V109.312H32.9688L52.8125 143.531H53.0312C52.9896 142.115 52.9375 140.708 52.875 139.312C52.8125 137.917 52.75 136.521 52.6875 135.125C52.6458 133.729 52.6042 132.333 52.5625 130.938V109.312H61.2812V155ZM75.1937 120.062V155H65.6625V120.062H75.1937ZM70.4437 106.375C71.8604 106.375 73.0792 106.708 74.1 107.375C75.1208 108.021 75.6312 109.24 75.6312 111.031C75.6312 112.802 75.1208 114.031 74.1 114.719C73.0792 115.385 71.8604 115.719 70.4437 115.719C69.0062 115.719 67.7771 115.385 66.7562 114.719C65.7562 114.031 65.2562 112.802 65.2562 111.031C65.2562 109.24 65.7562 108.021 66.7562 107.375C67.7771 106.708 69.0062 106.375 70.4437 106.375Z"}),N.jsx("path",{className:"fill-primary",d:"M18.3382 54.625C18.1007 55.7875 17.857 57.0187 17.607 58.3187C17.3695 59.6187 17.1507 60.8937 16.9507 62.1437C16.7632 63.3937 16.6132 64.5312 16.5007 65.5562H10.0882L9.807 65.1437C10.0445 64.2187 10.3382 63.1187 10.6882 61.8437C11.0507 60.5562 11.4382 59.2687 11.8507 57.9812C12.2757 56.6812 12.7007 55.5625 13.1257 54.625H18.3382ZM8.77575 54.625C8.53825 55.7875 8.2945 57.0187 8.0445 58.3187C7.807 59.6187 7.58825 60.8937 7.38825 62.1437C7.20075 63.3937 7.05075 64.5312 6.93825 65.5562H0.525749L0.244499 65.1437C0.481999 64.2187 0.775749 63.1187 1.12575 61.8437C1.48825 60.5562 1.87575 59.2687 2.28825 57.9812C2.71325 56.6812 3.13825 55.5625 3.56325 54.625H8.77575ZM61.2812 103H48.9688L29.0938 68.4375H28.8125C28.8958 69.875 28.9688 71.3229 29.0312 72.7812C29.0938 74.2396 29.1562 75.6979 29.2188 77.1562C29.2812 78.5938 29.3438 80.0417 29.4062 81.5V103H20.75V57.3125H32.9688L52.8125 91.5312H53.0312C52.9896 90.1146 52.9375 88.7083 52.875 87.3125C52.8125 85.9167 52.75 84.5208 52.6875 83.125C52.6458 81.7292 52.6042 80.3333 52.5625 78.9375V57.3125H61.2812V103ZM75.1937 68.0625V103H65.6625V68.0625H75.1937ZM70.4437 54.375C71.8604 54.375 73.0792 54.7083 74.1 55.375C75.1208 56.0208 75.6312 57.2396 75.6312 59.0312C75.6312 60.8021 75.1208 62.0312 74.1 62.7188C73.0792 63.3854 71.8604 63.7188 70.4437 63.7188C69.0062 63.7188 67.7771 63.3854 66.7562 62.7188C65.7562 62.0312 65.2562 60.8021 65.2562 59.0312C65.2562 57.2396 65.7562 56.0208 66.7562 55.375C67.7771 54.7083 69.0062 54.375 70.4437 54.375ZM119.856 67.4062C123.815 67.4062 126.804 68.4271 128.825 70.4688C130.867 72.4896 131.888 75.7396 131.888 80.2188V103H122.325V82.5938C122.325 80.0938 121.898 78.2083 121.044 76.9375C120.19 75.6667 118.867 75.0312 117.075 75.0312C114.554 75.0312 112.763 75.9375 111.7 77.75C110.638 79.5417 110.106 82.1146 110.106 85.4688V103H100.575V82.5938C100.575 80.9271 100.388 79.5312 100.013 78.4062C99.6375 77.2812 99.0646 76.4375 98.2938 75.875C97.5229 75.3125 96.5333 75.0312 95.325 75.0312C93.5542 75.0312 92.1583 75.4792 91.1375 76.375C90.1375 77.25 89.4188 78.5521 88.9813 80.2812C88.5646 81.9896 88.3563 84.0833 88.3563 86.5625V103H78.825V68.0625H86.1063L87.3875 72.5312H87.9188C88.6271 71.3229 89.5125 70.3438 90.575 69.5938C91.6583 68.8438 92.8458 68.2917 94.1375 67.9375C95.4292 67.5833 96.7417 67.4062 98.075 67.4062C100.638 67.4062 102.804 67.8229 104.575 68.6562C106.367 69.4896 107.742 70.7812 108.7 72.5312H109.544C110.585 70.7396 112.054 69.4375 113.95 68.625C115.867 67.8125 117.835 67.4062 119.856 67.4062ZM167.05 85.4688C167.05 88.3854 166.654 90.9688 165.863 93.2188C165.092 95.4688 163.956 97.375 162.456 98.9375C160.977 100.479 159.185 101.646 157.081 102.438C154.998 103.229 152.644 103.625 150.019 103.625C147.56 103.625 145.3 103.229 143.238 102.438C141.196 101.646 139.415 100.479 137.894 98.9375C136.394 97.375 135.227 95.4688 134.394 93.2188C133.581 90.9688 133.175 88.3854 133.175 85.4688C133.175 81.5938 133.863 78.3125 135.238 75.625C136.613 72.9375 138.571 70.8958 141.113 69.5C143.654 68.1042 146.685 67.4062 150.206 67.4062C153.477 67.4062 156.373 68.1042 158.894 69.5C161.435 70.8958 163.425 72.9375 164.863 75.625C166.321 78.3125 167.05 81.5938 167.05 85.4688ZM142.894 85.4688C142.894 87.7604 143.144 89.6875 143.644 91.25C144.144 92.8125 144.925 93.9896 145.988 94.7812C147.05 95.5729 148.435 95.9688 150.144 95.9688C151.831 95.9688 153.196 95.5729 154.238 94.7812C155.3 93.9896 156.071 92.8125 156.55 91.25C157.05 89.6875 157.3 87.7604 157.3 85.4688C157.3 83.1562 157.05 81.2396 156.55 79.7188C156.071 78.1771 155.3 77.0208 154.238 76.25C153.175 75.4792 151.79 75.0938 150.081 75.0938C147.56 75.0938 145.727 75.9583 144.581 77.6875C143.456 79.4167 142.894 82.0104 142.894 85.4688ZM182.031 54.625L182.294 55.0375C182.069 55.9625 181.775 57.0687 181.412 58.3562C181.062 59.6312 180.675 60.9125 180.25 62.2C179.837 63.4875 179.419 64.6062 178.994 65.5562H173.781C174.031 64.3937 174.275 63.1625 174.512 61.8625C174.75 60.5625 174.962 59.2875 175.15 58.0375C175.35 56.7875 175.506 55.65 175.619 54.625H182.031ZM172.469 54.625L172.75 55.0375C172.525 55.9625 172.231 57.0687 171.869 58.3562C171.506 59.6312 171.112 60.9125 170.687 62.2C170.275 63.4875 169.856 64.6062 169.431 65.5562H164.219C164.406 64.6812 164.587 63.7687 164.762 62.8187C164.95 61.8562 165.125 60.8937 165.287 59.9312C165.45 58.9687 165.594 58.0375 165.719 57.1375C165.856 56.225 165.969 55.3875 166.056 54.625H172.469Z"})]}),EH="/pr-preview/pr-29/assets/edgeworth.svg",kH="/pr-preview/pr-29/assets/mathdiagrams.webp";/** - * @license - * Copyright 2010-2023 Three.js Authors - * SPDX-License-Identifier: MIT - */const ya="152",Ja={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},Oa={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},c1=0,K0=1,I1=2,DH=3,u1=0,kA=1,DI=2,rr=3,Xr=0,Dn=1,Oi=2,UH=2,sn=0,Cl=1,z0=2,L0=3,T0=4,C1=5,qa=100,d1=101,h1=102,E0=103,k0=104,A1=200,p1=201,m1=202,f1=203,Hy=204,Xy=205,b1=206,y1=207,v1=208,G1=209,B1=210,Yy=0,Fy=1,mA=2,fu=3,bu=4,Ky=5,zy=6,DA=7,Uu=0,Z1=1,w1=2,Ir=0,S1=1,x1=2,R1=3,Ly=4,W1=5,UA=300,Ca=301,da=302,yu=303,vu=304,yc=306,ps=1e3,En=1001,Gu=1002,ft=1003,fA=1004,PH=1004,UI=1005,_H=1005,et=1006,Ty=1007,JH=1007,ha=1008,OH=1008,ln=1009,V1=1010,M1=1011,Ey=1012,N1=1013,ao=1014,Rn=1015,ds=1016,H1=1017,X1=1018,la=1020,Y1=1021,hn=1023,PA=1024,F1=1025,ga=1026,Aa=1027,ky=1028,K1=1029,Dy=1030,z1=1031,L1=1033,Hh=33776,Xh=33777,Yh=33778,Fh=33779,D0=35840,U0=35841,P0=35842,_0=35843,T1=36196,J0=37492,O0=37496,Q0=37808,j0=37809,q0=37810,$0=37811,eb=37812,tb=37813,nb=37814,ib=37815,sb=37816,rb=37817,ob=37818,ab=37819,lb=37820,gb=37821,Kh=36492,E1=36283,cb=36284,Ib=36285,ub=36286,k1=2200,D1=2201,U1=2202,Bu=2300,Zu=2301,zh=2302,ol=2400,al=2401,wu=2402,_A=2500,Uy=2501,QH=0,jH=1,qH=2,Pu=3e3,zs=3001,zn=3200,Yr=3201,vo=0,P1=1,Io="",yt="srgb",Cr="srgb-linear",Py="display-p3",$H=0,Lh=7680,eX=7681,tX=7682,nX=7683,iX=34055,sX=34056,rX=5386,oX=512,aX=513,lX=514,gX=515,cX=516,IX=517,uX=518,_1=519,Su=35044,J1=35048,CX=35040,dX=35045,hX=35049,AX=35041,pX=35046,mX=35050,fX=35042,bX="100",bA="300 es",yA=1035;class bs{addEventListener(e,t){this._listeners===void 0&&(this._listeners={});const i=this._listeners;i[e]===void 0&&(i[e]=[]),i[e].indexOf(t)===-1&&i[e].push(t)}hasEventListener(e,t){if(this._listeners===void 0)return!1;const i=this._listeners;return i[e]!==void 0&&i[e].indexOf(t)!==-1}removeEventListener(e,t){if(this._listeners===void 0)return;const s=this._listeners[e];if(s!==void 0){const r=s.indexOf(t);r!==-1&&s.splice(r,1)}}dispatchEvent(e){if(this._listeners===void 0)return;const i=this._listeners[e.type];if(i!==void 0){e.target=this;const s=i.slice(0);for(let r=0,o=s.length;r>8&255]+fi[n>>16&255]+fi[n>>24&255]+"-"+fi[e&255]+fi[e>>8&255]+"-"+fi[e>>16&15|64]+fi[e>>24&255]+"-"+fi[t&63|128]+fi[t>>8&255]+"-"+fi[t>>16&255]+fi[t>>24&255]+fi[i&255]+fi[i>>8&255]+fi[i>>16&255]+fi[i>>24&255]).toLowerCase()}function wn(n,e,t){return Math.max(e,Math.min(t,n))}function _y(n,e){return(n%e+e)%e}function yX(n,e,t,i,s){return i+(n-e)*(s-i)/(t-e)}function vX(n,e,t){return n!==e?(t-n)/(e-n):0}function PI(n,e,t){return(1-t)*n+t*e}function GX(n,e,t,i){return PI(n,e,1-Math.exp(-t*i))}function BX(n,e=1){return e-Math.abs(_y(n,e*2)-e)}function ZX(n,e,t){return n<=e?0:n>=t?1:(n=(n-e)/(t-e),n*n*(3-2*n))}function wX(n,e,t){return n<=e?0:n>=t?1:(n=(n-e)/(t-e),n*n*n*(n*(n*6-15)+10))}function SX(n,e){return n+Math.floor(Math.random()*(e-n+1))}function xX(n,e){return n+Math.random()*(e-n)}function RX(n){return n*(.5-Math.random())}function WX(n){n!==void 0&&(H2=n);let e=H2+=1831565813;return e=Math.imul(e^e>>>15,e|1),e^=e+Math.imul(e^e>>>7,e|61),((e^e>>>14)>>>0)/4294967296}function VX(n){return n*dl}function MX(n){return n*cc}function Cb(n){return(n&n-1)===0&&n!==0}function O1(n){return Math.pow(2,Math.ceil(Math.log(n)/Math.LN2))}function Q1(n){return Math.pow(2,Math.floor(Math.log(n)/Math.LN2))}function NX(n,e,t,i,s){const r=Math.cos,o=Math.sin,a=r(t/2),l=o(t/2),c=r((e+i)/2),u=o((e+i)/2),C=r((e-i)/2),d=o((e-i)/2),h=r((i-e)/2),m=o((i-e)/2);switch(s){case"XYX":n.set(a*u,l*C,l*d,a*c);break;case"YZY":n.set(l*d,a*u,l*C,a*c);break;case"ZXZ":n.set(l*C,l*d,a*u,a*c);break;case"XZX":n.set(a*u,l*m,l*h,a*c);break;case"YXY":n.set(l*h,a*u,l*m,a*c);break;case"ZYZ":n.set(l*m,l*h,a*u,a*c);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+s)}}function us(n,e){switch(e.constructor){case Float32Array:return n;case Uint16Array:return n/65535;case Uint8Array:return n/255;case Int16Array:return Math.max(n/32767,-1);case Int8Array:return Math.max(n/127,-1);default:throw new Error("Invalid component type.")}}function Zt(n,e){switch(e.constructor){case Float32Array:return n;case Uint16Array:return Math.round(n*65535);case Uint8Array:return Math.round(n*255);case Int16Array:return Math.round(n*32767);case Int8Array:return Math.round(n*127);default:throw new Error("Invalid component type.")}}const j1={DEG2RAD:dl,RAD2DEG:cc,generateUUID:hs,clamp:wn,euclideanModulo:_y,mapLinear:yX,inverseLerp:vX,lerp:PI,damp:GX,pingpong:BX,smoothstep:ZX,smootherstep:wX,randInt:SX,randFloat:xX,randFloatSpread:RX,seededRandom:WX,degToRad:VX,radToDeg:MX,isPowerOfTwo:Cb,ceilPowerOfTwo:O1,floorPowerOfTwo:Q1,setQuaternionFromProperEuler:NX,normalize:Zt,denormalize:us};class ne{constructor(e=0,t=0){ne.prototype.isVector2=!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 new 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 new 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){const t=this.x,i=this.y,s=e.elements;return this.x=s[0]*t+s[3]*i+s[6],this.y=s[1]*t+s[4]*i+s[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=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this}clampLength(e,t){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Math.max(e,Math.min(t,i)))}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=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(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){const t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;const i=this.dot(e)/t;return Math.acos(wn(i,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const t=this.x-e.x,i=this.y-e.y;return t*t+i*i}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,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,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){const i=Math.cos(t),s=Math.sin(t),r=this.x-e.x,o=this.y-e.y;return this.x=r*i-o*s+e.x,this.y=r*s+o*i+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class Mt{constructor(){Mt.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1]}set(e,t,i,s,r,o,a,l,c){const u=this.elements;return u[0]=e,u[1]=s,u[2]=a,u[3]=t,u[4]=r,u[5]=l,u[6]=i,u[7]=o,u[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){const t=this.elements,i=e.elements;return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],this}extractBasis(e,t,i){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),i.setFromMatrix3Column(this,2),this}setFromMatrix4(e){const 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){const i=e.elements,s=t.elements,r=this.elements,o=i[0],a=i[3],l=i[6],c=i[1],u=i[4],C=i[7],d=i[2],h=i[5],m=i[8],y=s[0],v=s[3],A=s[6],b=s[1],f=s[4],B=s[7],S=s[2],x=s[5],R=s[8];return r[0]=o*y+a*b+l*S,r[3]=o*v+a*f+l*x,r[6]=o*A+a*B+l*R,r[1]=c*y+u*b+C*S,r[4]=c*v+u*f+C*x,r[7]=c*A+u*B+C*R,r[2]=d*y+h*b+m*S,r[5]=d*v+h*f+m*x,r[8]=d*A+h*B+m*R,this}multiplyScalar(e){const 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(){const e=this.elements,t=e[0],i=e[1],s=e[2],r=e[3],o=e[4],a=e[5],l=e[6],c=e[7],u=e[8];return t*o*u-t*a*c-i*r*u+i*a*l+s*r*c-s*o*l}invert(){const e=this.elements,t=e[0],i=e[1],s=e[2],r=e[3],o=e[4],a=e[5],l=e[6],c=e[7],u=e[8],C=u*o-a*c,d=a*l-u*r,h=c*r-o*l,m=t*C+i*d+s*h;if(m===0)return this.set(0,0,0,0,0,0,0,0,0);const y=1/m;return e[0]=C*y,e[1]=(s*c-u*i)*y,e[2]=(a*i-s*o)*y,e[3]=d*y,e[4]=(u*t-s*l)*y,e[5]=(s*r-a*t)*y,e[6]=h*y,e[7]=(i*l-c*t)*y,e[8]=(o*t-i*r)*y,this}transpose(){let e;const 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){const 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,i,s,r,o,a){const l=Math.cos(r),c=Math.sin(r);return this.set(i*l,i*c,-i*(l*o+c*a)+o+e,-s*c,s*l,-s*(-c*o+l*a)+a+t,0,0,1),this}scale(e,t){return this.premultiply(Dm.makeScale(e,t)),this}rotate(e){return this.premultiply(Dm.makeRotation(-e)),this}translate(e,t){return this.premultiply(Dm.makeTranslation(e,t)),this}makeTranslation(e,t){return this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){const t=Math.cos(e),i=Math.sin(e);return this.set(t,-i,0,i,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){const t=this.elements,i=e.elements;for(let s=0;s<9;s++)if(t[s]!==i[s])return!1;return!0}fromArray(e,t=0){for(let i=0;i<9;i++)this.elements[i]=e[i+t];return this}toArray(e=[],t=0){const i=this.elements;return e[t]=i[0],e[t+1]=i[1],e[t+2]=i[2],e[t+3]=i[3],e[t+4]=i[4],e[t+5]=i[5],e[t+6]=i[6],e[t+7]=i[7],e[t+8]=i[8],e}clone(){return new this.constructor().fromArray(this.elements)}}const Dm=new Mt;function q1(n){for(let e=n.length-1;e>=0;--e)if(n[e]>=65535)return!0;return!1}const HX={Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array};function Kg(n,e){return new HX[n](e)}function xu(n){return document.createElementNS("http://www.w3.org/1999/xhtml",n)}const X2={};function _I(n){n in X2||(X2[n]=!0,console.warn(n))}function qg(n){return n<.04045?n*.0773993808:Math.pow(n*.9478672986+.0521327014,2.4)}function Um(n){return n<.0031308?n*12.92:1.055*Math.pow(n,.41666)-.055}const XX=new Mt().fromArray([.8224621,.0331941,.0170827,.177538,.9668058,.0723974,-1e-7,1e-7,.9105199]),YX=new Mt().fromArray([1.2249401,-.0420569,-.0196376,-.2249404,1.0420571,-.0786361,1e-7,0,1.0982735]);function FX(n){return n.convertSRGBToLinear().applyMatrix3(YX)}function KX(n){return n.applyMatrix3(XX).convertLinearToSRGB()}const zX={[Cr]:n=>n,[yt]:n=>n.convertSRGBToLinear(),[Py]:FX},LX={[Cr]:n=>n,[yt]:n=>n.convertLinearToSRGB(),[Py]:KX},Ns={enabled:!0,get legacyMode(){return console.warn("THREE.ColorManagement: .legacyMode=false renamed to .enabled=true in r150."),!this.enabled},set legacyMode(n){console.warn("THREE.ColorManagement: .legacyMode=false renamed to .enabled=true in r150."),this.enabled=!n},get workingColorSpace(){return Cr},set workingColorSpace(n){console.warn("THREE.ColorManagement: .workingColorSpace is readonly.")},convert:function(n,e,t){if(this.enabled===!1||e===t||!e||!t)return n;const i=zX[e],s=LX[t];if(i===void 0||s===void 0)throw new Error(`Unsupported color space conversion, "${e}" to "${t}".`);return s(i(n))},fromWorkingColorSpace:function(n,e){return this.convert(n,this.workingColorSpace,e)},toWorkingColorSpace:function(n,e){return this.convert(n,e,this.workingColorSpace)}};let $l;class Jy{static getDataURL(e){if(/^data:/i.test(e.src)||typeof HTMLCanvasElement>"u")return e.src;let t;if(e instanceof HTMLCanvasElement)t=e;else{$l===void 0&&($l=xu("canvas")),$l.width=e.width,$l.height=e.height;const i=$l.getContext("2d");e instanceof ImageData?i.putImageData(e,0,0):i.drawImage(e,0,0,e.width,e.height),t=$l}return t.width>2048||t.height>2048?(console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons",e),t.toDataURL("image/jpeg",.6)):t.toDataURL("image/png")}static sRGBToLinear(e){if(typeof HTMLImageElement<"u"&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&e instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&e instanceof ImageBitmap){const t=xu("canvas");t.width=e.width,t.height=e.height;const i=t.getContext("2d");i.drawImage(e,0,0,e.width,e.height);const s=i.getImageData(0,0,e.width,e.height),r=s.data;for(let o=0;o0&&(i.userData=this.userData),t||(e.textures[this.uuid]=i),i}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(e){if(this.mapping!==UA)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case ps:e.x=e.x-Math.floor(e.x);break;case En:e.x=e.x<0?0:1;break;case Gu:Math.abs(Math.floor(e.x)%2)===1?e.x=Math.ceil(e.x)-e.x:e.x=e.x-Math.floor(e.x);break}if(e.y<0||e.y>1)switch(this.wrapT){case ps:e.y=e.y-Math.floor(e.y);break;case En:e.y=e.y<0?0:1;break;case Gu:Math.abs(Math.floor(e.y)%2)===1?e.y=Math.ceil(e.y)-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)}get encoding(){return _I("THREE.Texture: Property .encoding has been replaced by .colorSpace."),this.colorSpace===yt?zs:Pu}set encoding(e){_I("THREE.Texture: Property .encoding has been replaced by .colorSpace."),this.colorSpace=e===zs?yt:Io}}en.DEFAULT_IMAGE=null;en.DEFAULT_MAPPING=UA;en.DEFAULT_ANISOTROPY=1;class Xt{constructor(e=0,t=0,i=0,s=1){Xt.prototype.isVector4=!0,this.x=e,this.y=t,this.z=i,this.w=s}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,i,s){return this.x=e,this.y=t,this.z=i,this.w=s,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 new 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 new 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?e.w:1,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){const t=this.x,i=this.y,s=this.z,r=this.w,o=e.elements;return this.x=o[0]*t+o[4]*i+o[8]*s+o[12]*r,this.y=o[1]*t+o[5]*i+o[9]*s+o[13]*r,this.z=o[2]*t+o[6]*i+o[10]*s+o[14]*r,this.w=o[3]*t+o[7]*i+o[11]*s+o[15]*r,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);const 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,i,s,r;const l=e.elements,c=l[0],u=l[4],C=l[8],d=l[1],h=l[5],m=l[9],y=l[2],v=l[6],A=l[10];if(Math.abs(u-d)<.01&&Math.abs(C-y)<.01&&Math.abs(m-v)<.01){if(Math.abs(u+d)<.1&&Math.abs(C+y)<.1&&Math.abs(m+v)<.1&&Math.abs(c+h+A-3)<.1)return this.set(1,0,0,0),this;t=Math.PI;const f=(c+1)/2,B=(h+1)/2,S=(A+1)/2,x=(u+d)/4,R=(C+y)/4,V=(m+v)/4;return f>B&&f>S?f<.01?(i=0,s=.707106781,r=.707106781):(i=Math.sqrt(f),s=x/i,r=R/i):B>S?B<.01?(i=.707106781,s=0,r=.707106781):(s=Math.sqrt(B),i=x/s,r=V/s):S<.01?(i=.707106781,s=.707106781,r=0):(r=Math.sqrt(S),i=R/r,s=V/r),this.set(i,s,r,t),this}let b=Math.sqrt((v-m)*(v-m)+(C-y)*(C-y)+(d-u)*(d-u));return Math.abs(b)<.001&&(b=1),this.x=(v-m)/b,this.y=(C-y)/b,this.z=(d-u)/b,this.w=Math.acos((c+h+A-1)/2),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=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this.z=Math.max(e.z,Math.min(t.z,this.z)),this.w=Math.max(e.w,Math.min(t.w,this.w)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this.z=Math.max(e,Math.min(t,this.z)),this.w=Math.max(e,Math.min(t,this.w)),this}clampLength(e,t){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Math.max(e,Math.min(t,i)))}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=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w<0?Math.ceil(this.w):Math.floor(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,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this.z=e.z+(t.z-e.z)*i,this.w=e.w+(t.w-e.w)*i,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}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}}class Nt extends bs{constructor(e=1,t=1,i={}){super(),this.isWebGLRenderTarget=!0,this.width=e,this.height=t,this.depth=1,this.scissor=new Xt(0,0,e,t),this.scissorTest=!1,this.viewport=new Xt(0,0,e,t);const s={width:e,height:t,depth:1};i.encoding!==void 0&&(_I("THREE.WebGLRenderTarget: option.encoding has been replaced by option.colorSpace."),i.colorSpace=i.encoding===zs?yt:Io),this.texture=new en(s,i.mapping,i.wrapS,i.wrapT,i.magFilter,i.minFilter,i.format,i.type,i.anisotropy,i.colorSpace),this.texture.isRenderTargetTexture=!0,this.texture.flipY=!1,this.texture.generateMipmaps=i.generateMipmaps!==void 0?i.generateMipmaps:!1,this.texture.internalFormat=i.internalFormat!==void 0?i.internalFormat:null,this.texture.minFilter=i.minFilter!==void 0?i.minFilter:et,this.depthBuffer=i.depthBuffer!==void 0?i.depthBuffer:!0,this.stencilBuffer=i.stencilBuffer!==void 0?i.stencilBuffer:!1,this.depthTexture=i.depthTexture!==void 0?i.depthTexture:null,this.samples=i.samples!==void 0?i.samples:0}setSize(e,t,i=1){(this.width!==e||this.height!==t||this.depth!==i)&&(this.width=e,this.height=t,this.depth=i,this.texture.image.width=e,this.texture.image.height=t,this.texture.image.depth=i,this.dispose()),this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t)}clone(){return new this.constructor().copy(this)}copy(e){this.width=e.width,this.height=e.height,this.depth=e.depth,this.scissor.copy(e.scissor),this.scissorTest=e.scissorTest,this.viewport.copy(e.viewport),this.texture=e.texture.clone(),this.texture.isRenderTargetTexture=!0;const t=Object.assign({},e.texture.image);return this.texture.source=new ll(t),this.depthBuffer=e.depthBuffer,this.stencilBuffer=e.stencilBuffer,e.depthTexture!==null&&(this.depthTexture=e.depthTexture.clone()),this.samples=e.samples,this}dispose(){this.dispatchEvent({type:"dispose"})}}class JA extends en{constructor(e=null,t=1,i=1,s=1){super(null),this.isDataArrayTexture=!0,this.image={data:e,width:t,height:i,depth:s},this.magFilter=ft,this.minFilter=ft,this.wrapR=En,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}}class EX extends Nt{constructor(e=1,t=1,i=1){super(e,t),this.isWebGLArrayRenderTarget=!0,this.depth=i,this.texture=new JA(null,e,t,i),this.texture.isRenderTargetTexture=!0}}class hl extends en{constructor(e=null,t=1,i=1,s=1){super(null),this.isData3DTexture=!0,this.image={data:e,width:t,height:i,depth:s},this.magFilter=ft,this.minFilter=ft,this.wrapR=En,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}}class kX extends Nt{constructor(e=1,t=1,i=1){super(e,t),this.isWebGL3DRenderTarget=!0,this.depth=i,this.texture=new hl(null,e,t,i),this.texture.isRenderTargetTexture=!0}}class $1 extends Nt{constructor(e=1,t=1,i=1,s={}){super(e,t,s),this.isWebGLMultipleRenderTargets=!0;const r=this.texture;this.texture=[];for(let o=0;o=0?1:-1,f=1-A*A;if(f>Number.EPSILON){const S=Math.sqrt(f),x=Math.atan2(S,A*b);v=Math.sin(v*x)/S,a=Math.sin(a*x)/S}const B=a*b;if(l=l*v+d*B,c=c*v+h*B,u=u*v+m*B,C=C*v+y*B,v===1-a){const S=1/Math.sqrt(l*l+c*c+u*u+C*C);l*=S,c*=S,u*=S,C*=S}}e[t]=l,e[t+1]=c,e[t+2]=u,e[t+3]=C}static multiplyQuaternionsFlat(e,t,i,s,r,o){const a=i[s],l=i[s+1],c=i[s+2],u=i[s+3],C=r[o],d=r[o+1],h=r[o+2],m=r[o+3];return e[t]=a*m+u*C+l*h-c*d,e[t+1]=l*m+u*d+c*C-a*h,e[t+2]=c*m+u*h+a*d-l*C,e[t+3]=u*m-a*C-l*d-c*h,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,i,s){return this._x=e,this._y=t,this._z=i,this._w=s,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){const i=e._x,s=e._y,r=e._z,o=e._order,a=Math.cos,l=Math.sin,c=a(i/2),u=a(s/2),C=a(r/2),d=l(i/2),h=l(s/2),m=l(r/2);switch(o){case"XYZ":this._x=d*u*C+c*h*m,this._y=c*h*C-d*u*m,this._z=c*u*m+d*h*C,this._w=c*u*C-d*h*m;break;case"YXZ":this._x=d*u*C+c*h*m,this._y=c*h*C-d*u*m,this._z=c*u*m-d*h*C,this._w=c*u*C+d*h*m;break;case"ZXY":this._x=d*u*C-c*h*m,this._y=c*h*C+d*u*m,this._z=c*u*m+d*h*C,this._w=c*u*C-d*h*m;break;case"ZYX":this._x=d*u*C-c*h*m,this._y=c*h*C+d*u*m,this._z=c*u*m-d*h*C,this._w=c*u*C+d*h*m;break;case"YZX":this._x=d*u*C+c*h*m,this._y=c*h*C+d*u*m,this._z=c*u*m-d*h*C,this._w=c*u*C-d*h*m;break;case"XZY":this._x=d*u*C-c*h*m,this._y=c*h*C-d*u*m,this._z=c*u*m+d*h*C,this._w=c*u*C+d*h*m;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+o)}return t!==!1&&this._onChangeCallback(),this}setFromAxisAngle(e,t){const i=t/2,s=Math.sin(i);return this._x=e.x*s,this._y=e.y*s,this._z=e.z*s,this._w=Math.cos(i),this._onChangeCallback(),this}setFromRotationMatrix(e){const t=e.elements,i=t[0],s=t[4],r=t[8],o=t[1],a=t[5],l=t[9],c=t[2],u=t[6],C=t[10],d=i+a+C;if(d>0){const h=.5/Math.sqrt(d+1);this._w=.25/h,this._x=(u-l)*h,this._y=(r-c)*h,this._z=(o-s)*h}else if(i>a&&i>C){const h=2*Math.sqrt(1+i-a-C);this._w=(u-l)/h,this._x=.25*h,this._y=(s+o)/h,this._z=(r+c)/h}else if(a>C){const h=2*Math.sqrt(1+a-i-C);this._w=(r-c)/h,this._x=(s+o)/h,this._y=.25*h,this._z=(l+u)/h}else{const h=2*Math.sqrt(1+C-i-a);this._w=(o-s)/h,this._x=(r+c)/h,this._y=(l+u)/h,this._z=.25*h}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let i=e.dot(t)+1;return iMath.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=i):(this._x=0,this._y=-e.z,this._z=e.y,this._w=i)):(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=i),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(wn(this.dot(e),-1,1)))}rotateTowards(e,t){const i=this.angleTo(e);if(i===0)return this;const s=Math.min(1,t/i);return this.slerp(e,s),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=this._x*e,this._y=this._y*e,this._z=this._z*e,this._w=this._w*e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){const i=e._x,s=e._y,r=e._z,o=e._w,a=t._x,l=t._y,c=t._z,u=t._w;return this._x=i*u+o*a+s*c-r*l,this._y=s*u+o*l+r*a-i*c,this._z=r*u+o*c+i*l-s*a,this._w=o*u-i*a-s*l-r*c,this._onChangeCallback(),this}slerp(e,t){if(t===0)return this;if(t===1)return this.copy(e);const i=this._x,s=this._y,r=this._z,o=this._w;let a=o*e._w+i*e._x+s*e._y+r*e._z;if(a<0?(this._w=-e._w,this._x=-e._x,this._y=-e._y,this._z=-e._z,a=-a):this.copy(e),a>=1)return this._w=o,this._x=i,this._y=s,this._z=r,this;const l=1-a*a;if(l<=Number.EPSILON){const h=1-t;return this._w=h*o+t*this._w,this._x=h*i+t*this._x,this._y=h*s+t*this._y,this._z=h*r+t*this._z,this.normalize(),this._onChangeCallback(),this}const c=Math.sqrt(l),u=Math.atan2(c,a),C=Math.sin((1-t)*u)/c,d=Math.sin(t*u)/c;return this._w=o*C+this._w*d,this._x=i*C+this._x*d,this._y=s*C+this._y*d,this._z=r*C+this._z*d,this._onChangeCallback(),this}slerpQuaternions(e,t,i){return this.copy(e).slerp(t,i)}random(){const e=Math.random(),t=Math.sqrt(1-e),i=Math.sqrt(e),s=2*Math.PI*Math.random(),r=2*Math.PI*Math.random();return this.set(t*Math.cos(s),i*Math.sin(r),i*Math.cos(r),t*Math.sin(s))}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}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}};class X{constructor(e=0,t=0,i=0){X.prototype.isVector3=!0,this.x=e,this.y=t,this.z=i}set(e,t,i){return i===void 0&&(i=this.z),this.x=e,this.y=t,this.z=i,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 new 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 new 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(Y2.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(Y2.setFromAxisAngle(e,t))}applyMatrix3(e){const t=this.x,i=this.y,s=this.z,r=e.elements;return this.x=r[0]*t+r[3]*i+r[6]*s,this.y=r[1]*t+r[4]*i+r[7]*s,this.z=r[2]*t+r[5]*i+r[8]*s,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){const t=this.x,i=this.y,s=this.z,r=e.elements,o=1/(r[3]*t+r[7]*i+r[11]*s+r[15]);return this.x=(r[0]*t+r[4]*i+r[8]*s+r[12])*o,this.y=(r[1]*t+r[5]*i+r[9]*s+r[13])*o,this.z=(r[2]*t+r[6]*i+r[10]*s+r[14])*o,this}applyQuaternion(e){const t=this.x,i=this.y,s=this.z,r=e.x,o=e.y,a=e.z,l=e.w,c=l*t+o*s-a*i,u=l*i+a*t-r*s,C=l*s+r*i-o*t,d=-r*t-o*i-a*s;return this.x=c*l+d*-r+u*-a-C*-o,this.y=u*l+d*-o+C*-r-c*-a,this.z=C*l+d*-a+c*-o-u*-r,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){const t=this.x,i=this.y,s=this.z,r=e.elements;return this.x=r[0]*t+r[4]*i+r[8]*s,this.y=r[1]*t+r[5]*i+r[9]*s,this.z=r[2]*t+r[6]*i+r[10]*s,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=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this.z=Math.max(e.z,Math.min(t.z,this.z)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this.z=Math.max(e,Math.min(t,this.z)),this}clampLength(e,t){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Math.max(e,Math.min(t,i)))}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=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(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,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this.z=e.z+(t.z-e.z)*i,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){const i=e.x,s=e.y,r=e.z,o=t.x,a=t.y,l=t.z;return this.x=s*l-r*a,this.y=r*o-i*l,this.z=i*a-s*o,this}projectOnVector(e){const t=e.lengthSq();if(t===0)return this.set(0,0,0);const i=e.dot(this)/t;return this.copy(e).multiplyScalar(i)}projectOnPlane(e){return _m.copy(this).projectOnVector(e),this.sub(_m)}reflect(e){return this.sub(_m.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){const t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;const i=this.dot(e)/t;return Math.acos(wn(i,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const t=this.x-e.x,i=this.y-e.y,s=this.z-e.z;return t*t+i*i+s*s}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,i){const s=Math.sin(t)*e;return this.x=s*Math.sin(i),this.y=Math.cos(t)*e,this.z=s*Math.cos(i),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,i){return this.x=e*Math.sin(t),this.y=i,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){const t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){const t=this.setFromMatrixColumn(e,0).length(),i=this.setFromMatrixColumn(e,1).length(),s=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=i,this.z=s,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(){const e=(Math.random()-.5)*2,t=Math.random()*Math.PI*2,i=Math.sqrt(1-e**2);return this.x=i*Math.cos(t),this.y=i*Math.sin(t),this.z=e,this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const _m=new X,Y2=new bn;class Fr{constructor(e=new X(1/0,1/0,1/0),t=new X(-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,i=e.length;tthis.max.x||e.ythis.max.y||e.zthis.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.xthis.max.x||e.max.ythis.max.y||e.max.zthis.max.z)}intersectsSphere(e){return this.clampPoint(e.center,Jr),Jr.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,i;return e.normal.x>0?(t=e.normal.x*this.min.x,i=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,i=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,i+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,i+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,i+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,i+=e.normal.z*this.min.z),t<=-e.constant&&i>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(rI),vd.subVectors(this.max,rI),tg.subVectors(e.a,rI),ng.subVectors(e.b,rI),ig.subVectors(e.c,rI),Xo.subVectors(ng,tg),Yo.subVectors(ig,ng),Fa.subVectors(tg,ig);let t=[0,-Xo.z,Xo.y,0,-Yo.z,Yo.y,0,-Fa.z,Fa.y,Xo.z,0,-Xo.x,Yo.z,0,-Yo.x,Fa.z,0,-Fa.x,-Xo.y,Xo.x,0,-Yo.y,Yo.x,0,-Fa.y,Fa.x,0];return!Jm(t,tg,ng,ig,vd)||(t=[1,0,0,0,1,0,0,0,1],!Jm(t,tg,ng,ig,vd))?!1:(Gd.crossVectors(Xo,Yo),t=[Gd.x,Gd.y,Gd.z],Jm(t,tg,ng,ig,vd))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,Jr).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(Jr).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:(_r[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),_r[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),_r[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),_r[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),_r[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),_r[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),_r[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),_r[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(_r),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)}}const _r=[new X,new X,new X,new X,new X,new X,new X,new X],Jr=new X,eg=new Fr,tg=new X,ng=new X,ig=new X,Xo=new X,Yo=new X,Fa=new X,rI=new X,vd=new X,Gd=new X,Ka=new X;function Jm(n,e,t,i,s){for(let r=0,o=n.length-3;r<=o;r+=3){Ka.fromArray(n,r);const a=s.x*Math.abs(Ka.x)+s.y*Math.abs(Ka.y)+s.z*Math.abs(Ka.z),l=e.dot(Ka),c=t.dot(Ka),u=i.dot(Ka);if(Math.max(-Math.max(l,c,u),Math.min(l,c,u))>a)return!1}return!0}const DX=new Fr,oI=new X,Om=new X;class Kr{constructor(e=new X,t=-1){this.center=e,this.radius=t}set(e,t){return this.center.copy(e),this.radius=t,this}setFromPoints(e,t){const i=this.center;t!==void 0?i.copy(t):DX.setFromPoints(e).getCenter(i);let s=0;for(let r=0,o=e.length;rthis.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?(e.makeEmpty(),e):(e.set(this.center,this.center),e.expandByScalar(this.radius),e)}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius=this.radius*e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;oI.subVectors(e,this.center);const t=oI.lengthSq();if(t>this.radius*this.radius){const i=Math.sqrt(t),s=(i-this.radius)*.5;this.center.addScaledVector(oI,s/i),this.radius+=s}return this}union(e){return e.isEmpty()?this:this.isEmpty()?(this.copy(e),this):(this.center.equals(e.center)===!0?this.radius=Math.max(this.radius,e.radius):(Om.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(oI.copy(e.center).add(Om)),this.expandByPoint(oI.copy(e.center).sub(Om))),this)}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return new this.constructor().copy(this)}}const Or=new X,Qm=new X,Bd=new X,Fo=new X,jm=new X,Zd=new X,qm=new X;let _u=class{constructor(e=new X,t=new X(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.origin).addScaledVector(this.direction,e)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,Or)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);const i=t.dot(this.direction);return i<0?t.copy(this.origin):t.copy(this.origin).addScaledVector(this.direction,i)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){const t=Or.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(Or.copy(this.origin).addScaledVector(this.direction,t),Or.distanceToSquared(e))}distanceSqToSegment(e,t,i,s){Qm.copy(e).add(t).multiplyScalar(.5),Bd.copy(t).sub(e).normalize(),Fo.copy(this.origin).sub(Qm);const r=e.distanceTo(t)*.5,o=-this.direction.dot(Bd),a=Fo.dot(this.direction),l=-Fo.dot(Bd),c=Fo.lengthSq(),u=Math.abs(1-o*o);let C,d,h,m;if(u>0)if(C=o*l-a,d=o*a-l,m=r*u,C>=0)if(d>=-m)if(d<=m){const y=1/u;C*=y,d*=y,h=C*(C+o*d+2*a)+d*(o*C+d+2*l)+c}else d=r,C=Math.max(0,-(o*d+a)),h=-C*C+d*(d+2*l)+c;else d=-r,C=Math.max(0,-(o*d+a)),h=-C*C+d*(d+2*l)+c;else d<=-m?(C=Math.max(0,-(-o*r+a)),d=C>0?-r:Math.min(Math.max(-r,-l),r),h=-C*C+d*(d+2*l)+c):d<=m?(C=0,d=Math.min(Math.max(-r,-l),r),h=d*(d+2*l)+c):(C=Math.max(0,-(o*r+a)),d=C>0?r:Math.min(Math.max(-r,-l),r),h=-C*C+d*(d+2*l)+c);else d=o>0?-r:r,C=Math.max(0,-(o*d+a)),h=-C*C+d*(d+2*l)+c;return i&&i.copy(this.origin).addScaledVector(this.direction,C),s&&s.copy(Qm).addScaledVector(Bd,d),h}intersectSphere(e,t){Or.subVectors(e.center,this.origin);const i=Or.dot(this.direction),s=Or.dot(Or)-i*i,r=e.radius*e.radius;if(s>r)return null;const o=Math.sqrt(r-s),a=i-o,l=i+o;return l<0?null:a<0?this.at(l,t):this.at(a,t)}intersectsSphere(e){return this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){const t=e.normal.dot(this.direction);if(t===0)return e.distanceToPoint(this.origin)===0?0:null;const i=-(this.origin.dot(e.normal)+e.constant)/t;return i>=0?i:null}intersectPlane(e,t){const i=this.distanceToPlane(e);return i===null?null:this.at(i,t)}intersectsPlane(e){const t=e.distanceToPoint(this.origin);return t===0||e.normal.dot(this.direction)*t<0}intersectBox(e,t){let i,s,r,o,a,l;const c=1/this.direction.x,u=1/this.direction.y,C=1/this.direction.z,d=this.origin;return c>=0?(i=(e.min.x-d.x)*c,s=(e.max.x-d.x)*c):(i=(e.max.x-d.x)*c,s=(e.min.x-d.x)*c),u>=0?(r=(e.min.y-d.y)*u,o=(e.max.y-d.y)*u):(r=(e.max.y-d.y)*u,o=(e.min.y-d.y)*u),i>o||r>s||((r>i||isNaN(i))&&(i=r),(o=0?(a=(e.min.z-d.z)*C,l=(e.max.z-d.z)*C):(a=(e.max.z-d.z)*C,l=(e.min.z-d.z)*C),i>l||a>s)||((a>i||i!==i)&&(i=a),(l=0?i:s,t)}intersectsBox(e){return this.intersectBox(e,Or)!==null}intersectTriangle(e,t,i,s,r){jm.subVectors(t,e),Zd.subVectors(i,e),qm.crossVectors(jm,Zd);let o=this.direction.dot(qm),a;if(o>0){if(s)return null;a=1}else if(o<0)a=-1,o=-o;else return null;Fo.subVectors(this.origin,e);const l=a*this.direction.dot(Zd.crossVectors(Fo,Zd));if(l<0)return null;const c=a*this.direction.dot(jm.cross(Fo));if(c<0||l+c>o)return null;const u=-a*Fo.dot(qm);return u<0?null:this.at(u/o,r)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}};class Le{constructor(){Le.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}set(e,t,i,s,r,o,a,l,c,u,C,d,h,m,y,v){const A=this.elements;return A[0]=e,A[4]=t,A[8]=i,A[12]=s,A[1]=r,A[5]=o,A[9]=a,A[13]=l,A[2]=c,A[6]=u,A[10]=C,A[14]=d,A[3]=h,A[7]=m,A[11]=y,A[15]=v,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 Le().fromArray(this.elements)}copy(e){const t=this.elements,i=e.elements;return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],t[9]=i[9],t[10]=i[10],t[11]=i[11],t[12]=i[12],t[13]=i[13],t[14]=i[14],t[15]=i[15],this}copyPosition(e){const t=this.elements,i=e.elements;return t[12]=i[12],t[13]=i[13],t[14]=i[14],this}setFromMatrix3(e){const 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,i){return e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),i.setFromMatrixColumn(this,2),this}makeBasis(e,t,i){return this.set(e.x,t.x,i.x,0,e.y,t.y,i.y,0,e.z,t.z,i.z,0,0,0,0,1),this}extractRotation(e){const t=this.elements,i=e.elements,s=1/sg.setFromMatrixColumn(e,0).length(),r=1/sg.setFromMatrixColumn(e,1).length(),o=1/sg.setFromMatrixColumn(e,2).length();return t[0]=i[0]*s,t[1]=i[1]*s,t[2]=i[2]*s,t[3]=0,t[4]=i[4]*r,t[5]=i[5]*r,t[6]=i[6]*r,t[7]=0,t[8]=i[8]*o,t[9]=i[9]*o,t[10]=i[10]*o,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){const t=this.elements,i=e.x,s=e.y,r=e.z,o=Math.cos(i),a=Math.sin(i),l=Math.cos(s),c=Math.sin(s),u=Math.cos(r),C=Math.sin(r);if(e.order==="XYZ"){const d=o*u,h=o*C,m=a*u,y=a*C;t[0]=l*u,t[4]=-l*C,t[8]=c,t[1]=h+m*c,t[5]=d-y*c,t[9]=-a*l,t[2]=y-d*c,t[6]=m+h*c,t[10]=o*l}else if(e.order==="YXZ"){const d=l*u,h=l*C,m=c*u,y=c*C;t[0]=d+y*a,t[4]=m*a-h,t[8]=o*c,t[1]=o*C,t[5]=o*u,t[9]=-a,t[2]=h*a-m,t[6]=y+d*a,t[10]=o*l}else if(e.order==="ZXY"){const d=l*u,h=l*C,m=c*u,y=c*C;t[0]=d-y*a,t[4]=-o*C,t[8]=m+h*a,t[1]=h+m*a,t[5]=o*u,t[9]=y-d*a,t[2]=-o*c,t[6]=a,t[10]=o*l}else if(e.order==="ZYX"){const d=o*u,h=o*C,m=a*u,y=a*C;t[0]=l*u,t[4]=m*c-h,t[8]=d*c+y,t[1]=l*C,t[5]=y*c+d,t[9]=h*c-m,t[2]=-c,t[6]=a*l,t[10]=o*l}else if(e.order==="YZX"){const d=o*l,h=o*c,m=a*l,y=a*c;t[0]=l*u,t[4]=y-d*C,t[8]=m*C+h,t[1]=C,t[5]=o*u,t[9]=-a*u,t[2]=-c*u,t[6]=h*C+m,t[10]=d-y*C}else if(e.order==="XZY"){const d=o*l,h=o*c,m=a*l,y=a*c;t[0]=l*u,t[4]=-C,t[8]=c*u,t[1]=d*C+y,t[5]=o*u,t[9]=h*C-m,t[2]=m*C-h,t[6]=a*u,t[10]=y*C+d}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(UX,e,PX)}lookAt(e,t,i){const s=this.elements;return as.subVectors(e,t),as.lengthSq()===0&&(as.z=1),as.normalize(),Ko.crossVectors(i,as),Ko.lengthSq()===0&&(Math.abs(i.z)===1?as.x+=1e-4:as.z+=1e-4,as.normalize(),Ko.crossVectors(i,as)),Ko.normalize(),wd.crossVectors(as,Ko),s[0]=Ko.x,s[4]=wd.x,s[8]=as.x,s[1]=Ko.y,s[5]=wd.y,s[9]=as.y,s[2]=Ko.z,s[6]=wd.z,s[10]=as.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){const i=e.elements,s=t.elements,r=this.elements,o=i[0],a=i[4],l=i[8],c=i[12],u=i[1],C=i[5],d=i[9],h=i[13],m=i[2],y=i[6],v=i[10],A=i[14],b=i[3],f=i[7],B=i[11],S=i[15],x=s[0],R=s[4],V=s[8],Z=s[12],M=s[1],H=s[5],U=s[9],D=s[13],q=s[2],ie=s[6],ue=s[10],le=s[14],L=s[3],P=s[7],O=s[11],ce=s[15];return r[0]=o*x+a*M+l*q+c*L,r[4]=o*R+a*H+l*ie+c*P,r[8]=o*V+a*U+l*ue+c*O,r[12]=o*Z+a*D+l*le+c*ce,r[1]=u*x+C*M+d*q+h*L,r[5]=u*R+C*H+d*ie+h*P,r[9]=u*V+C*U+d*ue+h*O,r[13]=u*Z+C*D+d*le+h*ce,r[2]=m*x+y*M+v*q+A*L,r[6]=m*R+y*H+v*ie+A*P,r[10]=m*V+y*U+v*ue+A*O,r[14]=m*Z+y*D+v*le+A*ce,r[3]=b*x+f*M+B*q+S*L,r[7]=b*R+f*H+B*ie+S*P,r[11]=b*V+f*U+B*ue+S*O,r[15]=b*Z+f*D+B*le+S*ce,this}multiplyScalar(e){const 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(){const e=this.elements,t=e[0],i=e[4],s=e[8],r=e[12],o=e[1],a=e[5],l=e[9],c=e[13],u=e[2],C=e[6],d=e[10],h=e[14],m=e[3],y=e[7],v=e[11],A=e[15];return m*(+r*l*C-s*c*C-r*a*d+i*c*d+s*a*h-i*l*h)+y*(+t*l*h-t*c*d+r*o*d-s*o*h+s*c*u-r*l*u)+v*(+t*c*C-t*a*h-r*o*C+i*o*h+r*a*u-i*c*u)+A*(-s*a*u-t*l*C+t*a*d+s*o*C-i*o*d+i*l*u)}transpose(){const e=this.elements;let 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,i){const s=this.elements;return e.isVector3?(s[12]=e.x,s[13]=e.y,s[14]=e.z):(s[12]=e,s[13]=t,s[14]=i),this}invert(){const e=this.elements,t=e[0],i=e[1],s=e[2],r=e[3],o=e[4],a=e[5],l=e[6],c=e[7],u=e[8],C=e[9],d=e[10],h=e[11],m=e[12],y=e[13],v=e[14],A=e[15],b=C*v*c-y*d*c+y*l*h-a*v*h-C*l*A+a*d*A,f=m*d*c-u*v*c-m*l*h+o*v*h+u*l*A-o*d*A,B=u*y*c-m*C*c+m*a*h-o*y*h-u*a*A+o*C*A,S=m*C*l-u*y*l-m*a*d+o*y*d+u*a*v-o*C*v,x=t*b+i*f+s*B+r*S;if(x===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const R=1/x;return e[0]=b*R,e[1]=(y*d*r-C*v*r-y*s*h+i*v*h+C*s*A-i*d*A)*R,e[2]=(a*v*r-y*l*r+y*s*c-i*v*c-a*s*A+i*l*A)*R,e[3]=(C*l*r-a*d*r-C*s*c+i*d*c+a*s*h-i*l*h)*R,e[4]=f*R,e[5]=(u*v*r-m*d*r+m*s*h-t*v*h-u*s*A+t*d*A)*R,e[6]=(m*l*r-o*v*r-m*s*c+t*v*c+o*s*A-t*l*A)*R,e[7]=(o*d*r-u*l*r+u*s*c-t*d*c-o*s*h+t*l*h)*R,e[8]=B*R,e[9]=(m*C*r-u*y*r-m*i*h+t*y*h+u*i*A-t*C*A)*R,e[10]=(o*y*r-m*a*r+m*i*c-t*y*c-o*i*A+t*a*A)*R,e[11]=(u*a*r-o*C*r-u*i*c+t*C*c+o*i*h-t*a*h)*R,e[12]=S*R,e[13]=(u*y*s-m*C*s+m*i*d-t*y*d-u*i*v+t*C*v)*R,e[14]=(m*a*s-o*y*s-m*i*l+t*y*l+o*i*v-t*a*v)*R,e[15]=(o*C*s-u*a*s+u*i*l-t*C*l-o*i*d+t*a*d)*R,this}scale(e){const t=this.elements,i=e.x,s=e.y,r=e.z;return t[0]*=i,t[4]*=s,t[8]*=r,t[1]*=i,t[5]*=s,t[9]*=r,t[2]*=i,t[6]*=s,t[10]*=r,t[3]*=i,t[7]*=s,t[11]*=r,this}getMaxScaleOnAxis(){const e=this.elements,t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],i=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],s=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(t,i,s))}makeTranslation(e,t,i){return this.set(1,0,0,e,0,1,0,t,0,0,1,i,0,0,0,1),this}makeRotationX(e){const t=Math.cos(e),i=Math.sin(e);return this.set(1,0,0,0,0,t,-i,0,0,i,t,0,0,0,0,1),this}makeRotationY(e){const t=Math.cos(e),i=Math.sin(e);return this.set(t,0,i,0,0,1,0,0,-i,0,t,0,0,0,0,1),this}makeRotationZ(e){const t=Math.cos(e),i=Math.sin(e);return this.set(t,-i,0,0,i,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){const i=Math.cos(t),s=Math.sin(t),r=1-i,o=e.x,a=e.y,l=e.z,c=r*o,u=r*a;return this.set(c*o+i,c*a-s*l,c*l+s*a,0,c*a+s*l,u*a+i,u*l-s*o,0,c*l-s*a,u*l+s*o,r*l*l+i,0,0,0,0,1),this}makeScale(e,t,i){return this.set(e,0,0,0,0,t,0,0,0,0,i,0,0,0,0,1),this}makeShear(e,t,i,s,r,o){return this.set(1,i,r,0,e,1,o,0,t,s,1,0,0,0,0,1),this}compose(e,t,i){const s=this.elements,r=t._x,o=t._y,a=t._z,l=t._w,c=r+r,u=o+o,C=a+a,d=r*c,h=r*u,m=r*C,y=o*u,v=o*C,A=a*C,b=l*c,f=l*u,B=l*C,S=i.x,x=i.y,R=i.z;return s[0]=(1-(y+A))*S,s[1]=(h+B)*S,s[2]=(m-f)*S,s[3]=0,s[4]=(h-B)*x,s[5]=(1-(d+A))*x,s[6]=(v+b)*x,s[7]=0,s[8]=(m+f)*R,s[9]=(v-b)*R,s[10]=(1-(d+y))*R,s[11]=0,s[12]=e.x,s[13]=e.y,s[14]=e.z,s[15]=1,this}decompose(e,t,i){const s=this.elements;let r=sg.set(s[0],s[1],s[2]).length();const o=sg.set(s[4],s[5],s[6]).length(),a=sg.set(s[8],s[9],s[10]).length();this.determinant()<0&&(r=-r),e.x=s[12],e.y=s[13],e.z=s[14],qs.copy(this);const c=1/r,u=1/o,C=1/a;return qs.elements[0]*=c,qs.elements[1]*=c,qs.elements[2]*=c,qs.elements[4]*=u,qs.elements[5]*=u,qs.elements[6]*=u,qs.elements[8]*=C,qs.elements[9]*=C,qs.elements[10]*=C,t.setFromRotationMatrix(qs),i.x=r,i.y=o,i.z=a,this}makePerspective(e,t,i,s,r,o){const a=this.elements,l=2*r/(t-e),c=2*r/(i-s),u=(t+e)/(t-e),C=(i+s)/(i-s),d=-(o+r)/(o-r),h=-2*o*r/(o-r);return a[0]=l,a[4]=0,a[8]=u,a[12]=0,a[1]=0,a[5]=c,a[9]=C,a[13]=0,a[2]=0,a[6]=0,a[10]=d,a[14]=h,a[3]=0,a[7]=0,a[11]=-1,a[15]=0,this}makeOrthographic(e,t,i,s,r,o){const a=this.elements,l=1/(t-e),c=1/(i-s),u=1/(o-r),C=(t+e)*l,d=(i+s)*c,h=(o+r)*u;return a[0]=2*l,a[4]=0,a[8]=0,a[12]=-C,a[1]=0,a[5]=2*c,a[9]=0,a[13]=-d,a[2]=0,a[6]=0,a[10]=-2*u,a[14]=-h,a[3]=0,a[7]=0,a[11]=0,a[15]=1,this}equals(e){const t=this.elements,i=e.elements;for(let s=0;s<16;s++)if(t[s]!==i[s])return!1;return!0}fromArray(e,t=0){for(let i=0;i<16;i++)this.elements[i]=e[i+t];return this}toArray(e=[],t=0){const i=this.elements;return e[t]=i[0],e[t+1]=i[1],e[t+2]=i[2],e[t+3]=i[3],e[t+4]=i[4],e[t+5]=i[5],e[t+6]=i[6],e[t+7]=i[7],e[t+8]=i[8],e[t+9]=i[9],e[t+10]=i[10],e[t+11]=i[11],e[t+12]=i[12],e[t+13]=i[13],e[t+14]=i[14],e[t+15]=i[15],e}}const sg=new X,qs=new Le,UX=new X(0,0,0),PX=new X(1,1,1),Ko=new X,wd=new X,as=new X,F2=new Le,K2=new bn;class Vl{constructor(e=0,t=0,i=0,s=Vl.DEFAULT_ORDER){this.isEuler=!0,this._x=e,this._y=t,this._z=i,this._order=s}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,i,s=this._order){return this._x=e,this._y=t,this._z=i,this._order=s,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,i=!0){const s=e.elements,r=s[0],o=s[4],a=s[8],l=s[1],c=s[5],u=s[9],C=s[2],d=s[6],h=s[10];switch(t){case"XYZ":this._y=Math.asin(wn(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-u,h),this._z=Math.atan2(-o,r)):(this._x=Math.atan2(d,c),this._z=0);break;case"YXZ":this._x=Math.asin(-wn(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(a,h),this._z=Math.atan2(l,c)):(this._y=Math.atan2(-C,r),this._z=0);break;case"ZXY":this._x=Math.asin(wn(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-C,h),this._z=Math.atan2(-o,c)):(this._y=0,this._z=Math.atan2(l,r));break;case"ZYX":this._y=Math.asin(-wn(C,-1,1)),Math.abs(C)<.9999999?(this._x=Math.atan2(d,h),this._z=Math.atan2(l,r)):(this._x=0,this._z=Math.atan2(-o,c));break;case"YZX":this._z=Math.asin(wn(l,-1,1)),Math.abs(l)<.9999999?(this._x=Math.atan2(-u,c),this._y=Math.atan2(-C,r)):(this._x=0,this._y=Math.atan2(a,h));break;case"XZY":this._z=Math.asin(-wn(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(d,c),this._y=Math.atan2(a,r)):(this._x=Math.atan2(-u,h),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+t)}return this._order=t,i===!0&&this._onChangeCallback(),this}setFromQuaternion(e,t,i){return F2.makeRotationFromQuaternion(e),this.setFromRotationMatrix(F2,t,i)}setFromVector3(e,t=this._order){return this.set(e.x,e.y,e.z,t)}reorder(e){return K2.setFromEuler(this),this.setFromQuaternion(K2,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}}Vl.DEFAULT_ORDER="XYZ";class Al{constructor(){this.mask=1}set(e){this.mask=(1<>>0}enable(e){this.mask|=1<1){for(let t=0;t1){for(let i=0;i0&&(i=i.concat(o))}return i}getWorldPosition(e){return this.updateWorldMatrix(!0,!1),e.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(aI,e,JX),e}getWorldScale(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(aI,OX,e),e}getWorldDirection(e){this.updateWorldMatrix(!0,!1);const t=this.matrixWorld.elements;return e.set(t[8],t[9],t[10]).normalize()}raycast(){}traverse(e){e(this);const t=this.children;for(let i=0,s=t.length;i0&&(s.userData=this.userData),s.layers=this.layers.mask,s.matrix=this.matrix.toArray(),s.up=this.up.toArray(),this.matrixAutoUpdate===!1&&(s.matrixAutoUpdate=!1),this.isInstancedMesh&&(s.type="InstancedMesh",s.count=this.count,s.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(s.instanceColor=this.instanceColor.toJSON()));function r(a,l){return a[l.uuid]===void 0&&(a[l.uuid]=l.toJSON(e)),l.uuid}if(this.isScene)this.background&&(this.background.isColor?s.background=this.background.toJSON():this.background.isTexture&&(s.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(s.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){s.geometry=r(e.geometries,this.geometry);const a=this.geometry.parameters;if(a!==void 0&&a.shapes!==void 0){const l=a.shapes;if(Array.isArray(l))for(let c=0,u=l.length;c0){s.children=[];for(let a=0;a0){s.animations=[];for(let a=0;a0&&(i.geometries=a),l.length>0&&(i.materials=l),c.length>0&&(i.textures=c),u.length>0&&(i.images=u),C.length>0&&(i.shapes=C),d.length>0&&(i.skeletons=d),h.length>0&&(i.animations=h),m.length>0&&(i.nodes=m)}return i.object=s,i;function o(a){const l=[];for(const c in a){const u=a[c];delete u.metadata,l.push(u)}return l}}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.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,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.animations=e.animations,this.userData=JSON.parse(JSON.stringify(e.userData)),t===!0)for(let i=0;i0?s.multiplyScalar(1/Math.sqrt(r)):s.set(0,0,0)}static getBarycoord(e,t,i,s,r){$s.subVectors(s,t),jr.subVectors(i,t),$m.subVectors(e,t);const o=$s.dot($s),a=$s.dot(jr),l=$s.dot($m),c=jr.dot(jr),u=jr.dot($m),C=o*c-a*a;if(C===0)return r.set(-2,-1,-1);const d=1/C,h=(c*l-a*u)*d,m=(o*u-a*l)*d;return r.set(1-h-m,m,h)}static containsPoint(e,t,i,s){return this.getBarycoord(e,t,i,s,qr),qr.x>=0&&qr.y>=0&&qr.x+qr.y<=1}static getUV(e,t,i,s,r,o,a,l){return xd===!1&&(console.warn("THREE.Triangle.getUV() has been renamed to THREE.Triangle.getInterpolation()."),xd=!0),this.getInterpolation(e,t,i,s,r,o,a,l)}static getInterpolation(e,t,i,s,r,o,a,l){return this.getBarycoord(e,t,i,s,qr),l.setScalar(0),l.addScaledVector(r,qr.x),l.addScaledVector(o,qr.y),l.addScaledVector(a,qr.z),l}static isFrontFacing(e,t,i,s){return $s.subVectors(i,t),jr.subVectors(e,t),$s.cross(jr).dot(s)<0}set(e,t,i){return this.a.copy(e),this.b.copy(t),this.c.copy(i),this}setFromPointsAndIndices(e,t,i,s){return this.a.copy(e[t]),this.b.copy(e[i]),this.c.copy(e[s]),this}setFromAttributeAndIndices(e,t,i,s){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,i),this.c.fromBufferAttribute(e,s),this}clone(){return new this.constructor().copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return $s.subVectors(this.c,this.b),jr.subVectors(this.a,this.b),$s.cross(jr).length()*.5}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(e){return Ji.getNormal(this.a,this.b,this.c,e)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(e,t){return Ji.getBarycoord(e,this.a,this.b,this.c,t)}getUV(e,t,i,s,r){return xd===!1&&(console.warn("THREE.Triangle.getUV() has been renamed to THREE.Triangle.getInterpolation()."),xd=!0),Ji.getInterpolation(e,this.a,this.b,this.c,t,i,s,r)}getInterpolation(e,t,i,s,r){return Ji.getInterpolation(e,this.a,this.b,this.c,t,i,s,r)}containsPoint(e){return Ji.containsPoint(e,this.a,this.b,this.c)}isFrontFacing(e){return Ji.isFrontFacing(this.a,this.b,this.c,e)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){const i=this.a,s=this.b,r=this.c;let o,a;og.subVectors(s,i),ag.subVectors(r,i),ef.subVectors(e,i);const l=og.dot(ef),c=ag.dot(ef);if(l<=0&&c<=0)return t.copy(i);tf.subVectors(e,s);const u=og.dot(tf),C=ag.dot(tf);if(u>=0&&C<=u)return t.copy(s);const d=l*C-u*c;if(d<=0&&l>=0&&u<=0)return o=l/(l-u),t.copy(i).addScaledVector(og,o);nf.subVectors(e,r);const h=og.dot(nf),m=ag.dot(nf);if(m>=0&&h<=m)return t.copy(r);const y=h*c-l*m;if(y<=0&&c>=0&&m<=0)return a=c/(c-m),t.copy(i).addScaledVector(ag,a);const v=u*m-h*C;if(v<=0&&C-u>=0&&h-m>=0)return D2.subVectors(r,s),a=(C-u)/(C-u+(h-m)),t.copy(s).addScaledVector(D2,a);const A=1/(v+y+d);return o=y*A,a=d*A,t.copy(i).addScaledVector(og,o).addScaledVector(ag,a)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}}let jX=0;class Qn extends bs{constructor(){super(),this.isMaterial=!0,Object.defineProperty(this,"id",{value:jX++}),this.uuid=hs(),this.name="",this.type="Material",this.blending=Cl,this.side=Xr,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.blendSrc=Hy,this.blendDst=Xy,this.blendEquation=qa,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=fu,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=_1,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=Lh,this.stencilZFail=Lh,this.stencilZPass=Lh,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.forceSinglePass=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(e){this._alphaTest>0!=e>0&&this.version++,this._alphaTest=e}onBuild(){}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(e!==void 0)for(const t in e){const i=e[t];if(i===void 0){console.warn(`THREE.Material: parameter '${t}' has value of undefined.`);continue}const s=this[t];if(s===void 0){console.warn(`THREE.Material: '${t}' is not a property of THREE.${this.type}.`);continue}s&&s.isColor?s.set(i):s&&s.isVector3&&i&&i.isVector3?s.copy(i):this[t]=i}}toJSON(e){const t=e===void 0||typeof e=="string";t&&(e={textures:{},images:{}});const i={metadata:{version:4.5,type:"Material",generator:"Material.toJSON"}};i.uuid=this.uuid,i.type=this.type,this.name!==""&&(i.name=this.name),this.color&&this.color.isColor&&(i.color=this.color.getHex()),this.roughness!==void 0&&(i.roughness=this.roughness),this.metalness!==void 0&&(i.metalness=this.metalness),this.sheen!==void 0&&(i.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(i.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(i.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(i.emissive=this.emissive.getHex()),this.emissiveIntensity&&this.emissiveIntensity!==1&&(i.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(i.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(i.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(i.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(i.shininess=this.shininess),this.clearcoat!==void 0&&(i.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(i.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(i.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(i.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(i.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,i.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.iridescence!==void 0&&(i.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(i.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(i.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(i.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(i.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),this.map&&this.map.isTexture&&(i.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(i.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(i.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(i.lightMap=this.lightMap.toJSON(e).uuid,i.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(i.aoMap=this.aoMap.toJSON(e).uuid,i.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(i.bumpMap=this.bumpMap.toJSON(e).uuid,i.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(i.normalMap=this.normalMap.toJSON(e).uuid,i.normalMapType=this.normalMapType,i.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(i.displacementMap=this.displacementMap.toJSON(e).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(i.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(i.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(i.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(i.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(i.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(i.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(i.envMap=this.envMap.toJSON(e).uuid,this.combine!==void 0&&(i.combine=this.combine)),this.envMapIntensity!==void 0&&(i.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(i.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(i.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(i.gradientMap=this.gradientMap.toJSON(e).uuid),this.transmission!==void 0&&(i.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(i.transmissionMap=this.transmissionMap.toJSON(e).uuid),this.thickness!==void 0&&(i.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(i.thicknessMap=this.thicknessMap.toJSON(e).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(i.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(i.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(i.size=this.size),this.shadowSide!==null&&(i.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(i.sizeAttenuation=this.sizeAttenuation),this.blending!==Cl&&(i.blending=this.blending),this.side!==Xr&&(i.side=this.side),this.vertexColors&&(i.vertexColors=!0),this.opacity<1&&(i.opacity=this.opacity),this.transparent===!0&&(i.transparent=this.transparent),i.depthFunc=this.depthFunc,i.depthTest=this.depthTest,i.depthWrite=this.depthWrite,i.colorWrite=this.colorWrite,i.stencilWrite=this.stencilWrite,i.stencilWriteMask=this.stencilWriteMask,i.stencilFunc=this.stencilFunc,i.stencilRef=this.stencilRef,i.stencilFuncMask=this.stencilFuncMask,i.stencilFail=this.stencilFail,i.stencilZFail=this.stencilZFail,i.stencilZPass=this.stencilZPass,this.rotation!==void 0&&this.rotation!==0&&(i.rotation=this.rotation),this.polygonOffset===!0&&(i.polygonOffset=!0),this.polygonOffsetFactor!==0&&(i.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(i.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(i.linewidth=this.linewidth),this.dashSize!==void 0&&(i.dashSize=this.dashSize),this.gapSize!==void 0&&(i.gapSize=this.gapSize),this.scale!==void 0&&(i.scale=this.scale),this.dithering===!0&&(i.dithering=!0),this.alphaTest>0&&(i.alphaTest=this.alphaTest),this.alphaToCoverage===!0&&(i.alphaToCoverage=this.alphaToCoverage),this.premultipliedAlpha===!0&&(i.premultipliedAlpha=this.premultipliedAlpha),this.forceSinglePass===!0&&(i.forceSinglePass=this.forceSinglePass),this.wireframe===!0&&(i.wireframe=this.wireframe),this.wireframeLinewidth>1&&(i.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!=="round"&&(i.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!=="round"&&(i.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(i.flatShading=this.flatShading),this.visible===!1&&(i.visible=!1),this.toneMapped===!1&&(i.toneMapped=!1),this.fog===!1&&(i.fog=!1),Object.keys(this.userData).length>0&&(i.userData=this.userData);function s(r){const o=[];for(const a in r){const l=r[a];delete l.metadata,o.push(l)}return o}if(t){const r=s(e.textures),o=s(e.images);r.length>0&&(i.textures=r),o.length>0&&(i.images=o)}return i}clone(){return new this.constructor().copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;const t=e.clippingPlanes;let i=null;if(t!==null){const s=t.length;i=new Array(s);for(let r=0;r!==s;++r)i[r]=t[r].clone()}return this.clippingPlanes=i,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(e){e===!0&&this.version++}}const eW={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},er={h:0,s:0,l:0},Rd={h:0,s:0,l:0};function sf(n,e,t){return t<0&&(t+=1),t>1&&(t-=1),t<1/6?n+(e-n)*6*t:t<1/2?e:t<2/3?n+(e-n)*6*(2/3-t):n}class Ne{constructor(e,t,i){return this.isColor=!0,this.r=1,this.g=1,this.b=1,t===void 0&&i===void 0?this.set(e):this.setRGB(e,t,i)}set(e){return e&&e.isColor?this.copy(e):typeof e=="number"?this.setHex(e):typeof e=="string"&&this.setStyle(e),this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=yt){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,Ns.toWorkingColorSpace(this,t),this}setRGB(e,t,i,s=Ns.workingColorSpace){return this.r=e,this.g=t,this.b=i,Ns.toWorkingColorSpace(this,s),this}setHSL(e,t,i,s=Ns.workingColorSpace){if(e=_y(e,1),t=wn(t,0,1),i=wn(i,0,1),t===0)this.r=this.g=this.b=i;else{const r=i<=.5?i*(1+t):i+t-i*t,o=2*i-r;this.r=sf(o,r,e+1/3),this.g=sf(o,r,e),this.b=sf(o,r,e-1/3)}return Ns.toWorkingColorSpace(this,s),this}setStyle(e,t=yt){function i(r){r!==void 0&&parseFloat(r)<1&&console.warn("THREE.Color: Alpha component of "+e+" will be ignored.")}let s;if(s=/^(\w+)\(([^\)]*)\)/.exec(e)){let r;const o=s[1],a=s[2];switch(o){case"rgb":case"rgba":if(r=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return i(r[4]),this.setRGB(Math.min(255,parseInt(r[1],10))/255,Math.min(255,parseInt(r[2],10))/255,Math.min(255,parseInt(r[3],10))/255,t);if(r=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return i(r[4]),this.setRGB(Math.min(100,parseInt(r[1],10))/100,Math.min(100,parseInt(r[2],10))/100,Math.min(100,parseInt(r[3],10))/100,t);break;case"hsl":case"hsla":if(r=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return i(r[4]),this.setHSL(parseFloat(r[1])/360,parseFloat(r[2])/100,parseFloat(r[3])/100,t);break;default:console.warn("THREE.Color: Unknown color model "+e)}}else if(s=/^\#([A-Fa-f\d]+)$/.exec(e)){const r=s[1],o=r.length;if(o===3)return this.setRGB(parseInt(r.charAt(0),16)/15,parseInt(r.charAt(1),16)/15,parseInt(r.charAt(2),16)/15,t);if(o===6)return this.setHex(parseInt(r,16),t);console.warn("THREE.Color: Invalid hex color "+e)}else if(e&&e.length>0)return this.setColorName(e,t);return this}setColorName(e,t=yt){const i=eW[e.toLowerCase()];return i!==void 0?this.setHex(i,t):console.warn("THREE.Color: Unknown color "+e),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=qg(e.r),this.g=qg(e.g),this.b=qg(e.b),this}copyLinearToSRGB(e){return this.r=Um(e.r),this.g=Um(e.g),this.b=Um(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=yt){return Ns.fromWorkingColorSpace(bi.copy(this),e),Math.round(wn(bi.r*255,0,255))*65536+Math.round(wn(bi.g*255,0,255))*256+Math.round(wn(bi.b*255,0,255))}getHexString(e=yt){return("000000"+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=Ns.workingColorSpace){Ns.fromWorkingColorSpace(bi.copy(this),t);const i=bi.r,s=bi.g,r=bi.b,o=Math.max(i,s,r),a=Math.min(i,s,r);let l,c;const u=(a+o)/2;if(a===o)l=0,c=0;else{const C=o-a;switch(c=u<=.5?C/(o+a):C/(2-o-a),o){case i:l=(s-r)/C+(s>-c-14,i[l|256]=1024>>-c-14|32768,s[l]=-c-1,s[l|256]=-c-1):c<=15?(i[l]=c+15<<10,i[l|256]=c+15<<10|32768,s[l]=13,s[l|256]=13):c<128?(i[l]=31744,i[l|256]=64512,s[l]=24,s[l|256]=24):(i[l]=31744,i[l|256]=64512,s[l]=13,s[l|256]=13)}const r=new Uint32Array(2048),o=new Uint32Array(64),a=new Uint32Array(64);for(let l=1;l<1024;++l){let c=l<<13,u=0;for(;!(c&8388608);)c<<=1,u-=8388608;c&=-8388609,u+=947912704,r[l]=c|u}for(let l=1024;l<2048;++l)r[l]=939524096+(l-1024<<13);for(let l=1;l<31;++l)o[l]=l<<23;o[31]=1199570944,o[32]=2147483648;for(let l=33;l<63;++l)o[l]=2147483648+(l-32<<23);o[63]=3347054592;for(let l=1;l<64;++l)l!==32&&(a[l]=1024);return{floatView:e,uint32View:t,baseTable:i,shiftTable:s,mantissaTable:r,exponentTable:o,offsetTable:a}}function Di(n){Math.abs(n)>65504&&console.warn("THREE.DataUtils.toHalfFloat(): Value out of range."),n=wn(n,-65504,65504),io.floatView[0]=n;const e=io.uint32View[0],t=e>>23&511;return io.baseTable[t]+((e&8388607)>>io.shiftTable[t])}function VI(n){const e=n>>10;return io.uint32View[0]=io.mantissaTable[io.offsetTable[e]+(n&1023)]+io.exponentTable[e],io.floatView[0]}const $X={toHalfFloat:Di,fromHalfFloat:VI},Yn=new X,Wd=new ne;class Dt{constructor(e,t,i=!1){if(Array.isArray(e))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,this.name="",this.array=e,this.itemSize=t,this.count=e!==void 0?e.length/t:0,this.normalized=i,this.usage=Su,this.updateRange={offset:0,count:-1},this.version=0}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this}copyAt(e,t,i){e*=this.itemSize,i*=t.itemSize;for(let s=0,r=this.itemSize;s0&&(e.userData=this.userData),this.parameters!==void 0){const l=this.parameters;for(const c in l)l[c]!==void 0&&(e[c]=l[c]);return e}e.data={attributes:{}};const t=this.index;t!==null&&(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});const i=this.attributes;for(const l in i){const c=i[l];e.data.attributes[l]=c.toJSON(e.data)}const s={};let r=!1;for(const l in this.morphAttributes){const c=this.morphAttributes[l],u=[];for(let C=0,d=c.length;C0&&(s[l]=u,r=!0)}r&&(e.data.morphAttributes=s,e.data.morphTargetsRelative=this.morphTargetsRelative);const o=this.groups;o.length>0&&(e.data.groups=JSON.parse(JSON.stringify(o)));const a=this.boundingSphere;return a!==null&&(e.data.boundingSphere={center:a.center.toArray(),radius:a.radius}),e}clone(){return new this.constructor().copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const t={};this.name=e.name;const i=e.index;i!==null&&this.setIndex(i.clone(t));const s=e.attributes;for(const c in s){const u=s[c];this.setAttribute(c,u.clone(t))}const r=e.morphAttributes;for(const c in r){const u=[],C=r[c];for(let d=0,h=C.length;d0){const s=t[i[0]];if(s!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let r=0,o=s.length;r(e.far-e.near)**2))&&(U2.copy(r).invert(),Br.copy(e.ray).applyMatrix4(U2),!(i.boundingBox!==null&&Br.intersectsBox(i.boundingBox)===!1)&&this._computeIntersections(e,t)))}_computeIntersections(e,t){let i;const s=this.geometry,r=this.material,o=s.index,a=s.attributes.position,l=s.attributes.uv,c=s.attributes.uv1,u=s.attributes.normal,C=s.groups,d=s.drawRange;if(o!==null)if(Array.isArray(r))for(let h=0,m=C.length;ht.far?null:{distance:c,point:Fd.clone(),object:n}}function Kd(n,e,t,i,s,r,o,a,l,c){n.getVertexPosition(a,gg),n.getVertexPosition(l,cg),n.getVertexPosition(c,Ig);const u=lY(n,e,t,i,gg,cg,Ig,Yd);if(u){s&&(Nd.fromBufferAttribute(s,a),Hd.fromBufferAttribute(s,l),Xd.fromBufferAttribute(s,c),u.uv=Ji.getInterpolation(Yd,gg,cg,Ig,Nd,Hd,Xd,new ne)),r&&(Nd.fromBufferAttribute(r,a),Hd.fromBufferAttribute(r,l),Xd.fromBufferAttribute(r,c),u.uv1=Ji.getInterpolation(Yd,gg,cg,Ig,Nd,Hd,Xd,new ne),u.uv2=u.uv1),o&&(_2.fromBufferAttribute(o,a),J2.fromBufferAttribute(o,l),O2.fromBufferAttribute(o,c),u.normal=Ji.getInterpolation(Yd,gg,cg,Ig,_2,J2,O2,new X),u.normal.dot(i.direction)>0&&u.normal.multiplyScalar(-1));const C={a,b:l,c,normal:new X,materialIndex:0};Ji.getNormal(gg,cg,Ig,C.normal),u.face=C}return u}class Ga extends vt{constructor(e=1,t=1,i=1,s=1,r=1,o=1){super(),this.type="BoxGeometry",this.parameters={width:e,height:t,depth:i,widthSegments:s,heightSegments:r,depthSegments:o};const a=this;s=Math.floor(s),r=Math.floor(r),o=Math.floor(o);const l=[],c=[],u=[],C=[];let d=0,h=0;m("z","y","x",-1,-1,i,t,e,o,r,0),m("z","y","x",1,-1,i,t,-e,o,r,1),m("x","z","y",1,1,e,i,t,s,o,2),m("x","z","y",1,-1,e,i,-t,s,o,3),m("x","y","z",1,-1,e,t,i,s,r,4),m("x","y","z",-1,-1,e,t,-i,s,r,5),this.setIndex(l),this.setAttribute("position",new _e(c,3)),this.setAttribute("normal",new _e(u,3)),this.setAttribute("uv",new _e(C,2));function m(y,v,A,b,f,B,S,x,R,V,Z){const M=B/R,H=S/V,U=B/2,D=S/2,q=x/2,ie=R+1,ue=V+1;let le=0,L=0;const P=new X;for(let O=0;O0?1:-1,u.push(P.x,P.y,P.z),C.push(ge/R),C.push(1-O/V),le+=1}}for(let O=0;O0&&(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader,t.lights=this.lights,t.clipping=this.clipping;const i={};for(const s in this.extensions)this.extensions[s]===!0&&(i[s]=!0);return Object.keys(i).length>0&&(t.extensions=i),t}}class vc extends Ft{constructor(){super(),this.isCamera=!0,this.type="Camera",this.matrixWorldInverse=new Le,this.projectionMatrix=new Le,this.projectionMatrixInverse=new Le}copy(e,t){return super.copy(e,t),this.matrixWorldInverse.copy(e.matrixWorldInverse),this.projectionMatrix.copy(e.projectionMatrix),this.projectionMatrixInverse.copy(e.projectionMatrixInverse),this}getWorldDirection(e){this.updateWorldMatrix(!0,!1);const t=this.matrixWorld.elements;return e.set(-t[8],-t[9],-t[10]).normalize()}updateMatrixWorld(e){super.updateMatrixWorld(e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(e,t){super.updateWorldMatrix(e,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return new this.constructor().copy(this)}}class on extends vc{constructor(e=50,t=1,i=.1,s=2e3){super(),this.isPerspectiveCamera=!0,this.type="PerspectiveCamera",this.fov=e,this.zoom=1,this.near=i,this.far=s,this.focus=10,this.aspect=t,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.fov=e.fov,this.zoom=e.zoom,this.near=e.near,this.far=e.far,this.focus=e.focus,this.aspect=e.aspect,this.view=e.view===null?null:Object.assign({},e.view),this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this}setFocalLength(e){const t=.5*this.getFilmHeight()/e;this.fov=cc*2*Math.atan(t),this.updateProjectionMatrix()}getFocalLength(){const e=Math.tan(dl*.5*this.fov);return .5*this.getFilmHeight()/e}getEffectiveFOV(){return cc*2*Math.atan(Math.tan(dl*.5*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}setViewOffset(e,t,i,s,r,o){this.aspect=e/t,this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=i,this.view.offsetY=s,this.view.width=r,this.view.height=o,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const e=this.near;let t=e*Math.tan(dl*.5*this.fov)/this.zoom,i=2*t,s=this.aspect*i,r=-.5*s;const o=this.view;if(this.view!==null&&this.view.enabled){const l=o.fullWidth,c=o.fullHeight;r+=o.offsetX*s/l,t-=o.offsetY*i/c,s*=o.width/l,i*=o.height/c}const a=this.filmOffset;a!==0&&(r+=e*a/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+s,t,t-i,e,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){const t=super.toJSON(e);return t.object.fov=this.fov,t.object.zoom=this.zoom,t.object.near=this.near,t.object.far=this.far,t.object.focus=this.focus,t.object.aspect=this.aspect,this.view!==null&&(t.object.view=Object.assign({},this.view)),t.object.filmGauge=this.filmGauge,t.object.filmOffset=this.filmOffset,t}}const ug=-90,Cg=1;class jy extends Ft{constructor(e,t,i){super(),this.type="CubeCamera",this.renderTarget=i;const s=new on(ug,Cg,e,t);s.layers=this.layers,s.up.set(0,1,0),s.lookAt(1,0,0),this.add(s);const r=new on(ug,Cg,e,t);r.layers=this.layers,r.up.set(0,1,0),r.lookAt(-1,0,0),this.add(r);const o=new on(ug,Cg,e,t);o.layers=this.layers,o.up.set(0,0,-1),o.lookAt(0,1,0),this.add(o);const a=new on(ug,Cg,e,t);a.layers=this.layers,a.up.set(0,0,1),a.lookAt(0,-1,0),this.add(a);const l=new on(ug,Cg,e,t);l.layers=this.layers,l.up.set(0,1,0),l.lookAt(0,0,1),this.add(l);const c=new on(ug,Cg,e,t);c.layers=this.layers,c.up.set(0,1,0),c.lookAt(0,0,-1),this.add(c)}update(e,t){this.parent===null&&this.updateMatrixWorld();const i=this.renderTarget,[s,r,o,a,l,c]=this.children,u=e.getRenderTarget(),C=e.toneMapping,d=e.xr.enabled;e.toneMapping=Ir,e.xr.enabled=!1;const h=i.texture.generateMipmaps;i.texture.generateMipmaps=!1,e.setRenderTarget(i,0),e.render(t,s),e.setRenderTarget(i,1),e.render(t,r),e.setRenderTarget(i,2),e.render(t,o),e.setRenderTarget(i,3),e.render(t,a),e.setRenderTarget(i,4),e.render(t,l),i.texture.generateMipmaps=h,e.setRenderTarget(i,5),e.render(t,c),e.setRenderTarget(u),e.toneMapping=C,e.xr.enabled=d,i.texture.needsPMREMUpdate=!0}}class Ju extends en{constructor(e,t,i,s,r,o,a,l,c,u){e=e!==void 0?e:[],t=t!==void 0?t:Ca,super(e,t,i,s,r,o,a,l,c,u),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(e){this.image=e}}class OA extends Nt{constructor(e=1,t={}){super(e,e,t),this.isWebGLCubeRenderTarget=!0;const i={width:e,height:e,depth:1},s=[i,i,i,i,i,i];t.encoding!==void 0&&(_I("THREE.WebGLCubeRenderTarget: option.encoding has been replaced by option.colorSpace."),t.colorSpace=t.encoding===zs?yt:Io),this.texture=new Ju(s,t.mapping,t.wrapS,t.wrapT,t.magFilter,t.minFilter,t.format,t.type,t.anisotropy,t.colorSpace),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=t.generateMipmaps!==void 0?t.generateMipmaps:!1,this.texture.minFilter=t.minFilter!==void 0?t.minFilter:et}fromEquirectangularTexture(e,t){this.texture.type=t.type,this.texture.colorSpace=t.colorSpace,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;const i={uniforms:{tEquirect:{value:null}},vertexShader:` - - varying vec3 vWorldDirection; - - vec3 transformDirection( in vec3 dir, in mat4 matrix ) { - - return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz ); - - } - - void main() { - - vWorldDirection = transformDirection( position, modelMatrix ); - - #include - #include - - } - `,fragmentShader:` - - uniform sampler2D tEquirect; - - varying vec3 vWorldDirection; - - #include - - void main() { - - vec3 direction = normalize( vWorldDirection ); - - vec2 sampleUV = equirectUv( direction ); - - gl_FragColor = texture2D( tEquirect, sampleUV ); - - } - `},s=new Ga(5,5,5),r=new Rt({name:"CubemapFromEquirect",uniforms:Ic(i.uniforms),vertexShader:i.vertexShader,fragmentShader:i.fragmentShader,side:Dn,blending:sn});r.uniforms.tEquirect.value=t;const o=new Un(s,r),a=t.minFilter;return t.minFilter===ha&&(t.minFilter=et),new jy(1,10,this).update(e,o),t.minFilter=a,o.geometry.dispose(),o.material.dispose(),this}clear(e,t,i,s){const r=e.getRenderTarget();for(let o=0;o<6;o++)e.setRenderTarget(this,o),e.clear(t,i,s);e.setRenderTarget(r)}}const af=new X,uY=new X,CY=new Mt;class Uo{constructor(e=new X(1,0,0),t=0){this.isPlane=!0,this.normal=e,this.constant=t}set(e,t){return this.normal.copy(e),this.constant=t,this}setComponents(e,t,i,s){return this.normal.set(e,t,i),this.constant=s,this}setFromNormalAndCoplanarPoint(e,t){return this.normal.copy(e),this.constant=-t.dot(this.normal),this}setFromCoplanarPoints(e,t,i){const s=af.subVectors(i,t).cross(uY.subVectors(e,t)).normalize();return this.setFromNormalAndCoplanarPoint(s,e),this}copy(e){return this.normal.copy(e.normal),this.constant=e.constant,this}normalize(){const e=1/this.normal.length();return this.normal.multiplyScalar(e),this.constant*=e,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(e){return this.normal.dot(e)+this.constant}distanceToSphere(e){return this.distanceToPoint(e.center)-e.radius}projectPoint(e,t){return t.copy(e).addScaledVector(this.normal,-this.distanceToPoint(e))}intersectLine(e,t){const i=e.delta(af),s=this.normal.dot(i);if(s===0)return this.distanceToPoint(e.start)===0?t.copy(e.start):null;const r=-(e.start.dot(this.normal)+this.constant)/s;return r<0||r>1?null:t.copy(e.start).addScaledVector(i,r)}intersectsLine(e){const t=this.distanceToPoint(e.start),i=this.distanceToPoint(e.end);return t<0&&i>0||i<0&&t>0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){const i=t||CY.getNormalMatrix(e),s=this.coplanarPoint(af).applyMatrix4(e),r=this.normal.applyMatrix3(i).normalize();return this.constant=-s.dot(r),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return new this.constructor().copy(this)}}const za=new Kr,zd=new X;class QA{constructor(e=new Uo,t=new Uo,i=new Uo,s=new Uo,r=new Uo,o=new Uo){this.planes=[e,t,i,s,r,o]}set(e,t,i,s,r,o){const a=this.planes;return a[0].copy(e),a[1].copy(t),a[2].copy(i),a[3].copy(s),a[4].copy(r),a[5].copy(o),this}copy(e){const t=this.planes;for(let i=0;i<6;i++)t[i].copy(e.planes[i]);return this}setFromProjectionMatrix(e){const t=this.planes,i=e.elements,s=i[0],r=i[1],o=i[2],a=i[3],l=i[4],c=i[5],u=i[6],C=i[7],d=i[8],h=i[9],m=i[10],y=i[11],v=i[12],A=i[13],b=i[14],f=i[15];return t[0].setComponents(a-s,C-l,y-d,f-v).normalize(),t[1].setComponents(a+s,C+l,y+d,f+v).normalize(),t[2].setComponents(a+r,C+c,y+h,f+A).normalize(),t[3].setComponents(a-r,C-c,y-h,f-A).normalize(),t[4].setComponents(a-o,C-u,y-m,f-b).normalize(),t[5].setComponents(a+o,C+u,y+m,f+b).normalize(),this}intersectsObject(e){if(e.boundingSphere!==void 0)e.boundingSphere===null&&e.computeBoundingSphere(),za.copy(e.boundingSphere).applyMatrix4(e.matrixWorld);else{const t=e.geometry;t.boundingSphere===null&&t.computeBoundingSphere(),za.copy(t.boundingSphere).applyMatrix4(e.matrixWorld)}return this.intersectsSphere(za)}intersectsSprite(e){return za.center.set(0,0,0),za.radius=.7071067811865476,za.applyMatrix4(e.matrixWorld),this.intersectsSphere(za)}intersectsSphere(e){const t=this.planes,i=e.center,s=-e.radius;for(let r=0;r<6;r++)if(t[r].distanceToPoint(i)0?e.max.x:e.min.x,zd.y=s.normal.y>0?e.max.y:e.min.y,zd.z=s.normal.z>0?e.max.z:e.min.z,s.distanceToPoint(zd)<0)return!1}return!0}containsPoint(e){const t=this.planes;for(let i=0;i<6;i++)if(t[i].distanceToPoint(e)<0)return!1;return!0}clone(){return new this.constructor().copy(this)}}function iW(){let n=null,e=!1,t=null,i=null;function s(r,o){t(r,o),i=n.requestAnimationFrame(s)}return{start:function(){e!==!0&&t!==null&&(i=n.requestAnimationFrame(s),e=!0)},stop:function(){n.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(r){t=r},setContext:function(r){n=r}}}function dY(n,e){const t=e.isWebGL2,i=new WeakMap;function s(c,u){const C=c.array,d=c.usage,h=n.createBuffer();n.bindBuffer(u,h),n.bufferData(u,C,d),c.onUploadCallback();let m;if(C instanceof Float32Array)m=n.FLOAT;else if(C instanceof Uint16Array)if(c.isFloat16BufferAttribute)if(t)m=n.HALF_FLOAT;else throw new Error("THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.");else m=n.UNSIGNED_SHORT;else if(C instanceof Int16Array)m=n.SHORT;else if(C instanceof Uint32Array)m=n.UNSIGNED_INT;else if(C instanceof Int32Array)m=n.INT;else if(C instanceof Int8Array)m=n.BYTE;else if(C instanceof Uint8Array)m=n.UNSIGNED_BYTE;else if(C instanceof Uint8ClampedArray)m=n.UNSIGNED_BYTE;else throw new Error("THREE.WebGLAttributes: Unsupported buffer data format: "+C);return{buffer:h,type:m,bytesPerElement:C.BYTES_PER_ELEMENT,version:c.version}}function r(c,u,C){const d=u.array,h=u.updateRange;n.bindBuffer(C,c),h.count===-1?n.bufferSubData(C,0,d):(t?n.bufferSubData(C,h.offset*d.BYTES_PER_ELEMENT,d,h.offset,h.count):n.bufferSubData(C,h.offset*d.BYTES_PER_ELEMENT,d.subarray(h.offset,h.offset+h.count)),h.count=-1),u.onUploadCallback()}function o(c){return c.isInterleavedBufferAttribute&&(c=c.data),i.get(c)}function a(c){c.isInterleavedBufferAttribute&&(c=c.data);const u=i.get(c);u&&(n.deleteBuffer(u.buffer),i.delete(c))}function l(c,u){if(c.isGLBufferAttribute){const d=i.get(c);(!d||d.version 0 - vec4 plane; - #pragma unroll_loop_start - for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) { - plane = clippingPlanes[ i ]; - if ( dot( vClipPosition, plane.xyz ) > plane.w ) discard; - } - #pragma unroll_loop_end - #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES - bool clipped = true; - #pragma unroll_loop_start - for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) { - plane = clippingPlanes[ i ]; - clipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped; - } - #pragma unroll_loop_end - if ( clipped ) discard; - #endif -#endif`,SY=`#if NUM_CLIPPING_PLANES > 0 - varying vec3 vClipPosition; - uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ]; -#endif`,xY=`#if NUM_CLIPPING_PLANES > 0 - varying vec3 vClipPosition; -#endif`,RY=`#if NUM_CLIPPING_PLANES > 0 - vClipPosition = - mvPosition.xyz; -#endif`,WY=`#if defined( USE_COLOR_ALPHA ) - diffuseColor *= vColor; -#elif defined( USE_COLOR ) - diffuseColor.rgb *= vColor; -#endif`,VY=`#if defined( USE_COLOR_ALPHA ) - varying vec4 vColor; -#elif defined( USE_COLOR ) - varying vec3 vColor; -#endif`,MY=`#if defined( USE_COLOR_ALPHA ) - varying vec4 vColor; -#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) - varying vec3 vColor; -#endif`,NY=`#if defined( USE_COLOR_ALPHA ) - vColor = vec4( 1.0 ); -#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) - vColor = vec3( 1.0 ); -#endif -#ifdef USE_COLOR - vColor *= color; -#endif -#ifdef USE_INSTANCING_COLOR - vColor.xyz *= instanceColor.xyz; -#endif`,HY=`#define PI 3.141592653589793 -#define PI2 6.283185307179586 -#define PI_HALF 1.5707963267948966 -#define RECIPROCAL_PI 0.3183098861837907 -#define RECIPROCAL_PI2 0.15915494309189535 -#define EPSILON 1e-6 -#ifndef saturate -#define saturate( a ) clamp( a, 0.0, 1.0 ) -#endif -#define whiteComplement( a ) ( 1.0 - saturate( a ) ) -float pow2( const in float x ) { return x*x; } -vec3 pow2( const in vec3 x ) { return x*x; } -float pow3( const in float x ) { return x*x*x; } -float pow4( const in float x ) { float x2 = x*x; return x2*x2; } -float max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); } -float average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); } -highp float rand( const in vec2 uv ) { - const highp float a = 12.9898, b = 78.233, c = 43758.5453; - highp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI ); - return fract( sin( sn ) * c ); -} -#ifdef HIGH_PRECISION - float precisionSafeLength( vec3 v ) { return length( v ); } -#else - float precisionSafeLength( vec3 v ) { - float maxComponent = max3( abs( v ) ); - return length( v / maxComponent ) * maxComponent; - } -#endif -struct IncidentLight { - vec3 color; - vec3 direction; - bool visible; -}; -struct ReflectedLight { - vec3 directDiffuse; - vec3 directSpecular; - vec3 indirectDiffuse; - vec3 indirectSpecular; -}; -struct GeometricContext { - vec3 position; - vec3 normal; - vec3 viewDir; -#ifdef USE_CLEARCOAT - vec3 clearcoatNormal; -#endif -}; -vec3 transformDirection( in vec3 dir, in mat4 matrix ) { - return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz ); -} -vec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) { - return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz ); -} -mat3 transposeMat3( const in mat3 m ) { - mat3 tmp; - tmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x ); - tmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y ); - tmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z ); - return tmp; -} -float luminance( const in vec3 rgb ) { - const vec3 weights = vec3( 0.2126729, 0.7151522, 0.0721750 ); - return dot( weights, rgb ); -} -bool isPerspectiveMatrix( mat4 m ) { - return m[ 2 ][ 3 ] == - 1.0; -} -vec2 equirectUv( in vec3 dir ) { - float u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5; - float v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5; - return vec2( u, v ); -} -vec3 BRDF_Lambert( const in vec3 diffuseColor ) { - return RECIPROCAL_PI * diffuseColor; -} -vec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) { - float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH ); - return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel ); -} -float F_Schlick( const in float f0, const in float f90, const in float dotVH ) { - float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH ); - return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel ); -} // validated`,XY=`#ifdef ENVMAP_TYPE_CUBE_UV - #define cubeUV_minMipLevel 4.0 - #define cubeUV_minTileSize 16.0 - float getFace( vec3 direction ) { - vec3 absDirection = abs( direction ); - float face = - 1.0; - if ( absDirection.x > absDirection.z ) { - if ( absDirection.x > absDirection.y ) - face = direction.x > 0.0 ? 0.0 : 3.0; - else - face = direction.y > 0.0 ? 1.0 : 4.0; - } else { - if ( absDirection.z > absDirection.y ) - face = direction.z > 0.0 ? 2.0 : 5.0; - else - face = direction.y > 0.0 ? 1.0 : 4.0; - } - return face; - } - vec2 getUV( vec3 direction, float face ) { - vec2 uv; - if ( face == 0.0 ) { - uv = vec2( direction.z, direction.y ) / abs( direction.x ); - } else if ( face == 1.0 ) { - uv = vec2( - direction.x, - direction.z ) / abs( direction.y ); - } else if ( face == 2.0 ) { - uv = vec2( - direction.x, direction.y ) / abs( direction.z ); - } else if ( face == 3.0 ) { - uv = vec2( - direction.z, direction.y ) / abs( direction.x ); - } else if ( face == 4.0 ) { - uv = vec2( - direction.x, direction.z ) / abs( direction.y ); - } else { - uv = vec2( direction.x, direction.y ) / abs( direction.z ); - } - return 0.5 * ( uv + 1.0 ); - } - vec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) { - float face = getFace( direction ); - float filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 ); - mipInt = max( mipInt, cubeUV_minMipLevel ); - float faceSize = exp2( mipInt ); - highp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0; - if ( face > 2.0 ) { - uv.y += faceSize; - face -= 3.0; - } - uv.x += face * faceSize; - uv.x += filterInt * 3.0 * cubeUV_minTileSize; - uv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize ); - uv.x *= CUBEUV_TEXEL_WIDTH; - uv.y *= CUBEUV_TEXEL_HEIGHT; - #ifdef texture2DGradEXT - return texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb; - #else - return texture2D( envMap, uv ).rgb; - #endif - } - #define cubeUV_r0 1.0 - #define cubeUV_v0 0.339 - #define cubeUV_m0 - 2.0 - #define cubeUV_r1 0.8 - #define cubeUV_v1 0.276 - #define cubeUV_m1 - 1.0 - #define cubeUV_r4 0.4 - #define cubeUV_v4 0.046 - #define cubeUV_m4 2.0 - #define cubeUV_r5 0.305 - #define cubeUV_v5 0.016 - #define cubeUV_m5 3.0 - #define cubeUV_r6 0.21 - #define cubeUV_v6 0.0038 - #define cubeUV_m6 4.0 - float roughnessToMip( float roughness ) { - float mip = 0.0; - if ( roughness >= cubeUV_r1 ) { - mip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0; - } else if ( roughness >= cubeUV_r4 ) { - mip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1; - } else if ( roughness >= cubeUV_r5 ) { - mip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4; - } else if ( roughness >= cubeUV_r6 ) { - mip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5; - } else { - mip = - 2.0 * log2( 1.16 * roughness ); } - return mip; - } - vec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) { - float mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP ); - float mipF = fract( mip ); - float mipInt = floor( mip ); - vec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt ); - if ( mipF == 0.0 ) { - return vec4( color0, 1.0 ); - } else { - vec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 ); - return vec4( mix( color0, color1, mipF ), 1.0 ); - } - } -#endif`,YY=`vec3 transformedNormal = objectNormal; -#ifdef USE_INSTANCING - mat3 m = mat3( instanceMatrix ); - transformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) ); - transformedNormal = m * transformedNormal; -#endif -transformedNormal = normalMatrix * transformedNormal; -#ifdef FLIP_SIDED - transformedNormal = - transformedNormal; -#endif -#ifdef USE_TANGENT - vec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz; - #ifdef FLIP_SIDED - transformedTangent = - transformedTangent; - #endif -#endif`,FY=`#ifdef USE_DISPLACEMENTMAP - uniform sampler2D displacementMap; - uniform float displacementScale; - uniform float displacementBias; -#endif`,KY=`#ifdef USE_DISPLACEMENTMAP - transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias ); -#endif`,zY=`#ifdef USE_EMISSIVEMAP - vec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv ); - totalEmissiveRadiance *= emissiveColor.rgb; -#endif`,LY=`#ifdef USE_EMISSIVEMAP - uniform sampler2D emissiveMap; -#endif`,TY="gl_FragColor = linearToOutputTexel( gl_FragColor );",EY=`vec4 LinearToLinear( in vec4 value ) { - return value; -} -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 ); -}`,kY=`#ifdef USE_ENVMAP - #ifdef ENV_WORLDPOS - vec3 cameraToFrag; - if ( isOrthographic ) { - cameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) ); - } else { - cameraToFrag = normalize( vWorldPosition - cameraPosition ); - } - vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); - #ifdef ENVMAP_MODE_REFLECTION - vec3 reflectVec = reflect( cameraToFrag, worldNormal ); - #else - vec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio ); - #endif - #else - vec3 reflectVec = vReflect; - #endif - #ifdef ENVMAP_TYPE_CUBE - vec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) ); - #else - vec4 envColor = vec4( 0.0 ); - #endif - #ifdef ENVMAP_BLENDING_MULTIPLY - outgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity ); - #elif defined( ENVMAP_BLENDING_MIX ) - outgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity ); - #elif defined( ENVMAP_BLENDING_ADD ) - outgoingLight += envColor.xyz * specularStrength * reflectivity; - #endif -#endif`,DY=`#ifdef USE_ENVMAP - uniform float envMapIntensity; - uniform float flipEnvMap; - #ifdef ENVMAP_TYPE_CUBE - uniform samplerCube envMap; - #else - uniform sampler2D envMap; - #endif - -#endif`,UY=`#ifdef USE_ENVMAP - uniform float reflectivity; - #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT ) - #define ENV_WORLDPOS - #endif - #ifdef ENV_WORLDPOS - varying vec3 vWorldPosition; - uniform float refractionRatio; - #else - varying vec3 vReflect; - #endif -#endif`,PY=`#ifdef USE_ENVMAP - #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT ) - #define ENV_WORLDPOS - #endif - #ifdef ENV_WORLDPOS - - varying vec3 vWorldPosition; - #else - varying vec3 vReflect; - uniform float refractionRatio; - #endif -#endif`,_Y=`#ifdef USE_ENVMAP - #ifdef ENV_WORLDPOS - vWorldPosition = worldPosition.xyz; - #else - vec3 cameraToVertex; - if ( isOrthographic ) { - cameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) ); - } else { - cameraToVertex = normalize( worldPosition.xyz - cameraPosition ); - } - vec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix ); - #ifdef ENVMAP_MODE_REFLECTION - vReflect = reflect( cameraToVertex, worldNormal ); - #else - vReflect = refract( cameraToVertex, worldNormal, refractionRatio ); - #endif - #endif -#endif`,JY=`#ifdef USE_FOG - vFogDepth = - mvPosition.z; -#endif`,OY=`#ifdef USE_FOG - varying float vFogDepth; -#endif`,QY=`#ifdef USE_FOG - #ifdef FOG_EXP2 - float fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth ); - #else - float fogFactor = smoothstep( fogNear, fogFar, vFogDepth ); - #endif - gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor ); -#endif`,jY=`#ifdef USE_FOG - uniform vec3 fogColor; - varying float vFogDepth; - #ifdef FOG_EXP2 - uniform float fogDensity; - #else - uniform float fogNear; - uniform float fogFar; - #endif -#endif`,qY=`#ifdef USE_GRADIENTMAP - uniform sampler2D gradientMap; -#endif -vec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) { - float dotNL = dot( normal, lightDirection ); - vec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 ); - #ifdef USE_GRADIENTMAP - return vec3( texture2D( gradientMap, coord ).r ); - #else - vec2 fw = fwidth( coord ) * 0.5; - return mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) ); - #endif -}`,$Y=`#ifdef USE_LIGHTMAP - vec4 lightMapTexel = texture2D( lightMap, vLightMapUv ); - vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity; - reflectedLight.indirectDiffuse += lightMapIrradiance; -#endif`,eF=`#ifdef USE_LIGHTMAP - uniform sampler2D lightMap; - uniform float lightMapIntensity; -#endif`,tF=`LambertMaterial material; -material.diffuseColor = diffuseColor.rgb; -material.specularStrength = specularStrength;`,nF=`varying vec3 vViewPosition; -struct LambertMaterial { - vec3 diffuseColor; - float specularStrength; -}; -void RE_Direct_Lambert( const in IncidentLight directLight, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) { - float dotNL = saturate( dot( geometry.normal, directLight.direction ) ); - vec3 irradiance = dotNL * directLight.color; - reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -void RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) { - reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -#define RE_Direct RE_Direct_Lambert -#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert`,iF=`uniform bool receiveShadow; -uniform vec3 ambientLightColor; -uniform vec3 lightProbe[ 9 ]; -vec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) { - float x = normal.x, y = normal.y, z = normal.z; - vec3 result = shCoefficients[ 0 ] * 0.886227; - result += shCoefficients[ 1 ] * 2.0 * 0.511664 * y; - result += shCoefficients[ 2 ] * 2.0 * 0.511664 * z; - result += shCoefficients[ 3 ] * 2.0 * 0.511664 * x; - result += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y; - result += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z; - result += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 ); - result += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z; - result += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y ); - return result; -} -vec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) { - vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); - vec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe ); - return irradiance; -} -vec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) { - vec3 irradiance = ambientLightColor; - return irradiance; -} -float getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) { - #if defined ( LEGACY_LIGHTS ) - if ( cutoffDistance > 0.0 && decayExponent > 0.0 ) { - return pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent ); - } - return 1.0; - #else - float distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 ); - if ( cutoffDistance > 0.0 ) { - distanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) ); - } - return distanceFalloff; - #endif -} -float getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) { - return smoothstep( coneCosine, penumbraCosine, angleCosine ); -} -#if NUM_DIR_LIGHTS > 0 - struct DirectionalLight { - vec3 direction; - vec3 color; - }; - uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ]; - void getDirectionalLightInfo( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight light ) { - light.color = directionalLight.color; - light.direction = directionalLight.direction; - light.visible = true; - } -#endif -#if NUM_POINT_LIGHTS > 0 - struct PointLight { - vec3 position; - vec3 color; - float distance; - float decay; - }; - uniform PointLight pointLights[ NUM_POINT_LIGHTS ]; - void getPointLightInfo( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight light ) { - vec3 lVector = pointLight.position - geometry.position; - light.direction = normalize( lVector ); - float lightDistance = length( lVector ); - light.color = pointLight.color; - light.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay ); - light.visible = ( light.color != vec3( 0.0 ) ); - } -#endif -#if NUM_SPOT_LIGHTS > 0 - struct SpotLight { - vec3 position; - vec3 direction; - vec3 color; - float distance; - float decay; - float coneCos; - float penumbraCos; - }; - uniform SpotLight spotLights[ NUM_SPOT_LIGHTS ]; - void getSpotLightInfo( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight light ) { - vec3 lVector = spotLight.position - geometry.position; - light.direction = normalize( lVector ); - float angleCos = dot( light.direction, spotLight.direction ); - float spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos ); - if ( spotAttenuation > 0.0 ) { - float lightDistance = length( lVector ); - light.color = spotLight.color * spotAttenuation; - light.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay ); - light.visible = ( light.color != vec3( 0.0 ) ); - } else { - light.color = vec3( 0.0 ); - light.visible = false; - } - } -#endif -#if NUM_RECT_AREA_LIGHTS > 0 - struct RectAreaLight { - vec3 color; - vec3 position; - vec3 halfWidth; - vec3 halfHeight; - }; - uniform sampler2D ltc_1; uniform sampler2D ltc_2; - uniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ]; -#endif -#if NUM_HEMI_LIGHTS > 0 - struct HemisphereLight { - vec3 direction; - vec3 skyColor; - vec3 groundColor; - }; - uniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ]; - vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) { - float dotNL = dot( normal, hemiLight.direction ); - float hemiDiffuseWeight = 0.5 * dotNL + 0.5; - vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight ); - return irradiance; - } -#endif`,sF=`#if defined( USE_ENVMAP ) - vec3 getIBLIrradiance( const in vec3 normal ) { - #if defined( ENVMAP_TYPE_CUBE_UV ) - vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); - vec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 ); - return PI * envMapColor.rgb * envMapIntensity; - #else - return vec3( 0.0 ); - #endif - } - vec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) { - #if defined( ENVMAP_TYPE_CUBE_UV ) - vec3 reflectVec = reflect( - viewDir, normal ); - reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) ); - reflectVec = inverseTransformDirection( reflectVec, viewMatrix ); - vec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness ); - return envMapColor.rgb * envMapIntensity; - #else - return vec3( 0.0 ); - #endif - } -#endif`,rF=`ToonMaterial material; -material.diffuseColor = diffuseColor.rgb;`,oF=`varying vec3 vViewPosition; -struct ToonMaterial { - vec3 diffuseColor; -}; -void RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) { - vec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color; - reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -void RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) { - reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -#define RE_Direct RE_Direct_Toon -#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon`,aF=`BlinnPhongMaterial material; -material.diffuseColor = diffuseColor.rgb; -material.specularColor = specular; -material.specularShininess = shininess; -material.specularStrength = specularStrength;`,lF=`varying vec3 vViewPosition; -struct BlinnPhongMaterial { - vec3 diffuseColor; - vec3 specularColor; - float specularShininess; - float specularStrength; -}; -void RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) { - float dotNL = saturate( dot( geometry.normal, directLight.direction ) ); - vec3 irradiance = dotNL * directLight.color; - reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); - reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength; -} -void RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) { - reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -#define RE_Direct RE_Direct_BlinnPhong -#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong`,gF=`PhysicalMaterial material; -material.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor ); -vec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) ); -float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z ); -material.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness; -material.roughness = min( material.roughness, 1.0 ); -#ifdef IOR - material.ior = ior; - #ifdef USE_SPECULAR - float specularIntensityFactor = specularIntensity; - vec3 specularColorFactor = specularColor; - #ifdef USE_SPECULAR_COLORMAP - specularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb; - #endif - #ifdef USE_SPECULAR_INTENSITYMAP - specularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a; - #endif - material.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor ); - #else - float specularIntensityFactor = 1.0; - vec3 specularColorFactor = vec3( 1.0 ); - material.specularF90 = 1.0; - #endif - material.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor ); -#else - material.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor ); - material.specularF90 = 1.0; -#endif -#ifdef USE_CLEARCOAT - material.clearcoat = clearcoat; - material.clearcoatRoughness = clearcoatRoughness; - material.clearcoatF0 = vec3( 0.04 ); - material.clearcoatF90 = 1.0; - #ifdef USE_CLEARCOATMAP - material.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x; - #endif - #ifdef USE_CLEARCOAT_ROUGHNESSMAP - material.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y; - #endif - material.clearcoat = saturate( material.clearcoat ); material.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 ); - material.clearcoatRoughness += geometryRoughness; - material.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 ); -#endif -#ifdef USE_IRIDESCENCE - material.iridescence = iridescence; - material.iridescenceIOR = iridescenceIOR; - #ifdef USE_IRIDESCENCEMAP - material.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r; - #endif - #ifdef USE_IRIDESCENCE_THICKNESSMAP - material.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum; - #else - material.iridescenceThickness = iridescenceThicknessMaximum; - #endif -#endif -#ifdef USE_SHEEN - material.sheenColor = sheenColor; - #ifdef USE_SHEEN_COLORMAP - material.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb; - #endif - material.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 ); - #ifdef USE_SHEEN_ROUGHNESSMAP - material.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a; - #endif -#endif`,cF=`struct PhysicalMaterial { - vec3 diffuseColor; - float roughness; - vec3 specularColor; - float specularF90; - #ifdef USE_CLEARCOAT - float clearcoat; - float clearcoatRoughness; - vec3 clearcoatF0; - float clearcoatF90; - #endif - #ifdef USE_IRIDESCENCE - float iridescence; - float iridescenceIOR; - float iridescenceThickness; - vec3 iridescenceFresnel; - vec3 iridescenceF0; - #endif - #ifdef USE_SHEEN - vec3 sheenColor; - float sheenRoughness; - #endif - #ifdef IOR - float ior; - #endif - #ifdef USE_TRANSMISSION - float transmission; - float transmissionAlpha; - float thickness; - float attenuationDistance; - vec3 attenuationColor; - #endif -}; -vec3 clearcoatSpecular = vec3( 0.0 ); -vec3 sheenSpecular = vec3( 0.0 ); -vec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) { - float x = clamp( 1.0 - dotVH, 0.0, 1.0 ); - float x2 = x * x; - float x5 = clamp( x * x2 * x2, 0.0, 0.9999 ); - return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 ); -} -float V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) { - float a2 = pow2( alpha ); - float gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) ); - float gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) ); - return 0.5 / max( gv + gl, EPSILON ); -} -float D_GGX( const in float alpha, const in float dotNH ) { - float a2 = pow2( alpha ); - float denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0; - return RECIPROCAL_PI * a2 / pow2( denom ); -} -#ifdef USE_CLEARCOAT - vec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) { - vec3 f0 = material.clearcoatF0; - float f90 = material.clearcoatF90; - float roughness = material.clearcoatRoughness; - float alpha = pow2( roughness ); - vec3 halfDir = normalize( lightDir + viewDir ); - float dotNL = saturate( dot( normal, lightDir ) ); - float dotNV = saturate( dot( normal, viewDir ) ); - float dotNH = saturate( dot( normal, halfDir ) ); - float dotVH = saturate( dot( viewDir, halfDir ) ); - vec3 F = F_Schlick( f0, f90, dotVH ); - float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV ); - float D = D_GGX( alpha, dotNH ); - return F * ( V * D ); - } -#endif -vec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) { - vec3 f0 = material.specularColor; - float f90 = material.specularF90; - float roughness = material.roughness; - float alpha = pow2( roughness ); - vec3 halfDir = normalize( lightDir + viewDir ); - float dotNL = saturate( dot( normal, lightDir ) ); - float dotNV = saturate( dot( normal, viewDir ) ); - float dotNH = saturate( dot( normal, halfDir ) ); - float dotVH = saturate( dot( viewDir, halfDir ) ); - vec3 F = F_Schlick( f0, f90, dotVH ); - #ifdef USE_IRIDESCENCE - F = mix( F, material.iridescenceFresnel, material.iridescence ); - #endif - float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV ); - float D = D_GGX( alpha, dotNH ); - return F * ( V * D ); -} -vec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) { - const float LUT_SIZE = 64.0; - const float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE; - const float LUT_BIAS = 0.5 / LUT_SIZE; - float dotNV = saturate( dot( N, V ) ); - vec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) ); - uv = uv * LUT_SCALE + LUT_BIAS; - return uv; -} -float LTC_ClippedSphereFormFactor( const in vec3 f ) { - float l = length( f ); - return max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 ); -} -vec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) { - float x = dot( v1, v2 ); - float y = abs( x ); - float a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y; - float b = 3.4175940 + ( 4.1616724 + y ) * y; - float v = a / b; - float theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v; - return cross( v1, v2 ) * theta_sintheta; -} -vec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) { - vec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ]; - vec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ]; - vec3 lightNormal = cross( v1, v2 ); - if( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 ); - vec3 T1, T2; - T1 = normalize( V - N * dot( V, N ) ); - T2 = - cross( N, T1 ); - mat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) ); - vec3 coords[ 4 ]; - coords[ 0 ] = mat * ( rectCoords[ 0 ] - P ); - coords[ 1 ] = mat * ( rectCoords[ 1 ] - P ); - coords[ 2 ] = mat * ( rectCoords[ 2 ] - P ); - coords[ 3 ] = mat * ( rectCoords[ 3 ] - P ); - coords[ 0 ] = normalize( coords[ 0 ] ); - coords[ 1 ] = normalize( coords[ 1 ] ); - coords[ 2 ] = normalize( coords[ 2 ] ); - coords[ 3 ] = normalize( coords[ 3 ] ); - vec3 vectorFormFactor = vec3( 0.0 ); - vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] ); - vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] ); - vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] ); - vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] ); - float result = LTC_ClippedSphereFormFactor( vectorFormFactor ); - return vec3( result ); -} -#if defined( USE_SHEEN ) -float D_Charlie( float roughness, float dotNH ) { - float alpha = pow2( roughness ); - float invAlpha = 1.0 / alpha; - float cos2h = dotNH * dotNH; - float sin2h = max( 1.0 - cos2h, 0.0078125 ); - return ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI ); -} -float V_Neubelt( float dotNV, float dotNL ) { - return saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) ); -} -vec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) { - vec3 halfDir = normalize( lightDir + viewDir ); - float dotNL = saturate( dot( normal, lightDir ) ); - float dotNV = saturate( dot( normal, viewDir ) ); - float dotNH = saturate( dot( normal, halfDir ) ); - float D = D_Charlie( sheenRoughness, dotNH ); - float V = V_Neubelt( dotNV, dotNL ); - return sheenColor * ( D * V ); -} -#endif -float IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) { - float dotNV = saturate( dot( normal, viewDir ) ); - float r2 = roughness * roughness; - float a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95; - float b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72; - float DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) ); - return saturate( DG * RECIPROCAL_PI ); -} -vec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) { - float dotNV = saturate( dot( normal, viewDir ) ); - const vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 ); - const vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 ); - vec4 r = roughness * c0 + c1; - float a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y; - vec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw; - return fab; -} -vec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) { - vec2 fab = DFGApprox( normal, viewDir, roughness ); - return specularColor * fab.x + specularF90 * fab.y; -} -#ifdef USE_IRIDESCENCE -void computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) { -#else -void computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) { -#endif - vec2 fab = DFGApprox( normal, viewDir, roughness ); - #ifdef USE_IRIDESCENCE - vec3 Fr = mix( specularColor, iridescenceF0, iridescence ); - #else - vec3 Fr = specularColor; - #endif - vec3 FssEss = Fr * fab.x + specularF90 * fab.y; - float Ess = fab.x + fab.y; - float Ems = 1.0 - Ess; - vec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619; vec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg ); - singleScatter += FssEss; - multiScatter += Fms * Ems; -} -#if NUM_RECT_AREA_LIGHTS > 0 - void RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) { - vec3 normal = geometry.normal; - vec3 viewDir = geometry.viewDir; - vec3 position = geometry.position; - vec3 lightPos = rectAreaLight.position; - vec3 halfWidth = rectAreaLight.halfWidth; - vec3 halfHeight = rectAreaLight.halfHeight; - vec3 lightColor = rectAreaLight.color; - float roughness = material.roughness; - vec3 rectCoords[ 4 ]; - rectCoords[ 0 ] = lightPos + halfWidth - halfHeight; rectCoords[ 1 ] = lightPos - halfWidth - halfHeight; - rectCoords[ 2 ] = lightPos - halfWidth + halfHeight; - rectCoords[ 3 ] = lightPos + halfWidth + halfHeight; - vec2 uv = LTC_Uv( normal, viewDir, roughness ); - vec4 t1 = texture2D( ltc_1, uv ); - vec4 t2 = texture2D( ltc_2, uv ); - mat3 mInv = mat3( - vec3( t1.x, 0, t1.y ), - vec3( 0, 1, 0 ), - vec3( t1.z, 0, t1.w ) - ); - vec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y ); - reflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords ); - reflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords ); - } -#endif -void RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) { - float dotNL = saturate( dot( geometry.normal, directLight.direction ) ); - vec3 irradiance = dotNL * directLight.color; - #ifdef USE_CLEARCOAT - float dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) ); - vec3 ccIrradiance = dotNLcc * directLight.color; - clearcoatSpecular += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material ); - #endif - #ifdef USE_SHEEN - sheenSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenColor, material.sheenRoughness ); - #endif - reflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material ); - reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -void RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) { - reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -void RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) { - #ifdef USE_CLEARCOAT - clearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness ); - #endif - #ifdef USE_SHEEN - sheenSpecular += irradiance * material.sheenColor * IBLSheenBRDF( geometry.normal, geometry.viewDir, material.sheenRoughness ); - #endif - vec3 singleScattering = vec3( 0.0 ); - vec3 multiScattering = vec3( 0.0 ); - vec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI; - #ifdef USE_IRIDESCENCE - computeMultiscatteringIridescence( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering ); - #else - computeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering ); - #endif - vec3 totalScattering = singleScattering + multiScattering; - vec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) ); - reflectedLight.indirectSpecular += radiance * singleScattering; - reflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance; - reflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance; -} -#define RE_Direct RE_Direct_Physical -#define RE_Direct_RectArea RE_Direct_RectArea_Physical -#define RE_IndirectDiffuse RE_IndirectDiffuse_Physical -#define RE_IndirectSpecular RE_IndirectSpecular_Physical -float computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) { - return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion ); -}`,IF=` -GeometricContext geometry; -geometry.position = - vViewPosition; -geometry.normal = normal; -geometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition ); -#ifdef USE_CLEARCOAT - geometry.clearcoatNormal = clearcoatNormal; -#endif -#ifdef USE_IRIDESCENCE - float dotNVi = saturate( dot( normal, geometry.viewDir ) ); - if ( material.iridescenceThickness == 0.0 ) { - material.iridescence = 0.0; - } else { - material.iridescence = saturate( material.iridescence ); - } - if ( material.iridescence > 0.0 ) { - material.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor ); - material.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi ); - } -#endif -IncidentLight directLight; -#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct ) - PointLight pointLight; - #if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0 - PointLightShadow pointLightShadow; - #endif - #pragma unroll_loop_start - for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) { - pointLight = pointLights[ i ]; - getPointLightInfo( pointLight, geometry, directLight ); - #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS ) - pointLightShadow = pointLightShadows[ i ]; - directLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0; - #endif - RE_Direct( directLight, geometry, material, reflectedLight ); - } - #pragma unroll_loop_end -#endif -#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct ) - SpotLight spotLight; - vec4 spotColor; - vec3 spotLightCoord; - bool inSpotLightMap; - #if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0 - SpotLightShadow spotLightShadow; - #endif - #pragma unroll_loop_start - for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) { - spotLight = spotLights[ i ]; - getSpotLightInfo( spotLight, geometry, directLight ); - #if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS ) - #define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX - #elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) - #define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS - #else - #define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS ) - #endif - #if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS ) - spotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w; - inSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) ); - spotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy ); - directLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color; - #endif - #undef SPOT_LIGHT_MAP_INDEX - #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) - spotLightShadow = spotLightShadows[ i ]; - directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0; - #endif - RE_Direct( directLight, geometry, material, reflectedLight ); - } - #pragma unroll_loop_end -#endif -#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) - DirectionalLight directionalLight; - #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0 - DirectionalLightShadow directionalLightShadow; - #endif - #pragma unroll_loop_start - for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) { - directionalLight = directionalLights[ i ]; - getDirectionalLightInfo( directionalLight, geometry, directLight ); - #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS ) - directionalLightShadow = directionalLightShadows[ i ]; - directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0; - #endif - RE_Direct( directLight, geometry, material, reflectedLight ); - } - #pragma unroll_loop_end -#endif -#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea ) - RectAreaLight rectAreaLight; - #pragma unroll_loop_start - for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) { - rectAreaLight = rectAreaLights[ i ]; - RE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight ); - } - #pragma unroll_loop_end -#endif -#if defined( RE_IndirectDiffuse ) - vec3 iblIrradiance = vec3( 0.0 ); - vec3 irradiance = getAmbientLightIrradiance( ambientLightColor ); - irradiance += getLightProbeIrradiance( lightProbe, geometry.normal ); - #if ( NUM_HEMI_LIGHTS > 0 ) - #pragma unroll_loop_start - for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) { - irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal ); - } - #pragma unroll_loop_end - #endif -#endif -#if defined( RE_IndirectSpecular ) - vec3 radiance = vec3( 0.0 ); - vec3 clearcoatRadiance = vec3( 0.0 ); -#endif`,uF=`#if defined( RE_IndirectDiffuse ) - #ifdef USE_LIGHTMAP - vec4 lightMapTexel = texture2D( lightMap, vLightMapUv ); - vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity; - irradiance += lightMapIrradiance; - #endif - #if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV ) - iblIrradiance += getIBLIrradiance( geometry.normal ); - #endif -#endif -#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular ) - radiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness ); - #ifdef USE_CLEARCOAT - clearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness ); - #endif -#endif`,CF=`#if defined( RE_IndirectDiffuse ) - RE_IndirectDiffuse( irradiance, geometry, material, reflectedLight ); -#endif -#if defined( RE_IndirectSpecular ) - RE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight ); -#endif`,dF=`#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT ) - gl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5; -#endif`,hF=`#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT ) - uniform float logDepthBufFC; - varying float vFragDepth; - varying float vIsPerspective; -#endif`,AF=`#ifdef USE_LOGDEPTHBUF - #ifdef USE_LOGDEPTHBUF_EXT - varying float vFragDepth; - varying float vIsPerspective; - #else - uniform float logDepthBufFC; - #endif -#endif`,pF=`#ifdef USE_LOGDEPTHBUF - #ifdef USE_LOGDEPTHBUF_EXT - vFragDepth = 1.0 + gl_Position.w; - vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) ); - #else - if ( isPerspectiveMatrix( projectionMatrix ) ) { - gl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0; - gl_Position.z *= gl_Position.w; - } - #endif -#endif`,mF=`#ifdef USE_MAP - diffuseColor *= texture2D( map, vMapUv ); -#endif`,fF=`#ifdef USE_MAP - uniform sampler2D map; -#endif`,bF=`#if defined( USE_MAP ) || defined( USE_ALPHAMAP ) - #if defined( USE_POINTS_UV ) - vec2 uv = vUv; - #else - vec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy; - #endif -#endif -#ifdef USE_MAP - diffuseColor *= texture2D( map, uv ); -#endif -#ifdef USE_ALPHAMAP - diffuseColor.a *= texture2D( alphaMap, uv ).g; -#endif`,yF=`#if defined( USE_POINTS_UV ) - varying vec2 vUv; -#else - #if defined( USE_MAP ) || defined( USE_ALPHAMAP ) - uniform mat3 uvTransform; - #endif -#endif -#ifdef USE_MAP - uniform sampler2D map; -#endif -#ifdef USE_ALPHAMAP - uniform sampler2D alphaMap; -#endif`,vF=`float metalnessFactor = metalness; -#ifdef USE_METALNESSMAP - vec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv ); - metalnessFactor *= texelMetalness.b; -#endif`,GF=`#ifdef USE_METALNESSMAP - uniform sampler2D metalnessMap; -#endif`,BF=`#if defined( USE_MORPHCOLORS ) && defined( MORPHTARGETS_TEXTURE ) - vColor *= morphTargetBaseInfluence; - for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { - #if defined( USE_COLOR_ALPHA ) - if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ]; - #elif defined( USE_COLOR ) - if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ]; - #endif - } -#endif`,ZF=`#ifdef USE_MORPHNORMALS - objectNormal *= morphTargetBaseInfluence; - #ifdef MORPHTARGETS_TEXTURE - for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { - if ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ]; - } - #else - objectNormal += morphNormal0 * morphTargetInfluences[ 0 ]; - objectNormal += morphNormal1 * morphTargetInfluences[ 1 ]; - objectNormal += morphNormal2 * morphTargetInfluences[ 2 ]; - objectNormal += morphNormal3 * morphTargetInfluences[ 3 ]; - #endif -#endif`,wF=`#ifdef USE_MORPHTARGETS - uniform float morphTargetBaseInfluence; - #ifdef MORPHTARGETS_TEXTURE - uniform float morphTargetInfluences[ MORPHTARGETS_COUNT ]; - uniform sampler2DArray morphTargetsTexture; - uniform ivec2 morphTargetsTextureSize; - vec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) { - int texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset; - int y = texelIndex / morphTargetsTextureSize.x; - int x = texelIndex - y * morphTargetsTextureSize.x; - ivec3 morphUV = ivec3( x, y, morphTargetIndex ); - return texelFetch( morphTargetsTexture, morphUV, 0 ); - } - #else - #ifndef USE_MORPHNORMALS - uniform float morphTargetInfluences[ 8 ]; - #else - uniform float morphTargetInfluences[ 4 ]; - #endif - #endif -#endif`,SF=`#ifdef USE_MORPHTARGETS - transformed *= morphTargetBaseInfluence; - #ifdef MORPHTARGETS_TEXTURE - for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { - if ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ]; - } - #else - transformed += morphTarget0 * morphTargetInfluences[ 0 ]; - transformed += morphTarget1 * morphTargetInfluences[ 1 ]; - transformed += morphTarget2 * morphTargetInfluences[ 2 ]; - transformed += morphTarget3 * morphTargetInfluences[ 3 ]; - #ifndef USE_MORPHNORMALS - transformed += morphTarget4 * morphTargetInfluences[ 4 ]; - transformed += morphTarget5 * morphTargetInfluences[ 5 ]; - transformed += morphTarget6 * morphTargetInfluences[ 6 ]; - transformed += morphTarget7 * morphTargetInfluences[ 7 ]; - #endif - #endif -#endif`,xF=`float faceDirection = gl_FrontFacing ? 1.0 : - 1.0; -#ifdef FLAT_SHADED - vec3 fdx = dFdx( vViewPosition ); - vec3 fdy = dFdy( vViewPosition ); - vec3 normal = normalize( cross( fdx, fdy ) ); -#else - vec3 normal = normalize( vNormal ); - #ifdef DOUBLE_SIDED - normal *= faceDirection; - #endif -#endif -#ifdef USE_NORMALMAP_TANGENTSPACE - #ifdef USE_TANGENT - mat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal ); - #else - mat3 tbn = getTangentFrame( - vViewPosition, normal, vNormalMapUv ); - #endif - #if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED ) - tbn[0] *= faceDirection; - tbn[1] *= faceDirection; - #endif -#endif -#ifdef USE_CLEARCOAT_NORMALMAP - #ifdef USE_TANGENT - mat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal ); - #else - mat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv ); - #endif - #if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED ) - tbn2[0] *= faceDirection; - tbn2[1] *= faceDirection; - #endif -#endif -vec3 geometryNormal = normal;`,RF=`#ifdef USE_NORMALMAP_OBJECTSPACE - normal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0; - #ifdef FLIP_SIDED - normal = - normal; - #endif - #ifdef DOUBLE_SIDED - normal = normal * faceDirection; - #endif - normal = normalize( normalMatrix * normal ); -#elif defined( USE_NORMALMAP_TANGENTSPACE ) - vec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0; - mapN.xy *= normalScale; - normal = normalize( tbn * mapN ); -#elif defined( USE_BUMPMAP ) - normal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection ); -#endif`,WF=`#ifndef FLAT_SHADED - varying vec3 vNormal; - #ifdef USE_TANGENT - varying vec3 vTangent; - varying vec3 vBitangent; - #endif -#endif`,VF=`#ifndef FLAT_SHADED - varying vec3 vNormal; - #ifdef USE_TANGENT - varying vec3 vTangent; - varying vec3 vBitangent; - #endif -#endif`,MF=`#ifndef FLAT_SHADED - vNormal = normalize( transformedNormal ); - #ifdef USE_TANGENT - vTangent = normalize( transformedTangent ); - vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w ); - #endif -#endif`,NF=`#ifdef USE_NORMALMAP - uniform sampler2D normalMap; - uniform vec2 normalScale; -#endif -#ifdef USE_NORMALMAP_OBJECTSPACE - uniform mat3 normalMatrix; -#endif -#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) ) - mat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) { - vec3 q0 = dFdx( eye_pos.xyz ); - vec3 q1 = dFdy( eye_pos.xyz ); - vec2 st0 = dFdx( uv.st ); - vec2 st1 = dFdy( uv.st ); - vec3 N = surf_norm; - vec3 q1perp = cross( q1, N ); - vec3 q0perp = cross( N, q0 ); - vec3 T = q1perp * st0.x + q0perp * st1.x; - vec3 B = q1perp * st0.y + q0perp * st1.y; - float det = max( dot( T, T ), dot( B, B ) ); - float scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det ); - return mat3( T * scale, B * scale, N ); - } -#endif`,HF=`#ifdef USE_CLEARCOAT - vec3 clearcoatNormal = geometryNormal; -#endif`,XF=`#ifdef USE_CLEARCOAT_NORMALMAP - vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0; - clearcoatMapN.xy *= clearcoatNormalScale; - clearcoatNormal = normalize( tbn2 * clearcoatMapN ); -#endif`,YF=`#ifdef USE_CLEARCOATMAP - uniform sampler2D clearcoatMap; -#endif -#ifdef USE_CLEARCOAT_NORMALMAP - uniform sampler2D clearcoatNormalMap; - uniform vec2 clearcoatNormalScale; -#endif -#ifdef USE_CLEARCOAT_ROUGHNESSMAP - uniform sampler2D clearcoatRoughnessMap; -#endif`,FF=`#ifdef USE_IRIDESCENCEMAP - uniform sampler2D iridescenceMap; -#endif -#ifdef USE_IRIDESCENCE_THICKNESSMAP - uniform sampler2D iridescenceThicknessMap; -#endif`,KF=`#ifdef OPAQUE -diffuseColor.a = 1.0; -#endif -#ifdef USE_TRANSMISSION -diffuseColor.a *= material.transmissionAlpha + 0.1; -#endif -gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,zF=`vec3 packNormalToRGB( const in vec3 normal ) { - return normalize( normal ) * 0.5 + 0.5; -} -vec3 unpackRGBToNormal( const in vec3 rgb ) { - return 2.0 * rgb.xyz - 1.0; -} -const float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.; -const vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. ); -const vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. ); -const float ShiftRight8 = 1. / 256.; -vec4 packDepthToRGBA( const in float v ) { - vec4 r = vec4( fract( v * PackFactors ), v ); - r.yzw -= r.xyz * ShiftRight8; return r * PackUpscale; -} -float unpackRGBAToDepth( const in vec4 v ) { - return dot( v, UnpackFactors ); -} -vec2 packDepthToRG( in highp float v ) { - return packDepthToRGBA( v ).yx; -} -float unpackRGToDepth( const in highp vec2 v ) { - return unpackRGBAToDepth( vec4( v.xy, 0.0, 0.0 ) ); -} -vec4 pack2HalfToRGBA( vec2 v ) { - vec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) ); - return vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w ); -} -vec2 unpackRGBATo2Half( vec4 v ) { - return vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) ); -} -float viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) { - return ( viewZ + near ) / ( near - far ); -} -float orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) { - return depth * ( near - far ) - near; -} -float viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) { - return ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ ); -} -float perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) { - return ( near * far ) / ( ( far - near ) * depth - far ); -}`,LF=`#ifdef PREMULTIPLIED_ALPHA - gl_FragColor.rgb *= gl_FragColor.a; -#endif`,TF=`vec4 mvPosition = vec4( transformed, 1.0 ); -#ifdef USE_INSTANCING - mvPosition = instanceMatrix * mvPosition; -#endif -mvPosition = modelViewMatrix * mvPosition; -gl_Position = projectionMatrix * mvPosition;`,EF=`#ifdef DITHERING - gl_FragColor.rgb = dithering( gl_FragColor.rgb ); -#endif`,kF=`#ifdef DITHERING - vec3 dithering( vec3 color ) { - float grid_position = rand( gl_FragCoord.xy ); - vec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 ); - dither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position ); - return color + dither_shift_RGB; - } -#endif`,DF=`float roughnessFactor = roughness; -#ifdef USE_ROUGHNESSMAP - vec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv ); - roughnessFactor *= texelRoughness.g; -#endif`,UF=`#ifdef USE_ROUGHNESSMAP - uniform sampler2D roughnessMap; -#endif`,PF=`#if NUM_SPOT_LIGHT_COORDS > 0 - varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ]; -#endif -#if NUM_SPOT_LIGHT_MAPS > 0 - uniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ]; -#endif -#ifdef USE_SHADOWMAP - #if NUM_DIR_LIGHT_SHADOWS > 0 - uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ]; - varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ]; - struct DirectionalLightShadow { - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - }; - uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ]; - #endif - #if NUM_SPOT_LIGHT_SHADOWS > 0 - uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ]; - struct SpotLightShadow { - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - }; - uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ]; - #endif - #if NUM_POINT_LIGHT_SHADOWS > 0 - uniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ]; - varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ]; - struct PointLightShadow { - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - float shadowCameraNear; - float shadowCameraFar; - }; - uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ]; - #endif - float texture2DCompare( sampler2D depths, vec2 uv, float compare ) { - return step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) ); - } - vec2 texture2DDistribution( sampler2D shadow, vec2 uv ) { - return unpackRGBATo2Half( texture2D( shadow, uv ) ); - } - float VSMShadow (sampler2D shadow, vec2 uv, float compare ){ - float occlusion = 1.0; - vec2 distribution = texture2DDistribution( shadow, uv ); - float hard_shadow = step( compare , distribution.x ); - if (hard_shadow != 1.0 ) { - float distance = compare - distribution.x ; - float variance = max( 0.00000, distribution.y * distribution.y ); - float softness_probability = variance / (variance + distance * distance ); softness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 ); occlusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 ); - } - return occlusion; - } - float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) { - float shadow = 1.0; - shadowCoord.xyz /= shadowCoord.w; - shadowCoord.z += shadowBias; - bool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0; - bool frustumTest = inFrustum && shadowCoord.z <= 1.0; - if ( frustumTest ) { - #if defined( SHADOWMAP_TYPE_PCF ) - vec2 texelSize = vec2( 1.0 ) / shadowMapSize; - float dx0 = - texelSize.x * shadowRadius; - float dy0 = - texelSize.y * shadowRadius; - float dx1 = + texelSize.x * shadowRadius; - float dy1 = + texelSize.y * shadowRadius; - float dx2 = dx0 / 2.0; - float dy2 = dy0 / 2.0; - float dx3 = dx1 / 2.0; - float dy3 = dy1 / 2.0; - shadow = ( - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) + - texture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z ) - ) * ( 1.0 / 17.0 ); - #elif defined( SHADOWMAP_TYPE_PCF_SOFT ) - vec2 texelSize = vec2( 1.0 ) / shadowMapSize; - float dx = texelSize.x; - float dy = texelSize.y; - vec2 uv = shadowCoord.xy; - vec2 f = fract( uv * shadowMapSize + 0.5 ); - uv -= f * texelSize; - shadow = ( - texture2DCompare( shadowMap, uv, shadowCoord.z ) + - texture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) + - texture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) + - texture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) + - mix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), - texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ), - f.x ) + - mix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), - texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ), - f.x ) + - mix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), - texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ), - f.y ) + - mix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), - texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ), - f.y ) + - mix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), - texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ), - f.x ), - mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), - texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ), - f.x ), - f.y ) - ) * ( 1.0 / 9.0 ); - #elif defined( SHADOWMAP_TYPE_VSM ) - shadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z ); - #else - shadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ); - #endif - } - return shadow; - } - vec2 cubeToUV( vec3 v, float texelSizeY ) { - vec3 absV = abs( v ); - float scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) ); - absV *= scaleToCube; - v *= scaleToCube * ( 1.0 - 2.0 * texelSizeY ); - vec2 planar = v.xy; - float almostATexel = 1.5 * texelSizeY; - float almostOne = 1.0 - almostATexel; - if ( absV.z >= almostOne ) { - if ( v.z > 0.0 ) - planar.x = 4.0 - v.x; - } else if ( absV.x >= almostOne ) { - float signX = sign( v.x ); - planar.x = v.z * signX + 2.0 * signX; - } else if ( absV.y >= almostOne ) { - float signY = sign( v.y ); - planar.x = v.x + 2.0 * signY + 2.0; - planar.y = v.z * signY - 2.0; - } - return vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 ); - } - float getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) { - vec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) ); - vec3 lightToPosition = shadowCoord.xyz; - float dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear ); dp += shadowBias; - vec3 bd3D = normalize( lightToPosition ); - #if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM ) - vec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y; - return ( - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) + - texture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp ) - ) * ( 1.0 / 9.0 ); - #else - return texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ); - #endif - } -#endif`,_F=`#if NUM_SPOT_LIGHT_COORDS > 0 - uniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ]; - varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ]; -#endif -#ifdef USE_SHADOWMAP - #if NUM_DIR_LIGHT_SHADOWS > 0 - uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ]; - varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ]; - struct DirectionalLightShadow { - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - }; - uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ]; - #endif - #if NUM_SPOT_LIGHT_SHADOWS > 0 - struct SpotLightShadow { - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - }; - uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ]; - #endif - #if NUM_POINT_LIGHT_SHADOWS > 0 - uniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ]; - varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ]; - struct PointLightShadow { - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - float shadowCameraNear; - float shadowCameraFar; - }; - uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ]; - #endif -#endif`,JF=`#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 ) - vec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix ); - vec4 shadowWorldPosition; -#endif -#if defined( USE_SHADOWMAP ) - #if NUM_DIR_LIGHT_SHADOWS > 0 - #pragma unroll_loop_start - for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) { - shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 ); - vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition; - } - #pragma unroll_loop_end - #endif - #if NUM_POINT_LIGHT_SHADOWS > 0 - #pragma unroll_loop_start - for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) { - shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 ); - vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition; - } - #pragma unroll_loop_end - #endif -#endif -#if NUM_SPOT_LIGHT_COORDS > 0 - #pragma unroll_loop_start - for ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) { - shadowWorldPosition = worldPosition; - #if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) - shadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias; - #endif - vSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition; - } - #pragma unroll_loop_end -#endif`,OF=`float getShadowMask() { - float shadow = 1.0; - #ifdef USE_SHADOWMAP - #if NUM_DIR_LIGHT_SHADOWS > 0 - DirectionalLightShadow directionalLight; - #pragma unroll_loop_start - for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) { - directionalLight = directionalLightShadows[ i ]; - shadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0; - } - #pragma unroll_loop_end - #endif - #if NUM_SPOT_LIGHT_SHADOWS > 0 - SpotLightShadow spotLight; - #pragma unroll_loop_start - for ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) { - spotLight = spotLightShadows[ i ]; - shadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0; - } - #pragma unroll_loop_end - #endif - #if NUM_POINT_LIGHT_SHADOWS > 0 - PointLightShadow pointLight; - #pragma unroll_loop_start - for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) { - pointLight = pointLightShadows[ i ]; - shadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0; - } - #pragma unroll_loop_end - #endif - #endif - return shadow; -}`,QF=`#ifdef USE_SKINNING - mat4 boneMatX = getBoneMatrix( skinIndex.x ); - mat4 boneMatY = getBoneMatrix( skinIndex.y ); - mat4 boneMatZ = getBoneMatrix( skinIndex.z ); - mat4 boneMatW = getBoneMatrix( skinIndex.w ); -#endif`,jF=`#ifdef USE_SKINNING - uniform mat4 bindMatrix; - uniform mat4 bindMatrixInverse; - uniform highp sampler2D boneTexture; - uniform int boneTextureSize; - mat4 getBoneMatrix( const in float i ) { - float j = i * 4.0; - float x = mod( j, float( boneTextureSize ) ); - float y = floor( j / float( boneTextureSize ) ); - float dx = 1.0 / float( boneTextureSize ); - float dy = 1.0 / float( boneTextureSize ); - y = dy * ( y + 0.5 ); - vec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) ); - vec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) ); - vec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) ); - vec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) ); - mat4 bone = mat4( v1, v2, v3, v4 ); - return bone; - } -#endif`,qF=`#ifdef USE_SKINNING - vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 ); - vec4 skinned = vec4( 0.0 ); - skinned += boneMatX * skinVertex * skinWeight.x; - skinned += boneMatY * skinVertex * skinWeight.y; - skinned += boneMatZ * skinVertex * skinWeight.z; - skinned += boneMatW * skinVertex * skinWeight.w; - transformed = ( bindMatrixInverse * skinned ).xyz; -#endif`,$F=`#ifdef USE_SKINNING - mat4 skinMatrix = mat4( 0.0 ); - skinMatrix += skinWeight.x * boneMatX; - skinMatrix += skinWeight.y * boneMatY; - skinMatrix += skinWeight.z * boneMatZ; - skinMatrix += skinWeight.w * boneMatW; - skinMatrix = bindMatrixInverse * skinMatrix * bindMatrix; - objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz; - #ifdef USE_TANGENT - objectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz; - #endif -#endif`,e9=`float specularStrength; -#ifdef USE_SPECULARMAP - vec4 texelSpecular = texture2D( specularMap, vSpecularMapUv ); - specularStrength = texelSpecular.r; -#else - specularStrength = 1.0; -#endif`,t9=`#ifdef USE_SPECULARMAP - uniform sampler2D specularMap; -#endif`,n9=`#if defined( TONE_MAPPING ) - gl_FragColor.rgb = toneMapping( gl_FragColor.rgb ); -#endif`,i9=`#ifndef saturate -#define saturate( a ) clamp( a, 0.0, 1.0 ) -#endif -uniform float toneMappingExposure; -vec3 LinearToneMapping( vec3 color ) { - return toneMappingExposure * color; -} -vec3 ReinhardToneMapping( vec3 color ) { - color *= toneMappingExposure; - return saturate( color / ( vec3( 1.0 ) + color ) ); -} -vec3 OptimizedCineonToneMapping( vec3 color ) { - color *= toneMappingExposure; - color = max( vec3( 0.0 ), color - 0.004 ); - return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) ); -} -vec3 RRTAndODTFit( vec3 v ) { - vec3 a = v * ( v + 0.0245786 ) - 0.000090537; - vec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081; - return a / b; -} -vec3 ACESFilmicToneMapping( vec3 color ) { - const mat3 ACESInputMat = mat3( - vec3( 0.59719, 0.07600, 0.02840 ), vec3( 0.35458, 0.90834, 0.13383 ), - vec3( 0.04823, 0.01566, 0.83777 ) - ); - const mat3 ACESOutputMat = mat3( - vec3( 1.60475, -0.10208, -0.00327 ), vec3( -0.53108, 1.10813, -0.07276 ), - vec3( -0.07367, -0.00605, 1.07602 ) - ); - color *= toneMappingExposure / 0.6; - color = ACESInputMat * color; - color = RRTAndODTFit( color ); - color = ACESOutputMat * color; - return saturate( color ); -} -vec3 CustomToneMapping( vec3 color ) { return color; }`,s9=`#ifdef USE_TRANSMISSION - material.transmission = transmission; - material.transmissionAlpha = 1.0; - material.thickness = thickness; - material.attenuationDistance = attenuationDistance; - material.attenuationColor = attenuationColor; - #ifdef USE_TRANSMISSIONMAP - material.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r; - #endif - #ifdef USE_THICKNESSMAP - material.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g; - #endif - vec3 pos = vWorldPosition; - vec3 v = normalize( cameraPosition - pos ); - vec3 n = inverseTransformDirection( normal, viewMatrix ); - vec4 transmission = getIBLVolumeRefraction( - n, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90, - pos, modelMatrix, viewMatrix, projectionMatrix, material.ior, material.thickness, - material.attenuationColor, material.attenuationDistance ); - material.transmissionAlpha = mix( material.transmissionAlpha, transmission.a, material.transmission ); - totalDiffuse = mix( totalDiffuse, transmission.rgb, material.transmission ); -#endif`,r9=`#ifdef USE_TRANSMISSION - uniform float transmission; - uniform float thickness; - uniform float attenuationDistance; - uniform vec3 attenuationColor; - #ifdef USE_TRANSMISSIONMAP - uniform sampler2D transmissionMap; - #endif - #ifdef USE_THICKNESSMAP - uniform sampler2D thicknessMap; - #endif - uniform vec2 transmissionSamplerSize; - uniform sampler2D transmissionSamplerMap; - uniform mat4 modelMatrix; - uniform mat4 projectionMatrix; - varying vec3 vWorldPosition; - float w0( float a ) { - return ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 ); - } - float w1( float a ) { - return ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 ); - } - float w2( float a ){ - return ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 ); - } - float w3( float a ) { - return ( 1.0 / 6.0 ) * ( a * a * a ); - } - float g0( float a ) { - return w0( a ) + w1( a ); - } - float g1( float a ) { - return w2( a ) + w3( a ); - } - float h0( float a ) { - return - 1.0 + w1( a ) / ( w0( a ) + w1( a ) ); - } - float h1( float a ) { - return 1.0 + w3( a ) / ( w2( a ) + w3( a ) ); - } - vec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) { - uv = uv * texelSize.zw + 0.5; - vec2 iuv = floor( uv ); - vec2 fuv = fract( uv ); - float g0x = g0( fuv.x ); - float g1x = g1( fuv.x ); - float h0x = h0( fuv.x ); - float h1x = h1( fuv.x ); - float h0y = h0( fuv.y ); - float h1y = h1( fuv.y ); - vec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy; - vec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy; - vec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy; - vec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy; - return g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) + - g1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) ); - } - vec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) { - vec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) ); - vec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) ); - vec2 fLodSizeInv = 1.0 / fLodSize; - vec2 cLodSizeInv = 1.0 / cLodSize; - vec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) ); - vec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) ); - return mix( fSample, cSample, fract( lod ) ); - } - vec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) { - vec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior ); - vec3 modelScale; - modelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) ); - modelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) ); - modelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) ); - return normalize( refractionVector ) * thickness * modelScale; - } - float applyIorToRoughness( const in float roughness, const in float ior ) { - return roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 ); - } - vec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) { - float lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior ); - return textureBicubic( transmissionSamplerMap, fragCoord.xy, lod ); - } - vec3 applyVolumeAttenuation( const in vec3 radiance, const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) { - if ( isinf( attenuationDistance ) ) { - return radiance; - } else { - vec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance; - vec3 transmittance = exp( - attenuationCoefficient * transmissionDistance ); return transmittance * radiance; - } - } - vec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor, - const in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix, - const in mat4 viewMatrix, const in mat4 projMatrix, const in float ior, const in float thickness, - const in vec3 attenuationColor, const in float attenuationDistance ) { - vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix ); - vec3 refractedRayExit = position + transmissionRay; - vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 ); - vec2 refractionCoords = ndcPos.xy / ndcPos.w; - refractionCoords += 1.0; - refractionCoords /= 2.0; - vec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior ); - vec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance ); - vec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness ); - return vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a ); - } -#endif`,o9=`#ifdef USE_UV - varying vec2 vUv; -#endif -#ifdef USE_MAP - varying vec2 vMapUv; -#endif -#ifdef USE_ALPHAMAP - varying vec2 vAlphaMapUv; -#endif -#ifdef USE_LIGHTMAP - varying vec2 vLightMapUv; -#endif -#ifdef USE_AOMAP - varying vec2 vAoMapUv; -#endif -#ifdef USE_BUMPMAP - varying vec2 vBumpMapUv; -#endif -#ifdef USE_NORMALMAP - varying vec2 vNormalMapUv; -#endif -#ifdef USE_EMISSIVEMAP - varying vec2 vEmissiveMapUv; -#endif -#ifdef USE_METALNESSMAP - varying vec2 vMetalnessMapUv; -#endif -#ifdef USE_ROUGHNESSMAP - varying vec2 vRoughnessMapUv; -#endif -#ifdef USE_CLEARCOATMAP - varying vec2 vClearcoatMapUv; -#endif -#ifdef USE_CLEARCOAT_NORMALMAP - varying vec2 vClearcoatNormalMapUv; -#endif -#ifdef USE_CLEARCOAT_ROUGHNESSMAP - varying vec2 vClearcoatRoughnessMapUv; -#endif -#ifdef USE_IRIDESCENCEMAP - varying vec2 vIridescenceMapUv; -#endif -#ifdef USE_IRIDESCENCE_THICKNESSMAP - varying vec2 vIridescenceThicknessMapUv; -#endif -#ifdef USE_SHEEN_COLORMAP - varying vec2 vSheenColorMapUv; -#endif -#ifdef USE_SHEEN_ROUGHNESSMAP - varying vec2 vSheenRoughnessMapUv; -#endif -#ifdef USE_SPECULARMAP - varying vec2 vSpecularMapUv; -#endif -#ifdef USE_SPECULAR_COLORMAP - varying vec2 vSpecularColorMapUv; -#endif -#ifdef USE_SPECULAR_INTENSITYMAP - varying vec2 vSpecularIntensityMapUv; -#endif -#ifdef USE_TRANSMISSIONMAP - uniform mat3 transmissionMapTransform; - varying vec2 vTransmissionMapUv; -#endif -#ifdef USE_THICKNESSMAP - uniform mat3 thicknessMapTransform; - varying vec2 vThicknessMapUv; -#endif`,a9=`#ifdef USE_UV - varying vec2 vUv; -#endif -#ifdef USE_MAP - uniform mat3 mapTransform; - varying vec2 vMapUv; -#endif -#ifdef USE_ALPHAMAP - uniform mat3 alphaMapTransform; - varying vec2 vAlphaMapUv; -#endif -#ifdef USE_LIGHTMAP - uniform mat3 lightMapTransform; - varying vec2 vLightMapUv; -#endif -#ifdef USE_AOMAP - uniform mat3 aoMapTransform; - varying vec2 vAoMapUv; -#endif -#ifdef USE_BUMPMAP - uniform mat3 bumpMapTransform; - varying vec2 vBumpMapUv; -#endif -#ifdef USE_NORMALMAP - uniform mat3 normalMapTransform; - varying vec2 vNormalMapUv; -#endif -#ifdef USE_DISPLACEMENTMAP - uniform mat3 displacementMapTransform; - varying vec2 vDisplacementMapUv; -#endif -#ifdef USE_EMISSIVEMAP - uniform mat3 emissiveMapTransform; - varying vec2 vEmissiveMapUv; -#endif -#ifdef USE_METALNESSMAP - uniform mat3 metalnessMapTransform; - varying vec2 vMetalnessMapUv; -#endif -#ifdef USE_ROUGHNESSMAP - uniform mat3 roughnessMapTransform; - varying vec2 vRoughnessMapUv; -#endif -#ifdef USE_CLEARCOATMAP - uniform mat3 clearcoatMapTransform; - varying vec2 vClearcoatMapUv; -#endif -#ifdef USE_CLEARCOAT_NORMALMAP - uniform mat3 clearcoatNormalMapTransform; - varying vec2 vClearcoatNormalMapUv; -#endif -#ifdef USE_CLEARCOAT_ROUGHNESSMAP - uniform mat3 clearcoatRoughnessMapTransform; - varying vec2 vClearcoatRoughnessMapUv; -#endif -#ifdef USE_SHEEN_COLORMAP - uniform mat3 sheenColorMapTransform; - varying vec2 vSheenColorMapUv; -#endif -#ifdef USE_SHEEN_ROUGHNESSMAP - uniform mat3 sheenRoughnessMapTransform; - varying vec2 vSheenRoughnessMapUv; -#endif -#ifdef USE_IRIDESCENCEMAP - uniform mat3 iridescenceMapTransform; - varying vec2 vIridescenceMapUv; -#endif -#ifdef USE_IRIDESCENCE_THICKNESSMAP - uniform mat3 iridescenceThicknessMapTransform; - varying vec2 vIridescenceThicknessMapUv; -#endif -#ifdef USE_SPECULARMAP - uniform mat3 specularMapTransform; - varying vec2 vSpecularMapUv; -#endif -#ifdef USE_SPECULAR_COLORMAP - uniform mat3 specularColorMapTransform; - varying vec2 vSpecularColorMapUv; -#endif -#ifdef USE_SPECULAR_INTENSITYMAP - uniform mat3 specularIntensityMapTransform; - varying vec2 vSpecularIntensityMapUv; -#endif -#ifdef USE_TRANSMISSIONMAP - uniform mat3 transmissionMapTransform; - varying vec2 vTransmissionMapUv; -#endif -#ifdef USE_THICKNESSMAP - uniform mat3 thicknessMapTransform; - varying vec2 vThicknessMapUv; -#endif`,l9=`#ifdef USE_UV - vUv = vec3( uv, 1 ).xy; -#endif -#ifdef USE_MAP - vMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy; -#endif -#ifdef USE_ALPHAMAP - vAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_LIGHTMAP - vLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_AOMAP - vAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_BUMPMAP - vBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_NORMALMAP - vNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_DISPLACEMENTMAP - vDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_EMISSIVEMAP - vEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_METALNESSMAP - vMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_ROUGHNESSMAP - vRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_CLEARCOATMAP - vClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_CLEARCOAT_NORMALMAP - vClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_CLEARCOAT_ROUGHNESSMAP - vClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_IRIDESCENCEMAP - vIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_IRIDESCENCE_THICKNESSMAP - vIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_SHEEN_COLORMAP - vSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_SHEEN_ROUGHNESSMAP - vSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_SPECULARMAP - vSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_SPECULAR_COLORMAP - vSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_SPECULAR_INTENSITYMAP - vSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_TRANSMISSIONMAP - vTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_THICKNESSMAP - vThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy; -#endif`,g9=`#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0 - vec4 worldPosition = vec4( transformed, 1.0 ); - #ifdef USE_INSTANCING - worldPosition = instanceMatrix * worldPosition; - #endif - worldPosition = modelMatrix * worldPosition; -#endif`;const c9=`varying vec2 vUv; -uniform mat3 uvTransform; -void main() { - vUv = ( uvTransform * vec3( uv, 1 ) ).xy; - gl_Position = vec4( position.xy, 1.0, 1.0 ); -}`,I9=`uniform sampler2D t2D; -uniform float backgroundIntensity; -varying vec2 vUv; -void main() { - vec4 texColor = texture2D( t2D, vUv ); - texColor.rgb *= backgroundIntensity; - gl_FragColor = texColor; - #include - #include -}`,u9=`varying vec3 vWorldDirection; -#include -void main() { - vWorldDirection = transformDirection( position, modelMatrix ); - #include - #include - gl_Position.z = gl_Position.w; -}`,C9=`#ifdef ENVMAP_TYPE_CUBE - uniform samplerCube envMap; -#elif defined( ENVMAP_TYPE_CUBE_UV ) - uniform sampler2D envMap; -#endif -uniform float flipEnvMap; -uniform float backgroundBlurriness; -uniform float backgroundIntensity; -varying vec3 vWorldDirection; -#include -void main() { - #ifdef ENVMAP_TYPE_CUBE - vec4 texColor = textureCube( envMap, vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) ); - #elif defined( ENVMAP_TYPE_CUBE_UV ) - vec4 texColor = textureCubeUV( envMap, vWorldDirection, backgroundBlurriness ); - #else - vec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 ); - #endif - texColor.rgb *= backgroundIntensity; - gl_FragColor = texColor; - #include - #include -}`,d9=`varying vec3 vWorldDirection; -#include -void main() { - vWorldDirection = transformDirection( position, modelMatrix ); - #include - #include - gl_Position.z = gl_Position.w; -}`,h9=`uniform samplerCube tCube; -uniform float tFlip; -uniform float opacity; -varying vec3 vWorldDirection; -void main() { - vec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) ); - gl_FragColor = texColor; - gl_FragColor.a *= opacity; - #include - #include -}`,A9=`#include -#include -#include -#include -#include -#include -#include -varying vec2 vHighPrecisionZW; -void main() { - #include - #include - #ifdef USE_DISPLACEMENTMAP - #include - #include - #include - #endif - #include - #include - #include - #include - #include - #include - #include - vHighPrecisionZW = gl_Position.zw; -}`,p9=`#if DEPTH_PACKING == 3200 - uniform float opacity; -#endif -#include -#include -#include -#include -#include -#include -#include -#include -varying vec2 vHighPrecisionZW; -void main() { - #include - vec4 diffuseColor = vec4( 1.0 ); - #if DEPTH_PACKING == 3200 - diffuseColor.a = opacity; - #endif - #include - #include - #include - #include - float fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5; - #if DEPTH_PACKING == 3200 - gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity ); - #elif DEPTH_PACKING == 3201 - gl_FragColor = packDepthToRGBA( fragCoordZ ); - #endif -}`,m9=`#define DISTANCE -varying vec3 vWorldPosition; -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #ifdef USE_DISPLACEMENTMAP - #include - #include - #include - #endif - #include - #include - #include - #include - #include - #include - #include - vWorldPosition = worldPosition.xyz; -}`,f9=`#define DISTANCE -uniform vec3 referencePosition; -uniform float nearDistance; -uniform float farDistance; -varying vec3 vWorldPosition; -#include -#include -#include -#include -#include -#include -#include -void main () { - #include - vec4 diffuseColor = vec4( 1.0 ); - #include - #include - #include - float dist = length( vWorldPosition - referencePosition ); - dist = ( dist - nearDistance ) / ( farDistance - nearDistance ); - dist = saturate( dist ); - gl_FragColor = packDepthToRGBA( dist ); -}`,b9=`varying vec3 vWorldDirection; -#include -void main() { - vWorldDirection = transformDirection( position, modelMatrix ); - #include - #include -}`,y9=`uniform sampler2D tEquirect; -varying vec3 vWorldDirection; -#include -void main() { - vec3 direction = normalize( vWorldDirection ); - vec2 sampleUV = equirectUv( direction ); - gl_FragColor = texture2D( tEquirect, sampleUV ); - #include - #include -}`,v9=`uniform float scale; -attribute float lineDistance; -varying float vLineDistance; -#include -#include -#include -#include -#include -#include -#include -void main() { - vLineDistance = scale * lineDistance; - #include - #include - #include - #include - #include - #include - #include - #include - #include -}`,G9=`uniform vec3 diffuse; -uniform float opacity; -uniform float dashSize; -uniform float totalSize; -varying float vLineDistance; -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - if ( mod( vLineDistance, totalSize ) > dashSize ) { - discard; - } - vec3 outgoingLight = vec3( 0.0 ); - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - #include - #include - outgoingLight = diffuseColor.rgb; - #include - #include - #include - #include - #include -}`,B9=`#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #if defined ( USE_ENVMAP ) || defined ( USE_SKINNING ) - #include - #include - #include - #include - #include - #endif - #include - #include - #include - #include - #include - #include - #include - #include - #include -}`,Z9=`uniform vec3 diffuse; -uniform float opacity; -#ifndef FLAT_SHADED - varying vec3 vNormal; -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - #include - #include - #include - #include - #include - ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); - #ifdef USE_LIGHTMAP - vec4 lightMapTexel = texture2D( lightMap, vLightMapUv ); - reflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI; - #else - reflectedLight.indirectDiffuse += vec3( 1.0 ); - #endif - #include - reflectedLight.indirectDiffuse *= diffuseColor.rgb; - vec3 outgoingLight = reflectedLight.indirectDiffuse; - #include - #include - #include - #include - #include - #include - #include -}`,w9=`#define LAMBERT -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vViewPosition = - mvPosition.xyz; - #include - #include - #include - #include -}`,S9=`#define LAMBERT -uniform vec3 diffuse; -uniform vec3 emissive; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - vec4 diffuseColor = vec4( diffuse, opacity ); - ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); - vec3 totalEmissiveRadiance = emissive; - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance; - #include - #include - #include - #include - #include - #include - #include -}`,x9=`#define MATCAP -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vViewPosition = - mvPosition.xyz; -}`,R9=`#define MATCAP -uniform vec3 diffuse; -uniform float opacity; -uniform sampler2D matcap; -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - #include - #include - #include - #include - #include - #include - vec3 viewDir = normalize( vViewPosition ); - vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) ); - vec3 y = cross( viewDir, x ); - vec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5; - #ifdef USE_MATCAP - vec4 matcapColor = texture2D( matcap, uv ); - #else - vec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 ); - #endif - vec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb; - #include - #include - #include - #include - #include - #include -}`,W9=`#define NORMAL -#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) - varying vec3 vViewPosition; -#endif -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include -#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) - vViewPosition = - mvPosition.xyz; -#endif -}`,V9=`#define NORMAL -uniform float opacity; -#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) - varying vec3 vViewPosition; -#endif -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - gl_FragColor = vec4( packNormalToRGB( normal ), opacity ); - #ifdef OPAQUE - gl_FragColor.a = 1.0; - #endif -}`,M9=`#define PHONG -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vViewPosition = - mvPosition.xyz; - #include - #include - #include - #include -}`,N9=`#define PHONG -uniform vec3 diffuse; -uniform vec3 emissive; -uniform vec3 specular; -uniform float shininess; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - vec4 diffuseColor = vec4( diffuse, opacity ); - ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); - vec3 totalEmissiveRadiance = emissive; - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance; - #include - #include - #include - #include - #include - #include - #include -}`,H9=`#define STANDARD -varying vec3 vViewPosition; -#ifdef USE_TRANSMISSION - varying vec3 vWorldPosition; -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vViewPosition = - mvPosition.xyz; - #include - #include - #include -#ifdef USE_TRANSMISSION - vWorldPosition = worldPosition.xyz; -#endif -}`,X9=`#define STANDARD -#ifdef PHYSICAL - #define IOR - #define USE_SPECULAR -#endif -uniform vec3 diffuse; -uniform vec3 emissive; -uniform float roughness; -uniform float metalness; -uniform float opacity; -#ifdef IOR - uniform float ior; -#endif -#ifdef USE_SPECULAR - uniform float specularIntensity; - uniform vec3 specularColor; - #ifdef USE_SPECULAR_COLORMAP - uniform sampler2D specularColorMap; - #endif - #ifdef USE_SPECULAR_INTENSITYMAP - uniform sampler2D specularIntensityMap; - #endif -#endif -#ifdef USE_CLEARCOAT - uniform float clearcoat; - uniform float clearcoatRoughness; -#endif -#ifdef USE_IRIDESCENCE - uniform float iridescence; - uniform float iridescenceIOR; - uniform float iridescenceThicknessMinimum; - uniform float iridescenceThicknessMaximum; -#endif -#ifdef USE_SHEEN - uniform vec3 sheenColor; - uniform float sheenRoughness; - #ifdef USE_SHEEN_COLORMAP - uniform sampler2D sheenColorMap; - #endif - #ifdef USE_SHEEN_ROUGHNESSMAP - uniform sampler2D sheenRoughnessMap; - #endif -#endif -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - vec4 diffuseColor = vec4( diffuse, opacity ); - ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); - vec3 totalEmissiveRadiance = emissive; - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse; - vec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular; - #include - vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance; - #ifdef USE_SHEEN - float sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor ); - outgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular; - #endif - #ifdef USE_CLEARCOAT - float dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) ); - vec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc ); - outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat; - #endif - #include - #include - #include - #include - #include - #include -}`,Y9=`#define TOON -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vViewPosition = - mvPosition.xyz; - #include - #include - #include -}`,F9=`#define TOON -uniform vec3 diffuse; -uniform vec3 emissive; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - vec4 diffuseColor = vec4( diffuse, opacity ); - ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); - vec3 totalEmissiveRadiance = emissive; - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance; - #include - #include - #include - #include - #include - #include -}`,K9=`uniform float size; -uniform float scale; -#include -#include -#include -#include -#include -#include -#ifdef USE_POINTS_UV - varying vec2 vUv; - uniform mat3 uvTransform; -#endif -void main() { - #ifdef USE_POINTS_UV - vUv = ( uvTransform * vec3( uv, 1 ) ).xy; - #endif - #include - #include - #include - #include - #include - gl_PointSize = size; - #ifdef USE_SIZEATTENUATION - bool isPerspective = isPerspectiveMatrix( projectionMatrix ); - if ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z ); - #endif - #include - #include - #include - #include -}`,z9=`uniform vec3 diffuse; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - vec3 outgoingLight = vec3( 0.0 ); - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - #include - #include - #include - outgoingLight = diffuseColor.rgb; - #include - #include - #include - #include - #include -}`,L9=`#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include -}`,T9=`uniform vec3 color; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - gl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) ); - #include - #include - #include -}`,E9=`uniform float rotation; -uniform vec2 center; -#include -#include -#include -#include -#include -void main() { - #include - vec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 ); - vec2 scale; - scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) ); - scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) ); - #ifndef USE_SIZEATTENUATION - bool isPerspective = isPerspectiveMatrix( projectionMatrix ); - if ( isPerspective ) scale *= - mvPosition.z; - #endif - vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale; - vec2 rotatedPosition; - rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y; - rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y; - mvPosition.xy += rotatedPosition; - gl_Position = projectionMatrix * mvPosition; - #include - #include - #include -}`,k9=`uniform vec3 diffuse; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - vec3 outgoingLight = vec3( 0.0 ); - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - #include - #include - #include - outgoingLight = diffuseColor.rgb; - #include - #include - #include - #include -}`,at={alphamap_fragment:hY,alphamap_pars_fragment:AY,alphatest_fragment:pY,alphatest_pars_fragment:mY,aomap_fragment:fY,aomap_pars_fragment:bY,begin_vertex:yY,beginnormal_vertex:vY,bsdfs:GY,iridescence_fragment:BY,bumpmap_pars_fragment:ZY,clipping_planes_fragment:wY,clipping_planes_pars_fragment:SY,clipping_planes_pars_vertex:xY,clipping_planes_vertex:RY,color_fragment:WY,color_pars_fragment:VY,color_pars_vertex:MY,color_vertex:NY,common:HY,cube_uv_reflection_fragment:XY,defaultnormal_vertex:YY,displacementmap_pars_vertex:FY,displacementmap_vertex:KY,emissivemap_fragment:zY,emissivemap_pars_fragment:LY,encodings_fragment:TY,encodings_pars_fragment:EY,envmap_fragment:kY,envmap_common_pars_fragment:DY,envmap_pars_fragment:UY,envmap_pars_vertex:PY,envmap_physical_pars_fragment:sF,envmap_vertex:_Y,fog_vertex:JY,fog_pars_vertex:OY,fog_fragment:QY,fog_pars_fragment:jY,gradientmap_pars_fragment:qY,lightmap_fragment:$Y,lightmap_pars_fragment:eF,lights_lambert_fragment:tF,lights_lambert_pars_fragment:nF,lights_pars_begin:iF,lights_toon_fragment:rF,lights_toon_pars_fragment:oF,lights_phong_fragment:aF,lights_phong_pars_fragment:lF,lights_physical_fragment:gF,lights_physical_pars_fragment:cF,lights_fragment_begin:IF,lights_fragment_maps:uF,lights_fragment_end:CF,logdepthbuf_fragment:dF,logdepthbuf_pars_fragment:hF,logdepthbuf_pars_vertex:AF,logdepthbuf_vertex:pF,map_fragment:mF,map_pars_fragment:fF,map_particle_fragment:bF,map_particle_pars_fragment:yF,metalnessmap_fragment:vF,metalnessmap_pars_fragment:GF,morphcolor_vertex:BF,morphnormal_vertex:ZF,morphtarget_pars_vertex:wF,morphtarget_vertex:SF,normal_fragment_begin:xF,normal_fragment_maps:RF,normal_pars_fragment:WF,normal_pars_vertex:VF,normal_vertex:MF,normalmap_pars_fragment:NF,clearcoat_normal_fragment_begin:HF,clearcoat_normal_fragment_maps:XF,clearcoat_pars_fragment:YF,iridescence_pars_fragment:FF,output_fragment:KF,packing:zF,premultiplied_alpha_fragment:LF,project_vertex:TF,dithering_fragment:EF,dithering_pars_fragment:kF,roughnessmap_fragment:DF,roughnessmap_pars_fragment:UF,shadowmap_pars_fragment:PF,shadowmap_pars_vertex:_F,shadowmap_vertex:JF,shadowmask_pars_fragment:OF,skinbase_vertex:QF,skinning_pars_vertex:jF,skinning_vertex:qF,skinnormal_vertex:$F,specularmap_fragment:e9,specularmap_pars_fragment:t9,tonemapping_fragment:n9,tonemapping_pars_fragment:i9,transmission_fragment:s9,transmission_pars_fragment:r9,uv_pars_fragment:o9,uv_pars_vertex:a9,uv_vertex:l9,worldpos_vertex:g9,background_vert:c9,background_frag:I9,backgroundCube_vert:u9,backgroundCube_frag:C9,cube_vert:d9,cube_frag:h9,depth_vert:A9,depth_frag:p9,distanceRGBA_vert:m9,distanceRGBA_frag:f9,equirect_vert:b9,equirect_frag:y9,linedashed_vert:v9,linedashed_frag:G9,meshbasic_vert:B9,meshbasic_frag:Z9,meshlambert_vert:w9,meshlambert_frag:S9,meshmatcap_vert:x9,meshmatcap_frag:R9,meshnormal_vert:W9,meshnormal_frag:V9,meshphong_vert:M9,meshphong_frag:N9,meshphysical_vert:H9,meshphysical_frag:X9,meshtoon_vert:Y9,meshtoon_frag:F9,points_vert:K9,points_frag:z9,shadow_vert:L9,shadow_frag:T9,sprite_vert:E9,sprite_frag:k9},Ye={common:{diffuse:{value:new Ne(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new Mt},alphaMap:{value:null},alphaMapTransform:{value:new Mt},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new Mt}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new Mt}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new Mt}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new Mt},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new Mt},normalScale:{value:new ne(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new Mt},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new Mt}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new Mt}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new Mt}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Ne(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new Ne(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new Mt}},sprite:{diffuse:{value:new Ne(16777215)},opacity:{value:1},center:{value:new ne(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new Mt},alphaMap:{value:null},alphaTest:{value:0}}},lr={basic:{uniforms:Ri([Ye.common,Ye.specularmap,Ye.envmap,Ye.aomap,Ye.lightmap,Ye.fog]),vertexShader:at.meshbasic_vert,fragmentShader:at.meshbasic_frag},lambert:{uniforms:Ri([Ye.common,Ye.specularmap,Ye.envmap,Ye.aomap,Ye.lightmap,Ye.emissivemap,Ye.bumpmap,Ye.normalmap,Ye.displacementmap,Ye.fog,Ye.lights,{emissive:{value:new Ne(0)}}]),vertexShader:at.meshlambert_vert,fragmentShader:at.meshlambert_frag},phong:{uniforms:Ri([Ye.common,Ye.specularmap,Ye.envmap,Ye.aomap,Ye.lightmap,Ye.emissivemap,Ye.bumpmap,Ye.normalmap,Ye.displacementmap,Ye.fog,Ye.lights,{emissive:{value:new Ne(0)},specular:{value:new Ne(1118481)},shininess:{value:30}}]),vertexShader:at.meshphong_vert,fragmentShader:at.meshphong_frag},standard:{uniforms:Ri([Ye.common,Ye.envmap,Ye.aomap,Ye.lightmap,Ye.emissivemap,Ye.bumpmap,Ye.normalmap,Ye.displacementmap,Ye.roughnessmap,Ye.metalnessmap,Ye.fog,Ye.lights,{emissive:{value:new Ne(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:at.meshphysical_vert,fragmentShader:at.meshphysical_frag},toon:{uniforms:Ri([Ye.common,Ye.aomap,Ye.lightmap,Ye.emissivemap,Ye.bumpmap,Ye.normalmap,Ye.displacementmap,Ye.gradientmap,Ye.fog,Ye.lights,{emissive:{value:new Ne(0)}}]),vertexShader:at.meshtoon_vert,fragmentShader:at.meshtoon_frag},matcap:{uniforms:Ri([Ye.common,Ye.bumpmap,Ye.normalmap,Ye.displacementmap,Ye.fog,{matcap:{value:null}}]),vertexShader:at.meshmatcap_vert,fragmentShader:at.meshmatcap_frag},points:{uniforms:Ri([Ye.points,Ye.fog]),vertexShader:at.points_vert,fragmentShader:at.points_frag},dashed:{uniforms:Ri([Ye.common,Ye.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:at.linedashed_vert,fragmentShader:at.linedashed_frag},depth:{uniforms:Ri([Ye.common,Ye.displacementmap]),vertexShader:at.depth_vert,fragmentShader:at.depth_frag},normal:{uniforms:Ri([Ye.common,Ye.bumpmap,Ye.normalmap,Ye.displacementmap,{opacity:{value:1}}]),vertexShader:at.meshnormal_vert,fragmentShader:at.meshnormal_frag},sprite:{uniforms:Ri([Ye.sprite,Ye.fog]),vertexShader:at.sprite_vert,fragmentShader:at.sprite_frag},background:{uniforms:{uvTransform:{value:new Mt},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:at.background_vert,fragmentShader:at.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1}},vertexShader:at.backgroundCube_vert,fragmentShader:at.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:at.cube_vert,fragmentShader:at.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:at.equirect_vert,fragmentShader:at.equirect_frag},distanceRGBA:{uniforms:Ri([Ye.common,Ye.displacementmap,{referencePosition:{value:new X},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:at.distanceRGBA_vert,fragmentShader:at.distanceRGBA_frag},shadow:{uniforms:Ri([Ye.lights,Ye.fog,{color:{value:new Ne(0)},opacity:{value:1}}]),vertexShader:at.shadow_vert,fragmentShader:at.shadow_frag}};lr.physical={uniforms:Ri([lr.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new Mt},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new Mt},clearcoatNormalScale:{value:new ne(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new Mt},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new Mt},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new Mt},sheen:{value:0},sheenColor:{value:new Ne(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new Mt},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new Mt},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new Mt},transmissionSamplerSize:{value:new ne},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new Mt},attenuationDistance:{value:0},attenuationColor:{value:new Ne(0)},specularColor:{value:new Ne(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new Mt},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new Mt}}]),vertexShader:at.meshphysical_vert,fragmentShader:at.meshphysical_frag};const Ld={r:0,b:0,g:0};function D9(n,e,t,i,s,r,o){const a=new Ne(0);let l=r===!0?0:1,c,u,C=null,d=0,h=null;function m(v,A){let b=!1,f=A.isScene===!0?A.background:null;switch(f&&f.isTexture&&(f=(A.backgroundBlurriness>0?t:e).get(f)),f===null?y(a,l):f&&f.isColor&&(y(f,1),b=!0),n.xr.getEnvironmentBlendMode()){case"opaque":b=!0;break;case"additive":i.buffers.color.setClear(0,0,0,1,o),b=!0;break;case"alpha-blend":i.buffers.color.setClear(0,0,0,0,o),b=!0;break}(n.autoClear||b)&&n.clear(n.autoClearColor,n.autoClearDepth,n.autoClearStencil),f&&(f.isCubeTexture||f.mapping===yc)?(u===void 0&&(u=new Un(new Ga(1,1,1),new Rt({name:"BackgroundCubeMaterial",uniforms:Ic(lr.backgroundCube.uniforms),vertexShader:lr.backgroundCube.vertexShader,fragmentShader:lr.backgroundCube.fragmentShader,side:Dn,depthTest:!1,depthWrite:!1,fog:!1})),u.geometry.deleteAttribute("normal"),u.geometry.deleteAttribute("uv"),u.onBeforeRender=function(x,R,V){this.matrixWorld.copyPosition(V.matrixWorld)},Object.defineProperty(u.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),s.update(u)),u.material.uniforms.envMap.value=f,u.material.uniforms.flipEnvMap.value=f.isCubeTexture&&f.isRenderTargetTexture===!1?-1:1,u.material.uniforms.backgroundBlurriness.value=A.backgroundBlurriness,u.material.uniforms.backgroundIntensity.value=A.backgroundIntensity,u.material.toneMapped=f.colorSpace!==yt,(C!==f||d!==f.version||h!==n.toneMapping)&&(u.material.needsUpdate=!0,C=f,d=f.version,h=n.toneMapping),u.layers.enableAll(),v.unshift(u,u.geometry,u.material,0,0,null)):f&&f.isTexture&&(c===void 0&&(c=new Un(new Ml(2,2),new Rt({name:"BackgroundMaterial",uniforms:Ic(lr.background.uniforms),vertexShader:lr.background.vertexShader,fragmentShader:lr.background.fragmentShader,side:Xr,depthTest:!1,depthWrite:!1,fog:!1})),c.geometry.deleteAttribute("normal"),Object.defineProperty(c.material,"map",{get:function(){return this.uniforms.t2D.value}}),s.update(c)),c.material.uniforms.t2D.value=f,c.material.uniforms.backgroundIntensity.value=A.backgroundIntensity,c.material.toneMapped=f.colorSpace!==yt,f.matrixAutoUpdate===!0&&f.updateMatrix(),c.material.uniforms.uvTransform.value.copy(f.matrix),(C!==f||d!==f.version||h!==n.toneMapping)&&(c.material.needsUpdate=!0,C=f,d=f.version,h=n.toneMapping),c.layers.enableAll(),v.unshift(c,c.geometry,c.material,0,0,null))}function y(v,A){v.getRGB(Ld,tW(n)),i.buffers.color.setClear(Ld.r,Ld.g,Ld.b,A,o)}return{getClearColor:function(){return a},setClearColor:function(v,A=1){a.set(v),l=A,y(a,l)},getClearAlpha:function(){return l},setClearAlpha:function(v){l=v,y(a,l)},render:m}}function U9(n,e,t,i){const s=n.getParameter(n.MAX_VERTEX_ATTRIBS),r=i.isWebGL2?null:e.get("OES_vertex_array_object"),o=i.isWebGL2||r!==null,a={},l=v(null);let c=l,u=!1;function C(q,ie,ue,le,L){let P=!1;if(o){const O=y(le,ue,ie);c!==O&&(c=O,h(c.object)),P=A(q,le,ue,L),P&&b(q,le,ue,L)}else{const O=ie.wireframe===!0;(c.geometry!==le.id||c.program!==ue.id||c.wireframe!==O)&&(c.geometry=le.id,c.program=ue.id,c.wireframe=O,P=!0)}L!==null&&t.update(L,n.ELEMENT_ARRAY_BUFFER),(P||u)&&(u=!1,V(q,ie,ue,le),L!==null&&n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,t.get(L).buffer))}function d(){return i.isWebGL2?n.createVertexArray():r.createVertexArrayOES()}function h(q){return i.isWebGL2?n.bindVertexArray(q):r.bindVertexArrayOES(q)}function m(q){return i.isWebGL2?n.deleteVertexArray(q):r.deleteVertexArrayOES(q)}function y(q,ie,ue){const le=ue.wireframe===!0;let L=a[q.id];L===void 0&&(L={},a[q.id]=L);let P=L[ie.id];P===void 0&&(P={},L[ie.id]=P);let O=P[le];return O===void 0&&(O=v(d()),P[le]=O),O}function v(q){const ie=[],ue=[],le=[];for(let L=0;L=0){const re=L[ge];let Ze=P[ge];if(Ze===void 0&&(ge==="instanceMatrix"&&q.instanceMatrix&&(Ze=q.instanceMatrix),ge==="instanceColor"&&q.instanceColor&&(Ze=q.instanceColor)),re===void 0||re.attribute!==Ze||Ze&&re.data!==Ze.data)return!0;O++}return c.attributesNum!==O||c.index!==le}function b(q,ie,ue,le){const L={},P=ie.attributes;let O=0;const ce=ue.getAttributes();for(const ge in ce)if(ce[ge].location>=0){let re=P[ge];re===void 0&&(ge==="instanceMatrix"&&q.instanceMatrix&&(re=q.instanceMatrix),ge==="instanceColor"&&q.instanceColor&&(re=q.instanceColor));const Ze={};Ze.attribute=re,re&&re.data&&(Ze.data=re.data),L[ge]=Ze,O++}c.attributes=L,c.attributesNum=O,c.index=le}function f(){const q=c.newAttributes;for(let ie=0,ue=q.length;ie=0){let te=L[ce];if(te===void 0&&(ce==="instanceMatrix"&&q.instanceMatrix&&(te=q.instanceMatrix),ce==="instanceColor"&&q.instanceColor&&(te=q.instanceColor)),te!==void 0){const re=te.normalized,Ze=te.itemSize,we=t.get(te);if(we===void 0)continue;const J=we.buffer,tt=we.type,rt=we.bytesPerElement;if(te.isInterleavedBufferAttribute){const We=te.data,ze=We.stride,ye=te.offset;if(We.isInstancedInterleavedBuffer){for(let de=0;de0&&n.getShaderPrecisionFormat(n.FRAGMENT_SHADER,n.HIGH_FLOAT).precision>0)return"highp";R="mediump"}return R==="mediump"&&n.getShaderPrecisionFormat(n.VERTEX_SHADER,n.MEDIUM_FLOAT).precision>0&&n.getShaderPrecisionFormat(n.FRAGMENT_SHADER,n.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}const o=typeof WebGL2RenderingContext<"u"&&n.constructor.name==="WebGL2RenderingContext";let a=t.precision!==void 0?t.precision:"highp";const l=r(a);l!==a&&(console.warn("THREE.WebGLRenderer:",a,"not supported, using",l,"instead."),a=l);const c=o||e.has("WEBGL_draw_buffers"),u=t.logarithmicDepthBuffer===!0,C=n.getParameter(n.MAX_TEXTURE_IMAGE_UNITS),d=n.getParameter(n.MAX_VERTEX_TEXTURE_IMAGE_UNITS),h=n.getParameter(n.MAX_TEXTURE_SIZE),m=n.getParameter(n.MAX_CUBE_MAP_TEXTURE_SIZE),y=n.getParameter(n.MAX_VERTEX_ATTRIBS),v=n.getParameter(n.MAX_VERTEX_UNIFORM_VECTORS),A=n.getParameter(n.MAX_VARYING_VECTORS),b=n.getParameter(n.MAX_FRAGMENT_UNIFORM_VECTORS),f=d>0,B=o||e.has("OES_texture_float"),S=f&&B,x=o?n.getParameter(n.MAX_SAMPLES):0;return{isWebGL2:o,drawBuffers:c,getMaxAnisotropy:s,getMaxPrecision:r,precision:a,logarithmicDepthBuffer:u,maxTextures:C,maxVertexTextures:d,maxTextureSize:h,maxCubemapSize:m,maxAttributes:y,maxVertexUniforms:v,maxVaryings:A,maxFragmentUniforms:b,vertexTextures:f,floatFragmentTextures:B,floatVertexTextures:S,maxSamples:x}}function J9(n){const e=this;let t=null,i=0,s=!1,r=!1;const o=new Uo,a=new Mt,l={value:null,needsUpdate:!1};this.uniform=l,this.numPlanes=0,this.numIntersection=0,this.init=function(C,d){const h=C.length!==0||d||i!==0||s;return s=d,i=C.length,h},this.beginShadows=function(){r=!0,u(null)},this.endShadows=function(){r=!1},this.setGlobalState=function(C,d){t=u(C,d,0)},this.setState=function(C,d,h){const m=C.clippingPlanes,y=C.clipIntersection,v=C.clipShadows,A=n.get(C);if(!s||m===null||m.length===0||r&&!v)r?u(null):c();else{const b=r?0:i,f=b*4;let B=A.clippingState||null;l.value=B,B=u(m,d,f,h);for(let S=0;S!==f;++S)B[S]=t[S];A.clippingState=B,this.numIntersection=y?this.numPlanes:0,this.numPlanes+=b}};function c(){l.value!==t&&(l.value=t,l.needsUpdate=i>0),e.numPlanes=i,e.numIntersection=0}function u(C,d,h,m){const y=C!==null?C.length:0;let v=null;if(y!==0){if(v=l.value,m!==!0||v===null){const A=h+y*4,b=d.matrixWorldInverse;a.getNormalMatrix(b),(v===null||v.length0){const c=new OA(l.height/2);return c.fromEquirectangularTexture(n,o),e.set(o,c),o.addEventListener("dispose",s),t(c.texture,o.mapping)}else return null}}return o}function s(o){const a=o.target;a.removeEventListener("dispose",s);const l=e.get(a);l!==void 0&&(e.delete(a),l.dispose())}function r(){e=new WeakMap}return{get:i,dispose:r}}class uo extends vc{constructor(e=-1,t=1,i=1,s=-1,r=.1,o=2e3){super(),this.isOrthographicCamera=!0,this.type="OrthographicCamera",this.zoom=1,this.view=null,this.left=e,this.right=t,this.top=i,this.bottom=s,this.near=r,this.far=o,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.near=e.near,this.far=e.far,this.zoom=e.zoom,this.view=e.view===null?null:Object.assign({},e.view),this}setViewOffset(e,t,i,s,r,o){this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=i,this.view.offsetY=s,this.view.width=r,this.view.height=o,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const e=(this.right-this.left)/(2*this.zoom),t=(this.top-this.bottom)/(2*this.zoom),i=(this.right+this.left)/2,s=(this.top+this.bottom)/2;let r=i-e,o=i+e,a=s+t,l=s-t;if(this.view!==null&&this.view.enabled){const c=(this.right-this.left)/this.view.fullWidth/this.zoom,u=(this.top-this.bottom)/this.view.fullHeight/this.zoom;r+=c*this.view.offsetX,o=r+c*this.view.width,a-=u*this.view.offsetY,l=a-u*this.view.height}this.projectionMatrix.makeOrthographic(r,o,a,l,this.near,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){const t=super.toJSON(e);return t.object.zoom=this.zoom,t.object.left=this.left,t.object.right=this.right,t.object.top=this.top,t.object.bottom=this.bottom,t.object.near=this.near,t.object.far=this.far,this.view!==null&&(t.object.view=Object.assign({},this.view)),t}}const zg=4,Q2=[.125,.215,.35,.446,.526,.582],$a=20,lf=new uo,j2=new Ne;let gf=null;const Qa=(1+Math.sqrt(5))/2,dg=1/Qa,q2=[new X(1,1,1),new X(-1,1,1),new X(1,1,-1),new X(-1,1,-1),new X(0,Qa,dg),new X(0,Qa,-dg),new X(dg,0,Qa),new X(-dg,0,Qa),new X(Qa,dg,0),new X(-Qa,dg,0)];class vA{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(e,t=0,i=.1,s=100){gf=this._renderer.getRenderTarget(),this._setSize(256);const r=this._allocateTargets();return r.depthBuffer=!0,this._sceneToCubeUV(e,i,s,r),t>0&&this._blur(r,0,0,t),this._applyPMREM(r),this._cleanup(r),r}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}compileCubemapShader(){this._cubemapMaterial===null&&(this._cubemapMaterial=tZ(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){this._equirectMaterial===null&&(this._equirectMaterial=eZ(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),this._cubemapMaterial!==null&&this._cubemapMaterial.dispose(),this._equirectMaterial!==null&&this._equirectMaterial.dispose()}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){this._blurMaterial!==null&&this._blurMaterial.dispose(),this._pingPongRenderTarget!==null&&this._pingPongRenderTarget.dispose();for(let e=0;e2?f:0,f,f),u.setRenderTarget(s),y&&u.render(m,a),u.render(e,a)}m.geometry.dispose(),m.material.dispose(),u.toneMapping=d,u.autoClear=C,e.background=v}_textureToCubeUV(e,t){const i=this._renderer,s=e.mapping===Ca||e.mapping===da;s?(this._cubemapMaterial===null&&(this._cubemapMaterial=tZ()),this._cubemapMaterial.uniforms.flipEnvMap.value=e.isRenderTargetTexture===!1?-1:1):this._equirectMaterial===null&&(this._equirectMaterial=eZ());const r=s?this._cubemapMaterial:this._equirectMaterial,o=new Un(this._lodPlanes[0],r),a=r.uniforms;a.envMap.value=e;const l=this._cubeSize;Td(t,0,0,3*l,2*l),i.setRenderTarget(t),i.render(o,lf)}_applyPMREM(e){const t=this._renderer,i=t.autoClear;t.autoClear=!1;for(let s=1;s$a&&console.warn(`sigmaRadians, ${r}, is too large and will clip, as it requested ${v} samples when the maximum is set to ${$a}`);const A=[];let b=0;for(let R=0;R<$a;++R){const V=R/y,Z=Math.exp(-V*V/2);A.push(Z),R===0?b+=Z:Rf-zg?s-f+zg:0),x=4*(this._cubeSize-B);Td(t,S,x,3*B,2*B),l.setRenderTarget(t),l.render(C,lf)}}function Q9(n){const e=[],t=[],i=[];let s=n;const r=n-zg+1+Q2.length;for(let o=0;on-zg?l=Q2[o-n+zg-1]:o===0&&(l=0),i.push(l);const c=1/(a-2),u=-c,C=1+c,d=[u,u,C,u,C,C,u,u,C,C,u,C],h=6,m=6,y=3,v=2,A=1,b=new Float32Array(y*m*h),f=new Float32Array(v*m*h),B=new Float32Array(A*m*h);for(let x=0;x2?0:-1,Z=[R,V,0,R+2/3,V,0,R+2/3,V+1,0,R,V,0,R+2/3,V+1,0,R,V+1,0];b.set(Z,y*m*x),f.set(d,v*m*x);const M=[x,x,x,x,x,x];B.set(M,A*m*x)}const S=new vt;S.setAttribute("position",new Dt(b,y)),S.setAttribute("uv",new Dt(f,v)),S.setAttribute("faceIndex",new Dt(B,A)),e.push(S),s>zg&&s--}return{lodPlanes:e,sizeLods:t,sigmas:i}}function $2(n,e,t){const i=new Nt(n,e,t);return i.texture.mapping=yc,i.texture.name="PMREM.cubeUv",i.scissorTest=!0,i}function Td(n,e,t,i,s){n.viewport.set(e,t,i,s),n.scissor.set(e,t,i,s)}function j9(n,e,t){const i=new Float32Array($a),s=new X(0,1,0);return new Rt({name:"SphericalGaussianBlur",defines:{n:$a,CUBEUV_TEXEL_WIDTH:1/e,CUBEUV_TEXEL_HEIGHT:1/t,CUBEUV_MAX_MIP:`${n}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:i},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:s}},vertexShader:qy(),fragmentShader:` - - precision mediump float; - precision mediump int; - - varying vec3 vOutputDirection; - - uniform sampler2D envMap; - uniform int samples; - uniform float weights[ n ]; - uniform bool latitudinal; - uniform float dTheta; - uniform float mipInt; - uniform vec3 poleAxis; - - #define ENVMAP_TYPE_CUBE_UV - #include - - vec3 getSample( float theta, vec3 axis ) { - - float cosTheta = cos( theta ); - // Rodrigues' axis-angle rotation - vec3 sampleDirection = vOutputDirection * cosTheta - + cross( axis, vOutputDirection ) * sin( theta ) - + axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta ); - - return bilinearCubeUV( envMap, sampleDirection, mipInt ); - - } - - void main() { - - vec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection ); - - if ( all( equal( axis, vec3( 0.0 ) ) ) ) { - - axis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x ); - - } - - axis = normalize( axis ); - - gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 ); - gl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis ); - - for ( int i = 1; i < n; i++ ) { - - if ( i >= samples ) { - - break; - - } - - float theta = dTheta * float( i ); - gl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis ); - gl_FragColor.rgb += weights[ i ] * getSample( theta, axis ); - - } - - } - `,blending:sn,depthTest:!1,depthWrite:!1})}function eZ(){return new Rt({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:qy(),fragmentShader:` - - precision mediump float; - precision mediump int; - - varying vec3 vOutputDirection; - - uniform sampler2D envMap; - - #include - - void main() { - - vec3 outputDirection = normalize( vOutputDirection ); - vec2 uv = equirectUv( outputDirection ); - - gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 ); - - } - `,blending:sn,depthTest:!1,depthWrite:!1})}function tZ(){return new Rt({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:qy(),fragmentShader:` - - precision mediump float; - precision mediump int; - - uniform float flipEnvMap; - - varying vec3 vOutputDirection; - - uniform samplerCube envMap; - - void main() { - - gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) ); - - } - `,blending:sn,depthTest:!1,depthWrite:!1})}function qy(){return` - - precision mediump float; - precision mediump int; - - attribute float faceIndex; - - varying vec3 vOutputDirection; - - // RH coordinate system; PMREM face-indexing convention - vec3 getDirection( vec2 uv, float face ) { - - uv = 2.0 * uv - 1.0; - - vec3 direction = vec3( uv, 1.0 ); - - if ( face == 0.0 ) { - - direction = direction.zyx; // ( 1, v, u ) pos x - - } else if ( face == 1.0 ) { - - direction = direction.xzy; - direction.xz *= -1.0; // ( -u, 1, -v ) pos y - - } else if ( face == 2.0 ) { - - direction.x *= -1.0; // ( -u, v, 1 ) pos z - - } else if ( face == 3.0 ) { - - direction = direction.zyx; - direction.xz *= -1.0; // ( -1, v, -u ) neg x - - } else if ( face == 4.0 ) { - - direction = direction.xzy; - direction.xy *= -1.0; // ( -u, -1, v ) neg y - - } else if ( face == 5.0 ) { - - direction.z *= -1.0; // ( u, v, -1 ) neg z - - } - - return direction; - - } - - void main() { - - vOutputDirection = getDirection( uv, faceIndex ); - gl_Position = vec4( position, 1.0 ); - - } - `}function q9(n){let e=new WeakMap,t=null;function i(a){if(a&&a.isTexture){const l=a.mapping,c=l===yu||l===vu,u=l===Ca||l===da;if(c||u)if(a.isRenderTargetTexture&&a.needsPMREMUpdate===!0){a.needsPMREMUpdate=!1;let C=e.get(a);return t===null&&(t=new vA(n)),C=c?t.fromEquirectangular(a,C):t.fromCubemap(a,C),e.set(a,C),C.texture}else{if(e.has(a))return e.get(a).texture;{const C=a.image;if(c&&C&&C.height>0||u&&C&&s(C)){t===null&&(t=new vA(n));const d=c?t.fromEquirectangular(a):t.fromCubemap(a);return e.set(a,d),a.addEventListener("dispose",r),d.texture}else return null}}}return a}function s(a){let l=0;const c=6;for(let u=0;ue.maxTextureSize&&(M=Math.ceil(Z/e.maxTextureSize),Z=e.maxTextureSize);const H=new Float32Array(Z*M*4*m),U=new JA(H,Z,M,m);U.type=Rn,U.needsUpdate=!0;const D=V*4;for(let ie=0;ie0)return n;const s=e*t;let r=nZ[s];if(r===void 0&&(r=new Float32Array(s),nZ[s]=r),e!==0){i.toArray(r,0);for(let o=1,a=0;o!==e;++o)a+=t,n[o].toArray(r,a)}return r}function Jn(n,e){if(n.length!==e.length)return!1;for(let t=0,i=n.length;t":" "} ${a}: ${t[o]}`)}return i.join(` -`)}function $K(n){switch(n){case Cr:return["Linear","( value )"];case yt:return["sRGB","( value )"];default:return console.warn("THREE.WebGLProgram: Unsupported color space:",n),["Linear","( value )"]}}function gZ(n,e,t){const i=n.getShaderParameter(e,n.COMPILE_STATUS),s=n.getShaderInfoLog(e).trim();if(i&&s==="")return"";const r=/ERROR: 0:(\d+)/.exec(s);if(r){const o=parseInt(r[1]);return t.toUpperCase()+` - -`+s+` - -`+qK(n.getShaderSource(e),o)}else return s}function ez(n,e){const t=$K(e);return"vec4 "+n+"( vec4 value ) { return LinearTo"+t[0]+t[1]+"; }"}function tz(n,e){let t;switch(e){case S1:t="Linear";break;case x1:t="Reinhard";break;case R1:t="OptimizedCineon";break;case Ly:t="ACESFilmic";break;case W1:t="Custom";break;default:console.warn("THREE.WebGLProgram: Unsupported toneMapping:",e),t="Linear"}return"vec3 "+n+"( vec3 color ) { return "+t+"ToneMapping( color ); }"}function nz(n){return[n.extensionDerivatives||n.envMapCubeUVHeight||n.bumpMap||n.normalMapTangentSpace||n.clearcoatNormalMap||n.flatShading||n.shaderID==="physical"?"#extension GL_OES_standard_derivatives : enable":"",(n.extensionFragDepth||n.logarithmicDepthBuffer)&&n.rendererExtensionFragDepth?"#extension GL_EXT_frag_depth : enable":"",n.extensionDrawBuffers&&n.rendererExtensionDrawBuffers?"#extension GL_EXT_draw_buffers : require":"",(n.extensionShaderTextureLOD||n.envMap||n.transmission)&&n.rendererExtensionShaderTextureLod?"#extension GL_EXT_shader_texture_lod : enable":""].filter(MI).join(` -`)}function iz(n){const e=[];for(const t in n){const i=n[t];i!==!1&&e.push("#define "+t+" "+i)}return e.join(` -`)}function sz(n,e){const t={},i=n.getProgramParameter(e,n.ACTIVE_ATTRIBUTES);for(let s=0;s/gm;function db(n){return n.replace(rz,oz)}function oz(n,e){const t=at[e];if(t===void 0)throw new Error("Can not resolve #include <"+e+">");return db(t)}const az=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function uZ(n){return n.replace(az,lz)}function lz(n,e,t,i){let s="";for(let r=parseInt(e);r0&&(v+=` -`),A=[h,m].filter(MI).join(` -`),A.length>0&&(A+=` -`)):(v=[CZ(t),"#define SHADER_NAME "+t.shaderName,m,t.instancing?"#define USE_INSTANCING":"",t.instancingColor?"#define USE_INSTANCING_COLOR":"",t.useFog&&t.fog?"#define USE_FOG":"",t.useFog&&t.fogExp2?"#define FOG_EXP2":"",t.map?"#define USE_MAP":"",t.envMap?"#define USE_ENVMAP":"",t.envMap?"#define "+u:"",t.lightMap?"#define USE_LIGHTMAP":"",t.aoMap?"#define USE_AOMAP":"",t.bumpMap?"#define USE_BUMPMAP":"",t.normalMap?"#define USE_NORMALMAP":"",t.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",t.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",t.displacementMap?"#define USE_DISPLACEMENTMAP":"",t.emissiveMap?"#define USE_EMISSIVEMAP":"",t.clearcoatMap?"#define USE_CLEARCOATMAP":"",t.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",t.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",t.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",t.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",t.specularMap?"#define USE_SPECULARMAP":"",t.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",t.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",t.roughnessMap?"#define USE_ROUGHNESSMAP":"",t.metalnessMap?"#define USE_METALNESSMAP":"",t.alphaMap?"#define USE_ALPHAMAP":"",t.transmission?"#define USE_TRANSMISSION":"",t.transmissionMap?"#define USE_TRANSMISSIONMAP":"",t.thicknessMap?"#define USE_THICKNESSMAP":"",t.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",t.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",t.mapUv?"#define MAP_UV "+t.mapUv:"",t.alphaMapUv?"#define ALPHAMAP_UV "+t.alphaMapUv:"",t.lightMapUv?"#define LIGHTMAP_UV "+t.lightMapUv:"",t.aoMapUv?"#define AOMAP_UV "+t.aoMapUv:"",t.emissiveMapUv?"#define EMISSIVEMAP_UV "+t.emissiveMapUv:"",t.bumpMapUv?"#define BUMPMAP_UV "+t.bumpMapUv:"",t.normalMapUv?"#define NORMALMAP_UV "+t.normalMapUv:"",t.displacementMapUv?"#define DISPLACEMENTMAP_UV "+t.displacementMapUv:"",t.metalnessMapUv?"#define METALNESSMAP_UV "+t.metalnessMapUv:"",t.roughnessMapUv?"#define ROUGHNESSMAP_UV "+t.roughnessMapUv:"",t.clearcoatMapUv?"#define CLEARCOATMAP_UV "+t.clearcoatMapUv:"",t.clearcoatNormalMapUv?"#define CLEARCOAT_NORMALMAP_UV "+t.clearcoatNormalMapUv:"",t.clearcoatRoughnessMapUv?"#define CLEARCOAT_ROUGHNESSMAP_UV "+t.clearcoatRoughnessMapUv:"",t.iridescenceMapUv?"#define IRIDESCENCEMAP_UV "+t.iridescenceMapUv:"",t.iridescenceThicknessMapUv?"#define IRIDESCENCE_THICKNESSMAP_UV "+t.iridescenceThicknessMapUv:"",t.sheenColorMapUv?"#define SHEEN_COLORMAP_UV "+t.sheenColorMapUv:"",t.sheenRoughnessMapUv?"#define SHEEN_ROUGHNESSMAP_UV "+t.sheenRoughnessMapUv:"",t.specularMapUv?"#define SPECULARMAP_UV "+t.specularMapUv:"",t.specularColorMapUv?"#define SPECULAR_COLORMAP_UV "+t.specularColorMapUv:"",t.specularIntensityMapUv?"#define SPECULAR_INTENSITYMAP_UV "+t.specularIntensityMapUv:"",t.transmissionMapUv?"#define TRANSMISSIONMAP_UV "+t.transmissionMapUv:"",t.thicknessMapUv?"#define THICKNESSMAP_UV "+t.thicknessMapUv:"",t.vertexTangents?"#define USE_TANGENT":"",t.vertexColors?"#define USE_COLOR":"",t.vertexAlphas?"#define USE_COLOR_ALPHA":"",t.vertexUv1s?"#define USE_UV1":"",t.vertexUv2s?"#define USE_UV2":"",t.vertexUv3s?"#define USE_UV3":"",t.pointsUvs?"#define USE_POINTS_UV":"",t.flatShading?"#define FLAT_SHADED":"",t.skinning?"#define USE_SKINNING":"",t.morphTargets?"#define USE_MORPHTARGETS":"",t.morphNormals&&t.flatShading===!1?"#define USE_MORPHNORMALS":"",t.morphColors&&t.isWebGL2?"#define USE_MORPHCOLORS":"",t.morphTargetsCount>0&&t.isWebGL2?"#define MORPHTARGETS_TEXTURE":"",t.morphTargetsCount>0&&t.isWebGL2?"#define MORPHTARGETS_TEXTURE_STRIDE "+t.morphTextureStride:"",t.morphTargetsCount>0&&t.isWebGL2?"#define MORPHTARGETS_COUNT "+t.morphTargetsCount:"",t.doubleSided?"#define DOUBLE_SIDED":"",t.flipSided?"#define FLIP_SIDED":"",t.shadowMapEnabled?"#define USE_SHADOWMAP":"",t.shadowMapEnabled?"#define "+l:"",t.sizeAttenuation?"#define USE_SIZEATTENUATION":"",t.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",t.logarithmicDepthBuffer&&t.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING"," attribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR"," attribute vec3 instanceColor;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_UV1"," attribute vec2 uv1;","#endif","#ifdef USE_UV2"," attribute vec2 uv2;","#endif","#ifdef USE_UV3"," attribute vec2 uv3;","#endif","#ifdef USE_TANGENT"," attribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )"," attribute vec4 color;","#elif defined( USE_COLOR )"," attribute vec3 color;","#endif","#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )"," attribute vec3 morphTarget0;"," attribute vec3 morphTarget1;"," attribute vec3 morphTarget2;"," attribute vec3 morphTarget3;"," #ifdef USE_MORPHNORMALS"," attribute vec3 morphNormal0;"," attribute vec3 morphNormal1;"," attribute vec3 morphNormal2;"," attribute vec3 morphNormal3;"," #else"," attribute vec3 morphTarget4;"," attribute vec3 morphTarget5;"," attribute vec3 morphTarget6;"," attribute vec3 morphTarget7;"," #endif","#endif","#ifdef USE_SKINNING"," attribute vec4 skinIndex;"," attribute vec4 skinWeight;","#endif",` -`].filter(MI).join(` -`),A=[h,CZ(t),"#define SHADER_NAME "+t.shaderName,m,t.useFog&&t.fog?"#define USE_FOG":"",t.useFog&&t.fogExp2?"#define FOG_EXP2":"",t.map?"#define USE_MAP":"",t.matcap?"#define USE_MATCAP":"",t.envMap?"#define USE_ENVMAP":"",t.envMap?"#define "+c:"",t.envMap?"#define "+u:"",t.envMap?"#define "+C:"",d?"#define CUBEUV_TEXEL_WIDTH "+d.texelWidth:"",d?"#define CUBEUV_TEXEL_HEIGHT "+d.texelHeight:"",d?"#define CUBEUV_MAX_MIP "+d.maxMip+".0":"",t.lightMap?"#define USE_LIGHTMAP":"",t.aoMap?"#define USE_AOMAP":"",t.bumpMap?"#define USE_BUMPMAP":"",t.normalMap?"#define USE_NORMALMAP":"",t.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",t.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",t.emissiveMap?"#define USE_EMISSIVEMAP":"",t.clearcoat?"#define USE_CLEARCOAT":"",t.clearcoatMap?"#define USE_CLEARCOATMAP":"",t.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",t.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",t.iridescence?"#define USE_IRIDESCENCE":"",t.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",t.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",t.specularMap?"#define USE_SPECULARMAP":"",t.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",t.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",t.roughnessMap?"#define USE_ROUGHNESSMAP":"",t.metalnessMap?"#define USE_METALNESSMAP":"",t.alphaMap?"#define USE_ALPHAMAP":"",t.alphaTest?"#define USE_ALPHATEST":"",t.sheen?"#define USE_SHEEN":"",t.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",t.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",t.transmission?"#define USE_TRANSMISSION":"",t.transmissionMap?"#define USE_TRANSMISSIONMAP":"",t.thicknessMap?"#define USE_THICKNESSMAP":"",t.vertexTangents?"#define USE_TANGENT":"",t.vertexColors||t.instancingColor?"#define USE_COLOR":"",t.vertexAlphas?"#define USE_COLOR_ALPHA":"",t.vertexUv1s?"#define USE_UV1":"",t.vertexUv2s?"#define USE_UV2":"",t.vertexUv3s?"#define USE_UV3":"",t.pointsUvs?"#define USE_POINTS_UV":"",t.gradientMap?"#define USE_GRADIENTMAP":"",t.flatShading?"#define FLAT_SHADED":"",t.doubleSided?"#define DOUBLE_SIDED":"",t.flipSided?"#define FLIP_SIDED":"",t.shadowMapEnabled?"#define USE_SHADOWMAP":"",t.shadowMapEnabled?"#define "+l:"",t.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",t.useLegacyLights?"#define LEGACY_LIGHTS":"",t.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",t.logarithmicDepthBuffer&&t.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",t.toneMapping!==Ir?"#define TONE_MAPPING":"",t.toneMapping!==Ir?at.tonemapping_pars_fragment:"",t.toneMapping!==Ir?tz("toneMapping",t.toneMapping):"",t.dithering?"#define DITHERING":"",t.opaque?"#define OPAQUE":"",at.encodings_pars_fragment,ez("linearToOutputTexel",t.outputColorSpace),t.useDepthPacking?"#define DEPTH_PACKING "+t.depthPacking:"",` -`].filter(MI).join(` -`)),o=db(o),o=cZ(o,t),o=IZ(o,t),a=db(a),a=cZ(a,t),a=IZ(a,t),o=uZ(o),a=uZ(a),t.isWebGL2&&t.isRawShaderMaterial!==!0&&(b=`#version 300 es -`,v=["precision mediump sampler2DArray;","#define attribute in","#define varying out","#define texture2D texture"].join(` -`)+` -`+v,A=["#define varying in",t.glslVersion===bA?"":"layout(location = 0) out highp vec4 pc_fragColor;",t.glslVersion===bA?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join(` -`)+` -`+A);const f=b+v+o,B=b+A+a,S=lZ(s,s.VERTEX_SHADER,f),x=lZ(s,s.FRAGMENT_SHADER,B);if(s.attachShader(y,S),s.attachShader(y,x),t.index0AttributeName!==void 0?s.bindAttribLocation(y,0,t.index0AttributeName):t.morphTargets===!0&&s.bindAttribLocation(y,0,"position"),s.linkProgram(y),n.debug.checkShaderErrors){const Z=s.getProgramInfoLog(y).trim(),M=s.getShaderInfoLog(S).trim(),H=s.getShaderInfoLog(x).trim();let U=!0,D=!0;if(s.getProgramParameter(y,s.LINK_STATUS)===!1)if(U=!1,typeof n.debug.onShaderError=="function")n.debug.onShaderError(s,y,S,x);else{const q=gZ(s,S,"vertex"),ie=gZ(s,x,"fragment");console.error("THREE.WebGLProgram: Shader Error "+s.getError()+" - VALIDATE_STATUS "+s.getProgramParameter(y,s.VALIDATE_STATUS)+` - -Program Info Log: `+Z+` -`+q+` -`+ie)}else Z!==""?console.warn("THREE.WebGLProgram: Program Info Log:",Z):(M===""||H==="")&&(D=!1);D&&(this.diagnostics={runnable:U,programLog:Z,vertexShader:{log:M,prefix:v},fragmentShader:{log:H,prefix:A}})}s.deleteShader(S),s.deleteShader(x);let R;this.getUniforms=function(){return R===void 0&&(R=new Th(s,y)),R};let V;return this.getAttributes=function(){return V===void 0&&(V=sz(s,y)),V},this.destroy=function(){i.releaseStatesOfProgram(this),s.deleteProgram(y),this.program=void 0},this.name=t.shaderName,this.id=jK++,this.cacheKey=e,this.usedTimes=1,this.program=y,this.vertexShader=S,this.fragmentShader=x,this}let hz=0;class Az{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(e){const t=e.vertexShader,i=e.fragmentShader,s=this._getShaderStage(t),r=this._getShaderStage(i),o=this._getShaderCacheForMaterial(e);return o.has(s)===!1&&(o.add(s),s.usedTimes++),o.has(r)===!1&&(o.add(r),r.usedTimes++),this}remove(e){const t=this.materialCache.get(e);for(const i of t)i.usedTimes--,i.usedTimes===0&&this.shaderCache.delete(i.code);return this.materialCache.delete(e),this}getVertexShaderID(e){return this._getShaderStage(e.vertexShader).id}getFragmentShaderID(e){return this._getShaderStage(e.fragmentShader).id}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(e){const t=this.materialCache;let i=t.get(e);return i===void 0&&(i=new Set,t.set(e,i)),i}_getShaderStage(e){const t=this.shaderCache;let i=t.get(e);return i===void 0&&(i=new pz(e),t.set(e,i)),i}}class pz{constructor(e){this.id=hz++,this.code=e,this.usedTimes=0}}function mz(n,e,t,i,s,r,o){const a=new Al,l=new Az,c=[],u=s.isWebGL2,C=s.logarithmicDepthBuffer,d=s.vertexTextures;let h=s.precision;const m={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distanceRGBA",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"toon",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"};function y(Z){return Z===1?"uv1":Z===2?"uv2":Z===3?"uv3":"uv"}function v(Z,M,H,U,D){const q=U.fog,ie=D.geometry,ue=Z.isMeshStandardMaterial?U.environment:null,le=(Z.isMeshStandardMaterial?t:e).get(Z.envMap||ue),L=le&&le.mapping===yc?le.image.height:null,P=m[Z.type];Z.precision!==null&&(h=s.getMaxPrecision(Z.precision),h!==Z.precision&&console.warn("THREE.WebGLProgram.getParameters:",Z.precision,"not supported, using",h,"instead."));const O=ie.morphAttributes.position||ie.morphAttributes.normal||ie.morphAttributes.color,ce=O!==void 0?O.length:0;let ge=0;ie.morphAttributes.position!==void 0&&(ge=1),ie.morphAttributes.normal!==void 0&&(ge=2),ie.morphAttributes.color!==void 0&&(ge=3);let te,re,Ze,we;if(P){const Ut=lr[P];te=Ut.vertexShader,re=Ut.fragmentShader}else te=Z.vertexShader,re=Z.fragmentShader,l.update(Z),Ze=l.getVertexShaderID(Z),we=l.getFragmentShaderID(Z);const J=n.getRenderTarget(),tt=D.isInstancedMesh===!0,rt=!!Z.map,We=!!Z.matcap,ze=!!le,ye=!!Z.aoMap,de=!!Z.lightMap,Be=!!Z.bumpMap,ke=!!Z.normalMap,He=!!Z.displacementMap,it=!!Z.emissiveMap,nt=!!Z.metalnessMap,Je=!!Z.roughnessMap,It=Z.clearcoat>0,Ht=Z.iridescence>0,k=Z.sheen>0,Y=Z.transmission>0,Ie=It&&!!Z.clearcoatMap,Se=It&&!!Z.clearcoatNormalMap,xe=It&&!!Z.clearcoatRoughnessMap,Xe=Ht&&!!Z.iridescenceMap,lt=Ht&&!!Z.iridescenceThicknessMap,Te=k&&!!Z.sheenColorMap,me=k&&!!Z.sheenRoughnessMap,Pe=!!Z.specularMap,_=!!Z.specularColorMap,pe=!!Z.specularIntensityMap,ve=Y&&!!Z.transmissionMap,Me=Y&&!!Z.thicknessMap,ot=!!Z.gradientMap,bt=!!Z.alphaMap,qt=Z.alphaTest>0,Q=!!Z.extensions,he=!!ie.attributes.uv1,Ge=!!ie.attributes.uv2,Ee=!!ie.attributes.uv3;return{isWebGL2:u,shaderID:P,shaderName:Z.type,vertexShader:te,fragmentShader:re,defines:Z.defines,customVertexShaderID:Ze,customFragmentShaderID:we,isRawShaderMaterial:Z.isRawShaderMaterial===!0,glslVersion:Z.glslVersion,precision:h,instancing:tt,instancingColor:tt&&D.instanceColor!==null,supportsVertexTextures:d,outputColorSpace:J===null?n.outputColorSpace:J.isXRRenderTarget===!0?J.texture.colorSpace:Cr,map:rt,matcap:We,envMap:ze,envMapMode:ze&&le.mapping,envMapCubeUVHeight:L,aoMap:ye,lightMap:de,bumpMap:Be,normalMap:ke,displacementMap:d&&He,emissiveMap:it,normalMapObjectSpace:ke&&Z.normalMapType===P1,normalMapTangentSpace:ke&&Z.normalMapType===vo,metalnessMap:nt,roughnessMap:Je,clearcoat:It,clearcoatMap:Ie,clearcoatNormalMap:Se,clearcoatRoughnessMap:xe,iridescence:Ht,iridescenceMap:Xe,iridescenceThicknessMap:lt,sheen:k,sheenColorMap:Te,sheenRoughnessMap:me,specularMap:Pe,specularColorMap:_,specularIntensityMap:pe,transmission:Y,transmissionMap:ve,thicknessMap:Me,gradientMap:ot,opaque:Z.transparent===!1&&Z.blending===Cl,alphaMap:bt,alphaTest:qt,combine:Z.combine,mapUv:rt&&y(Z.map.channel),aoMapUv:ye&&y(Z.aoMap.channel),lightMapUv:de&&y(Z.lightMap.channel),bumpMapUv:Be&&y(Z.bumpMap.channel),normalMapUv:ke&&y(Z.normalMap.channel),displacementMapUv:He&&y(Z.displacementMap.channel),emissiveMapUv:it&&y(Z.emissiveMap.channel),metalnessMapUv:nt&&y(Z.metalnessMap.channel),roughnessMapUv:Je&&y(Z.roughnessMap.channel),clearcoatMapUv:Ie&&y(Z.clearcoatMap.channel),clearcoatNormalMapUv:Se&&y(Z.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:xe&&y(Z.clearcoatRoughnessMap.channel),iridescenceMapUv:Xe&&y(Z.iridescenceMap.channel),iridescenceThicknessMapUv:lt&&y(Z.iridescenceThicknessMap.channel),sheenColorMapUv:Te&&y(Z.sheenColorMap.channel),sheenRoughnessMapUv:me&&y(Z.sheenRoughnessMap.channel),specularMapUv:Pe&&y(Z.specularMap.channel),specularColorMapUv:_&&y(Z.specularColorMap.channel),specularIntensityMapUv:pe&&y(Z.specularIntensityMap.channel),transmissionMapUv:ve&&y(Z.transmissionMap.channel),thicknessMapUv:Me&&y(Z.thicknessMap.channel),alphaMapUv:bt&&y(Z.alphaMap.channel),vertexTangents:ke&&!!ie.attributes.tangent,vertexColors:Z.vertexColors,vertexAlphas:Z.vertexColors===!0&&!!ie.attributes.color&&ie.attributes.color.itemSize===4,vertexUv1s:he,vertexUv2s:Ge,vertexUv3s:Ee,pointsUvs:D.isPoints===!0&&!!ie.attributes.uv&&(rt||bt),fog:!!q,useFog:Z.fog===!0,fogExp2:q&&q.isFogExp2,flatShading:Z.flatShading===!0,sizeAttenuation:Z.sizeAttenuation===!0,logarithmicDepthBuffer:C,skinning:D.isSkinnedMesh===!0,morphTargets:ie.morphAttributes.position!==void 0,morphNormals:ie.morphAttributes.normal!==void 0,morphColors:ie.morphAttributes.color!==void 0,morphTargetsCount:ce,morphTextureStride:ge,numDirLights:M.directional.length,numPointLights:M.point.length,numSpotLights:M.spot.length,numSpotLightMaps:M.spotLightMap.length,numRectAreaLights:M.rectArea.length,numHemiLights:M.hemi.length,numDirLightShadows:M.directionalShadowMap.length,numPointLightShadows:M.pointShadowMap.length,numSpotLightShadows:M.spotShadowMap.length,numSpotLightShadowsWithMaps:M.numSpotLightShadowsWithMaps,numClippingPlanes:o.numPlanes,numClipIntersection:o.numIntersection,dithering:Z.dithering,shadowMapEnabled:n.shadowMap.enabled&&H.length>0,shadowMapType:n.shadowMap.type,toneMapping:Z.toneMapped?n.toneMapping:Ir,useLegacyLights:n.useLegacyLights,premultipliedAlpha:Z.premultipliedAlpha,doubleSided:Z.side===Oi,flipSided:Z.side===Dn,useDepthPacking:Z.depthPacking>=0,depthPacking:Z.depthPacking||0,index0AttributeName:Z.index0AttributeName,extensionDerivatives:Q&&Z.extensions.derivatives===!0,extensionFragDepth:Q&&Z.extensions.fragDepth===!0,extensionDrawBuffers:Q&&Z.extensions.drawBuffers===!0,extensionShaderTextureLOD:Q&&Z.extensions.shaderTextureLOD===!0,rendererExtensionFragDepth:u||i.has("EXT_frag_depth"),rendererExtensionDrawBuffers:u||i.has("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:u||i.has("EXT_shader_texture_lod"),customProgramCacheKey:Z.customProgramCacheKey()}}function A(Z){const M=[];if(Z.shaderID?M.push(Z.shaderID):(M.push(Z.customVertexShaderID),M.push(Z.customFragmentShaderID)),Z.defines!==void 0)for(const H in Z.defines)M.push(H),M.push(Z.defines[H]);return Z.isRawShaderMaterial===!1&&(b(M,Z),f(M,Z),M.push(n.outputColorSpace)),M.push(Z.customProgramCacheKey),M.join()}function b(Z,M){Z.push(M.precision),Z.push(M.outputColorSpace),Z.push(M.envMapMode),Z.push(M.envMapCubeUVHeight),Z.push(M.mapUv),Z.push(M.alphaMapUv),Z.push(M.lightMapUv),Z.push(M.aoMapUv),Z.push(M.bumpMapUv),Z.push(M.normalMapUv),Z.push(M.displacementMapUv),Z.push(M.emissiveMapUv),Z.push(M.metalnessMapUv),Z.push(M.roughnessMapUv),Z.push(M.clearcoatMapUv),Z.push(M.clearcoatNormalMapUv),Z.push(M.clearcoatRoughnessMapUv),Z.push(M.iridescenceMapUv),Z.push(M.iridescenceThicknessMapUv),Z.push(M.sheenColorMapUv),Z.push(M.sheenRoughnessMapUv),Z.push(M.specularMapUv),Z.push(M.specularColorMapUv),Z.push(M.specularIntensityMapUv),Z.push(M.transmissionMapUv),Z.push(M.thicknessMapUv),Z.push(M.combine),Z.push(M.fogExp2),Z.push(M.sizeAttenuation),Z.push(M.morphTargetsCount),Z.push(M.morphAttributeCount),Z.push(M.numDirLights),Z.push(M.numPointLights),Z.push(M.numSpotLights),Z.push(M.numSpotLightMaps),Z.push(M.numHemiLights),Z.push(M.numRectAreaLights),Z.push(M.numDirLightShadows),Z.push(M.numPointLightShadows),Z.push(M.numSpotLightShadows),Z.push(M.numSpotLightShadowsWithMaps),Z.push(M.shadowMapType),Z.push(M.toneMapping),Z.push(M.numClippingPlanes),Z.push(M.numClipIntersection),Z.push(M.depthPacking)}function f(Z,M){a.disableAll(),M.isWebGL2&&a.enable(0),M.supportsVertexTextures&&a.enable(1),M.instancing&&a.enable(2),M.instancingColor&&a.enable(3),M.matcap&&a.enable(4),M.envMap&&a.enable(5),M.normalMapObjectSpace&&a.enable(6),M.normalMapTangentSpace&&a.enable(7),M.clearcoat&&a.enable(8),M.iridescence&&a.enable(9),M.alphaTest&&a.enable(10),M.vertexColors&&a.enable(11),M.vertexAlphas&&a.enable(12),M.vertexUv1s&&a.enable(13),M.vertexUv2s&&a.enable(14),M.vertexUv3s&&a.enable(15),M.vertexTangents&&a.enable(16),Z.push(a.mask),a.disableAll(),M.fog&&a.enable(0),M.useFog&&a.enable(1),M.flatShading&&a.enable(2),M.logarithmicDepthBuffer&&a.enable(3),M.skinning&&a.enable(4),M.morphTargets&&a.enable(5),M.morphNormals&&a.enable(6),M.morphColors&&a.enable(7),M.premultipliedAlpha&&a.enable(8),M.shadowMapEnabled&&a.enable(9),M.useLegacyLights&&a.enable(10),M.doubleSided&&a.enable(11),M.flipSided&&a.enable(12),M.useDepthPacking&&a.enable(13),M.dithering&&a.enable(14),M.transmission&&a.enable(15),M.sheen&&a.enable(16),M.opaque&&a.enable(17),M.pointsUvs&&a.enable(18),Z.push(a.mask)}function B(Z){const M=m[Z.type];let H;if(M){const U=lr[M];H=nW.clone(U.uniforms)}else H=Z.uniforms;return H}function S(Z,M){let H;for(let U=0,D=c.length;U0?i.push(A):h.transparent===!0?s.push(A):t.push(A)}function l(C,d,h,m,y,v){const A=o(C,d,h,m,y,v);h.transmission>0?i.unshift(A):h.transparent===!0?s.unshift(A):t.unshift(A)}function c(C,d){t.length>1&&t.sort(C||bz),i.length>1&&i.sort(d||dZ),s.length>1&&s.sort(d||dZ)}function u(){for(let C=e,d=n.length;C=r.length?(o=new hZ,r.push(o)):o=r[s],o}function t(){n=new WeakMap}return{get:e,dispose:t}}function vz(){const n={};return{get:function(e){if(n[e.id]!==void 0)return n[e.id];let t;switch(e.type){case"DirectionalLight":t={direction:new X,color:new Ne};break;case"SpotLight":t={position:new X,direction:new X,color:new Ne,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":t={position:new X,color:new Ne,distance:0,decay:0};break;case"HemisphereLight":t={direction:new X,skyColor:new Ne,groundColor:new Ne};break;case"RectAreaLight":t={color:new Ne,position:new X,halfWidth:new X,halfHeight:new X};break}return n[e.id]=t,t}}}function Gz(){const n={};return{get:function(e){if(n[e.id]!==void 0)return n[e.id];let t;switch(e.type){case"DirectionalLight":t={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new ne};break;case"SpotLight":t={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new ne};break;case"PointLight":t={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new ne,shadowCameraNear:1,shadowCameraFar:1e3};break}return n[e.id]=t,t}}}let Bz=0;function Zz(n,e){return(e.castShadow?2:0)-(n.castShadow?2:0)+(e.map?1:0)-(n.map?1:0)}function wz(n,e){const t=new vz,i=Gz(),s={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0};for(let u=0;u<9;u++)s.probe.push(new X);const r=new X,o=new Le,a=new Le;function l(u,C){let d=0,h=0,m=0;for(let H=0;H<9;H++)s.probe[H].set(0,0,0);let y=0,v=0,A=0,b=0,f=0,B=0,S=0,x=0,R=0,V=0;u.sort(Zz);const Z=C===!0?Math.PI:1;for(let H=0,U=u.length;H0&&(e.isWebGL2||n.has("OES_texture_float_linear")===!0?(s.rectAreaLTC1=Ye.LTC_FLOAT_1,s.rectAreaLTC2=Ye.LTC_FLOAT_2):n.has("OES_texture_half_float_linear")===!0?(s.rectAreaLTC1=Ye.LTC_HALF_1,s.rectAreaLTC2=Ye.LTC_HALF_2):console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")),s.ambient[0]=d,s.ambient[1]=h,s.ambient[2]=m;const M=s.hash;(M.directionalLength!==y||M.pointLength!==v||M.spotLength!==A||M.rectAreaLength!==b||M.hemiLength!==f||M.numDirectionalShadows!==B||M.numPointShadows!==S||M.numSpotShadows!==x||M.numSpotMaps!==R)&&(s.directional.length=y,s.spot.length=A,s.rectArea.length=b,s.point.length=v,s.hemi.length=f,s.directionalShadow.length=B,s.directionalShadowMap.length=B,s.pointShadow.length=S,s.pointShadowMap.length=S,s.spotShadow.length=x,s.spotShadowMap.length=x,s.directionalShadowMatrix.length=B,s.pointShadowMatrix.length=S,s.spotLightMatrix.length=x+R-V,s.spotLightMap.length=R,s.numSpotLightShadowsWithMaps=V,M.directionalLength=y,M.pointLength=v,M.spotLength=A,M.rectAreaLength=b,M.hemiLength=f,M.numDirectionalShadows=B,M.numPointShadows=S,M.numSpotShadows=x,M.numSpotMaps=R,s.version=Bz++)}function c(u,C){let d=0,h=0,m=0,y=0,v=0;const A=C.matrixWorldInverse;for(let b=0,f=u.length;b=a.length?(l=new AZ(n,e),a.push(l)):l=a[o],l}function s(){t=new WeakMap}return{get:i,dispose:s}}class qA extends Qn{constructor(e){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=zn,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(e)}copy(e){return super.copy(e),this.depthPacking=e.depthPacking,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this}}class $y extends Qn{constructor(e){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(e)}copy(e){return super.copy(e),this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this}}const xz=`void main() { - gl_Position = vec4( position, 1.0 ); -}`,Rz=`uniform sampler2D shadow_pass; -uniform vec2 resolution; -uniform float radius; -#include -void main() { - const float samples = float( VSM_SAMPLES ); - float mean = 0.0; - float squared_mean = 0.0; - float uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 ); - float uvStart = samples <= 1.0 ? 0.0 : - 1.0; - for ( float i = 0.0; i < samples; i ++ ) { - float uvOffset = uvStart + i * uvStride; - #ifdef HORIZONTAL_PASS - vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) ); - mean += distribution.x; - squared_mean += distribution.y * distribution.y + distribution.x * distribution.x; - #else - float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) ); - mean += depth; - squared_mean += depth * depth; - #endif - } - mean = mean / samples; - squared_mean = squared_mean / samples; - float std_dev = sqrt( squared_mean - mean * mean ); - gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) ); -}`;function Wz(n,e,t){let i=new QA;const s=new ne,r=new ne,o=new Xt,a=new qA({depthPacking:Yr}),l=new $y,c={},u=t.maxTextureSize,C={[Xr]:Dn,[Dn]:Xr,[Oi]:Oi},d=new Rt({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new ne},radius:{value:4}},vertexShader:xz,fragmentShader:Rz}),h=d.clone();h.defines.HORIZONTAL_PASS=1;const m=new vt;m.setAttribute("position",new Dt(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const y=new Un(m,d),v=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=kA;let A=this.type;this.render=function(S,x,R){if(v.enabled===!1||v.autoUpdate===!1&&v.needsUpdate===!1||S.length===0)return;const V=n.getRenderTarget(),Z=n.getActiveCubeFace(),M=n.getActiveMipmapLevel(),H=n.state;H.setBlending(sn),H.buffers.color.setClear(1,1,1,1),H.buffers.depth.setTest(!0),H.setScissorTest(!1);const U=A!==rr&&this.type===rr,D=A===rr&&this.type!==rr;for(let q=0,ie=S.length;qu||s.y>u)&&(s.x>u&&(r.x=Math.floor(u/L.x),s.x=r.x*L.x,le.mapSize.x=r.x),s.y>u&&(r.y=Math.floor(u/L.y),s.y=r.y*L.y,le.mapSize.y=r.y)),le.map===null||U===!0||D===!0){const O=this.type!==rr?{minFilter:ft,magFilter:ft}:{};le.map!==null&&le.map.dispose(),le.map=new Nt(s.x,s.y,O),le.map.texture.name=ue.name+".shadowMap",le.camera.updateProjectionMatrix()}n.setRenderTarget(le.map),n.clear();const P=le.getViewportCount();for(let O=0;O0||x.map&&x.alphaTest>0){const H=Z.uuid,U=x.uuid;let D=c[H];D===void 0&&(D={},c[H]=D);let q=D[U];q===void 0&&(q=Z.clone(),D[U]=q),Z=q}if(Z.visible=x.visible,Z.wireframe=x.wireframe,V===rr?Z.side=x.shadowSide!==null?x.shadowSide:x.side:Z.side=x.shadowSide!==null?x.shadowSide:C[x.side],Z.alphaMap=x.alphaMap,Z.alphaTest=x.alphaTest,Z.map=x.map,Z.clipShadows=x.clipShadows,Z.clippingPlanes=x.clippingPlanes,Z.clipIntersection=x.clipIntersection,Z.displacementMap=x.displacementMap,Z.displacementScale=x.displacementScale,Z.displacementBias=x.displacementBias,Z.wireframeLinewidth=x.wireframeLinewidth,Z.linewidth=x.linewidth,R.isPointLight===!0&&Z.isMeshDistanceMaterial===!0){const H=n.properties.get(Z);H.light=R}return Z}function B(S,x,R,V,Z){if(S.visible===!1)return;if(S.layers.test(x.layers)&&(S.isMesh||S.isLine||S.isPoints)&&(S.castShadow||S.receiveShadow&&Z===rr)&&(!S.frustumCulled||i.intersectsObject(S))){S.modelViewMatrix.multiplyMatrices(R.matrixWorldInverse,S.matrixWorld);const U=e.update(S),D=S.material;if(Array.isArray(D)){const q=U.groups;for(let ie=0,ue=q.length;ie=1):L.indexOf("OpenGL ES")!==-1&&(le=parseFloat(/^OpenGL ES (\d)/.exec(L)[1]),ue=le>=2);let P=null,O={};const ce=n.getParameter(n.SCISSOR_BOX),ge=n.getParameter(n.VIEWPORT),te=new Xt().fromArray(ce),re=new Xt().fromArray(ge);function Ze(Q,he,Ge,Ee){const Oe=new Uint8Array(4),Ut=n.createTexture();n.bindTexture(Q,Ut),n.texParameteri(Q,n.TEXTURE_MIN_FILTER,n.NEAREST),n.texParameteri(Q,n.TEXTURE_MAG_FILTER,n.NEAREST);for(let Pt=0;Pt"u"?!1:/OculusBrowser/g.test(navigator.userAgent),m=new WeakMap;let y;const v=new WeakMap;let A=!1;try{A=typeof OffscreenCanvas<"u"&&new OffscreenCanvas(1,1).getContext("2d")!==null}catch{}function b(k,Y){return A?new OffscreenCanvas(k,Y):xu("canvas")}function f(k,Y,Ie,Se){let xe=1;if((k.width>Se||k.height>Se)&&(xe=Se/Math.max(k.width,k.height)),xe<1||Y===!0)if(typeof HTMLImageElement<"u"&&k instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&k instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&k instanceof ImageBitmap){const Xe=Y?Q1:Math.floor,lt=Xe(xe*k.width),Te=Xe(xe*k.height);y===void 0&&(y=b(lt,Te));const me=Ie?b(lt,Te):y;return me.width=lt,me.height=Te,me.getContext("2d").drawImage(k,0,0,lt,Te),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+k.width+"x"+k.height+") to ("+lt+"x"+Te+")."),me}else return"data"in k&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+k.width+"x"+k.height+")."),k;return k}function B(k){return Cb(k.width)&&Cb(k.height)}function S(k){return a?!1:k.wrapS!==En||k.wrapT!==En||k.minFilter!==ft&&k.minFilter!==et}function x(k,Y){return k.generateMipmaps&&Y&&k.minFilter!==ft&&k.minFilter!==et}function R(k){n.generateMipmap(k)}function V(k,Y,Ie,Se,xe=!1){if(a===!1)return Y;if(k!==null){if(n[k]!==void 0)return n[k];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+k+"'")}let Xe=Y;return Y===n.RED&&(Ie===n.FLOAT&&(Xe=n.R32F),Ie===n.HALF_FLOAT&&(Xe=n.R16F),Ie===n.UNSIGNED_BYTE&&(Xe=n.R8)),Y===n.RG&&(Ie===n.FLOAT&&(Xe=n.RG32F),Ie===n.HALF_FLOAT&&(Xe=n.RG16F),Ie===n.UNSIGNED_BYTE&&(Xe=n.RG8)),Y===n.RGBA&&(Ie===n.FLOAT&&(Xe=n.RGBA32F),Ie===n.HALF_FLOAT&&(Xe=n.RGBA16F),Ie===n.UNSIGNED_BYTE&&(Xe=Se===yt&&xe===!1?n.SRGB8_ALPHA8:n.RGBA8),Ie===n.UNSIGNED_SHORT_4_4_4_4&&(Xe=n.RGBA4),Ie===n.UNSIGNED_SHORT_5_5_5_1&&(Xe=n.RGB5_A1)),(Xe===n.R16F||Xe===n.R32F||Xe===n.RG16F||Xe===n.RG32F||Xe===n.RGBA16F||Xe===n.RGBA32F)&&e.get("EXT_color_buffer_float"),Xe}function Z(k,Y,Ie){return x(k,Ie)===!0||k.isFramebufferTexture&&k.minFilter!==ft&&k.minFilter!==et?Math.log2(Math.max(Y.width,Y.height))+1:k.mipmaps!==void 0&&k.mipmaps.length>0?k.mipmaps.length:k.isCompressedTexture&&Array.isArray(k.image)?Y.mipmaps.length:1}function M(k){return k===ft||k===fA||k===UI?n.NEAREST:n.LINEAR}function H(k){const Y=k.target;Y.removeEventListener("dispose",H),D(Y),Y.isVideoTexture&&m.delete(Y)}function U(k){const Y=k.target;Y.removeEventListener("dispose",U),ie(Y)}function D(k){const Y=i.get(k);if(Y.__webglInit===void 0)return;const Ie=k.source,Se=v.get(Ie);if(Se){const xe=Se[Y.__cacheKey];xe.usedTimes--,xe.usedTimes===0&&q(k),Object.keys(Se).length===0&&v.delete(Ie)}i.remove(k)}function q(k){const Y=i.get(k);n.deleteTexture(Y.__webglTexture);const Ie=k.source,Se=v.get(Ie);delete Se[Y.__cacheKey],o.memory.textures--}function ie(k){const Y=k.texture,Ie=i.get(k),Se=i.get(Y);if(Se.__webglTexture!==void 0&&(n.deleteTexture(Se.__webglTexture),o.memory.textures--),k.depthTexture&&k.depthTexture.dispose(),k.isWebGLCubeRenderTarget)for(let xe=0;xe<6;xe++)n.deleteFramebuffer(Ie.__webglFramebuffer[xe]),Ie.__webglDepthbuffer&&n.deleteRenderbuffer(Ie.__webglDepthbuffer[xe]);else{if(n.deleteFramebuffer(Ie.__webglFramebuffer),Ie.__webglDepthbuffer&&n.deleteRenderbuffer(Ie.__webglDepthbuffer),Ie.__webglMultisampledFramebuffer&&n.deleteFramebuffer(Ie.__webglMultisampledFramebuffer),Ie.__webglColorRenderbuffer)for(let xe=0;xe=l&&console.warn("THREE.WebGLTextures: Trying to use "+k+" texture units while this GPU supports only "+l),ue+=1,k}function P(k){const Y=[];return Y.push(k.wrapS),Y.push(k.wrapT),Y.push(k.wrapR||0),Y.push(k.magFilter),Y.push(k.minFilter),Y.push(k.anisotropy),Y.push(k.internalFormat),Y.push(k.format),Y.push(k.type),Y.push(k.generateMipmaps),Y.push(k.premultiplyAlpha),Y.push(k.flipY),Y.push(k.unpackAlignment),Y.push(k.colorSpace),Y.join()}function O(k,Y){const Ie=i.get(k);if(k.isVideoTexture&&It(k),k.isRenderTargetTexture===!1&&k.version>0&&Ie.__version!==k.version){const Se=k.image;if(Se===null)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else if(Se.complete===!1)console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete");else{tt(Ie,k,Y);return}}t.bindTexture(n.TEXTURE_2D,Ie.__webglTexture,n.TEXTURE0+Y)}function ce(k,Y){const Ie=i.get(k);if(k.version>0&&Ie.__version!==k.version){tt(Ie,k,Y);return}t.bindTexture(n.TEXTURE_2D_ARRAY,Ie.__webglTexture,n.TEXTURE0+Y)}function ge(k,Y){const Ie=i.get(k);if(k.version>0&&Ie.__version!==k.version){tt(Ie,k,Y);return}t.bindTexture(n.TEXTURE_3D,Ie.__webglTexture,n.TEXTURE0+Y)}function te(k,Y){const Ie=i.get(k);if(k.version>0&&Ie.__version!==k.version){rt(Ie,k,Y);return}t.bindTexture(n.TEXTURE_CUBE_MAP,Ie.__webglTexture,n.TEXTURE0+Y)}const re={[ps]:n.REPEAT,[En]:n.CLAMP_TO_EDGE,[Gu]:n.MIRRORED_REPEAT},Ze={[ft]:n.NEAREST,[fA]:n.NEAREST_MIPMAP_NEAREST,[UI]:n.NEAREST_MIPMAP_LINEAR,[et]:n.LINEAR,[Ty]:n.LINEAR_MIPMAP_NEAREST,[ha]:n.LINEAR_MIPMAP_LINEAR};function we(k,Y,Ie){if(Ie?(n.texParameteri(k,n.TEXTURE_WRAP_S,re[Y.wrapS]),n.texParameteri(k,n.TEXTURE_WRAP_T,re[Y.wrapT]),(k===n.TEXTURE_3D||k===n.TEXTURE_2D_ARRAY)&&n.texParameteri(k,n.TEXTURE_WRAP_R,re[Y.wrapR]),n.texParameteri(k,n.TEXTURE_MAG_FILTER,Ze[Y.magFilter]),n.texParameteri(k,n.TEXTURE_MIN_FILTER,Ze[Y.minFilter])):(n.texParameteri(k,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE),n.texParameteri(k,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE),(k===n.TEXTURE_3D||k===n.TEXTURE_2D_ARRAY)&&n.texParameteri(k,n.TEXTURE_WRAP_R,n.CLAMP_TO_EDGE),(Y.wrapS!==En||Y.wrapT!==En)&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."),n.texParameteri(k,n.TEXTURE_MAG_FILTER,M(Y.magFilter)),n.texParameteri(k,n.TEXTURE_MIN_FILTER,M(Y.minFilter)),Y.minFilter!==ft&&Y.minFilter!==et&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.")),e.has("EXT_texture_filter_anisotropic")===!0){const Se=e.get("EXT_texture_filter_anisotropic");if(Y.magFilter===ft||Y.minFilter!==UI&&Y.minFilter!==ha||Y.type===Rn&&e.has("OES_texture_float_linear")===!1||a===!1&&Y.type===ds&&e.has("OES_texture_half_float_linear")===!1)return;(Y.anisotropy>1||i.get(Y).__currentAnisotropy)&&(n.texParameterf(k,Se.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(Y.anisotropy,s.getMaxAnisotropy())),i.get(Y).__currentAnisotropy=Y.anisotropy)}}function J(k,Y){let Ie=!1;k.__webglInit===void 0&&(k.__webglInit=!0,Y.addEventListener("dispose",H));const Se=Y.source;let xe=v.get(Se);xe===void 0&&(xe={},v.set(Se,xe));const Xe=P(Y);if(Xe!==k.__cacheKey){xe[Xe]===void 0&&(xe[Xe]={texture:n.createTexture(),usedTimes:0},o.memory.textures++,Ie=!0),xe[Xe].usedTimes++;const lt=xe[k.__cacheKey];lt!==void 0&&(xe[k.__cacheKey].usedTimes--,lt.usedTimes===0&&q(Y)),k.__cacheKey=Xe,k.__webglTexture=xe[Xe].texture}return Ie}function tt(k,Y,Ie){let Se=n.TEXTURE_2D;(Y.isDataArrayTexture||Y.isCompressedArrayTexture)&&(Se=n.TEXTURE_2D_ARRAY),Y.isData3DTexture&&(Se=n.TEXTURE_3D);const xe=J(k,Y),Xe=Y.source;t.bindTexture(Se,k.__webglTexture,n.TEXTURE0+Ie);const lt=i.get(Xe);if(Xe.version!==lt.__version||xe===!0){t.activeTexture(n.TEXTURE0+Ie),n.pixelStorei(n.UNPACK_FLIP_Y_WEBGL,Y.flipY),n.pixelStorei(n.UNPACK_PREMULTIPLY_ALPHA_WEBGL,Y.premultiplyAlpha),n.pixelStorei(n.UNPACK_ALIGNMENT,Y.unpackAlignment),n.pixelStorei(n.UNPACK_COLORSPACE_CONVERSION_WEBGL,n.NONE);const Te=S(Y)&&B(Y.image)===!1;let me=f(Y.image,Te,!1,u);me=Ht(Y,me);const Pe=B(me)||a,_=r.convert(Y.format,Y.colorSpace);let pe=r.convert(Y.type),ve=V(Y.internalFormat,_,pe,Y.colorSpace);we(Se,Y,Pe);let Me;const ot=Y.mipmaps,bt=a&&Y.isVideoTexture!==!0,qt=lt.__version===void 0||xe===!0,Q=Z(Y,me,Pe);if(Y.isDepthTexture)ve=n.DEPTH_COMPONENT,a?Y.type===Rn?ve=n.DEPTH_COMPONENT32F:Y.type===ao?ve=n.DEPTH_COMPONENT24:Y.type===la?ve=n.DEPTH24_STENCIL8:ve=n.DEPTH_COMPONENT16:Y.type===Rn&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),Y.format===ga&&ve===n.DEPTH_COMPONENT&&Y.type!==Ey&&Y.type!==ao&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),Y.type=ao,pe=r.convert(Y.type)),Y.format===Aa&&ve===n.DEPTH_COMPONENT&&(ve=n.DEPTH_STENCIL,Y.type!==la&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),Y.type=la,pe=r.convert(Y.type))),qt&&(bt?t.texStorage2D(n.TEXTURE_2D,1,ve,me.width,me.height):t.texImage2D(n.TEXTURE_2D,0,ve,me.width,me.height,0,_,pe,null));else if(Y.isDataTexture)if(ot.length>0&&Pe){bt&&qt&&t.texStorage2D(n.TEXTURE_2D,Q,ve,ot[0].width,ot[0].height);for(let he=0,Ge=ot.length;he>=1,Ge>>=1}}else if(ot.length>0&&Pe){bt&&qt&&t.texStorage2D(n.TEXTURE_2D,Q,ve,ot[0].width,ot[0].height);for(let he=0,Ge=ot.length;he0&&qt++,t.texStorage2D(n.TEXTURE_CUBE_MAP,qt,Me,me[0].width,me[0].height));for(let he=0;he<6;he++)if(Te){ot?t.texSubImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+he,0,0,0,me[he].width,me[he].height,pe,ve,me[he].data):t.texImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+he,0,Me,me[he].width,me[he].height,0,pe,ve,me[he].data);for(let Ge=0;Ge=n.TEXTURE_CUBE_MAP_POSITIVE_X&&xe<=n.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&n.framebufferTexture2D(n.FRAMEBUFFER,Se,xe,i.get(Ie).__webglTexture,0),t.bindFramebuffer(n.FRAMEBUFFER,null)}function ze(k,Y,Ie){if(n.bindRenderbuffer(n.RENDERBUFFER,k),Y.depthBuffer&&!Y.stencilBuffer){let Se=n.DEPTH_COMPONENT16;if(Ie||Je(Y)){const xe=Y.depthTexture;xe&&xe.isDepthTexture&&(xe.type===Rn?Se=n.DEPTH_COMPONENT32F:xe.type===ao&&(Se=n.DEPTH_COMPONENT24));const Xe=nt(Y);Je(Y)?d.renderbufferStorageMultisampleEXT(n.RENDERBUFFER,Xe,Se,Y.width,Y.height):n.renderbufferStorageMultisample(n.RENDERBUFFER,Xe,Se,Y.width,Y.height)}else n.renderbufferStorage(n.RENDERBUFFER,Se,Y.width,Y.height);n.framebufferRenderbuffer(n.FRAMEBUFFER,n.DEPTH_ATTACHMENT,n.RENDERBUFFER,k)}else if(Y.depthBuffer&&Y.stencilBuffer){const Se=nt(Y);Ie&&Je(Y)===!1?n.renderbufferStorageMultisample(n.RENDERBUFFER,Se,n.DEPTH24_STENCIL8,Y.width,Y.height):Je(Y)?d.renderbufferStorageMultisampleEXT(n.RENDERBUFFER,Se,n.DEPTH24_STENCIL8,Y.width,Y.height):n.renderbufferStorage(n.RENDERBUFFER,n.DEPTH_STENCIL,Y.width,Y.height),n.framebufferRenderbuffer(n.FRAMEBUFFER,n.DEPTH_STENCIL_ATTACHMENT,n.RENDERBUFFER,k)}else{const Se=Y.isWebGLMultipleRenderTargets===!0?Y.texture:[Y.texture];for(let xe=0;xe0&&Je(k)===!1){const Te=Xe?Y:[Y];Ie.__webglMultisampledFramebuffer=n.createFramebuffer(),Ie.__webglColorRenderbuffer=[],t.bindFramebuffer(n.FRAMEBUFFER,Ie.__webglMultisampledFramebuffer);for(let me=0;me0&&Je(k)===!1){const Y=k.isWebGLMultipleRenderTargets?k.texture:[k.texture],Ie=k.width,Se=k.height;let xe=n.COLOR_BUFFER_BIT;const Xe=[],lt=k.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,Te=i.get(k),me=k.isWebGLMultipleRenderTargets===!0;if(me)for(let Pe=0;Pe0&&e.has("WEBGL_multisampled_render_to_texture")===!0&&Y.__useRenderToTexture!==!1}function It(k){const Y=o.render.frame;m.get(k)!==Y&&(m.set(k,Y),k.update())}function Ht(k,Y){const Ie=k.colorSpace,Se=k.format,xe=k.type;return k.isCompressedTexture===!0||k.format===yA||Ie!==Cr&&Ie!==Io&&(Ie===yt?a===!1?e.has("EXT_sRGB")===!0&&Se===hn?(k.format=yA,k.minFilter=et,k.generateMipmaps=!1):Y=Jy.sRGBToLinear(Y):(Se!==hn||xe!==ln)&&console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture color space:",Ie)),Y}this.allocateTextureUnit=L,this.resetTextureUnits=le,this.setTexture2D=O,this.setTexture2DArray=ce,this.setTexture3D=ge,this.setTextureCube=te,this.rebindTextures=Be,this.setupRenderTarget=ke,this.updateRenderTargetMipmap=He,this.updateMultisampleRenderTarget=it,this.setupDepthRenderbuffer=de,this.setupFrameBufferTexture=We,this.useMultisampledRTT=Je}function lW(n,e,t){const i=t.isWebGL2;function s(r,o=Io){let a;if(r===ln)return n.UNSIGNED_BYTE;if(r===H1)return n.UNSIGNED_SHORT_4_4_4_4;if(r===X1)return n.UNSIGNED_SHORT_5_5_5_1;if(r===V1)return n.BYTE;if(r===M1)return n.SHORT;if(r===Ey)return n.UNSIGNED_SHORT;if(r===N1)return n.INT;if(r===ao)return n.UNSIGNED_INT;if(r===Rn)return n.FLOAT;if(r===ds)return i?n.HALF_FLOAT:(a=e.get("OES_texture_half_float"),a!==null?a.HALF_FLOAT_OES:null);if(r===Y1)return n.ALPHA;if(r===hn)return n.RGBA;if(r===PA)return n.LUMINANCE;if(r===F1)return n.LUMINANCE_ALPHA;if(r===ga)return n.DEPTH_COMPONENT;if(r===Aa)return n.DEPTH_STENCIL;if(r===yA)return a=e.get("EXT_sRGB"),a!==null?a.SRGB_ALPHA_EXT:null;if(r===ky)return n.RED;if(r===K1)return n.RED_INTEGER;if(r===Dy)return n.RG;if(r===z1)return n.RG_INTEGER;if(r===L1)return n.RGBA_INTEGER;if(r===Hh||r===Xh||r===Yh||r===Fh)if(o===yt)if(a=e.get("WEBGL_compressed_texture_s3tc_srgb"),a!==null){if(r===Hh)return a.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(r===Xh)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(r===Yh)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(r===Fh)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(a=e.get("WEBGL_compressed_texture_s3tc"),a!==null){if(r===Hh)return a.COMPRESSED_RGB_S3TC_DXT1_EXT;if(r===Xh)return a.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(r===Yh)return a.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(r===Fh)return a.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(r===D0||r===U0||r===P0||r===_0)if(a=e.get("WEBGL_compressed_texture_pvrtc"),a!==null){if(r===D0)return a.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(r===U0)return a.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(r===P0)return a.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(r===_0)return a.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(r===T1)return a=e.get("WEBGL_compressed_texture_etc1"),a!==null?a.COMPRESSED_RGB_ETC1_WEBGL:null;if(r===J0||r===O0)if(a=e.get("WEBGL_compressed_texture_etc"),a!==null){if(r===J0)return o===yt?a.COMPRESSED_SRGB8_ETC2:a.COMPRESSED_RGB8_ETC2;if(r===O0)return o===yt?a.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:a.COMPRESSED_RGBA8_ETC2_EAC}else return null;if(r===Q0||r===j0||r===q0||r===$0||r===eb||r===tb||r===nb||r===ib||r===sb||r===rb||r===ob||r===ab||r===lb||r===gb)if(a=e.get("WEBGL_compressed_texture_astc"),a!==null){if(r===Q0)return o===yt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:a.COMPRESSED_RGBA_ASTC_4x4_KHR;if(r===j0)return o===yt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:a.COMPRESSED_RGBA_ASTC_5x4_KHR;if(r===q0)return o===yt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:a.COMPRESSED_RGBA_ASTC_5x5_KHR;if(r===$0)return o===yt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:a.COMPRESSED_RGBA_ASTC_6x5_KHR;if(r===eb)return o===yt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:a.COMPRESSED_RGBA_ASTC_6x6_KHR;if(r===tb)return o===yt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:a.COMPRESSED_RGBA_ASTC_8x5_KHR;if(r===nb)return o===yt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:a.COMPRESSED_RGBA_ASTC_8x6_KHR;if(r===ib)return o===yt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:a.COMPRESSED_RGBA_ASTC_8x8_KHR;if(r===sb)return o===yt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:a.COMPRESSED_RGBA_ASTC_10x5_KHR;if(r===rb)return o===yt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:a.COMPRESSED_RGBA_ASTC_10x6_KHR;if(r===ob)return o===yt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:a.COMPRESSED_RGBA_ASTC_10x8_KHR;if(r===ab)return o===yt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:a.COMPRESSED_RGBA_ASTC_10x10_KHR;if(r===lb)return o===yt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:a.COMPRESSED_RGBA_ASTC_12x10_KHR;if(r===gb)return o===yt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:a.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(r===Kh)if(a=e.get("EXT_texture_compression_bptc"),a!==null){if(r===Kh)return o===yt?a.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:a.COMPRESSED_RGBA_BPTC_UNORM_EXT}else return null;if(r===E1||r===cb||r===Ib||r===ub)if(a=e.get("EXT_texture_compression_rgtc"),a!==null){if(r===Kh)return a.COMPRESSED_RED_RGTC1_EXT;if(r===cb)return a.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(r===Ib)return a.COMPRESSED_RED_GREEN_RGTC2_EXT;if(r===ub)return a.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;return r===la?i?n.UNSIGNED_INT_24_8:(a=e.get("WEBGL_depth_texture"),a!==null?a.UNSIGNED_INT_24_8_WEBGL:null):n[r]!==void 0?n[r]:null}return{convert:s}}class gW extends on{constructor(e=[]){super(),this.isArrayCamera=!0,this.cameras=e}}class Lg extends Ft{constructor(){super(),this.isGroup=!0,this.type="Group"}}const Nz={type:"move"};class If{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return this._hand===null&&(this._hand=new Lg,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return this._targetRay===null&&(this._targetRay=new Lg,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new X,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new X),this._targetRay}getGripSpace(){return this._grip===null&&(this._grip=new Lg,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new X,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new X),this._grip}dispatchEvent(e){return this._targetRay!==null&&this._targetRay.dispatchEvent(e),this._grip!==null&&this._grip.dispatchEvent(e),this._hand!==null&&this._hand.dispatchEvent(e),this}connect(e){if(e&&e.hand){const t=this._hand;if(t)for(const i of e.hand.values())this._getHandJoint(t,i)}return this.dispatchEvent({type:"connected",data:e}),this}disconnect(e){return this.dispatchEvent({type:"disconnected",data:e}),this._targetRay!==null&&(this._targetRay.visible=!1),this._grip!==null&&(this._grip.visible=!1),this._hand!==null&&(this._hand.visible=!1),this}update(e,t,i){let s=null,r=null,o=null;const a=this._targetRay,l=this._grip,c=this._hand;if(e&&t.session.visibilityState!=="visible-blurred"){if(c&&e.hand){o=!0;for(const y of e.hand.values()){const v=t.getJointPose(y,i),A=this._getHandJoint(c,y);v!==null&&(A.matrix.fromArray(v.transform.matrix),A.matrix.decompose(A.position,A.rotation,A.scale),A.matrixWorldNeedsUpdate=!0,A.jointRadius=v.radius),A.visible=v!==null}const u=c.joints["index-finger-tip"],C=c.joints["thumb-tip"],d=u.position.distanceTo(C.position),h=.02,m=.005;c.inputState.pinching&&d>h+m?(c.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:e.handedness,target:this})):!c.inputState.pinching&&d<=h-m&&(c.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:e.handedness,target:this}))}else l!==null&&e.gripSpace&&(r=t.getPose(e.gripSpace,i),r!==null&&(l.matrix.fromArray(r.transform.matrix),l.matrix.decompose(l.position,l.rotation,l.scale),l.matrixWorldNeedsUpdate=!0,r.linearVelocity?(l.hasLinearVelocity=!0,l.linearVelocity.copy(r.linearVelocity)):l.hasLinearVelocity=!1,r.angularVelocity?(l.hasAngularVelocity=!0,l.angularVelocity.copy(r.angularVelocity)):l.hasAngularVelocity=!1));a!==null&&(s=t.getPose(e.targetRaySpace,i),s===null&&r!==null&&(s=r),s!==null&&(a.matrix.fromArray(s.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale),a.matrixWorldNeedsUpdate=!0,s.linearVelocity?(a.hasLinearVelocity=!0,a.linearVelocity.copy(s.linearVelocity)):a.hasLinearVelocity=!1,s.angularVelocity?(a.hasAngularVelocity=!0,a.angularVelocity.copy(s.angularVelocity)):a.hasAngularVelocity=!1,this.dispatchEvent(Nz)))}return a!==null&&(a.visible=s!==null),l!==null&&(l.visible=r!==null),c!==null&&(c.visible=o!==null),this}_getHandJoint(e,t){if(e.joints[t.jointName]===void 0){const i=new Lg;i.matrixAutoUpdate=!1,i.visible=!1,e.joints[t.jointName]=i,e.add(i)}return e.joints[t.jointName]}}class $A extends en{constructor(e,t,i,s,r,o,a,l,c,u){if(u=u!==void 0?u:ga,u!==ga&&u!==Aa)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");i===void 0&&u===ga&&(i=ao),i===void 0&&u===Aa&&(i=la),super(null,s,r,o,a,l,u,i,c),this.isDepthTexture=!0,this.image={width:e,height:t},this.magFilter=a!==void 0?a:ft,this.minFilter=l!==void 0?l:ft,this.flipY=!1,this.generateMipmaps=!1}}class Hz extends bs{constructor(e,t){super();const i=this;let s=null,r=1,o=null,a="local-floor",l=1,c=null,u=null,C=null,d=null,h=null,m=null;const y=t.getContextAttributes();let v=null,A=null;const b=[],f=[],B=new Set,S=new Map,x=new on;x.layers.enable(1),x.viewport=new Xt;const R=new on;R.layers.enable(2),R.viewport=new Xt;const V=[x,R],Z=new gW;Z.layers.enable(1),Z.layers.enable(2);let M=null,H=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(te){let re=b[te];return re===void 0&&(re=new If,b[te]=re),re.getTargetRaySpace()},this.getControllerGrip=function(te){let re=b[te];return re===void 0&&(re=new If,b[te]=re),re.getGripSpace()},this.getHand=function(te){let re=b[te];return re===void 0&&(re=new If,b[te]=re),re.getHandSpace()};function U(te){const re=f.indexOf(te.inputSource);if(re===-1)return;const Ze=b[re];Ze!==void 0&&(Ze.update(te.inputSource,te.frame,c||o),Ze.dispatchEvent({type:te.type,data:te.inputSource}))}function D(){s.removeEventListener("select",U),s.removeEventListener("selectstart",U),s.removeEventListener("selectend",U),s.removeEventListener("squeeze",U),s.removeEventListener("squeezestart",U),s.removeEventListener("squeezeend",U),s.removeEventListener("end",D),s.removeEventListener("inputsourceschange",q);for(let te=0;te=0&&(f[we]=null,b[we].disconnect(Ze))}for(let re=0;re=f.length){f.push(Ze),we=tt;break}else if(f[tt]===null){f[tt]=Ze,we=tt;break}if(we===-1)break}const J=b[we];J&&J.connect(Ze)}}const ie=new X,ue=new X;function le(te,re,Ze){ie.setFromMatrixPosition(re.matrixWorld),ue.setFromMatrixPosition(Ze.matrixWorld);const we=ie.distanceTo(ue),J=re.projectionMatrix.elements,tt=Ze.projectionMatrix.elements,rt=J[14]/(J[10]-1),We=J[14]/(J[10]+1),ze=(J[9]+1)/J[5],ye=(J[9]-1)/J[5],de=(J[8]-1)/J[0],Be=(tt[8]+1)/tt[0],ke=rt*de,He=rt*Be,it=we/(-de+Be),nt=it*-de;re.matrixWorld.decompose(te.position,te.quaternion,te.scale),te.translateX(nt),te.translateZ(it),te.matrixWorld.compose(te.position,te.quaternion,te.scale),te.matrixWorldInverse.copy(te.matrixWorld).invert();const Je=rt+it,It=We+it,Ht=ke-nt,k=He+(we-nt),Y=ze*We/It*Je,Ie=ye*We/It*Je;te.projectionMatrix.makePerspective(Ht,k,Y,Ie,Je,It),te.projectionMatrixInverse.copy(te.projectionMatrix).invert()}function L(te,re){re===null?te.matrixWorld.copy(te.matrix):te.matrixWorld.multiplyMatrices(re.matrixWorld,te.matrix),te.matrixWorldInverse.copy(te.matrixWorld).invert()}this.updateCamera=function(te){if(s===null)return;Z.near=R.near=x.near=te.near,Z.far=R.far=x.far=te.far,(M!==Z.near||H!==Z.far)&&(s.updateRenderState({depthNear:Z.near,depthFar:Z.far}),M=Z.near,H=Z.far);const re=te.parent,Ze=Z.cameras;L(Z,re);for(let we=0;weJ&&(S.set(we,we.lastChangedTime),i.dispatchEvent({type:"planechanged",data:we}))}}m=null}const ge=new iW;ge.setAnimationLoop(ce),this.setAnimationLoop=function(te){O=te},this.dispose=function(){}}}function Xz(n,e){function t(v,A){v.matrixAutoUpdate===!0&&v.updateMatrix(),A.value.copy(v.matrix)}function i(v,A){A.color.getRGB(v.fogColor.value,tW(n)),A.isFog?(v.fogNear.value=A.near,v.fogFar.value=A.far):A.isFogExp2&&(v.fogDensity.value=A.density)}function s(v,A,b,f,B){A.isMeshBasicMaterial||A.isMeshLambertMaterial?r(v,A):A.isMeshToonMaterial?(r(v,A),C(v,A)):A.isMeshPhongMaterial?(r(v,A),u(v,A)):A.isMeshStandardMaterial?(r(v,A),d(v,A),A.isMeshPhysicalMaterial&&h(v,A,B)):A.isMeshMatcapMaterial?(r(v,A),m(v,A)):A.isMeshDepthMaterial?r(v,A):A.isMeshDistanceMaterial?(r(v,A),y(v,A)):A.isMeshNormalMaterial?r(v,A):A.isLineBasicMaterial?(o(v,A),A.isLineDashedMaterial&&a(v,A)):A.isPointsMaterial?l(v,A,b,f):A.isSpriteMaterial?c(v,A):A.isShadowMaterial?(v.color.value.copy(A.color),v.opacity.value=A.opacity):A.isShaderMaterial&&(A.uniformsNeedUpdate=!1)}function r(v,A){v.opacity.value=A.opacity,A.color&&v.diffuse.value.copy(A.color),A.emissive&&v.emissive.value.copy(A.emissive).multiplyScalar(A.emissiveIntensity),A.map&&(v.map.value=A.map,t(A.map,v.mapTransform)),A.alphaMap&&(v.alphaMap.value=A.alphaMap,t(A.alphaMap,v.alphaMapTransform)),A.bumpMap&&(v.bumpMap.value=A.bumpMap,t(A.bumpMap,v.bumpMapTransform),v.bumpScale.value=A.bumpScale,A.side===Dn&&(v.bumpScale.value*=-1)),A.normalMap&&(v.normalMap.value=A.normalMap,t(A.normalMap,v.normalMapTransform),v.normalScale.value.copy(A.normalScale),A.side===Dn&&v.normalScale.value.negate()),A.displacementMap&&(v.displacementMap.value=A.displacementMap,t(A.displacementMap,v.displacementMapTransform),v.displacementScale.value=A.displacementScale,v.displacementBias.value=A.displacementBias),A.emissiveMap&&(v.emissiveMap.value=A.emissiveMap,t(A.emissiveMap,v.emissiveMapTransform)),A.specularMap&&(v.specularMap.value=A.specularMap,t(A.specularMap,v.specularMapTransform)),A.alphaTest>0&&(v.alphaTest.value=A.alphaTest);const b=e.get(A).envMap;if(b&&(v.envMap.value=b,v.flipEnvMap.value=b.isCubeTexture&&b.isRenderTargetTexture===!1?-1:1,v.reflectivity.value=A.reflectivity,v.ior.value=A.ior,v.refractionRatio.value=A.refractionRatio),A.lightMap){v.lightMap.value=A.lightMap;const f=n.useLegacyLights===!0?Math.PI:1;v.lightMapIntensity.value=A.lightMapIntensity*f,t(A.lightMap,v.lightMapTransform)}A.aoMap&&(v.aoMap.value=A.aoMap,v.aoMapIntensity.value=A.aoMapIntensity,t(A.aoMap,v.aoMapTransform))}function o(v,A){v.diffuse.value.copy(A.color),v.opacity.value=A.opacity,A.map&&(v.map.value=A.map,t(A.map,v.mapTransform))}function a(v,A){v.dashSize.value=A.dashSize,v.totalSize.value=A.dashSize+A.gapSize,v.scale.value=A.scale}function l(v,A,b,f){v.diffuse.value.copy(A.color),v.opacity.value=A.opacity,v.size.value=A.size*b,v.scale.value=f*.5,A.map&&(v.map.value=A.map,t(A.map,v.uvTransform)),A.alphaMap&&(v.alphaMap.value=A.alphaMap),A.alphaTest>0&&(v.alphaTest.value=A.alphaTest)}function c(v,A){v.diffuse.value.copy(A.color),v.opacity.value=A.opacity,v.rotation.value=A.rotation,A.map&&(v.map.value=A.map,t(A.map,v.mapTransform)),A.alphaMap&&(v.alphaMap.value=A.alphaMap),A.alphaTest>0&&(v.alphaTest.value=A.alphaTest)}function u(v,A){v.specular.value.copy(A.specular),v.shininess.value=Math.max(A.shininess,1e-4)}function C(v,A){A.gradientMap&&(v.gradientMap.value=A.gradientMap)}function d(v,A){v.metalness.value=A.metalness,A.metalnessMap&&(v.metalnessMap.value=A.metalnessMap,t(A.metalnessMap,v.metalnessMapTransform)),v.roughness.value=A.roughness,A.roughnessMap&&(v.roughnessMap.value=A.roughnessMap,t(A.roughnessMap,v.roughnessMapTransform)),e.get(A).envMap&&(v.envMapIntensity.value=A.envMapIntensity)}function h(v,A,b){v.ior.value=A.ior,A.sheen>0&&(v.sheenColor.value.copy(A.sheenColor).multiplyScalar(A.sheen),v.sheenRoughness.value=A.sheenRoughness,A.sheenColorMap&&(v.sheenColorMap.value=A.sheenColorMap,t(A.sheenColorMap,v.sheenColorMapTransform)),A.sheenRoughnessMap&&(v.sheenRoughnessMap.value=A.sheenRoughnessMap,t(A.sheenRoughnessMap,v.sheenRoughnessMapTransform))),A.clearcoat>0&&(v.clearcoat.value=A.clearcoat,v.clearcoatRoughness.value=A.clearcoatRoughness,A.clearcoatMap&&(v.clearcoatMap.value=A.clearcoatMap,t(A.clearcoatMap,v.clearcoatMapTransform)),A.clearcoatRoughnessMap&&(v.clearcoatRoughnessMap.value=A.clearcoatRoughnessMap,t(A.clearcoatRoughnessMap,v.clearcoatRoughnessMapTransform)),A.clearcoatNormalMap&&(v.clearcoatNormalMap.value=A.clearcoatNormalMap,t(A.clearcoatNormalMap,v.clearcoatNormalMapTransform),v.clearcoatNormalScale.value.copy(A.clearcoatNormalScale),A.side===Dn&&v.clearcoatNormalScale.value.negate())),A.iridescence>0&&(v.iridescence.value=A.iridescence,v.iridescenceIOR.value=A.iridescenceIOR,v.iridescenceThicknessMinimum.value=A.iridescenceThicknessRange[0],v.iridescenceThicknessMaximum.value=A.iridescenceThicknessRange[1],A.iridescenceMap&&(v.iridescenceMap.value=A.iridescenceMap,t(A.iridescenceMap,v.iridescenceMapTransform)),A.iridescenceThicknessMap&&(v.iridescenceThicknessMap.value=A.iridescenceThicknessMap,t(A.iridescenceThicknessMap,v.iridescenceThicknessMapTransform))),A.transmission>0&&(v.transmission.value=A.transmission,v.transmissionSamplerMap.value=b.texture,v.transmissionSamplerSize.value.set(b.width,b.height),A.transmissionMap&&(v.transmissionMap.value=A.transmissionMap,t(A.transmissionMap,v.transmissionMapTransform)),v.thickness.value=A.thickness,A.thicknessMap&&(v.thicknessMap.value=A.thicknessMap,t(A.thicknessMap,v.thicknessMapTransform)),v.attenuationDistance.value=A.attenuationDistance,v.attenuationColor.value.copy(A.attenuationColor)),v.specularIntensity.value=A.specularIntensity,v.specularColor.value.copy(A.specularColor),A.specularColorMap&&(v.specularColorMap.value=A.specularColorMap,t(A.specularColorMap,v.specularColorMapTransform)),A.specularIntensityMap&&(v.specularIntensityMap.value=A.specularIntensityMap,t(A.specularIntensityMap,v.specularIntensityMapTransform))}function m(v,A){A.matcap&&(v.matcap.value=A.matcap)}function y(v,A){const b=e.get(A).light;v.referencePosition.value.setFromMatrixPosition(b.matrixWorld),v.nearDistance.value=b.shadow.camera.near,v.farDistance.value=b.shadow.camera.far}return{refreshFogUniforms:i,refreshMaterialUniforms:s}}function Yz(n,e,t,i){let s={},r={},o=[];const a=t.isWebGL2?n.getParameter(n.MAX_UNIFORM_BUFFER_BINDINGS):0;function l(b,f){const B=f.program;i.uniformBlockBinding(b,B)}function c(b,f){let B=s[b.id];B===void 0&&(m(b),B=u(b),s[b.id]=B,b.addEventListener("dispose",v));const S=f.program;i.updateUBOMapping(b,S);const x=e.render.frame;r[b.id]!==x&&(d(b),r[b.id]=x)}function u(b){const f=C();b.__bindingPointIndex=f;const B=n.createBuffer(),S=b.__size,x=b.usage;return n.bindBuffer(n.UNIFORM_BUFFER,B),n.bufferData(n.UNIFORM_BUFFER,S,x),n.bindBuffer(n.UNIFORM_BUFFER,null),n.bindBufferBase(n.UNIFORM_BUFFER,f,B),B}function C(){for(let b=0;b0){x=B%S;const U=S-x;x!==0&&U-M.boundary<0&&(B+=S-x,Z.__offset=B)}B+=M.storage}return x=B%S,x>0&&(B+=S-x),b.__size=B,b.__cache={},this}function y(b){const f={boundary:0,storage:0};return typeof b=="number"?(f.boundary=4,f.storage=4):b.isVector2?(f.boundary=8,f.storage=8):b.isVector3||b.isColor?(f.boundary=16,f.storage=12):b.isVector4?(f.boundary=16,f.storage=16):b.isMatrix3?(f.boundary=48,f.storage=48):b.isMatrix4?(f.boundary=64,f.storage=64):b.isTexture?console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group."):console.warn("THREE.WebGLRenderer: Unsupported uniform value type.",b),f}function v(b){const f=b.target;f.removeEventListener("dispose",v);const B=o.indexOf(f.__bindingPointIndex);o.splice(B,1),n.deleteBuffer(s[f.id]),delete s[f.id],delete r[f.id]}function A(){for(const b in s)n.deleteBuffer(s[b]);o=[],s={},r={}}return{bind:l,update:c,dispose:A}}function Fz(){const n=xu("canvas");return n.style.display="block",n}class ev{constructor(e={}){const{canvas:t=Fz(),context:i=null,depth:s=!0,stencil:r=!0,alpha:o=!1,antialias:a=!1,premultipliedAlpha:l=!0,preserveDrawingBuffer:c=!1,powerPreference:u="default",failIfMajorPerformanceCaveat:C=!1}=e;this.isWebGLRenderer=!0;let d;i!==null?d=i.getContextAttributes().alpha:d=o;let h=null,m=null;const y=[],v=[];this.domElement=t,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.outputColorSpace=yt,this.useLegacyLights=!0,this.toneMapping=Ir,this.toneMappingExposure=1;const A=this;let b=!1,f=0,B=0,S=null,x=-1,R=null;const V=new Xt,Z=new Xt;let M=null,H=t.width,U=t.height,D=1,q=null,ie=null;const ue=new Xt(0,0,H,U),le=new Xt(0,0,H,U);let L=!1;const P=new QA;let O=!1,ce=!1,ge=null;const te=new Le,re=new X,Ze={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};function we(){return S===null?D:1}let J=i;function tt(F,ae){for(let fe=0;fe0?m=v[v.length-1]:m=null,y.pop(),y.length>0?h=y[y.length-1]:h=null};function jn(F,ae,fe,se){if(F.visible===!1)return;if(F.layers.test(ae.layers)){if(F.isGroup)fe=F.renderOrder;else if(F.isLOD)F.autoUpdate===!0&&F.update(ae);else if(F.isLight)m.pushLight(F),F.castShadow&&m.pushShadow(F);else if(F.isSprite){if(!F.frustumCulled||P.intersectsSprite(F)){se&&re.setFromMatrixPosition(F.matrixWorld).applyMatrix4(te);const ct=Je.update(F),ut=F.material;ut.visible&&h.push(F,ct,ut,fe,re.z,null)}}else if((F.isMesh||F.isLine||F.isPoints)&&(!F.frustumCulled||P.intersectsObject(F))){F.isSkinnedMesh&&F.skeleton.frame!==ye.render.frame&&(F.skeleton.update(),F.skeleton.frame=ye.render.frame);const ct=Je.update(F),ut=F.material;if(se&&(ct.boundingSphere===null&&ct.computeBoundingSphere(),re.copy(ct.boundingSphere.center).applyMatrix4(F.matrixWorld).applyMatrix4(te)),Array.isArray(ut)){const pt=ct.groups;for(let wt=0,St=pt.length;wt0&&un(be,st,ae,fe),se&&ze.viewport(V.copy(se)),be.length>0&&Zi(be,ae,fe),st.length>0&&Zi(st,ae,fe),ct.length>0&&Zi(ct,ae,fe),ze.buffers.depth.setTest(!0),ze.buffers.depth.setMask(!0),ze.buffers.color.setMask(!0),ze.setPolygonOffset(!1)}function un(F,ae,fe,se){if(ge===null){const ut=We.isWebGL2;ge=new Nt(1024,1024,{generateMipmaps:!0,type:rt.has("EXT_color_buffer_half_float")?ds:ln,minFilter:ha,samples:ut&&a===!0?4:0})}const be=A.getRenderTarget();A.setRenderTarget(ge),A.clear();const st=A.toneMapping;A.toneMapping=Ir,Zi(F,fe,se),Be.updateMultisampleRenderTarget(ge),Be.updateRenderTargetMipmap(ge);let ct=!1;for(let ut=0,pt=ae.length;ut0&&Be.useMultisampledRTT(F)===!1?be=de.get(F).__webglMultisampledFramebuffer:be=St,V.copy(F.viewport),Z.copy(F.scissor),M=F.scissorTest}else V.copy(ue).multiplyScalar(D).floor(),Z.copy(le).multiplyScalar(D).floor(),M=L;if(ze.bindFramebuffer(J.FRAMEBUFFER,be)&&We.drawBuffers&&se&&ze.drawBuffers(F,be),ze.viewport(V),ze.scissor(Z),ze.setScissorTest(M),st){const pt=de.get(F.texture);J.framebufferTexture2D(J.FRAMEBUFFER,J.COLOR_ATTACHMENT0,J.TEXTURE_CUBE_MAP_POSITIVE_X+ae,pt.__webglTexture,fe)}else if(ct){const pt=de.get(F.texture),wt=ae||0;J.framebufferTextureLayer(J.FRAMEBUFFER,J.COLOR_ATTACHMENT0,pt.__webglTexture,fe||0,wt)}x=-1},this.readRenderTargetPixels=function(F,ae,fe,se,be,st,ct){if(!(F&&F.isWebGLRenderTarget)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");return}let ut=de.get(F).__webglFramebuffer;if(F.isWebGLCubeRenderTarget&&ct!==void 0&&(ut=ut[ct]),ut){ze.bindFramebuffer(J.FRAMEBUFFER,ut);try{const pt=F.texture,wt=pt.format,St=pt.type;if(wt!==hn&&me.convert(wt)!==J.getParameter(J.IMPLEMENTATION_COLOR_READ_FORMAT)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}const Wt=St===ds&&(rt.has("EXT_color_buffer_half_float")||We.isWebGL2&&rt.has("EXT_color_buffer_float"));if(St!==ln&&me.convert(St)!==J.getParameter(J.IMPLEMENTATION_COLOR_READ_TYPE)&&!(St===Rn&&(We.isWebGL2||rt.has("OES_texture_float")||rt.has("WEBGL_color_buffer_float")))&&!Wt){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}ae>=0&&ae<=F.width-se&&fe>=0&&fe<=F.height-be&&J.readPixels(ae,fe,se,be,me.convert(wt),me.convert(St),st)}finally{const pt=S!==null?de.get(S).__webglFramebuffer:null;ze.bindFramebuffer(J.FRAMEBUFFER,pt)}}},this.copyFramebufferToTexture=function(F,ae,fe=0){const se=Math.pow(2,-fe),be=Math.floor(ae.image.width*se),st=Math.floor(ae.image.height*se);Be.setTexture2D(ae,0),J.copyTexSubImage2D(J.TEXTURE_2D,fe,0,0,F.x,F.y,be,st),ze.unbindTexture()},this.copyTextureToTexture=function(F,ae,fe,se=0){const be=ae.image.width,st=ae.image.height,ct=me.convert(fe.format),ut=me.convert(fe.type);Be.setTexture2D(fe,0),J.pixelStorei(J.UNPACK_FLIP_Y_WEBGL,fe.flipY),J.pixelStorei(J.UNPACK_PREMULTIPLY_ALPHA_WEBGL,fe.premultiplyAlpha),J.pixelStorei(J.UNPACK_ALIGNMENT,fe.unpackAlignment),ae.isDataTexture?J.texSubImage2D(J.TEXTURE_2D,se,F.x,F.y,be,st,ct,ut,ae.image.data):ae.isCompressedTexture?J.compressedTexSubImage2D(J.TEXTURE_2D,se,F.x,F.y,ae.mipmaps[0].width,ae.mipmaps[0].height,ct,ae.mipmaps[0].data):J.texSubImage2D(J.TEXTURE_2D,se,F.x,F.y,ct,ut,ae.image),se===0&&fe.generateMipmaps&&J.generateMipmap(J.TEXTURE_2D),ze.unbindTexture()},this.copyTextureToTexture3D=function(F,ae,fe,se,be=0){if(A.isWebGL1Renderer){console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.");return}const st=F.max.x-F.min.x+1,ct=F.max.y-F.min.y+1,ut=F.max.z-F.min.z+1,pt=me.convert(se.format),wt=me.convert(se.type);let St;if(se.isData3DTexture)Be.setTexture3D(se,0),St=J.TEXTURE_3D;else if(se.isDataArrayTexture)Be.setTexture2DArray(se,0),St=J.TEXTURE_2D_ARRAY;else{console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.");return}J.pixelStorei(J.UNPACK_FLIP_Y_WEBGL,se.flipY),J.pixelStorei(J.UNPACK_PREMULTIPLY_ALPHA_WEBGL,se.premultiplyAlpha),J.pixelStorei(J.UNPACK_ALIGNMENT,se.unpackAlignment);const Wt=J.getParameter(J.UNPACK_ROW_LENGTH),_t=J.getParameter(J.UNPACK_IMAGE_HEIGHT),si=J.getParameter(J.UNPACK_SKIP_PIXELS),ns=J.getParameter(J.UNPACK_SKIP_ROWS),Us=J.getParameter(J.UNPACK_SKIP_IMAGES),rn=fe.isCompressedTexture?fe.mipmaps[0]:fe.image;J.pixelStorei(J.UNPACK_ROW_LENGTH,rn.width),J.pixelStorei(J.UNPACK_IMAGE_HEIGHT,rn.height),J.pixelStorei(J.UNPACK_SKIP_PIXELS,F.min.x),J.pixelStorei(J.UNPACK_SKIP_ROWS,F.min.y),J.pixelStorei(J.UNPACK_SKIP_IMAGES,F.min.z),fe.isDataTexture||fe.isData3DTexture?J.texSubImage3D(St,be,ae.x,ae.y,ae.z,st,ct,ut,pt,wt,rn.data):fe.isCompressedArrayTexture?(console.warn("THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture."),J.compressedTexSubImage3D(St,be,ae.x,ae.y,ae.z,st,ct,ut,pt,rn.data)):J.texSubImage3D(St,be,ae.x,ae.y,ae.z,st,ct,ut,pt,wt,rn),J.pixelStorei(J.UNPACK_ROW_LENGTH,Wt),J.pixelStorei(J.UNPACK_IMAGE_HEIGHT,_t),J.pixelStorei(J.UNPACK_SKIP_PIXELS,si),J.pixelStorei(J.UNPACK_SKIP_ROWS,ns),J.pixelStorei(J.UNPACK_SKIP_IMAGES,Us),be===0&&se.generateMipmaps&&J.generateMipmap(St),ze.unbindTexture()},this.initTexture=function(F){F.isCubeTexture?Be.setTextureCube(F,0):F.isData3DTexture?Be.setTexture3D(F,0):F.isDataArrayTexture||F.isCompressedArrayTexture?Be.setTexture2DArray(F,0):Be.setTexture2D(F,0),ze.unbindTexture()},this.resetState=function(){f=0,B=0,S=null,ze.reset(),Pe.reset()},typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}get physicallyCorrectLights(){return console.warn("THREE.WebGLRenderer: the property .physicallyCorrectLights has been removed. Set renderer.useLegacyLights instead."),!this.useLegacyLights}set physicallyCorrectLights(e){console.warn("THREE.WebGLRenderer: the property .physicallyCorrectLights has been removed. Set renderer.useLegacyLights instead."),this.useLegacyLights=!e}get outputEncoding(){return console.warn("THREE.WebGLRenderer: Property .outputEncoding has been removed. Use .outputColorSpace instead."),this.outputColorSpace===yt?zs:Pu}set outputEncoding(e){console.warn("THREE.WebGLRenderer: Property .outputEncoding has been removed. Use .outputColorSpace instead."),this.outputColorSpace=e===zs?yt:Cr}}class cW extends ev{}cW.prototype.isWebGL1Renderer=!0;class ep{constructor(e,t=25e-5){this.isFogExp2=!0,this.name="",this.color=new Ne(e),this.density=t}clone(){return new ep(this.color,this.density)}toJSON(){return{type:"FogExp2",color:this.color.getHex(),density:this.density}}}class tp{constructor(e,t=1,i=1e3){this.isFog=!0,this.name="",this.color=new Ne(e),this.near=t,this.far=i}clone(){return new tp(this.color,this.near,this.far)}toJSON(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}}}class Gl extends Ft{constructor(){super(),this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.overrideMaterial=null,typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(e,t){return super.copy(e,t),e.background!==null&&(this.background=e.background.clone()),e.environment!==null&&(this.environment=e.environment.clone()),e.fog!==null&&(this.fog=e.fog.clone()),this.backgroundBlurriness=e.backgroundBlurriness,this.backgroundIntensity=e.backgroundIntensity,e.overrideMaterial!==null&&(this.overrideMaterial=e.overrideMaterial.clone()),this.matrixAutoUpdate=e.matrixAutoUpdate,this}toJSON(e){const t=super.toJSON(e);return this.fog!==null&&(t.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(t.object.backgroundBlurriness=this.backgroundBlurriness),this.backgroundIntensity!==1&&(t.object.backgroundIntensity=this.backgroundIntensity),t}get autoUpdate(){return console.warn("THREE.Scene: autoUpdate was renamed to matrixWorldAutoUpdate in r144."),this.matrixWorldAutoUpdate}set autoUpdate(e){console.warn("THREE.Scene: autoUpdate was renamed to matrixWorldAutoUpdate in r144."),this.matrixWorldAutoUpdate=e}}class np{constructor(e,t){this.isInterleavedBuffer=!0,this.array=e,this.stride=t,this.count=e!==void 0?e.length/t:0,this.usage=Su,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=hs()}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}copy(e){return this.array=new e.array.constructor(e.array),this.count=e.count,this.stride=e.stride,this.usage=e.usage,this}copyAt(e,t,i){e*=this.stride,i*=t.stride;for(let s=0,r=this.stride;se.far||t.push({distance:l,point:gI.clone(),uv:Ji.getInterpolation(gI,Ed,II,kd,pZ,uf,mZ,new ne),face:null,object:this})}copy(e,t){return super.copy(e,t),e.center!==void 0&&this.center.copy(e.center),this.material=e.material,this}}function Dd(n,e,t,i,s,r){mg.subVectors(n,t).addScalar(.5).multiply(i),s!==void 0?(cI.x=r*mg.x-s*mg.y,cI.y=s*mg.x+r*mg.y):cI.copy(mg),n.copy(e),n.x+=cI.x,n.y+=cI.y,n.applyMatrix4(IW)}const Ud=new X,fZ=new X;class CW extends Ft{constructor(){super(),this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]},isLOD:{value:!0}}),this.autoUpdate=!0}copy(e){super.copy(e,!1);const t=e.levels;for(let i=0,s=t.length;i0){let i,s;for(i=1,s=t.length;i0){Ud.setFromMatrixPosition(this.matrixWorld);const s=e.ray.origin.distanceTo(Ud);this.getObjectForDistance(s).raycast(e,t)}}update(e){const t=this.levels;if(t.length>1){Ud.setFromMatrixPosition(e.matrixWorld),fZ.setFromMatrixPosition(this.matrixWorld);const i=Ud.distanceTo(fZ)/e.zoom;t[0].object.visible=!0;let s,r;for(s=1,r=t.length;s=o)t[s-1].object.visible=!1,t[s].object.visible=!0;else break}for(this._currentLevel=s-1;sl)continue;d.applyMatrix4(this.matrixWorld);const V=e.ray.origin.distanceTo(d);Ve.far||t.push({distance:V,point:C.clone().applyMatrix4(this.matrixWorld),index:f,face:null,faceIndex:null,object:this})}}else{const A=Math.max(0,o.start),b=Math.min(v.count,o.start+o.count);for(let f=A,B=b-1;fl)continue;d.applyMatrix4(this.matrixWorld);const x=e.ray.origin.distanceTo(d);xe.far||t.push({distance:x,point:C.clone().applyMatrix4(this.matrixWorld),index:f,face:null,faceIndex:null,object:this})}}}updateMorphTargets(){const t=this.geometry.morphAttributes,i=Object.keys(t);if(i.length>0){const s=t[i[0]];if(s!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let r=0,o=s.length;r0){const s=t[i[0]];if(s!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let r=0,o=s.length;rs.far)return;r.push({distance:c,distanceToRay:Math.sqrt(a),point:l,index:e,face:null,object:o})}}class pW extends en{constructor(e,t,i,s,r,o,a,l,c){super(e,t,i,s,r,o,a,l,c),this.isVideoTexture=!0,this.minFilter=o!==void 0?o:et,this.magFilter=r!==void 0?r:et,this.generateMipmaps=!1;const u=this;function C(){u.needsUpdate=!0,e.requestVideoFrameCallback(C)}"requestVideoFrameCallback"in e&&e.requestVideoFrameCallback(C)}clone(){return new this.constructor(this.image).copy(this)}update(){const e=this.image;"requestVideoFrameCallback"in e===!1&&e.readyState>=e.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}class Ab extends en{constructor(e,t,i){super({width:e,height:t}),this.isFramebufferTexture=!0,this.format=i,this.magFilter=ft,this.minFilter=ft,this.generateMipmaps=!1,this.needsUpdate=!0}}class sv extends en{constructor(e,t,i,s,r,o,a,l,c,u,C,d){super(null,o,a,l,c,u,s,r,C,d),this.isCompressedTexture=!0,this.image={width:t,height:i},this.mipmaps=e,this.flipY=!1,this.generateMipmaps=!1}}class Tz extends sv{constructor(e,t,i,s,r,o){super(e,t,i,r,o),this.isCompressedArrayTexture=!0,this.image.depth=s,this.wrapR=En}}class mW extends en{constructor(e,t,i,s,r,o,a,l,c){super(e,t,i,s,r,o,a,l,c),this.isCanvasTexture=!0,this.needsUpdate=!0}}class dr{constructor(){this.type="Curve",this.arcLengthDivisions=200}getPoint(){return console.warn("THREE.Curve: .getPoint() not implemented."),null}getPointAt(e,t){const i=this.getUtoTmapping(e);return this.getPoint(i,t)}getPoints(e=5){const t=[];for(let i=0;i<=e;i++)t.push(this.getPoint(i/e));return t}getSpacedPoints(e=5){const t=[];for(let i=0;i<=e;i++)t.push(this.getPointAt(i/e));return t}getLength(){const e=this.getLengths();return e[e.length-1]}getLengths(e=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===e+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const t=[];let i,s=this.getPoint(0),r=0;t.push(0);for(let o=1;o<=e;o++)i=this.getPoint(o/e),r+=i.distanceTo(s),t.push(r),s=i;return this.cacheArcLengths=t,t}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(e,t){const i=this.getLengths();let s=0;const r=i.length;let o;t?o=t:o=e*i[r-1];let a=0,l=r-1,c;for(;a<=l;)if(s=Math.floor(a+(l-a)/2),c=i[s]-o,c<0)a=s+1;else if(c>0)l=s-1;else{l=s;break}if(s=l,i[s]===o)return s/(r-1);const u=i[s],d=i[s+1]-u,h=(o-u)/d;return(s+h)/(r-1)}getTangent(e,t){let s=e-1e-4,r=e+1e-4;s<0&&(s=0),r>1&&(r=1);const o=this.getPoint(s),a=this.getPoint(r),l=t||(o.isVector2?new ne:new X);return l.copy(a).sub(o).normalize(),l}getTangentAt(e,t){const i=this.getUtoTmapping(e);return this.getTangent(i,t)}computeFrenetFrames(e,t){const i=new X,s=[],r=[],o=[],a=new X,l=new Le;for(let h=0;h<=e;h++){const m=h/e;s[h]=this.getTangentAt(m,new X)}r[0]=new X,o[0]=new X;let c=Number.MAX_VALUE;const u=Math.abs(s[0].x),C=Math.abs(s[0].y),d=Math.abs(s[0].z);u<=c&&(c=u,i.set(1,0,0)),C<=c&&(c=C,i.set(0,1,0)),d<=c&&i.set(0,0,1),a.crossVectors(s[0],i).normalize(),r[0].crossVectors(s[0],a),o[0].crossVectors(s[0],r[0]);for(let h=1;h<=e;h++){if(r[h]=r[h-1].clone(),o[h]=o[h-1].clone(),a.crossVectors(s[h-1],s[h]),a.length()>Number.EPSILON){a.normalize();const m=Math.acos(wn(s[h-1].dot(s[h]),-1,1));r[h].applyMatrix4(l.makeRotationAxis(a,m))}o[h].crossVectors(s[h],r[h])}if(t===!0){let h=Math.acos(wn(r[0].dot(r[e]),-1,1));h/=e,s[0].dot(a.crossVectors(r[0],r[e]))>0&&(h=-h);for(let m=1;m<=e;m++)r[m].applyMatrix4(l.makeRotationAxis(s[m],h*m)),o[m].crossVectors(s[m],r[m])}return{tangents:s,normals:r,binormals:o}}clone(){return new this.constructor().copy(this)}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}toJSON(){const e={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.type,e}fromJSON(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}}class sp extends dr{constructor(e=0,t=0,i=1,s=1,r=0,o=Math.PI*2,a=!1,l=0){super(),this.isEllipseCurve=!0,this.type="EllipseCurve",this.aX=e,this.aY=t,this.xRadius=i,this.yRadius=s,this.aStartAngle=r,this.aEndAngle=o,this.aClockwise=a,this.aRotation=l}getPoint(e,t){const i=t||new ne,s=Math.PI*2;let r=this.aEndAngle-this.aStartAngle;const o=Math.abs(r)s;)r-=s;r0?0:(Math.floor(Math.abs(a)/r)+1)*r:l===0&&a===r-1&&(a=r-2,l=1);let c,u;this.closed||a>0?c=s[(a-1)%r]:(Qd.subVectors(s[0],s[1]).add(s[0]),c=Qd);const C=s[a%r],d=s[(a+1)%r];if(this.closed||a+2s.length-2?s.length-1:o+1],C=s[o>s.length-3?s.length-1:o+2];return i.set(HZ(a,l.x,c.x,u.x,C.x),HZ(a,l.y,c.y,u.y,C.y)),i}copy(e){super.copy(e),this.points=[];for(let t=0,i=e.points.length;t=i){const o=s[r]-i,a=this.curves[r],l=a.getLength(),c=l===0?0:1-o/l;return a.getPointAt(c,t)}r++}return null}getLength(){const e=this.getCurveLengths();return e[e.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const e=[];let t=0;for(let i=0,s=this.curves.length;i1&&!t[t.length-1].equals(t[0])&&t.push(t[0]),t}copy(e){super.copy(e),this.curves=[];for(let t=0,i=e.curves.length;t0){const C=c.getPoint(0);C.equals(this.currentPoint)||this.lineTo(C.x,C.y)}this.curves.push(c);const u=c.getPoint(1);return this.currentPoint.copy(u),this}copy(e){return super.copy(e),this.currentPoint.copy(e.currentPoint),this}toJSON(){const e=super.toJSON();return e.currentPoint=this.currentPoint.toArray(),e}fromJSON(e){return super.fromJSON(e),this.currentPoint.fromArray(e.currentPoint),this}}class Bc extends vt{constructor(e=[new ne(0,-.5),new ne(.5,0),new ne(0,.5)],t=12,i=0,s=Math.PI*2){super(),this.type="LatheGeometry",this.parameters={points:e,segments:t,phiStart:i,phiLength:s},t=Math.floor(t),s=wn(s,0,Math.PI*2);const r=[],o=[],a=[],l=[],c=[],u=1/t,C=new X,d=new ne,h=new X,m=new X,y=new X;let v=0,A=0;for(let b=0;b<=e.length-1;b++)switch(b){case 0:v=e[b+1].x-e[b].x,A=e[b+1].y-e[b].y,h.x=A*1,h.y=-v,h.z=A*0,y.copy(h),h.normalize(),l.push(h.x,h.y,h.z);break;case e.length-1:l.push(y.x,y.y,y.z);break;default:v=e[b+1].x-e[b].x,A=e[b+1].y-e[b].y,h.x=A*1,h.y=-v,h.z=A*0,m.copy(h),h.x+=y.x,h.y+=y.y,h.z+=y.z,h.normalize(),l.push(h.x,h.y,h.z),y.copy(m)}for(let b=0;b<=t;b++){const f=i+b*u*s,B=Math.sin(f),S=Math.cos(f);for(let x=0;x<=e.length-1;x++){C.x=e[x].x*B,C.y=e[x].y,C.z=e[x].x*S,o.push(C.x,C.y,C.z),d.x=b/t,d.y=x/(e.length-1),a.push(d.x,d.y);const R=l[3*x+0]*B,V=l[3*x+1],Z=l[3*x+0]*S;c.push(R,V,Z)}}for(let b=0;b0&&f(!0),t>0&&f(!1)),this.setIndex(u),this.setAttribute("position",new _e(C,3)),this.setAttribute("normal",new _e(d,3)),this.setAttribute("uv",new _e(h,2));function b(){const B=new X,S=new X;let x=0;const R=(t-e)/i;for(let V=0;V<=r;V++){const Z=[],M=V/r,H=M*(t-e)+e;for(let U=0;U<=s;U++){const D=U/s,q=D*l+a,ie=Math.sin(q),ue=Math.cos(q);S.x=H*ie,S.y=-M*i+v,S.z=H*ue,C.push(S.x,S.y,S.z),B.set(ie,R,ue).normalize(),d.push(B.x,B.y,B.z),h.push(D,1-M),Z.push(m++)}y.push(Z)}for(let V=0;V.9&&R<.1&&(f<.2&&(o[b+0]+=1),B<.2&&(o[b+2]+=1),S<.2&&(o[b+4]+=1))}}function d(b){r.push(b.x,b.y,b.z)}function h(b,f){const B=b*3;f.x=e[B+0],f.y=e[B+1],f.z=e[B+2]}function m(){const b=new X,f=new X,B=new X,S=new X,x=new ne,R=new ne,V=new ne;for(let Z=0,M=0;Z80*t){a=c=n[0],l=u=n[1];for(let m=t;mc&&(c=C),d>u&&(u=d);h=Math.max(c-a,u-l),h=h!==0?32767/h:0}return Wu(r,o,t,a,l,h,0),o}};function ZW(n,e,t,i,s){let r,o;if(s===IL(n,e,t,i)>0)for(r=e;r=e;r-=i)o=XZ(r,n[r],n[r+1],o);return o&&op(o,o.next)&&(Mu(o),o=o.next),o}function Zl(n,e){if(!n)return n;e||(e=n);let t=n,i;do if(i=!1,!t.steiner&&(op(t,t.next)||mn(t.prev,t,t.next)===0)){if(Mu(t),t=e=t.prev,t===t.next)break;i=!0}else t=t.next;while(i||t!==e);return e}function Wu(n,e,t,i,s,r,o){if(!n)return;!o&&r&&rL(n,i,s,r);let a=n,l,c;for(;n.prev!==n.next;){if(l=n.prev,c=n.next,r?jz(n,i,s,r):Qz(n)){e.push(l.i/t|0),e.push(n.i/t|0),e.push(c.i/t|0),Mu(n),n=c.next,a=c.next;continue}if(n=c,n===a){o?o===1?(n=qz(Zl(n),e,t),Wu(n,e,t,i,s,r,2)):o===2&&$z(n,e,t,i,s,r):Wu(Zl(n),e,t,i,s,r,1);break}}}function Qz(n){const e=n.prev,t=n,i=n.next;if(mn(e,t,i)>=0)return!1;const s=e.x,r=t.x,o=i.x,a=e.y,l=t.y,c=i.y,u=sr?s>o?s:o:r>o?r:o,h=a>l?a>c?a:c:l>c?l:c;let m=i.next;for(;m!==e;){if(m.x>=u&&m.x<=d&&m.y>=C&&m.y<=h&&Tg(s,a,r,l,o,c,m.x,m.y)&&mn(m.prev,m,m.next)>=0)return!1;m=m.next}return!0}function jz(n,e,t,i){const s=n.prev,r=n,o=n.next;if(mn(s,r,o)>=0)return!1;const a=s.x,l=r.x,c=o.x,u=s.y,C=r.y,d=o.y,h=al?a>c?a:c:l>c?l:c,v=u>C?u>d?u:d:C>d?C:d,A=pb(h,m,e,t,i),b=pb(y,v,e,t,i);let f=n.prevZ,B=n.nextZ;for(;f&&f.z>=A&&B&&B.z<=b;){if(f.x>=h&&f.x<=y&&f.y>=m&&f.y<=v&&f!==s&&f!==o&&Tg(a,u,l,C,c,d,f.x,f.y)&&mn(f.prev,f,f.next)>=0||(f=f.prevZ,B.x>=h&&B.x<=y&&B.y>=m&&B.y<=v&&B!==s&&B!==o&&Tg(a,u,l,C,c,d,B.x,B.y)&&mn(B.prev,B,B.next)>=0))return!1;B=B.nextZ}for(;f&&f.z>=A;){if(f.x>=h&&f.x<=y&&f.y>=m&&f.y<=v&&f!==s&&f!==o&&Tg(a,u,l,C,c,d,f.x,f.y)&&mn(f.prev,f,f.next)>=0)return!1;f=f.prevZ}for(;B&&B.z<=b;){if(B.x>=h&&B.x<=y&&B.y>=m&&B.y<=v&&B!==s&&B!==o&&Tg(a,u,l,C,c,d,B.x,B.y)&&mn(B.prev,B,B.next)>=0)return!1;B=B.nextZ}return!0}function qz(n,e,t){let i=n;do{const s=i.prev,r=i.next.next;!op(s,r)&&wW(s,i,i.next,r)&&Vu(s,r)&&Vu(r,s)&&(e.push(s.i/t|0),e.push(i.i/t|0),e.push(r.i/t|0),Mu(i),Mu(i.next),i=n=r),i=i.next}while(i!==n);return Zl(i)}function $z(n,e,t,i,s,r){let o=n;do{let a=o.next.next;for(;a!==o.prev;){if(o.i!==a.i&&lL(o,a)){let l=SW(o,a);o=Zl(o,o.next),l=Zl(l,l.next),Wu(o,e,t,i,s,r,0),Wu(l,e,t,i,s,r,0);return}a=a.next}o=o.next}while(o!==n)}function eL(n,e,t,i){const s=[];let r,o,a,l,c;for(r=0,o=e.length;r=t.next.y&&t.next.y!==t.y){const d=t.x+(o-t.y)*(t.next.x-t.x)/(t.next.y-t.y);if(d<=r&&d>i&&(i=d,s=t.x=t.x&&t.x>=l&&r!==t.x&&Tg(os.x||t.x===s.x&&sL(s,t)))&&(s=t,u=C)),t=t.next;while(t!==a);return s}function sL(n,e){return mn(n.prev,n,e.prev)<0&&mn(e.next,n,n.next)<0}function rL(n,e,t,i){let s=n;do s.z===0&&(s.z=pb(s.x,s.y,e,t,i)),s.prevZ=s.prev,s.nextZ=s.next,s=s.next;while(s!==n);s.prevZ.nextZ=null,s.prevZ=null,oL(s)}function oL(n){let e,t,i,s,r,o,a,l,c=1;do{for(t=n,n=null,r=null,o=0;t;){for(o++,i=t,a=0,e=0;e0||l>0&&i;)a!==0&&(l===0||!i||t.z<=i.z)?(s=t,t=t.nextZ,a--):(s=i,i=i.nextZ,l--),r?r.nextZ=s:n=s,s.prevZ=r,r=s;t=i}r.nextZ=null,c*=2}while(o>1);return n}function pb(n,e,t,i,s){return n=(n-t)*s|0,e=(e-i)*s|0,n=(n|n<<8)&16711935,n=(n|n<<4)&252645135,n=(n|n<<2)&858993459,n=(n|n<<1)&1431655765,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,n|e<<1}function aL(n){let e=n,t=n;do(e.x=(n-o)*(r-a)&&(n-o)*(i-a)>=(t-o)*(e-a)&&(t-o)*(r-a)>=(s-o)*(i-a)}function lL(n,e){return n.next.i!==e.i&&n.prev.i!==e.i&&!gL(n,e)&&(Vu(n,e)&&Vu(e,n)&&cL(n,e)&&(mn(n.prev,n,e.prev)||mn(n,e.prev,e))||op(n,e)&&mn(n.prev,n,n.next)>0&&mn(e.prev,e,e.next)>0)}function mn(n,e,t){return(e.y-n.y)*(t.x-e.x)-(e.x-n.x)*(t.y-e.y)}function op(n,e){return n.x===e.x&&n.y===e.y}function wW(n,e,t,i){const s=th(mn(n,e,t)),r=th(mn(n,e,i)),o=th(mn(t,i,n)),a=th(mn(t,i,e));return!!(s!==r&&o!==a||s===0&&eh(n,t,e)||r===0&&eh(n,i,e)||o===0&&eh(t,n,i)||a===0&&eh(t,e,i))}function eh(n,e,t){return e.x<=Math.max(n.x,t.x)&&e.x>=Math.min(n.x,t.x)&&e.y<=Math.max(n.y,t.y)&&e.y>=Math.min(n.y,t.y)}function th(n){return n>0?1:n<0?-1:0}function gL(n,e){let t=n;do{if(t.i!==n.i&&t.next.i!==n.i&&t.i!==e.i&&t.next.i!==e.i&&wW(t,t.next,n,e))return!0;t=t.next}while(t!==n);return!1}function Vu(n,e){return mn(n.prev,n,n.next)<0?mn(n,e,n.next)>=0&&mn(n,n.prev,e)>=0:mn(n,e,n.prev)<0||mn(n,n.next,e)<0}function cL(n,e){let t=n,i=!1;const s=(n.x+e.x)/2,r=(n.y+e.y)/2;do t.y>r!=t.next.y>r&&t.next.y!==t.y&&s<(t.next.x-t.x)*(r-t.y)/(t.next.y-t.y)+t.x&&(i=!i),t=t.next;while(t!==n);return i}function SW(n,e){const t=new mb(n.i,n.x,n.y),i=new mb(e.i,e.x,e.y),s=n.next,r=e.prev;return n.next=e,e.prev=n,t.next=s,s.prev=t,i.next=t,t.prev=i,r.next=i,i.prev=r,i}function XZ(n,e,t,i){const s=new mb(n,e,t);return i?(s.next=i.next,s.prev=i,i.next.prev=s,i.next=s):(s.prev=s,s.next=s),s}function Mu(n){n.next.prev=n.prev,n.prev.next=n.next,n.prevZ&&(n.prevZ.nextZ=n.nextZ),n.nextZ&&(n.nextZ.prevZ=n.prevZ)}function mb(n,e,t){this.i=n,this.x=e,this.y=t,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}function IL(n,e,t,i){let s=0;for(let r=e,o=t-i;r2&&n[e-1].equals(n[0])&&n.pop()}function FZ(n,e){for(let t=0;tNumber.EPSILON){const Ie=Math.sqrt(k),Se=Math.sqrt(It*It+Ht*Ht),xe=de.x-Je/Ie,Xe=de.y+nt/Ie,lt=Be.x-Ht/Se,Te=Be.y+It/Se,me=((lt-xe)*Ht-(Te-Xe)*It)/(nt*Ht-Je*It);ke=xe+nt*me-ye.x,He=Xe+Je*me-ye.y;const Pe=ke*ke+He*He;if(Pe<=2)return new ne(ke,He);it=Math.sqrt(Pe/2)}else{let Ie=!1;nt>Number.EPSILON?It>Number.EPSILON&&(Ie=!0):nt<-Number.EPSILON?It<-Number.EPSILON&&(Ie=!0):Math.sign(Je)===Math.sign(Ht)&&(Ie=!0),Ie?(ke=-Je,He=nt,it=Math.sqrt(k)):(ke=nt,He=Je,it=Math.sqrt(k/2))}return new ne(ke/it,He/it)}const P=[];for(let ye=0,de=q.length,Be=de-1,ke=ye+1;ye=0;ye--){const de=ye/v,Be=h*Math.cos(de*Math.PI/2),ke=m*Math.sin(de*Math.PI/2)+y;for(let He=0,it=q.length;He=0;){const ke=Be;let He=Be-1;He<0&&(He=ye.length-1);for(let it=0,nt=u+v*2;it0)&&h.push(f,B,x),(A!==i-1||l0!=e>0&&this.version++,this._sheen=e}get clearcoat(){return this._clearcoat}set clearcoat(e){this._clearcoat>0!=e>0&&this.version++,this._clearcoat=e}get iridescence(){return this._iridescence}set iridescence(e){this._iridescence>0!=e>0&&this.version++,this._iridescence=e}get transmission(){return this._transmission}set transmission(e){this._transmission>0!=e>0&&this.version++,this._transmission=e}copy(e){return super.copy(e),this.defines={STANDARD:"",PHYSICAL:""},this.clearcoat=e.clearcoat,this.clearcoatMap=e.clearcoatMap,this.clearcoatRoughness=e.clearcoatRoughness,this.clearcoatRoughnessMap=e.clearcoatRoughnessMap,this.clearcoatNormalMap=e.clearcoatNormalMap,this.clearcoatNormalScale.copy(e.clearcoatNormalScale),this.ior=e.ior,this.iridescence=e.iridescence,this.iridescenceMap=e.iridescenceMap,this.iridescenceIOR=e.iridescenceIOR,this.iridescenceThicknessRange=[...e.iridescenceThicknessRange],this.iridescenceThicknessMap=e.iridescenceThicknessMap,this.sheen=e.sheen,this.sheenColor.copy(e.sheenColor),this.sheenColorMap=e.sheenColorMap,this.sheenRoughness=e.sheenRoughness,this.sheenRoughnessMap=e.sheenRoughnessMap,this.transmission=e.transmission,this.transmissionMap=e.transmissionMap,this.thickness=e.thickness,this.thicknessMap=e.thicknessMap,this.attenuationDistance=e.attenuationDistance,this.attenuationColor.copy(e.attenuationColor),this.specularIntensity=e.specularIntensity,this.specularIntensityMap=e.specularIntensityMap,this.specularColor.copy(e.specularColor),this.specularColorMap=e.specularColorMap,this}}class MW extends Qn{constructor(e){super(),this.isMeshPhongMaterial=!0,this.type="MeshPhongMaterial",this.color=new Ne(16777215),this.specular=new Ne(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Ne(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=vo,this.normalScale=new ne(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=Uu,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.specular.copy(e.specular),this.shininess=e.shininess,this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}}class NW extends Qn{constructor(e){super(),this.isMeshToonMaterial=!0,this.defines={TOON:""},this.type="MeshToonMaterial",this.color=new Ne(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Ne(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=vo,this.normalScale=new ne(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.gradientMap=e.gradientMap,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.alphaMap=e.alphaMap,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}}class Iv extends Qn{constructor(e){super(),this.isMeshNormalMaterial=!0,this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=vo,this.normalScale=new ne(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.flatShading=!1,this.setValues(e)}copy(e){return super.copy(e),this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.flatShading=e.flatShading,this}}class HW extends Qn{constructor(e){super(),this.isMeshLambertMaterial=!0,this.type="MeshLambertMaterial",this.color=new Ne(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Ne(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=vo,this.normalScale=new ne(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=Uu,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}}class XW extends Qn{constructor(e){super(),this.isMeshMatcapMaterial=!0,this.defines={MATCAP:""},this.type="MeshMatcapMaterial",this.color=new Ne(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=vo,this.normalScale=new ne(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.defines={MATCAP:""},this.color.copy(e.color),this.matcap=e.matcap,this.map=e.map,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.alphaMap=e.alphaMap,this.flatShading=e.flatShading,this.fog=e.fog,this}}class YW extends Yi{constructor(e){super(),this.isLineDashedMaterial=!0,this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(e)}copy(e){return super.copy(e),this.scale=e.scale,this.dashSize=e.dashSize,this.gapSize=e.gapSize,this}}function Hs(n,e,t){return uv(n)?new n.constructor(n.subarray(e,t!==void 0?t:n.length)):n.slice(e,t)}function gl(n,e,t){return!n||!t&&n.constructor===e?n:typeof e.BYTES_PER_ELEMENT=="number"?new e(n):Array.prototype.slice.call(n)}function uv(n){return ArrayBuffer.isView(n)&&!(n instanceof DataView)}function FW(n){function e(s,r){return n[s]-n[r]}const t=n.length,i=new Array(t);for(let s=0;s!==t;++s)i[s]=s;return i.sort(e),i}function fb(n,e,t){const i=n.length,s=new n.constructor(i);for(let r=0,o=0;o!==i;++r){const a=t[r]*e;for(let l=0;l!==e;++l)s[o++]=n[a+l]}return s}function Cv(n,e,t,i){let s=1,r=n[0];for(;r!==void 0&&r[i]===void 0;)r=n[s++];if(r===void 0)return;let o=r[i];if(o!==void 0)if(Array.isArray(o))do o=r[i],o!==void 0&&(e.push(r.time),t.push.apply(t,o)),r=n[s++];while(r!==void 0);else if(o.toArray!==void 0)do o=r[i],o!==void 0&&(e.push(r.time),o.toArray(t,t.length)),r=n[s++];while(r!==void 0);else do o=r[i],o!==void 0&&(e.push(r.time),t.push(o)),r=n[s++];while(r!==void 0)}function hL(n,e,t,i,s=30){const r=n.clone();r.name=e;const o=[];for(let l=0;l=i)){C.push(c.times[h]);for(let y=0;yr.tracks[l].times[0]&&(a=r.tracks[l].times[0]);for(let l=0;l=a.times[m]){const A=m*C+u,b=A+C-u;y=Hs(a.values,A,b)}else{const A=a.createInterpolant(),b=u,f=C-u;A.evaluate(r),y=Hs(A.resultBuffer,b,f)}l==="quaternion"&&new bn().fromArray(y).normalize().conjugate().toArray(y);const v=c.times.length;for(let A=0;A=r)){const a=t[1];e=r)break t}o=i,i=0;break n}break e}for(;i>>1;et;)--o;if(++o,r!==0||o!==s){r>=o&&(o=Math.max(o,1),r=o-1);const a=this.getValueSize();this.times=Hs(i,r,o),this.values=Hs(this.values,r*a,o*a)}return this}validate(){let e=!0;const t=this.getValueSize();t-Math.floor(t)!==0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),e=!1);const i=this.times,s=this.values,r=i.length;r===0&&(console.error("THREE.KeyframeTrack: Track is empty.",this),e=!1);let o=null;for(let a=0;a!==r;a++){const l=i[a];if(typeof l=="number"&&isNaN(l)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,a,l),e=!1;break}if(o!==null&&o>l){console.error("THREE.KeyframeTrack: Out of order keys.",this,a,l,o),e=!1;break}o=l}if(s!==void 0&&uv(s))for(let a=0,l=s.length;a!==l;++a){const c=s[a];if(isNaN(c)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,a,c),e=!1;break}}return e}optimize(){const e=Hs(this.times),t=Hs(this.values),i=this.getValueSize(),s=this.getInterpolation()===zh,r=e.length-1;let o=1;for(let a=1;a0){e[o]=e[r];for(let a=r*i,l=o*i,c=0;c!==i;++c)t[l+c]=t[a+c];++o}return o!==e.length?(this.times=Hs(e,0,o),this.values=Hs(t,0,o*i)):(this.times=e,this.values=t),this}clone(){const e=Hs(this.times,0),t=Hs(this.values,0),i=this.constructor,s=new i(this.name,e,t);return s.createInterpolant=this.createInterpolant,s}}hr.prototype.TimeBufferType=Float32Array;hr.prototype.ValueBufferType=Float32Array;hr.prototype.DefaultInterpolation=Zu;class Hl extends hr{}Hl.prototype.ValueTypeName="bool";Hl.prototype.ValueBufferType=Array;Hl.prototype.DefaultInterpolation=Bu;Hl.prototype.InterpolantFactoryMethodLinear=void 0;Hl.prototype.InterpolantFactoryMethodSmooth=void 0;class hv extends hr{}hv.prototype.ValueTypeName="color";class Nu extends hr{}Nu.prototype.ValueTypeName="number";class LW extends aC{constructor(e,t,i,s){super(e,t,i,s)}interpolate_(e,t,i,s){const r=this.resultBuffer,o=this.sampleValues,a=this.valueSize,l=(i-t)/(s-t);let c=e*a;for(let u=c+a;c!==u;c+=4)bn.slerpFlat(r,0,o,c-a,o,c,l);return r}}class wc extends hr{InterpolantFactoryMethodLinear(e){return new LW(this.times,this.values,this.getValueSize(),e)}}wc.prototype.ValueTypeName="quaternion";wc.prototype.DefaultInterpolation=Zu;wc.prototype.InterpolantFactoryMethodSmooth=void 0;class Xl extends hr{}Xl.prototype.ValueTypeName="string";Xl.prototype.ValueBufferType=Array;Xl.prototype.DefaultInterpolation=Bu;Xl.prototype.InterpolantFactoryMethodLinear=void 0;Xl.prototype.InterpolantFactoryMethodSmooth=void 0;class Hu extends hr{}Hu.prototype.ValueTypeName="vector";class Xu{constructor(e,t=-1,i,s=_A){this.name=e,this.tracks=i,this.duration=t,this.blendMode=s,this.uuid=hs(),this.duration<0&&this.resetDuration()}static parse(e){const t=[],i=e.tracks,s=1/(e.fps||1);for(let o=0,a=i.length;o!==a;++o)t.push(fL(i[o]).scale(s));const r=new this(e.name,e.duration,t,e.blendMode);return r.uuid=e.uuid,r}static toJSON(e){const t=[],i=e.tracks,s={name:e.name,duration:e.duration,tracks:t,uuid:e.uuid,blendMode:e.blendMode};for(let r=0,o=i.length;r!==o;++r)t.push(hr.toJSON(i[r]));return s}static CreateFromMorphTargetSequence(e,t,i,s){const r=t.length,o=[];for(let a=0;a1){const C=u[1];let d=s[C];d||(s[C]=d=[]),d.push(c)}}const o=[];for(const a in s)o.push(this.CreateFromMorphTargetSequence(a,s[a],t,i));return o}static parseAnimation(e,t){if(!e)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const i=function(C,d,h,m,y){if(h.length!==0){const v=[],A=[];Cv(h,v,A,m),v.length!==0&&y.push(new C(d,v,A))}},s=[],r=e.name||"default",o=e.fps||30,a=e.blendMode;let l=e.length||-1;const c=e.hierarchy||[];for(let C=0;C{t&&t(r),this.manager.itemEnd(e)},0),r;if($r[e]!==void 0){$r[e].push({onLoad:t,onProgress:i,onError:s});return}$r[e]=[],$r[e].push({onLoad:t,onProgress:i,onError:s});const o=new Request(e,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin"}),a=this.mimeType,l=this.responseType;fetch(o).then(c=>{if(c.status===200||c.status===0){if(c.status===0&&console.warn("THREE.FileLoader: HTTP Status 0 received."),typeof ReadableStream>"u"||c.body===void 0||c.body.getReader===void 0)return c;const u=$r[e],C=c.body.getReader(),d=c.headers.get("Content-Length")||c.headers.get("X-File-Size"),h=d?parseInt(d):0,m=h!==0;let y=0;const v=new ReadableStream({start(A){b();function b(){C.read().then(({done:f,value:B})=>{if(f)A.close();else{y+=B.byteLength;const S=new ProgressEvent("progress",{lengthComputable:m,loaded:y,total:h});for(let x=0,R=u.length;x{switch(l){case"arraybuffer":return c.arrayBuffer();case"blob":return c.blob();case"document":return c.text().then(u=>new DOMParser().parseFromString(u,a));case"json":return c.json();default:if(a===void 0)return c.text();{const C=/charset="?([^;"\s]*)"?/i.exec(a),d=C&&C[1]?C[1].toLowerCase():void 0,h=new TextDecoder(d);return c.arrayBuffer().then(m=>h.decode(m))}}}).then(c=>{wl.add(e,c);const u=$r[e];delete $r[e];for(let C=0,d=u.length;C{const u=$r[e];if(u===void 0)throw this.manager.itemError(e),c;delete $r[e];for(let C=0,d=u.length;C{this.manager.itemEnd(e)}),this.manager.itemStart(e)}setResponseType(e){return this.responseType=e,this}setMimeType(e){return this.mimeType=e,this}}class yL extends ys{constructor(e){super(e)}load(e,t,i,s){const r=this,o=new mo(this.manager);o.setPath(this.path),o.setRequestHeader(this.requestHeader),o.setWithCredentials(this.withCredentials),o.load(e,function(a){try{t(r.parse(JSON.parse(a)))}catch(l){s?s(l):console.error(l),r.manager.itemError(e)}},i,s)}parse(e){const t=[];for(let i=0;i0:s.vertexColors=e.vertexColors),e.uniforms!==void 0)for(const r in e.uniforms){const o=e.uniforms[r];switch(s.uniforms[r]={},o.type){case"t":s.uniforms[r].value=i(o.value);break;case"c":s.uniforms[r].value=new Ne().setHex(o.value);break;case"v2":s.uniforms[r].value=new ne().fromArray(o.value);break;case"v3":s.uniforms[r].value=new X().fromArray(o.value);break;case"v4":s.uniforms[r].value=new Xt().fromArray(o.value);break;case"m3":s.uniforms[r].value=new Mt().fromArray(o.value);break;case"m4":s.uniforms[r].value=new Le().fromArray(o.value);break;default:s.uniforms[r].value=o.value}}if(e.defines!==void 0&&(s.defines=e.defines),e.vertexShader!==void 0&&(s.vertexShader=e.vertexShader),e.fragmentShader!==void 0&&(s.fragmentShader=e.fragmentShader),e.glslVersion!==void 0&&(s.glslVersion=e.glslVersion),e.extensions!==void 0)for(const r in e.extensions)s.extensions[r]=e.extensions[r];if(e.lights!==void 0&&(s.lights=e.lights),e.clipping!==void 0&&(s.clipping=e.clipping),e.size!==void 0&&(s.size=e.size),e.sizeAttenuation!==void 0&&(s.sizeAttenuation=e.sizeAttenuation),e.map!==void 0&&(s.map=i(e.map)),e.matcap!==void 0&&(s.matcap=i(e.matcap)),e.alphaMap!==void 0&&(s.alphaMap=i(e.alphaMap)),e.bumpMap!==void 0&&(s.bumpMap=i(e.bumpMap)),e.bumpScale!==void 0&&(s.bumpScale=e.bumpScale),e.normalMap!==void 0&&(s.normalMap=i(e.normalMap)),e.normalMapType!==void 0&&(s.normalMapType=e.normalMapType),e.normalScale!==void 0){let r=e.normalScale;Array.isArray(r)===!1&&(r=[r,r]),s.normalScale=new ne().fromArray(r)}return e.displacementMap!==void 0&&(s.displacementMap=i(e.displacementMap)),e.displacementScale!==void 0&&(s.displacementScale=e.displacementScale),e.displacementBias!==void 0&&(s.displacementBias=e.displacementBias),e.roughnessMap!==void 0&&(s.roughnessMap=i(e.roughnessMap)),e.metalnessMap!==void 0&&(s.metalnessMap=i(e.metalnessMap)),e.emissiveMap!==void 0&&(s.emissiveMap=i(e.emissiveMap)),e.emissiveIntensity!==void 0&&(s.emissiveIntensity=e.emissiveIntensity),e.specularMap!==void 0&&(s.specularMap=i(e.specularMap)),e.specularIntensityMap!==void 0&&(s.specularIntensityMap=i(e.specularIntensityMap)),e.specularColorMap!==void 0&&(s.specularColorMap=i(e.specularColorMap)),e.envMap!==void 0&&(s.envMap=i(e.envMap)),e.envMapIntensity!==void 0&&(s.envMapIntensity=e.envMapIntensity),e.reflectivity!==void 0&&(s.reflectivity=e.reflectivity),e.refractionRatio!==void 0&&(s.refractionRatio=e.refractionRatio),e.lightMap!==void 0&&(s.lightMap=i(e.lightMap)),e.lightMapIntensity!==void 0&&(s.lightMapIntensity=e.lightMapIntensity),e.aoMap!==void 0&&(s.aoMap=i(e.aoMap)),e.aoMapIntensity!==void 0&&(s.aoMapIntensity=e.aoMapIntensity),e.gradientMap!==void 0&&(s.gradientMap=i(e.gradientMap)),e.clearcoatMap!==void 0&&(s.clearcoatMap=i(e.clearcoatMap)),e.clearcoatRoughnessMap!==void 0&&(s.clearcoatRoughnessMap=i(e.clearcoatRoughnessMap)),e.clearcoatNormalMap!==void 0&&(s.clearcoatNormalMap=i(e.clearcoatNormalMap)),e.clearcoatNormalScale!==void 0&&(s.clearcoatNormalScale=new ne().fromArray(e.clearcoatNormalScale)),e.iridescenceMap!==void 0&&(s.iridescenceMap=i(e.iridescenceMap)),e.iridescenceThicknessMap!==void 0&&(s.iridescenceThicknessMap=i(e.iridescenceThicknessMap)),e.transmissionMap!==void 0&&(s.transmissionMap=i(e.transmissionMap)),e.thicknessMap!==void 0&&(s.thicknessMap=i(e.thicknessMap)),e.sheenColorMap!==void 0&&(s.sheenColorMap=i(e.sheenColorMap)),e.sheenRoughnessMap!==void 0&&(s.sheenRoughnessMap=i(e.sheenRoughnessMap)),s}setTextures(e){return this.textures=e,this}static createMaterialFromType(e){const t={ShadowMaterial:RW,SpriteMaterial:tv,RawShaderMaterial:WW,ShaderMaterial:Rt,PointsMaterial:iv,MeshPhysicalMaterial:VW,MeshStandardMaterial:Cc,MeshPhongMaterial:MW,MeshToonMaterial:NW,MeshNormalMaterial:Iv,MeshLambertMaterial:HW,MeshDepthMaterial:qA,MeshDistanceMaterial:$y,MeshBasicMaterial:va,MeshMatcapMaterial:XW,LineDashedMaterial:YW,LineBasicMaterial:Yi,Material:Qn};return new t[e]}}class bb{static decodeText(e){if(typeof TextDecoder<"u")return new TextDecoder().decode(e);let t="";for(let i=0,s=e.length;i0){const l=new ap(t);r=new Yu(l),r.setCrossOrigin(this.crossOrigin);for(let c=0,u=e.length;c0){s=new Yu(this.manager),s.setCrossOrigin(this.crossOrigin);for(let o=0,a=e.length;o"u"&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."),typeof fetch>"u"&&console.warn("THREE.ImageBitmapLoader: fetch() not supported."),this.options={premultiplyAlpha:"none"}}setOptions(e){return this.options=e,this}load(e,t,i,s){e===void 0&&(e=""),this.path!==void 0&&(e=this.path+e),e=this.manager.resolveURL(e);const r=this,o=wl.get(e);if(o!==void 0)return r.manager.itemStart(e),setTimeout(function(){t&&t(o),r.manager.itemEnd(e)},0),o;const a={};a.credentials=this.crossOrigin==="anonymous"?"same-origin":"include",a.headers=this.requestHeader,fetch(e,a).then(function(l){return l.blob()}).then(function(l){return createImageBitmap(l,Object.assign(r.options,{colorSpaceConversion:"none"}))}).then(function(l){wl.add(e,l),t&&t(l),r.manager.itemEnd(e)}).catch(function(l){s&&s(l),r.manager.itemError(e),r.manager.itemEnd(e)}),r.manager.itemStart(e)}}let nh;class pv{static getContext(){return nh===void 0&&(nh=new(window.AudioContext||window.webkitAudioContext)),nh}static setContext(e){nh=e}}class VL extends ys{constructor(e){super(e)}load(e,t,i,s){const r=this,o=new mo(this.manager);o.setResponseType("arraybuffer"),o.setPath(this.path),o.setRequestHeader(this.requestHeader),o.setWithCredentials(this.withCredentials),o.load(e,function(l){try{const c=l.slice(0);pv.getContext().decodeAudioData(c,function(C){t(C)},a)}catch(c){a(c)}},i,s);function a(l){s?s(l):console.error(l),r.manager.itemError(e)}}}class ML extends lp{constructor(e,t,i=1){super(void 0,i),this.isHemisphereLightProbe=!0;const s=new Ne().set(e),r=new Ne().set(t),o=new X(s.r,s.g,s.b),a=new X(r.r,r.g,r.b),l=Math.sqrt(Math.PI),c=l*Math.sqrt(.75);this.sh.coefficients[0].copy(o).add(a).multiplyScalar(l),this.sh.coefficients[1].copy(o).sub(a).multiplyScalar(c)}}class NL extends lp{constructor(e,t=1){super(void 0,t),this.isAmbientLightProbe=!0;const i=new Ne().set(e);this.sh.coefficients[0].set(i.r,i.g,i.b).multiplyScalar(2*Math.sqrt(Math.PI))}}const UZ=new Le,PZ=new Le,La=new Le;class HL{constructor(){this.type="StereoCamera",this.aspect=1,this.eyeSep=.064,this.cameraL=new on,this.cameraL.layers.enable(1),this.cameraL.matrixAutoUpdate=!1,this.cameraR=new on,this.cameraR.layers.enable(2),this.cameraR.matrixAutoUpdate=!1,this._cache={focus:null,fov:null,aspect:null,near:null,far:null,zoom:null,eyeSep:null}}update(e){const t=this._cache;if(t.focus!==e.focus||t.fov!==e.fov||t.aspect!==e.aspect*this.aspect||t.near!==e.near||t.far!==e.far||t.zoom!==e.zoom||t.eyeSep!==this.eyeSep){t.focus=e.focus,t.fov=e.fov,t.aspect=e.aspect*this.aspect,t.near=e.near,t.far=e.far,t.zoom=e.zoom,t.eyeSep=this.eyeSep,La.copy(e.projectionMatrix);const s=t.eyeSep/2,r=s*t.near/t.focus,o=t.near*Math.tan(dl*t.fov*.5)/t.zoom;let a,l;PZ.elements[12]=-s,UZ.elements[12]=s,a=-o*t.aspect+r,l=o*t.aspect+r,La.elements[0]=2*t.near/(l-a),La.elements[8]=(l+a)/(l-a),this.cameraL.projectionMatrix.copy(La),a=-o*t.aspect-r,l=o*t.aspect-r,La.elements[0]=2*t.near/(l-a),La.elements[8]=(l+a)/(l-a),this.cameraR.projectionMatrix.copy(La)}this.cameraL.matrixWorld.copy(e.matrixWorld).multiply(PZ),this.cameraR.matrixWorld.copy(e.matrixWorld).multiply(UZ)}}class mv{constructor(e=!0){this.autoStart=e,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}start(){this.startTime=_Z(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0}stop(){this.getElapsedTime(),this.running=!1,this.autoStart=!1}getElapsedTime(){return this.getDelta(),this.elapsedTime}getDelta(){let e=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){const t=_Z();e=(t-this.oldTime)/1e3,this.oldTime=t,this.elapsedTime+=e}return e}}function _Z(){return(typeof performance>"u"?Date:performance).now()}const Ta=new X,JZ=new bn,XL=new X,Ea=new X;class YL extends Ft{constructor(){super(),this.type="AudioListener",this.context=pv.getContext(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null,this.timeDelta=0,this._clock=new mv}getInput(){return this.gain}removeFilter(){return this.filter!==null&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null),this}getFilter(){return this.filter}setFilter(e){return this.filter!==null?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination),this.filter=e,this.gain.connect(this.filter),this.filter.connect(this.context.destination),this}getMasterVolume(){return this.gain.gain.value}setMasterVolume(e){return this.gain.gain.setTargetAtTime(e,this.context.currentTime,.01),this}updateMatrixWorld(e){super.updateMatrixWorld(e);const t=this.context.listener,i=this.up;if(this.timeDelta=this._clock.getDelta(),this.matrixWorld.decompose(Ta,JZ,XL),Ea.set(0,0,-1).applyQuaternion(JZ),t.positionX){const s=this.context.currentTime+this.timeDelta;t.positionX.linearRampToValueAtTime(Ta.x,s),t.positionY.linearRampToValueAtTime(Ta.y,s),t.positionZ.linearRampToValueAtTime(Ta.z,s),t.forwardX.linearRampToValueAtTime(Ea.x,s),t.forwardY.linearRampToValueAtTime(Ea.y,s),t.forwardZ.linearRampToValueAtTime(Ea.z,s),t.upX.linearRampToValueAtTime(i.x,s),t.upY.linearRampToValueAtTime(i.y,s),t.upZ.linearRampToValueAtTime(i.z,s)}else t.setPosition(Ta.x,Ta.y,Ta.z),t.setOrientation(Ea.x,Ea.y,Ea.z,i.x,i.y,i.z)}}class qW extends Ft{constructor(e){super(),this.type="Audio",this.listener=e,this.context=e.context,this.gain=this.context.createGain(),this.gain.connect(e.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.loopStart=0,this.loopEnd=0,this.offset=0,this.duration=void 0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.source=null,this.sourceType="empty",this._startedAt=0,this._progress=0,this._connected=!1,this.filters=[]}getOutput(){return this.gain}setNodeSource(e){return this.hasPlaybackControl=!1,this.sourceType="audioNode",this.source=e,this.connect(),this}setMediaElementSource(e){return this.hasPlaybackControl=!1,this.sourceType="mediaNode",this.source=this.context.createMediaElementSource(e),this.connect(),this}setMediaStreamSource(e){return this.hasPlaybackControl=!1,this.sourceType="mediaStreamNode",this.source=this.context.createMediaStreamSource(e),this.connect(),this}setBuffer(e){return this.buffer=e,this.sourceType="buffer",this.autoplay&&this.play(),this}play(e=0){if(this.isPlaying===!0){console.warn("THREE.Audio: Audio is already playing.");return}if(this.hasPlaybackControl===!1){console.warn("THREE.Audio: this Audio has no playback control.");return}this._startedAt=this.context.currentTime+e;const t=this.context.createBufferSource();return t.buffer=this.buffer,t.loop=this.loop,t.loopStart=this.loopStart,t.loopEnd=this.loopEnd,t.onended=this.onEnded.bind(this),t.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=t,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){if(this.hasPlaybackControl===!1){console.warn("THREE.Audio: this Audio has no playback control.");return}return this.isPlaying===!0&&(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,this.loop===!0&&(this._progress=this._progress%(this.duration||this.buffer.duration)),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this}stop(){if(this.hasPlaybackControl===!1){console.warn("THREE.Audio: this Audio has no playback control.");return}return this._progress=0,this.source!==null&&(this.source.stop(),this.source.onended=null),this.isPlaying=!1,this}connect(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(let e=1,t=this.filters.length;e0){this.source.disconnect(this.filters[0]);for(let e=1,t=this.filters.length;e0&&this._mixBufferRegionAdditive(i,s,this._addIndex*t,1,t);for(let l=t,c=t+t;l!==c;++l)if(i[l]!==i[l+t]){a.setValue(i,s);break}}saveOriginalState(){const e=this.binding,t=this.buffer,i=this.valueSize,s=i*this._origIndex;e.getValue(t,s);for(let r=i,o=s;r!==o;++r)t[r]=t[s+r%i];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const e=this.valueSize*3;this.binding.setValue(this.buffer,e)}_setAdditiveIdentityNumeric(){const e=this._addIndex*this.valueSize,t=e+this.valueSize;for(let i=e;i=.5)for(let o=0;o!==r;++o)e[t+o]=e[i+o]}_slerp(e,t,i,s){bn.slerpFlat(e,t,e,t,e,i,s)}_slerpAdditive(e,t,i,s,r){const o=this._workIndex*r;bn.multiplyQuaternionsFlat(e,o,e,t,e,i),bn.slerpFlat(e,t,e,t,e,o,s)}_lerp(e,t,i,s,r){const o=1-s;for(let a=0;a!==r;++a){const l=t+a;e[l]=e[l]*o+e[i+a]*s}}_lerpAdditive(e,t,i,s,r){for(let o=0;o!==r;++o){const a=t+o;e[a]=e[a]+e[i+o]*s}}}const fv="\\[\\]\\.:\\/",LL=new RegExp("["+fv+"]","g"),bv="[^"+fv+"]",TL="[^"+fv.replace("\\.","")+"]",EL=/((?:WC+[\/:])*)/.source.replace("WC",bv),kL=/(WCOD+)?/.source.replace("WCOD",TL),DL=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",bv),UL=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",bv),PL=new RegExp("^"+EL+kL+DL+UL+"$"),_L=["material","materials","bones","map"];class JL{constructor(e,t,i){const s=i||Kt.parseTrackName(t);this._targetGroup=e,this._bindings=e.subscribe_(t,s)}getValue(e,t){this.bind();const i=this._targetGroup.nCachedObjects_,s=this._bindings[i];s!==void 0&&s.getValue(e,t)}setValue(e,t){const i=this._bindings;for(let s=this._targetGroup.nCachedObjects_,r=i.length;s!==r;++s)i[s].setValue(e,t)}bind(){const e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,i=e.length;t!==i;++t)e[t].bind()}unbind(){const e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,i=e.length;t!==i;++t)e[t].unbind()}}class Kt{constructor(e,t,i){this.path=t,this.parsedPath=i||Kt.parseTrackName(t),this.node=Kt.findNode(e,this.parsedPath.nodeName),this.rootNode=e,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(e,t,i){return e&&e.isAnimationObjectGroup?new Kt.Composite(e,t,i):new Kt(e,t,i)}static sanitizeNodeName(e){return e.replace(/\s/g,"_").replace(LL,"")}static parseTrackName(e){const t=PL.exec(e);if(t===null)throw new Error("PropertyBinding: Cannot parse trackName: "+e);const i={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]},s=i.nodeName&&i.nodeName.lastIndexOf(".");if(s!==void 0&&s!==-1){const r=i.nodeName.substring(s+1);_L.indexOf(r)!==-1&&(i.nodeName=i.nodeName.substring(0,s),i.objectName=r)}if(i.propertyName===null||i.propertyName.length===0)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+e);return i}static findNode(e,t){if(t===void 0||t===""||t==="."||t===-1||t===e.name||t===e.uuid)return e;if(e.skeleton){const i=e.skeleton.getBoneByName(t);if(i!==void 0)return i}if(e.children){const i=function(r){for(let o=0;o=r){const C=r++,d=e[C];t[d.uuid]=u,e[u]=d,t[c]=C,e[C]=l;for(let h=0,m=s;h!==m;++h){const y=i[h],v=y[C],A=y[u];y[u]=v,y[C]=A}}}this.nCachedObjects_=r}uncache(){const e=this._objects,t=this._indicesByUUID,i=this._bindings,s=i.length;let r=this.nCachedObjects_,o=e.length;for(let a=0,l=arguments.length;a!==l;++a){const c=arguments[a],u=c.uuid,C=t[u];if(C!==void 0)if(delete t[u],C0&&(t[h.uuid]=C),e[C]=h,e.pop();for(let m=0,y=s;m!==y;++m){const v=i[m];v[C]=v[d],v.pop()}}}this.nCachedObjects_=r}subscribe_(e,t){const i=this._bindingsIndicesByPath;let s=i[e];const r=this._bindings;if(s!==void 0)return r[s];const o=this._paths,a=this._parsedPaths,l=this._objects,c=l.length,u=this.nCachedObjects_,C=new Array(c);s=r.length,i[e]=s,o.push(e),a.push(t),r.push(C);for(let d=u,h=l.length;d!==h;++d){const m=l[d];C[d]=new Kt(m,e,t)}return C}unsubscribe_(e){const t=this._bindingsIndicesByPath,i=t[e];if(i!==void 0){const s=this._paths,r=this._parsedPaths,o=this._bindings,a=o.length-1,l=o[a],c=e[a];t[c]=i,o[i]=l,o.pop(),r[i]=r[a],r.pop(),s[i]=s[a],s.pop()}}}class eV{constructor(e,t,i=null,s=t.blendMode){this._mixer=e,this._clip=t,this._localRoot=i,this.blendMode=s;const r=t.tracks,o=r.length,a=new Array(o),l={endingStart:ol,endingEnd:ol};for(let c=0;c!==o;++c){const u=r[c].createInterpolant(null);a[c]=u,u.settings=l}this._interpolantSettings=l,this._interpolants=a,this._propertyBindings=new Array(o),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=D1,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&this.timeScale!==0&&this._startTime===null&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(e){return this._startTime=e,this}setLoop(e,t){return this.loop=e,this.repetitions=t,this}setEffectiveWeight(e){return this.weight=e,this._effectiveWeight=this.enabled?e:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(e){return this._scheduleFading(e,0,1)}fadeOut(e){return this._scheduleFading(e,1,0)}crossFadeFrom(e,t,i){if(e.fadeOut(t),this.fadeIn(t),i){const s=this._clip.duration,r=e._clip.duration,o=r/s,a=s/r;e.warp(1,o,t),this.warp(a,1,t)}return this}crossFadeTo(e,t,i){return e.crossFadeFrom(this,t,i)}stopFading(){const e=this._weightInterpolant;return e!==null&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(e)),this}setEffectiveTimeScale(e){return this.timeScale=e,this._effectiveTimeScale=this.paused?0:e,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(e){return this.timeScale=this._clip.duration/e,this.stopWarping()}syncWith(e){return this.time=e.time,this.timeScale=e.timeScale,this.stopWarping()}halt(e){return this.warp(this._effectiveTimeScale,0,e)}warp(e,t,i){const s=this._mixer,r=s.time,o=this.timeScale;let a=this._timeScaleInterpolant;a===null&&(a=s._lendControlInterpolant(),this._timeScaleInterpolant=a);const l=a.parameterPositions,c=a.sampleValues;return l[0]=r,l[1]=r+i,c[0]=e/o,c[1]=t/o,this}stopWarping(){const e=this._timeScaleInterpolant;return e!==null&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(e)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(e,t,i,s){if(!this.enabled){this._updateWeight(e);return}const r=this._startTime;if(r!==null){const l=(e-r)*i;l<0||i===0?t=0:(this._startTime=null,t=i*l)}t*=this._updateTimeScale(e);const o=this._updateTime(t),a=this._updateWeight(e);if(a>0){const l=this._interpolants,c=this._propertyBindings;switch(this.blendMode){case Uy:for(let u=0,C=l.length;u!==C;++u)l[u].evaluate(o),c[u].accumulateAdditive(a);break;case _A:default:for(let u=0,C=l.length;u!==C;++u)l[u].evaluate(o),c[u].accumulate(s,a)}}}_updateWeight(e){let t=0;if(this.enabled){t=this.weight;const i=this._weightInterpolant;if(i!==null){const s=i.evaluate(e)[0];t*=s,e>i.parameterPositions[1]&&(this.stopFading(),s===0&&(this.enabled=!1))}}return this._effectiveWeight=t,t}_updateTimeScale(e){let t=0;if(!this.paused){t=this.timeScale;const i=this._timeScaleInterpolant;if(i!==null){const s=i.evaluate(e)[0];t*=s,e>i.parameterPositions[1]&&(this.stopWarping(),t===0?this.paused=!0:this.timeScale=t)}}return this._effectiveTimeScale=t,t}_updateTime(e){const t=this._clip.duration,i=this.loop;let s=this.time+e,r=this._loopCount;const o=i===U1;if(e===0)return r===-1?s:o&&(r&1)===1?t-s:s;if(i===k1){r===-1&&(this._loopCount=0,this._setEndings(!0,!0,!1));e:{if(s>=t)s=t;else if(s<0)s=0;else{this.time=s;break e}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=s,this._mixer.dispatchEvent({type:"finished",action:this,direction:e<0?-1:1})}}else{if(r===-1&&(e>=0?(r=0,this._setEndings(!0,this.repetitions===0,o)):this._setEndings(this.repetitions===0,!0,o)),s>=t||s<0){const a=Math.floor(s/t);s-=t*a,r+=Math.abs(a);const l=this.repetitions-r;if(l<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,s=e>0?t:0,this.time=s,this._mixer.dispatchEvent({type:"finished",action:this,direction:e>0?1:-1});else{if(l===1){const c=e<0;this._setEndings(c,!c,o)}else this._setEndings(!1,!1,o);this._loopCount=r,this.time=s,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:a})}}else this.time=s;if(o&&(r&1)===1)return t-s}return s}_setEndings(e,t,i){const s=this._interpolantSettings;i?(s.endingStart=al,s.endingEnd=al):(e?s.endingStart=this.zeroSlopeAtStart?al:ol:s.endingStart=wu,t?s.endingEnd=this.zeroSlopeAtEnd?al:ol:s.endingEnd=wu)}_scheduleFading(e,t,i){const s=this._mixer,r=s.time;let o=this._weightInterpolant;o===null&&(o=s._lendControlInterpolant(),this._weightInterpolant=o);const a=o.parameterPositions,l=o.sampleValues;return a[0]=r,l[0]=t,a[1]=r+e,l[1]=i,this}}const QL=new Float32Array(1);class jL extends bs{constructor(e){super(),this._root=e,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(e,t){const i=e._localRoot||this._root,s=e._clip.tracks,r=s.length,o=e._propertyBindings,a=e._interpolants,l=i.uuid,c=this._bindingsByRootAndName;let u=c[l];u===void 0&&(u={},c[l]=u);for(let C=0;C!==r;++C){const d=s[C],h=d.name;let m=u[h];if(m!==void 0)++m.referenceCount,o[C]=m;else{if(m=o[C],m!==void 0){m._cacheIndex===null&&(++m.referenceCount,this._addInactiveBinding(m,l,h));continue}const y=t&&t._propertyBindings[C].binding.parsedPath;m=new $W(Kt.create(i,h,y),d.ValueTypeName,d.getValueSize()),++m.referenceCount,this._addInactiveBinding(m,l,h),o[C]=m}a[C].resultBuffer=m.buffer}}_activateAction(e){if(!this._isActiveAction(e)){if(e._cacheIndex===null){const i=(e._localRoot||this._root).uuid,s=e._clip.uuid,r=this._actionsByClip[s];this._bindAction(e,r&&r.knownActions[0]),this._addInactiveAction(e,s,i)}const t=e._propertyBindings;for(let i=0,s=t.length;i!==s;++i){const r=t[i];r.useCount++===0&&(this._lendBinding(r),r.saveOriginalState())}this._lendAction(e)}}_deactivateAction(e){if(this._isActiveAction(e)){const t=e._propertyBindings;for(let i=0,s=t.length;i!==s;++i){const r=t[i];--r.useCount===0&&(r.restoreOriginalState(),this._takeBackBinding(r))}this._takeBackAction(e)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const e=this;this.stats={actions:{get total(){return e._actions.length},get inUse(){return e._nActiveActions}},bindings:{get total(){return e._bindings.length},get inUse(){return e._nActiveBindings}},controlInterpolants:{get total(){return e._controlInterpolants.length},get inUse(){return e._nActiveControlInterpolants}}}}_isActiveAction(e){const t=e._cacheIndex;return t!==null&&t=0;--i)e[i].stop();return this}update(e){e*=this.timeScale;const t=this._actions,i=this._nActiveActions,s=this.time+=e,r=Math.sign(e),o=this._accuIndex^=1;for(let c=0;c!==i;++c)t[c]._update(s,e,r,o);const a=this._bindings,l=this._nActiveBindings;for(let c=0;c!==l;++c)a[c].apply(o);return this}setTime(e){this.time=0;for(let t=0;tthis.max.x||e.ythis.max.y)}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}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))}intersectsBox(e){return!(e.max.xthis.max.x||e.max.ythis.max.y)}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,jZ).distanceTo(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}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)}}const qZ=new X,ih=new X;class sT{constructor(e=new X,t=new X){this.start=e,this.end=t}set(e,t){return this.start.copy(e),this.end.copy(t),this}copy(e){return this.start.copy(e.start),this.end.copy(e.end),this}getCenter(e){return e.addVectors(this.start,this.end).multiplyScalar(.5)}delta(e){return e.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(e,t){return this.delta(t).multiplyScalar(e).add(this.start)}closestPointToPointParameter(e,t){qZ.subVectors(e,this.start),ih.subVectors(this.end,this.start);const i=ih.dot(ih);let r=ih.dot(qZ)/i;return t&&(r=wn(r,0,1)),r}closestPointToPoint(e,t,i){const s=this.closestPointToPointParameter(e,t);return this.delta(i).multiplyScalar(s).add(this.start)}applyMatrix4(e){return this.start.applyMatrix4(e),this.end.applyMatrix4(e),this}equals(e){return e.start.equals(this.start)&&e.end.equals(this.end)}clone(){return new this.constructor().copy(this)}}const $Z=new X;class rT extends Ft{constructor(e,t){super(),this.light=e,this.matrix=e.matrixWorld,this.matrixAutoUpdate=!1,this.color=t,this.type="SpotLightHelper";const i=new vt,s=[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,-1,0,1,0,0,0,0,1,1,0,0,0,0,-1,1];for(let o=0,a=1,l=32;o1)for(let C=0;C.99999)this.quaternion.set(0,0,0,1);else if(e.y<-.99999)this.quaternion.set(1,0,0,0);else{sw.set(e.z,0,-e.x).normalize();const t=Math.acos(e.y);this.quaternion.setFromAxisAngle(sw,t)}}setLength(e,t=e*.2,i=t*.2){this.line.scale.set(1,Math.max(1e-4,e-t),1),this.line.updateMatrix(),this.cone.scale.set(i,t,i),this.cone.position.y=e,this.cone.updateMatrix()}setColor(e){this.line.material.color.set(e),this.cone.material.color.set(e)}copy(e){return super.copy(e,!1),this.line.copy(e.line),this.cone.copy(e.cone),this}dispose(){this.line.geometry.dispose(),this.line.material.dispose(),this.cone.geometry.dispose(),this.cone.material.dispose()}}class mT extends zr{constructor(e=1){const t=[0,0,0,e,0,0,0,0,0,0,e,0,0,0,0,0,0,e],i=[1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],s=new vt;s.setAttribute("position",new _e(t,3)),s.setAttribute("color",new _e(i,3));const r=new Yi({vertexColors:!0,toneMapped:!1});super(s,r),this.type="AxesHelper"}setColors(e,t,i){const s=new Ne,r=this.geometry.attributes.color.array;return s.set(e),s.toArray(r,0),s.toArray(r,3),s.set(t),s.toArray(r,6),s.toArray(r,9),s.set(i),s.toArray(r,12),s.toArray(r,15),this.geometry.attributes.color.needsUpdate=!0,this}dispose(){this.geometry.dispose(),this.material.dispose()}}class fT{constructor(){this.type="ShapePath",this.color=new Ne,this.subPaths=[],this.currentPath=null}moveTo(e,t){return this.currentPath=new Ru,this.subPaths.push(this.currentPath),this.currentPath.moveTo(e,t),this}lineTo(e,t){return this.currentPath.lineTo(e,t),this}quadraticCurveTo(e,t,i,s){return this.currentPath.quadraticCurveTo(e,t,i,s),this}bezierCurveTo(e,t,i,s,r,o){return this.currentPath.bezierCurveTo(e,t,i,s,r,o),this}splineThru(e){return this.currentPath.splineThru(e),this}toShapes(e){function t(A){const b=[];for(let f=0,B=A.length;fNumber.EPSILON){if(M<0&&(R=b[x],Z=-Z,V=b[S],M=-M),A.yV.y)continue;if(A.y===R.y){if(A.x===R.x)return!0}else{const H=M*(A.x-R.x)-Z*(A.y-R.y);if(H===0)return!0;if(H<0)continue;B=!B}}else{if(A.y!==R.y)continue;if(V.x<=A.x&&A.x<=R.x||R.x<=A.x&&A.x<=V.x)return!0}}return B}const s=Hr.isClockWise,r=this.subPaths;if(r.length===0)return[];let o,a,l;const c=[];if(r.length===1)return a=r[0],l=new pl,l.curves=a.curves,c.push(l),c;let u=!s(r[0].getPoints());u=e?!u:u;const C=[],d=[];let h=[],m=0,y;d[m]=void 0,h[m]=[];for(let A=0,b=r.length;A1){let A=!1,b=0;for(let f=0,B=d.length;f0&&A===!1&&(h=C)}let v;for(let A=0,b=d.length;A{const C=typeof c=="function"?c(e):c;if(C!==e){const d=e;e=u?C:Object.assign({},e,C),t.forEach(h=>h(e,d))}},s=()=>e,r=(c,u=s,C=Object.is)=>{console.warn("[DEPRECATED] Please use `subscribeWithSelector` middleware");let d=u(e);function h(){const m=u(e);if(!C(d,m)){const y=d;c(d=m,y)}}return t.add(h),()=>t.delete(h)},l={setState:i,getState:s,subscribe:(c,u,C)=>u||C?r(c,u,C):(t.add(c),()=>t.delete(c)),destroy:()=>t.clear()};return e=n(i,s,l),l}const TT=typeof window>"u"||!window.navigator||/ServerSideRendering|^Deno\//.test(window.navigator.userAgent),rw=TT?E.useEffect:E.useLayoutEffect;function iV(n){const e=typeof n=="function"?LT(n):n,t=(i=e.getState,s=Object.is)=>{const[,r]=E.useReducer(v=>v+1,0),o=e.getState(),a=E.useRef(o),l=E.useRef(i),c=E.useRef(s),u=E.useRef(!1),C=E.useRef();C.current===void 0&&(C.current=i(o));let d,h=!1;(a.current!==o||l.current!==i||c.current!==s||u.current)&&(d=i(o),h=!s(C.current,d)),rw(()=>{h&&(C.current=d),a.current=o,l.current=i,c.current=s,u.current=!1});const m=E.useRef(o);rw(()=>{const v=()=>{try{const b=e.getState(),f=l.current(b);c.current(C.current,f)||(a.current=b,C.current=f,r())}catch{u.current=!0,r()}},A=e.subscribe(v);return e.getState()!==m.current&&v(),A},[]);const y=h?d:C.current;return E.useDebugValue(y),y};return Object.assign(t,e),t[Symbol.iterator]=function(){console.warn("[useStore, api] = create() is deprecated and will be removed in v4");const i=[t,e];return{next(){const s=i.length<=0;return{value:i.shift(),done:s}}}},t}var sV={exports:{}},rV={exports:{}},oV={};/** - * @license React - * scheduler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */(function(n){function e(L,P){var O=L.length;L.push(P);e:for(;0>>1,ge=L[ce];if(0>>1;ces(Ze,O))wes(J,Ze)?(L[ce]=J,L[we]=O,ce=we):(L[ce]=Ze,L[re]=O,ce=re);else if(wes(J,O))L[ce]=J,L[we]=O,ce=we;else break e}}return P}function s(L,P){var O=L.sortIndex-P.sortIndex;return O!==0?O:L.id-P.id}if(typeof performance=="object"&&typeof performance.now=="function"){var r=performance;n.unstable_now=function(){return r.now()}}else{var o=Date,a=o.now();n.unstable_now=function(){return o.now()-a}}var l=[],c=[],u=1,C=null,d=3,h=!1,m=!1,y=!1,v=typeof setTimeout=="function"?setTimeout:null,A=typeof clearTimeout=="function"?clearTimeout:null,b=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function f(L){for(var P=t(c);P!==null;){if(P.callback===null)i(c);else if(P.startTime<=L)i(c),P.sortIndex=P.expirationTime,e(l,P);else break;P=t(c)}}function B(L){if(y=!1,f(L),!m)if(t(l)!==null)m=!0,ue(S);else{var P=t(c);P!==null&&le(B,P.startTime-L)}}function S(L,P){m=!1,y&&(y=!1,A(V),V=-1),h=!0;var O=d;try{for(f(P),C=t(l);C!==null&&(!(C.expirationTime>P)||L&&!H());){var ce=C.callback;if(typeof ce=="function"){C.callback=null,d=C.priorityLevel;var ge=ce(C.expirationTime<=P);P=n.unstable_now(),typeof ge=="function"?C.callback=ge:C===t(l)&&i(l),f(P)}else i(l);C=t(l)}if(C!==null)var te=!0;else{var re=t(c);re!==null&&le(B,re.startTime-P),te=!1}return te}finally{C=null,d=O,h=!1}}var x=!1,R=null,V=-1,Z=5,M=-1;function H(){return!(n.unstable_now()-ML||125ce?(L.sortIndex=O,e(c,L),t(l)===null&&L===t(c)&&(y?(A(V),V=-1):y=!0,le(B,O-ce))):(L.sortIndex=ge,e(l,L),m||h||(m=!0,ue(S))),L},n.unstable_shouldYield=H,n.unstable_wrapCallback=function(L){var P=d;return function(){var O=d;d=P;try{return L.apply(this,arguments)}finally{d=O}}}})(oV);rV.exports=oV;var vb=rV.exports;/** - * @license React - * react-reconciler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var ET=function(e){var t={},i=E,s=vb,r=Object.assign;function o(g){for(var I="https://reactjs.org/docs/error-decoder.html?invariant="+g,p=1;pj||w[T]!==W[j]){var Ae=` -`+w[T].replace(" at new "," at ");return g.displayName&&Ae.includes("")&&(Ae=Ae.replace("",g.displayName)),Ae}while(1<=T&&0<=j);break}}}finally{Vt=!1,Error.prepareStackTrace=p}return(g=g?g.displayName||g.name:"")?rn(g):""}var Mn=Object.prototype.hasOwnProperty,Ps=[],Lr=-1;function Fi(g){return{current:g}}function Qt(g){0>Lr||(g.current=Ps[Lr],Ps[Lr]=null,Lr--)}function mt(g,I){Lr++,Ps[Lr]=g.current,g.current=I}var ui={},Nn=Fi(ui),$t=Fi(!1),_s=ui;function Zo(g,I){var p=g.type.contextTypes;if(!p)return ui;var G=g.stateNode;if(G&&G.__reactInternalMemoizedUnmaskedChildContext===I)return G.__reactInternalMemoizedMaskedChildContext;var w={},W;for(W in p)w[W]=I[W];return G&&(g=g.stateNode,g.__reactInternalMemoizedUnmaskedChildContext=I,g.__reactInternalMemoizedMaskedChildContext=w),w}function ri(g){return g=g.childContextTypes,g!=null}function IC(){Qt($t),Qt(Nn)}function Kv(g,I,p){if(Nn.current!==ui)throw Error(o(168));mt(Nn,I),mt($t,p)}function zv(g,I,p){var G=g.stateNode;if(I=I.childContextTypes,typeof G.getChildContext!="function")return p;G=G.getChildContext();for(var w in G)if(!(w in I))throw Error(o(108,V(g)||"Unknown",w));return r({},p,G)}function uC(g){return g=(g=g.stateNode)&&g.__reactInternalMemoizedMergedChildContext||ui,_s=Nn.current,mt(Nn,g),mt($t,$t.current),!0}function Lv(g,I,p){var G=g.stateNode;if(!G)throw Error(o(169));p?(g=zv(g,I,_s),G.__reactInternalMemoizedMergedChildContext=g,Qt($t),Qt(Nn),mt(Nn,g)):Qt($t),mt($t,p)}var Js=Math.clz32?Math.clz32:SM,ZM=Math.log,wM=Math.LN2;function SM(g){return g>>>=0,g===0?32:31-(ZM(g)/wM|0)|0}var CC=64,dC=4194304;function Mc(g){switch(g&-g){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return g&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return g&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return g}}function hC(g,I){var p=g.pendingLanes;if(p===0)return 0;var G=0,w=g.suspendedLanes,W=g.pingedLanes,T=p&268435455;if(T!==0){var j=T&~w;j!==0?G=Mc(j):(W&=T,W!==0&&(G=Mc(W)))}else T=p&~w,T!==0?G=Mc(T):W!==0&&(G=Mc(W));if(G===0)return 0;if(I!==0&&I!==G&&!(I&w)&&(w=G&-G,W=I&-I,w>=W||w===16&&(W&4194240)!==0))return I;if(G&4&&(G|=p&16),I=g.entangledLanes,I!==0)for(g=g.entanglements,I&=G;0p;p++)I.push(g);return I}function Nc(g,I,p){g.pendingLanes|=I,I!==536870912&&(g.suspendedLanes=0,g.pingedLanes=0),g=g.eventTimes,I=31-Js(I),g[I]=p}function WM(g,I){var p=g.pendingLanes&~I;g.pendingLanes=I,g.suspendedLanes=0,g.pingedLanes=0,g.expiredLanes&=I,g.mutableReadLanes&=I,g.entangledLanes&=I,I=g.entanglements;var G=g.eventTimes;for(g=g.expirationTimes;0>=T,w-=T,kr=1<<32-Js(I)+w|p<Tt?(ei=ht,ht=null):ei=ht.sibling;var Et=gt(oe,ht,Ce[Tt],Ke);if(Et===null){ht===null&&(ht=ei);break}g&&ht&&Et.alternate===null&&I(oe,ht),$=W(Et,$,Tt),Gt===null?Qe=Et:Gt.sibling=Et,Gt=Et,ht=ei}if(Tt===Ce.length)return p(oe,ht),Cn&&Ra(oe,Tt),Qe;if(ht===null){for(;TtTt?(ei=ht,ht=null):ei=ht.sibling;var No=gt(oe,ht,Et.value,Ke);if(No===null){ht===null&&(ht=ei);break}g&&ht&&No.alternate===null&&I(oe,ht),$=W(No,$,Tt),Gt===null?Qe=No:Gt.sibling=No,Gt=No,ht=ei}if(Et.done)return p(oe,ht),Cn&&Ra(oe,Tt),Qe;if(ht===null){for(;!Et.done;Tt++,Et=Ce.next())Et=dt(oe,Et.value,Ke),Et!==null&&($=W(Et,$,Tt),Gt===null?Qe=Et:Gt.sibling=Et,Gt=Et);return Cn&&Ra(oe,Tt),Qe}for(ht=G(oe,ht);!Et.done;Tt++,Et=Ce.next())Et=nn(ht,oe,Tt,Et.value,Ke),Et!==null&&(g&&Et.alternate!==null&&ht.delete(Et.key===null?Tt:Et.key),$=W(Et,$,Tt),Gt===null?Qe=Et:Gt.sibling=Et,Gt=Et);return g&&ht.forEach(function(h5){return I(oe,h5)}),Cn&&Ra(oe,Tt),Qe}function Ws(oe,$,Ce,Ke){if(typeof Ce=="object"&&Ce!==null&&Ce.type===u&&Ce.key===null&&(Ce=Ce.props.children),typeof Ce=="object"&&Ce!==null){switch(Ce.$$typeof){case l:e:{for(var Qe=Ce.key,Gt=$;Gt!==null;){if(Gt.key===Qe){if(Qe=Ce.type,Qe===u){if(Gt.tag===7){p(oe,Gt.sibling),$=w(Gt,Ce.props.children),$.return=oe,oe=$;break e}}else if(Gt.elementType===Qe||typeof Qe=="object"&&Qe!==null&&Qe.$$typeof===f&&nG(Qe)===Gt.type){p(oe,Gt.sibling),$=w(Gt,Ce.props),$.ref=Yc(oe,Gt,Ce),$.return=oe,oe=$;break e}p(oe,Gt);break}else I(oe,Gt);Gt=Gt.sibling}Ce.type===u?($=Ya(Ce.props.children,oe.mode,Ke,Ce.key),$.return=oe,oe=$):(Ke=id(Ce.type,Ce.key,Ce.props,null,oe.mode,Ke),Ke.ref=Yc(oe,$,Ce),Ke.return=oe,oe=Ke)}return T(oe);case c:e:{for(Gt=Ce.key;$!==null;){if($.key===Gt)if($.tag===4&&$.stateNode.containerInfo===Ce.containerInfo&&$.stateNode.implementation===Ce.implementation){p(oe,$.sibling),$=w($,Ce.children||[]),$.return=oe,oe=$;break e}else{p(oe,$);break}else I(oe,$);$=$.sibling}$=hm(Ce,oe.mode,Ke),$.return=oe,oe=$}return T(oe);case f:return Gt=Ce._init,Ws(oe,$,Gt(Ce._payload),Ke)}if(ie(Ce))return $e(oe,$,Ce,Ke);if(x(Ce))return Ai(oe,$,Ce,Ke);wC(oe,Ce)}return typeof Ce=="string"&&Ce!==""||typeof Ce=="number"?(Ce=""+Ce,$!==null&&$.tag===6?(p(oe,$.sibling),$=w($,Ce),$.return=oe,oe=$):(p(oe,$),$=dm(Ce,oe.mode,Ke),$.return=oe,oe=$),T(oe)):p(oe,$)}return Ws}var Ul=iG(!0),sG=iG(!1),Fc={},ws=Fi(Fc),Kc=Fi(Fc),Pl=Fi(Fc);function br(g){if(g===Fc)throw Error(o(174));return g}function Mp(g,I){mt(Pl,I),mt(Kc,g),mt(ws,Fc),g=le(I),Qt(ws),mt(ws,g)}function _l(){Qt(ws),Qt(Kc),Qt(Pl)}function rG(g){var I=br(Pl.current),p=br(ws.current);I=L(p,g.type,I),p!==I&&(mt(Kc,g),mt(ws,I))}function Np(g){Kc.current===g&&(Qt(ws),Qt(Kc))}var An=Fi(0);function SC(g){for(var I=g;I!==null;){if(I.tag===13){var p=I.memoizedState;if(p!==null&&(p=p.dehydrated,p===null||cC(p)||Vc(p)))return I}else if(I.tag===19&&I.memoizedProps.revealOrder!==void 0){if(I.flags&128)return I}else if(I.child!==null){I.child.return=I,I=I.child;continue}if(I===g)break;for(;I.sibling===null;){if(I.return===null||I.return===g)return null;I=I.return}I.sibling.return=I.return,I=I.sibling}return null}var Hp=[];function Xp(){for(var g=0;gp?p:4,g(!0);var G=Ss.transition;Ss.transition={};try{g(!1),I()}finally{Lt=p,Ss.transition=G}}function fG(){return yr().memoizedState}function EM(g,I,p){var G=Wo(g);p={lane:G,action:p,hasEagerState:!1,eagerState:null,next:null},bG(g)?yG(I,p):(vG(g,I,p),p=Si(),g=xs(g,G,p),g!==null&&GG(g,I,G))}function kM(g,I,p){var G=Wo(g),w={lane:G,action:p,hasEagerState:!1,eagerState:null,next:null};if(bG(g))yG(I,w);else{vG(g,I,w);var W=g.alternate;if(g.lanes===0&&(W===null||W.lanes===0)&&(W=I.lastRenderedReducer,W!==null))try{var T=I.lastRenderedState,j=W(T,p);if(w.hasEagerState=!0,w.eagerState=j,pr(j,T))return}catch{}finally{}p=Si(),g=xs(g,G,p),g!==null&&GG(g,I,G)}}function bG(g){var I=g.alternate;return g===vn||I!==null&&I===vn}function yG(g,I){zc=RC=!0;var p=g.pending;p===null?I.next=I:(I.next=p.next,p.next=I),g.pending=I}function vG(g,I,p){Hn!==null&&g.mode&1&&!(xt&2)?(g=I.interleaved,g===null?(p.next=p,fr===null?fr=[I]:fr.push(I)):(p.next=g.next,g.next=p),I.interleaved=p):(g=I.pending,g===null?p.next=p:(p.next=g.next,g.next=p),I.pending=p)}function GG(g,I,p){if(p&4194240){var G=I.lanes;G&=g.pendingLanes,p|=G,I.lanes=p,hp(g,p)}}var HC={readContext:Gs,useCallback:di,useContext:di,useEffect:di,useImperativeHandle:di,useInsertionEffect:di,useLayoutEffect:di,useMemo:di,useReducer:di,useRef:di,useState:di,useDebugValue:di,useDeferredValue:di,useTransition:di,useMutableSource:di,useSyncExternalStore:di,useId:di,unstable_isNewReconciler:!1},DM={readContext:Gs,useCallback:function(g,I){return Ur().memoizedState=[g,I===void 0?null:I],g},useContext:Gs,useEffect:Lp,useImperativeHandle:function(g,I,p){return p=p!=null?p.concat([g]):null,MC(4194308,4,hG.bind(null,I,g),p)},useLayoutEffect:function(g,I){return MC(4194308,4,g,I)},useInsertionEffect:function(g,I){return MC(4,2,g,I)},useMemo:function(g,I){var p=Ur();return I=I===void 0?null:I,g=g(),p.memoizedState=[g,I],g},useReducer:function(g,I,p){var G=Ur();return I=p!==void 0?p(I):I,G.memoizedState=G.baseState=I,g={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:g,lastRenderedState:I},G.queue=g,g=g.dispatch=EM.bind(null,vn,g),[G.memoizedState,g]},useRef:function(g){var I=Ur();return g={current:g},I.memoizedState=g},useState:zp,useDebugValue:Tp,useDeferredValue:function(g){var I=zp(g),p=I[0],G=I[1];return Lp(function(){var w=Ss.transition;Ss.transition={};try{G(g)}finally{Ss.transition=w}},[g]),p},useTransition:function(){var g=zp(!1),I=g[0];return g=TM.bind(null,g[1]),Ur().memoizedState=g,[I,g]},useMutableSource:function(){},useSyncExternalStore:function(g,I,p){var G=vn,w=Ur();if(Cn){if(p===void 0)throw Error(o(407));p=p()}else{if(p=I(),Hn===null)throw Error(o(349));Jl&30||lG(G,I,p)}w.memoizedState=p;var W={value:p,getSnapshot:I};return w.queue=W,Lp(cG.bind(null,G,W,g),[g]),G.flags|=2048,Tc(9,gG.bind(null,G,W,p,I),void 0,null),p},useId:function(){var g=Ur(),I=Hn.identifierPrefix;if(Cn){var p=Dr,G=kr;p=(G&~(1<<32-Js(G)-1)).toString(32)+p,I=":"+I+"R"+p,p=Lc++,0om&&(I.flags|=128,G=!0,Uc(w,!1),I.lanes=4194304)}else{if(!G)if(g=SC(W),g!==null){if(I.flags|=128,G=!0,g=g.updateQueue,g!==null&&(I.updateQueue=g,I.flags|=4),Uc(w,!0),w.tail===null&&w.tailMode==="hidden"&&!W.alternate&&!Cn)return hi(I),null}else 2*qn()-w.renderingStartTime>om&&p!==1073741824&&(I.flags|=128,G=!0,Uc(w,!1),I.lanes=4194304);w.isBackwards?(W.sibling=I.child,I.child=W):(g=w.last,g!==null?g.sibling=W:I.child=W,w.last=W)}return w.tail!==null?(I=w.tail,w.rendering=I,w.tail=I.sibling,w.renderingStartTime=qn(),I.sibling=null,g=An.current,mt(An,G?g&1|2:g&1),I):(hi(I),null);case 22:case 23:return Im(),G=I.memoizedState!==null,g!==null&&g.memoizedState!==null!==G&&(I.flags|=8192),G&&I.mode&1?os&1073741824&&(hi(I),ze&&I.subtreeFlags&6&&(I.flags|=8192)):hi(I),null;case 24:return null;case 25:return null}throw Error(o(156,I.tag))}var OM=a.ReactCurrentOwner,rs=!1;function wi(g,I,p,G){I.child=g===null?sG(I,null,p,G):Ul(I,g.child,p,G)}function VG(g,I,p,G,w){p=p.render;var W=I.ref;return Tl(I,w),G=Fp(g,I,p,G,W,w),p=Kp(),g!==null&&!rs?(I.updateQueue=g.updateQueue,I.flags&=-2053,g.lanes&=~w,Pr(g,I,w)):(Cn&&p&&Sp(I),I.flags|=1,wi(g,I,G,w),I.child)}function MG(g,I,p,G,w){if(g===null){var W=p.type;return typeof W=="function"&&!Cm(W)&&W.defaultProps===void 0&&p.compare===null&&p.defaultProps===void 0?(I.tag=15,I.type=W,NG(g,I,W,G,w)):(g=id(p.type,null,G,I,I.mode,w),g.ref=I.ref,g.return=I,I.child=g)}if(W=g.child,!(g.lanes&w)){var T=W.memoizedProps;if(p=p.compare,p=p!==null?p:mC,p(T,G)&&g.ref===I.ref)return Pr(g,I,w)}return I.flags|=1,g=Mo(W,G),g.ref=I.ref,g.return=I,I.child=g}function NG(g,I,p,G,w){if(g!==null&&mC(g.memoizedProps,G)&&g.ref===I.ref)if(rs=!1,(g.lanes&w)!==0)g.flags&131072&&(rs=!0);else return I.lanes=g.lanes,Pr(g,I,w);return Dp(g,I,p,G,w)}function HG(g,I,p){var G=I.pendingProps,w=G.children,W=g!==null?g.memoizedState:null;if(G.mode==="hidden")if(!(I.mode&1))I.memoizedState={baseLanes:0,cachePool:null},mt(Ol,os),os|=p;else if(p&1073741824)I.memoizedState={baseLanes:0,cachePool:null},G=W!==null?W.baseLanes:p,mt(Ol,os),os|=G;else return g=W!==null?W.baseLanes|p:p,I.lanes=I.childLanes=1073741824,I.memoizedState={baseLanes:g,cachePool:null},I.updateQueue=null,mt(Ol,os),os|=g,null;else W!==null?(G=W.baseLanes|p,I.memoizedState=null):G=p,mt(Ol,os),os|=G;return wi(g,I,w,p),I.child}function XG(g,I){var p=I.ref;(g===null&&p!==null||g!==null&&g.ref!==p)&&(I.flags|=512,I.flags|=2097152)}function Dp(g,I,p,G,w){var W=ri(p)?_s:Nn.current;return W=Zo(I,W),Tl(I,w),p=Fp(g,I,p,G,W,w),G=Kp(),g!==null&&!rs?(I.updateQueue=g.updateQueue,I.flags&=-2053,g.lanes&=~w,Pr(g,I,w)):(Cn&&G&&Sp(I),I.flags|=1,wi(g,I,p,w),I.child)}function YG(g,I,p,G,w){if(ri(p)){var W=!0;uC(I)}else W=!1;if(Tl(I,w),I.stateNode===null)g!==null&&(g.alternate=null,I.alternate=null,I.flags|=2),Qv(I,p,G),wp(I,p,G,w),G=!0;else if(g===null){var T=I.stateNode,j=I.memoizedProps;T.props=j;var Ae=T.context,Ve=p.contextType;typeof Ve=="object"&&Ve!==null?Ve=Gs(Ve):(Ve=ri(p)?_s:Nn.current,Ve=Zo(I,Ve));var Ue=p.getDerivedStateFromProps,dt=typeof Ue=="function"||typeof T.getSnapshotBeforeUpdate=="function";dt||typeof T.UNSAFE_componentWillReceiveProps!="function"&&typeof T.componentWillReceiveProps!="function"||(j!==G||Ae!==Ve)&&jv(I,T,G,Ve),wo=!1;var gt=I.memoizedState;T.state=gt,vC(I,G,T,w),Ae=I.memoizedState,j!==G||gt!==Ae||$t.current||wo?(typeof Ue=="function"&&(Zp(I,p,Ue,G),Ae=I.memoizedState),(j=wo||Ov(I,p,j,G,gt,Ae,Ve))?(dt||typeof T.UNSAFE_componentWillMount!="function"&&typeof T.componentWillMount!="function"||(typeof T.componentWillMount=="function"&&T.componentWillMount(),typeof T.UNSAFE_componentWillMount=="function"&&T.UNSAFE_componentWillMount()),typeof T.componentDidMount=="function"&&(I.flags|=4194308)):(typeof T.componentDidMount=="function"&&(I.flags|=4194308),I.memoizedProps=G,I.memoizedState=Ae),T.props=G,T.state=Ae,T.context=Ve,G=j):(typeof T.componentDidMount=="function"&&(I.flags|=4194308),G=!1)}else{T=I.stateNode,Uv(g,I),j=I.memoizedProps,Ve=I.type===I.elementType?j:Os(I.type,j),T.props=Ve,dt=I.pendingProps,gt=T.context,Ae=p.contextType,typeof Ae=="object"&&Ae!==null?Ae=Gs(Ae):(Ae=ri(p)?_s:Nn.current,Ae=Zo(I,Ae));var nn=p.getDerivedStateFromProps;(Ue=typeof nn=="function"||typeof T.getSnapshotBeforeUpdate=="function")||typeof T.UNSAFE_componentWillReceiveProps!="function"&&typeof T.componentWillReceiveProps!="function"||(j!==dt||gt!==Ae)&&jv(I,T,G,Ae),wo=!1,gt=I.memoizedState,T.state=gt,vC(I,G,T,w);var $e=I.memoizedState;j!==dt||gt!==$e||$t.current||wo?(typeof nn=="function"&&(Zp(I,p,nn,G),$e=I.memoizedState),(Ve=wo||Ov(I,p,Ve,G,gt,$e,Ae)||!1)?(Ue||typeof T.UNSAFE_componentWillUpdate!="function"&&typeof T.componentWillUpdate!="function"||(typeof T.componentWillUpdate=="function"&&T.componentWillUpdate(G,$e,Ae),typeof T.UNSAFE_componentWillUpdate=="function"&&T.UNSAFE_componentWillUpdate(G,$e,Ae)),typeof T.componentDidUpdate=="function"&&(I.flags|=4),typeof T.getSnapshotBeforeUpdate=="function"&&(I.flags|=1024)):(typeof T.componentDidUpdate!="function"||j===g.memoizedProps&>===g.memoizedState||(I.flags|=4),typeof T.getSnapshotBeforeUpdate!="function"||j===g.memoizedProps&>===g.memoizedState||(I.flags|=1024),I.memoizedProps=G,I.memoizedState=$e),T.props=G,T.state=$e,T.context=Ae,G=Ve):(typeof T.componentDidUpdate!="function"||j===g.memoizedProps&>===g.memoizedState||(I.flags|=4),typeof T.getSnapshotBeforeUpdate!="function"||j===g.memoizedProps&>===g.memoizedState||(I.flags|=1024),G=!1)}return Up(g,I,p,G,W,w)}function Up(g,I,p,G,w,W){XG(g,I);var T=(I.flags&128)!==0;if(!G&&!T)return w&&Lv(I,p,!1),Pr(g,I,W);G=I.stateNode,OM.current=I;var j=T&&typeof p.getDerivedStateFromError!="function"?null:G.render();return I.flags|=1,g!==null&&T?(I.child=Ul(I,g.child,null,W),I.child=Ul(I,null,j,W)):wi(g,I,j,W),I.memoizedState=G.state,w&&Lv(I,p,!0),I.child}function FG(g){var I=g.stateNode;I.pendingContext?Kv(g,I.pendingContext,I.pendingContext!==I.context):I.context&&Kv(g,I.context,!1),Mp(g,I.containerInfo)}function KG(g,I,p,G,w){return Dl(),Vp(w),I.flags|=256,wi(g,I,p,G),I.child}var FC={dehydrated:null,treeContext:null,retryLane:0};function KC(g){return{baseLanes:g,cachePool:null}}function zG(g,I,p){var G=I.pendingProps,w=An.current,W=!1,T=(I.flags&128)!==0,j;if((j=T)||(j=g!==null&&g.memoizedState===null?!1:(w&2)!==0),j?(W=!0,I.flags&=-129):(g===null||g.memoizedState!==null)&&(w|=1),mt(An,w&1),g===null)return Wp(I),g=I.memoizedState,g!==null&&(g=g.dehydrated,g!==null)?(I.mode&1?Vc(g)?I.lanes=8:I.lanes=1073741824:I.lanes=1,null):(w=G.children,g=G.fallback,W?(G=I.mode,W=I.child,w={mode:"hidden",children:w},!(G&1)&&W!==null?(W.childLanes=0,W.pendingProps=w):W=sd(w,G,0,null),g=Ya(g,G,p,null),W.return=I,g.return=I,W.sibling=g,I.child=W,I.child.memoizedState=KC(p),I.memoizedState=FC,g):Pp(I,w));if(w=g.memoizedState,w!==null){if(j=w.dehydrated,j!==null){if(T)return I.flags&256?(I.flags&=-257,zC(g,I,p,Error(o(422)))):I.memoizedState!==null?(I.child=g.child,I.flags|=128,null):(W=G.fallback,w=I.mode,G=sd({mode:"visible",children:G.children},w,0,null),W=Ya(W,w,p,null),W.flags|=2,G.return=I,W.return=I,G.sibling=W,I.child=G,I.mode&1&&Ul(I,g.child,null,p),I.child.memoizedState=KC(p),I.memoizedState=FC,W);if(!(I.mode&1))I=zC(g,I,p,null);else if(Vc(j))I=zC(g,I,p,Error(o(419)));else if(G=(p&g.childLanes)!==0,rs||G){if(G=Hn,G!==null){switch(p&-p){case 4:W=2;break;case 16:W=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:W=32;break;case 536870912:W=268435456;break;default:W=0}G=W&(G.suspendedLanes|p)?0:W,G!==0&&G!==w.retryLane&&(w.retryLane=G,xs(g,G,-1))}um(),I=zC(g,I,p,Error(o(421)))}else cC(j)?(I.flags|=128,I.child=g.child,I=l5.bind(null,g),up(j,I),I=null):(p=w.treeContext,de&&(ss=se(j),is=I,Cn=!0,Qs=null,Hc=!1,p!==null&&(Bs[Zs++]=kr,Bs[Zs++]=Dr,Bs[Zs++]=xa,kr=p.id,Dr=p.overflow,xa=I)),I=Pp(I,I.pendingProps.children),I.flags|=4096);return I}return W?(G=TG(g,I,G.children,G.fallback,p),W=I.child,w=g.child.memoizedState,W.memoizedState=w===null?KC(p):{baseLanes:w.baseLanes|p,cachePool:null},W.childLanes=g.childLanes&~p,I.memoizedState=FC,G):(p=LG(g,I,G.children,p),I.memoizedState=null,p)}return W?(G=TG(g,I,G.children,G.fallback,p),W=I.child,w=g.child.memoizedState,W.memoizedState=w===null?KC(p):{baseLanes:w.baseLanes|p,cachePool:null},W.childLanes=g.childLanes&~p,I.memoizedState=FC,G):(p=LG(g,I,G.children,p),I.memoizedState=null,p)}function Pp(g,I){return I=sd({mode:"visible",children:I},g.mode,0,null),I.return=g,g.child=I}function LG(g,I,p,G){var w=g.child;return g=w.sibling,p=Mo(w,{mode:"visible",children:p}),!(I.mode&1)&&(p.lanes=G),p.return=I,p.sibling=null,g!==null&&(G=I.deletions,G===null?(I.deletions=[g],I.flags|=16):G.push(g)),I.child=p}function TG(g,I,p,G,w){var W=I.mode;g=g.child;var T=g.sibling,j={mode:"hidden",children:p};return!(W&1)&&I.child!==g?(p=I.child,p.childLanes=0,p.pendingProps=j,I.deletions=null):(p=Mo(g,j),p.subtreeFlags=g.subtreeFlags&14680064),T!==null?G=Mo(T,G):(G=Ya(G,W,w,null),G.flags|=2),G.return=I,p.return=I,p.sibling=G,I.child=p,G}function zC(g,I,p,G){return G!==null&&Vp(G),Ul(I,g.child,null,p),g=Pp(I,I.pendingProps.children),g.flags|=2,I.memoizedState=null,g}function EG(g,I,p){g.lanes|=I;var G=g.alternate;G!==null&&(G.lanes|=I),Gp(g.return,I,p)}function _p(g,I,p,G,w){var W=g.memoizedState;W===null?g.memoizedState={isBackwards:I,rendering:null,renderingStartTime:0,last:G,tail:p,tailMode:w}:(W.isBackwards=I,W.rendering=null,W.renderingStartTime=0,W.last=G,W.tail=p,W.tailMode=w)}function kG(g,I,p){var G=I.pendingProps,w=G.revealOrder,W=G.tail;if(wi(g,I,G.children,p),G=An.current,G&2)G=G&1|2,I.flags|=128;else{if(g!==null&&g.flags&128)e:for(g=I.child;g!==null;){if(g.tag===13)g.memoizedState!==null&&EG(g,p,I);else if(g.tag===19)EG(g,p,I);else if(g.child!==null){g.child.return=g,g=g.child;continue}if(g===I)break e;for(;g.sibling===null;){if(g.return===null||g.return===I)break e;g=g.return}g.sibling.return=g.return,g=g.sibling}G&=1}if(mt(An,G),!(I.mode&1))I.memoizedState=null;else switch(w){case"forwards":for(p=I.child,w=null;p!==null;)g=p.alternate,g!==null&&SC(g)===null&&(w=p),p=p.sibling;p=w,p===null?(w=I.child,I.child=null):(w=p.sibling,p.sibling=null),_p(I,!1,w,p,W);break;case"backwards":for(p=null,w=I.child,I.child=null;w!==null;){if(g=w.alternate,g!==null&&SC(g)===null){I.child=w;break}g=w.sibling,w.sibling=p,p=w,w=g}_p(I,!0,p,null,W);break;case"together":_p(I,!1,null,null,void 0);break;default:I.memoizedState=null}return I.child}function Pr(g,I,p){if(g!==null&&(I.dependencies=g.dependencies),Ql|=I.lanes,!(p&I.childLanes))return null;if(g!==null&&I.child!==g.child)throw Error(o(153));if(I.child!==null){for(g=I.child,p=Mo(g,g.pendingProps),I.child=p,p.return=I;g.sibling!==null;)g=g.sibling,p=p.sibling=Mo(g,g.pendingProps),p.return=I;p.sibling=null}return I.child}function QM(g,I,p){switch(I.tag){case 3:FG(I),Dl();break;case 5:rG(I);break;case 1:ri(I.type)&&uC(I);break;case 4:Mp(I,I.stateNode.containerInfo);break;case 10:Dv(I,I.type._context,I.memoizedProps.value);break;case 13:var G=I.memoizedState;if(G!==null)return G.dehydrated!==null?(mt(An,An.current&1),I.flags|=128,null):p&I.child.childLanes?zG(g,I,p):(mt(An,An.current&1),g=Pr(g,I,p),g!==null?g.sibling:null);mt(An,An.current&1);break;case 19:if(G=(p&I.childLanes)!==0,g.flags&128){if(G)return kG(g,I,p);I.flags|=128}var w=I.memoizedState;if(w!==null&&(w.rendering=null,w.tail=null,w.lastEffect=null),mt(An,An.current),G)break;return null;case 22:case 23:return I.lanes=0,HG(g,I,p)}return Pr(g,I,p)}function jM(g,I){switch(xp(I),I.tag){case 1:return ri(I.type)&&IC(),g=I.flags,g&65536?(I.flags=g&-65537|128,I):null;case 3:return _l(),Qt($t),Qt(Nn),Xp(),g=I.flags,g&65536&&!(g&128)?(I.flags=g&-65537|128,I):null;case 5:return Np(I),null;case 13:if(Qt(An),g=I.memoizedState,g!==null&&g.dehydrated!==null){if(I.alternate===null)throw Error(o(340));Dl()}return g=I.flags,g&65536?(I.flags=g&-65537|128,I):null;case 19:return Qt(An),null;case 4:return _l(),null;case 10:return vp(I.type._context),null;case 22:case 23:return Im(),null;case 24:return null;default:return null}}var LC=!1,Va=!1,qM=typeof WeakSet=="function"?WeakSet:Set,Fe=null;function TC(g,I){var p=g.ref;if(p!==null)if(typeof p=="function")try{p(null)}catch(G){Li(g,I,G)}else p.current=null}function Jp(g,I,p){try{p()}catch(G){Li(g,I,G)}}var DG=!1;function $M(g,I){for(P(g.containerInfo),Fe=I;Fe!==null;)if(g=Fe,I=g.child,(g.subtreeFlags&1028)!==0&&I!==null)I.return=g,Fe=I;else for(;Fe!==null;){g=Fe;try{var p=g.alternate;if(g.flags&1024)switch(g.tag){case 0:case 11:case 15:break;case 1:if(p!==null){var G=p.memoizedProps,w=p.memoizedState,W=g.stateNode,T=W.getSnapshotBeforeUpdate(g.elementType===g.type?G:Os(g.type,G),w);W.__reactInternalSnapshotBeforeUpdate=T}break;case 3:ze&&Ee(g.stateNode.containerInfo);break;case 5:case 6:case 4:case 17:break;default:throw Error(o(163))}}catch(j){Li(g,g.return,j)}if(I=g.sibling,I!==null){I.return=g.return,Fe=I;break}Fe=g.return}return p=DG,DG=!1,p}function Ma(g,I,p){var G=I.updateQueue;if(G=G!==null?G.lastEffect:null,G!==null){var w=G=G.next;do{if((w.tag&g)===g){var W=w.destroy;w.destroy=void 0,W!==void 0&&Jp(I,p,W)}w=w.next}while(w!==G)}}function Pc(g,I){if(I=I.updateQueue,I=I!==null?I.lastEffect:null,I!==null){var p=I=I.next;do{if((p.tag&g)===g){var G=p.create;p.destroy=G()}p=p.next}while(p!==I)}}function Op(g){var I=g.ref;if(I!==null){var p=g.stateNode;switch(g.tag){case 5:g=ue(p);break;default:g=p}typeof I=="function"?I(g):I.current=g}}function UG(g,I,p){if(Ar&&typeof Ar.onCommitFiberUnmount=="function")try{Ar.onCommitFiberUnmount(AC,I)}catch{}switch(I.tag){case 0:case 11:case 14:case 15:if(g=I.updateQueue,g!==null&&(g=g.lastEffect,g!==null)){var G=g=g.next;do{var w=G,W=w.destroy;w=w.tag,W!==void 0&&(w&2||w&4)&&Jp(I,p,W),G=G.next}while(G!==g)}break;case 1:if(TC(I,p),g=I.stateNode,typeof g.componentWillUnmount=="function")try{g.props=I.memoizedProps,g.state=I.memoizedState,g.componentWillUnmount()}catch(T){Li(I,p,T)}break;case 5:TC(I,p);break;case 4:ze?jG(g,I,p):ye&&ye&&(I=I.stateNode.containerInfo,p=Ut(I),Ds(I,p))}}function PG(g,I,p){for(var G=I;;)if(UG(g,G,p),G.child===null||ze&&G.tag===4){if(G===I)break;for(;G.sibling===null;){if(G.return===null||G.return===I)return;G=G.return}G.sibling.return=G.return,G=G.sibling}else G.child.return=G,G=G.child}function _G(g){var I=g.alternate;I!==null&&(g.alternate=null,_G(I)),g.child=null,g.deletions=null,g.sibling=null,g.tag===5&&(I=g.stateNode,I!==null&&it(I)),g.stateNode=null,g.return=null,g.dependencies=null,g.memoizedProps=null,g.memoizedState=null,g.pendingProps=null,g.stateNode=null,g.updateQueue=null}function JG(g){return g.tag===5||g.tag===3||g.tag===4}function OG(g){e:for(;;){for(;g.sibling===null;){if(g.return===null||JG(g.return))return null;g=g.return}for(g.sibling.return=g.return,g=g.sibling;g.tag!==5&&g.tag!==6&&g.tag!==18;){if(g.flags&2||g.child===null||g.tag===4)continue e;g.child.return=g,g=g.child}if(!(g.flags&2))return g.stateNode}}function QG(g){if(ze){e:{for(var I=g.return;I!==null;){if(JG(I))break e;I=I.return}throw Error(o(160))}var p=I;switch(p.tag){case 5:I=p.stateNode,p.flags&32&&(bt(I),p.flags&=-33),p=OG(g),jp(g,p,I);break;case 3:case 4:I=p.stateNode.containerInfo,p=OG(g),Qp(g,p,I);break;default:throw Error(o(161))}}}function Qp(g,I,p){var G=g.tag;if(G===5||G===6)g=g.stateNode,I?ve(p,g,I):Te(p,g);else if(G!==4&&(g=g.child,g!==null))for(Qp(g,I,p),g=g.sibling;g!==null;)Qp(g,I,p),g=g.sibling}function jp(g,I,p){var G=g.tag;if(G===5||G===6)g=g.stateNode,I?pe(p,g,I):lt(p,g);else if(G!==4&&(g=g.child,g!==null))for(jp(g,I,p),g=g.sibling;g!==null;)jp(g,I,p),g=g.sibling}function jG(g,I,p){for(var G=I,w=!1,W,T;;){if(!w){w=G.return;e:for(;;){if(w===null)throw Error(o(160));switch(W=w.stateNode,w.tag){case 5:T=!1;break e;case 3:W=W.containerInfo,T=!0;break e;case 4:W=W.containerInfo,T=!0;break e}w=w.return}w=!0}if(G.tag===5||G.tag===6)PG(g,G,p),T?ot(W,G.stateNode):Me(W,G.stateNode);else if(G.tag===18)T?Wt(W,G.stateNode):St(W,G.stateNode);else if(G.tag===4){if(G.child!==null){W=G.stateNode.containerInfo,T=!0,G.child.return=G,G=G.child;continue}}else if(UG(g,G,p),G.child!==null){G.child.return=G,G=G.child;continue}if(G===I)break;for(;G.sibling===null;){if(G.return===null||G.return===I)return;G=G.return,G.tag===4&&(w=!1)}G.sibling.return=G.return,G=G.sibling}}function qp(g,I){if(ze){switch(I.tag){case 0:case 11:case 14:case 15:Ma(3,I,I.return),Pc(3,I),Ma(5,I,I.return);return;case 1:return;case 5:var p=I.stateNode;if(p!=null){var G=I.memoizedProps;g=g!==null?g.memoizedProps:G;var w=I.type,W=I.updateQueue;I.updateQueue=null,W!==null&&_(p,W,w,g,G,I)}return;case 6:if(I.stateNode===null)throw Error(o(162));p=I.memoizedProps,me(I.stateNode,g!==null?g.memoizedProps:p,p);return;case 3:de&&g!==null&&g.memoizedState.isDehydrated&&pt(I.stateNode.containerInfo);return;case 12:return;case 13:EC(I);return;case 19:EC(I);return;case 17:return}throw Error(o(163))}switch(I.tag){case 0:case 11:case 14:case 15:Ma(3,I,I.return),Pc(3,I),Ma(5,I,I.return);return;case 12:return;case 13:EC(I);return;case 19:EC(I);return;case 3:de&&g!==null&&g.memoizedState.isDehydrated&&pt(I.stateNode.containerInfo);break;case 22:case 23:return}e:if(ye){switch(I.tag){case 1:case 5:case 6:break e;case 3:case 4:I=I.stateNode,Ds(I.containerInfo,I.pendingChildren);break e}throw Error(o(163))}}function EC(g){var I=g.updateQueue;if(I!==null){g.updateQueue=null;var p=g.stateNode;p===null&&(p=g.stateNode=new qM),I.forEach(function(G){var w=g5.bind(null,g,G);p.has(G)||(p.add(G),G.then(w,w))})}}function e5(g,I){for(Fe=I;Fe!==null;){I=Fe;var p=I.deletions;if(p!==null)for(var G=0;G";case DC:return":has("+(tm(g)||"")+")";case UC:return'[role="'+g.value+'"]';case _C:return'"'+g.value+'"';case PC:return'[data-testname="'+g.value+'"]';default:throw Error(o(365))}}function nB(g,I){var p=[];g=[g,0];for(var G=0;Gw&&(w=T),G&=~W}if(G=w,G=qn()-G,G=(120>G?120:480>G?480:1080>G?1080:1920>G?1920:3e3>G?3e3:4320>G?4320:1960*n5(G/1960))-G,10g?16:g,Ro===null)var G=!1;else{if(g=Ro,Ro=null,qC=0,xt&6)throw Error(o(331));var w=xt;for(xt|=4,Fe=g.current;Fe!==null;){var W=Fe,T=W.child;if(Fe.flags&16){var j=W.deletions;if(j!==null){for(var Ae=0;Aeqn()-rm?Na(g,0):sm|=p),zi(g,I)}function IB(g,I){I===0&&(g.mode&1?(I=dC,dC<<=1,!(dC&130023424)&&(dC=4194304)):I=1);var p=Si();g=td(g,I),g!==null&&(Nc(g,I,p),zi(g,p))}function l5(g){var I=g.memoizedState,p=0;I!==null&&(p=I.retryLane),IB(g,p)}function g5(g,I){var p=0;switch(g.tag){case 13:var G=g.stateNode,w=g.memoizedState;w!==null&&(p=w.retryLane);break;case 19:G=g.stateNode;break;default:throw Error(o(314))}G!==null&&G.delete(I),IB(g,p)}var uB;uB=function(g,I,p){if(g!==null)if(g.memoizedProps!==I.pendingProps||$t.current)rs=!0;else{if(!(g.lanes&p)&&!(I.flags&128))return rs=!1,QM(g,I,p);rs=!!(g.flags&131072)}else rs=!1,Cn&&I.flags&1048576&&qv(I,ZC,I.index);switch(I.lanes=0,I.tag){case 2:var G=I.type;g!==null&&(g.alternate=null,I.alternate=null,I.flags|=2),g=I.pendingProps;var w=Zo(I,Nn.current);Tl(I,p),w=Fp(null,I,G,g,w,p);var W=Kp();return I.flags|=1,typeof w=="object"&&w!==null&&typeof w.render=="function"&&w.$$typeof===void 0?(I.tag=1,I.memoizedState=null,I.updateQueue=null,ri(G)?(W=!0,uC(I)):W=!1,I.memoizedState=w.state!==null&&w.state!==void 0?w.state:null,Bp(I),w.updater=GC,I.stateNode=w,w._reactInternals=I,wp(I,G,g,p),I=Up(null,I,G,!0,W,p)):(I.tag=0,Cn&&W&&Sp(I),wi(null,I,w,p),I=I.child),I;case 16:G=I.elementType;e:{switch(g!==null&&(g.alternate=null,I.alternate=null,I.flags|=2),g=I.pendingProps,w=G._init,G=w(G._payload),I.type=G,w=I.tag=I5(G),g=Os(G,g),w){case 0:I=Dp(null,I,G,g,p);break e;case 1:I=YG(null,I,G,g,p);break e;case 11:I=VG(null,I,G,g,p);break e;case 14:I=MG(null,I,G,Os(G.type,g),p);break e}throw Error(o(306,G,""))}return I;case 0:return G=I.type,w=I.pendingProps,w=I.elementType===G?w:Os(G,w),Dp(g,I,G,w,p);case 1:return G=I.type,w=I.pendingProps,w=I.elementType===G?w:Os(G,w),YG(g,I,G,w,p);case 3:e:{if(FG(I),g===null)throw Error(o(387));G=I.pendingProps,W=I.memoizedState,w=W.element,Uv(g,I),vC(I,G,null,p);var T=I.memoizedState;if(G=T.element,de&&W.isDehydrated)if(W={element:G,isDehydrated:!1,cache:T.cache,transitions:T.transitions},I.updateQueue.baseState=W,I.memoizedState=W,I.flags&256){w=Error(o(423)),I=KG(g,I,G,p,w);break e}else if(G!==w){w=Error(o(424)),I=KG(g,I,G,p,w);break e}else for(de&&(ss=fe(I.stateNode.containerInfo),is=I,Cn=!0,Qs=null,Hc=!1),p=sG(I,null,G,p),I.child=p;p;)p.flags=p.flags&-3|4096,p=p.sibling;else{if(Dl(),G===w){I=Pr(g,I,p);break e}wi(g,I,G,p)}I=I.child}return I;case 5:return rG(I),g===null&&Wp(I),G=I.type,w=I.pendingProps,W=g!==null?g.memoizedProps:null,T=w.children,Ze(G,w)?T=null:W!==null&&Ze(G,W)&&(I.flags|=32),XG(g,I),wi(g,I,T,p),I.child;case 6:return g===null&&Wp(I),null;case 13:return zG(g,I,p);case 4:return Mp(I,I.stateNode.containerInfo),G=I.pendingProps,g===null?I.child=Ul(I,null,G,p):wi(g,I,G,p),I.child;case 11:return G=I.type,w=I.pendingProps,w=I.elementType===G?w:Os(G,w),VG(g,I,G,w,p);case 7:return wi(g,I,I.pendingProps,p),I.child;case 8:return wi(g,I,I.pendingProps.children,p),I.child;case 12:return wi(g,I,I.pendingProps.children,p),I.child;case 10:e:{if(G=I.type._context,w=I.pendingProps,W=I.memoizedProps,T=w.value,Dv(I,G,T),W!==null)if(pr(W.value,T)){if(W.children===w.children&&!$t.current){I=Pr(g,I,p);break e}}else for(W=I.child,W!==null&&(W.return=I);W!==null;){var j=W.dependencies;if(j!==null){T=W.child;for(var Ae=j.firstContext;Ae!==null;){if(Ae.context===G){if(W.tag===1){Ae=Er(-1,p&-p),Ae.tag=2;var Ve=W.updateQueue;if(Ve!==null){Ve=Ve.shared;var Ue=Ve.pending;Ue===null?Ae.next=Ae:(Ae.next=Ue.next,Ue.next=Ae),Ve.pending=Ae}}W.lanes|=p,Ae=W.alternate,Ae!==null&&(Ae.lanes|=p),Gp(W.return,p,I),j.lanes|=p;break}Ae=Ae.next}}else if(W.tag===10)T=W.type===I.type?null:W.child;else if(W.tag===18){if(T=W.return,T===null)throw Error(o(341));T.lanes|=p,j=T.alternate,j!==null&&(j.lanes|=p),Gp(T,p,I),T=W.sibling}else T=W.child;if(T!==null)T.return=W;else for(T=W;T!==null;){if(T===I){T=null;break}if(W=T.sibling,W!==null){W.return=T.return,T=W;break}T=T.return}W=T}wi(g,I,w.children,p),I=I.child}return I;case 9:return w=I.type,G=I.pendingProps.children,Tl(I,p),w=Gs(w),G=G(w),I.flags|=1,wi(g,I,G,p),I.child;case 14:return G=I.type,w=Os(G,I.pendingProps),w=Os(G.type,w),MG(g,I,G,w,p);case 15:return NG(g,I,I.type,I.pendingProps,p);case 17:return G=I.type,w=I.pendingProps,w=I.elementType===G?w:Os(G,w),g!==null&&(g.alternate=null,I.alternate=null,I.flags|=2),I.tag=1,ri(G)?(g=!0,uC(I)):g=!1,Tl(I,p),Qv(I,G,w),wp(I,G,w,p),Up(null,I,G,!0,g,p);case 19:return kG(g,I,p);case 22:return HG(g,I,p)}throw Error(o(156,I.tag))};function CB(g,I){return Ap(g,I)}function c5(g,I,p,G){this.tag=g,this.key=p,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=I,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=G,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Rs(g,I,p,G){return new c5(g,I,p,G)}function Cm(g){return g=g.prototype,!(!g||!g.isReactComponent)}function I5(g){if(typeof g=="function")return Cm(g)?1:0;if(g!=null){if(g=g.$$typeof,g===y)return 11;if(g===b)return 14}return 2}function Mo(g,I){var p=g.alternate;return p===null?(p=Rs(g.tag,I,g.key,g.mode),p.elementType=g.elementType,p.type=g.type,p.stateNode=g.stateNode,p.alternate=g,g.alternate=p):(p.pendingProps=I,p.type=g.type,p.flags=0,p.subtreeFlags=0,p.deletions=null),p.flags=g.flags&14680064,p.childLanes=g.childLanes,p.lanes=g.lanes,p.child=g.child,p.memoizedProps=g.memoizedProps,p.memoizedState=g.memoizedState,p.updateQueue=g.updateQueue,I=g.dependencies,p.dependencies=I===null?null:{lanes:I.lanes,firstContext:I.firstContext},p.sibling=g.sibling,p.index=g.index,p.ref=g.ref,p}function id(g,I,p,G,w,W){var T=2;if(G=g,typeof g=="function")Cm(g)&&(T=1);else if(typeof g=="string")T=5;else e:switch(g){case u:return Ya(p.children,w,W,I);case C:T=8,w|=8;break;case d:return g=Rs(12,p,I,w|2),g.elementType=d,g.lanes=W,g;case v:return g=Rs(13,p,I,w),g.elementType=v,g.lanes=W,g;case A:return g=Rs(19,p,I,w),g.elementType=A,g.lanes=W,g;case B:return sd(p,w,W,I);default:if(typeof g=="object"&&g!==null)switch(g.$$typeof){case h:T=10;break e;case m:T=9;break e;case y:T=11;break e;case b:T=14;break e;case f:T=16,G=null;break e}throw Error(o(130,g==null?g:typeof g,""))}return I=Rs(T,p,I,w),I.elementType=g,I.type=G,I.lanes=W,I}function Ya(g,I,p,G){return g=Rs(7,g,G,I),g.lanes=p,g}function sd(g,I,p,G){return g=Rs(22,g,G,I),g.elementType=B,g.lanes=p,g.stateNode={},g}function dm(g,I,p){return g=Rs(6,g,null,I),g.lanes=p,g}function hm(g,I,p){return I=Rs(4,g.children!==null?g.children:[],g.key,I),I.lanes=p,I.stateNode={containerInfo:g.containerInfo,pendingChildren:null,implementation:g.implementation},I}function u5(g,I,p,G,w){this.tag=I,this.containerInfo=g,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=rt,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=dp(0),this.expirationTimes=dp(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=dp(0),this.identifierPrefix=G,this.onRecoverableError=w,de&&(this.mutableSourceEagerHydrationData=null)}function dB(g,I,p,G,w,W,T,j,Ae){return g=new u5(g,I,p,j,Ae),I===1?(I=1,W===!0&&(I|=8)):I=0,W=Rs(3,null,null,I),g.current=W,W.stateNode=g,W.memoizedState={element:G,isDehydrated:p,cache:null,transitions:null},Bp(W),g}function hB(g){if(!g)return ui;g=g._reactInternals;e:{if(Z(g)!==g||g.tag!==1)throw Error(o(170));var I=g;do{switch(I.tag){case 3:I=I.stateNode.context;break e;case 1:if(ri(I.type)){I=I.stateNode.__reactInternalMemoizedMergedChildContext;break e}}I=I.return}while(I!==null);throw Error(o(171))}if(g.tag===1){var p=g.type;if(ri(p))return zv(g,p,I)}return I}function AB(g){var I=g._reactInternals;if(I===void 0)throw typeof g.render=="function"?Error(o(188)):(g=Object.keys(g).join(","),Error(o(268,g)));return g=U(I),g===null?null:g.stateNode}function pB(g,I){if(g=g.memoizedState,g!==null&&g.dehydrated!==null){var p=g.retryLane;g.retryLane=p!==0&&p=Ve&&W>=dt&&w<=Ue&&T<=gt){g.splice(I,1);break}else if(G!==Ve||p.width!==Ae.width||gtT){if(!(W!==dt||p.height!==Ae.height||Uew)){Ve>G&&(Ae.width+=Ve-G,Ae.x=G),UeW&&(Ae.height+=dt-W,Ae.y=W),gtp&&(p=T)),T ")+` - -No matching component was found for: - `)+g.join(" > ")}return null},t.getPublicRootInstance=function(g){if(g=g.current,!g.child)return null;switch(g.child.tag){case 5:return ue(g.child.stateNode);default:return g.child.stateNode}},t.injectIntoDevTools=function(g){if(g={bundleType:g.bundleType,version:g.version,rendererPackageName:g.rendererPackageName,rendererConfig:g.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:a.ReactCurrentDispatcher,findHostInstanceByFiber:C5,findFiberByHostInstance:g.findFiberByHostInstance||d5,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.0.0-fc46dba67-20220329"},typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u")g=!1;else{var I=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(I.isDisabled||!I.supportsFiber)g=!0;else{try{AC=I.inject(g),Ar=I}catch{}g=!!I.checkDCE}}return g},t.isAlreadyRendering=function(){return!1},t.observeVisibleRects=function(g,I,p,G){if(!It)throw Error(o(363));g=nm(g,I);var w=Xe(g,p,G).disconnect;return{disconnect:function(){w()}}},t.registerMutableSourceForHydration=function(g,I){var p=I._getVersion;p=p(I._source),g.mutableSourceEagerHydrationData==null?g.mutableSourceEagerHydrationData=[I,p]:g.mutableSourceEagerHydrationData.push(I,p)},t.runWithPriority=function(g,I){var p=Lt;try{return Lt=g,I()}finally{Lt=p}},t.shouldError=function(){return null},t.shouldSuspend=function(){return!1},t.updateContainer=function(g,I,p,G){var w=I.current,W=Si(),T=Wo(w);return p=hB(p),I.context===null?I.context=p:I.pendingContext=p,I=Er(W,T),I.payload={element:g},G=G===void 0?null:G,G!==null&&(I.callback=G),So(w,I),g=xs(w,T,W),g!==null&&yC(g,w,T),T},t};sV.exports=ET;var kT=sV.exports;const DT=Xb(kT);function aV(n,e,t=(i,s)=>i===s){if(n===e)return!0;if(!n||!e)return!1;const i=n.length;if(e.length!==i)return!1;for(let s=0;ss.response=r).then(()=>{i.lifespan&&i.lifespan>0&&setTimeout(()=>{const r=so.indexOf(s);r!==-1&&so.splice(r,1)},i.lifespan)}).catch(r=>s.error=r)};if(so.push(s),!t)throw s.promise}const UT=(n,e,t)=>lV(n,e,!1,t),PT=(n,e,t)=>void lV(n,e,!0,t),_T=n=>{if(n===void 0||n.length===0)so.splice(0,so.length);else{const e=so.find(t=>aV(n,t.keys,t.equal));if(e){const t=so.indexOf(e);t!==-1&&so.splice(t,1)}}},vv={},gV=n=>void Object.assign(vv,n);function JT(n,e){function t(u,{args:C=[],attach:d,...h},m){let y=`${u[0].toUpperCase()}${u.slice(1)}`,v;if(u==="primitive"){if(h.object===void 0)throw new Error("R3F: Primitives without 'object' are invalid!");const A=h.object;v=Bg(A,{type:u,root:m,attach:d,primitive:!0})}else{const A=vv[y];if(!A)throw new Error(`R3F: ${y} is not part of the THREE namespace! Did you forget to extend? See: https://docs.pmnd.rs/react-three-fiber/api/objects#using-3rd-party-objects-declaratively`);if(!Array.isArray(C))throw new Error("R3F: The args prop must be an array!");v=Bg(new A(...C),{type:u,root:m,attach:d,memoizedProps:{args:C}})}return v.__r3f.attach===void 0&&(v instanceof vt?v.__r3f.attach="geometry":v instanceof Qn&&(v.__r3f.attach="material")),y!=="inject"&&Bf(v,h),v}function i(u,C){let d=!1;if(C){var h,m;(h=C.__r3f)!=null&&h.attach?Gf(u,C,C.__r3f.attach):C.isObject3D&&u.isObject3D&&(u.add(C),d=!0),d||(m=u.__r3f)==null||m.objects.push(C),C.__r3f||Bg(C,{}),C.__r3f.parent=u,Bb(C),Zg(C)}}function s(u,C,d){let h=!1;if(C){var m,y;if((m=C.__r3f)!=null&&m.attach)Gf(u,C,C.__r3f.attach);else if(C.isObject3D&&u.isObject3D){C.parent=u,C.dispatchEvent({type:"added"});const v=u.children.filter(b=>b!==C),A=v.indexOf(d);u.children=[...v.slice(0,A),C,...v.slice(A)],h=!0}h||(y=u.__r3f)==null||y.objects.push(C),C.__r3f||Bg(C,{}),C.__r3f.parent=u,Bb(C),Zg(C)}}function r(u,C,d=!1){u&&[...u].forEach(h=>o(C,h,d))}function o(u,C,d){if(C){var h,m,y;if(C.__r3f&&(C.__r3f.parent=null),(h=u.__r3f)!=null&&h.objects&&(u.__r3f.objects=u.__r3f.objects.filter(B=>B!==C)),(m=C.__r3f)!=null&&m.attach)cw(u,C,C.__r3f.attach);else if(C.isObject3D&&u.isObject3D){var v;u.remove(C),(v=C.__r3f)!=null&&v.root&&tE(C.__r3f.root,C)}const b=(y=C.__r3f)==null?void 0:y.primitive,f=d===void 0?C.dispose!==null&&!b:d;if(!b){var A;r((A=C.__r3f)==null?void 0:A.objects,C,f),r(C.children,C,f)}C.__r3f&&(delete C.__r3f.root,delete C.__r3f.objects,delete C.__r3f.handlers,delete C.__r3f.memoizedProps,b||delete C.__r3f),f&&C.dispose&&C.type!=="Scene"&&vb.unstable_scheduleCallback(vb.unstable_IdlePriority,()=>{try{C.dispose()}catch{}}),Zg(u)}}function a(u,C,d,h){var m;const y=(m=u.__r3f)==null?void 0:m.parent;if(!y)return;const v=t(C,d,u.__r3f.root);if(u.children){for(const A of u.children)A.__r3f&&i(v,A);u.children=u.children.filter(A=>!A.__r3f)}u.__r3f.objects.forEach(A=>i(v,A)),u.__r3f.objects=[],u.__r3f.autoRemovedBeforeAppend||o(y,u),v.parent&&(v.__r3f.autoRemovedBeforeAppend=!0),i(y,v),v.raycast&&v.__r3f.eventCount&&v.__r3f.root.getState().internal.interaction.push(v),[h,h.alternate].forEach(A=>{A!==null&&(A.stateNode=v,A.ref&&(typeof A.ref=="function"?A.ref(v):A.ref.current=v))})}const l=()=>console.warn("Text is not allowed in the R3F tree! This could be stray whitespace or characters.");return{reconciler:DT({createInstance:t,removeChild:o,appendChild:i,appendInitialChild:i,insertBefore:s,supportsMutation:!0,isPrimaryRenderer:!1,supportsPersistence:!1,supportsHydration:!1,noTimeout:-1,appendChildToContainer:(u,C)=>{if(!C)return;const d=u.getState().scene;d.__r3f&&(d.__r3f.root=u,i(d,C))},removeChildFromContainer:(u,C)=>{C&&o(u.getState().scene,C)},insertInContainerBefore:(u,C,d)=>{if(!C||!d)return;const h=u.getState().scene;h.__r3f&&s(h,C,d)},getRootHostContext:()=>null,getChildHostContext:u=>u,finalizeInitialChildren(u){var C;return!!((C=u?.__r3f)!=null?C:{}).handlers},prepareUpdate(u,C,d,h){if(u.__r3f.primitive&&h.object&&h.object!==u)return[!0];{const{args:m=[],children:y,...v}=h,{args:A=[],children:b,...f}=d;if(!Array.isArray(m))throw new Error("R3F: the args prop must be an array!");if(m.some((S,x)=>S!==A[x]))return[!0];const B=AV(u,v,f,!0);return B.changes.length?[!1,B]:null}},commitUpdate(u,[C,d],h,m,y,v){C?a(u,h,y,v):Bf(u,d)},commitMount(u,C,d,h){var m;const y=(m=u.__r3f)!=null?m:{};u.raycast&&y.handlers&&y.eventCount&&u.__r3f.root.getState().internal.interaction.push(u)},getPublicInstance:u=>u,prepareForCommit:()=>null,preparePortalMount:u=>Bg(u.getState().scene),resetAfterCommit:()=>{},shouldSetTextContent:()=>!1,clearContainer:()=>!1,hideInstance(u){var C;const{attach:d,parent:h}=(C=u.__r3f)!=null?C:{};d&&h&&cw(h,u,d),u.isObject3D&&(u.visible=!1),Zg(u)},unhideInstance(u,C){var d;const{attach:h,parent:m}=(d=u.__r3f)!=null?d:{};h&&m&&Gf(m,u,h),(u.isObject3D&&C.visible==null||C.visible)&&(u.visible=!0),Zg(u)},createTextInstance:l,hideTextInstance:l,unhideTextInstance:l,getCurrentEventPriority:()=>e?e():Eg.DefaultEventPriority,beforeActiveInstanceBlur:()=>{},afterActiveInstanceBlur:()=>{},detachDeletedInstance:()=>{},now:typeof performance<"u"&&cn.fun(performance.now)?performance.now:cn.fun(Date.now)?Date.now:()=>0,scheduleTimeout:cn.fun(setTimeout)?setTimeout:void 0,cancelTimeout:cn.fun(clearTimeout)?clearTimeout:void 0}),applyProps:Bf}}var ow,aw;const vf=n=>"colorSpace"in n||"outputColorSpace"in n,cV=()=>{var n;return(n=vv.ColorManagement)!=null?n:null},IV=n=>n&&n.isOrthographicCamera,OT=n=>n&&n.hasOwnProperty("current"),Sc=typeof window<"u"&&((ow=window.document)!=null&&ow.createElement||((aw=window.navigator)==null?void 0:aw.product)==="ReactNative")?E.useLayoutEffect:E.useEffect;function uV(n){const e=E.useRef(n);return Sc(()=>void(e.current=n),[n]),e}function QT({set:n}){return Sc(()=>(n(new Promise(()=>null)),()=>n(!1)),[n]),null}class CV extends E.Component{constructor(...e){super(...e),this.state={error:!1}}componentDidCatch(e){this.props.set(e)}render(){return this.state.error?null:this.props.children}}CV.getDerivedStateFromError=()=>({error:!0});const dV="__default",lw=new Map,jT=n=>n&&!!n.memoized&&!!n.changes;function hV(n){var e;const t=typeof window<"u"?(e=window.devicePixelRatio)!=null?e:2:1;return Array.isArray(n)?Math.min(Math.max(n[0],t),n[1]):n}const hI=n=>{var e;return(e=n.__r3f)==null?void 0:e.root.getState()},cn={obj:n=>n===Object(n)&&!cn.arr(n)&&typeof n!="function",fun:n=>typeof n=="function",str:n=>typeof n=="string",num:n=>typeof n=="number",boo:n=>typeof n=="boolean",und:n=>n===void 0,arr:n=>Array.isArray(n),equ(n,e,{arrays:t="shallow",objects:i="reference",strict:s=!0}={}){if(typeof n!=typeof e||!!n!=!!e)return!1;if(cn.str(n)||cn.num(n))return n===e;const r=cn.obj(n);if(r&&i==="reference")return n===e;const o=cn.arr(n);if(o&&t==="reference")return n===e;if((o||r)&&n===e)return!0;let a;for(a in n)if(!(a in e))return!1;if(r&&t==="shallow"&&i==="shallow"){for(a in s?e:n)if(!cn.equ(n[a],e[a],{strict:s,objects:"reference"}))return!1}else for(a in s?e:n)if(n[a]!==e[a])return!1;if(cn.und(a)){if(o&&n.length===0&&e.length===0||r&&Object.keys(n).length===0&&Object.keys(e).length===0)return!0;if(n!==e)return!1}return!0}};function qT(n){const e={nodes:{},materials:{}};return n&&n.traverse(t=>{t.name&&(e.nodes[t.name]=t),t.material&&!e.materials[t.material.name]&&(e.materials[t.material.name]=t.material)}),e}function $T(n){n.dispose&&n.type!=="Scene"&&n.dispose();for(const e in n)e.dispose==null||e.dispose(),delete n[e]}function Bg(n,e){const t=n;return(e!=null&&e.primitive||!t.__r3f)&&(t.__r3f={type:"",root:null,previousAttach:null,memoizedProps:{},eventCount:0,handlers:{},objects:[],parent:null,...e}),n}function Gb(n,e){let t=n;if(e.includes("-")){const i=e.split("-"),s=i.pop();return t=i.reduce((r,o)=>r[o],n),{target:t,key:s}}else return{target:t,key:e}}const gw=/-\d+$/;function Gf(n,e,t){if(cn.str(t)){if(gw.test(t)){const r=t.replace(gw,""),{target:o,key:a}=Gb(n,r);Array.isArray(o[a])||(o[a]=[])}const{target:i,key:s}=Gb(n,t);e.__r3f.previousAttach=i[s],i[s]=e}else e.__r3f.previousAttach=t(n,e)}function cw(n,e,t){var i,s;if(cn.str(t)){const{target:r,key:o}=Gb(n,t),a=e.__r3f.previousAttach;a===void 0?delete r[o]:r[o]=a}else(i=e.__r3f)==null||i.previousAttach==null||i.previousAttach(n,e);(s=e.__r3f)==null||delete s.previousAttach}function AV(n,{children:e,key:t,ref:i,...s},{children:r,key:o,ref:a,...l}={},c=!1){var u;const C=(u=n?.__r3f)!=null?u:{},d=Object.entries(s),h=[];if(c){const y=Object.keys(l);for(let v=0;v{var A;if((A=n.__r3f)!=null&&A.primitive&&y==="object"||cn.equ(v,l[y]))return;if(/^on(Pointer|Click|DoubleClick|ContextMenu|Wheel)/.test(y))return h.push([y,v,!0,[]]);let b=[];y.includes("-")&&(b=y.split("-")),h.push([y,v,!1,b]);for(const f in s){const B=s[f];f.startsWith(`${y}-`)&&h.push([f,B,!1,f.split("-")])}});const m={...s};return C.memoizedProps&&C.memoizedProps.args&&(m.args=C.memoizedProps.args),C.memoizedProps&&C.memoizedProps.attach&&(m.attach=C.memoizedProps.attach),{memoized:m,changes:h}}function Bf(n,e){var t,i,s;const r=(t=n.__r3f)!=null?t:{},o=r.root,a=(i=o==null||o.getState==null?void 0:o.getState())!=null?i:{},{memoized:l,changes:c}=jT(e)?e:AV(n,e),u=r.eventCount;n.__r3f&&(n.__r3f.memoizedProps=l);for(let d=0;df[B],n),!(b&&b.set))){const[f,...B]=v.reverse();A=B.reverse().reduce((S,x)=>S[x],n),h=f}if(m===dV+"remove")if(A.constructor){let f=lw.get(A.constructor);f||(f=new A.constructor,lw.set(A.constructor,f)),m=f[h]}else m=0;if(y)m?r.handlers[h]=m:delete r.handlers[h],r.eventCount=Object.keys(r.handlers).length;else if(b&&b.set&&(b.copy||b instanceof Al)){if(Array.isArray(m))b.fromArray?b.fromArray(m):b.set(...m);else if(b.copy&&m&&m.constructor&&b.constructor===m.constructor)b.copy(m);else if(m!==void 0){const f=b instanceof Ne;!f&&b.setScalar?b.setScalar(m):b instanceof Al&&m instanceof Al?b.mask=m.mask:b.set(m),!cV()&&!a.linear&&f&&b.convertSRGBToLinear()}}else if(A[h]=m,A[h]instanceof en&&A[h].format===hn&&A[h].type===ln){const f=A[h];vf(f)&&vf(a.gl)?f.colorSpace=a.gl.outputColorSpace:f.encoding=a.gl.outputEncoding}Zg(n)}if(r.parent&&a.internal&&n.raycast&&u!==r.eventCount){const d=a.internal.interaction.indexOf(n);d>-1&&a.internal.interaction.splice(d,1),r.eventCount&&a.internal.interaction.push(n)}return!(c.length===1&&c[0][0]==="onUpdate")&&c.length&&(s=n.__r3f)!=null&&s.parent&&Bb(n),n}function Zg(n){var e,t;const i=(e=n.__r3f)==null||(t=e.root)==null||t.getState==null?void 0:t.getState();i&&i.internal.frames===0&&i.invalidate()}function Bb(n){n.onUpdate==null||n.onUpdate(n)}function pV(n,e){n.manual||(IV(n)?(n.left=e.width/-2,n.right=e.width/2,n.top=e.height/2,n.bottom=e.height/-2):n.aspect=e.width/e.height,n.updateProjectionMatrix(),n.updateMatrixWorld())}function gh(n){return(n.eventObject||n.object).uuid+"/"+n.index+n.instanceId}function eE(){var n;const e=typeof self<"u"&&self||typeof window<"u"&&window;if(!e)return Eg.DefaultEventPriority;switch((n=e.event)==null?void 0:n.type){case"click":case"contextmenu":case"dblclick":case"pointercancel":case"pointerdown":case"pointerup":return Eg.DiscreteEventPriority;case"pointermove":case"pointerout":case"pointerover":case"pointerenter":case"pointerleave":case"wheel":return Eg.ContinuousEventPriority;default:return Eg.DefaultEventPriority}}function mV(n,e,t,i){const s=t.get(e);s&&(t.delete(e),t.size===0&&(n.delete(i),s.target.releasePointerCapture(i)))}function tE(n,e){const{internal:t}=n.getState();t.interaction=t.interaction.filter(i=>i!==e),t.initialHits=t.initialHits.filter(i=>i!==e),t.hovered.forEach((i,s)=>{(i.eventObject===e||i.object===e)&&t.hovered.delete(s)}),t.capturedMap.forEach((i,s)=>{mV(t.capturedMap,e,i,s)})}function nE(n){function e(l){const{internal:c}=n.getState(),u=l.offsetX-c.initialClick[0],C=l.offsetY-c.initialClick[1];return Math.round(Math.sqrt(u*u+C*C))}function t(l){return l.filter(c=>["Move","Over","Enter","Out","Leave"].some(u=>{var C;return(C=c.__r3f)==null?void 0:C.handlers["onPointer"+u]}))}function i(l,c){const u=n.getState(),C=new Set,d=[],h=c?c(u.internal.interaction):u.internal.interaction;for(let A=0;A{const f=hI(A.object),B=hI(b.object);return!f||!B?A.distance-b.distance:B.events.priority-f.events.priority||A.distance-b.distance}).filter(A=>{const b=gh(A);return C.has(b)?!1:(C.add(b),!0)});u.events.filter&&(y=u.events.filter(y,u));for(const A of y){let b=A.object;for(;b;){var v;(v=b.__r3f)!=null&&v.eventCount&&d.push({...A,eventObject:b}),b=b.parent}}if("pointerId"in l&&u.internal.capturedMap.has(l.pointerId))for(let A of u.internal.capturedMap.get(l.pointerId).values())C.has(gh(A.intersection))||d.push(A.intersection);return d}function s(l,c,u,C){const d=n.getState();if(l.length){const h={stopped:!1};for(const m of l){const y=hI(m.object)||d,{raycaster:v,pointer:A,camera:b,internal:f}=y,B=new X(A.x,A.y,0).unproject(b),S=M=>{var H,U;return(H=(U=f.capturedMap.get(M))==null?void 0:U.has(m.eventObject))!=null?H:!1},x=M=>{const H={intersection:m,target:c.target};f.capturedMap.has(M)?f.capturedMap.get(M).set(m.eventObject,H):f.capturedMap.set(M,new Map([[m.eventObject,H]])),c.target.setPointerCapture(M)},R=M=>{const H=f.capturedMap.get(M);H&&mV(f.capturedMap,m.eventObject,H,M)};let V={};for(let M in c){let H=c[M];typeof H!="function"&&(V[M]=H)}let Z={...m,...V,pointer:A,intersections:l,stopped:h.stopped,delta:u,unprojectedPoint:B,ray:v.ray,camera:b,stopPropagation(){const M="pointerId"in c&&f.capturedMap.get(c.pointerId);if((!M||M.has(m.eventObject))&&(Z.stopped=h.stopped=!0,f.hovered.size&&Array.from(f.hovered.values()).find(H=>H.eventObject===m.eventObject))){const H=l.slice(0,l.indexOf(m));r([...H,m])}},target:{hasPointerCapture:S,setPointerCapture:x,releasePointerCapture:R},currentTarget:{hasPointerCapture:S,setPointerCapture:x,releasePointerCapture:R},nativeEvent:c};if(C(Z),h.stopped===!0)break}}return l}function r(l){const{internal:c}=n.getState();for(const u of c.hovered.values())if(!l.length||!l.find(C=>C.object===u.object&&C.index===u.index&&C.instanceId===u.instanceId)){const d=u.eventObject.__r3f,h=d?.handlers;if(c.hovered.delete(gh(u)),d!=null&&d.eventCount){const m={...u,intersections:l};h.onPointerOut==null||h.onPointerOut(m),h.onPointerLeave==null||h.onPointerLeave(m)}}}function o(l,c){for(let u=0;ur([]);case"onLostPointerCapture":return c=>{const{internal:u}=n.getState();"pointerId"in c&&u.capturedMap.has(c.pointerId)&&requestAnimationFrame(()=>{u.capturedMap.has(c.pointerId)&&(u.capturedMap.delete(c.pointerId),r([]))})}}return function(u){const{onPointerMissed:C,internal:d}=n.getState();d.lastEvent.current=u;const h=l==="onPointerMove",m=l==="onClick"||l==="onContextMenu"||l==="onDoubleClick",v=i(u,h?t:void 0),A=m?e(u):0;l==="onPointerDown"&&(d.initialClick=[u.offsetX,u.offsetY],d.initialHits=v.map(f=>f.eventObject)),m&&!v.length&&A<=2&&(o(u,d.interaction),C&&C(u)),h&&r(v);function b(f){const B=f.eventObject,S=B.__r3f,x=S?.handlers;if(S!=null&&S.eventCount)if(h){if(x.onPointerOver||x.onPointerEnter||x.onPointerOut||x.onPointerLeave){const R=gh(f),V=d.hovered.get(R);V?V.stopped&&f.stopPropagation():(d.hovered.set(R,f),x.onPointerOver==null||x.onPointerOver(f),x.onPointerEnter==null||x.onPointerEnter(f))}x.onPointerMove==null||x.onPointerMove(f)}else{const R=x[l];R?(!m||d.initialHits.includes(B))&&(o(u,d.interaction.filter(V=>!d.initialHits.includes(V))),R(f)):m&&d.initialHits.includes(B)&&o(u,d.interaction.filter(V=>!d.initialHits.includes(V)))}}s(v,u,A,b)}}return{handlePointer:a}}const iE=["set","get","setSize","setFrameloop","setDpr","events","invalidate","advance","size","viewport"],fV=n=>!!(n!=null&&n.render),Gv=E.createContext(null),sE=(n,e)=>{const t=iV((a,l)=>{const c=new X,u=new X,C=new X;function d(A=l().camera,b=u,f=l().size){const{width:B,height:S,top:x,left:R}=f,V=B/S;b instanceof X?C.copy(b):C.set(...b);const Z=A.getWorldPosition(c).distanceTo(C);if(IV(A))return{width:B/A.zoom,height:S/A.zoom,top:x,left:R,factor:1,distance:Z,aspect:V};{const M=A.fov*Math.PI/180,H=2*Math.tan(M/2)*Z,U=H*(B/S);return{width:U,height:H,top:x,left:R,factor:B/U,distance:Z,aspect:V}}}let h;const m=A=>a(b=>({performance:{...b.performance,current:A}})),y=new ne;return{set:a,get:l,gl:null,camera:null,raycaster:null,events:{priority:1,enabled:!0,connected:!1},xr:null,scene:null,invalidate:(A=1)=>n(l(),A),advance:(A,b)=>e(A,b,l()),legacy:!1,linear:!1,flat:!1,controls:null,clock:new mv,pointer:y,mouse:y,frameloop:"always",onPointerMissed:void 0,performance:{current:1,min:.5,max:1,debounce:200,regress:()=>{const A=l();h&&clearTimeout(h),A.performance.current!==A.performance.min&&m(A.performance.min),h=setTimeout(()=>m(l().performance.max),A.performance.debounce)}},size:{width:0,height:0,top:0,left:0,updateStyle:!1},viewport:{initialDpr:0,dpr:0,width:0,height:0,top:0,left:0,aspect:0,distance:0,factor:0,getCurrentViewport:d},setEvents:A=>a(b=>({...b,events:{...b.events,...A}})),setSize:(A,b,f,B,S)=>{const x=l().camera,R={width:A,height:b,top:B||0,left:S||0,updateStyle:f};a(V=>({size:R,viewport:{...V.viewport,...d(x,u,R)}}))},setDpr:A=>a(b=>{const f=hV(A);return{viewport:{...b.viewport,dpr:f,initialDpr:b.viewport.initialDpr||f}}}),setFrameloop:(A="always")=>{const b=l().clock;b.stop(),b.elapsedTime=0,A!=="never"&&(b.start(),b.elapsedTime=0),a(()=>({frameloop:A}))},previousRoot:void 0,internal:{active:!1,priority:0,frames:0,lastEvent:E.createRef(),interaction:[],hovered:new Map,subscribers:[],initialClick:[0,0],initialHits:[],capturedMap:new Map,subscribe:(A,b,f)=>{const B=l().internal;return B.priority=B.priority+(b>0?1:0),B.subscribers.push({ref:A,priority:b,store:f}),B.subscribers=B.subscribers.sort((S,x)=>S.priority-x.priority),()=>{const S=l().internal;S!=null&&S.subscribers&&(S.priority=S.priority-(b>0?1:0),S.subscribers=S.subscribers.filter(x=>x.ref!==A))}}}}}),i=t.getState();let s=i.size,r=i.viewport.dpr,o=i.camera;return t.subscribe(()=>{const{camera:a,size:l,viewport:c,gl:u,set:C}=t.getState();if(l!==s||c.dpr!==r){var d;s=l,r=c.dpr,pV(a,l),u.setPixelRatio(c.dpr);const h=(d=l.updateStyle)!=null?d:typeof HTMLCanvasElement<"u"&&u.domElement instanceof HTMLCanvasElement;u.setSize(l.width,l.height,h)}a!==o&&(o=a,C(h=>({viewport:{...h.viewport,...h.viewport.getCurrentViewport(a)}})))}),t.subscribe(a=>n(a)),t};let ch,rE=new Set,oE=new Set,aE=new Set;function Zf(n,e){if(n.size)for(const{callback:t}of n.values())t(e)}function AI(n,e){switch(n){case"before":return Zf(rE,e);case"after":return Zf(oE,e);case"tail":return Zf(aE,e)}}let wf,Sf;function xf(n,e,t){let i=e.clock.getDelta();for(e.frameloop==="never"&&typeof n=="number"&&(i=n-e.clock.elapsedTime,e.clock.oldTime=e.clock.elapsedTime,e.clock.elapsedTime=n),wf=e.internal.subscribers,ch=0;ch0)&&!((c=s.gl.xr)!=null&&c.isPresenting)&&(t+=xf(l,s))}if(AI("after",l),t===0)return AI("tail",l),e=!1,cancelAnimationFrame(i)}function o(l,c=1){var u;if(!l)return n.forEach(C=>o(C.store.getState()),c);(u=l.gl.xr)!=null&&u.isPresenting||!l.internal.active||l.frameloop==="never"||(l.internal.frames=Math.min(60,l.internal.frames+c),e||(e=!0,requestAnimationFrame(r)))}function a(l,c=!0,u,C){if(c&&AI("before",l),u)xf(l,u,C);else for(const d of n.values())xf(l,d.store.getState());c&&AI("after",l)}return{loop:r,invalidate:o,advance:a}}function gE(n){const e=E.useRef(null);return Sc(()=>void(e.current=n.current.__r3f),[n]),e}function Bv(){const n=E.useContext(Gv);if(!n)throw new Error("R3F: Hooks can only be used within the Canvas component!");return n}function Zn(n=t=>t,e){return Bv()(n,e)}function Fl(n,e=0){const t=Bv(),i=t.getState().internal.subscribe,s=uV(n);return Sc(()=>i(s,e,t),[e,i,t]),null}function bV(n,e){return function(t,...i){const s=new t;return n&&n(s),Promise.all(i.map(r=>new Promise((o,a)=>s.load(r,l=>{l.scene&&Object.assign(l,qT(l.scene)),o(l)},e,l=>a(new Error(`Could not load ${r}: ${l.message})`))))))}}function Zv(n,e,t,i){const s=Array.isArray(e)?e:[e],r=UT(bV(t,i),[n,...s],{equal:cn.equ});return Array.isArray(e)?r:r[0]}Zv.preload=function(n,e,t){const i=Array.isArray(e)?e:[e];return PT(bV(t),[n,...i])};Zv.clear=function(n,e){const t=Array.isArray(e)?e:[e];return _T([n,...t])};const dc=new Map,{invalidate:Iw,advance:uw}=lE(dc),{reconciler:Fu,applyProps:ja}=JT(dc,eE),yg={objects:"shallow",strict:!1},cE=(n,e)=>{const t=typeof n=="function"?n(e):n;return fV(t)?t:new ev({powerPreference:"high-performance",canvas:e,antialias:!0,alpha:!0,...n})};function IE(n,e){if(e)return e;if(typeof HTMLCanvasElement<"u"&&n instanceof HTMLCanvasElement&&n.parentElement){const{width:t,height:i,top:s,left:r}=n.parentElement.getBoundingClientRect();return{width:t,height:i,top:s,left:r}}else if(typeof OffscreenCanvas<"u"&&n instanceof OffscreenCanvas)return{width:n.width,height:n.height,top:0,left:0};return{width:0,height:0,top:0,left:0}}function uE(n){const e=dc.get(n),t=e?.fiber,i=e?.store;e&&console.warn("R3F.createRoot should only be called once!");const s=typeof reportError=="function"?reportError:console.error,r=i||sE(Iw,uw),o=t||Fu.createContainer(r,Eg.ConcurrentRoot,null,!1,null,"",s,null);e||dc.set(n,{fiber:o,store:r});let a,l=!1,c;return{configure(u={}){let{gl:C,size:d,scene:h,events:m,onCreated:y,shadows:v=!1,linear:A=!1,flat:b=!1,legacy:f=!1,orthographic:B=!1,frameloop:S="always",dpr:x=[1,2],performance:R,raycaster:V,camera:Z,onPointerMissed:M}=u,H=r.getState(),U=H.gl;H.gl||H.set({gl:U=cE(C,n)});let D=H.raycaster;D||H.set({raycaster:D=new yv});const{params:q,...ie}=V||{};if(cn.equ(ie,D,yg)||ja(D,{...ie}),cn.equ(q,D.params,yg)||ja(D,{params:{...D.params,...q}}),!H.camera||H.camera===c&&!cn.equ(c,Z,yg)){c=Z;const ce=Z instanceof vc,ge=ce?Z:B?new uo(0,0,0,0,.1,1e3):new on(75,0,.1,1e3);ce||(ge.position.z=5,Z&&ja(ge,Z),!H.camera&&!(Z!=null&&Z.rotation)&&ge.lookAt(0,0,0)),H.set({camera:ge})}if(!H.scene){let ce;h instanceof Gl?ce=h:(ce=new Gl,h&&ja(ce,h)),H.set({scene:Bg(ce)})}if(!H.xr){const ce=(re,Ze)=>{const we=r.getState();we.frameloop!=="never"&&uw(re,!0,we,Ze)},ge=()=>{const re=r.getState();re.gl.xr.enabled=re.gl.xr.isPresenting,re.gl.xr.setAnimationLoop(re.gl.xr.isPresenting?ce:null),re.gl.xr.isPresenting||Iw(re)},te={connect(){const re=r.getState().gl;re.xr.addEventListener("sessionstart",ge),re.xr.addEventListener("sessionend",ge)},disconnect(){const re=r.getState().gl;re.xr.removeEventListener("sessionstart",ge),re.xr.removeEventListener("sessionend",ge)}};U.xr&&te.connect(),H.set({xr:te})}if(U.shadowMap){const ce=U.shadowMap.enabled,ge=U.shadowMap.type;if(U.shadowMap.enabled=!!v,cn.boo(v))U.shadowMap.type=DI;else if(cn.str(v)){var ue;const te={basic:u1,percentage:kA,soft:DI,variance:rr};U.shadowMap.type=(ue=te[v])!=null?ue:DI}else cn.obj(v)&&Object.assign(U.shadowMap,v);(ce!==U.shadowMap.enabled||ge!==U.shadowMap.type)&&(U.shadowMap.needsUpdate=!0)}const le=cV();le&&("enabled"in le?le.enabled=!f:"legacyMode"in le&&(le.legacyMode=f)),ja(U,{outputEncoding:A?3e3:3001,toneMapping:b?Ir:Ly}),H.legacy!==f&&H.set(()=>({legacy:f})),H.linear!==A&&H.set(()=>({linear:A})),H.flat!==b&&H.set(()=>({flat:b})),C&&!cn.fun(C)&&!fV(C)&&!cn.equ(C,U,yg)&&ja(U,C),m&&!H.events.handlers&&H.set({events:m(r)});const O=IE(n,d);return cn.equ(O,H.size,yg)||H.setSize(O.width,O.height,O.updateStyle,O.top,O.left),x&&H.viewport.dpr!==hV(x)&&H.setDpr(x),H.frameloop!==S&&H.setFrameloop(S),H.onPointerMissed||H.set({onPointerMissed:M}),R&&!cn.equ(R,H.performance,yg)&&H.set(ce=>({performance:{...ce.performance,...R}})),a=y,l=!0,this},render(u){return l||this.configure(),Fu.updateContainer(E.createElement(CE,{store:r,children:u,onCreated:a,rootElement:n}),o,null,()=>{}),r},unmount(){yV(n)}}}function CE({store:n,children:e,onCreated:t,rootElement:i}){return Sc(()=>{const s=n.getState();s.set(r=>({internal:{...r.internal,active:!0}})),t&&t(s),n.getState().events.connected||s.events.connect==null||s.events.connect(i)},[]),E.createElement(Gv.Provider,{value:n},e)}function yV(n,e){const t=dc.get(n),i=t?.fiber;if(i){const s=t?.store.getState();s&&(s.internal.active=!1),Fu.updateContainer(null,i,null,()=>{s&&setTimeout(()=>{try{var r,o,a,l;s.events.disconnect==null||s.events.disconnect(),(r=s.gl)==null||(o=r.renderLists)==null||o.dispose==null||o.dispose(),(a=s.gl)==null||a.forceContextLoss==null||a.forceContextLoss(),(l=s.gl)!=null&&l.xr&&s.xr.disconnect(),$T(s),dc.delete(n),e&&e(n)}catch{}},500)})}}function dE(n,e,t){return E.createElement(hE,{key:e.uuid,children:n,container:e,state:t})}function hE({state:n={},children:e,container:t}){const{events:i,size:s,...r}=n,o=Bv(),[a]=E.useState(()=>new yv),[l]=E.useState(()=>new ne),c=E.useCallback((C,d)=>{const h={...C};Object.keys(C).forEach(y=>{(iE.includes(y)||C[y]!==d[y]&&d[y])&&delete h[y]});let m;if(d&&s){const y=d.camera;m=C.viewport.getCurrentViewport(y,new X,s),y!==C.camera&&pV(y,s)}return{...h,scene:t,raycaster:a,pointer:l,mouse:l,previousRoot:o,events:{...C.events,...d?.events,...i},size:{...C.size,...s},viewport:{...C.viewport,...m},...r}},[n]),[u]=E.useState(()=>{const C=o.getState();return iV((h,m)=>({...C,scene:t,raycaster:a,pointer:l,mouse:l,previousRoot:o,events:{...C.events,...i},size:{...C.size,...s},...r,set:h,get:m,setEvents:y=>h(v=>({...v,events:{...v.events,...y}}))}))});return E.useEffect(()=>{const C=o.subscribe(d=>u.setState(h=>c(d,h)));return()=>{C(),u.destroy()}},[]),E.useEffect(()=>{u.setState(C=>c(o.getState(),C))},[c]),E.createElement(E.Fragment,null,Fu.createPortal(E.createElement(Gv.Provider,{value:u},e),u,null))}Fu.injectIntoDevTools({bundleType:0,rendererPackageName:"@react-three/fiber",version:E.version});function Ku(){return Ku=Object.assign?Object.assign.bind():function(n){for(var e=1;e=0?i=setTimeout(l,e-u):(i=null,t||(a=n.apply(r,s),r=s=null))}var c=function(){r=this,s=arguments,o=Date.now();var u=t&&!i;return i||(i=setTimeout(l,e)),u&&(a=n.apply(r,s),r=s=null),a};return c.clear=function(){i&&(clearTimeout(i),i=null)},c.flush=function(){i&&(a=n.apply(r,s),r=s=null,clearTimeout(i),i=null)},c}Zb.debounce=Zb;var AE=Zb;const Cw=Xb(AE);function pE(n){let{debounce:e,scroll:t,polyfill:i,offsetSize:s}=n===void 0?{debounce:0,scroll:!1,offsetSize:!1}:n;const r=i||(typeof window>"u"?class{}:window.ResizeObserver);if(!r)throw new Error("This browser does not support ResizeObserver out of the box. See: https://github.com/react-spring/react-use-measure/#resize-observer-polyfills");const[o,a]=E.useState({left:0,top:0,width:0,height:0,bottom:0,right:0,x:0,y:0}),l=E.useRef({element:null,scrollContainers:null,resizeObserver:null,lastBounds:o}),c=e?typeof e=="number"?e:e.scroll:null,u=e?typeof e=="number"?e:e.resize:null,C=E.useRef(!1);E.useEffect(()=>(C.current=!0,()=>void(C.current=!1)));const[d,h,m]=E.useMemo(()=>{const b=()=>{if(!l.current.element)return;const{left:f,top:B,width:S,height:x,bottom:R,right:V,x:Z,y:M}=l.current.element.getBoundingClientRect(),H={left:f,top:B,width:S,height:x,bottom:R,right:V,x:Z,y:M};l.current.element instanceof HTMLElement&&s&&(H.height=l.current.element.offsetHeight,H.width=l.current.element.offsetWidth),Object.freeze(H),C.current&&!yE(l.current.lastBounds,H)&&a(l.current.lastBounds=H)};return[b,u?Cw(b,u):b,c?Cw(b,c):b]},[a,s,c,u]);function y(){l.current.scrollContainers&&(l.current.scrollContainers.forEach(b=>b.removeEventListener("scroll",m,!0)),l.current.scrollContainers=null),l.current.resizeObserver&&(l.current.resizeObserver.disconnect(),l.current.resizeObserver=null)}function v(){l.current.element&&(l.current.resizeObserver=new r(m),l.current.resizeObserver.observe(l.current.element),t&&l.current.scrollContainers&&l.current.scrollContainers.forEach(b=>b.addEventListener("scroll",m,{capture:!0,passive:!0})))}const A=b=>{!b||b===l.current.element||(y(),l.current.element=b,l.current.scrollContainers=vV(b),v())};return fE(m,!!t),mE(h),E.useEffect(()=>{y(),v()},[t,m,h]),E.useEffect(()=>y,[]),[A,o,d]}function mE(n){E.useEffect(()=>{const e=n;return window.addEventListener("resize",e),()=>void window.removeEventListener("resize",e)},[n])}function fE(n,e){E.useEffect(()=>{if(e){const t=n;return window.addEventListener("scroll",t,{capture:!0,passive:!0}),()=>void window.removeEventListener("scroll",t,!0)}},[n,e])}function vV(n){const e=[];if(!n||n===document.body)return e;const{overflow:t,overflowX:i,overflowY:s}=window.getComputedStyle(n);return[t,i,s].some(r=>r==="auto"||r==="scroll")&&e.push(n),[...e,...vV(n.parentElement)]}const bE=["x","y","top","bottom","left","right","width","height"],yE=(n,e)=>bE.every(t=>n[t]===e[t]);var vE=Object.defineProperty,GE=Object.defineProperties,BE=Object.getOwnPropertyDescriptors,dw=Object.getOwnPropertySymbols,ZE=Object.prototype.hasOwnProperty,wE=Object.prototype.propertyIsEnumerable,hw=(n,e,t)=>e in n?vE(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,Aw=(n,e)=>{for(var t in e||(e={}))ZE.call(e,t)&&hw(n,t,e[t]);if(dw)for(var t of dw(e))wE.call(e,t)&&hw(n,t,e[t]);return n},SE=(n,e)=>GE(n,BE(e));function GV(n,e,t){if(!n)return;if(t(n)===!0)return n;let i=e?n.return:n.child;for(;i;){const s=GV(i,e,t);if(s)return s;i=e?null:i.sibling}}function BV(n){try{return Object.defineProperties(n,{_currentRenderer:{get(){return null},set(){}},_currentRenderer2:{get(){return null},set(){}}})}catch{return n}}const wv=BV(E.createContext(null));class ZV extends E.Component{render(){return E.createElement(wv.Provider,{value:this._reactInternals},this.props.children)}}const{ReactCurrentOwner:pw,ReactCurrentDispatcher:mw}=E.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;function xE(){const n=E.useContext(wv);if(n===null)throw new Error("its-fine: useFiber must be called within a !");const e=E.useId();return E.useMemo(()=>{for(const i of[pw?.current,n,n?.alternate]){if(!i)continue;const s=GV(i,!1,r=>{let o=r.memoizedState;for(;o;){if(o.memoizedState===e)return!0;o=o.next}});if(s)return s}},[n,e])}function RE(){var n,e;const t=xE(),[i]=E.useState(()=>new Map);i.clear();let s=t;for(;s;){const r=(n=s.type)==null?void 0:n._context;r&&r!==wv&&!i.has(r)&&i.set(r,(e=mw?.current)==null?void 0:e.readContext(BV(r))),s=s.return}return i}function WE(){const n=RE();return E.useMemo(()=>Array.from(n.keys()).reduce((e,t)=>i=>E.createElement(e,null,E.createElement(t.Provider,SE(Aw({},i),{value:n.get(t)}))),e=>E.createElement(ZV,Aw({},e))),[n])}const Rf={onClick:["click",!1],onContextMenu:["contextmenu",!1],onDoubleClick:["dblclick",!1],onWheel:["wheel",!0],onPointerDown:["pointerdown",!0],onPointerUp:["pointerup",!0],onPointerLeave:["pointerleave",!0],onPointerMove:["pointermove",!0],onPointerCancel:["pointercancel",!0],onLostPointerCapture:["lostpointercapture",!0]};function VE(n){const{handlePointer:e}=nE(n);return{priority:1,enabled:!0,compute(t,i,s){i.pointer.set(t.offsetX/i.size.width*2-1,-(t.offsetY/i.size.height)*2+1),i.raycaster.setFromCamera(i.pointer,i.camera)},connected:void 0,handlers:Object.keys(Rf).reduce((t,i)=>({...t,[i]:e(i)}),{}),update:()=>{var t;const{events:i,internal:s}=n.getState();(t=s.lastEvent)!=null&&t.current&&i.handlers&&i.handlers.onPointerMove(s.lastEvent.current)},connect:t=>{var i;const{set:s,events:r}=n.getState();r.disconnect==null||r.disconnect(),s(o=>({events:{...o.events,connected:t}})),Object.entries((i=r.handlers)!=null?i:[]).forEach(([o,a])=>{const[l,c]=Rf[o];t.addEventListener(l,a,{passive:c})})},disconnect:()=>{const{set:t,events:i}=n.getState();if(i.connected){var s;Object.entries((s=i.handlers)!=null?s:[]).forEach(([r,o])=>{if(i&&i.connected instanceof HTMLElement){const[a]=Rf[r];i.connected.removeEventListener(a,o)}}),t(r=>({events:{...r.events,connected:void 0}}))}}}}const ME=E.forwardRef(function({children:e,fallback:t,resize:i,style:s,gl:r,events:o=VE,eventSource:a,eventPrefix:l,shadows:c,linear:u,flat:C,legacy:d,orthographic:h,frameloop:m,dpr:y,performance:v,raycaster:A,camera:b,onPointerMissed:f,onCreated:B,...S},x){E.useMemo(()=>gV(zT),[]);const R=WE(),[V,Z]=pE({scroll:!0,debounce:{scroll:50,resize:0},...i}),M=E.useRef(null),H=E.useRef(null);E.useImperativeHandle(x,()=>M.current);const U=uV(f),[D,q]=E.useState(!1),[ie,ue]=E.useState(!1);if(D)throw D;if(ie)throw ie;const le=E.useRef(null);Sc(()=>{const P=M.current;Z.width>0&&Z.height>0&&P&&(le.current||(le.current=uE(P)),le.current.configure({gl:r,events:o,shadows:c,linear:u,flat:C,legacy:d,orthographic:h,frameloop:m,dpr:y,performance:v,raycaster:A,camera:b,size:Z,onPointerMissed:(...O)=>U.current==null?void 0:U.current(...O),onCreated:O=>{O.events.connect==null||O.events.connect(a?OT(a)?a.current:a:H.current),l&&O.setEvents({compute:(ce,ge)=>{const te=ce[l+"X"],re=ce[l+"Y"];ge.pointer.set(te/ge.size.width*2-1,-(re/ge.size.height)*2+1),ge.raycaster.setFromCamera(ge.pointer,ge.camera)}}),B?.(O)}}),le.current.render(E.createElement(R,null,E.createElement(CV,{set:ue},E.createElement(E.Suspense,{fallback:E.createElement(QT,{set:q})},e)))))}),E.useEffect(()=>{const P=M.current;if(P)return()=>yV(P)},[]);const L=a?"none":"auto";return E.createElement("div",Ku({ref:H,style:{position:"relative",width:"100%",height:"100%",overflow:"hidden",pointerEvents:L,...s}},S),E.createElement("div",{ref:V,style:{width:"100%",height:"100%"}},E.createElement("canvas",{ref:M,style:{display:"block"}},t)))}),NE=E.forwardRef(function(e,t){return E.createElement(ZV,null,E.createElement(ME,Ku({},e,{ref:t})))});function QI(n,e,t){return e in n?Object.defineProperty(n,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[e]=t,n}function wb(n,e){(e==null||e>n.length)&&(e=n.length);for(var t=0,i=new Array(e);tMath.PI&&(t-=Math.PI*2),t}function wV(n,e){if(!(n instanceof e))throw new TypeError("Cannot call a class as a function")}var Ms=function n(e,t,i){var s=this;wV(this,n),QI(this,"dot2",function(r,o){return s.x*r+s.y*o}),QI(this,"dot3",function(r,o,a){return s.x*r+s.y*o+s.z*a}),this.x=e,this.y=t,this.z=i},EE=[new Ms(1,1,0),new Ms(-1,1,0),new Ms(1,-1,0),new Ms(-1,-1,0),new Ms(1,0,1),new Ms(-1,0,1),new Ms(1,0,-1),new Ms(-1,0,-1),new Ms(0,1,1),new Ms(0,-1,1),new Ms(0,1,-1),new Ms(0,-1,-1)],fw=[151,160,137,91,90,15,131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23,190,6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,88,237,149,56,87,174,20,125,136,171,168,68,175,74,165,71,134,139,48,27,166,77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244,102,143,54,65,25,63,161,1,216,80,73,209,76,132,187,208,89,18,169,200,196,135,130,116,188,159,86,164,100,109,198,173,186,3,64,52,217,226,250,124,123,5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42,223,183,170,213,119,248,152,2,44,154,163,70,221,153,101,155,167,43,172,9,129,22,39,253,19,98,108,110,79,113,224,232,178,185,112,104,218,246,97,228,251,34,242,193,238,210,144,12,191,179,162,241,81,51,145,235,249,14,239,107,49,192,214,31,181,199,106,157,184,84,204,176,115,121,50,45,127,4,150,254,138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180],bw=new Array(512),yw=new Array(512),kE=function(e){e>0&&e<1&&(e*=65536),e=Math.floor(e),e<256&&(e|=e<<8);for(var t=0;t<256;t++){var i;t&1?i=fw[t]^e&255:i=fw[t]^e>>8&255,bw[t]=bw[t+256]=i,yw[t]=yw[t+256]=EE[i%12]}};kE(0);function DE(n){if(typeof n=="number")n=Math.abs(n);else if(typeof n=="string"){var e=n;n=0;for(var t=0;t1&&arguments[1]!==void 0?arguments[1]:.01,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:1/(2*Math.PI);return i/Math.atan(1/t)*Math.atan(Math.sin(2*Math.PI*e*s)/t)},SV=function(e){return 1/(1+e+.48*e*e+.235*e*e*e)};function Pn(n,e,t){var i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:.25,s=arguments.length>4&&arguments[4]!==void 0?arguments[4]:.01,r=arguments.length>5&&arguments[5]!==void 0?arguments[5]:1/0,o=arguments.length>6&&arguments[6]!==void 0?arguments[6]:SV,a=arguments.length>7&&arguments[7]!==void 0?arguments[7]:.001,l="velocity_"+e;if(n.__damp===void 0&&(n.__damp={}),n.__damp[l]===void 0&&(n.__damp[l]=0),Math.abs(n[e]-t)<=a)return n[e]=t,!1;i=Math.max(1e-4,i);var c=2/i,u=o(c*s),C=n[e]-t,d=t,h=r*i;C=Math.min(Math.max(C,-h),h),t=n[e]-C;var m=(n.__damp[l]+c*C)*s;n.__damp[l]=(n.__damp[l]-c*m)*u;var y=t+(C+m)*u;return d-n[e]>0==y>d&&(y=d,n.__damp[l]=(y-d)/s),n[e]=y,!0}function ec(n,e,t,i,s,r,o,a){return Pn(n,e,n[e]+TE(n[e],t),i,s,r,o,a)}var pI=new ne,Gw,Bw;function _E(n,e,t,i,s,r,o){return typeof e=="number"?pI.setScalar(e):Array.isArray(e)?pI.set(e[0],e[1]):pI.copy(e),Gw=Pn(n,"x",pI.x,t,i,s,r,o),Bw=Pn(n,"y",pI.y,t,i,s,r,o),Gw||Bw}var vg=new X,Zw,ww,Sw;function Sb(n,e,t,i,s,r,o){return typeof e=="number"?vg.setScalar(e):Array.isArray(e)?vg.set(e[0],e[1],e[2]):vg.copy(e),Zw=Pn(n,"x",vg.x,t,i,s,r,o),ww=Pn(n,"y",vg.y,t,i,s,r,o),Sw=Pn(n,"z",vg.z,t,i,s,r,o),Zw||ww||Sw}var Ua=new Xt,xw,Rw,Ww,Vw;function JE(n,e,t,i,s,r,o){return typeof e=="number"?Ua.setScalar(e):Array.isArray(e)?Ua.set(e[0],e[1],e[2],e[3]):Ua.copy(e),xw=Pn(n,"x",Ua.x,t,i,s,r,o),Rw=Pn(n,"y",Ua.y,t,i,s,r,o),Ww=Pn(n,"z",Ua.z,t,i,s,r,o),Vw=Pn(n,"w",Ua.w,t,i,s,r,o),xw||Rw||Ww||Vw}var mI=new Vl,Mw,Nw,Hw;function OE(n,e,t,i,s,r,o){return Array.isArray(e)?mI.set(e[0],e[1],e[2],e[3]):mI.copy(e),Mw=ec(n,"x",mI.x,t,i,s,r,o),Nw=ec(n,"y",mI.y,t,i,s,r,o),Hw=ec(n,"z",mI.z,t,i,s,r,o),Mw||Nw||Hw}var Gg=new Ne,Xw,Yw,Fw;function QE(n,e,t,i,s,r,o){return e instanceof Ne?Gg.copy(e):Array.isArray(e)?Gg.setRGB(e[0],e[1],e[2]):Gg.set(e),Xw=Pn(n,"r",Gg.r,t,i,s,r,o),Yw=Pn(n,"g",Gg.g,t,i,s,r,o),Fw=Pn(n,"b",Gg.b,t,i,s,r,o),Xw||Yw||Fw}var tr=new bn,eo=new Xt,Kw=new Xt,fI=new Xt,zw,Lw,Tw,Ew;function xV(n,e,t,i,s,r,o){var a=n;Array.isArray(e)?tr.set(e[0],e[1],e[2],e[3]):tr.copy(e);var l=n.dot(tr)>0?1:-1;return tr.x*=l,tr.y*=l,tr.z*=l,tr.w*=l,zw=Pn(n,"x",tr.x,t,i,s,r,o),Lw=Pn(n,"y",tr.y,t,i,s,r,o),Tw=Pn(n,"z",tr.z,t,i,s,r,o),Ew=Pn(n,"w",tr.w,t,i,s,r,o),eo.set(n.x,n.y,n.z,n.w).normalize(),Kw.set(a.__damp.velocity_x,a.__damp.velocity_y,a.__damp.velocity_z,a.__damp.velocity_w),fI.copy(eo).multiplyScalar(Kw.dot(eo)/eo.dot(eo)),a.__damp.velocity_x-=fI.x,a.__damp.velocity_y-=fI.y,a.__damp.velocity_z-=fI.z,a.__damp.velocity_w-=fI.w,n.set(eo.x,eo.y,eo.z,eo.w),zw||Lw||Tw||Ew}var bI=new GA,kw,Dw,Uw;function jE(n,e,t,i,s,r,o){return Array.isArray(e)?bI.set(e[0],e[1],e[2]):bI.copy(e),kw=Pn(n,"radius",bI.radius,t,i,s,r,o),Dw=ec(n,"phi",bI.phi,t,i,s,r,o),Uw=ec(n,"theta",bI.theta,t,i,s,r,o),kw||Dw||Uw}var Ih=new Le,Pw=new X,_w=new bn,Jw=new X,Ow,Qw,jw;function qE(n,e,t,i,s,r,o){var a=n;return a.__damp===void 0&&(a.__damp={position:new X,rotation:new bn,scale:new X},n.decompose(a.__damp.position,a.__damp.rotation,a.__damp.scale)),Array.isArray(e)?Ih.set.apply(Ih,KE(e)):Ih.copy(e),Ih.decompose(Pw,_w,Jw),Ow=Sb(a.__damp.position,Pw,t,i,s,r,o),Qw=xV(a.__damp.rotation,_w,t,i,s,r,o),jw=Sb(a.__damp.scale,Jw,t,i,s,r,o),n.compose(a.__damp.position,a.__damp.rotation,a.__damp.scale),Ow||Qw||jw}var $E=Object.freeze({__proto__:null,rsqw:PE,exp:SV,damp:Pn,dampAngle:ec,damp2:_E,damp3:Sb,damp4:JE,dampE:OE,dampC:QE,dampQ:xV,dampS:jE,dampM:qE});let yI;function ek(){var n;if(yI!==void 0)return yI;try{let e;const t=document.createElement("canvas");return yI=!!(window.WebGL2RenderingContext&&(e=t.getContext("webgl2"))),e&&((n=e.getExtension("WEBGL_lose_context"))==null||n.loseContext()),yI}catch{return yI=!1}}var tk=Object.defineProperty,nk=(n,e,t)=>e in n?tk(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,At=(n,e,t)=>(nk(n,typeof e!="symbol"?e+"":e,t),t);const qw=(n,e)=>(n%e+e)%e;let ik=class extends bs{constructor(e,t){super(),At(this,"object"),At(this,"domElement"),At(this,"enabled",!0),At(this,"target",new X),At(this,"minDistance",0),At(this,"maxDistance",1/0),At(this,"minZoom",0),At(this,"maxZoom",1/0),At(this,"minPolarAngle",0),At(this,"maxPolarAngle",Math.PI),At(this,"minAzimuthAngle",-1/0),At(this,"maxAzimuthAngle",1/0),At(this,"enableDamping",!1),At(this,"dampingFactor",.05),At(this,"enableZoom",!0),At(this,"zoomSpeed",1),At(this,"enableRotate",!0),At(this,"rotateSpeed",1),At(this,"enablePan",!0),At(this,"panSpeed",1),At(this,"screenSpacePanning",!0),At(this,"keyPanSpeed",7),At(this,"autoRotate",!1),At(this,"autoRotateSpeed",2),At(this,"reverseOrbit",!1),At(this,"keys",{LEFT:"ArrowLeft",UP:"ArrowUp",RIGHT:"ArrowRight",BOTTOM:"ArrowDown"}),At(this,"mouseButtons",{LEFT:Ja.ROTATE,MIDDLE:Ja.DOLLY,RIGHT:Ja.PAN}),At(this,"touches",{ONE:Oa.ROTATE,TWO:Oa.DOLLY_PAN}),At(this,"target0"),At(this,"position0"),At(this,"zoom0"),At(this,"_domElementKeyEvents",null),At(this,"getPolarAngle"),At(this,"getAzimuthalAngle"),At(this,"setPolarAngle"),At(this,"setAzimuthalAngle"),At(this,"getDistance"),At(this,"listenToKeyEvents"),At(this,"saveState"),At(this,"reset"),At(this,"update"),At(this,"connect"),At(this,"dispose"),this.object=e,this.domElement=t,this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this.getPolarAngle=()=>u.phi,this.getAzimuthalAngle=()=>u.theta,this.setPolarAngle=_=>{let pe=qw(_,2*Math.PI),ve=u.phi;ve<0&&(ve+=2*Math.PI),pe<0&&(pe+=2*Math.PI);let Me=Math.abs(pe-ve);2*Math.PI-Me{let pe=qw(_,2*Math.PI),ve=u.theta;ve<0&&(ve+=2*Math.PI),pe<0&&(pe+=2*Math.PI);let Me=Math.abs(pe-ve);2*Math.PI-Mei.object.position.distanceTo(i.target),this.listenToKeyEvents=_=>{_.addEventListener("keydown",Ie),this._domElementKeyEvents=_},this.saveState=()=>{i.target0.copy(i.target),i.position0.copy(i.object.position),i.zoom0=i.object.zoom},this.reset=()=>{i.target.copy(i.target0),i.object.position.copy(i.position0),i.object.zoom=i.zoom0,i.object.updateProjectionMatrix(),i.dispatchEvent(s),i.update(),l=a.NONE},this.update=(()=>{const _=new X,pe=new bn().setFromUnitVectors(e.up,new X(0,1,0)),ve=pe.clone().invert(),Me=new X,ot=new bn,bt=2*Math.PI;return function(){const Q=i.object.position;_.copy(Q).sub(i.target),_.applyQuaternion(pe),u.setFromVector3(_),i.autoRotate&&l===a.NONE&&U(M()),i.enableDamping?(u.theta+=C.theta*i.dampingFactor,u.phi+=C.phi*i.dampingFactor):(u.theta+=C.theta,u.phi+=C.phi);let he=i.minAzimuthAngle,Ge=i.maxAzimuthAngle;return isFinite(he)&&isFinite(Ge)&&(he<-Math.PI?he+=bt:he>Math.PI&&(he-=bt),Ge<-Math.PI?Ge+=bt:Ge>Math.PI&&(Ge-=bt),he<=Ge?u.theta=Math.max(he,Math.min(Ge,u.theta)):u.theta=u.theta>(he+Ge)/2?Math.max(he,u.theta):Math.min(Ge,u.theta)),u.phi=Math.max(i.minPolarAngle,Math.min(i.maxPolarAngle,u.phi)),u.makeSafe(),u.radius*=d,u.radius=Math.max(i.minDistance,Math.min(i.maxDistance,u.radius)),i.enableDamping===!0?i.target.addScaledVector(h,i.dampingFactor):i.target.add(h),_.setFromSpherical(u),_.applyQuaternion(ve),Q.copy(i.target).add(_),i.object.lookAt(i.target),i.enableDamping===!0?(C.theta*=1-i.dampingFactor,C.phi*=1-i.dampingFactor,h.multiplyScalar(1-i.dampingFactor)):(C.set(0,0,0),h.set(0,0,0)),d=1,m||Me.distanceToSquared(i.object.position)>c||8*(1-ot.dot(i.object.quaternion))>c?(i.dispatchEvent(s),Me.copy(i.object.position),ot.copy(i.object.quaternion),m=!1,!0):!1}})(),this.connect=_=>{_===document&&console.error('THREE.OrbitControls: "document" should not be used as the target "domElement". Please use "renderer.domElement" instead.'),i.domElement=_,i.domElement.style.touchAction="none",i.domElement.addEventListener("contextmenu",Xe),i.domElement.addEventListener("pointerdown",it),i.domElement.addEventListener("pointercancel",It),i.domElement.addEventListener("wheel",Y)},this.dispose=()=>{var _,pe,ve,Me,ot,bt;(_=i.domElement)==null||_.removeEventListener("contextmenu",Xe),(pe=i.domElement)==null||pe.removeEventListener("pointerdown",it),(ve=i.domElement)==null||ve.removeEventListener("pointercancel",It),(Me=i.domElement)==null||Me.removeEventListener("wheel",Y),(ot=i.domElement)==null||ot.ownerDocument.removeEventListener("pointermove",nt),(bt=i.domElement)==null||bt.ownerDocument.removeEventListener("pointerup",Je),i._domElementKeyEvents!==null&&i._domElementKeyEvents.removeEventListener("keydown",Ie)};const i=this,s={type:"change"},r={type:"start"},o={type:"end"},a={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6};let l=a.NONE;const c=1e-6,u=new GA,C=new GA;let d=1;const h=new X;let m=!1;const y=new ne,v=new ne,A=new ne,b=new ne,f=new ne,B=new ne,S=new ne,x=new ne,R=new ne,V=[],Z={};function M(){return 2*Math.PI/60/60*i.autoRotateSpeed}function H(){return Math.pow(.95,i.zoomSpeed)}function U(_){i.reverseOrbit?C.theta+=_:C.theta-=_}function D(_){i.reverseOrbit?C.phi+=_:C.phi-=_}const q=(()=>{const _=new X;return function(ve,Me){_.setFromMatrixColumn(Me,0),_.multiplyScalar(-ve),h.add(_)}})(),ie=(()=>{const _=new X;return function(ve,Me){i.screenSpacePanning===!0?_.setFromMatrixColumn(Me,1):(_.setFromMatrixColumn(Me,0),_.crossVectors(i.object.up,_)),_.multiplyScalar(ve),h.add(_)}})(),ue=(()=>{const _=new X;return function(ve,Me){const ot=i.domElement;if(ot&&i.object instanceof on&&i.object.isPerspectiveCamera){const bt=i.object.position;_.copy(bt).sub(i.target);let qt=_.length();qt*=Math.tan(i.object.fov/2*Math.PI/180),q(2*ve*qt/ot.clientHeight,i.object.matrix),ie(2*Me*qt/ot.clientHeight,i.object.matrix)}else ot&&i.object instanceof uo&&i.object.isOrthographicCamera?(q(ve*(i.object.right-i.object.left)/i.object.zoom/ot.clientWidth,i.object.matrix),ie(Me*(i.object.top-i.object.bottom)/i.object.zoom/ot.clientHeight,i.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),i.enablePan=!1)}})();function le(_){i.object instanceof on&&i.object.isPerspectiveCamera?d/=_:i.object instanceof uo&&i.object.isOrthographicCamera?(i.object.zoom=Math.max(i.minZoom,Math.min(i.maxZoom,i.object.zoom*_)),i.object.updateProjectionMatrix(),m=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),i.enableZoom=!1)}function L(_){i.object instanceof on&&i.object.isPerspectiveCamera?d*=_:i.object instanceof uo&&i.object.isOrthographicCamera?(i.object.zoom=Math.max(i.minZoom,Math.min(i.maxZoom,i.object.zoom/_)),i.object.updateProjectionMatrix(),m=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),i.enableZoom=!1)}function P(_){y.set(_.clientX,_.clientY)}function O(_){S.set(_.clientX,_.clientY)}function ce(_){b.set(_.clientX,_.clientY)}function ge(_){v.set(_.clientX,_.clientY),A.subVectors(v,y).multiplyScalar(i.rotateSpeed);const pe=i.domElement;pe&&(U(2*Math.PI*A.x/pe.clientHeight),D(2*Math.PI*A.y/pe.clientHeight)),y.copy(v),i.update()}function te(_){x.set(_.clientX,_.clientY),R.subVectors(x,S),R.y>0?le(H()):R.y<0&&L(H()),S.copy(x),i.update()}function re(_){f.set(_.clientX,_.clientY),B.subVectors(f,b).multiplyScalar(i.panSpeed),ue(B.x,B.y),b.copy(f),i.update()}function Ze(_){_.deltaY<0?L(H()):_.deltaY>0&&le(H()),i.update()}function we(_){let pe=!1;switch(_.code){case i.keys.UP:ue(0,i.keyPanSpeed),pe=!0;break;case i.keys.BOTTOM:ue(0,-i.keyPanSpeed),pe=!0;break;case i.keys.LEFT:ue(i.keyPanSpeed,0),pe=!0;break;case i.keys.RIGHT:ue(-i.keyPanSpeed,0),pe=!0;break}pe&&(_.preventDefault(),i.update())}function J(){if(V.length==1)y.set(V[0].pageX,V[0].pageY);else{const _=.5*(V[0].pageX+V[1].pageX),pe=.5*(V[0].pageY+V[1].pageY);y.set(_,pe)}}function tt(){if(V.length==1)b.set(V[0].pageX,V[0].pageY);else{const _=.5*(V[0].pageX+V[1].pageX),pe=.5*(V[0].pageY+V[1].pageY);b.set(_,pe)}}function rt(){const _=V[0].pageX-V[1].pageX,pe=V[0].pageY-V[1].pageY,ve=Math.sqrt(_*_+pe*pe);S.set(0,ve)}function We(){i.enableZoom&&rt(),i.enablePan&&tt()}function ze(){i.enableZoom&&rt(),i.enableRotate&&J()}function ye(_){if(V.length==1)v.set(_.pageX,_.pageY);else{const ve=Pe(_),Me=.5*(_.pageX+ve.x),ot=.5*(_.pageY+ve.y);v.set(Me,ot)}A.subVectors(v,y).multiplyScalar(i.rotateSpeed);const pe=i.domElement;pe&&(U(2*Math.PI*A.x/pe.clientHeight),D(2*Math.PI*A.y/pe.clientHeight)),y.copy(v)}function de(_){if(V.length==1)f.set(_.pageX,_.pageY);else{const pe=Pe(_),ve=.5*(_.pageX+pe.x),Me=.5*(_.pageY+pe.y);f.set(ve,Me)}B.subVectors(f,b).multiplyScalar(i.panSpeed),ue(B.x,B.y),b.copy(f)}function Be(_){const pe=Pe(_),ve=_.pageX-pe.x,Me=_.pageY-pe.y,ot=Math.sqrt(ve*ve+Me*Me);x.set(0,ot),R.set(0,Math.pow(x.y/S.y,i.zoomSpeed)),le(R.y),S.copy(x)}function ke(_){i.enableZoom&&Be(_),i.enablePan&&de(_)}function He(_){i.enableZoom&&Be(_),i.enableRotate&&ye(_)}function it(_){var pe,ve;i.enabled!==!1&&(V.length===0&&((pe=i.domElement)==null||pe.ownerDocument.addEventListener("pointermove",nt),(ve=i.domElement)==null||ve.ownerDocument.addEventListener("pointerup",Je)),lt(_),_.pointerType==="touch"?Se(_):Ht(_))}function nt(_){i.enabled!==!1&&(_.pointerType==="touch"?xe(_):k(_))}function Je(_){var pe,ve,Me;Te(_),V.length===0&&((pe=i.domElement)==null||pe.releasePointerCapture(_.pointerId),(ve=i.domElement)==null||ve.ownerDocument.removeEventListener("pointermove",nt),(Me=i.domElement)==null||Me.ownerDocument.removeEventListener("pointerup",Je)),i.dispatchEvent(o),l=a.NONE}function It(_){Te(_)}function Ht(_){let pe;switch(_.button){case 0:pe=i.mouseButtons.LEFT;break;case 1:pe=i.mouseButtons.MIDDLE;break;case 2:pe=i.mouseButtons.RIGHT;break;default:pe=-1}switch(pe){case Ja.DOLLY:if(i.enableZoom===!1)return;O(_),l=a.DOLLY;break;case Ja.ROTATE:if(_.ctrlKey||_.metaKey||_.shiftKey){if(i.enablePan===!1)return;ce(_),l=a.PAN}else{if(i.enableRotate===!1)return;P(_),l=a.ROTATE}break;case Ja.PAN:if(_.ctrlKey||_.metaKey||_.shiftKey){if(i.enableRotate===!1)return;P(_),l=a.ROTATE}else{if(i.enablePan===!1)return;ce(_),l=a.PAN}break;default:l=a.NONE}l!==a.NONE&&i.dispatchEvent(r)}function k(_){if(i.enabled!==!1)switch(l){case a.ROTATE:if(i.enableRotate===!1)return;ge(_);break;case a.DOLLY:if(i.enableZoom===!1)return;te(_);break;case a.PAN:if(i.enablePan===!1)return;re(_);break}}function Y(_){i.enabled===!1||i.enableZoom===!1||l!==a.NONE&&l!==a.ROTATE||(_.preventDefault(),i.dispatchEvent(r),Ze(_),i.dispatchEvent(o))}function Ie(_){i.enabled===!1||i.enablePan===!1||we(_)}function Se(_){switch(me(_),V.length){case 1:switch(i.touches.ONE){case Oa.ROTATE:if(i.enableRotate===!1)return;J(),l=a.TOUCH_ROTATE;break;case Oa.PAN:if(i.enablePan===!1)return;tt(),l=a.TOUCH_PAN;break;default:l=a.NONE}break;case 2:switch(i.touches.TWO){case Oa.DOLLY_PAN:if(i.enableZoom===!1&&i.enablePan===!1)return;We(),l=a.TOUCH_DOLLY_PAN;break;case Oa.DOLLY_ROTATE:if(i.enableZoom===!1&&i.enableRotate===!1)return;ze(),l=a.TOUCH_DOLLY_ROTATE;break;default:l=a.NONE}break;default:l=a.NONE}l!==a.NONE&&i.dispatchEvent(r)}function xe(_){switch(me(_),l){case a.TOUCH_ROTATE:if(i.enableRotate===!1)return;ye(_),i.update();break;case a.TOUCH_PAN:if(i.enablePan===!1)return;de(_),i.update();break;case a.TOUCH_DOLLY_PAN:if(i.enableZoom===!1&&i.enablePan===!1)return;ke(_),i.update();break;case a.TOUCH_DOLLY_ROTATE:if(i.enableZoom===!1&&i.enableRotate===!1)return;He(_),i.update();break;default:l=a.NONE}}function Xe(_){i.enabled!==!1&&_.preventDefault()}function lt(_){V.push(_)}function Te(_){delete Z[_.pointerId];for(let pe=0;pee in n?sk(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,Wf=(n,e,t)=>(rk(n,typeof e!="symbol"?e+"":e,t),t);class uh{constructor(e){Wf(this,"camera",new uo(-1,1,1,-1,0,1)),Wf(this,"geometry",new Ml(2,2)),Wf(this,"mesh"),this.mesh=new Un(this.geometry,e)}get material(){return this.mesh.material}set material(e){this.mesh.material=e}dispose(){this.mesh.geometry.dispose()}render(e){e.render(this.mesh,this.camera)}}const ok=E.forwardRef(({makeDefault:n,camera:e,regress:t,domElement:i,enableDamping:s=!0,keyEvents:r=!1,onChange:o,onStart:a,onEnd:l,...c},u)=>{const C=Zn(x=>x.invalidate),d=Zn(x=>x.camera),h=Zn(x=>x.gl),m=Zn(x=>x.events),y=Zn(x=>x.setEvents),v=Zn(x=>x.set),A=Zn(x=>x.get),b=Zn(x=>x.performance),f=e||d,B=i||m.connected||h.domElement,S=E.useMemo(()=>new ik(f),[f]);return Fl(()=>{S.enabled&&S.update()},-1),E.useEffect(()=>(r&&S.connect(r===!0?B:r),S.connect(B),()=>void S.dispose()),[r,B,t,S,C]),E.useEffect(()=>{const x=Z=>{C(),t&&b.regress(),o&&o(Z)},R=Z=>{a&&a(Z)},V=Z=>{l&&l(Z)};return S.addEventListener("change",x),S.addEventListener("start",R),S.addEventListener("end",V),()=>{S.removeEventListener("start",R),S.removeEventListener("end",V),S.removeEventListener("change",x)}},[o,a,l,S,C,y]),E.useEffect(()=>{if(n){const x=A().controls;return v({controls:S}),()=>v({controls:x})}},[n,S]),E.createElement("primitive",Ku({ref:u,object:S,enableDamping:s},c))});var Sv={exports:{}},tc=typeof Reflect=="object"?Reflect:null,$w=tc&&typeof tc.apply=="function"?tc.apply:function(e,t,i){return Function.prototype.apply.call(e,t,i)},Eh;tc&&typeof tc.ownKeys=="function"?Eh=tc.ownKeys:Object.getOwnPropertySymbols?Eh=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Eh=function(e){return Object.getOwnPropertyNames(e)};function ak(n){console&&console.warn&&console.warn(n)}var RV=Number.isNaN||function(e){return e!==e};function tn(){tn.init.call(this)}Sv.exports=tn;Sv.exports.once=Ik;tn.EventEmitter=tn;tn.prototype._events=void 0;tn.prototype._eventsCount=0;tn.prototype._maxListeners=void 0;var eS=10;function cp(n){if(typeof n!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof n)}Object.defineProperty(tn,"defaultMaxListeners",{enumerable:!0,get:function(){return eS},set:function(n){if(typeof n!="number"||n<0||RV(n))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+n+".");eS=n}});tn.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};tn.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||RV(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this};function WV(n){return n._maxListeners===void 0?tn.defaultMaxListeners:n._maxListeners}tn.prototype.getMaxListeners=function(){return WV(this)};tn.prototype.emit=function(e){for(var t=[],i=1;i0&&(o=t[0]),o instanceof Error)throw o;var a=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw a.context=o,a}var l=r[e];if(l===void 0)return!1;if(typeof l=="function")$w(l,this,t);else for(var c=l.length,u=XV(l,c),i=0;i0&&o.length>s&&!o.warned){o.warned=!0;var a=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");a.name="MaxListenersExceededWarning",a.emitter=n,a.type=e,a.count=o.length,ak(a)}return n}tn.prototype.addListener=function(e,t){return VV(this,e,t,!1)};tn.prototype.on=tn.prototype.addListener;tn.prototype.prependListener=function(e,t){return VV(this,e,t,!0)};function lk(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function MV(n,e,t){var i={fired:!1,wrapFn:void 0,target:n,type:e,listener:t},s=lk.bind(i);return s.listener=t,i.wrapFn=s,s}tn.prototype.once=function(e,t){return cp(t),this.on(e,MV(this,e,t)),this};tn.prototype.prependOnceListener=function(e,t){return cp(t),this.prependListener(e,MV(this,e,t)),this};tn.prototype.removeListener=function(e,t){var i,s,r,o,a;if(cp(t),s=this._events,s===void 0)return this;if(i=s[e],i===void 0)return this;if(i===t||i.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete s[e],s.removeListener&&this.emit("removeListener",e,i.listener||t));else if(typeof i!="function"){for(r=-1,o=i.length-1;o>=0;o--)if(i[o]===t||i[o].listener===t){a=i[o].listener,r=o;break}if(r<0)return this;r===0?i.shift():gk(i,r),i.length===1&&(s[e]=i[0]),s.removeListener!==void 0&&this.emit("removeListener",e,a||t)}return this};tn.prototype.off=tn.prototype.removeListener;tn.prototype.removeAllListeners=function(e){var t,i,s;if(i=this._events,i===void 0)return this;if(i.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):i[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete i[e]),this;if(arguments.length===0){var r=Object.keys(i),o;for(s=0;s=0;s--)this.removeListener(e,t[s]);return this};function NV(n,e,t){var i=n._events;if(i===void 0)return[];var s=i[e];return s===void 0?[]:typeof s=="function"?t?[s.listener||s]:[s]:t?ck(s):XV(s,s.length)}tn.prototype.listeners=function(e){return NV(this,e,!0)};tn.prototype.rawListeners=function(e){return NV(this,e,!1)};tn.listenerCount=function(n,e){return typeof n.listenerCount=="function"?n.listenerCount(e):HV.call(n,e)};tn.prototype.listenerCount=HV;function HV(n){var e=this._events;if(e!==void 0){var t=e[n];if(typeof t=="function")return 1;if(t!==void 0)return t.length}return 0}tn.prototype.eventNames=function(){return this._eventsCount>0?Eh(this._events):[]};function XV(n,e){for(var t=new Array(e),i=0;i{if(e.data.op==="frame"){this.buffers.positions=e.data.positions,this.buffers.quaternions=e.data.quaternions,this.emit(e.data.op,e.data);return}this.emit(e.data.type,e.data)};for(const e of this.messageQueue)this.worker.postMessage(e);this.messageQueue.length=0}disableConstraint(e){let{uuid:t}=e;this.postMessage({op:"disableConstraint",uuid:t})}disableConstraintMotor(e){let{uuid:t}=e;this.postMessage({op:"disableConstraintMotor",uuid:t})}disconnect(){this.worker&&(this.worker.onmessage=null)}enableConstraint(e){let{uuid:t}=e;this.postMessage({op:"enableConstraint",uuid:t})}enableConstraintMotor(e){let{uuid:t}=e;this.postMessage({op:"enableConstraintMotor",uuid:t})}init(){const{allowSleep:e,axisIndex:t,broadphase:i,defaultContactMaterial:s,frictionGravity:r,gravity:o,iterations:a,quatNormalizeFast:l,quatNormalizeSkip:c,solver:u,tolerance:C}=this.config;this.postMessage({op:"init",props:{allowSleep:e,axisIndex:t,broadphase:i,defaultContactMaterial:s,frictionGravity:r,gravity:o,iterations:a,quatNormalizeFast:l,quatNormalizeSkip:c,solver:u,tolerance:C}})}removeBodies(e){let{uuid:t}=e;this.postMessage({op:"removeBodies",uuid:t})}removeConstraint(e){let{uuid:t}=e;this.postMessage({op:"removeConstraint",uuid:t})}removeContactMaterial(e){let{uuid:t}=e;this.postMessage({op:"removeContactMaterial",uuid:t})}removeRay(e){let{uuid:t}=e;this.postMessage({op:"removeRay",uuid:t})}removeRaycastVehicle(e){let{uuid:t}=e;this.postMessage({op:"removeRaycastVehicle",uuid:t})}removeSpring(e){let{uuid:t}=e;this.postMessage({op:"removeSpring",uuid:t})}setAllowSleep(e){let{props:t,uuid:i}=e;this.postMessage({op:"setAllowSleep",props:t,uuid:i})}setAngularDamping(e){let{props:t,uuid:i}=e;this.postMessage({op:"setAngularDamping",props:t,uuid:i})}setAngularFactor(e){let{props:t,uuid:i}=e;this.postMessage({op:"setAngularFactor",props:t,uuid:i})}setAngularVelocity(e){let{props:t,uuid:i}=e;this.postMessage({op:"setAngularVelocity",props:t,uuid:i})}setCollisionFilterGroup(e){let{props:t,uuid:i}=e;this.postMessage({op:"setCollisionFilterGroup",props:t,uuid:i})}setCollisionFilterMask(e){let{props:t,uuid:i}=e;this.postMessage({op:"setCollisionFilterMask",props:t,uuid:i})}setCollisionResponse(e){let{props:t,uuid:i}=e;this.postMessage({op:"setCollisionResponse",props:t,uuid:i})}setConstraintMotorMaxForce(e){let{props:t,uuid:i}=e;this.postMessage({op:"setConstraintMotorMaxForce",props:t,uuid:i})}setConstraintMotorSpeed(e){let{props:t,uuid:i}=e;this.postMessage({op:"setConstraintMotorSpeed",props:t,uuid:i})}setFixedRotation(e){let{props:t,uuid:i}=e;this.postMessage({op:"setFixedRotation",props:t,uuid:i})}setIsTrigger(e){let{props:t,uuid:i}=e;this.postMessage({op:"setIsTrigger",props:t,uuid:i})}setLinearDamping(e){let{props:t,uuid:i}=e;this.postMessage({op:"setLinearDamping",props:t,uuid:i})}setLinearFactor(e){let{props:t,uuid:i}=e;this.postMessage({op:"setLinearFactor",props:t,uuid:i})}setMass(e){let{props:t,uuid:i}=e;this.postMessage({op:"setMass",props:t,uuid:i})}setMaterial(e){let{props:t,uuid:i}=e;this.postMessage({op:"setMaterial",props:t,uuid:i})}setPosition(e){let{props:t,uuid:i}=e;this.postMessage({op:"setPosition",props:t,uuid:i})}setQuaternion(e){let{props:[t,i,s,r],uuid:o}=e;this.postMessage({op:"setQuaternion",props:[t,i,s,r],uuid:o})}setRaycastVehicleBrake(e){let{props:t,uuid:i}=e;this.postMessage({op:"setRaycastVehicleBrake",props:t,uuid:i})}setRaycastVehicleSteeringValue(e){let{props:t,uuid:i}=e;this.postMessage({op:"setRaycastVehicleSteeringValue",props:t,uuid:i})}setRotation(e){let{props:t,uuid:i}=e;this.postMessage({op:"setRotation",props:t,uuid:i})}setSleepSpeedLimit(e){let{props:t,uuid:i}=e;this.postMessage({op:"setSleepSpeedLimit",props:t,uuid:i})}setSleepTimeLimit(e){let{props:t,uuid:i}=e;this.postMessage({op:"setSleepTimeLimit",props:t,uuid:i})}setSpringDamping(e){let{props:t,uuid:i}=e;this.postMessage({op:"setSpringDamping",props:t,uuid:i})}setSpringRestLength(e){let{props:t,uuid:i}=e;this.postMessage({op:"setSpringRestLength",props:t,uuid:i})}setSpringStiffness(e){let{props:t,uuid:i}=e;this.postMessage({op:"setSpringStiffness",props:t,uuid:i})}setUserData(e){let{props:t,uuid:i}=e;this.postMessage({op:"setUserData",props:t,uuid:i})}setVelocity(e){let{props:t,uuid:i}=e;this.postMessage({op:"setVelocity",props:t,uuid:i})}sleep(e){let{uuid:t}=e;this.postMessage({op:"sleep",uuid:t})}step(e){var t;const{buffers:{positions:i,quaternions:s}}=this;!i.byteLength&&!s.byteLength||(t=this.worker)==null||t.postMessage({op:"step",positions:i,props:e,quaternions:s},[i.buffer,s.buffer])}subscribe(e){let{props:{id:t,target:i,type:s},uuid:r}=e;this.postMessage({op:"subscribe",props:{id:t,target:i,type:s},uuid:r})}terminate(){var e;(e=this.worker)==null||e.terminate(),this.worker=null}unsubscribe(e){let{props:t}=e;this.postMessage({op:"unsubscribe",props:t})}wakeUp(e){let{uuid:t}=e;this.postMessage({op:"wakeUp",uuid:t})}postMessage(e){if(this.worker)return this.worker.postMessage(e);this.messageQueue.push(e)}}class lo{constructor(e){e===void 0&&(e=[0,0,0,0,0,0,0,0,0]),this.elements=e}identity(){const e=this.elements;e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=1,e[5]=0,e[6]=0,e[7]=0,e[8]=1}setZero(){const e=this.elements;e[0]=0,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=0,e[6]=0,e[7]=0,e[8]=0}setTrace(e){const t=this.elements;t[0]=e.x,t[4]=e.y,t[8]=e.z}getTrace(e){e===void 0&&(e=new K);const t=this.elements;return e.x=t[0],e.y=t[4],e.z=t[8],e}vmult(e,t){t===void 0&&(t=new K);const i=this.elements,s=e.x,r=e.y,o=e.z;return t.x=i[0]*s+i[1]*r+i[2]*o,t.y=i[3]*s+i[4]*r+i[5]*o,t.z=i[6]*s+i[7]*r+i[8]*o,t}smult(e){for(let t=0;t0){const r=1/s;this.x*=r,this.y*=r,this.z*=r}else this.x=0,this.y=0,this.z=0;return s}unit(e){e===void 0&&(e=new K);const t=this.x,i=this.y,s=this.z;let r=Math.sqrt(t*t+i*i+s*s);return r>0?(r=1/r,e.x=t*r,e.y=i*r,e.z=s*r):(e.x=1,e.y=0,e.z=0),e}length(){const e=this.x,t=this.y,i=this.z;return Math.sqrt(e*e+t*t+i*i)}lengthSquared(){return this.dot(this)}distanceTo(e){const t=this.x,i=this.y,s=this.z,r=e.x,o=e.y,a=e.z;return Math.sqrt((r-t)*(r-t)+(o-i)*(o-i)+(a-s)*(a-s))}distanceSquared(e){const t=this.x,i=this.y,s=this.z,r=e.x,o=e.y,a=e.z;return(r-t)*(r-t)+(o-i)*(o-i)+(a-s)*(a-s)}scale(e,t){t===void 0&&(t=new K);const i=this.x,s=this.y,r=this.z;return t.x=e*i,t.y=e*s,t.z=e*r,t}vmul(e,t){return t===void 0&&(t=new K),t.x=e.x*this.x,t.y=e.y*this.y,t.z=e.z*this.z,t}addScaledVector(e,t,i){return i===void 0&&(i=new K),i.x=this.x+e*t.x,i.y=this.y+e*t.y,i.z=this.z+e*t.z,i}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}isZero(){return this.x===0&&this.y===0&&this.z===0}negate(e){return e===void 0&&(e=new K),e.x=-this.x,e.y=-this.y,e.z=-this.z,e}tangents(e,t){const i=this.length();if(i>0){const s=bk,r=1/i;s.set(this.x*r,this.y*r,this.z*r);const o=yk;Math.abs(s.x)<.9?(o.set(1,0,0),s.cross(o,e)):(o.set(0,1,0),s.cross(o,e)),s.cross(e,t)}else e.set(1,0,0),t.set(0,1,0)}toString(){return`${this.x},${this.y},${this.z}`}toArray(){return[this.x,this.y,this.z]}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}lerp(e,t,i){const s=this.x,r=this.y,o=this.z;i.x=s+(e.x-s)*t,i.y=r+(e.y-r)*t,i.z=o+(e.z-o)*t}almostEquals(e,t){return t===void 0&&(t=1e-6),!(Math.abs(this.x-e.x)>t||Math.abs(this.y-e.y)>t||Math.abs(this.z-e.z)>t)}almostZero(e){return e===void 0&&(e=1e-6),!(Math.abs(this.x)>e||Math.abs(this.y)>e||Math.abs(this.z)>e)}isAntiparallelTo(e,t){return this.negate(tS),tS.almostEquals(e,t)}clone(){return new K(this.x,this.y,this.z)}}K.ZERO=new K(0,0,0);K.UNIT_X=new K(1,0,0);K.UNIT_Y=new K(0,1,0);K.UNIT_Z=new K(0,0,1);const bk=new K,yk=new K,tS=new K;class Es{constructor(e){e===void 0&&(e={}),this.lowerBound=new K,this.upperBound=new K,e.lowerBound&&this.lowerBound.copy(e.lowerBound),e.upperBound&&this.upperBound.copy(e.upperBound)}setFromPoints(e,t,i,s){const r=this.lowerBound,o=this.upperBound,a=i;r.copy(e[0]),a&&a.vmult(r,r),o.copy(r);for(let l=1;lo.x&&(o.x=c.x),c.xo.y&&(o.y=c.y),c.yo.z&&(o.z=c.z),c.z=r.x&&t.y<=s.y&&i.y>=r.y&&t.z<=s.z&&i.z>=r.z}getCorners(e,t,i,s,r,o,a,l){const c=this.lowerBound,u=this.upperBound;e.copy(c),t.set(u.x,c.y,c.z),i.set(u.x,u.y,c.z),s.set(c.x,u.y,u.z),r.set(u.x,c.y,u.z),o.set(c.x,u.y,c.z),a.set(c.x,c.y,u.z),l.copy(u)}toLocalFrame(e,t){const i=iS,s=i[0],r=i[1],o=i[2],a=i[3],l=i[4],c=i[5],u=i[6],C=i[7];this.getCorners(s,r,o,a,l,c,u,C);for(let d=0;d!==8;d++){const h=i[d];e.pointToLocal(h,h)}return t.setFromPoints(i)}toWorldFrame(e,t){const i=iS,s=i[0],r=i[1],o=i[2],a=i[3],l=i[4],c=i[5],u=i[6],C=i[7];this.getCorners(s,r,o,a,l,c,u,C);for(let d=0;d!==8;d++){const h=i[d];e.pointToWorld(h,h)}return t.setFromPoints(i)}overlapsRay(e){const{direction:t,from:i}=e,s=1/t.x,r=1/t.y,o=1/t.z,a=(this.lowerBound.x-i.x)*s,l=(this.upperBound.x-i.x)*s,c=(this.lowerBound.y-i.y)*r,u=(this.upperBound.y-i.y)*r,C=(this.lowerBound.z-i.z)*o,d=(this.upperBound.z-i.z)*o,h=Math.max(Math.max(Math.min(a,l),Math.min(c,u)),Math.min(C,d)),m=Math.min(Math.min(Math.max(a,l),Math.max(c,u)),Math.max(C,d));return!(m<0||h>m)}}const nS=new K,iS=[new K,new K,new K,new K,new K,new K,new K,new K];class Vi{constructor(e,t,i,s){e===void 0&&(e=0),t===void 0&&(t=0),i===void 0&&(i=0),s===void 0&&(s=1),this.x=e,this.y=t,this.z=i,this.w=s}set(e,t,i,s){return this.x=e,this.y=t,this.z=i,this.w=s,this}toString(){return`${this.x},${this.y},${this.z},${this.w}`}toArray(){return[this.x,this.y,this.z,this.w]}setFromAxisAngle(e,t){const i=Math.sin(t*.5);return this.x=e.x*i,this.y=e.y*i,this.z=e.z*i,this.w=Math.cos(t*.5),this}toAxisAngle(e){e===void 0&&(e=new K),this.normalize();const t=2*Math.acos(this.w),i=Math.sqrt(1-this.w*this.w);return i<.001?(e.x=this.x,e.y=this.y,e.z=this.z):(e.x=this.x/i,e.y=this.y/i,e.z=this.z/i),[e,t]}setFromVectors(e,t){if(e.isAntiparallelTo(t)){const i=vk,s=Gk;e.tangents(i,s),this.setFromAxisAngle(i,Math.PI)}else{const i=e.cross(t);this.x=i.x,this.y=i.y,this.z=i.z,this.w=Math.sqrt(e.length()**2*t.length()**2)+e.dot(t),this.normalize()}return this}mult(e,t){t===void 0&&(t=new Vi);const i=this.x,s=this.y,r=this.z,o=this.w,a=e.x,l=e.y,c=e.z,u=e.w;return t.x=i*u+o*a+s*c-r*l,t.y=s*u+o*l+r*a-i*c,t.z=r*u+o*c+i*l-s*a,t.w=o*u-i*a-s*l-r*c,t}inverse(e){e===void 0&&(e=new Vi);const t=this.x,i=this.y,s=this.z,r=this.w;this.conjugate(e);const o=1/(t*t+i*i+s*s+r*r);return e.x*=o,e.y*=o,e.z*=o,e.w*=o,e}conjugate(e){return e===void 0&&(e=new Vi),e.x=-this.x,e.y=-this.y,e.z=-this.z,e.w=this.w,e}normalize(){let e=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);return e===0?(this.x=0,this.y=0,this.z=0,this.w=0):(e=1/e,this.x*=e,this.y*=e,this.z*=e,this.w*=e),this}normalizeFast(){const e=(3-(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w))/2;return e===0?(this.x=0,this.y=0,this.z=0,this.w=0):(this.x*=e,this.y*=e,this.z*=e,this.w*=e),this}vmult(e,t){t===void 0&&(t=new K);const i=e.x,s=e.y,r=e.z,o=this.x,a=this.y,l=this.z,c=this.w,u=c*i+a*r-l*s,C=c*s+l*i-o*r,d=c*r+o*s-a*i,h=-o*i-a*s-l*r;return t.x=u*c+h*-o+C*-l-d*-a,t.y=C*c+h*-a+d*-o-u*-l,t.z=d*c+h*-l+u*-a-C*-o,t}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w,this}toEuler(e,t){t===void 0&&(t="YZX");let i,s,r;const o=this.x,a=this.y,l=this.z,c=this.w;switch(t){case"YZX":const u=o*a+l*c;if(u>.499&&(i=2*Math.atan2(o,c),s=Math.PI/2,r=0),u<-.499&&(i=-2*Math.atan2(o,c),s=-Math.PI/2,r=0),i===void 0){const C=o*o,d=a*a,h=l*l;i=Math.atan2(2*a*c-2*o*l,1-2*d-2*h),s=Math.asin(2*u),r=Math.atan2(2*o*c-2*a*l,1-2*C-2*h)}break;default:throw new Error(`Euler order ${t} not supported yet.`)}e.y=i,e.z=s,e.x=r}setFromEuler(e,t,i,s){s===void 0&&(s="XYZ");const r=Math.cos(e/2),o=Math.cos(t/2),a=Math.cos(i/2),l=Math.sin(e/2),c=Math.sin(t/2),u=Math.sin(i/2);return s==="XYZ"?(this.x=l*o*a+r*c*u,this.y=r*c*a-l*o*u,this.z=r*o*u+l*c*a,this.w=r*o*a-l*c*u):s==="YXZ"?(this.x=l*o*a+r*c*u,this.y=r*c*a-l*o*u,this.z=r*o*u-l*c*a,this.w=r*o*a+l*c*u):s==="ZXY"?(this.x=l*o*a-r*c*u,this.y=r*c*a+l*o*u,this.z=r*o*u+l*c*a,this.w=r*o*a-l*c*u):s==="ZYX"?(this.x=l*o*a-r*c*u,this.y=r*c*a+l*o*u,this.z=r*o*u-l*c*a,this.w=r*o*a+l*c*u):s==="YZX"?(this.x=l*o*a+r*c*u,this.y=r*c*a+l*o*u,this.z=r*o*u-l*c*a,this.w=r*o*a-l*c*u):s==="XZY"&&(this.x=l*o*a-r*c*u,this.y=r*c*a-l*o*u,this.z=r*o*u+l*c*a,this.w=r*o*a+l*c*u),this}clone(){return new Vi(this.x,this.y,this.z,this.w)}slerp(e,t,i){i===void 0&&(i=new Vi);const s=this.x,r=this.y,o=this.z,a=this.w;let l=e.x,c=e.y,u=e.z,C=e.w,d,h,m,y,v;return h=s*l+r*c+o*u+a*C,h<0&&(h=-h,l=-l,c=-c,u=-u,C=-C),1-h>1e-6?(d=Math.acos(h),m=Math.sin(d),y=Math.sin((1-t)*d)/m,v=Math.sin(t*d)/m):(y=1-t,v=t),i.x=y*s+v*l,i.y=y*r+v*c,i.z=y*o+v*u,i.w=y*a+v*C,i}integrate(e,t,i,s){s===void 0&&(s=new Vi);const r=e.x*i.x,o=e.y*i.y,a=e.z*i.z,l=this.x,c=this.y,u=this.z,C=this.w,d=t*.5;return s.x+=d*(r*C+o*u-a*c),s.y+=d*(o*C+a*l-r*u),s.z+=d*(a*C+r*c-o*l),s.w+=d*(-r*l-o*c-a*u),s}}const vk=new K,Gk=new K,Bk={SPHERE:1,PLANE:2,BOX:4,COMPOUND:8,CONVEXPOLYHEDRON:16,HEIGHTFIELD:32,PARTICLE:64,CYLINDER:128,TRIMESH:256};class je{constructor(e){e===void 0&&(e={}),this.id=je.idCounter++,this.type=e.type||0,this.boundingSphereRadius=0,this.collisionResponse=e.collisionResponse?e.collisionResponse:!0,this.collisionFilterGroup=e.collisionFilterGroup!==void 0?e.collisionFilterGroup:1,this.collisionFilterMask=e.collisionFilterMask!==void 0?e.collisionFilterMask:-1,this.material=e.material?e.material:null,this.body=null}updateBoundingSphereRadius(){throw`computeBoundingSphereRadius() not implemented for shape type ${this.type}`}volume(){throw`volume() not implemented for shape type ${this.type}`}calculateLocalInertia(e,t){throw`calculateLocalInertia() not implemented for shape type ${this.type}`}calculateWorldAABB(e,t,i,s){throw`calculateWorldAABB() not implemented for shape type ${this.type}`}}je.idCounter=0;je.types=Bk;class Ui{constructor(e){e===void 0&&(e={}),this.position=new K,this.quaternion=new Vi,e.position&&this.position.copy(e.position),e.quaternion&&this.quaternion.copy(e.quaternion)}pointToLocal(e,t){return Ui.pointToLocalFrame(this.position,this.quaternion,e,t)}pointToWorld(e,t){return Ui.pointToWorldFrame(this.position,this.quaternion,e,t)}vectorToWorldFrame(e,t){return t===void 0&&(t=new K),this.quaternion.vmult(e,t),t}static pointToLocalFrame(e,t,i,s){return s===void 0&&(s=new K),i.vsub(e,s),t.conjugate(sS),sS.vmult(s,s),s}static pointToWorldFrame(e,t,i,s){return s===void 0&&(s=new K),t.vmult(i,s),s.vadd(e,s),s}static vectorToWorldFrame(e,t,i){return i===void 0&&(i=new K),e.vmult(t,i),i}static vectorToLocalFrame(e,t,i,s){return s===void 0&&(s=new K),t.w*=-1,t.vmult(i,s),t.w*=-1,s}}const sS=new Vi;new K;new K;new K;new K;new K,new K,new K,new K,new K,new K,new K,new K;new K;new Vi;new Es;new lo;new lo;new lo;new K;new K;new K;new K;new K;new K;new K;new K;new K;new K;new Vi;new K;new K;new K;new K;class xb{constructor(){this.rayFromWorld=new K,this.rayToWorld=new K,this.hitNormalWorld=new K,this.hitPointWorld=new K,this.hasHit=!1,this.shape=null,this.body=null,this.hitFaceIndex=-1,this.distance=-1,this.shouldStop=!1}reset(){this.rayFromWorld.setZero(),this.rayToWorld.setZero(),this.hitNormalWorld.setZero(),this.hitPointWorld.setZero(),this.hasHit=!1,this.shape=null,this.body=null,this.hitFaceIndex=-1,this.distance=-1,this.shouldStop=!1}abort(){this.shouldStop=!0}set(e,t,i,s,r,o,a){this.rayFromWorld.copy(e),this.rayToWorld.copy(t),this.hitNormalWorld.copy(i),this.hitPointWorld.copy(s),this.shape=r,this.body=o,this.distance=a}}let FV,KV,zV,LV,TV,EV,kV;const xv={CLOSEST:1,ANY:2,ALL:4};FV=je.types.SPHERE;KV=je.types.PLANE;zV=je.types.BOX;LV=je.types.CYLINDER;TV=je.types.CONVEXPOLYHEDRON;EV=je.types.HEIGHTFIELD;kV=je.types.TRIMESH;class yi{get[FV](){return this._intersectSphere}get[KV](){return this._intersectPlane}get[zV](){return this._intersectBox}get[LV](){return this._intersectConvex}get[TV](){return this._intersectConvex}get[EV](){return this._intersectHeightfield}get[kV](){return this._intersectTrimesh}constructor(e,t){e===void 0&&(e=new K),t===void 0&&(t=new K),this.from=e.clone(),this.to=t.clone(),this.direction=new K,this.precision=1e-4,this.checkCollisionResponse=!0,this.skipBackfaces=!1,this.collisionFilterMask=-1,this.collisionFilterGroup=-1,this.mode=yi.ANY,this.result=new xb,this.hasHit=!1,this.callback=i=>{}}intersectWorld(e,t){return this.mode=t.mode||yi.ANY,this.result=t.result||new xb,this.skipBackfaces=!!t.skipBackfaces,this.collisionFilterMask=typeof t.collisionFilterMask<"u"?t.collisionFilterMask:-1,this.collisionFilterGroup=typeof t.collisionFilterGroup<"u"?t.collisionFilterGroup:-1,this.checkCollisionResponse=typeof t.checkCollisionResponse<"u"?t.checkCollisionResponse:!0,t.from&&this.from.copy(t.from),t.to&&this.to.copy(t.to),this.callback=t.callback||(()=>{}),this.hasHit=!1,this.result.reset(),this.updateDirection(),this.getAABB(rS),Vf.length=0,e.broadphase.aabbQuery(e,rS,Vf),this.intersectBodies(Vf),this.hasHit}intersectBody(e,t){t&&(this.result=t,this.updateDirection());const i=this.checkCollisionResponse;if(i&&!e.collisionResponse||!(this.collisionFilterGroup&e.collisionFilterMask)||!(e.collisionFilterGroup&this.collisionFilterMask))return;const s=Zk,r=wk;for(let o=0,a=e.shapes.length;oe.boundingSphereRadius)return;const a=this[e.type];a&&a.call(this,e,t,i,s,e)}_intersectBox(e,t,i,s,r){return this._intersectConvex(e.convexPolyhedronRepresentation,t,i,s,r)}_intersectPlane(e,t,i,s,r){const o=this.from,a=this.to,l=this.direction,c=new K(0,0,1);t.vmult(c,c);const u=new K;o.vsub(i,u);const C=u.dot(c);a.vsub(i,u);const d=u.dot(c);if(C*d>0||o.distanceTo(a)=0&&y<=1&&(o.lerp(a,y,h),h.vsub(i,m),m.normalize(),this.reportIntersection(m,h,r,s,-1)),this.result.shouldStop)return;v>=0&&v<=1&&(o.lerp(a,v,h),h.vsub(i,m),m.normalize(),this.reportIntersection(m,h,r,s,-1))}}_intersectConvex(e,t,i,s,r,o){const a=Vk,l=aS,c=o&&o.faceList||null,u=e.faces,C=e.vertices,d=e.faceNormals,h=this.direction,m=this.from,y=this.to,v=m.distanceTo(y),A=c?c.length:u.length,b=this.result;for(let f=0;!b.shouldStop&&fv||this.reportIntersection(a,Ti,r,s,B)}}}}_intersectTrimesh(e,t,i,s,r,o){const a=Mk,l=Kk,c=zk,u=aS,C=Nk,d=Hk,h=Xk,m=Fk,y=Yk,v=e.indices;e.vertices;const A=this.from,b=this.to,f=this.direction;c.position.copy(i),c.quaternion.copy(t),Ui.vectorToLocalFrame(i,t,f,C),Ui.pointToLocalFrame(i,t,A,d),Ui.pointToLocalFrame(i,t,b,h),h.x*=e.scale.x,h.y*=e.scale.y,h.z*=e.scale.z,d.x*=e.scale.x,d.y*=e.scale.y,d.z*=e.scale.z,h.vsub(d,C),C.normalize();const B=d.distanceSquared(h);e.tree.rayQuery(this,c,l);for(let S=0,x=l.length;!this.result.shouldStop&&S!==x;S++){const R=l[S];e.getNormal(R,a),e.getVertex(v[R*3],nr),nr.vsub(d,u);const V=C.dot(a),Z=a.dot(u)/V;if(Z<0)continue;C.scale(Z,Ti),Ti.vadd(d,Ti),e.getVertex(v[R*3+1],Zr),e.getVertex(v[R*3+2],wr);const M=Ti.distanceSquared(d);!(yi.pointInTriangle(Ti,Zr,nr,wr)||yi.pointInTriangle(Ti,nr,Zr,wr))||M>B||(Ui.vectorToWorldFrame(t,a,y),Ui.pointToWorldFrame(i,t,Ti,m),this.reportIntersection(y,m,r,s,R))}l.length=0}reportIntersection(e,t,i,s,r){const o=this.from,a=this.to,l=o.distanceTo(t),c=this.result;if(!(this.skipBackfaces&&e.dot(this.direction)>0))switch(c.hitFaceIndex=typeof r<"u"?r:-1,this.mode){case yi.ALL:this.hasHit=!0,c.set(o,a,e,t,i,s,l),c.hasHit=!0,this.callback(c);break;case yi.CLOSEST:(l=0&&(C=r*c-o*a)>=0&&u+CDate.now()-n}new K;class go{constructor(e){e===void 0&&(e=[0,0,0,0,0,0,0,0,0]),this.elements=e}identity(){const e=this.elements;e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=1,e[5]=0,e[6]=0,e[7]=0,e[8]=1}setZero(){const e=this.elements;e[0]=0,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=0,e[6]=0,e[7]=0,e[8]=0}setTrace(e){const t=this.elements;t[0]=e.x,t[4]=e.y,t[8]=e.z}getTrace(e){e===void 0&&(e=new z);const t=this.elements;return e.x=t[0],e.y=t[4],e.z=t[8],e}vmult(e,t){t===void 0&&(t=new z);const i=this.elements,s=e.x,r=e.y,o=e.z;return t.x=i[0]*s+i[1]*r+i[2]*o,t.y=i[3]*s+i[4]*r+i[5]*o,t.z=i[6]*s+i[7]*r+i[8]*o,t}smult(e){for(let t=0;t0){const r=1/s;this.x*=r,this.y*=r,this.z*=r}else this.x=0,this.y=0,this.z=0;return s}unit(e){e===void 0&&(e=new z);const t=this.x,i=this.y,s=this.z;let r=Math.sqrt(t*t+i*i+s*s);return r>0?(r=1/r,e.x=t*r,e.y=i*r,e.z=s*r):(e.x=1,e.y=0,e.z=0),e}length(){const e=this.x,t=this.y,i=this.z;return Math.sqrt(e*e+t*t+i*i)}lengthSquared(){return this.dot(this)}distanceTo(e){const t=this.x,i=this.y,s=this.z,r=e.x,o=e.y,a=e.z;return Math.sqrt((r-t)*(r-t)+(o-i)*(o-i)+(a-s)*(a-s))}distanceSquared(e){const t=this.x,i=this.y,s=this.z,r=e.x,o=e.y,a=e.z;return(r-t)*(r-t)+(o-i)*(o-i)+(a-s)*(a-s)}scale(e,t){t===void 0&&(t=new z);const i=this.x,s=this.y,r=this.z;return t.x=e*i,t.y=e*s,t.z=e*r,t}vmul(e,t){return t===void 0&&(t=new z),t.x=e.x*this.x,t.y=e.y*this.y,t.z=e.z*this.z,t}addScaledVector(e,t,i){return i===void 0&&(i=new z),i.x=this.x+e*t.x,i.y=this.y+e*t.y,i.z=this.z+e*t.z,i}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}isZero(){return this.x===0&&this.y===0&&this.z===0}negate(e){return e===void 0&&(e=new z),e.x=-this.x,e.y=-this.y,e.z=-this.z,e}tangents(e,t){const i=this.length();if(i>0){const s=Ek,r=1/i;s.set(this.x*r,this.y*r,this.z*r);const o=kk;Math.abs(s.x)<.9?(o.set(1,0,0),s.cross(o,e)):(o.set(0,1,0),s.cross(o,e)),s.cross(e,t)}else e.set(1,0,0),t.set(0,1,0)}toString(){return`${this.x},${this.y},${this.z}`}toArray(){return[this.x,this.y,this.z]}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}lerp(e,t,i){const s=this.x,r=this.y,o=this.z;i.x=s+(e.x-s)*t,i.y=r+(e.y-r)*t,i.z=o+(e.z-o)*t}almostEquals(e,t){return t===void 0&&(t=1e-6),!(Math.abs(this.x-e.x)>t||Math.abs(this.y-e.y)>t||Math.abs(this.z-e.z)>t)}almostZero(e){return e===void 0&&(e=1e-6),!(Math.abs(this.x)>e||Math.abs(this.y)>e||Math.abs(this.z)>e)}isAntiparallelTo(e,t){return this.negate(lS),lS.almostEquals(e,t)}clone(){return new z(this.x,this.y,this.z)}}z.ZERO=new z(0,0,0);z.UNIT_X=new z(1,0,0);z.UNIT_Y=new z(0,1,0);z.UNIT_Z=new z(0,0,1);const Ek=new z,kk=new z,lS=new z;class ks{constructor(e){e===void 0&&(e={}),this.lowerBound=new z,this.upperBound=new z,e.lowerBound&&this.lowerBound.copy(e.lowerBound),e.upperBound&&this.upperBound.copy(e.upperBound)}setFromPoints(e,t,i,s){const r=this.lowerBound,o=this.upperBound,a=i;r.copy(e[0]),a&&a.vmult(r,r),o.copy(r);for(let l=1;lo.x&&(o.x=c.x),c.xo.y&&(o.y=c.y),c.yo.z&&(o.z=c.z),c.z=r.x&&t.y<=s.y&&i.y>=r.y&&t.z<=s.z&&i.z>=r.z}getCorners(e,t,i,s,r,o,a,l){const c=this.lowerBound,u=this.upperBound;e.copy(c),t.set(u.x,c.y,c.z),i.set(u.x,u.y,c.z),s.set(c.x,u.y,u.z),r.set(u.x,c.y,u.z),o.set(c.x,u.y,c.z),a.set(c.x,c.y,u.z),l.copy(u)}toLocalFrame(e,t){const i=cS,s=i[0],r=i[1],o=i[2],a=i[3],l=i[4],c=i[5],u=i[6],C=i[7];this.getCorners(s,r,o,a,l,c,u,C);for(let d=0;d!==8;d++){const h=i[d];e.pointToLocal(h,h)}return t.setFromPoints(i)}toWorldFrame(e,t){const i=cS,s=i[0],r=i[1],o=i[2],a=i[3],l=i[4],c=i[5],u=i[6],C=i[7];this.getCorners(s,r,o,a,l,c,u,C);for(let d=0;d!==8;d++){const h=i[d];e.pointToWorld(h,h)}return t.setFromPoints(i)}overlapsRay(e){const{direction:t,from:i}=e,s=1/t.x,r=1/t.y,o=1/t.z,a=(this.lowerBound.x-i.x)*s,l=(this.upperBound.x-i.x)*s,c=(this.lowerBound.y-i.y)*r,u=(this.upperBound.y-i.y)*r,C=(this.lowerBound.z-i.z)*o,d=(this.upperBound.z-i.z)*o,h=Math.max(Math.max(Math.min(a,l),Math.min(c,u)),Math.min(C,d)),m=Math.min(Math.min(Math.max(a,l),Math.max(c,u)),Math.max(C,d));return!(m<0||h>m)}}const gS=new z,cS=[new z,new z,new z,new z,new z,new z,new z,new z];class Mi{constructor(e,t,i,s){e===void 0&&(e=0),t===void 0&&(t=0),i===void 0&&(i=0),s===void 0&&(s=1),this.x=e,this.y=t,this.z=i,this.w=s}set(e,t,i,s){return this.x=e,this.y=t,this.z=i,this.w=s,this}toString(){return`${this.x},${this.y},${this.z},${this.w}`}toArray(){return[this.x,this.y,this.z,this.w]}setFromAxisAngle(e,t){const i=Math.sin(t*.5);return this.x=e.x*i,this.y=e.y*i,this.z=e.z*i,this.w=Math.cos(t*.5),this}toAxisAngle(e){e===void 0&&(e=new z),this.normalize();const t=2*Math.acos(this.w),i=Math.sqrt(1-this.w*this.w);return i<.001?(e.x=this.x,e.y=this.y,e.z=this.z):(e.x=this.x/i,e.y=this.y/i,e.z=this.z/i),[e,t]}setFromVectors(e,t){if(e.isAntiparallelTo(t)){const i=Dk,s=Uk;e.tangents(i,s),this.setFromAxisAngle(i,Math.PI)}else{const i=e.cross(t);this.x=i.x,this.y=i.y,this.z=i.z,this.w=Math.sqrt(e.length()**2*t.length()**2)+e.dot(t),this.normalize()}return this}mult(e,t){t===void 0&&(t=new Mi);const i=this.x,s=this.y,r=this.z,o=this.w,a=e.x,l=e.y,c=e.z,u=e.w;return t.x=i*u+o*a+s*c-r*l,t.y=s*u+o*l+r*a-i*c,t.z=r*u+o*c+i*l-s*a,t.w=o*u-i*a-s*l-r*c,t}inverse(e){e===void 0&&(e=new Mi);const t=this.x,i=this.y,s=this.z,r=this.w;this.conjugate(e);const o=1/(t*t+i*i+s*s+r*r);return e.x*=o,e.y*=o,e.z*=o,e.w*=o,e}conjugate(e){return e===void 0&&(e=new Mi),e.x=-this.x,e.y=-this.y,e.z=-this.z,e.w=this.w,e}normalize(){let e=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);return e===0?(this.x=0,this.y=0,this.z=0,this.w=0):(e=1/e,this.x*=e,this.y*=e,this.z*=e,this.w*=e),this}normalizeFast(){const e=(3-(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w))/2;return e===0?(this.x=0,this.y=0,this.z=0,this.w=0):(this.x*=e,this.y*=e,this.z*=e,this.w*=e),this}vmult(e,t){t===void 0&&(t=new z);const i=e.x,s=e.y,r=e.z,o=this.x,a=this.y,l=this.z,c=this.w,u=c*i+a*r-l*s,C=c*s+l*i-o*r,d=c*r+o*s-a*i,h=-o*i-a*s-l*r;return t.x=u*c+h*-o+C*-l-d*-a,t.y=C*c+h*-a+d*-o-u*-l,t.z=d*c+h*-l+u*-a-C*-o,t}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w,this}toEuler(e,t){t===void 0&&(t="YZX");let i,s,r;const o=this.x,a=this.y,l=this.z,c=this.w;switch(t){case"YZX":const u=o*a+l*c;if(u>.499&&(i=2*Math.atan2(o,c),s=Math.PI/2,r=0),u<-.499&&(i=-2*Math.atan2(o,c),s=-Math.PI/2,r=0),i===void 0){const C=o*o,d=a*a,h=l*l;i=Math.atan2(2*a*c-2*o*l,1-2*d-2*h),s=Math.asin(2*u),r=Math.atan2(2*o*c-2*a*l,1-2*C-2*h)}break;default:throw new Error(`Euler order ${t} not supported yet.`)}e.y=i,e.z=s,e.x=r}setFromEuler(e,t,i,s){s===void 0&&(s="XYZ");const r=Math.cos(e/2),o=Math.cos(t/2),a=Math.cos(i/2),l=Math.sin(e/2),c=Math.sin(t/2),u=Math.sin(i/2);return s==="XYZ"?(this.x=l*o*a+r*c*u,this.y=r*c*a-l*o*u,this.z=r*o*u+l*c*a,this.w=r*o*a-l*c*u):s==="YXZ"?(this.x=l*o*a+r*c*u,this.y=r*c*a-l*o*u,this.z=r*o*u-l*c*a,this.w=r*o*a+l*c*u):s==="ZXY"?(this.x=l*o*a-r*c*u,this.y=r*c*a+l*o*u,this.z=r*o*u+l*c*a,this.w=r*o*a-l*c*u):s==="ZYX"?(this.x=l*o*a-r*c*u,this.y=r*c*a+l*o*u,this.z=r*o*u-l*c*a,this.w=r*o*a+l*c*u):s==="YZX"?(this.x=l*o*a+r*c*u,this.y=r*c*a+l*o*u,this.z=r*o*u-l*c*a,this.w=r*o*a-l*c*u):s==="XZY"&&(this.x=l*o*a-r*c*u,this.y=r*c*a-l*o*u,this.z=r*o*u+l*c*a,this.w=r*o*a+l*c*u),this}clone(){return new Mi(this.x,this.y,this.z,this.w)}slerp(e,t,i){i===void 0&&(i=new Mi);const s=this.x,r=this.y,o=this.z,a=this.w;let l=e.x,c=e.y,u=e.z,C=e.w,d,h,m,y,v;return h=s*l+r*c+o*u+a*C,h<0&&(h=-h,l=-l,c=-c,u=-u,C=-C),1-h>1e-6?(d=Math.acos(h),m=Math.sin(d),y=Math.sin((1-t)*d)/m,v=Math.sin(t*d)/m):(y=1-t,v=t),i.x=y*s+v*l,i.y=y*r+v*c,i.z=y*o+v*u,i.w=y*a+v*C,i}integrate(e,t,i,s){s===void 0&&(s=new Mi);const r=e.x*i.x,o=e.y*i.y,a=e.z*i.z,l=this.x,c=this.y,u=this.z,C=this.w,d=t*.5;return s.x+=d*(r*C+o*u-a*c),s.y+=d*(o*C+a*l-r*u),s.z+=d*(a*C+r*c-o*l),s.w+=d*(-r*l-o*c-a*u),s}}const Dk=new z,Uk=new z,Pk={SPHERE:1,PLANE:2,BOX:4,COMPOUND:8,CONVEXPOLYHEDRON:16,HEIGHTFIELD:32,PARTICLE:64,CYLINDER:128,TRIMESH:256};class qe{constructor(e){e===void 0&&(e={}),this.id=qe.idCounter++,this.type=e.type||0,this.boundingSphereRadius=0,this.collisionResponse=e.collisionResponse?e.collisionResponse:!0,this.collisionFilterGroup=e.collisionFilterGroup!==void 0?e.collisionFilterGroup:1,this.collisionFilterMask=e.collisionFilterMask!==void 0?e.collisionFilterMask:-1,this.material=e.material?e.material:null,this.body=null}updateBoundingSphereRadius(){throw`computeBoundingSphereRadius() not implemented for shape type ${this.type}`}volume(){throw`volume() not implemented for shape type ${this.type}`}calculateLocalInertia(e,t){throw`calculateLocalInertia() not implemented for shape type ${this.type}`}calculateWorldAABB(e,t,i,s){throw`calculateWorldAABB() not implemented for shape type ${this.type}`}}qe.idCounter=0;qe.types=Pk;class Pi{constructor(e){e===void 0&&(e={}),this.position=new z,this.quaternion=new Mi,e.position&&this.position.copy(e.position),e.quaternion&&this.quaternion.copy(e.quaternion)}pointToLocal(e,t){return Pi.pointToLocalFrame(this.position,this.quaternion,e,t)}pointToWorld(e,t){return Pi.pointToWorldFrame(this.position,this.quaternion,e,t)}vectorToWorldFrame(e,t){return t===void 0&&(t=new z),this.quaternion.vmult(e,t),t}static pointToLocalFrame(e,t,i,s){return s===void 0&&(s=new z),i.vsub(e,s),t.conjugate(IS),IS.vmult(s,s),s}static pointToWorldFrame(e,t,i,s){return s===void 0&&(s=new z),t.vmult(i,s),s.vadd(e,s),s}static vectorToWorldFrame(e,t,i){return i===void 0&&(i=new z),e.vmult(t,i),i}static vectorToLocalFrame(e,t,i,s){return s===void 0&&(s=new z),t.w*=-1,t.vmult(i,s),t.w*=-1,s}}const IS=new Mi;new z;new z;new z;new z;new z,new z,new z,new z,new z,new z,new z,new z;new z;new Mi;new ks;new go;new go;new go;new z;new z;new z;new z;new z;new z;new z;new z;new z;new z;new Mi;new z;new z;new z;new z;class Rb{constructor(){this.rayFromWorld=new z,this.rayToWorld=new z,this.hitNormalWorld=new z,this.hitPointWorld=new z,this.hasHit=!1,this.shape=null,this.body=null,this.hitFaceIndex=-1,this.distance=-1,this.shouldStop=!1}reset(){this.rayFromWorld.setZero(),this.rayToWorld.setZero(),this.hitNormalWorld.setZero(),this.hitPointWorld.setZero(),this.hasHit=!1,this.shape=null,this.body=null,this.hitFaceIndex=-1,this.distance=-1,this.shouldStop=!1}abort(){this.shouldStop=!0}set(e,t,i,s,r,o,a){this.rayFromWorld.copy(e),this.rayToWorld.copy(t),this.hitNormalWorld.copy(i),this.hitPointWorld.copy(s),this.shape=r,this.body=o,this.distance=a}}let DV,UV,PV,_V,JV,OV,QV;const Rv={CLOSEST:1,ANY:2,ALL:4};DV=qe.types.SPHERE;UV=qe.types.PLANE;PV=qe.types.BOX;_V=qe.types.CYLINDER;JV=qe.types.CONVEXPOLYHEDRON;OV=qe.types.HEIGHTFIELD;QV=qe.types.TRIMESH;class vi{get[DV](){return this._intersectSphere}get[UV](){return this._intersectPlane}get[PV](){return this._intersectBox}get[_V](){return this._intersectConvex}get[JV](){return this._intersectConvex}get[OV](){return this._intersectHeightfield}get[QV](){return this._intersectTrimesh}constructor(e,t){e===void 0&&(e=new z),t===void 0&&(t=new z),this.from=e.clone(),this.to=t.clone(),this.direction=new z,this.precision=1e-4,this.checkCollisionResponse=!0,this.skipBackfaces=!1,this.collisionFilterMask=-1,this.collisionFilterGroup=-1,this.mode=vi.ANY,this.result=new Rb,this.hasHit=!1,this.callback=i=>{}}intersectWorld(e,t){return this.mode=t.mode||vi.ANY,this.result=t.result||new Rb,this.skipBackfaces=!!t.skipBackfaces,this.collisionFilterMask=typeof t.collisionFilterMask<"u"?t.collisionFilterMask:-1,this.collisionFilterGroup=typeof t.collisionFilterGroup<"u"?t.collisionFilterGroup:-1,this.checkCollisionResponse=typeof t.checkCollisionResponse<"u"?t.checkCollisionResponse:!0,t.from&&this.from.copy(t.from),t.to&&this.to.copy(t.to),this.callback=t.callback||(()=>{}),this.hasHit=!1,this.result.reset(),this.updateDirection(),this.getAABB(uS),Nf.length=0,e.broadphase.aabbQuery(e,uS,Nf),this.intersectBodies(Nf),this.hasHit}intersectBody(e,t){t&&(this.result=t,this.updateDirection());const i=this.checkCollisionResponse;if(i&&!e.collisionResponse||!(this.collisionFilterGroup&e.collisionFilterMask)||!(e.collisionFilterGroup&this.collisionFilterMask))return;const s=_k,r=Jk;for(let o=0,a=e.shapes.length;oe.boundingSphereRadius)return;const a=this[e.type];a&&a.call(this,e,t,i,s,e)}_intersectBox(e,t,i,s,r){return this._intersectConvex(e.convexPolyhedronRepresentation,t,i,s,r)}_intersectPlane(e,t,i,s,r){const o=this.from,a=this.to,l=this.direction,c=new z(0,0,1);t.vmult(c,c);const u=new z;o.vsub(i,u);const C=u.dot(c);a.vsub(i,u);const d=u.dot(c);if(C*d>0||o.distanceTo(a)=0&&y<=1&&(o.lerp(a,y,h),h.vsub(i,m),m.normalize(),this.reportIntersection(m,h,r,s,-1)),this.result.shouldStop)return;v>=0&&v<=1&&(o.lerp(a,v,h),h.vsub(i,m),m.normalize(),this.reportIntersection(m,h,r,s,-1))}}_intersectConvex(e,t,i,s,r,o){const a=$k,l=dS,c=o&&o.faceList||null,u=e.faces,C=e.vertices,d=e.faceNormals,h=this.direction,m=this.from,y=this.to,v=m.distanceTo(y),A=c?c.length:u.length,b=this.result;for(let f=0;!b.shouldStop&&fv||this.reportIntersection(a,Ei,r,s,B)}}}}_intersectTrimesh(e,t,i,s,r,o){const a=eD,l=oD,c=aD,u=dS,C=tD,d=nD,h=iD,m=rD,y=sD,v=e.indices;e.vertices;const A=this.from,b=this.to,f=this.direction;c.position.copy(i),c.quaternion.copy(t),Pi.vectorToLocalFrame(i,t,f,C),Pi.pointToLocalFrame(i,t,A,d),Pi.pointToLocalFrame(i,t,b,h),h.x*=e.scale.x,h.y*=e.scale.y,h.z*=e.scale.z,d.x*=e.scale.x,d.y*=e.scale.y,d.z*=e.scale.z,h.vsub(d,C),C.normalize();const B=d.distanceSquared(h);e.tree.rayQuery(this,c,l);for(let S=0,x=l.length;!this.result.shouldStop&&S!==x;S++){const R=l[S];e.getNormal(R,a),e.getVertex(v[R*3],ir),ir.vsub(d,u);const V=C.dot(a),Z=a.dot(u)/V;if(Z<0)continue;C.scale(Z,Ei),Ei.vadd(d,Ei),e.getVertex(v[R*3+1],Sr),e.getVertex(v[R*3+2],xr);const M=Ei.distanceSquared(d);!(vi.pointInTriangle(Ei,Sr,ir,xr)||vi.pointInTriangle(Ei,ir,Sr,xr))||M>B||(Pi.vectorToWorldFrame(t,a,y),Pi.pointToWorldFrame(i,t,Ei,m),this.reportIntersection(y,m,r,s,R))}l.length=0}reportIntersection(e,t,i,s,r){const o=this.from,a=this.to,l=o.distanceTo(t),c=this.result;if(!(this.skipBackfaces&&e.dot(this.direction)>0))switch(c.hitFaceIndex=typeof r<"u"?r:-1,this.mode){case vi.ALL:this.hasHit=!0,c.set(o,a,e,t,i,s,l),c.hasHit=!0,this.callback(c);break;case vi.CLOSEST:(l=0&&(C=r*c-o*a)>=0&&u+CDate.now()-n}new z;const gD=E.createContext(null),cD=()=>E.useContext(gD),jV=E.createContext(null),ID=()=>{const n=E.useContext(jV);if(!n)throw new Error("Physics context not found. @react-three/cannon & components can only be used within a Physics provider");return n};new X(1,1,1);new X;new Le;const hS=new Ft;function uD(n){const e=E.useRef(null);return n&&typeof n!="function"?n:e}function AS(n){return n.charAt(0).toUpperCase()+n.slice(1)}function ai(n,e){const t=e===void 0?"":`/${e}`;return typeof n=="function"?null:n&&n.current&&`${n.current.uuid}${t}`}const CD=new Vl,dD=new bn,hD=n=>e=>n(CD.setFromQuaternion(dD.fromArray(e)).toArray());let qV=0;function Xf(n,e,t,i,s,r){return r===void 0&&(r="bodies"),o=>{const a=qV++;t[a]={[i]:o};const l=ai(n,s);return l&&e.subscribe({props:{id:a,target:r,type:i},uuid:l}),()=>{delete t[a],e.unsubscribe({props:a})}}}function pS(n,e){let{position:t=[0,0,0],rotation:i=[0,0,0],userData:s={}}=e;n.userData=s,n.position.set(...t),n.rotation.set(...i),n.updateMatrix()}function mS(n,e,t){let{onCollide:i,onCollideBegin:s,onCollideEnd:r}=e;n[t]={collide:i,collideBegin:s,collideEnd:r}}function AD(n,e,t,i,s){i===void 0&&(i=null),s===void 0&&(s=[]);const r=uD(i),{events:o,refs:a,scaleOverrides:l,subscriptions:c,worker:u}=ID(),C=cD();E.useLayoutEffect(()=>{r.current||(r.current=new Ft);const h=r.current,m=u,y=h instanceof $g?(h.instanceMatrix.setUsage(J1),h.count):1,v=h instanceof $g?new Array(y).fill(0).map((b,f)=>`${h.uuid}/${f}`):[h.uuid],A=h instanceof $g?v.map((b,f)=>{const B=e(f);return pS(hS,B),h.setMatrixAt(f,hS.matrix),h.instanceMatrix.needsUpdate=!0,a[b]=h,C?.add(b,B,n),mS(o,B,b),{...B,args:t(B.args)}}):v.map((b,f)=>{const B=e(f);return pS(h,B),a[b]=h,C?.add(b,B,n),mS(o,B,b),{...B,args:t(B.args)}});return m.addBodies({props:A.map(b=>{let{onCollide:f,onCollideBegin:B,onCollideEnd:S,...x}=b;return{onCollide:!!f,...x}}),type:n,uuid:v}),()=>{v.forEach(b=>{delete a[b],C?.remove(b),delete o[b]}),m.removeBodies({uuid:v})}},s);const d=E.useMemo(()=>{const h=(f,B)=>{const S=`set${AS(f)}`;return{set:x=>{const R=ai(r,B);R&&u[S]({props:x,uuid:R})},subscribe:Xf(r,u,c,f,B)}},m=f=>({copy:S=>{let{w:x,x:R,y:V,z:Z}=S;const M=ai(r,f);M&&u.setQuaternion({props:[R,V,Z,x],uuid:M})},set:(S,x,R,V)=>{const Z=ai(r,f);Z&&u.setQuaternion({props:[S,x,R,V],uuid:Z})},subscribe:Xf(r,u,c,"quaternion",f)}),y=f=>({copy:B=>{let{x:S,y:x,z:R}=B;const V=ai(r,f);V&&u.setRotation({props:[S,x,R],uuid:V})},set:(B,S,x)=>{const R=ai(r,f);R&&u.setRotation({props:[B,S,x],uuid:R})},subscribe:B=>{const S=qV++,x="bodies",R="quaternion",V=ai(r,f);return c[S]={[R]:hD(B)},V&&u.subscribe({props:{id:S,target:x,type:R},uuid:V}),()=>{delete c[S],u.unsubscribe({props:S})}}}),v=(f,B)=>{const S=`set${AS(f)}`;return{copy:x=>{let{x:R,y:V,z:Z}=x;const M=ai(r,B);M&&u[S]({props:[R,V,Z],uuid:M})},set:(x,R,V)=>{const Z=ai(r,B);Z&&u[S]({props:[x,R,V],uuid:Z})},subscribe:Xf(r,u,c,f,B)}};function A(f){return{allowSleep:h("allowSleep",f),angularDamping:h("angularDamping",f),angularFactor:v("angularFactor",f),angularVelocity:v("angularVelocity",f),applyForce(B,S){const x=ai(r,f);x&&u.applyForce({props:[B,S],uuid:x})},applyImpulse(B,S){const x=ai(r,f);x&&u.applyImpulse({props:[B,S],uuid:x})},applyLocalForce(B,S){const x=ai(r,f);x&&u.applyLocalForce({props:[B,S],uuid:x})},applyLocalImpulse(B,S){const x=ai(r,f);x&&u.applyLocalImpulse({props:[B,S],uuid:x})},applyTorque(B){const S=ai(r,f);S&&u.applyTorque({props:[B],uuid:S})},collisionFilterGroup:h("collisionFilterGroup",f),collisionFilterMask:h("collisionFilterMask",f),collisionResponse:h("collisionResponse",f),fixedRotation:h("fixedRotation",f),isTrigger:h("isTrigger",f),linearDamping:h("linearDamping",f),linearFactor:v("linearFactor",f),mass:h("mass",f),material:h("material",f),position:v("position",f),quaternion:m(f),rotation:y(f),scaleOverride(B){const S=ai(r,f);S&&(l[S]=new X(...B))},sleep(){const B=ai(r,f);B&&u.sleep({uuid:B})},sleepSpeedLimit:h("sleepSpeedLimit",f),sleepTimeLimit:h("sleepTimeLimit",f),userData:h("userData",f),velocity:v("velocity",f),wakeUp(){const B=ai(r,f);B&&u.wakeUp({uuid:B})}}}const b={};return{...A(void 0),at:f=>b[f]||(b[f]=A(f))}},[]);return[r,d]}function BA(n,e,t){return AD("Sphere",n,function(i){if(i===void 0&&(i=[1]),!Array.isArray(i))throw new Error("useSphere args must be an array");return[i[0]]},e,t)}const pD=new X,mD=new X(1,1,1),fD=new bn,ph=new Le;function fS(n,e,t,i,s){return i===void 0&&(i=mD),n!==void 0?(ph.compose(pD.fromArray(e,n*3),fD.fromArray(t,n*4),i),s&&(s.matrixAutoUpdate=!1,s.matrix.copy(ph)),ph):ph.identity()}const bD=()=>{const n=[];return e=>n.includes(e)?!1:!!n.push(e)};function yD(n){let{allowSleep:e=!1,axisIndex:t=0,broadphase:i="Naive",children:s,defaultContactMaterial:r={contactEquationStiffness:1e6},frictionGravity:o=null,gravity:a=[0,-9.81,0],isPaused:l=!1,iterations:c=5,maxSubSteps:u=10,quatNormalizeFast:C=!1,quatNormalizeSkip:d=0,shouldInvalidate:h=!0,size:m=1e3,solver:y="GS",stepSize:v=1/60,tolerance:A=.001}=n;const{invalidate:b}=Zn(),[{bodies:f,events:B,refs:S,scaleOverrides:x,subscriptions:R,worker:V}]=E.useState(()=>({bodies:{},events:{},refs:{},scaleOverrides:{},subscriptions:{},worker:new mk({allowSleep:e,axisIndex:t,broadphase:i,defaultContactMaterial:r,frictionGravity:o,gravity:a,iterations:c,quatNormalizeFast:C,quatNormalizeSkip:d,size:m,solver:y,tolerance:A})}));let Z=0;const M=E.useCallback((le,L)=>{l||(Z+=L,V.step({maxSubSteps:u,stepSize:v,timeSinceLastCalled:Z}),Z=0)},[l,u,v]),H=le=>{var L;let{body:P,contact:{bi:O,bj:ce,...ge},target:te,...re}=le;const Ze=(L=B[te])==null?void 0:L.collide;Ze&&Ze({body:S[P],contact:{bi:S[O],bj:S[ce],...ge},target:S[te],...re})},U=le=>{var L,P;let{bodyA:O,bodyB:ce}=le;const ge=(L=B[O])==null?void 0:L.collideBegin;ge&&ge({body:S[ce],op:"event",target:S[O],type:"collideBegin"});const te=(P=B[ce])==null?void 0:P.collideBegin;te&&te({body:S[O],op:"event",target:S[ce],type:"collideBegin"})},D=le=>{var L,P;let{bodyA:O,bodyB:ce}=le;const ge=(L=B[O])==null?void 0:L.collideEnd;ge&&ge({body:S[ce],op:"event",target:S[O],type:"collideEnd"});const te=(P=B[ce])==null?void 0:P.collideEnd;te&&te({body:S[O],op:"event",target:S[ce],type:"collideEnd"})},q=le=>{let{active:L,bodies:P=[],observations:O,positions:ce,quaternions:ge}=le;for(let te=0;te{let[re,Ze,we]=te;const tt=(R[re]||{})[we];tt&&tt(Ze)}),!!L){for(const te of Object.values(S).filter(bD()))if(te instanceof $g)for(let re=0;re{var L;let{body:P,ray:{uuid:O,...ce},...ge}=le;const te=(L=B[O])==null?void 0:L.rayhit;te&&te({body:P?S[P]:null,ray:{uuid:O,...ce},...ge})};Fl(M),E.useEffect(()=>(V.connect(),V.init(),V.on("collide",H),V.on("collideBegin",U),V.on("collideEnd",D),V.on("frame",q),V.on("rayhit",ie),()=>{V.terminate(),V.removeAllListeners()}),[]),E.useEffect(()=>{V.axisIndex=t},[t]),E.useEffect(()=>{V.broadphase=i},[i]),E.useEffect(()=>{V.gravity=a},[a]),E.useEffect(()=>{V.iterations=c},[c]),E.useEffect(()=>{V.tolerance=A},[A]);const ue=E.useMemo(()=>({bodies:f,events:B,refs:S,scaleOverrides:x,subscriptions:R,worker:V}),[f,B,S,R,V]);return N.jsx(jV.Provider,{value:ue,children:s})}/** - * postprocessing v6.31.0 build Sun May 07 2023 - * https://github.com/pmndrs/postprocessing - * Copyright 2015-2023 Raoul van Rüschen - * @license Zlib - */var Kl="varying vec2 vUv;void main(){vUv=position.xy*0.5+0.5;gl_Position=vec4(position.xy,1.0,1.0);}",vD=`#ifdef FRAMEBUFFER_PRECISION_HIGH -uniform mediump sampler2D inputBuffer; -#else -uniform lowp sampler2D inputBuffer; -#endif -#if PASS == 1 -uniform vec4 kernel64[32]; -#else -uniform vec4 kernel16[8]; -#endif -uniform lowp sampler2D cocBuffer;uniform vec2 texelSize;uniform float scale;varying vec2 vUv;void main(){ -#ifdef FOREGROUND -vec2 CoCNearFar=texture2D(cocBuffer,vUv).rg;float CoC=CoCNearFar.r*scale; -#else -float CoC=texture2D(cocBuffer,vUv).g*scale; -#endif -if(CoC==0.0){gl_FragColor=texture2D(inputBuffer,vUv);}else{ -#ifdef FOREGROUND -vec2 step=texelSize*max(CoC,CoCNearFar.g*scale); -#else -vec2 step=texelSize*CoC; -#endif -#if PASS == 1 -vec4 acc=vec4(0.0);for(int i=0;i<32;++i){vec4 kernel=kernel64[i];vec2 uv=step*kernel.xy+vUv;acc+=texture2D(inputBuffer,uv);uv=step*kernel.zw+vUv;acc+=texture2D(inputBuffer,uv);}gl_FragColor=acc/64.0; -#else -vec4 maxValue=texture2D(inputBuffer,vUv);for(int i=0;i<8;++i){vec4 kernel=kernel16[i];vec2 uv=step*kernel.xy+vUv;maxValue=max(texture2D(inputBuffer,uv),maxValue);uv=step*kernel.zw+vUv;maxValue=max(texture2D(inputBuffer,uv),maxValue);}gl_FragColor=maxValue; -#endif -}}`,mh=class extends Rt{constructor(n=!1,e=!1){super({name:"BokehMaterial",defines:{PASS:n?"2":"1"},uniforms:{inputBuffer:new ee(null),cocBuffer:new ee(null),texelSize:new ee(new ne),kernel64:new ee(null),kernel16:new ee(null),scale:new ee(1)},blending:sn,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:vD,vertexShader:Kl}),e&&(this.defines.FOREGROUND="1"),this.generateKernel()}set inputBuffer(n){this.uniforms.inputBuffer.value=n}setInputBuffer(n){this.uniforms.inputBuffer.value=n}set cocBuffer(n){this.uniforms.cocBuffer.value=n}setCoCBuffer(n){this.uniforms.cocBuffer.value=n}get scale(){return this.uniforms.scale.value}set scale(n){this.uniforms.scale.value=n}getScale(n){return this.scale}setScale(n){this.scale=n}generateKernel(){const n=2.39996323,e=new Float64Array(128),t=new Float64Array(32);let i=0,s=0;for(let r=0,o=Math.sqrt(80);r<80;++r){const a=r*n,l=Math.sqrt(r)/o,c=l*Math.cos(a),u=l*Math.sin(a);r%5===0?(t[s++]=c,t[s++]=u):(e[i++]=c,e[i++]=u)}this.uniforms.kernel64.value=e,this.uniforms.kernel16.value=t}setTexelSize(n,e){this.uniforms.texelSize.value.set(n,e)}setSize(n,e){this.uniforms.texelSize.value.set(1/n,1/e)}},$V="",Jt="srgb",hc="srgb-linear",GD=Number(ya.replace(/\D+/g,"")),Wv=GD>=152,eM=new Map([[Pu,hc],[zs,Jt]]),BD=new Map([[hc,Pu],[Jt,zs]]);function fo(n){return n===null?null:Wv?n.outputColorSpace:eM.get(n.outputEncoding)}function _n(n,e){n!==null&&(Wv?n.colorSpace=e:n.encoding=BD.get(e))}function Yf(n,e){n===null||e===null||(Wv?e.colorSpace=n.colorSpace:e.encoding=n.encoding)}function kg(n,e,t){return n*(e-t)-e}function cl(n,e,t){return Math.min(Math.max((n+e)/(e-t),0),1)}var ZD=`#include -#include -#ifdef GL_FRAGMENT_PRECISION_HIGH -uniform highp sampler2D depthBuffer; -#else -uniform mediump sampler2D depthBuffer; -#endif -uniform float focusDistance;uniform float focusRange;uniform float cameraNear;uniform float cameraFar;varying vec2 vUv;float readDepth(const in vec2 uv){ -#if DEPTH_PACKING == 3201 -return unpackRGBAToDepth(texture2D(depthBuffer,uv)); -#else -return texture2D(depthBuffer,uv).r; -#endif -}void main(){float depth=readDepth(vUv); -#ifdef PERSPECTIVE_CAMERA -float viewZ=perspectiveDepthToViewZ(depth,cameraNear,cameraFar);float linearDepth=viewZToOrthographicDepth(viewZ,cameraNear,cameraFar); -#else -float linearDepth=depth; -#endif -float signedDistance=linearDepth-focusDistance;float magnitude=smoothstep(0.0,focusRange,abs(signedDistance));gl_FragColor.rg=magnitude*vec2(step(signedDistance,0.0),step(0.0,signedDistance));}`,wD=class extends Rt{constructor(n){super({name:"CircleOfConfusionMaterial",defines:{DEPTH_PACKING:"0"},uniforms:{depthBuffer:new ee(null),focusDistance:new ee(0),focusRange:new ee(0),cameraNear:new ee(.3),cameraFar:new ee(1e3)},blending:sn,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:ZD,vertexShader:Kl}),this.uniforms.focalLength=this.uniforms.focusRange,this.copyCameraSettings(n)}get near(){return this.uniforms.cameraNear.value}get far(){return this.uniforms.cameraFar.value}set depthBuffer(n){this.uniforms.depthBuffer.value=n}set depthPacking(n){this.defines.DEPTH_PACKING=n.toFixed(0),this.needsUpdate=!0}setDepthBuffer(n,e=zn){this.depthBuffer=n,this.depthPacking=e}get focusDistance(){return this.uniforms.focusDistance.value}set focusDistance(n){this.uniforms.focusDistance.value=n}get worldFocusDistance(){return-kg(this.focusDistance,this.near,this.far)}set worldFocusDistance(n){this.focusDistance=cl(-n,this.near,this.far)}getFocusDistance(n){this.uniforms.focusDistance.value=n}setFocusDistance(n){this.uniforms.focusDistance.value=n}get focalLength(){return this.focusRange}set focalLength(n){this.focusRange=n}get focusRange(){return this.uniforms.focusRange.value}set focusRange(n){this.uniforms.focusRange.value=n}get worldFocusRange(){return-kg(this.focusRange,this.near,this.far)}set worldFocusRange(n){this.focusRange=cl(-n,this.near,this.far)}getFocalLength(n){return this.focusRange}setFocalLength(n){this.focusRange=n}adoptCameraSettings(n){this.copyCameraSettings(n)}copyCameraSettings(n){n&&(this.uniforms.cameraNear.value=n.near,this.uniforms.cameraFar.value=n.far,n instanceof on?this.defines.PERSPECTIVE_CAMERA="1":delete this.defines.PERSPECTIVE_CAMERA,this.needsUpdate=!0)}},Ct={SKIP:9,SET:30,ADD:0,ALPHA:1,AVERAGE:2,COLOR:3,COLOR_BURN:4,COLOR_DODGE:5,DARKEN:6,DIFFERENCE:7,DIVIDE:8,DST:9,EXCLUSION:10,HARD_LIGHT:11,HARD_MIX:12,HUE:13,INVERT:14,INVERT_RGB:15,LIGHTEN:16,LINEAR_BURN:17,LINEAR_DODGE:18,LINEAR_LIGHT:19,LUMINOSITY:20,MULTIPLY:21,NEGATION:22,NORMAL:23,OVERLAY:24,PIN_LIGHT:25,REFLECT:26,SATURATION:27,SCREEN:28,SOFT_LIGHT:29,SRC:30,SUBTRACT:31,VIVID_LIGHT:32},Dg={RED:0,GREEN:1,BLUE:2,ALPHA:3},NI={FULL:0,SINGLE:1},jI={DEFAULT:0,KEEP_MAX_DEPTH:1,DISCARD_MAX_DEPTH:2},tM={DEPTH:0,LUMA:1,COLOR:2},ts={NONE:0,DEPTH:1,CONVOLUTION:2},kt={FRAGMENT_HEAD:"FRAGMENT_HEAD",FRAGMENT_MAIN_UV:"FRAGMENT_MAIN_UV",FRAGMENT_MAIN_IMAGE:"FRAGMENT_MAIN_IMAGE",VERTEX_HEAD:"VERTEX_HEAD",VERTEX_MAIN_SUPPORT:"VERTEX_MAIN_SUPPORT"},nl={DISABLED:0,SPORADIC:1,CONSTANT_MILD:2,CONSTANT_WILD:3},xc={VERY_SMALL:0,SMALL:1,MEDIUM:2,LARGE:3,VERY_LARGE:4,HUGE:5},SD={SCALE_UP:"lut.scaleup"},qI={DISCARD:0,MULTIPLY:1,MULTIPLY_RGB_SET_ALPHA:2},xD={DISABLED:0,DEPTH:1,CUSTOM:2},wI={LOW:0,MEDIUM:1,HIGH:2,ULTRA:3},RD=`#ifdef FRAMEBUFFER_PRECISION_HIGH -uniform mediump sampler2D inputBuffer; -#else -uniform lowp sampler2D inputBuffer; -#endif -varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;void main(){vec4 sum=texture2D(inputBuffer,vUv0);sum+=texture2D(inputBuffer,vUv1);sum+=texture2D(inputBuffer,vUv2);sum+=texture2D(inputBuffer,vUv3);gl_FragColor=sum*0.25; -#include -}`,WD="uniform vec4 texelSize;uniform float kernel;uniform float scale;varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;void main(){vec2 uv=position.xy*0.5+0.5;vec2 dUv=(texelSize.xy*vec2(kernel)+texelSize.zw)*scale;vUv0=vec2(uv.x-dUv.x,uv.y+dUv.y);vUv1=vec2(uv.x+dUv.x,uv.y+dUv.y);vUv2=vec2(uv.x+dUv.x,uv.y-dUv.y);vUv3=vec2(uv.x-dUv.x,uv.y-dUv.y);gl_Position=vec4(position.xy,1.0,1.0);}",VD=[new Float32Array([0,0]),new Float32Array([0,1,1]),new Float32Array([0,1,1,2]),new Float32Array([0,1,2,2,3]),new Float32Array([0,1,2,3,4,4,5]),new Float32Array([0,1,2,3,4,5,7,8,9,10])],MD=class extends Rt{constructor(n=new Xt){super({name:"KawaseBlurMaterial",uniforms:{inputBuffer:new ee(null),texelSize:new ee(new Xt),scale:new ee(1),kernel:new ee(0)},blending:sn,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:RD,vertexShader:WD}),this.setTexelSize(n.x,n.y),this.kernelSize=xc.MEDIUM}set inputBuffer(n){this.uniforms.inputBuffer.value=n}setInputBuffer(n){this.inputBuffer=n}get kernelSequence(){return VD[this.kernelSize]}get scale(){return this.uniforms.scale.value}set scale(n){this.uniforms.scale.value=n}getScale(){return this.uniforms.scale.value}setScale(n){this.uniforms.scale.value=n}getKernel(){return null}get kernel(){return this.uniforms.kernel.value}set kernel(n){this.uniforms.kernel.value=n}setKernel(n){this.kernel=n}setTexelSize(n,e){this.uniforms.texelSize.value.set(n,e,n*.5,e*.5)}setSize(n,e){const t=1/n,i=1/e;this.uniforms.texelSize.value.set(t,i,t*.5,i*.5)}},ND=`#include -#include -#ifdef FRAMEBUFFER_PRECISION_HIGH -uniform mediump sampler2D inputBuffer; -#else -uniform lowp sampler2D inputBuffer; -#endif -uniform float opacity;varying vec2 vUv;void main(){vec4 texel=texture2D(inputBuffer,vUv);gl_FragColor=opacity*texel; -#include -#include -}`,nM=class extends Rt{constructor(){super({name:"CopyMaterial",uniforms:{inputBuffer:new ee(null),opacity:new ee(1)},blending:sn,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:ND,vertexShader:Kl})}set inputBuffer(n){this.uniforms.inputBuffer.value=n}setInputBuffer(n){this.uniforms.inputBuffer.value=n}getOpacity(n){return this.uniforms.opacity.value}setOpacity(n){this.uniforms.opacity.value=n}},HD=`#include -#include -#ifdef GL_FRAGMENT_PRECISION_HIGH -uniform highp sampler2D depthBuffer; -#else -uniform mediump sampler2D depthBuffer; -#endif -uniform float cameraNear;uniform float cameraFar;varying float vViewZ;varying vec4 vProjTexCoord;void main(){ -#include -vec2 projTexCoord=(vProjTexCoord.xy/vProjTexCoord.w)*0.5+0.5;projTexCoord=clamp(projTexCoord,0.002,0.998); -#if DEPTH_PACKING == 3201 -float fragCoordZ=unpackRGBAToDepth(texture2D(depthBuffer,projTexCoord)); -#else -float fragCoordZ=texture2D(depthBuffer,projTexCoord).r; -#endif -#ifdef PERSPECTIVE_CAMERA -float viewZ=perspectiveDepthToViewZ(fragCoordZ,cameraNear,cameraFar); -#else -float viewZ=orthographicDepthToViewZ(fragCoordZ,cameraNear,cameraFar); -#endif -float depthTest=(-vViewZ>-viewZ)?1.0:0.0;gl_FragColor.rg=vec2(0.0,depthTest);}`,XD=`#include -#include -#include -#include -varying float vViewZ;varying vec4 vProjTexCoord;void main(){ -#include -#include -#include -#include -#include -vViewZ=mvPosition.z;vProjTexCoord=gl_Position; -#include -}`,YD=class extends Rt{constructor(n=null,e){super({name:"DepthComparisonMaterial",defines:{DEPTH_PACKING:"0"},uniforms:{depthBuffer:new ee(null),cameraNear:new ee(.3),cameraFar:new ee(1e3)},blending:sn,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:HD,vertexShader:XD}),this.depthBuffer=n,this.depthPacking=Yr,this.copyCameraSettings(e)}set depthBuffer(n){this.uniforms.depthBuffer.value=n}set depthPacking(n){this.defines.DEPTH_PACKING=n.toFixed(0),this.needsUpdate=!0}setDepthBuffer(n,e=Yr){this.depthBuffer=n,this.depthPacking=e}adoptCameraSettings(n){this.copyCameraSettings(n)}copyCameraSettings(n){n&&(this.uniforms.cameraNear.value=n.near,this.uniforms.cameraFar.value=n.far,n instanceof on?this.defines.PERSPECTIVE_CAMERA="1":delete this.defines.PERSPECTIVE_CAMERA,this.needsUpdate=!0)}},FD=`#include -varying vec2 vUv; -#ifdef NORMAL_DEPTH -#ifdef GL_FRAGMENT_PRECISION_HIGH -uniform highp sampler2D normalDepthBuffer; -#else -uniform mediump sampler2D normalDepthBuffer; -#endif -float readDepth(const in vec2 uv){return texture2D(normalDepthBuffer,uv).a;} -#else -#if INPUT_DEPTH_PACKING == 3201 -uniform lowp sampler2D depthBuffer; -#elif defined(GL_FRAGMENT_PRECISION_HIGH) -uniform highp sampler2D depthBuffer; -#else -uniform mediump sampler2D depthBuffer; -#endif -float readDepth(const in vec2 uv){ -#if INPUT_DEPTH_PACKING == 3201 -return unpackRGBAToDepth(texture2D(depthBuffer,uv)); -#else -return texture2D(depthBuffer,uv).r; -#endif -} -#endif -void main(){ -#if INPUT_DEPTH_PACKING == OUTPUT_DEPTH_PACKING -gl_FragColor=texture2D(depthBuffer,vUv); -#else -float depth=readDepth(vUv); -#if OUTPUT_DEPTH_PACKING == 3201 -gl_FragColor=(depth==1.0)?vec4(1.0):packDepthToRGBA(depth); -#else -gl_FragColor=vec4(vec3(depth),1.0); -#endif -#endif -}`,KD=`varying vec2 vUv; -#if DEPTH_COPY_MODE == 1 -uniform vec2 texelPosition; -#endif -void main(){ -#if DEPTH_COPY_MODE == 1 -vUv=texelPosition; -#else -vUv=position.xy*0.5+0.5; -#endif -gl_Position=vec4(position.xy,1.0,1.0);}`,zD=class extends Rt{constructor(){super({name:"DepthCopyMaterial",defines:{INPUT_DEPTH_PACKING:"0",OUTPUT_DEPTH_PACKING:"0",DEPTH_COPY_MODE:"0"},uniforms:{depthBuffer:new ee(null),texelPosition:new ee(new ne)},blending:sn,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:FD,vertexShader:KD}),this.depthCopyMode=NI.FULL}get depthBuffer(){return this.uniforms.depthBuffer.value}set depthBuffer(n){this.uniforms.depthBuffer.value=n}set inputDepthPacking(n){this.defines.INPUT_DEPTH_PACKING=n.toFixed(0),this.needsUpdate=!0}get outputDepthPacking(){return Number(this.defines.OUTPUT_DEPTH_PACKING)}set outputDepthPacking(n){this.defines.OUTPUT_DEPTH_PACKING=n.toFixed(0),this.needsUpdate=!0}setDepthBuffer(n,e=zn){this.depthBuffer=n,this.inputDepthPacking=e}getInputDepthPacking(){return Number(this.defines.INPUT_DEPTH_PACKING)}setInputDepthPacking(n){this.defines.INPUT_DEPTH_PACKING=n.toFixed(0),this.needsUpdate=!0}getOutputDepthPacking(){return Number(this.defines.OUTPUT_DEPTH_PACKING)}setOutputDepthPacking(n){this.defines.OUTPUT_DEPTH_PACKING=n.toFixed(0),this.needsUpdate=!0}get texelPosition(){return this.uniforms.texelPosition.value}getTexelPosition(){return this.uniforms.texelPosition.value}setTexelPosition(n){this.uniforms.texelPosition.value=n}get mode(){return this.depthCopyMode}set mode(n){this.depthCopyMode=n,this.defines.DEPTH_COPY_MODE=n.toFixed(0),this.needsUpdate=!0}getMode(){return this.mode}setMode(n){this.mode=n}},LD=`#include -#ifdef GL_FRAGMENT_PRECISION_HIGH -uniform highp sampler2D depthBuffer; -#else -uniform mediump sampler2D depthBuffer; -#endif -#ifdef DOWNSAMPLE_NORMALS -uniform lowp sampler2D normalBuffer; -#endif -varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;float readDepth(const in vec2 uv){ -#if DEPTH_PACKING == 3201 -return unpackRGBAToDepth(texture2D(depthBuffer,uv)); -#else -return texture2D(depthBuffer,uv).r; -#endif -}int findBestDepth(const in float samples[4]){float c=(samples[0]+samples[1]+samples[2]+samples[3])*0.25;float distances[]=float[4](abs(c-samples[0]),abs(c-samples[1]),abs(c-samples[2]),abs(c-samples[3]));float maxDistance=max(max(distances[0],distances[1]),max(distances[2],distances[3]));int remaining[3];int rejected[3];int i,j,k;for(i=0,j=0,k=0;i<4;++i){if(distances[i] -#include -#ifdef GL_FRAGMENT_PRECISION_HIGH -uniform highp sampler2D depthBuffer0;uniform highp sampler2D depthBuffer1; -#else -uniform mediump sampler2D depthBuffer0;uniform mediump sampler2D depthBuffer1; -#endif -uniform sampler2D inputBuffer;uniform vec2 cameraNearFar;float getViewZ(const in float depth){ -#ifdef PERSPECTIVE_CAMERA -return perspectiveDepthToViewZ(depth,cameraNearFar.x,cameraNearFar.y); -#else -return orthographicDepthToViewZ(depth,cameraNearFar.x,cameraNearFar.y); -#endif -}varying vec2 vUv;void main(){vec2 depth; -#if DEPTH_PACKING_0 == 3201 -depth.x=unpackRGBAToDepth(texture2D(depthBuffer0,vUv)); -#else -depth.x=texture2D(depthBuffer0,vUv).r; -#endif -#if DEPTH_PACKING_1 == 3201 -depth.y=unpackRGBAToDepth(texture2D(depthBuffer1,vUv)); -#else -depth.y=texture2D(depthBuffer1,vUv).r; -#endif -bool isMaxDepth=(depth.x==1.0); -#ifdef PERSPECTIVE_CAMERA -depth.x=viewZToOrthographicDepth(getViewZ(depth.x),cameraNearFar.x,cameraNearFar.y);depth.y=viewZToOrthographicDepth(getViewZ(depth.y),cameraNearFar.x,cameraNearFar.y); -#endif -#if DEPTH_TEST_STRATEGY == 0 -bool keep=depthTest(depth.x,depth.y); -#elif DEPTH_TEST_STRATEGY == 1 -bool keep=isMaxDepth||depthTest(depth.x,depth.y); -#else -bool keep=!isMaxDepth&&depthTest(depth.x,depth.y); -#endif -if(keep){gl_FragColor=texture2D(inputBuffer,vUv);}else{discard;}}`,iM=class extends Rt{constructor(){super({name:"DepthMaskMaterial",defines:{DEPTH_EPSILON:"0.0001",DEPTH_PACKING_0:"0",DEPTH_PACKING_1:"0",DEPTH_TEST_STRATEGY:jI.KEEP_MAX_DEPTH},uniforms:{inputBuffer:new ee(null),depthBuffer0:new ee(null),depthBuffer1:new ee(null),cameraNearFar:new ee(new ne(1,1))},blending:sn,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:kD,vertexShader:Kl}),this.depthMode=mA}set depthBuffer0(n){this.uniforms.depthBuffer0.value=n}set depthPacking0(n){this.defines.DEPTH_PACKING_0=n.toFixed(0),this.needsUpdate=!0}setDepthBuffer0(n,e=zn){this.depthBuffer0=n,this.depthPacking0=e}set depthBuffer1(n){this.uniforms.depthBuffer1.value=n}set depthPacking1(n){this.defines.DEPTH_PACKING_1=n.toFixed(0),this.needsUpdate=!0}setDepthBuffer1(n,e=zn){this.depthBuffer1=n,this.depthPacking1=e}get maxDepthStrategy(){return Number(this.defines.DEPTH_TEST_STRATEGY)}set maxDepthStrategy(n){this.defines.DEPTH_TEST_STRATEGY=n.toFixed(0),this.needsUpdate=!0}get keepFar(){return this.maxDepthStrategy}set keepFar(n){this.maxDepthStrategy=n?jI.KEEP_MAX_DEPTH:jI.DISCARD_MAX_DEPTH}getMaxDepthStrategy(){return this.maxDepthStrategy}setMaxDepthStrategy(n){this.maxDepthStrategy=n}get epsilon(){return Number(this.defines.DEPTH_EPSILON)}set epsilon(n){this.defines.DEPTH_EPSILON=n.toFixed(16),this.needsUpdate=!0}getEpsilon(){return this.epsilon}setEpsilon(n){this.epsilon=n}get depthMode(){return Number(this.defines.DEPTH_MODE)}set depthMode(n){let e;switch(n){case Yy:e="false";break;case Fy:e="true";break;case bu:e="abs(d1 - d0) <= DEPTH_EPSILON";break;case DA:e="abs(d1 - d0) > DEPTH_EPSILON";break;case mA:e="d0 > d1";break;case fu:e="d0 >= d1";break;case Ky:e="d0 <= d1";break;case zy:default:e="d0 < d1";break}this.defines.DEPTH_MODE=n.toFixed(0),this.defines["depthTest(d0, d1)"]=e,this.needsUpdate=!0}getDepthMode(){return this.depthMode}setDepthMode(n){this.depthMode=n}adoptCameraSettings(n){this.copyCameraSettings(n)}copyCameraSettings(n){n&&(this.uniforms.cameraNearFar.value.set(n.near,n.far),n instanceof on?this.defines.PERSPECTIVE_CAMERA="1":delete this.defines.PERSPECTIVE_CAMERA,this.needsUpdate=!0)}},DD=`#ifdef FRAMEBUFFER_PRECISION_HIGH -uniform mediump sampler2D inputBuffer; -#else -uniform lowp sampler2D inputBuffer; -#endif -#define WEIGHT_INNER 0.125 -#define WEIGHT_OUTER 0.0555555 -varying vec2 vUv;varying vec2 vUv00;varying vec2 vUv01;varying vec2 vUv02;varying vec2 vUv03;varying vec2 vUv04;varying vec2 vUv05;varying vec2 vUv06;varying vec2 vUv07;varying vec2 vUv08;varying vec2 vUv09;varying vec2 vUv10;varying vec2 vUv11;float clampToBorder(const in vec2 uv){return float(uv.s>=0.0&&uv.s<=1.0&&uv.t>=0.0&&uv.t<=1.0);}void main(){vec4 c=vec4(0.0);vec4 w=WEIGHT_INNER*vec4(clampToBorder(vUv00),clampToBorder(vUv01),clampToBorder(vUv02),clampToBorder(vUv03));c+=w.x*texture2D(inputBuffer,vUv00);c+=w.y*texture2D(inputBuffer,vUv01);c+=w.z*texture2D(inputBuffer,vUv02);c+=w.w*texture2D(inputBuffer,vUv03);w=WEIGHT_OUTER*vec4(clampToBorder(vUv04),clampToBorder(vUv05),clampToBorder(vUv06),clampToBorder(vUv07));c+=w.x*texture2D(inputBuffer,vUv04);c+=w.y*texture2D(inputBuffer,vUv05);c+=w.z*texture2D(inputBuffer,vUv06);c+=w.w*texture2D(inputBuffer,vUv07);w=WEIGHT_OUTER*vec4(clampToBorder(vUv08),clampToBorder(vUv09),clampToBorder(vUv10),clampToBorder(vUv11));c+=w.x*texture2D(inputBuffer,vUv08);c+=w.y*texture2D(inputBuffer,vUv09);c+=w.z*texture2D(inputBuffer,vUv10);c+=w.w*texture2D(inputBuffer,vUv11);c+=WEIGHT_OUTER*texture2D(inputBuffer,vUv);gl_FragColor=c; -#include -}`,UD="uniform vec2 texelSize;varying vec2 vUv;varying vec2 vUv00;varying vec2 vUv01;varying vec2 vUv02;varying vec2 vUv03;varying vec2 vUv04;varying vec2 vUv05;varying vec2 vUv06;varying vec2 vUv07;varying vec2 vUv08;varying vec2 vUv09;varying vec2 vUv10;varying vec2 vUv11;void main(){vUv=position.xy*0.5+0.5;vUv00=vUv+texelSize*vec2(-1.0,1.0);vUv01=vUv+texelSize*vec2(1.0,1.0);vUv02=vUv+texelSize*vec2(-1.0,-1.0);vUv03=vUv+texelSize*vec2(1.0,-1.0);vUv04=vUv+texelSize*vec2(-2.0,2.0);vUv05=vUv+texelSize*vec2(0.0,2.0);vUv06=vUv+texelSize*vec2(2.0,2.0);vUv07=vUv+texelSize*vec2(-2.0,0.0);vUv08=vUv+texelSize*vec2(2.0,0.0);vUv09=vUv+texelSize*vec2(-2.0,-2.0);vUv10=vUv+texelSize*vec2(0.0,-2.0);vUv11=vUv+texelSize*vec2(2.0,-2.0);gl_Position=vec4(position.xy,1.0,1.0);}",PD=class extends Rt{constructor(){super({name:"DownsamplingMaterial",uniforms:{inputBuffer:new ee(null),texelSize:new ee(new ne)},blending:sn,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:DD,vertexShader:UD})}set inputBuffer(n){this.uniforms.inputBuffer.value=n}setSize(n,e){this.uniforms.texelSize.value.set(1/n,1/e)}},_D=`varying vec2 vUv;varying vec2 vUv0;varying vec2 vUv1; -#if THREE_REVISION < 143 -#define luminance(v) linearToRelativeLuminance(v) -#endif -#if EDGE_DETECTION_MODE != 0 -varying vec2 vUv2;varying vec2 vUv3;varying vec2 vUv4;varying vec2 vUv5; -#endif -#if EDGE_DETECTION_MODE == 1 -#include -#endif -#if EDGE_DETECTION_MODE == 0 || PREDICATION_MODE == 1 -#ifdef GL_FRAGMENT_PRECISION_HIGH -uniform highp sampler2D depthBuffer; -#else -uniform mediump sampler2D depthBuffer; -#endif -float readDepth(const in vec2 uv){ -#if DEPTH_PACKING == 3201 -return unpackRGBAToDepth(texture2D(depthBuffer,uv)); -#else -return texture2D(depthBuffer,uv).r; -#endif -}vec3 gatherNeighbors(){float p=readDepth(vUv);float pLeft=readDepth(vUv0);float pTop=readDepth(vUv1);return vec3(p,pLeft,pTop);} -#elif PREDICATION_MODE == 2 -uniform sampler2D predicationBuffer;vec3 gatherNeighbors(){float p=texture2D(predicationBuffer,vUv).r;float pLeft=texture2D(predicationBuffer,vUv0).r;float pTop=texture2D(predicationBuffer,vUv1).r;return vec3(p,pLeft,pTop);} -#endif -#if PREDICATION_MODE != 0 -vec2 calculatePredicatedThreshold(){vec3 neighbours=gatherNeighbors();vec2 delta=abs(neighbours.xx-neighbours.yz);vec2 edges=step(PREDICATION_THRESHOLD,delta);return PREDICATION_SCALE*EDGE_THRESHOLD*(1.0-PREDICATION_STRENGTH*edges);} -#endif -#if EDGE_DETECTION_MODE != 0 -uniform sampler2D inputBuffer; -#endif -void main(){ -#if EDGE_DETECTION_MODE == 0 -const vec2 threshold=vec2(DEPTH_THRESHOLD); -#elif PREDICATION_MODE != 0 -vec2 threshold=calculatePredicatedThreshold(); -#else -const vec2 threshold=vec2(EDGE_THRESHOLD); -#endif -#if EDGE_DETECTION_MODE == 0 -vec3 neighbors=gatherNeighbors();vec2 delta=abs(neighbors.xx-vec2(neighbors.y,neighbors.z));vec2 edges=step(threshold,delta);if(dot(edges,vec2(1.0))==0.0){discard;}gl_FragColor=vec4(edges,0.0,1.0); -#elif EDGE_DETECTION_MODE == 1 -float l=luminance(texture2D(inputBuffer,vUv).rgb);float lLeft=luminance(texture2D(inputBuffer,vUv0).rgb);float lTop=luminance(texture2D(inputBuffer,vUv1).rgb);vec4 delta;delta.xy=abs(l-vec2(lLeft,lTop));vec2 edges=step(threshold,delta.xy);if(dot(edges,vec2(1.0))==0.0){discard;}float lRight=luminance(texture2D(inputBuffer,vUv2).rgb);float lBottom=luminance(texture2D(inputBuffer,vUv3).rgb);delta.zw=abs(l-vec2(lRight,lBottom));vec2 maxDelta=max(delta.xy,delta.zw);float lLeftLeft=luminance(texture2D(inputBuffer,vUv4).rgb);float lTopTop=luminance(texture2D(inputBuffer,vUv5).rgb);delta.zw=abs(vec2(lLeft,lTop)-vec2(lLeftLeft,lTopTop));maxDelta=max(maxDelta.xy,delta.zw);float finalDelta=max(maxDelta.x,maxDelta.y);edges.xy*=step(finalDelta,LOCAL_CONTRAST_ADAPTATION_FACTOR*delta.xy);gl_FragColor=vec4(edges,0.0,1.0); -#elif EDGE_DETECTION_MODE == 2 -vec4 delta;vec3 c=texture2D(inputBuffer,vUv).rgb;vec3 cLeft=texture2D(inputBuffer,vUv0).rgb;vec3 t=abs(c-cLeft);delta.x=max(max(t.r,t.g),t.b);vec3 cTop=texture2D(inputBuffer,vUv1).rgb;t=abs(c-cTop);delta.y=max(max(t.r,t.g),t.b);vec2 edges=step(threshold,delta.xy);if(dot(edges,vec2(1.0))==0.0){discard;}vec3 cRight=texture2D(inputBuffer,vUv2).rgb;t=abs(c-cRight);delta.z=max(max(t.r,t.g),t.b);vec3 cBottom=texture2D(inputBuffer,vUv3).rgb;t=abs(c-cBottom);delta.w=max(max(t.r,t.g),t.b);vec2 maxDelta=max(delta.xy,delta.zw);vec3 cLeftLeft=texture2D(inputBuffer,vUv4).rgb;t=abs(c-cLeftLeft);delta.z=max(max(t.r,t.g),t.b);vec3 cTopTop=texture2D(inputBuffer,vUv5).rgb;t=abs(c-cTopTop);delta.w=max(max(t.r,t.g),t.b);maxDelta=max(maxDelta.xy,delta.zw);float finalDelta=max(maxDelta.x,maxDelta.y);edges*=step(finalDelta,LOCAL_CONTRAST_ADAPTATION_FACTOR*delta.xy);gl_FragColor=vec4(edges,0.0,1.0); -#endif -}`,JD=`uniform vec2 texelSize;varying vec2 vUv;varying vec2 vUv0;varying vec2 vUv1; -#if EDGE_DETECTION_MODE != 0 -varying vec2 vUv2;varying vec2 vUv3;varying vec2 vUv4;varying vec2 vUv5; -#endif -void main(){vUv=position.xy*0.5+0.5;vUv0=vUv+texelSize*vec2(-1.0,0.0);vUv1=vUv+texelSize*vec2(0.0,-1.0); -#if EDGE_DETECTION_MODE != 0 -vUv2=vUv+texelSize*vec2(1.0,0.0);vUv3=vUv+texelSize*vec2(0.0,1.0);vUv4=vUv+texelSize*vec2(-2.0,0.0);vUv5=vUv+texelSize*vec2(0.0,-2.0); -#endif -gl_Position=vec4(position.xy,1.0,1.0);}`,OD=class extends Rt{constructor(n=new ne,e=tM.COLOR){super({name:"EdgeDetectionMaterial",defines:{THREE_REVISION:ya.replace(/\D+/g,""),LOCAL_CONTRAST_ADAPTATION_FACTOR:"2.0",EDGE_THRESHOLD:"0.1",DEPTH_THRESHOLD:"0.01",PREDICATION_MODE:"0",PREDICATION_THRESHOLD:"0.01",PREDICATION_SCALE:"2.0",PREDICATION_STRENGTH:"1.0",DEPTH_PACKING:"0"},uniforms:{inputBuffer:new ee(null),depthBuffer:new ee(null),predicationBuffer:new ee(null),texelSize:new ee(n)},blending:sn,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:_D,vertexShader:JD}),this.edgeDetectionMode=e}set depthBuffer(n){this.uniforms.depthBuffer.value=n}set depthPacking(n){this.defines.DEPTH_PACKING=n.toFixed(0),this.needsUpdate=!0}setDepthBuffer(n,e=zn){this.depthBuffer=n,this.depthPacking=e}get edgeDetectionMode(){return Number(this.defines.EDGE_DETECTION_MODE)}set edgeDetectionMode(n){this.defines.EDGE_DETECTION_MODE=n.toFixed(0),this.needsUpdate=!0}getEdgeDetectionMode(){return this.edgeDetectionMode}setEdgeDetectionMode(n){this.edgeDetectionMode=n}get localContrastAdaptationFactor(){return Number(this.defines.LOCAL_CONTRAST_ADAPTATION_FACTOR)}set localContrastAdaptationFactor(n){this.defines.LOCAL_CONTRAST_ADAPTATION_FACTOR=n.toFixed("6"),this.needsUpdate=!0}getLocalContrastAdaptationFactor(){return this.localContrastAdaptationFactor}setLocalContrastAdaptationFactor(n){this.localContrastAdaptationFactor=n}get edgeDetectionThreshold(){return Number(this.defines.EDGE_THRESHOLD)}set edgeDetectionThreshold(n){this.defines.EDGE_THRESHOLD=n.toFixed("6"),this.defines.DEPTH_THRESHOLD=(n*.1).toFixed("6"),this.needsUpdate=!0}getEdgeDetectionThreshold(){return this.edgeDetectionThreshold}setEdgeDetectionThreshold(n){this.edgeDetectionThreshold=n}get predicationMode(){return Number(this.defines.PREDICATION_MODE)}set predicationMode(n){this.defines.PREDICATION_MODE=n.toFixed(0),this.needsUpdate=!0}getPredicationMode(){return this.predicationMode}setPredicationMode(n){this.predicationMode=n}set predicationBuffer(n){this.uniforms.predicationBuffer.value=n}setPredicationBuffer(n){this.uniforms.predicationBuffer.value=n}get predicationThreshold(){return Number(this.defines.PREDICATION_THRESHOLD)}set predicationThreshold(n){this.defines.PREDICATION_THRESHOLD=n.toFixed("6"),this.needsUpdate=!0}getPredicationThreshold(){return this.predicationThreshold}setPredicationThreshold(n){this.predicationThreshold=n}get predicationScale(){return Number(this.defines.PREDICATION_SCALE)}set predicationScale(n){this.defines.PREDICATION_SCALE=n.toFixed("6"),this.needsUpdate=!0}getPredicationScale(){return this.predicationScale}setPredicationScale(n){this.predicationScale=n}get predicationStrength(){return Number(this.defines.PREDICATION_STRENGTH)}set predicationStrength(n){this.defines.PREDICATION_STRENGTH=n.toFixed("6"),this.needsUpdate=!0}getPredicationStrength(){return this.predicationStrength}setPredicationStrength(n){this.predicationStrength=n}setSize(n,e){this.uniforms.texelSize.value.set(1/n,1/e)}},QD=`#include -#include -#include -#define packFloatToRGBA(v) packDepthToRGBA(v) -#define unpackRGBAToFloat(v) unpackRGBAToDepth(v) -#ifdef FRAMEBUFFER_PRECISION_HIGH -uniform mediump sampler2D inputBuffer; -#else -uniform lowp sampler2D inputBuffer; -#endif -#if DEPTH_PACKING == 3201 -uniform lowp sampler2D depthBuffer; -#elif defined(GL_FRAGMENT_PRECISION_HIGH) -uniform highp sampler2D depthBuffer; -#else -uniform mediump sampler2D depthBuffer; -#endif -uniform vec2 resolution;uniform vec2 texelSize;uniform float cameraNear;uniform float cameraFar;uniform float aspect;uniform float time;varying vec2 vUv; -#if THREE_REVISION < 143 -#define luminance(v) linearToRelativeLuminance(v) -#endif -#if THREE_REVISION >= 137 -vec4 sRGBToLinear(const in vec4 value){return vec4(mix(pow(value.rgb*0.9478672986+vec3(0.0521327014),vec3(2.4)),value.rgb*0.0773993808,vec3(lessThanEqual(value.rgb,vec3(0.04045)))),value.a);} -#endif -float readDepth(const in vec2 uv){ -#if DEPTH_PACKING == 3201 -return unpackRGBAToDepth(texture2D(depthBuffer,uv)); -#else -return texture2D(depthBuffer,uv).r; -#endif -}float getViewZ(const in float depth){ -#ifdef PERSPECTIVE_CAMERA -return perspectiveDepthToViewZ(depth,cameraNear,cameraFar); -#else -return orthographicDepthToViewZ(depth,cameraNear,cameraFar); -#endif -}vec3 RGBToHCV(const in vec3 RGB){vec4 P=mix(vec4(RGB.bg,-1.0,2.0/3.0),vec4(RGB.gb,0.0,-1.0/3.0),step(RGB.b,RGB.g));vec4 Q=mix(vec4(P.xyw,RGB.r),vec4(RGB.r,P.yzx),step(P.x,RGB.r));float C=Q.x-min(Q.w,Q.y);float H=abs((Q.w-Q.y)/(6.0*C+EPSILON)+Q.z);return vec3(H,C,Q.x);}vec3 RGBToHSL(const in vec3 RGB){vec3 HCV=RGBToHCV(RGB);float L=HCV.z-HCV.y*0.5;float S=HCV.y/(1.0-abs(L*2.0-1.0)+EPSILON);return vec3(HCV.x,S,L);}vec3 HueToRGB(const in float H){float R=abs(H*6.0-3.0)-1.0;float G=2.0-abs(H*6.0-2.0);float B=2.0-abs(H*6.0-4.0);return clamp(vec3(R,G,B),0.0,1.0);}vec3 HSLToRGB(const in vec3 HSL){vec3 RGB=HueToRGB(HSL.x);float C=(1.0-abs(2.0*HSL.z-1.0))*HSL.y;return(RGB-0.5)*C+HSL.z;}FRAGMENT_HEAD void main(){FRAGMENT_MAIN_UV vec4 color0=texture2D(inputBuffer,UV);vec4 color1=vec4(0.0);FRAGMENT_MAIN_IMAGE gl_FragColor=color0; -#ifdef ENCODE_OUTPUT -#include -#endif -#include -}`,jD="uniform vec2 resolution;uniform vec2 texelSize;uniform float cameraNear;uniform float cameraFar;uniform float aspect;uniform float time;varying vec2 vUv;VERTEX_HEAD void main(){vUv=position.xy*0.5+0.5;VERTEX_MAIN_SUPPORT gl_Position=vec4(position.xy,1.0,1.0);}",qD=class extends Rt{constructor(n,e,t,i,s=!1){super({name:"EffectMaterial",defines:{THREE_REVISION:ya.replace(/\D+/g,""),DEPTH_PACKING:"0",ENCODE_OUTPUT:"1"},uniforms:{inputBuffer:new ee(null),depthBuffer:new ee(null),resolution:new ee(new ne),texelSize:new ee(new ne),cameraNear:new ee(.3),cameraFar:new ee(1e3),aspect:new ee(1),time:new ee(0)},blending:sn,toneMapped:!1,depthWrite:!1,depthTest:!1,dithering:s}),n&&this.setShaderParts(n),e&&this.setDefines(e),t&&this.setUniforms(t),this.copyCameraSettings(i)}set inputBuffer(n){this.uniforms.inputBuffer.value=n}setInputBuffer(n){this.uniforms.inputBuffer.value=n}get depthBuffer(){return this.uniforms.depthBuffer.value}set depthBuffer(n){this.uniforms.depthBuffer.value=n}get depthPacking(){return Number(this.defines.DEPTH_PACKING)}set depthPacking(n){this.defines.DEPTH_PACKING=n.toFixed(0),this.needsUpdate=!0}setDepthBuffer(n,e=zn){this.depthBuffer=n,this.depthPacking=e}setShaderData(n){this.setShaderParts(n.shaderParts),this.setDefines(n.defines),this.setUniforms(n.uniforms),this.setExtensions(n.extensions)}setShaderParts(n){return this.fragmentShader=QD.replace(kt.FRAGMENT_HEAD,n.get(kt.FRAGMENT_HEAD)||"").replace(kt.FRAGMENT_MAIN_UV,n.get(kt.FRAGMENT_MAIN_UV)||"").replace(kt.FRAGMENT_MAIN_IMAGE,n.get(kt.FRAGMENT_MAIN_IMAGE)||""),this.vertexShader=jD.replace(kt.VERTEX_HEAD,n.get(kt.VERTEX_HEAD)||"").replace(kt.VERTEX_MAIN_SUPPORT,n.get(kt.VERTEX_MAIN_SUPPORT)||""),this.needsUpdate=!0,this}setDefines(n){for(const e of n.entries())this.defines[e[0]]=e[1];return this.needsUpdate=!0,this}setUniforms(n){for(const e of n.entries())this.uniforms[e[0]]=e[1];return this}setExtensions(n){this.extensions={};for(const e of n)this.extensions[e]=!0;return this}get encodeOutput(){return this.defines.ENCODE_OUTPUT!==void 0}set encodeOutput(n){this.encodeOutput!==n&&(n?this.defines.ENCODE_OUTPUT="1":delete this.defines.ENCODE_OUTPUT,this.needsUpdate=!0)}isOutputEncodingEnabled(n){return this.encodeOutput}setOutputEncodingEnabled(n){this.encodeOutput=n}get time(){return this.uniforms.time.value}set time(n){this.uniforms.time.value=n}setDeltaTime(n){this.uniforms.time.value+=n}adoptCameraSettings(n){this.copyCameraSettings(n)}copyCameraSettings(n){n&&(this.uniforms.cameraNear.value=n.near,this.uniforms.cameraFar.value=n.far,n instanceof on?this.defines.PERSPECTIVE_CAMERA="1":delete this.defines.PERSPECTIVE_CAMERA,this.needsUpdate=!0)}setSize(n,e){const t=this.uniforms;t.resolution.value.set(n,e),t.texelSize.value.set(1/n,1/e),t.aspect.value=n/e}static get Section(){return kt}},$D=`#include -#include -#ifdef FRAMEBUFFER_PRECISION_HIGH -uniform mediump sampler2D inputBuffer; -#else -uniform lowp sampler2D inputBuffer; -#endif -uniform vec2 lightPosition;uniform float exposure;uniform float decay;uniform float density;uniform float weight;uniform float clampMax;varying vec2 vUv;void main(){vec2 coord=vUv;vec2 delta=lightPosition-coord;delta*=1.0/SAMPLES_FLOAT*density;float illuminationDecay=1.0;vec4 color=vec4(0.0);for(int i=0;i -}`,eU=class extends Rt{constructor(n){super({name:"GodRaysMaterial",defines:{SAMPLES_INT:"60",SAMPLES_FLOAT:"60.0"},uniforms:{inputBuffer:new ee(null),lightPosition:new ee(n),density:new ee(1),decay:new ee(1),weight:new ee(1),exposure:new ee(1),clampMax:new ee(1)},blending:sn,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:$D,vertexShader:Kl})}set inputBuffer(n){this.uniforms.inputBuffer.value=n}setInputBuffer(n){this.uniforms.inputBuffer.value=n}get lightPosition(){return this.uniforms.lightPosition.value}getLightPosition(){return this.uniforms.lightPosition.value}setLightPosition(n){this.uniforms.lightPosition.value=n}get density(){return this.uniforms.density.value}set density(n){this.uniforms.density.value=n}getDensity(){return this.uniforms.density.value}setDensity(n){this.uniforms.density.value=n}get decay(){return this.uniforms.decay.value}set decay(n){this.uniforms.decay.value=n}getDecay(){return this.uniforms.decay.value}setDecay(n){this.uniforms.decay.value=n}get weight(){return this.uniforms.weight.value}set weight(n){this.uniforms.weight.value=n}getWeight(){return this.uniforms.weight.value}setWeight(n){this.uniforms.weight.value=n}get exposure(){return this.uniforms.exposure.value}set exposure(n){this.uniforms.exposure.value=n}getExposure(){return this.uniforms.exposure.value}setExposure(n){this.uniforms.exposure.value=n}get maxIntensity(){return this.uniforms.clampMax.value}set maxIntensity(n){this.uniforms.clampMax.value=n}getMaxIntensity(){return this.uniforms.clampMax.value}setMaxIntensity(n){this.uniforms.clampMax.value=n}get samples(){return Number(this.defines.SAMPLES_INT)}set samples(n){const e=Math.floor(n);this.defines.SAMPLES_INT=e.toFixed(0),this.defines.SAMPLES_FLOAT=e.toFixed(1),this.needsUpdate=!0}getSamples(){return this.samples}setSamples(n){this.samples=n}},tU=`#include -#if THREE_REVISION < 143 -#define luminance(v) linearToRelativeLuminance(v) -#endif -#ifdef FRAMEBUFFER_PRECISION_HIGH -uniform mediump sampler2D inputBuffer; -#else -uniform lowp sampler2D inputBuffer; -#endif -#ifdef RANGE -uniform vec2 range; -#elif defined(THRESHOLD) -uniform float threshold;uniform float smoothing; -#endif -varying vec2 vUv;void main(){vec4 texel=texture2D(inputBuffer,vUv);float l=luminance(texel.rgb); -#ifdef RANGE -float low=step(range.x,l);float high=step(l,range.y);l*=low*high; -#elif defined(THRESHOLD) -l=smoothstep(threshold,threshold+smoothing,l); -#endif -#ifdef COLOR -gl_FragColor=vec4(texel.rgb*l,l); -#else -gl_FragColor=vec4(l); -#endif -}`,nU=class extends Rt{constructor(n=!1,e=null){super({name:"LuminanceMaterial",defines:{THREE_REVISION:ya.replace(/\D+/g,"")},uniforms:{inputBuffer:new ee(null),threshold:new ee(0),smoothing:new ee(1),range:new ee(null)},blending:sn,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:tU,vertexShader:Kl}),this.colorOutput=n,this.luminanceRange=e}set inputBuffer(n){this.uniforms.inputBuffer.value=n}setInputBuffer(n){this.uniforms.inputBuffer.value=n}get threshold(){return this.uniforms.threshold.value}set threshold(n){this.smoothing>0||n>0?this.defines.THRESHOLD="1":delete this.defines.THRESHOLD,this.uniforms.threshold.value=n}getThreshold(){return this.threshold}setThreshold(n){this.threshold=n}get smoothing(){return this.uniforms.smoothing.value}set smoothing(n){this.threshold>0||n>0?this.defines.THRESHOLD="1":delete this.defines.THRESHOLD,this.uniforms.smoothing.value=n}getSmoothingFactor(){return this.smoothing}setSmoothingFactor(n){this.smoothing=n}get useThreshold(){return this.threshold>0||this.smoothing>0}set useThreshold(n){}get colorOutput(){return this.defines.COLOR!==void 0}set colorOutput(n){n?this.defines.COLOR="1":delete this.defines.COLOR,this.needsUpdate=!0}isColorOutputEnabled(n){return this.colorOutput}setColorOutputEnabled(n){this.colorOutput=n}get useRange(){return this.luminanceRange!==null}set useRange(n){this.luminanceRange=null}get luminanceRange(){return this.uniforms.range.value}set luminanceRange(n){n!==null?this.defines.RANGE="1":delete this.defines.RANGE,this.uniforms.range.value=n,this.needsUpdate=!0}getLuminanceRange(){return this.luminanceRange}setLuminanceRange(n){this.luminanceRange=n}},iU=`#ifdef FRAMEBUFFER_PRECISION_HIGH -uniform mediump sampler2D inputBuffer; -#else -uniform lowp sampler2D inputBuffer; -#endif -#ifdef MASK_PRECISION_HIGH -uniform mediump sampler2D maskTexture; -#else -uniform lowp sampler2D maskTexture; -#endif -#if MASK_FUNCTION != 0 -uniform float strength; -#endif -varying vec2 vUv;void main(){ -#if COLOR_CHANNEL == 0 -float mask=texture2D(maskTexture,vUv).r; -#elif COLOR_CHANNEL == 1 -float mask=texture2D(maskTexture,vUv).g; -#elif COLOR_CHANNEL == 2 -float mask=texture2D(maskTexture,vUv).b; -#else -float mask=texture2D(maskTexture,vUv).a; -#endif -#if MASK_FUNCTION == 0 -#ifdef INVERTED -mask=step(mask,0.0); -#else -mask=1.0-step(mask,0.0); -#endif -#else -mask=clamp(mask*strength,0.0,1.0); -#ifdef INVERTED -mask=1.0-mask; -#endif -#endif -#if MASK_FUNCTION == 2 -gl_FragColor=vec4(mask*texture2D(inputBuffer,vUv).rgb,mask); -#else -gl_FragColor=mask*texture2D(inputBuffer,vUv); -#endif -}`,sU=class extends Rt{constructor(n=null){super({name:"MaskMaterial",uniforms:{maskTexture:new ee(n),inputBuffer:new ee(null),strength:new ee(1)},blending:sn,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:iU,vertexShader:Kl}),this.colorChannel=Dg.RED,this.maskFunction=qI.DISCARD}set inputBuffer(n){this.uniforms.inputBuffer.value=n}setInputBuffer(n){this.uniforms.inputBuffer.value=n}set maskTexture(n){this.uniforms.maskTexture.value=n,delete this.defines.MASK_PRECISION_HIGH,n.type!==ln&&(this.defines.MASK_PRECISION_HIGH="1"),this.needsUpdate=!0}setMaskTexture(n){this.maskTexture=n}set colorChannel(n){this.defines.COLOR_CHANNEL=n.toFixed(0),this.needsUpdate=!0}setColorChannel(n){this.colorChannel=n}set maskFunction(n){this.defines.MASK_FUNCTION=n.toFixed(0),this.needsUpdate=!0}setMaskFunction(n){this.maskFunction=n}get inverted(){return this.defines.INVERTED!==void 0}set inverted(n){this.inverted&&!n?delete this.defines.INVERTED:n&&(this.defines.INVERTED="1"),this.needsUpdate=!0}isInverted(){return this.inverted}setInverted(n){this.inverted=n}get strength(){return this.uniforms.strength.value}set strength(n){this.uniforms.strength.value=n}getStrength(){return this.strength}setStrength(n){this.strength=n}},rU="uniform lowp sampler2D inputBuffer;varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;void main(){vec2 c0=texture2D(inputBuffer,vUv0).rg;vec2 c1=texture2D(inputBuffer,vUv1).rg;vec2 c2=texture2D(inputBuffer,vUv2).rg;vec2 c3=texture2D(inputBuffer,vUv3).rg;float d0=(c0.x-c1.x)*0.5;float d1=(c2.x-c3.x)*0.5;float d=length(vec2(d0,d1));float a0=min(c0.y,c1.y);float a1=min(c2.y,c3.y);float visibilityFactor=min(a0,a1);gl_FragColor.rg=(1.0-visibilityFactor>0.001)?vec2(d,0.0):vec2(0.0,d);}",oU="uniform vec2 texelSize;varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;void main(){vec2 uv=position.xy*0.5+0.5;vUv0=vec2(uv.x+texelSize.x,uv.y);vUv1=vec2(uv.x-texelSize.x,uv.y);vUv2=vec2(uv.x,uv.y+texelSize.y);vUv3=vec2(uv.x,uv.y-texelSize.y);gl_Position=vec4(position.xy,1.0,1.0);}",aU=class extends Rt{constructor(n=new ne){super({name:"OutlineMaterial",uniforms:{inputBuffer:new ee(null),texelSize:new ee(new ne)},blending:sn,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:rU,vertexShader:oU}),this.uniforms.texelSize.value.set(n.x,n.y),this.uniforms.maskTexture=this.uniforms.inputBuffer}set inputBuffer(n){this.uniforms.inputBuffer.value=n}setInputBuffer(n){this.uniforms.inputBuffer.value=n}setTexelSize(n,e){this.uniforms.texelSize.value.set(n,e)}setSize(n,e){this.uniforms.texelSize.value.set(1/n,1/e)}},lU=`#define sampleLevelZeroOffset(t, coord, offset) texture2D(t, coord + offset * texelSize) -#if __VERSION__ < 300 -#define round(v) floor(v + 0.5) -#endif -#ifdef FRAMEBUFFER_PRECISION_HIGH -uniform mediump sampler2D inputBuffer; -#else -uniform lowp sampler2D inputBuffer; -#endif -uniform lowp sampler2D areaTexture;uniform lowp sampler2D searchTexture;uniform vec2 texelSize;uniform vec2 resolution;varying vec2 vUv;varying vec4 vOffset[3];varying vec2 vPixCoord;void movec(const in bvec2 c,inout vec2 variable,const in vec2 value){if(c.x){variable.x=value.x;}if(c.y){variable.y=value.y;}}void movec(const in bvec4 c,inout vec4 variable,const in vec4 value){movec(c.xy,variable.xy,value.xy);movec(c.zw,variable.zw,value.zw);}vec2 decodeDiagBilinearAccess(in vec2 e){e.r=e.r*abs(5.0*e.r-5.0*0.75);return round(e);}vec4 decodeDiagBilinearAccess(in vec4 e){e.rb=e.rb*abs(5.0*e.rb-5.0*0.75);return round(e);}vec2 searchDiag1(const in vec2 texCoord,const in vec2 dir,out vec2 e){vec4 coord=vec4(texCoord,-1.0,1.0);vec3 t=vec3(texelSize,1.0);for(int i=0;i0.9)){break;}coord.xyz=t*vec3(dir,1.0)+coord.xyz;e=texture2D(inputBuffer,coord.xy).rg;coord.w=dot(e,vec2(0.5));}return coord.zw;}vec2 searchDiag2(const in vec2 texCoord,const in vec2 dir,out vec2 e){vec4 coord=vec4(texCoord,-1.0,1.0);coord.x+=0.25*texelSize.x;vec3 t=vec3(texelSize,1.0);for(int i=0;i0.9)){break;}coord.xyz=t*vec3(dir,1.0)+coord.xyz;e=texture2D(inputBuffer,coord.xy).rg;e=decodeDiagBilinearAccess(e);coord.w=dot(e,vec2(0.5));}return coord.zw;}vec2 areaDiag(const in vec2 dist,const in vec2 e,const in float offset){vec2 texCoord=vec2(AREATEX_MAX_DISTANCE_DIAG,AREATEX_MAX_DISTANCE_DIAG)*e+dist;texCoord=AREATEX_PIXEL_SIZE*texCoord+0.5*AREATEX_PIXEL_SIZE;texCoord.x+=0.5;texCoord.y+=AREATEX_SUBTEX_SIZE*offset;return texture2D(areaTexture,texCoord).rg;}vec2 calculateDiagWeights(const in vec2 texCoord,const in vec2 e,const in vec4 subsampleIndices){vec2 weights=vec2(0.0);vec4 d;vec2 end;if(e.r>0.0){d.xz=searchDiag1(texCoord,vec2(-1.0,1.0),end);d.x+=float(end.y>0.9);}else{d.xz=vec2(0.0);}d.yw=searchDiag1(texCoord,vec2(1.0,-1.0),end);if(d.x+d.y>2.0){vec4 coords=vec4(-d.x+0.25,d.x,d.y,-d.y-0.25)*texelSize.xyxy+texCoord.xyxy;vec4 c;c.xy=sampleLevelZeroOffset(inputBuffer,coords.xy,vec2(-1,0)).rg;c.zw=sampleLevelZeroOffset(inputBuffer,coords.zw,vec2(1,0)).rg;c.yxwz=decodeDiagBilinearAccess(c.xyzw);vec2 cc=vec2(2.0)*c.xz+c.yw;movec(bvec2(step(0.9,d.zw)),cc,vec2(0.0));weights+=areaDiag(d.xy,cc,subsampleIndices.z);}d.xz=searchDiag2(texCoord,vec2(-1.0,-1.0),end);if(sampleLevelZeroOffset(inputBuffer,texCoord,vec2(1,0)).r>0.0){d.yw=searchDiag2(texCoord,vec2(1.0),end);d.y+=float(end.y>0.9);}else{d.yw=vec2(0.0);}if(d.x+d.y>2.0){vec4 coords=vec4(-d.x,-d.x,d.y,d.y)*texelSize.xyxy+texCoord.xyxy;vec4 c;c.x=sampleLevelZeroOffset(inputBuffer,coords.xy,vec2(-1,0)).g;c.y=sampleLevelZeroOffset(inputBuffer,coords.xy,vec2(0,-1)).r;c.zw=sampleLevelZeroOffset(inputBuffer,coords.zw,vec2(1,0)).gr;vec2 cc=vec2(2.0)*c.xz+c.yw;movec(bvec2(step(0.9,d.zw)),cc,vec2(0.0));weights+=areaDiag(d.xy,cc,subsampleIndices.w).gr;}return weights;}float searchLength(const in vec2 e,const in float offset){vec2 scale=SEARCHTEX_SIZE*vec2(0.5,-1.0);vec2 bias=SEARCHTEX_SIZE*vec2(offset,1.0);scale+=vec2(-1.0,1.0);bias+=vec2(0.5,-0.5);scale*=1.0/SEARCHTEX_PACKED_SIZE;bias*=1.0/SEARCHTEX_PACKED_SIZE;return texture2D(searchTexture,scale*e+bias).r;}float searchXLeft(in vec2 texCoord,const in float end){vec2 e=vec2(0.0,1.0);for(int i=0;iend&&e.g>0.8281&&e.r==0.0)){break;}e=texture2D(inputBuffer,texCoord).rg;texCoord=vec2(-2.0,0.0)*texelSize+texCoord;}float offset=-(255.0/127.0)*searchLength(e,0.0)+3.25;return texelSize.x*offset+texCoord.x;}float searchXRight(vec2 texCoord,const in float end){vec2 e=vec2(0.0,1.0);for(int i=0;i0.8281&&e.r==0.0)){break;}e=texture2D(inputBuffer,texCoord).rg;texCoord=vec2(2.0,0.0)*texelSize.xy+texCoord;}float offset=-(255.0/127.0)*searchLength(e,0.5)+3.25;return-texelSize.x*offset+texCoord.x;}float searchYUp(vec2 texCoord,const in float end){vec2 e=vec2(1.0,0.0);for(int i=0;iend&&e.r>0.8281&&e.g==0.0)){break;}e=texture2D(inputBuffer,texCoord).rg;texCoord=-vec2(0.0,2.0)*texelSize.xy+texCoord;}float offset=-(255.0/127.0)*searchLength(e.gr,0.0)+3.25;return texelSize.y*offset+texCoord.y;}float searchYDown(vec2 texCoord,const in float end){vec2 e=vec2(1.0,0.0);for(int i=0;i0.8281&&e.g==0.0)){break;}e=texture2D(inputBuffer,texCoord).rg;texCoord=vec2(0.0,2.0)*texelSize.xy+texCoord;}float offset=-(255.0/127.0)*searchLength(e.gr,0.5)+3.25;return-texelSize.y*offset+texCoord.y;}vec2 area(const in vec2 dist,const in float e1,const in float e2,const in float offset){vec2 texCoord=vec2(AREATEX_MAX_DISTANCE)*round(4.0*vec2(e1,e2))+dist;texCoord=AREATEX_PIXEL_SIZE*texCoord+0.5*AREATEX_PIXEL_SIZE;texCoord.y=AREATEX_SUBTEX_SIZE*offset+texCoord.y;return texture2D(areaTexture,texCoord).rg;}void detectHorizontalCornerPattern(inout vec2 weights,const in vec4 texCoord,const in vec2 d){ -#if !defined(DISABLE_CORNER_DETECTION) -vec2 leftRight=step(d.xy,d.yx);vec2 rounding=(1.0-CORNER_ROUNDING_NORM)*leftRight;rounding/=leftRight.x+leftRight.y;vec2 factor=vec2(1.0);factor.x-=rounding.x*sampleLevelZeroOffset(inputBuffer,texCoord.xy,vec2(0,1)).r;factor.x-=rounding.y*sampleLevelZeroOffset(inputBuffer,texCoord.zw,vec2(1,1)).r;factor.y-=rounding.x*sampleLevelZeroOffset(inputBuffer,texCoord.xy,vec2(0,-2)).r;factor.y-=rounding.y*sampleLevelZeroOffset(inputBuffer,texCoord.zw,vec2(1,-2)).r;weights*=clamp(factor,0.0,1.0); -#endif -}void detectVerticalCornerPattern(inout vec2 weights,const in vec4 texCoord,const in vec2 d){ -#if !defined(DISABLE_CORNER_DETECTION) -vec2 leftRight=step(d.xy,d.yx);vec2 rounding=(1.0-CORNER_ROUNDING_NORM)*leftRight;rounding/=leftRight.x+leftRight.y;vec2 factor=vec2(1.0);factor.x-=rounding.x*sampleLevelZeroOffset(inputBuffer,texCoord.xy,vec2(1,0)).g;factor.x-=rounding.y*sampleLevelZeroOffset(inputBuffer,texCoord.zw,vec2(1,1)).g;factor.y-=rounding.x*sampleLevelZeroOffset(inputBuffer,texCoord.xy,vec2(-2,0)).g;factor.y-=rounding.y*sampleLevelZeroOffset(inputBuffer,texCoord.zw,vec2(-2,1)).g;weights*=clamp(factor,0.0,1.0); -#endif -}void main(){vec4 weights=vec4(0.0);vec4 subsampleIndices=vec4(0.0);vec2 e=texture2D(inputBuffer,vUv).rg;if(e.g>0.0){ -#if !defined(DISABLE_DIAG_DETECTION) -weights.rg=calculateDiagWeights(vUv,e,subsampleIndices);if(weights.r==-weights.g){ -#endif -vec2 d;vec3 coords;coords.x=searchXLeft(vOffset[0].xy,vOffset[2].x);coords.y=vOffset[1].y;d.x=coords.x;float e1=texture2D(inputBuffer,coords.xy).r;coords.z=searchXRight(vOffset[0].zw,vOffset[2].y);d.y=coords.z;d=round(resolution.xx*d+-vPixCoord.xx);vec2 sqrtD=sqrt(abs(d));float e2=sampleLevelZeroOffset(inputBuffer,coords.zy,vec2(1,0)).r;weights.rg=area(sqrtD,e1,e2,subsampleIndices.y);coords.y=vUv.y;detectHorizontalCornerPattern(weights.rg,coords.xyzy,d); -#if !defined(DISABLE_DIAG_DETECTION) -}else{e.r=0.0;} -#endif -}if(e.r>0.0){vec2 d;vec3 coords;coords.y=searchYUp(vOffset[1].xy,vOffset[2].z);coords.x=vOffset[0].x;d.x=coords.y;float e1=texture2D(inputBuffer,coords.xy).g;coords.z=searchYDown(vOffset[1].zw,vOffset[2].w);d.y=coords.z;d=round(resolution.yy*d-vPixCoord.yy);vec2 sqrtD=sqrt(abs(d));float e2=sampleLevelZeroOffset(inputBuffer,coords.xz,vec2(0,1)).g;weights.ba=area(sqrtD,e1,e2,subsampleIndices.x);coords.x=vUv.x;detectVerticalCornerPattern(weights.ba,coords.xyxz,d);}gl_FragColor=weights;}`,gU="uniform vec2 texelSize;uniform vec2 resolution;varying vec2 vUv;varying vec4 vOffset[3];varying vec2 vPixCoord;void main(){vUv=position.xy*0.5+0.5;vPixCoord=vUv*resolution;vOffset[0]=vUv.xyxy+texelSize.xyxy*vec4(-0.25,-0.125,1.25,-0.125);vOffset[1]=vUv.xyxy+texelSize.xyxy*vec4(-0.125,-0.25,-0.125,1.25);vOffset[2]=vec4(vOffset[0].xz,vOffset[1].yw)+vec4(-2.0,2.0,-2.0,2.0)*texelSize.xxyy*MAX_SEARCH_STEPS_FLOAT;gl_Position=vec4(position.xy,1.0,1.0);}",cU=class extends Rt{constructor(n=new ne,e=new ne){super({name:"SMAAWeightsMaterial",defines:{MAX_SEARCH_STEPS_INT:"16",MAX_SEARCH_STEPS_FLOAT:"16.0",MAX_SEARCH_STEPS_DIAG_INT:"8",MAX_SEARCH_STEPS_DIAG_FLOAT:"8.0",CORNER_ROUNDING:"25",CORNER_ROUNDING_NORM:"0.25",AREATEX_MAX_DISTANCE:"16.0",AREATEX_MAX_DISTANCE_DIAG:"20.0",AREATEX_PIXEL_SIZE:"(1.0 / vec2(160.0, 560.0))",AREATEX_SUBTEX_SIZE:"(1.0 / 7.0)",SEARCHTEX_SIZE:"vec2(66.0, 33.0)",SEARCHTEX_PACKED_SIZE:"vec2(64.0, 16.0)"},uniforms:{inputBuffer:new ee(null),searchTexture:new ee(null),areaTexture:new ee(null),resolution:new ee(e),texelSize:new ee(n)},blending:sn,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:lU,vertexShader:gU})}set inputBuffer(n){this.uniforms.inputBuffer.value=n}setInputBuffer(n){this.uniforms.inputBuffer.value=n}get searchTexture(){return this.uniforms.searchTexture.value}set searchTexture(n){this.uniforms.searchTexture.value=n}get areaTexture(){return this.uniforms.areaTexture.value}set areaTexture(n){this.uniforms.areaTexture.value=n}setLookupTextures(n,e){this.searchTexture=n,this.areaTexture=e}get orthogonalSearchSteps(){return Number(this.defines.MAX_SEARCH_STEPS_INT)}set orthogonalSearchSteps(n){const e=Math.min(Math.max(n,0),112);this.defines.MAX_SEARCH_STEPS_INT=e.toFixed("0"),this.defines.MAX_SEARCH_STEPS_FLOAT=e.toFixed("1"),this.needsUpdate=!0}setOrthogonalSearchSteps(n){this.orthogonalSearchSteps=n}get diagonalSearchSteps(){return Number(this.defines.MAX_SEARCH_STEPS_DIAG_INT)}set diagonalSearchSteps(n){const e=Math.min(Math.max(n,0),20);this.defines.MAX_SEARCH_STEPS_DIAG_INT=e.toFixed("0"),this.defines.MAX_SEARCH_STEPS_DIAG_FLOAT=e.toFixed("1"),this.needsUpdate=!0}setDiagonalSearchSteps(n){this.diagonalSearchSteps=n}get diagonalDetection(){return this.defines.DISABLE_DIAG_DETECTION===void 0}set diagonalDetection(n){n?delete this.defines.DISABLE_DIAG_DETECTION:this.defines.DISABLE_DIAG_DETECTION="1",this.needsUpdate=!0}isDiagonalDetectionEnabled(){return this.diagonalDetection}setDiagonalDetectionEnabled(n){this.diagonalDetection=n}get cornerRounding(){return Number(this.defines.CORNER_ROUNDING)}set cornerRounding(n){const e=Math.min(Math.max(n,0),100);this.defines.CORNER_ROUNDING=e.toFixed("4"),this.defines.CORNER_ROUNDING_NORM=(e/100).toFixed("4"),this.needsUpdate=!0}setCornerRounding(n){this.cornerRounding=n}get cornerDetection(){return this.defines.DISABLE_CORNER_DETECTION===void 0}set cornerDetection(n){n?delete this.defines.DISABLE_CORNER_DETECTION:this.defines.DISABLE_CORNER_DETECTION="1",this.needsUpdate=!0}isCornerRoundingEnabled(){return this.cornerDetection}setCornerRoundingEnabled(n){this.cornerDetection=n}setSize(n,e){const t=this.uniforms;t.texelSize.value.set(1/n,1/e),t.resolution.value.set(n,e)}},IU=`#include -#include -#ifdef NORMAL_DEPTH -#ifdef GL_FRAGMENT_PRECISION_HIGH -uniform highp sampler2D normalDepthBuffer; -#else -uniform mediump sampler2D normalDepthBuffer; -#endif -float readDepth(const in vec2 uv){return texture2D(normalDepthBuffer,uv).a;} -#else -uniform lowp sampler2D normalBuffer; -#if DEPTH_PACKING == 3201 -uniform lowp sampler2D depthBuffer; -#elif defined(GL_FRAGMENT_PRECISION_HIGH) -uniform highp sampler2D depthBuffer; -#else -uniform mediump sampler2D depthBuffer; -#endif -float readDepth(const in vec2 uv){ -#if DEPTH_PACKING == 3201 -return unpackRGBAToDepth(texture2D(depthBuffer,uv)); -#else -return texture2D(depthBuffer,uv).r; -#endif -} -#endif -uniform lowp sampler2D noiseTexture;uniform mat4 inverseProjectionMatrix;uniform mat4 projectionMatrix;uniform vec2 texelSize;uniform vec2 cameraNearFar;uniform float intensity;uniform float minRadiusScale;uniform float fade;uniform float bias;uniform vec2 distanceCutoff;uniform vec2 proximityCutoff;varying vec2 vUv;varying vec2 vUv2;float getViewZ(const in float depth){ -#ifdef PERSPECTIVE_CAMERA -return perspectiveDepthToViewZ(depth,cameraNearFar.x,cameraNearFar.y); -#else -return orthographicDepthToViewZ(depth,cameraNearFar.x,cameraNearFar.y); -#endif -}vec3 getViewPosition(const in vec2 screenPosition,const in float depth,const in float viewZ){vec4 clipPosition=vec4(vec3(screenPosition,depth)*2.0-1.0,1.0);float clipW=projectionMatrix[2][3]*viewZ+projectionMatrix[3][3];clipPosition*=clipW;return(inverseProjectionMatrix*clipPosition).xyz;}float getAmbientOcclusion(const in vec3 p,const in vec3 n,const in float depth,const in vec2 uv){float radiusScale=1.0-smoothstep(0.0,distanceCutoff.y,depth);radiusScale=radiusScale*(1.0-minRadiusScale)+minRadiusScale;float radius=RADIUS*radiusScale;float noise=texture2D(noiseTexture,vUv2).r;float baseAngle=noise*PI2;float rings=SPIRAL_TURNS*PI2;float occlusion=0.0;int taps=0;for(int i=0;i1.0||coords.t<0.0||coords.t>1.0){continue;}float sampleDepth=readDepth(coords);float viewZ=getViewZ(sampleDepth); -#ifdef PERSPECTIVE_CAMERA -float linearSampleDepth=viewZToOrthographicDepth(viewZ,cameraNearFar.x,cameraNearFar.y); -#else -float linearSampleDepth=sampleDepth; -#endif -float proximity=abs(depth-linearSampleDepth);if(proximity -}`,hU="uniform vec2 texelSize;varying vec2 vUv;varying vec2 vUv0;varying vec2 vUv1;varying vec2 vUv2;varying vec2 vUv3;varying vec2 vUv4;varying vec2 vUv5;varying vec2 vUv6;varying vec2 vUv7;void main(){vUv=position.xy*0.5+0.5;vUv0=vUv+texelSize*vec2(-1.0,1.0);vUv1=vUv+texelSize*vec2(0.0,1.0);vUv2=vUv+texelSize*vec2(1.0,1.0);vUv3=vUv+texelSize*vec2(-1.0,0.0);vUv4=vUv+texelSize*vec2(1.0,0.0);vUv5=vUv+texelSize*vec2(-1.0,-1.0);vUv6=vUv+texelSize*vec2(0.0,-1.0);vUv7=vUv+texelSize*vec2(1.0,-1.0);gl_Position=vec4(position.xy,1.0,1.0);}",AU=class extends Rt{constructor(){super({name:"UpsamplingMaterial",uniforms:{inputBuffer:new ee(null),supportBuffer:new ee(null),texelSize:new ee(new ne),radius:new ee(.85)},blending:sn,toneMapped:!1,depthWrite:!1,depthTest:!1,fragmentShader:dU,vertexShader:hU})}set inputBuffer(n){this.uniforms.inputBuffer.value=n}set supportBuffer(n){this.uniforms.supportBuffer.value=n}get radius(){return this.uniforms.radius.value}set radius(n){this.uniforms.radius.value=n}setSize(n,e){this.uniforms.texelSize.value.set(1/n,1/e)}},pU=new vc,Lo=null;function mU(){if(Lo===null){const n=new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),e=new Float32Array([0,0,2,0,0,2]);Lo=new vt,Lo.setAttribute!==void 0?(Lo.setAttribute("position",new Dt(n,3)),Lo.setAttribute("uv",new Dt(e,2))):(Lo.addAttribute("position",new Dt(n,3)),Lo.addAttribute("uv",new Dt(e,2)))}return Lo}var Vn=class{constructor(n="Pass",e=new Gl,t=pU){this.name=n,this.renderer=null,this.scene=e,this.camera=t,this.screen=null,this.rtt=!0,this.needsSwap=!0,this.needsDepthTexture=!1,this.enabled=!0}get renderToScreen(){return!this.rtt}set renderToScreen(n){if(this.rtt===n){const e=this.fullscreenMaterial;e!==null&&(e.needsUpdate=!0),this.rtt=!n}}set mainScene(n){}set mainCamera(n){}setRenderer(n){this.renderer=n}isEnabled(){return this.enabled}setEnabled(n){this.enabled=n}get fullscreenMaterial(){return this.screen!==null?this.screen.material:null}set fullscreenMaterial(n){let e=this.screen;e!==null?e.material=n:(e=new Un(mU(),n),e.frustumCulled=!1,this.scene===null&&(this.scene=new Gl),this.scene.add(e),this.screen=e)}getFullscreenMaterial(){return this.fullscreenMaterial}setFullscreenMaterial(n){this.fullscreenMaterial=n}getDepthTexture(){return null}setDepthTexture(n,e=zn){}render(n,e,t,i,s){throw new Error("Render method not implemented!")}setSize(n,e){}initialize(n,e,t){}dispose(){for(const n of Object.keys(this)){const e=this[n];(e instanceof Nt||e instanceof Qn||e instanceof en||e instanceof Vn)&&this[n].dispose()}}},sM=class extends Vn{constructor(n,e=!0){super("CopyPass"),this.fullscreenMaterial=new nM,this.needsSwap=!1,this.renderTarget=n,n===void 0&&(this.renderTarget=new Nt(1,1,{minFilter:et,magFilter:et,stencilBuffer:!1,depthBuffer:!1}),this.renderTarget.texture.name="CopyPass.Target"),this.autoResize=e}get resize(){return this.autoResize}set resize(n){this.autoResize=n}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}setAutoResizeEnabled(n){this.autoResize=n}render(n,e,t,i,s){this.fullscreenMaterial.inputBuffer=e.texture,n.setRenderTarget(this.renderToScreen?null:this.renderTarget),n.render(this.scene,this.camera)}setSize(n,e){this.autoResize&&this.renderTarget.setSize(n,e)}initialize(n,e,t){t!==void 0&&(this.renderTarget.texture.type=t,t!==ln?this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1":fo(n)===Jt&&_n(this.renderTarget.texture,Jt))}},fU=class extends Vn{constructor(){super("ClearMaskPass",null,null),this.needsSwap=!1}render(n,e,t,i,s){const r=n.state.buffers.stencil;r.setLocked(!1),r.setTest(!1)}},bS=new Ne,Rc=class extends Vn{constructor(n=!0,e=!0,t=!1){super("ClearPass",null,null),this.needsSwap=!1,this.color=n,this.depth=e,this.stencil=t,this.overrideClearColor=null,this.overrideClearAlpha=-1}setClearFlags(n,e,t){this.color=n,this.depth=e,this.stencil=t}getOverrideClearColor(){return this.overrideClearColor}setOverrideClearColor(n){this.overrideClearColor=n}getOverrideClearAlpha(){return this.overrideClearAlpha}setOverrideClearAlpha(n){this.overrideClearAlpha=n}render(n,e,t,i,s){const r=this.overrideClearColor,o=this.overrideClearAlpha,a=n.getClearAlpha(),l=r!==null,c=o>=0;l?(n.getClearColor(bS),n.setClearColor(r,c?o:a)):c&&n.setClearAlpha(o),n.setRenderTarget(this.renderToScreen?null:e),n.clear(this.color,this.depth,this.stencil),l?n.setClearColor(bS,a):c&&n.setClearAlpha(a)}},To=-1,Ot=class extends bs{constructor(n,e=To,t=To,i=1){super(),this.resizable=n,this.baseSize=new ne(1,1),this.preferredSize=new ne(e,t),this.target=this.preferredSize,this.s=i,this.effectiveSize=new ne,this.addEventListener("change",()=>this.updateEffectiveSize()),this.updateEffectiveSize()}updateEffectiveSize(){const n=this.baseSize,e=this.preferredSize,t=this.effectiveSize,i=this.scale;e.width!==To?t.width=e.width:e.height!==To?t.width=Math.round(e.height*(n.width/Math.max(n.height,1))):t.width=Math.round(n.width*i),e.height!==To?t.height=e.height:e.width!==To?t.height=Math.round(e.width/Math.max(n.width/Math.max(n.height,1),1)):t.height=Math.round(n.height*i)}get width(){return this.effectiveSize.width}set width(n){this.preferredWidth=n}get height(){return this.effectiveSize.height}set height(n){this.preferredHeight=n}getWidth(){return this.width}getHeight(){return this.height}get scale(){return this.s}set scale(n){this.s!==n&&(this.s=n,this.preferredSize.setScalar(To),this.dispatchEvent({type:"change"}),this.resizable.setSize(this.baseSize.width,this.baseSize.height))}getScale(){return this.scale}setScale(n){this.scale=n}get baseWidth(){return this.baseSize.width}set baseWidth(n){this.baseSize.width!==n&&(this.baseSize.width=n,this.dispatchEvent({type:"change"}),this.resizable.setSize(this.baseSize.width,this.baseSize.height))}getBaseWidth(){return this.baseWidth}setBaseWidth(n){this.baseWidth=n}get baseHeight(){return this.baseSize.height}set baseHeight(n){this.baseSize.height!==n&&(this.baseSize.height=n,this.dispatchEvent({type:"change"}),this.resizable.setSize(this.baseSize.width,this.baseSize.height))}getBaseHeight(){return this.baseHeight}setBaseHeight(n){this.baseHeight=n}setBaseSize(n,e){(this.baseSize.width!==n||this.baseSize.height!==e)&&(this.baseSize.set(n,e),this.dispatchEvent({type:"change"}),this.resizable.setSize(this.baseSize.width,this.baseSize.height))}get preferredWidth(){return this.preferredSize.width}set preferredWidth(n){this.preferredSize.width!==n&&(this.preferredSize.width=n,this.dispatchEvent({type:"change"}),this.resizable.setSize(this.baseSize.width,this.baseSize.height))}getPreferredWidth(){return this.preferredWidth}setPreferredWidth(n){this.preferredWidth=n}get preferredHeight(){return this.preferredSize.height}set preferredHeight(n){this.preferredSize.height!==n&&(this.preferredSize.height=n,this.dispatchEvent({type:"change"}),this.resizable.setSize(this.baseSize.width,this.baseSize.height))}getPreferredHeight(){return this.preferredHeight}setPreferredHeight(n){this.preferredHeight=n}setPreferredSize(n,e){(this.preferredSize.width!==n||this.preferredSize.height!==e)&&(this.preferredSize.set(n,e),this.dispatchEvent({type:"change"}),this.resizable.setSize(this.baseSize.width,this.baseSize.height))}copy(n){this.s=n.scale,this.baseSize.set(n.baseWidth,n.baseHeight),this.preferredSize.set(n.preferredWidth,n.preferredHeight),this.dispatchEvent({type:"change"}),this.resizable.setSize(this.baseSize.width,this.baseSize.height)}static get AUTO_SIZE(){return To}},Ff=!1,yS=class{constructor(n=null){this.originalMaterials=new Map,this.material=null,this.materials=null,this.materialsBackSide=null,this.materialsDoubleSide=null,this.materialsFlatShaded=null,this.materialsFlatShadedBackSide=null,this.materialsFlatShadedDoubleSide=null,this.setMaterial(n),this.meshCount=0,this.replaceMaterial=e=>{if(e.isMesh){let t;if(e.material.flatShading)switch(e.material.side){case Oi:t=this.materialsFlatShadedDoubleSide;break;case Dn:t=this.materialsFlatShadedBackSide;break;default:t=this.materialsFlatShaded;break}else switch(e.material.side){case Oi:t=this.materialsDoubleSide;break;case Dn:t=this.materialsBackSide;break;default:t=this.materials;break}this.originalMaterials.set(e,e.material),e.isSkinnedMesh?e.material=t[2]:e.isInstancedMesh?e.material=t[1]:e.material=t[0],++this.meshCount}}}cloneMaterial(n){if(!(n instanceof Rt))return n.clone();const e=n.uniforms,t=new Map;for(const s in e){const r=e[s].value;r.isRenderTargetTexture&&(e[s].value=null,t.set(s,r))}const i=n.clone();for(const s of t)e[s[0]].value=s[1],i.uniforms[s[0]].value=s[1];return i}setMaterial(n){if(this.disposeMaterials(),this.material=n,n!==null){const e=this.materials=[this.cloneMaterial(n),this.cloneMaterial(n),this.cloneMaterial(n)];for(const t of e)t.uniforms=Object.assign({},n.uniforms),t.side=Xr;e[2].skinning=!0,this.materialsBackSide=e.map(t=>{const i=this.cloneMaterial(t);return i.uniforms=Object.assign({},n.uniforms),i.side=Dn,i}),this.materialsDoubleSide=e.map(t=>{const i=this.cloneMaterial(t);return i.uniforms=Object.assign({},n.uniforms),i.side=Oi,i}),this.materialsFlatShaded=e.map(t=>{const i=this.cloneMaterial(t);return i.uniforms=Object.assign({},n.uniforms),i.flatShading=!0,i}),this.materialsFlatShadedBackSide=e.map(t=>{const i=this.cloneMaterial(t);return i.uniforms=Object.assign({},n.uniforms),i.flatShading=!0,i.side=Dn,i}),this.materialsFlatShadedDoubleSide=e.map(t=>{const i=this.cloneMaterial(t);return i.uniforms=Object.assign({},n.uniforms),i.flatShading=!0,i.side=Oi,i})}}render(n,e,t){const i=n.shadowMap.enabled;if(n.shadowMap.enabled=!1,Ff){const s=this.originalMaterials;this.meshCount=0,e.traverse(this.replaceMaterial),n.render(e,t);for(const r of s)r[0].material=r[1];this.meshCount!==s.size&&s.clear()}else{const s=e.overrideMaterial;e.overrideMaterial=this.material,n.render(e,t),e.overrideMaterial=s}n.shadowMap.enabled=i}disposeMaterials(){if(this.material!==null){const n=this.materials.concat(this.materialsBackSide).concat(this.materialsDoubleSide).concat(this.materialsFlatShaded).concat(this.materialsFlatShadedBackSide).concat(this.materialsFlatShadedDoubleSide);for(const e of n)e.dispose()}}dispose(){this.originalMaterials.clear(),this.disposeMaterials()}static get workaroundEnabled(){return Ff}static set workaroundEnabled(n){Ff=n}},Wc=class extends Vn{constructor(n,e,t=null){super("RenderPass",n,e),this.needsSwap=!1,this.clearPass=new Rc,this.overrideMaterialManager=t===null?null:new yS(t),this.ignoreBackground=!1,this.skipShadowMapUpdate=!1,this.selection=null}set mainScene(n){this.scene=n}set mainCamera(n){this.camera=n}get renderToScreen(){return super.renderToScreen}set renderToScreen(n){super.renderToScreen=n,this.clearPass.renderToScreen=n}get overrideMaterial(){const n=this.overrideMaterialManager;return n!==null?n.material:null}set overrideMaterial(n){const e=this.overrideMaterialManager;n!==null?e!==null?e.setMaterial(n):this.overrideMaterialManager=new yS(n):e!==null&&(e.dispose(),this.overrideMaterialManager=null)}getOverrideMaterial(){return this.overrideMaterial}setOverrideMaterial(n){this.overrideMaterial=n}get clear(){return this.clearPass.enabled}set clear(n){this.clearPass.enabled=n}getSelection(){return this.selection}setSelection(n){this.selection=n}isBackgroundDisabled(){return this.ignoreBackground}setBackgroundDisabled(n){this.ignoreBackground=n}isShadowMapDisabled(){return this.skipShadowMapUpdate}setShadowMapDisabled(n){this.skipShadowMapUpdate=n}getClearPass(){return this.clearPass}render(n,e,t,i,s){const r=this.scene,o=this.camera,a=this.selection,l=o.layers.mask,c=r.background,u=n.shadowMap.autoUpdate,C=this.renderToScreen?null:e;a!==null&&o.layers.set(a.getLayer()),this.skipShadowMapUpdate&&(n.shadowMap.autoUpdate=!1),(this.ignoreBackground||this.clearPass.overrideClearColor!==null)&&(r.background=null),this.clearPass.enabled&&this.clearPass.render(n,e),n.setRenderTarget(C),this.overrideMaterialManager!==null?this.overrideMaterialManager.render(n,r,o):n.render(r,o),o.layers.mask=l,r.background=c,n.shadowMap.autoUpdate=u}},Vv=class extends Vn{constructor(n,e,{renderTarget:t,resolutionScale:i=1,width:s=Ot.AUTO_SIZE,height:r=Ot.AUTO_SIZE,resolutionX:o=s,resolutionY:a=r}={}){super("DepthPass"),this.needsSwap=!1,this.renderPass=new Wc(n,e,new qA({depthPacking:Yr}));const l=this.renderPass;l.skipShadowMapUpdate=!0,l.ignoreBackground=!0;const c=l.getClearPass();c.overrideClearColor=new Ne(16777215),c.overrideClearAlpha=1,this.renderTarget=t,this.renderTarget===void 0&&(this.renderTarget=new Nt(1,1,{minFilter:ft,magFilter:ft}),this.renderTarget.texture.name="DepthPass.Target");const u=this.resolution=new Ot(this,o,a,i);u.addEventListener("change",C=>this.setSize(u.baseWidth,u.baseHeight))}set mainScene(n){this.renderPass.mainScene=n}set mainCamera(n){this.renderPass.mainCamera=n}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}getResolution(){return this.resolution}getResolutionScale(){return this.resolution.scale}setResolutionScale(n){this.resolution.scale=n}render(n,e,t,i,s){const r=this.renderToScreen?null:this.renderTarget;this.renderPass.render(n,r)}setSize(n,e){const t=this.resolution;t.setBaseSize(n,e),this.renderTarget.setSize(t.width,t.height)}},rM=class extends Vn{constructor({normalBuffer:n=null,resolutionScale:e=.5,width:t=Ot.AUTO_SIZE,height:i=Ot.AUTO_SIZE,resolutionX:s=t,resolutionY:r=i}={}){super("DepthDownsamplingPass");const o=new ED;o.normalBuffer=n,this.fullscreenMaterial=o,this.needsDepthTexture=!0,this.needsSwap=!1,this.renderTarget=new Nt(1,1,{minFilter:ft,magFilter:ft,depthBuffer:!1,type:Rn}),this.renderTarget.texture.name="DepthDownsamplingPass.Target",this.renderTarget.texture.generateMipmaps=!1;const a=this.resolution=new Ot(this,s,r,e);a.addEventListener("change",l=>this.setSize(a.baseWidth,a.baseHeight))}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}getResolution(){return this.resolution}setDepthTexture(n,e=zn){this.fullscreenMaterial.depthBuffer=n,this.fullscreenMaterial.depthPacking=e}render(n,e,t,i,s){n.setRenderTarget(this.renderToScreen?null:this.renderTarget),n.render(this.scene,this.camera)}setSize(n,e){const t=this.resolution;t.setBaseSize(n,e),this.renderTarget.setSize(t.width,t.height),this.fullscreenMaterial.setSize(n,e)}initialize(n,e,t){const i=n.getContext();if(!(i.getExtension("EXT_color_buffer_float")||i.getExtension("EXT_color_buffer_half_float")))throw new Error("Rendering to float texture is not supported.")}},bU=class extends Vn{constructor({depthPacking:n=Yr}={}){super("DepthCopyPass");const e=new zD;e.outputDepthPacking=n,this.fullscreenMaterial=e,this.needsDepthTexture=!0,this.needsSwap=!1,this.renderTarget=new Nt(1,1,{type:n===Yr?ln:Rn,minFilter:ft,magFilter:ft,depthBuffer:!1}),this.renderTarget.texture.name="DepthCopyPass.Target"}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}get depthPacking(){return this.fullscreenMaterial.outputDepthPacking}getDepthPacking(){return this.fullscreenMaterial.outputDepthPacking}setDepthTexture(n,e=zn){this.fullscreenMaterial.depthBuffer=n,this.fullscreenMaterial.inputDepthPacking=e}render(n,e,t,i,s){n.setRenderTarget(this.renderToScreen?null:this.renderTarget),n.render(this.scene,this.camera)}setSize(n,e){this.renderTarget.setSize(n,e)}},fh=new Float32Array([255/256/256**3,255/256/256**2,255/256/256,255/256]);function yU(n){return(n[0]*fh[0]+n[1]*fh[1]+n[2]*fh[2]+n[3]*fh[3])/255}var vU=class extends bU{constructor({depthPacking:n=Yr,mode:e=NI.SINGLE}={}){super({depthPacking:n}),this.name="DepthPickingPass",this.fullscreenMaterial.mode=e,this.pixelBuffer=n===Yr?new Uint8Array(4):new Float32Array(4),this.callback=null}readDepth(n){return this.fullscreenMaterial.texelPosition.set(n.x*.5+.5,n.y*.5+.5),new Promise(e=>{this.callback=e})}render(n,e,t,i,s){const r=this.fullscreenMaterial,o=r.mode;if(o===NI.FULL&&super.render(n),this.callback!==null){const a=this.renderTarget,l=this.pixelBuffer,c=a.texture.type!==Rn;let u=0,C=0;if(o===NI.SINGLE)super.render(n);else{const d=r.texelPosition;u=Math.round(d.x*a.width),C=Math.round(d.y*a.height)}n.readRenderTargetPixels(a,u,C,1,1,l),this.callback(c?yU(l):l[0]),this.callback=null}}setSize(n,e){this.fullscreenMaterial.mode===NI.FULL&&super.setSize(n,e)}};function vS(n,e,t){for(const i of e){const s="$1"+n+i.charAt(0).toUpperCase()+i.slice(1),r=new RegExp("([^\\.])(\\b"+i+"\\b)","g");for(const o of t.entries())o[1]!==null&&t.set(o[0],o[1].replace(r,s))}}function GU(n,e,t){let i=e.getFragmentShader(),s=e.getVertexShader();const r=i!==void 0&&/mainImage/.test(i),o=i!==void 0&&/mainUv/.test(i);if(t.attributes|=e.getAttributes(),i===void 0)throw new Error(`Missing fragment shader (${e.name})`);if(o&&t.attributes&ts.CONVOLUTION)throw new Error(`Effects that transform UVs are incompatible with convolution effects (${e.name})`);if(!r&&!o)throw new Error(`Could not find mainImage or mainUv function (${e.name})`);{const a=/\w+\s+(\w+)\([\w\s,]*\)\s*{/g,l=t.shaderParts;let c=l.get(kt.FRAGMENT_HEAD)||"",u=l.get(kt.FRAGMENT_MAIN_UV)||"",C=l.get(kt.FRAGMENT_MAIN_IMAGE)||"",d=l.get(kt.VERTEX_HEAD)||"",h=l.get(kt.VERTEX_MAIN_SUPPORT)||"";const m=new Set,y=new Set;if(o&&(u+=` ${n}MainUv(UV); -`,t.uvTransformation=!0),s!==null&&/mainSupport/.test(s)){const b=/mainSupport *\([\w\s]*?uv\s*?\)/.test(s);h+=` ${n}MainSupport(`,h+=b?`vUv); -`:`); -`;for(const f of s.matchAll(/(?:varying\s+\w+\s+([\S\s]*?);)/g))for(const B of f[1].split(/\s*,\s*/))t.varyings.add(B),m.add(B),y.add(B);for(const f of s.matchAll(a))y.add(f[1])}for(const b of i.matchAll(a))y.add(b[1]);for(const b of e.defines.keys())y.add(b.replace(/\([\w\s,]*\)/g,""));for(const b of e.uniforms.keys())y.add(b);y.delete("while"),y.delete("for"),y.delete("if"),e.uniforms.forEach((b,f)=>t.uniforms.set(n+f.charAt(0).toUpperCase()+f.slice(1),b)),e.defines.forEach((b,f)=>t.defines.set(n+f.charAt(0).toUpperCase()+f.slice(1),b));const v=new Map([["fragment",i],["vertex",s]]);vS(n,y,t.defines),vS(n,y,v),i=v.get("fragment"),s=v.get("vertex");const A=e.blendMode;if(t.blendModes.set(A.blendFunction,A),r){e.inputColorSpace!==null&&e.inputColorSpace!==t.colorSpace&&(C+=e.inputColorSpace===Jt?`color0 = LinearTosRGB(color0); - `:`color0 = sRGBToLinear(color0); - `),e.outputColorSpace!==$V?t.colorSpace=e.outputColorSpace:e.inputColorSpace!==null&&(t.colorSpace=e.inputColorSpace);const b=/MainImage *\([\w\s,]*?depth[\w\s,]*?\)/;C+=`${n}MainImage(color0, UV, `,t.attributes&ts.DEPTH&&b.test(i)&&(C+="depth, ",t.readDepth=!0),C+=`color1); - `;const f=n+"BlendOpacity";t.uniforms.set(f,A.opacity),C+=`color0 = blend${A.blendFunction}(color0, color1, ${f}); - - `,c+=`uniform float ${f}; - -`}if(c+=i+` -`,s!==null&&(d+=s+` -`),l.set(kt.FRAGMENT_HEAD,c),l.set(kt.FRAGMENT_MAIN_UV,u),l.set(kt.FRAGMENT_MAIN_IMAGE,C),l.set(kt.VERTEX_HEAD,d),l.set(kt.VERTEX_MAIN_SUPPORT,h),e.extensions!==null)for(const b of e.extensions)t.extensions.add(b)}}var BU=class extends Vn{constructor(n,...e){super("EffectPass"),this.fullscreenMaterial=new qD(null,null,null,n),this.listener=t=>this.handleEvent(t),this.effects=[],this.setEffects(e),this.skipRendering=!1,this.minTime=1,this.maxTime=Number.POSITIVE_INFINITY,this.timeScale=1}set mainScene(n){for(const e of this.effects)e.mainScene=n}set mainCamera(n){this.fullscreenMaterial.copyCameraSettings(n);for(const e of this.effects)e.mainCamera=n}get encodeOutput(){return this.fullscreenMaterial.encodeOutput}set encodeOutput(n){this.fullscreenMaterial.encodeOutput=n}get dithering(){return this.fullscreenMaterial.dithering}set dithering(n){const e=this.fullscreenMaterial;e.dithering=n,e.needsUpdate=!0}setEffects(n){for(const e of this.effects)e.removeEventListener("change",this.listener);this.effects=n.sort((e,t)=>t.attributes-e.attributes);for(const e of this.effects)e.addEventListener("change",this.listener)}updateMaterial(){const n=new MU;let e=0;for(const o of this.effects)if(o.blendMode.blendFunction===Ct.DST)n.attributes|=o.getAttributes()&ts.DEPTH;else{if(n.attributes&o.getAttributes()&ts.CONVOLUTION)throw new Error(`Convolution effects cannot be merged (${o.name})`);GU("e"+e++,o,n)}let t=n.shaderParts.get(kt.FRAGMENT_HEAD),i=n.shaderParts.get(kt.FRAGMENT_MAIN_IMAGE),s=n.shaderParts.get(kt.FRAGMENT_MAIN_UV);const r=/\bblend\b/g;for(const o of n.blendModes.values())t+=o.getShaderCode().replace(r,`blend${o.blendFunction}`)+` -`;n.attributes&ts.DEPTH?(n.readDepth&&(i=`float depth = readDepth(UV); - - `+i),this.needsDepthTexture=this.getDepthTexture()===null):this.needsDepthTexture=!1,n.colorSpace===Jt&&(i+=`color0 = sRGBToLinear(color0); - `),n.uvTransformation?(s=`vec2 transformedUv = vUv; -`+s,n.defines.set("UV","transformedUv")):n.defines.set("UV","vUv"),n.shaderParts.set(kt.FRAGMENT_HEAD,t),n.shaderParts.set(kt.FRAGMENT_MAIN_IMAGE,i),n.shaderParts.set(kt.FRAGMENT_MAIN_UV,s);for(const[o,a]of n.shaderParts)a!==null&&n.shaderParts.set(o,a.trim().replace(/^#/,` -#`));this.skipRendering=e===0,this.needsSwap=!this.skipRendering,this.fullscreenMaterial.setShaderData(n)}recompile(){this.updateMaterial()}getDepthTexture(){return this.fullscreenMaterial.depthBuffer}setDepthTexture(n,e=zn){this.fullscreenMaterial.depthBuffer=n,this.fullscreenMaterial.depthPacking=e;for(const t of this.effects)t.setDepthTexture(n,e)}render(n,e,t,i,s){for(const r of this.effects)r.update(n,e,i);if(!this.skipRendering||this.renderToScreen){const r=this.fullscreenMaterial;r.inputBuffer=e.texture,r.time+=i*this.timeScale,n.setRenderTarget(this.renderToScreen?null:t),n.render(this.scene,this.camera)}}setSize(n,e){this.fullscreenMaterial.setSize(n,e);for(const t of this.effects)t.setSize(n,e)}initialize(n,e,t){this.renderer=n;for(const i of this.effects)i.initialize(n,e,t);this.updateMaterial(),t!==void 0&&t!==ln&&(this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1")}dispose(){super.dispose();for(const n of this.effects)n.removeEventListener("change",this.listener),n.dispose()}handleEvent(n){switch(n.type){case"change":this.recompile();break}}},Ip=class extends Vn{constructor({kernelSize:n=xc.MEDIUM,resolutionScale:e=.5,width:t=Ot.AUTO_SIZE,height:i=Ot.AUTO_SIZE,resolutionX:s=t,resolutionY:r=i}={}){super("KawaseBlurPass"),this.renderTargetA=new Nt(1,1,{depthBuffer:!1}),this.renderTargetA.texture.name="Blur.Target.A",this.renderTargetB=this.renderTargetA.clone(),this.renderTargetB.texture.name="Blur.Target.B";const o=this.resolution=new Ot(this,s,r,e);o.addEventListener("change",a=>this.setSize(o.baseWidth,o.baseHeight)),this._blurMaterial=new MD,this._blurMaterial.kernelSize=n,this.copyMaterial=new nM}getResolution(){return this.resolution}get blurMaterial(){return this._blurMaterial}set blurMaterial(n){this._blurMaterial=n}get dithering(){return this.copyMaterial.dithering}set dithering(n){this.copyMaterial.dithering=n}get kernelSize(){return this.blurMaterial.kernelSize}set kernelSize(n){this.blurMaterial.kernelSize=n}get width(){return this.resolution.width}set width(n){this.resolution.preferredWidth=n}get height(){return this.resolution.height}set height(n){this.resolution.preferredHeight=n}get scale(){return this.blurMaterial.scale}set scale(n){this.blurMaterial.scale=n}getScale(){return this.blurMaterial.scale}setScale(n){this.blurMaterial.scale=n}getKernelSize(){return this.kernelSize}setKernelSize(n){this.kernelSize=n}getResolutionScale(){return this.resolution.scale}setResolutionScale(n){this.resolution.scale=n}render(n,e,t,i,s){const r=this.scene,o=this.camera,a=this.renderTargetA,l=this.renderTargetB,c=this.blurMaterial,u=c.kernelSequence;let C=e;this.fullscreenMaterial=c;for(let d=0,h=u.length;dthis.setSize(l.baseWidth,l.baseHeight))}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}getResolution(){return this.resolution}render(n,e,t,i,s){const r=this.fullscreenMaterial;r.inputBuffer=e.texture,n.setRenderTarget(this.renderToScreen?null:this.renderTarget),n.render(this.scene,this.camera)}setSize(n,e){const t=this.resolution;t.setBaseSize(n,e),this.renderTarget.setSize(t.width,t.height)}initialize(n,e,t){t!==void 0&&t!==ln&&(this.renderTarget.texture.type=t,this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1")}},wU=class extends Vn{constructor(n,e){super("MaskPass",n,e),this.needsSwap=!1,this.clearPass=new Rc(!1,!1,!0),this.inverse=!1}set mainScene(n){this.scene=n}set mainCamera(n){this.camera=n}get inverted(){return this.inverse}set inverted(n){this.inverse=n}get clear(){return this.clearPass.enabled}set clear(n){this.clearPass.enabled=n}getClearPass(){return this.clearPass}isInverted(){return this.inverted}setInverted(n){this.inverted=n}render(n,e,t,i,s){const r=n.getContext(),o=n.state.buffers,a=this.scene,l=this.camera,c=this.clearPass,u=this.inverted?0:1,C=1-u;o.color.setMask(!1),o.depth.setMask(!1),o.color.setLocked(!0),o.depth.setLocked(!0),o.stencil.setTest(!0),o.stencil.setOp(r.REPLACE,r.REPLACE,r.REPLACE),o.stencil.setFunc(r.ALWAYS,u,4294967295),o.stencil.setClear(C),o.stencil.setLocked(!0),this.clearPass.enabled&&(this.renderToScreen?c.render(n,null):(c.render(n,e),c.render(n,t))),this.renderToScreen?(n.setRenderTarget(null),n.render(a,l)):(n.setRenderTarget(e),n.render(a,l),n.setRenderTarget(t),n.render(a,l)),o.color.setLocked(!1),o.depth.setLocked(!1),o.stencil.setLocked(!1),o.stencil.setFunc(r.EQUAL,1,4294967295),o.stencil.setOp(r.KEEP,r.KEEP,r.KEEP),o.stencil.setLocked(!0)}},SU=class extends Vn{constructor(){super("MipmapBlurPass"),this.needsSwap=!1,this.renderTarget=new Nt(1,1,{depthBuffer:!1}),this.renderTarget.texture.name="Upsampling.Mipmap0",this.downsamplingMipmaps=[],this.upsamplingMipmaps=[],this.downsamplingMaterial=new PD,this.upsamplingMaterial=new AU,this.resolution=new ne}get texture(){return this.renderTarget.texture}get levels(){return this.downsamplingMipmaps.length}set levels(n){if(this.levels!==n){const e=this.renderTarget;this.dispose(),this.downsamplingMipmaps=[],this.upsamplingMipmaps=[];for(let t=0;t=0;--d){const h=u[d];l.setSize(C.width,C.height),l.inputBuffer=C.texture,l.supportBuffer=c[d].texture,n.setRenderTarget(h),n.render(r,o),C=h}}setSize(n,e){const t=this.resolution;t.set(n,e);let i=t.width,s=t.height;for(let r=0,o=this.downsamplingMipmaps.length;rthis.setSize(u.baseWidth,u.baseHeight))}set mainScene(n){this.renderPass.mainScene=n}set mainCamera(n){this.renderPass.mainCamera=n}get texture(){return this.renderTarget.texture}getTexture(){return this.renderTarget.texture}getResolution(){return this.resolution}getResolutionScale(){return this.resolution.scale}setResolutionScale(n){this.resolution.scale=n}render(n,e,t,i,s){const r=this.renderToScreen?null:this.renderTarget;this.renderPass.render(n,r,r)}setSize(n,e){const t=this.resolution;t.setBaseSize(n,e),this.renderTarget.setSize(t.width,t.height)}},cs=class extends Vn{constructor(n,e="inputBuffer"){super("ShaderPass"),this.fullscreenMaterial=n,this.input=e}setInput(n){this.input=n}render(n,e,t,i,s){const r=this.fullscreenMaterial.uniforms;e!==null&&r!==void 0&&r[this.input]!==void 0&&(r[this.input].value=e.texture),n.setRenderTarget(this.renderToScreen?null:t),n.render(this.scene,this.camera)}initialize(n,e,t){t!==void 0&&t!==ln&&(this.fullscreenMaterial.defines.FRAMEBUFFER_PRECISION_HIGH="1")}},Kf=1/1e3,RU=1e3,WU=class{constructor(){this.startTime=performance.now(),this.previousTime=0,this.currentTime=0,this._delta=0,this._elapsed=0,this._fixedDelta=1e3/60,this.timescale=1,this.useFixedDelta=!1,this._autoReset=!1}get autoReset(){return this._autoReset}set autoReset(n){typeof document<"u"&&document.hidden!==void 0&&(n?document.addEventListener("visibilitychange",this):document.removeEventListener("visibilitychange",this),this._autoReset=n)}get delta(){return this._delta*Kf}get fixedDelta(){return this._fixedDelta*Kf}set fixedDelta(n){this._fixedDelta=n*RU}get elapsed(){return this._elapsed*Kf}update(n){this.useFixedDelta?this._delta=this.fixedDelta:(this.previousTime=this.currentTime,this.currentTime=(n!==void 0?n:performance.now())-this.startTime,this._delta=this.currentTime-this.previousTime),this._delta*=this.timescale,this._elapsed+=this._delta}reset(){this._delta=0,this._elapsed=0,this.currentTime=performance.now()-this.startTime}handleEvent(n){document.hidden||(this.currentTime=performance.now()-this.startTime)}dispose(){this.autoReset=!1}},VU=class{constructor(e=null,{depthBuffer:t=!0,stencilBuffer:i=!1,multisampling:s=0,frameBufferType:r}={}){this.renderer=null,this.inputBuffer=this.createBuffer(t,i,r,s),this.outputBuffer=this.inputBuffer.clone(),this.copyPass=new sM,this.depthTexture=null,this.passes=[],this.timer=new WU,this.autoRenderToScreen=!0,this.setRenderer(e)}get multisampling(){return this.inputBuffer.samples||0}set multisampling(e){const t=this.inputBuffer,i=this.multisampling;i>0&&e>0?(this.inputBuffer.samples=e,this.outputBuffer.samples=e,this.inputBuffer.dispose(),this.outputBuffer.dispose()):i!==e&&(this.inputBuffer.dispose(),this.outputBuffer.dispose(),this.inputBuffer=this.createBuffer(t.depthBuffer,t.stencilBuffer,t.texture.type,e),this.inputBuffer.depthTexture=this.depthTexture,this.outputBuffer=this.inputBuffer.clone())}getTimer(){return this.timer}getRenderer(){return this.renderer}setRenderer(e){if(this.renderer=e,e!==null){const t=e.getSize(new ne),i=e.getContext().getContextAttributes().alpha,s=this.inputBuffer.texture.type;s===ln&&fo(e)===Jt&&(_n(this.inputBuffer.texture,Jt),_n(this.outputBuffer.texture,Jt),this.inputBuffer.dispose(),this.outputBuffer.dispose()),e.autoClear=!1,this.setSize(t.width,t.height);for(const r of this.passes)r.initialize(e,i,s)}}replaceRenderer(e,t=!0){const i=this.renderer,s=i.domElement.parentNode;return this.setRenderer(e),t&&s!==null&&(s.removeChild(i.domElement),s.appendChild(e.domElement)),i}createDepthTexture(){const e=this.depthTexture=new $A;return this.inputBuffer.depthTexture=e,this.inputBuffer.dispose(),this.inputBuffer.stencilBuffer?(e.format=Aa,e.type=la):e.type=ao,e}deleteDepthTexture(){if(this.depthTexture!==null){this.depthTexture.dispose(),this.depthTexture=null,this.inputBuffer.depthTexture=null,this.inputBuffer.dispose();for(const e of this.passes)e.setDepthTexture(null)}}createBuffer(e,t,i,s){const r=this.renderer,o=r===null?new ne:r.getDrawingBufferSize(new ne),a={minFilter:et,magFilter:et,stencilBuffer:t,depthBuffer:e,type:i},l=new Nt(o.width,o.height,a);return s>0&&(l.ignoreDepthForMultisampleCopy=!1,l.samples=s),i===ln&&fo(r)===Jt&&_n(l.texture,Jt),l.texture.name="EffectComposer.Buffer",l.texture.generateMipmaps=!1,l}setMainScene(e){for(const t of this.passes)t.mainScene=e}setMainCamera(e){for(const t of this.passes)t.mainCamera=e}addPass(e,t){const i=this.passes,s=this.renderer,r=s.getDrawingBufferSize(new ne),o=s.getContext().getContextAttributes().alpha,a=this.inputBuffer.texture.type;if(e.setRenderer(s),e.setSize(r.width,r.height),e.initialize(s,o,a),this.autoRenderToScreen&&(i.length>0&&(i[i.length-1].renderToScreen=!1),e.renderToScreen&&(this.autoRenderToScreen=!1)),t!==void 0?i.splice(t,0,e):i.push(e),this.autoRenderToScreen&&(i[i.length-1].renderToScreen=!0),e.needsDepthTexture||this.depthTexture!==null)if(this.depthTexture===null){const l=this.createDepthTexture();for(e of i)e.setDepthTexture(l)}else e.setDepthTexture(this.depthTexture)}removePass(e){const t=this.passes,i=t.indexOf(e);if(i!==-1&&t.splice(i,1).length>0){if(this.depthTexture!==null){const o=(l,c)=>l||c.needsDepthTexture;t.reduce(o,!1)||(e.getDepthTexture()===this.depthTexture&&e.setDepthTexture(null),this.deleteDepthTexture())}this.autoRenderToScreen&&i===t.length&&(e.renderToScreen=!1,t.length>0&&(t[t.length-1].renderToScreen=!0))}}removeAllPasses(){const e=this.passes;this.deleteDepthTexture(),e.length>0&&(this.autoRenderToScreen&&(e[e.length-1].renderToScreen=!1),this.passes=[])}render(e){const t=this.renderer,i=this.copyPass;let s=this.inputBuffer,r=this.outputBuffer,o=!1,a,l,c;e===void 0&&(this.timer.update(),e=this.timer.delta);for(const u of this.passes)u.enabled&&(u.render(t,s,r,e,o),u.needsSwap&&(o&&(i.renderToScreen=u.renderToScreen,a=t.getContext(),l=t.state.buffers.stencil,l.setFunc(a.NOTEQUAL,1,4294967295),i.render(t,s,r,e,o),l.setFunc(a.EQUAL,1,4294967295)),c=s,s=r,r=c),u instanceof wU?o=!0:u instanceof fU&&(o=!1))}setSize(e,t,i){const s=this.renderer,r=s.getSize(new ne);(e===void 0||t===void 0)&&(e=r.width,t=r.height),(r.width!==e||r.height!==t)&&s.setSize(e,t,i);const o=s.getDrawingBufferSize(new ne);this.inputBuffer.setSize(o.width,o.height),this.outputBuffer.setSize(o.width,o.height);for(const a of this.passes)a.setSize(o.width,o.height)}reset(){const e=this.timer.autoReset;this.dispose(),this.autoRenderToScreen=!0,this.timer.autoReset=e}dispose(){for(const e of this.passes)e.dispose();this.passes=[],this.inputBuffer!==null&&this.inputBuffer.dispose(),this.outputBuffer!==null&&this.outputBuffer.dispose(),this.deleteDepthTexture(),this.copyPass.dispose(),this.timer.dispose()}},MU=class{constructor(){this.shaderParts=new Map([[kt.FRAGMENT_HEAD,null],[kt.FRAGMENT_MAIN_UV,null],[kt.FRAGMENT_MAIN_IMAGE,null],[kt.VERTEX_HEAD,null],[kt.VERTEX_MAIN_SUPPORT,null]]),this.defines=new Map,this.uniforms=new Map,this.blendModes=new Map,this.extensions=new Set,this.attributes=ts.NONE,this.varyings=new Set,this.uvTransformation=!1,this.readDepth=!1,this.colorSpace=hc}},Mv=class extends Set{constructor(n,e=10){super(),this.l=e,this.exclusive=!1,n!==void 0&&this.set(n)}get layer(){return this.l}set layer(n){const e=this.l;for(const t of this)t.layers.disable(e),t.layers.enable(n);this.l=n}getLayer(){return this.layer}setLayer(n){this.layer=n}isExclusive(){return this.exclusive}setExclusive(n){this.exclusive=n}clear(){const n=this.layer;for(const e of this)e.layers.disable(n);return super.clear()}set(n){this.clear();for(const e of n)this.add(e);return this}indexOf(n){return this.has(n)?0:-1}add(n){return this.exclusive?n.layers.set(this.layer):n.layers.enable(this.layer),super.add(n)}delete(n){return this.has(n)&&n.layers.disable(this.layer),super.delete(n)}toggle(n){let e;return this.has(n)?(this.delete(n),e=!1):(this.add(n),e=!0),e}setVisible(n){for(const e of this)n?e.layers.enable(0):e.layers.disable(0);return this}},NU="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,x+y,opacity);}",HU="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,y,min(y.a,opacity));}",XU="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,(x+y)*0.5,opacity);}",YU="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec3 xHSL=RGBToHSL(x.rgb);vec3 yHSL=RGBToHSL(y.rgb);vec3 z=HSLToRGB(vec3(yHSL.rg,xHSL.b));return vec4(mix(x.rgb,z,opacity),y.a);}",FU="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=mix(step(0.0,y)*(1.0-min(vec4(1.0),(1.0-x)/y)),vec4(1.0),step(1.0,x));return mix(x,z,opacity);}",KU="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=step(0.0,x)*mix(min(vec4(1.0),x/max(1.0-y,1e-9)),vec4(1.0),step(1.0,y));return mix(x,z,opacity);}",zU="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,min(x,y),opacity);}",LU="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,abs(x-y),opacity);}",TU="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,x/max(y,1e-12),opacity);}",EU="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,(x+y-2.0*x*y),opacity);}",kU="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 a=min(x,1.0),b=min(y,1.0);vec4 z=mix(2.0*a*b,1.0-2.0*(1.0-a)*(1.0-b),step(0.5,y));return mix(x,z,opacity);}",DU="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,step(1.0,x+y),opacity);}",UU="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec3 xHSL=RGBToHSL(x.rgb);vec3 yHSL=RGBToHSL(y.rgb);vec3 z=HSLToRGB(vec3(yHSL.r,xHSL.gb));return vec4(mix(x.rgb,z,opacity),y.a);}",PU="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,1.0-y,opacity);}",_U="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,y*(1.0-x),opacity);}",JU="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,max(x,y),opacity);}",OU="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,clamp(y+x-1.0,0.0,1.0),opacity);}",QU="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,min(x+y,1.0),opacity);}",jU="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,clamp(2.0*y+x-1.0,0.0,1.0),opacity);}",qU="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec3 xHSL=RGBToHSL(x.rgb);vec3 yHSL=RGBToHSL(y.rgb);vec3 z=HSLToRGB(vec3(xHSL.rg,yHSL.b));return vec4(mix(x.rgb,z,opacity),y.a);}",$U="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,x*y,opacity);}",eP="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,1.0-abs(1.0-x-y),opacity);}",tP="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,y,opacity);}",nP="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=mix(2.0*y*x,1.0-2.0*(1.0-y)*(1.0-x),step(0.5,x));return mix(x,z,opacity);}",iP="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 y2=2.0*y;vec4 z=mix(mix(y2,x,step(0.5*x,y)),max(vec4(0.0),y2-1.0),step(x,(y2-1.0)));return mix(x,z,opacity);}",sP="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=mix(min(x*x/max(1.0-y,1e-12),1.0),y,step(1.0,y));return mix(x,z,opacity);}",rP="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec3 xHSL=RGBToHSL(x.rgb);vec3 yHSL=RGBToHSL(y.rgb);vec3 z=HSLToRGB(vec3(xHSL.r,yHSL.g,xHSL.b));return vec4(mix(x.rgb,z,opacity),y.a);}",oP="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,x+y-min(x*y,1.0),opacity);}",aP="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 y2=2.0*y;vec4 w=step(0.5,y);vec4 z=mix(x-(1.0-y2)*x*(1.0-x),mix(x+(y2-1.0)*(sqrt(x)-x),x+(y2-1.0)*x*((16.0*x-12.0)*x+3.0),w*(1.0-step(0.25,x))),w);return mix(x,z,opacity);}",lP="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return y;}",gP="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){return mix(x,max(x+y-1.0,0.0),opacity);}",cP="vec4 blend(const in vec4 x,const in vec4 y,const in float opacity){vec4 z=mix(max(1.0-min((1.0-x)/(2.0*y),1.0),0.0),min(x/(2.0*(1.0-y)),1.0),step(0.5,y));return mix(x,z,opacity);}",IP=new Map([[Ct.ADD,NU],[Ct.ALPHA,HU],[Ct.AVERAGE,XU],[Ct.COLOR,YU],[Ct.COLOR_BURN,FU],[Ct.COLOR_DODGE,KU],[Ct.DARKEN,zU],[Ct.DIFFERENCE,LU],[Ct.DIVIDE,TU],[Ct.DST,null],[Ct.EXCLUSION,EU],[Ct.HARD_LIGHT,kU],[Ct.HARD_MIX,DU],[Ct.HUE,UU],[Ct.INVERT,PU],[Ct.INVERT_RGB,_U],[Ct.LIGHTEN,JU],[Ct.LINEAR_BURN,OU],[Ct.LINEAR_DODGE,QU],[Ct.LINEAR_LIGHT,jU],[Ct.LUMINOSITY,qU],[Ct.MULTIPLY,$U],[Ct.NEGATION,eP],[Ct.NORMAL,tP],[Ct.OVERLAY,nP],[Ct.PIN_LIGHT,iP],[Ct.REFLECT,sP],[Ct.SATURATION,rP],[Ct.SCREEN,oP],[Ct.SOFT_LIGHT,aP],[Ct.SRC,lP],[Ct.SUBTRACT,gP],[Ct.VIVID_LIGHT,cP]]),uP=class extends bs{constructor(n,e=1){super(),this._blendFunction=n,this.opacity=new ee(e)}getOpacity(){return this.opacity.value}setOpacity(n){this.opacity.value=n}get blendFunction(){return this._blendFunction}set blendFunction(n){this._blendFunction=n,this.dispatchEvent({type:"change"})}getBlendFunction(){return this.blendFunction}setBlendFunction(n){this.blendFunction=n}getShaderCode(){return IP.get(this.blendFunction)}},Ii=class extends bs{constructor(n,e,{attributes:t=ts.NONE,blendFunction:i=Ct.NORMAL,defines:s=new Map,uniforms:r=new Map,extensions:o=null,vertexShader:a=null}={}){super(),this.name=n,this.renderer=null,this.attributes=t,this.fragmentShader=e,this.vertexShader=a,this.defines=s,this.uniforms=r,this.extensions=o,this.blendMode=new uP(i),this.blendMode.addEventListener("change",l=>this.setChanged()),this._inputColorSpace=hc,this._outputColorSpace=$V}get inputColorSpace(){return this._inputColorSpace}set inputColorSpace(n){this._inputColorSpace=n,this.setChanged()}get outputColorSpace(){return this._outputColorSpace}set outputColorSpace(n){this._outputColorSpace=n,this.setChanged()}set mainScene(n){}set mainCamera(n){}getName(){return this.name}setRenderer(n){this.renderer=n}getDefines(){return this.defines}getUniforms(){return this.uniforms}getExtensions(){return this.extensions}getBlendMode(){return this.blendMode}getAttributes(){return this.attributes}setAttributes(n){this.attributes=n,this.setChanged()}getFragmentShader(){return this.fragmentShader}setFragmentShader(n){this.fragmentShader=n,this.setChanged()}getVertexShader(){return this.vertexShader}setVertexShader(n){this.vertexShader=n,this.setChanged()}setChanged(){this.dispatchEvent({type:"change"})}setDepthTexture(n,e=zn){}update(n,e,t){}setSize(n,e){}initialize(n,e,t){}dispose(){for(const n of Object.keys(this)){const e=this[n];(e instanceof Nt||e instanceof Qn||e instanceof en||e instanceof Vn)&&this[n].dispose()}}},CP=`#ifdef FRAMEBUFFER_PRECISION_HIGH -uniform mediump sampler2D map; -#else -uniform lowp sampler2D map; -#endif -uniform float intensity;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){outputColor=texture2D(map,uv)*intensity;}`,dP=class extends Ii{constructor({blendFunction:n=Ct.SCREEN,luminanceThreshold:e=.9,luminanceSmoothing:t=.025,mipmapBlur:i=!1,intensity:s=1,radius:r=.85,levels:o=8,kernelSize:a=xc.LARGE,resolutionScale:l=.5,width:c=Ot.AUTO_SIZE,height:u=Ot.AUTO_SIZE,resolutionX:C=c,resolutionY:d=u}={}){super("BloomEffect",CP,{blendFunction:n,uniforms:new Map([["map",new ee(null)],["intensity",new ee(s)]])}),this.renderTarget=new Nt(1,1,{depthBuffer:!1}),this.renderTarget.texture.name="Bloom.Target",this.blurPass=new Ip({kernelSize:a}),this.luminancePass=new ZU({colorOutput:!0}),this.luminanceMaterial.threshold=e,this.luminanceMaterial.smoothing=t,this.mipmapBlurPass=new SU,this.mipmapBlurPass.enabled=i,this.mipmapBlurPass.radius=r,this.mipmapBlurPass.levels=o,this.uniforms.get("map").value=i?this.mipmapBlurPass.texture:this.renderTarget.texture;const h=this.resolution=new Ot(this,C,d,l);h.addEventListener("change",m=>this.setSize(h.baseWidth,h.baseHeight))}get texture(){return this.mipmapBlurPass.enabled?this.mipmapBlurPass.texture:this.renderTarget.texture}getTexture(){return this.texture}getResolution(){return this.resolution}getBlurPass(){return this.blurPass}getLuminancePass(){return this.luminancePass}get luminanceMaterial(){return this.luminancePass.fullscreenMaterial}getLuminanceMaterial(){return this.luminancePass.fullscreenMaterial}get width(){return this.resolution.width}set width(n){this.resolution.preferredWidth=n}get height(){return this.resolution.height}set height(n){this.resolution.preferredHeight=n}get dithering(){return this.blurPass.dithering}set dithering(n){this.blurPass.dithering=n}get kernelSize(){return this.blurPass.kernelSize}set kernelSize(n){this.blurPass.kernelSize=n}get distinction(){return console.warn(this.name,"distinction was removed"),1}set distinction(n){console.warn(this.name,"distinction was removed")}get intensity(){return this.uniforms.get("intensity").value}set intensity(n){this.uniforms.get("intensity").value=n}getIntensity(){return this.intensity}setIntensity(n){this.intensity=n}getResolutionScale(){return this.resolution.scale}setResolutionScale(n){this.resolution.scale=n}update(n,e,t){const i=this.renderTarget,s=this.luminancePass;s.enabled?(s.render(n,e),this.mipmapBlurPass.enabled?this.mipmapBlurPass.render(n,s.renderTarget):this.blurPass.render(n,s.renderTarget,i)):this.mipmapBlurPass.enabled?this.mipmapBlurPass.render(n,e):this.blurPass.render(n,e,i)}setSize(n,e){const t=this.resolution;t.setBaseSize(n,e),this.renderTarget.setSize(t.width,t.height),this.blurPass.resolution.copy(t),this.luminancePass.setSize(n,e),this.mipmapBlurPass.setSize(n,e)}initialize(n,e,t){this.blurPass.initialize(n,e,t),this.luminancePass.initialize(n,e,t),this.mipmapBlurPass.initialize(n,e,t),t!==void 0&&(this.renderTarget.texture.type=t,fo(n)===Jt&&_n(this.renderTarget.texture,Jt))}},hP="void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){outputColor=vec4(vec3(average(inputColor.rgb)),inputColor.a);}",AP=class extends Ii{constructor(n){super("ColorAverageEffect",hP,{blendFunction:n})}},pP=`#ifdef RADIAL_MODULATION -uniform float modulationOffset; -#endif -varying float vActive;varying vec2 vUvR;varying vec2 vUvB;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec2 ra=inputColor.ra;vec2 ba=inputColor.ba; -#ifdef RADIAL_MODULATION -const vec2 center=vec2(0.5);float d=distance(uv,center)*2.0;d=max(d-modulationOffset,0.0);if(vActive>0.0&&d>0.0){ra=texture2D(inputBuffer,mix(uv,vUvR,d)).ra;ba=texture2D(inputBuffer,mix(uv,vUvB,d)).ba;} -#else -if(vActive>0.0){ra=texture2D(inputBuffer,vUvR).ra;ba=texture2D(inputBuffer,vUvB).ba;} -#endif -outputColor=vec4(ra.x,inputColor.g,ba.x,max(max(ra.y,ba.y),inputColor.a));}`,mP="uniform vec2 offset;varying float vActive;varying vec2 vUvR;varying vec2 vUvB;void mainSupport(const in vec2 uv){vec2 shift=offset*vec2(1.0,aspect);vActive=(shift.x!=0.0||shift.y!=0.0)?1.0:0.0;vUvR=uv+shift;vUvB=uv-shift;}",fP=class extends Ii{constructor({offset:n=new ne(.001,5e-4),radialModulation:e=!1,modulationOffset:t=.15}={}){super("ChromaticAberrationEffect",pP,{vertexShader:mP,attributes:ts.CONVOLUTION,uniforms:new Map([["offset",new ee(n)],["modulationOffset",new ee(t)]])}),this.radialModulation=e}get offset(){return this.uniforms.get("offset").value}set offset(n){this.uniforms.get("offset").value=n}get radialModulation(){return this.defines.has("RADIAL_MODULATION")}set radialModulation(n){n?this.defines.set("RADIAL_MODULATION","1"):this.defines.delete("RADIAL_MODULATION"),this.setChanged()}get modulationOffset(){return this.uniforms.get("modulationOffset").value}set modulationOffset(n){this.uniforms.get("modulationOffset").value=n}getOffset(){return this.offset}setOffset(n){this.offset=n}},bP=`#ifdef FRAMEBUFFER_PRECISION_HIGH -uniform mediump sampler2D nearColorBuffer;uniform mediump sampler2D farColorBuffer; -#else -uniform lowp sampler2D nearColorBuffer;uniform lowp sampler2D farColorBuffer; -#endif -uniform lowp sampler2D nearCoCBuffer;uniform float scale;void mainImage(const in vec4 inputColor,const in vec2 uv,const in float depth,out vec4 outputColor){vec4 colorNear=texture2D(nearColorBuffer,uv);vec4 colorFar=texture2D(farColorBuffer,uv);float cocNear=texture2D(nearCoCBuffer,uv).r;cocNear=min(cocNear*scale,1.0);vec4 result=inputColor*(1.0-colorFar.a)+colorFar;result=mix(result,colorNear,cocNear);outputColor=result;}`,yP=class extends Ii{constructor(n,{blendFunction:e,worldFocusDistance:t,worldFocusRange:i,focusDistance:s=0,focalLength:r=.1,focusRange:o=r,bokehScale:a=1,resolutionScale:l=1,width:c=Ot.AUTO_SIZE,height:u=Ot.AUTO_SIZE,resolutionX:C=c,resolutionY:d=u}={}){super("DepthOfFieldEffect",bP,{blendFunction:e,attributes:ts.DEPTH,uniforms:new Map([["nearColorBuffer",new ee(null)],["farColorBuffer",new ee(null)],["nearCoCBuffer",new ee(null)],["scale",new ee(1)]])}),this.camera=n,this.renderTarget=new Nt(1,1,{depthBuffer:!1}),this.renderTarget.texture.name="DoF.Intermediate",this.renderTargetMasked=this.renderTarget.clone(),this.renderTargetMasked.texture.name="DoF.Masked.Far",this.renderTargetNear=this.renderTarget.clone(),this.renderTargetNear.texture.name="DoF.Bokeh.Near",this.uniforms.get("nearColorBuffer").value=this.renderTargetNear.texture,this.renderTargetFar=this.renderTarget.clone(),this.renderTargetFar.texture.name="DoF.Bokeh.Far",this.uniforms.get("farColorBuffer").value=this.renderTargetFar.texture,this.renderTargetCoC=this.renderTarget.clone(),this.renderTargetCoC.texture.name="DoF.CoC",this.renderTargetCoCBlurred=this.renderTargetCoC.clone(),this.renderTargetCoCBlurred.texture.name="DoF.CoC.Blurred",this.uniforms.get("nearCoCBuffer").value=this.renderTargetCoCBlurred.texture,this.cocPass=new cs(new wD(n));const h=this.cocMaterial;h.focusDistance=s,h.focusRange=o,t!==void 0&&(h.worldFocusDistance=t),i!==void 0&&(h.worldFocusRange=i),this.blurPass=new Ip({resolutionScale:l,resolutionX:C,resolutionY:d,kernelSize:xc.MEDIUM}),this.maskPass=new cs(new sU(this.renderTargetCoC.texture));const m=this.maskPass.fullscreenMaterial;m.maskFunction=qI.MULTIPLY,m.colorChannel=Dg.GREEN,this.bokehNearBasePass=new cs(new mh(!1,!0)),this.bokehNearBasePass.fullscreenMaterial.cocBuffer=this.renderTargetCoCBlurred.texture,this.bokehNearFillPass=new cs(new mh(!0,!0)),this.bokehNearFillPass.fullscreenMaterial.cocBuffer=this.renderTargetCoCBlurred.texture,this.bokehFarBasePass=new cs(new mh(!1,!1)),this.bokehFarBasePass.fullscreenMaterial.cocBuffer=this.renderTargetCoC.texture,this.bokehFarFillPass=new cs(new mh(!0,!1)),this.bokehFarFillPass.fullscreenMaterial.cocBuffer=this.renderTargetCoC.texture,this.target=null;const y=this.resolution=new Ot(this,C,d,l);y.addEventListener("change",v=>this.setSize(y.baseWidth,y.baseHeight)),this.bokehScale=a}set mainCamera(n){this.camera=n,this.cocMaterial.copyCameraSettings(n)}get cocTexture(){return this.renderTargetCoC.texture}get cocMaterial(){return this.cocPass.fullscreenMaterial}get circleOfConfusionMaterial(){return this.cocMaterial}getCircleOfConfusionMaterial(){return this.circleOfConfusionMaterial}getBlurPass(){return this.blurPass}getResolution(){return this.resolution}get bokehScale(){return this.uniforms.get("scale").value}set bokehScale(n){this.bokehNearBasePass.fullscreenMaterial.scale=n,this.bokehNearFillPass.fullscreenMaterial.scale=n,this.bokehFarBasePass.fullscreenMaterial.scale=n,this.bokehFarFillPass.fullscreenMaterial.scale=n,this.maskPass.fullscreenMaterial.strength=n,this.uniforms.get("scale").value=n}getBokehScale(){return this.bokehScale}setBokehScale(n){this.bokehScale=n}getTarget(){return this.target}setTarget(n){this.target=n}calculateFocusDistance(n){const e=this.camera,t=e.position.distanceTo(n);return cl(-t,e.near,e.far)}setDepthTexture(n,e=zn){this.circleOfConfusionMaterial.depthBuffer=n,this.circleOfConfusionMaterial.depthPacking=e}update(n,e,t){const i=this.renderTarget,s=this.renderTargetCoC,r=this.renderTargetCoCBlurred,o=this.renderTargetMasked;if(this.target!==null){const a=this.calculateFocusDistance(this.target);this.cocMaterial.focusDistance=a}this.cocPass.render(n,null,s),this.blurPass.render(n,s,r),this.maskPass.render(n,e,o),this.bokehFarBasePass.render(n,o,i),this.bokehFarFillPass.render(n,i,this.renderTargetFar),this.bokehNearBasePass.render(n,e,i),this.bokehNearFillPass.render(n,i,this.renderTargetNear)}setSize(n,e){const t=this.resolution;t.setBaseSize(n,e);const i=t.width,s=t.height;this.cocPass.setSize(n,e),this.blurPass.setSize(n,e),this.maskPass.setSize(n,e),this.renderTargetCoC.setSize(n,e),this.renderTargetMasked.setSize(n,e),this.renderTarget.setSize(i,s),this.renderTargetNear.setSize(i,s),this.renderTargetFar.setSize(i,s),this.renderTargetCoCBlurred.setSize(i,s),this.bokehNearBasePass.fullscreenMaterial.setSize(n,e),this.bokehNearFillPass.fullscreenMaterial.setSize(n,e),this.bokehFarBasePass.fullscreenMaterial.setSize(n,e),this.bokehFarFillPass.fullscreenMaterial.setSize(n,e)}initialize(n,e,t){this.cocPass.initialize(n,e,t),this.maskPass.initialize(n,e,t),this.bokehNearBasePass.initialize(n,e,t),this.bokehNearFillPass.initialize(n,e,t),this.bokehFarBasePass.initialize(n,e,t),this.bokehFarFillPass.initialize(n,e,t),this.blurPass.initialize(n,e,ln);const i=this.maskPass.fullscreenMaterial;i.maskFunction=e?qI.MULTIPLY:qI.MULTIPLY_RGB_SET_ALPHA,t!==void 0&&(this.renderTarget.texture.type=t,this.renderTargetNear.texture.type=t,this.renderTargetFar.texture.type=t,this.renderTargetMasked.texture.type=t,fo(n)===Jt&&(_n(this.renderTarget.texture,Jt),_n(this.renderTargetNear.texture,Jt),_n(this.renderTargetFar.texture,Jt),_n(this.renderTargetMasked.texture,Jt)))}};function vP(n,e,t){const i=new Map([[PA,1],[ky,1],[Dy,2],[hn,4]]);let s;if(i.has(e)||console.error("Invalid noise texture format"),t===ln){s=new Uint8Array(n*i.get(e));for(let r=0,o=s.length;rdistortion.x-columns*random){float sx=clamp(ceil(seeds.x),0.0,1.0);uv.y=sx*(1.0-(uv.y+distortion.y))+(1.0-sx)*distortion.y;}if(uv.xdistortion.y-columns*random){float sy=clamp(ceil(seeds.y),0.0,1.0);uv.x=sy*distortion.x+(1.0-sy)*(1.0-(uv.x+distortion.x));}vec2 normal=texture2D(perturbationMap,uv*random*random).rg;uv+=normal*seeds*(random*0.2);}}",bh="Glitch.Generated";function ki(n,e){return n+Math.random()*(e-n)}var BP=class extends Ii{constructor({chromaticAberrationOffset:n=null,delay:e=new ne(1.5,3.5),duration:t=new ne(.6,1),strength:i=new ne(.3,1),columns:s=.05,ratio:r=.85,perturbationMap:o=null,dtSize:a=64}={}){if(super("GlitchEffect",GP,{uniforms:new Map([["perturbationMap",new ee(null)],["columns",new ee(s)],["active",new ee(!1)],["random",new ee(1)],["seeds",new ee(new ne)],["distortion",new ee(new ne)]])}),o===null){const l=new Wb(a,a,hn);l.name=bh,this.perturbationMap=l}else this.perturbationMap=o;this.time=0,this.distortion=this.uniforms.get("distortion").value,this.delay=e,this.duration=t,this.breakPoint=new ne(ki(this.delay.x,this.delay.y),ki(this.duration.x,this.duration.y)),this.strength=i,this.mode=nl.SPORADIC,this.ratio=r,this.chromaticAberrationOffset=n}get seeds(){return this.uniforms.get("seeds").value}get active(){return this.uniforms.get("active").value}isActive(){return this.active}get minDelay(){return this.delay.x}set minDelay(n){this.delay.x=n}getMinDelay(){return this.delay.x}setMinDelay(n){this.delay.x=n}get maxDelay(){return this.delay.y}set maxDelay(n){this.delay.y=n}getMaxDelay(){return this.delay.y}setMaxDelay(n){this.delay.y=n}get minDuration(){return this.duration.x}set minDuration(n){this.duration.x=n}getMinDuration(){return this.duration.x}setMinDuration(n){this.duration.x=n}get maxDuration(){return this.duration.y}set maxDuration(n){this.duration.y=n}getMaxDuration(){return this.duration.y}setMaxDuration(n){this.duration.y=n}get minStrength(){return this.strength.x}set minStrength(n){this.strength.x=n}getMinStrength(){return this.strength.x}setMinStrength(n){this.strength.x=n}get maxStrength(){return this.strength.y}set maxStrength(n){this.strength.y=n}getMaxStrength(){return this.strength.y}setMaxStrength(n){this.strength.y=n}getMode(){return this.mode}setMode(n){this.mode=n}getGlitchRatio(){return 1-this.ratio}setGlitchRatio(n){this.ratio=Math.min(Math.max(1-n,0),1)}get columns(){return this.uniforms.get("columns").value}set columns(n){this.uniforms.get("columns").value=n}getGlitchColumns(){return this.columns}setGlitchColumns(n){this.columns=n}getChromaticAberrationOffset(){return this.chromaticAberrationOffset}setChromaticAberrationOffset(n){this.chromaticAberrationOffset=n}get perturbationMap(){return this.uniforms.get("perturbationMap").value}set perturbationMap(n){const e=this.perturbationMap;e!==null&&e.name===bh&&e.dispose(),n.minFilter=n.magFilter=ft,n.wrapS=n.wrapT=ps,n.generateMipmaps=!1,this.uniforms.get("perturbationMap").value=n}getPerturbationMap(){return this.perturbationMap}setPerturbationMap(n){this.perturbationMap=n}generatePerturbationMap(n=64){const e=new Wb(n,n,hn);return e.name=bh,e}update(n,e,t){const i=this.mode,s=this.breakPoint,r=this.chromaticAberrationOffset,o=this.strength;let a=this.time,l=!1,c=0,u=0,C;i!==nl.DISABLED&&(i===nl.SPORADIC&&(a+=t,C=a>s.x,a>=s.x+s.y&&(s.set(ki(this.delay.x,this.delay.y),ki(this.duration.x,this.duration.y)),a=0)),c=Math.random(),this.uniforms.get("random").value=c,C&&c>this.ratio||i===nl.CONSTANT_WILD?(l=!0,c*=o.y*.03,u=ki(-Math.PI,Math.PI),this.seeds.set(ki(-o.y,o.y),ki(-o.y,o.y)),this.distortion.set(ki(0,1),ki(0,1))):(C||i===nl.CONSTANT_MILD)&&(l=!0,c*=o.x*.03,u=ki(-Math.PI,Math.PI),this.seeds.set(ki(-o.x,o.x),ki(-o.x,o.x)),this.distortion.set(ki(0,1),ki(0,1))),this.time=a),r!==null&&(l?r.set(Math.cos(u),Math.sin(u)).multiplyScalar(c):r.set(0,0)),this.uniforms.get("active").value=l}dispose(){const n=this.perturbationMap;n!==null&&n.name===bh&&n.dispose()}},ZP=`#ifdef FRAMEBUFFER_PRECISION_HIGH -uniform mediump sampler2D map; -#else -uniform lowp sampler2D map; -#endif -void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){outputColor=texture2D(map,uv);}`,zf=new X,GS=new Le,wP=class extends Ii{constructor(n,e,{blendFunction:t=Ct.SCREEN,samples:i=60,density:s=.96,decay:r=.9,weight:o=.4,exposure:a=.6,clampMax:l=1,blur:c=!0,kernelSize:u=xc.SMALL,resolutionScale:C=.5,width:d=Ot.AUTO_SIZE,height:h=Ot.AUTO_SIZE,resolutionX:m=d,resolutionY:y=h}={}){super("GodRaysEffect",ZP,{blendFunction:t,attributes:ts.DEPTH,uniforms:new Map([["map",new ee(null)]])}),this.camera=n,this._lightSource=e,this.lightSource=e,this.lightScene=new Gl,this.screenPosition=new ne,this.renderTargetA=new Nt(1,1,{depthBuffer:!1}),this.renderTargetA.texture.name="GodRays.Target.A",this.renderTargetB=this.renderTargetA.clone(),this.renderTargetB.texture.name="GodRays.Target.B",this.uniforms.get("map").value=this.renderTargetB.texture,this.renderTargetLight=new Nt(1,1),this.renderTargetLight.texture.name="GodRays.Light",this.renderTargetLight.depthTexture=new $A,this.renderPassLight=new Wc(this.lightScene,n),this.renderPassLight.clearPass.overrideClearColor=new Ne(0),this.clearPass=new Rc(!0,!1,!1),this.clearPass.overrideClearColor=new Ne(0),this.blurPass=new Ip({kernelSize:u}),this.blurPass.enabled=c,this.depthMaskPass=new cs(new iM);const v=this.depthMaskMaterial;v.depthBuffer1=this.renderTargetLight.depthTexture,v.copyCameraSettings(n),this.godRaysPass=new cs(new eU(this.screenPosition));const A=this.godRaysMaterial;A.density=s,A.decay=r,A.weight=o,A.exposure=a,A.maxIntensity=l,A.samples=i;const b=this.resolution=new Ot(this,m,y,C);b.addEventListener("change",f=>this.setSize(b.baseWidth,b.baseHeight))}set mainCamera(n){this.camera=n,this.renderPassLight.mainCamera=n,this.depthMaskMaterial.copyCameraSettings(n)}get lightSource(){return this._lightSource}set lightSource(n){this._lightSource=n,n!==null&&(n.material.depthWrite=!1,n.material.transparent=!0)}getBlurPass(){return this.blurPass}get texture(){return this.renderTargetB.texture}getTexture(){return this.texture}get depthMaskMaterial(){return this.depthMaskPass.fullscreenMaterial}get godRaysMaterial(){return this.godRaysPass.fullscreenMaterial}getGodRaysMaterial(){return this.godRaysMaterial}getResolution(){return this.resolution}get width(){return this.resolution.width}set width(n){this.resolution.preferredWidth=n}get height(){return this.resolution.height}set height(n){this.resolution.preferredHeight=n}get dithering(){return this.godRaysMaterial.dithering}set dithering(n){const e=this.godRaysMaterial;e.dithering=n,e.needsUpdate=!0}get blur(){return this.blurPass.enabled}set blur(n){this.blurPass.enabled=n}get kernelSize(){return this.blurPass.kernelSize}set kernelSize(n){this.blurPass.kernelSize=n}getResolutionScale(){return this.resolution.scale}setResolutionScale(n){this.resolution.scale=n}get samples(){return this.godRaysMaterial.samples}set samples(n){this.godRaysMaterial.samples=n}setDepthTexture(n,e=zn){this.depthMaskPass.fullscreenMaterial.depthBuffer0=n,this.depthMaskPass.fullscreenMaterial.depthPacking0=e}update(n,e,t){const i=this.lightSource,s=i.parent,r=i.matrixAutoUpdate,o=this.renderTargetA,a=this.renderTargetLight;i.material.depthWrite=!0,i.matrixAutoUpdate=!1,i.updateWorldMatrix(!0,!1),s!==null&&(r||GS.copy(i.matrix),i.matrix.copy(i.matrixWorld)),this.lightScene.add(i),this.renderPassLight.render(n,a),this.clearPass.render(n,o),this.depthMaskPass.render(n,a,o),i.material.depthWrite=!1,i.matrixAutoUpdate=r,s!==null&&(r||i.matrix.copy(GS),s.add(i)),zf.setFromMatrixPosition(i.matrixWorld).project(this.camera),this.screenPosition.set(Math.min(Math.max((zf.x+1)*.5,-1),2),Math.min(Math.max((zf.y+1)*.5,-1),2)),this.blurPass.enabled&&this.blurPass.render(n,o,o),this.godRaysPass.render(n,o,this.renderTargetB)}setSize(n,e){const t=this.resolution;t.setBaseSize(n,e);const i=t.width,s=t.height;this.renderTargetA.setSize(i,s),this.renderTargetB.setSize(i,s),this.renderTargetLight.setSize(i,s),this.blurPass.resolution.copy(t)}initialize(n,e,t){this.blurPass.initialize(n,e,t),this.renderPassLight.initialize(n,e,t),this.depthMaskPass.initialize(n,e,t),this.godRaysPass.initialize(n,e,t),t!==void 0&&(this.renderTargetA.texture.type=t,this.renderTargetB.texture.type=t,this.renderTargetLight.texture.type=t,fo(n)===Jt&&(_n(this.renderTargetA.texture,Jt),_n(this.renderTargetB.texture,Jt),_n(this.renderTargetLight.texture,Jt)))}},SP="uniform vec2 scale;uniform float lineWidth;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){float grid=0.5-max(abs(mod(uv.x*scale.x,1.0)-0.5),abs(mod(uv.y*scale.y,1.0)-0.5));outputColor=vec4(vec3(smoothstep(0.0,lineWidth,grid)),inputColor.a);}",xP=class extends Ii{constructor({blendFunction:n=Ct.OVERLAY,scale:e=1,lineWidth:t=0}={}){super("GridEffect",SP,{blendFunction:n,uniforms:new Map([["scale",new ee(new ne)],["lineWidth",new ee(t)]])}),this.resolution=new ne,this.s=0,this.scale=e,this.l=0,this.lineWidth=t}get scale(){return this.s}set scale(n){this.s=Math.max(n,1e-6),this.setSize(this.resolution.width,this.resolution.height)}getScale(){return this.scale}setScale(n){this.scale=n}get lineWidth(){return this.l}set lineWidth(n){this.l=n,this.setSize(this.resolution.width,this.resolution.height)}getLineWidth(){return this.lineWidth}setLineWidth(n){this.lineWidth=n}setSize(n,e){this.resolution.set(n,e);const t=n/e,i=this.scale*(e*.125);this.uniforms.get("scale").value.set(t*i,i),this.uniforms.get("lineWidth").value=i/e+this.lineWidth}};function BS(n,e,t){const i=document.createElement("canvas"),s=i.getContext("2d");if(i.width=n,i.height=e,t instanceof Image)s.drawImage(t,0,0);else{const r=s.createImageData(n,e);r.data.set(t),s.putImageData(r,0,0)}return i}var oM=class{constructor(n=0,e=0,t=null){this.width=n,this.height=e,this.data=t}toCanvas(){return typeof document>"u"?null:BS(this.width,this.height,this.data)}static from(n){const{width:e,height:t}=n;let i;if(n instanceof Image){const s=BS(e,t,n);s!==null&&(i=s.getContext("2d").getImageData(0,0,e,t).data)}else i=n.data;return new oM(e,t,i)}},RP=`"use strict";(()=>{var O=Math.pow;var _={SCALE_UP:"lut.scaleup"};var k=[new Float32Array(3),new Float32Array(3)],n=[new Float32Array(3),new Float32Array(3),new Float32Array(3),new Float32Array(3)],Z=[[new Float32Array([0,0,0]),new Float32Array([1,0,0]),new Float32Array([1,1,0]),new Float32Array([1,1,1])],[new Float32Array([0,0,0]),new Float32Array([1,0,0]),new Float32Array([1,0,1]),new Float32Array([1,1,1])],[new Float32Array([0,0,0]),new Float32Array([0,0,1]),new Float32Array([1,0,1]),new Float32Array([1,1,1])],[new Float32Array([0,0,0]),new Float32Array([0,1,0]),new Float32Array([1,1,0]),new Float32Array([1,1,1])],[new Float32Array([0,0,0]),new Float32Array([0,1,0]),new Float32Array([0,1,1]),new Float32Array([1,1,1])],[new Float32Array([0,0,0]),new Float32Array([0,0,1]),new Float32Array([0,1,1]),new Float32Array([1,1,1])]];function d(a,t,r,m){let i=r[0]-t[0],e=r[1]-t[1],y=r[2]-t[2],h=a[0]-t[0],A=a[1]-t[1],w=a[2]-t[2],c=e*w-y*A,l=y*h-i*w,x=i*A-e*h,u=Math.sqrt(c*c+l*l+x*x),b=u*.5,s=c/u,F=l/u,f=x/u,p=-(a[0]*s+a[1]*F+a[2]*f),M=m[0]*s+m[1]*F+m[2]*f;return Math.abs(M+p)*b/3}function V(a,t,r,m,i,e){let y=(r+m*t+i*t*t)*4;e[0]=a[y+0],e[1]=a[y+1],e[2]=a[y+2]}function j(a,t,r,m,i,e){let y=r*(t-1),h=m*(t-1),A=i*(t-1),w=Math.floor(y),c=Math.floor(h),l=Math.floor(A),x=Math.ceil(y),u=Math.ceil(h),b=Math.ceil(A),s=y-w,F=h-c,f=A-l;if(w===y&&c===h&&l===A)V(a,t,y,h,A,e);else{let p;s>=F&&F>=f?p=Z[0]:s>=f&&f>=F?p=Z[1]:f>=s&&s>=F?p=Z[2]:F>=s&&s>=f?p=Z[3]:F>=f&&f>=s?p=Z[4]:f>=F&&F>=s&&(p=Z[5]);let[M,g,X,Y]=p,P=k[0];P[0]=s,P[1]=F,P[2]=f;let o=k[1],L=x-w,S=u-c,U=b-l;o[0]=L*M[0]+w,o[1]=S*M[1]+c,o[2]=U*M[2]+l,V(a,t,o[0],o[1],o[2],n[0]),o[0]=L*g[0]+w,o[1]=S*g[1]+c,o[2]=U*g[2]+l,V(a,t,o[0],o[1],o[2],n[1]),o[0]=L*X[0]+w,o[1]=S*X[1]+c,o[2]=U*X[2]+l,V(a,t,o[0],o[1],o[2],n[2]),o[0]=L*Y[0]+w,o[1]=S*Y[1]+c,o[2]=U*Y[2]+l,V(a,t,o[0],o[1],o[2],n[3]);let T=d(g,X,Y,P)*6,q=d(M,X,Y,P)*6,C=d(M,g,Y,P)*6,E=d(M,g,X,P)*6;n[0][0]*=T,n[0][1]*=T,n[0][2]*=T,n[1][0]*=q,n[1][1]*=q,n[1][2]*=q,n[2][0]*=C,n[2][1]*=C,n[2][2]*=C,n[3][0]*=E,n[3][1]*=E,n[3][2]*=E,e[0]=n[0][0]+n[1][0]+n[2][0]+n[3][0],e[1]=n[0][1]+n[1][1]+n[2][1]+n[3][1],e[2]=n[0][2]+n[1][2]+n[2][2]+n[3][2]}}var v=class{static expand(t,r){let m=Math.cbrt(t.length/4),i=new Float32Array(3),e=new t.constructor(O(r,3)*4),y=t instanceof Uint8Array?255:1,h=O(r,2),A=1/(r-1);for(let w=0;w{let t=a.data,r=t.data;switch(t.operation){case _.SCALE_UP:r=v.expand(r,t.size);break}postMessage(r,[r.buffer]),close()});})(); -`,ZS=new Ne,kh=class extends hl{constructor(n,e){super(n,e,e,e),this.type=Rn,this.format=hn,this.minFilter=et,this.magFilter=et,this.wrapS=En,this.wrapT=En,this.wrapR=En,this.unpackAlignment=1,this.needsUpdate=!0,_n(this,hc),this.domainMin=new X(0,0,0),this.domainMax=new X(1,1,1)}get isLookupTexture3D(){return!0}scaleUp(n,e=!0){const t=this.image;let i;return n<=t.width?i=Promise.reject(new Error("The target size must be greater than the current size")):i=new Promise((s,r)=>{const o=URL.createObjectURL(new Blob([RP],{type:"text/javascript"})),a=new Worker(o);a.addEventListener("error",c=>r(c.error)),a.addEventListener("message",c=>{const u=new kh(c.data,n);Yf(this,u),u.type=this.type,u.name=this.name,URL.revokeObjectURL(o),s(u)});const l=e?[t.data.buffer]:[];a.postMessage({operation:SD.SCALE_UP,data:t.data,size:n},l)}),i}applyLUT(n){const e=this.image,t=n.image,i=Math.min(e.width,e.height,e.depth),s=Math.min(t.width,t.height,t.depth);if(i!==s)console.error("Size mismatch");else if(n.type!==Rn||this.type!==Rn)console.error("Both LUTs must be FloatType textures");else if(n.format!==hn||this.format!==hn)console.error("Both LUTs must be RGBA textures");else{const r=e.data,o=t.data,a=i,l=a**2,c=a-1;for(let u=0,C=a**3;ui){r=new Uint8Array(l.length);for(let c=0;c=f.g){if(f.g>f.b){frac=f.rgb;v2=vec3(v4.x,v1.y,v1.z);v3=vec3(v4.x,v4.y,v1.z);}else if(f.r>=f.b){frac=f.rbg;v2=vec3(v4.x,v1.y,v1.z);v3=vec3(v4.x,v1.y,v4.z);}else{frac=f.brg;v2=vec3(v1.x,v1.y,v4.z);v3=vec3(v4.x,v1.y,v4.z);}}else{if(f.b>f.g){frac=f.bgr;v2=vec3(v1.x,v1.y,v4.z);v3=vec3(v1.x,v4.y,v4.z);}else if(f.r>=f.b){frac=f.grb;v2=vec3(v1.x,v4.y,v1.z);v3=vec3(v4.x,v4.y,v1.z);}else{frac=f.gbr;v2=vec3(v1.x,v4.y,v1.z);v3=vec3(v1.x,v4.y,v4.z);}}vec4 n1=texture(lut,v1);vec4 n2=texture(lut,v2);vec4 n3=texture(lut,v3);vec4 n4=texture(lut,v4);vec4 weights=vec4(1.0-frac.x,frac.x-frac.y,frac.y-frac.z,frac.z);vec4 result=weights*mat4(vec4(n1.r,n2.r,n3.r,n4.r),vec4(n1.g,n2.g,n3.g,n4.g),vec4(n1.b,n2.b,n3.b,n4.b),vec4(1.0));return vec4(result.rgb,1.0); -#else -return texture(lut,rgb); -#endif -} -#else -#ifdef LUT_PRECISION_HIGH -#ifdef GL_FRAGMENT_PRECISION_HIGH -uniform highp sampler2D lut; -#else -uniform mediump sampler2D lut; -#endif -#else -uniform lowp sampler2D lut; -#endif -vec4 applyLUT(const in vec3 rgb){float slice=rgb.b*LUT_SIZE;float slice0=floor(slice);float interp=slice-slice0;float centeredInterp=interp-0.5;float slice1=slice0+sign(centeredInterp); -#ifdef LUT_STRIP_HORIZONTAL -float xOffset=clamp(rgb.r*LUT_TEXEL_HEIGHT,LUT_TEXEL_WIDTH*0.5,LUT_TEXEL_HEIGHT-LUT_TEXEL_WIDTH*0.5);vec2 uv0=vec2(slice0*LUT_TEXEL_HEIGHT+xOffset,rgb.g);vec2 uv1=vec2(slice1*LUT_TEXEL_HEIGHT+xOffset,rgb.g); -#else -float yOffset=clamp(rgb.g*LUT_TEXEL_WIDTH,LUT_TEXEL_HEIGHT*0.5,LUT_TEXEL_WIDTH-LUT_TEXEL_HEIGHT*0.5);vec2 uv0=vec2(rgb.r,slice0*LUT_TEXEL_WIDTH+yOffset);vec2 uv1=vec2(rgb.r,slice1*LUT_TEXEL_WIDTH+yOffset); -#endif -vec4 sample0=texture2D(lut,uv0);vec4 sample1=texture2D(lut,uv1);return mix(sample0,sample1,abs(centeredInterp));} -#endif -void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec3 c=inputColor.rgb; -#ifdef CUSTOM_INPUT_DOMAIN -if(c.r>=domainMin.r&&c.g>=domainMin.g&&c.b>=domainMin.b&&c.r<=domainMax.r&&c.g<=domainMax.g&&c.b<=domainMax.b){c=applyLUT(scale*c+offset).rgb;}else{c=inputColor.rgb;} -#else -#if !defined(LUT_3D) || defined(TETRAHEDRAL_INTERPOLATION) -c=clamp(c,0.0,1.0); -#endif -c=applyLUT(scale*c+offset).rgb; -#endif -outputColor=vec4(c,inputColor.a);}`,VP=class extends Ii{constructor(n,{blendFunction:e=Ct.SRC,tetrahedralInterpolation:t=!1,inputEncoding:i=zs,inputColorSpace:s}={}){super("LUT3DEffect",WP,{blendFunction:e,uniforms:new Map([["lut",new ee(null)],["scale",new ee(new X)],["offset",new ee(new X)],["domainMin",new ee(null)],["domainMax",new ee(null)]])}),this.tetrahedralInterpolation=t,this.inputColorSpace=s||eM.get(i),this.lut=n}get inputEncoding(){return this.inputColorSpace}set inputEncoding(n){this.inputColorSpace=n}getInputEncoding(){return this.inputColorSpace}setInputEncoding(n){this.inputColorSpace=n}getOutputEncoding(){return this.outputColorSpace}get lut(){return this.uniforms.get("lut").value}set lut(n){const e=this.defines,t=this.uniforms;if(this.lut!==n&&(t.get("lut").value=n,n!==null)){const i=n.image,s=this.tetrahedralInterpolation;if(e.clear(),e.set("LUT_SIZE",Math.min(i.width,i.height).toFixed(16)),e.set("LUT_TEXEL_WIDTH",(1/i.width).toFixed(16)),e.set("LUT_TEXEL_HEIGHT",(1/i.height).toFixed(16)),t.get("domainMin").value=null,t.get("domainMax").value=null,(n.type===Rn||n.type===ds)&&e.set("LUT_PRECISION_HIGH","1"),i.width>i.height?e.set("LUT_STRIP_HORIZONTAL","1"):n instanceof hl&&e.set("LUT_3D","1"),n instanceof kh){const r=n.domainMin,o=n.domainMax;(r.x!==0||r.y!==0||r.z!==0||o.x!==1||o.y!==1||o.z!==1)&&(e.set("CUSTOM_INPUT_DOMAIN","1"),t.get("domainMin").value=r.clone(),t.get("domainMax").value=o.clone())}this.tetrahedralInterpolation=s}}getLUT(){return this.lut}setLUT(n){this.lut=n}updateScaleOffset(){const n=this.lut;if(n!==null){const e=Math.min(n.image.width,n.image.height),t=this.uniforms.get("scale").value,i=this.uniforms.get("offset").value;if(this.tetrahedralInterpolation&&n instanceof hl)if(this.defines.has("CUSTOM_INPUT_DOMAIN")){const s=n.domainMax.clone().sub(n.domainMin);t.setScalar(e-1).divide(s),i.copy(n.domainMin).negate().multiply(t)}else t.setScalar(e-1),i.setScalar(0);else if(this.defines.has("CUSTOM_INPUT_DOMAIN")){const s=n.domainMax.clone().sub(n.domainMin).multiplyScalar(e);t.setScalar(e-1).divide(s),i.copy(n.domainMin).negate().multiply(t).addScalar(1/(2*e))}else t.setScalar((e-1)/e),i.setScalar(1/(2*e))}}configureTetrahedralInterpolation(){const n=this.lut;n!==null&&(n.minFilter=et,n.magFilter=et,this.tetrahedralInterpolation&&(n instanceof hl?(n.minFilter=ft,n.magFilter=ft):console.warn("Tetrahedral interpolation requires a 3D texture")),n.source===void 0&&(n.needsUpdate=!0))}get tetrahedralInterpolation(){return this.defines.has("TETRAHEDRAL_INTERPOLATION")}set tetrahedralInterpolation(n){n?this.defines.set("TETRAHEDRAL_INTERPOLATION","1"):this.defines.delete("TETRAHEDRAL_INTERPOLATION"),this.configureTetrahedralInterpolation(),this.updateScaleOffset(),this.setChanged()}setTetrahedralInterpolationEnabled(n){this.tetrahedralInterpolation=n}},MP=`uniform lowp sampler2D edgeTexture;uniform lowp sampler2D maskTexture;uniform vec3 visibleEdgeColor;uniform vec3 hiddenEdgeColor;uniform float pulse;uniform float edgeStrength; -#ifdef USE_PATTERN -uniform lowp sampler2D patternTexture;varying vec2 vUvPattern; -#endif -void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec2 edge=texture2D(edgeTexture,uv).rg;vec2 mask=texture2D(maskTexture,uv).rg; -#ifndef X_RAY -edge.y=0.0; -#endif -edge*=(edgeStrength*mask.x*pulse);vec3 color=edge.x*visibleEdgeColor+edge.y*hiddenEdgeColor;float visibilityFactor=0.0; -#ifdef USE_PATTERN -vec4 patternColor=texture2D(patternTexture,vUvPattern); -#ifdef X_RAY -float hiddenFactor=0.5; -#else -float hiddenFactor=0.0; -#endif -visibilityFactor=(1.0-mask.y>0.0)?1.0:hiddenFactor;visibilityFactor*=(1.0-mask.x)*patternColor.a;color+=visibilityFactor*patternColor.rgb; -#endif -float alpha=max(max(edge.x,edge.y),visibilityFactor); -#ifdef ALPHA -outputColor=vec4(color,alpha); -#else -outputColor=vec4(color,max(alpha,inputColor.a)); -#endif -}`,NP="uniform float patternScale;varying vec2 vUvPattern;void mainSupport(const in vec2 uv){vUvPattern=uv*vec2(aspect,1.0)*patternScale;}",HP=class extends Ii{constructor(n,e,{blendFunction:t=Ct.SCREEN,patternTexture:i=null,patternScale:s=1,edgeStrength:r=1,pulseSpeed:o=0,visibleEdgeColor:a=16777215,hiddenEdgeColor:l=2230538,kernelSize:c=xc.VERY_SMALL,blur:u=!1,xRay:C=!0,multisampling:d=0,resolutionScale:h=.5,width:m=Ot.AUTO_SIZE,height:y=Ot.AUTO_SIZE,resolutionX:v=m,resolutionY:A=y}={}){super("OutlineEffect",MP,{uniforms:new Map([["maskTexture",new ee(null)],["edgeTexture",new ee(null)],["edgeStrength",new ee(r)],["visibleEdgeColor",new ee(new Ne(a))],["hiddenEdgeColor",new ee(new Ne(l))],["pulse",new ee(1)],["patternScale",new ee(s)],["patternTexture",new ee(null)]])}),this.blendMode.addEventListener("change",S=>{this.blendMode.blendFunction===Ct.ALPHA?this.defines.set("ALPHA","1"):this.defines.delete("ALPHA"),this.setChanged()}),this.blendMode.blendFunction=t,this.patternTexture=i,this.xRay=C,this.scene=n,this.camera=e,this.renderTargetMask=new Nt(1,1),this.renderTargetMask.samples=d,this.renderTargetMask.texture.name="Outline.Mask",this.uniforms.get("maskTexture").value=this.renderTargetMask.texture,this.renderTargetOutline=new Nt(1,1,{depthBuffer:!1}),this.renderTargetOutline.texture.name="Outline.Edges",this.uniforms.get("edgeTexture").value=this.renderTargetOutline.texture,this.clearPass=new Rc,this.clearPass.overrideClearColor=new Ne(0),this.clearPass.overrideClearAlpha=1,this.depthPass=new Vv(n,e),this.maskPass=new Wc(n,e,new YD(this.depthPass.texture,e));const b=this.maskPass.clearPass;b.overrideClearColor=new Ne(16777215),b.overrideClearAlpha=1,this.blurPass=new Ip({resolutionScale:h,resolutionX:v,resolutionY:A,kernelSize:c}),this.blurPass.enabled=u;const f=this.blurPass.resolution;f.addEventListener("change",S=>this.setSize(f.baseWidth,f.baseHeight)),this.outlinePass=new cs(new aU);const B=this.outlinePass.fullscreenMaterial;B.inputBuffer=this.renderTargetMask.texture,this.time=0,this.active=!1,this.selection=new Mv,this.selection.layer=10,this.pulseSpeed=o}set mainScene(n){this.scene=n,this.depthPass.mainScene=n,this.maskPass.mainScene=n}set mainCamera(n){this.camera=n,this.depthPass.mainCamera=n,this.maskPass.mainCamera=n,this.maskPass.overrideMaterial.copyCameraSettings(n)}get resolution(){return this.blurPass.resolution}getResolution(){return this.blurPass.getResolution()}get multisampling(){return this.renderTargetMask.samples}set multisampling(n){this.renderTargetMask.samples=n,this.renderTargetMask.dispose()}get patternScale(){return this.uniforms.get("patternScale").value}set patternScale(n){this.uniforms.get("patternScale").value=n}get edgeStrength(){return this.uniforms.get("edgeStrength").value}set edgeStrength(n){this.uniforms.get("edgeStrength").value=n}get visibleEdgeColor(){return this.uniforms.get("visibleEdgeColor").value}set visibleEdgeColor(n){this.uniforms.get("visibleEdgeColor").value=n}get hiddenEdgeColor(){return this.uniforms.get("hiddenEdgeColor").value}set hiddenEdgeColor(n){this.uniforms.get("hiddenEdgeColor").value=n}getBlurPass(){return this.blurPass}getSelection(){return this.selection}getPulseSpeed(){return this.pulseSpeed}setPulseSpeed(n){this.pulseSpeed=n}get width(){return this.resolution.width}set width(n){this.resolution.preferredWidth=n}get height(){return this.resolution.height}set height(n){this.resolution.preferredHeight=n}get selectionLayer(){return this.selection.layer}set selectionLayer(n){this.selection.layer=n}get dithering(){return this.blurPass.dithering}set dithering(n){this.blurPass.dithering=n}get kernelSize(){return this.blurPass.kernelSize}set kernelSize(n){this.blurPass.kernelSize=n}get blur(){return this.blurPass.enabled}set blur(n){this.blurPass.enabled=n}get xRay(){return this.defines.has("X_RAY")}set xRay(n){this.xRay!==n&&(n?this.defines.set("X_RAY","1"):this.defines.delete("X_RAY"),this.setChanged())}isXRayEnabled(){return this.xRay}setXRayEnabled(n){this.xRay=n}get patternTexture(){return this.uniforms.get("patternTexture").value}set patternTexture(n){n!==null?(n.wrapS=n.wrapT=ps,this.defines.set("USE_PATTERN","1"),this.setVertexShader(NP)):(this.defines.delete("USE_PATTERN"),this.setVertexShader(null)),this.uniforms.get("patternTexture").value=n,this.setChanged()}setPatternTexture(n){this.patternTexture=n}getResolutionScale(){return this.resolution.scale}setResolutionScale(n){this.resolution.scale=n}setSelection(n){return this.selection.set(n),this}clearSelection(){return this.selection.clear(),this}selectObject(n){return this.selection.add(n),this}deselectObject(n){return this.selection.delete(n),this}update(n,e,t){const i=this.scene,s=this.camera,r=this.selection,a=this.uniforms.get("pulse"),l=i.background,c=s.layers.mask;r.size>0?(i.background=null,a.value=1,this.pulseSpeed>0&&(a.value=Math.cos(this.time*this.pulseSpeed*10)*.375+.625),this.active=!0,this.time+=t,r.setVisible(!1),this.depthPass.render(n),r.setVisible(!0),s.layers.set(r.layer),this.maskPass.render(n,this.renderTargetMask),s.layers.mask=c,i.background=l,this.outlinePass.render(n,null,this.renderTargetOutline),this.blurPass.enabled&&this.blurPass.render(n,this.renderTargetOutline,this.renderTargetOutline)):this.active&&(this.clearPass.render(n,this.renderTargetOutline),this.active=!1)}setSize(n,e){this.blurPass.setSize(n,e),this.renderTargetMask.setSize(n,e);const t=this.resolution;t.setBaseSize(n,e);const i=t.width,s=t.height;this.depthPass.setSize(i,s),this.renderTargetOutline.setSize(i,s),this.outlinePass.fullscreenMaterial.setSize(i,s)}initialize(n,e,t){this.blurPass.initialize(n,e,ln),t!==void 0&&(this.depthPass.initialize(n,e,t),this.maskPass.initialize(n,e,t),this.outlinePass.initialize(n,e,t))}},XP="uniform bool active;uniform vec4 d;void mainUv(inout vec2 uv){if(active){uv=d.xy*(floor(uv*d.zw)+0.5);}}",YP=class extends Ii{constructor(n=30){super("PixelationEffect",XP,{uniforms:new Map([["active",new ee(!1)],["d",new ee(new Xt)]])}),this.resolution=new ne,this._granularity=0,this.granularity=n}get granularity(){return this._granularity}set granularity(n){let e=Math.floor(n);e%2>0&&(e+=1),this._granularity=e,this.uniforms.get("active").value=e>0,this.setSize(this.resolution.width,this.resolution.height)}getGranularity(){return this.granularity}setGranularity(n){this.granularity=n}setSize(n,e){const t=this.resolution;t.set(n,e);const i=this.granularity,s=i/t.x,r=i/t.y;this.uniforms.get("d").value.set(s,r,1/s,1/r)}};new X;new X;var FP=class extends dP{constructor(n,e,t){super(t),this.setAttributes(this.getAttributes()|ts.DEPTH),this.camera=e,this.depthPass=new Vv(n,e),this.clearPass=new Rc(!0,!1,!1),this.clearPass.overrideClearColor=new Ne(0),this.depthMaskPass=new cs(new iM);const i=this.depthMaskMaterial;i.copyCameraSettings(e),i.depthBuffer1=this.depthPass.texture,i.depthPacking1=Yr,i.depthMode=bu,this.renderTargetMasked=new Nt(1,1,{depthBuffer:!1}),this.renderTargetMasked.texture.name="Bloom.Masked",this.selection=new Mv,this.selection.layer=11,this._inverted=!1,this._ignoreBackground=!1}set mainScene(n){this.depthPass.mainScene=n}set mainCamera(n){this.camera=n,this.depthPass.mainCamera=n,this.depthMaskMaterial.copyCameraSettings(n)}getSelection(){return this.selection}get depthMaskMaterial(){return this.depthMaskPass.fullscreenMaterial}get inverted(){return this._inverted}set inverted(n){this._inverted=n,this.depthMaskMaterial.depthMode=n?DA:bu}isInverted(){return this.inverted}setInverted(n){this.inverted=n}get ignoreBackground(){return this._ignoreBackground}set ignoreBackground(n){this._ignoreBackground=n,this.depthMaskMaterial.maxDepthStrategy=n?jI.DISCARD_MAX_DEPTH:jI.KEEP_MAX_DEPTH}isBackgroundDisabled(){return this.ignoreBackground}setBackgroundDisabled(n){this.ignoreBackground=n}setDepthTexture(n,e=zn){this.depthMaskMaterial.depthBuffer0=n,this.depthMaskMaterial.depthPacking0=e}update(n,e,t){const i=this.camera,s=this.selection,r=this.inverted;let o=e;if(this.ignoreBackground||!r||s.size>0){const a=i.layers.mask;i.layers.set(s.layer),this.depthPass.render(n),i.layers.mask=a,o=this.renderTargetMasked,this.clearPass.render(n,o),this.depthMaskPass.render(n,e,o)}super.update(n,o,t)}setSize(n,e){super.setSize(n,e),this.renderTargetMasked.setSize(n,e),this.depthPass.setSize(n,e)}initialize(n,e,t){super.initialize(n,e,t),this.clearPass.initialize(n,e,t),this.depthPass.initialize(n,e,t),this.depthMaskPass.initialize(n,e,t),t!==void 0&&(this.renderTargetMasked.texture.type=t,fo(n)===Jt&&_n(this.renderTargetMasked.texture,Jt))}},wS="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAQCAYAAACm53kpAAAAeElEQVRYR+2XSwqAMAxEJ168ePEqwRSKhIIiuHjJqiU0gWE+1CQdApcVAMUAuARaMGCX1MIL/Ow13++9lW2s3mW9MWvsnWc/2fvGygwPAN4E8QzAA4CXAB6AHjG4JTHYI1ey3pcx6FHnEfhLDOIBKAmUBK6/ANUDTlROXAHd9EC1AAAAAElFTkSuQmCC",SS="data:image/png;base64,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",KP="uniform sampler2D weightMap;varying vec2 vOffset0;varying vec2 vOffset1;void movec(const in bvec2 c,inout vec2 variable,const in vec2 value){if(c.x){variable.x=value.x;}if(c.y){variable.y=value.y;}}void movec(const in bvec4 c,inout vec4 variable,const in vec4 value){movec(c.xy,variable.xy,value.xy);movec(c.zw,variable.zw,value.zw);}void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec4 a;a.x=texture2D(weightMap,vOffset0).a;a.y=texture2D(weightMap,vOffset1).g;a.wz=texture2D(weightMap,uv).rb;vec4 color=inputColor;if(dot(a,vec4(1.0))>=1e-5){bool h=max(a.x,a.z)>max(a.y,a.w);vec4 blendingOffset=vec4(0.0,a.y,0.0,a.w);vec2 blendingWeight=a.yw;movec(bvec4(h),blendingOffset,vec4(a.x,0.0,a.z,0.0));movec(bvec2(h),blendingWeight,a.xz);blendingWeight/=dot(blendingWeight,vec2(1.0));vec4 blendingCoord=blendingOffset*vec4(texelSize,-texelSize)+uv.xyxy;color=blendingWeight.x*texture2D(inputBuffer,blendingCoord.xy);color+=blendingWeight.y*texture2D(inputBuffer,blendingCoord.zw);}outputColor=color;}",zP="varying vec2 vOffset0;varying vec2 vOffset1;void mainSupport(const in vec2 uv){vOffset0=uv+texelSize*vec2(1.0,0.0);vOffset1=uv+texelSize*vec2(0.0,1.0);}",LP=class extends Ii{constructor({blendFunction:n=Ct.SRC,preset:e=wI.MEDIUM,edgeDetectionMode:t=tM.COLOR,predicationMode:i=xD.DISABLED}={}){super("SMAAEffect",KP,{vertexShader:zP,blendFunction:n,attributes:ts.CONVOLUTION|ts.DEPTH,uniforms:new Map([["weightMap",new ee(null)]])});let s,r;arguments.length>1&&(s=arguments[0],r=arguments[1],arguments.length>2&&(e=arguments[2]),arguments.length>3&&(t=arguments[3])),this.renderTargetEdges=new Nt(1,1,{depthBuffer:!1}),this.renderTargetEdges.texture.name="SMAA.Edges",this.renderTargetWeights=this.renderTargetEdges.clone(),this.renderTargetWeights.texture.name="SMAA.Weights",this.uniforms.get("weightMap").value=this.renderTargetWeights.texture,this.clearPass=new Rc(!0,!1,!1),this.clearPass.overrideClearColor=new Ne(0),this.clearPass.overrideClearAlpha=1,this.edgeDetectionPass=new cs(new OD),this.edgeDetectionMaterial.edgeDetectionMode=t,this.edgeDetectionMaterial.predicationMode=i,this.weightsPass=new cs(new cU);const o=new ap;o.onLoad=()=>{const a=new en(s);a.name="SMAA.Search",a.magFilter=ft,a.minFilter=ft,a.generateMipmaps=!1,a.needsUpdate=!0,a.flipY=!0,this.weightsMaterial.searchTexture=a;const l=new en(r);l.name="SMAA.Area",l.magFilter=et,l.minFilter=et,l.generateMipmaps=!1,l.needsUpdate=!0,l.flipY=!1,this.weightsMaterial.areaTexture=l,this.dispatchEvent({type:"load"})},o.itemStart("search"),o.itemStart("area"),s!==void 0&&r!==void 0?(o.itemEnd("search"),o.itemEnd("area")):typeof Image<"u"&&(s=new Image,r=new Image,s.addEventListener("load",()=>o.itemEnd("search")),r.addEventListener("load",()=>o.itemEnd("area")),s.src=wS,r.src=SS),this.applyPreset(e)}get edgesTexture(){return this.renderTargetEdges.texture}getEdgesTexture(){return this.edgesTexture}get weightsTexture(){return this.renderTargetWeights.texture}getWeightsTexture(){return this.weightsTexture}get edgeDetectionMaterial(){return this.edgeDetectionPass.fullscreenMaterial}get colorEdgesMaterial(){return this.edgeDetectionMaterial}getEdgeDetectionMaterial(){return this.edgeDetectionMaterial}get weightsMaterial(){return this.weightsPass.fullscreenMaterial}getWeightsMaterial(){return this.weightsMaterial}setEdgeDetectionThreshold(n){this.edgeDetectionMaterial.edgeDetectionThreshold=n}setOrthogonalSearchSteps(n){this.weightsMaterial.orthogonalSearchSteps=n}applyPreset(n){const e=this.edgeDetectionMaterial,t=this.weightsMaterial;switch(n){case wI.LOW:e.edgeDetectionThreshold=.15,t.orthogonalSearchSteps=4,t.diagonalDetection=!1,t.cornerDetection=!1;break;case wI.MEDIUM:e.edgeDetectionThreshold=.1,t.orthogonalSearchSteps=8,t.diagonalDetection=!1,t.cornerDetection=!1;break;case wI.HIGH:e.edgeDetectionThreshold=.1,t.orthogonalSearchSteps=16,t.diagonalSearchSteps=8,t.cornerRounding=25,t.diagonalDetection=!0,t.cornerDetection=!0;break;case wI.ULTRA:e.edgeDetectionThreshold=.05,t.orthogonalSearchSteps=32,t.diagonalSearchSteps=16,t.cornerRounding=25,t.diagonalDetection=!0,t.cornerDetection=!0;break}}setDepthTexture(n,e=zn){this.edgeDetectionMaterial.depthBuffer=n,this.edgeDetectionMaterial.depthPacking=e}update(n,e,t){this.clearPass.render(n,this.renderTargetEdges),this.edgeDetectionPass.render(n,e,this.renderTargetEdges),this.weightsPass.render(n,this.renderTargetEdges,this.renderTargetWeights)}setSize(n,e){this.edgeDetectionMaterial.setSize(n,e),this.weightsMaterial.setSize(n,e),this.renderTargetEdges.setSize(n,e),this.renderTargetWeights.setSize(n,e)}dispose(){const{searchTexture:n,areaTexture:e}=this.weightsMaterial;n!==null&&e!==null&&(n.dispose(),e.dispose()),super.dispose()}static get searchImageDataURL(){return wS}static get areaImageDataURL(){return SS}},TP=`uniform lowp sampler2D aoBuffer;uniform float luminanceInfluence;uniform float intensity; -#if THREE_REVISION < 143 -#define luminance(v) linearToRelativeLuminance(v) -#endif -#if defined(DEPTH_AWARE_UPSAMPLING) && defined(NORMAL_DEPTH) -#ifdef GL_FRAGMENT_PRECISION_HIGH -uniform highp sampler2D normalDepthBuffer; -#else -uniform mediump sampler2D normalDepthBuffer; -#endif -#endif -#ifdef COLORIZE -uniform vec3 color; -#endif -void mainImage(const in vec4 inputColor,const in vec2 uv,const in float depth,out vec4 outputColor){float aoLinear=texture2D(aoBuffer,uv).r; -#if defined(DEPTH_AWARE_UPSAMPLING) && defined(NORMAL_DEPTH) && __VERSION__ == 300 -vec4 normalDepth[4];normalDepth[0]=textureOffset(normalDepthBuffer,uv,ivec2(0,0));normalDepth[1]=textureOffset(normalDepthBuffer,uv,ivec2(0,1));normalDepth[2]=textureOffset(normalDepthBuffer,uv,ivec2(1,0));normalDepth[3]=textureOffset(normalDepthBuffer,uv,ivec2(1,1));float dot01=dot(normalDepth[0].rgb,normalDepth[1].rgb);float dot02=dot(normalDepth[0].rgb,normalDepth[2].rgb);float dot03=dot(normalDepth[0].rgb,normalDepth[3].rgb);float minDot=min(dot01,min(dot02,dot03));float s=step(THRESHOLD,minDot);float smallestDistance=1.0;int index;for(int i=0;i<4;++i){float distance=abs(depth-normalDepth[i].a);if(distancethis.setSize(H.baseWidth,H.baseHeight)),this.camera=n,this.depthDownsamplingPass=new rM({normalBuffer:e,resolutionScale:x}),this.depthDownsamplingPass.enabled=r===null,this.ssaoPass=new cs(new CU(n));const U=new Wb(xS,xS,hn);U.wrapS=U.wrapT=ps;const D=this.ssaoMaterial;D.normalBuffer=e,D.noiseTexture=U,D.minRadiusScale=y,D.samples=i,D.radius=A,D.rings=s,D.fade=B,D.bias=f,D.distanceThreshold=C,D.distanceFalloff=d,D.proximityThreshold=h,D.proximityFalloff=m,a!==void 0&&(D.worldDistanceThreshold=a),l!==void 0&&(D.worldDistanceFalloff=l),c!==void 0&&(D.worldProximityThreshold=c),u!==void 0&&(D.worldProximityFalloff=u),r!==null&&(this.ssaoMaterial.normalDepthBuffer=r,this.defines.set("NORMAL_DEPTH","1")),this.depthAwareUpsampling=o,this.color=S}set mainCamera(n){this.camera=n,this.ssaoMaterial.copyCameraSettings(n)}get normalBuffer(){return this.ssaoMaterial.normalBuffer}set normalBuffer(n){this.ssaoMaterial.normalBuffer=n,this.depthDownsamplingPass.fullscreenMaterial.normalBuffer=n}getResolution(){return this.resolution}get ssaoMaterial(){return this.ssaoPass.fullscreenMaterial}getSSAOMaterial(){return this.ssaoMaterial}get samples(){return this.ssaoMaterial.samples}set samples(n){this.ssaoMaterial.samples=n}get rings(){return this.ssaoMaterial.rings}set rings(n){this.ssaoMaterial.rings=n}get radius(){return this.ssaoMaterial.radius}set radius(n){this.ssaoMaterial.radius=n}get depthAwareUpsampling(){return this.defines.has("DEPTH_AWARE_UPSAMPLING")}set depthAwareUpsampling(n){this.depthAwareUpsampling!==n&&(n?this.defines.set("DEPTH_AWARE_UPSAMPLING","1"):this.defines.delete("DEPTH_AWARE_UPSAMPLING"),this.setChanged())}isDepthAwareUpsamplingEnabled(){return this.depthAwareUpsampling}setDepthAwareUpsamplingEnabled(n){this.depthAwareUpsampling=n}get distanceScaling(){return!0}set distanceScaling(n){}get color(){return this.uniforms.get("color").value}set color(n){const e=this.uniforms,t=this.defines;n!==null?t.has("COLORIZE")?e.get("color").value.set(n):(t.set("COLORIZE","1"),e.get("color").value=new Ne(n),this.setChanged()):t.has("COLORIZE")&&(t.delete("COLORIZE"),e.get("color").value=null,this.setChanged())}get luminanceInfluence(){return this.uniforms.get("luminanceInfluence").value}set luminanceInfluence(n){this.uniforms.get("luminanceInfluence").value=n}get intensity(){return this.uniforms.get("intensity").value}set intensity(n){this.uniforms.get("intensity").value=n}getColor(){return this.color}setColor(n){this.color=n}setDistanceCutoff(n,e){this.ssaoMaterial.distanceThreshold=n,this.ssaoMaterial.distanceFalloff=e}setProximityCutoff(n,e){this.ssaoMaterial.proximityThreshold=n,this.ssaoMaterial.proximityFalloff=e}setDepthTexture(n,e=zn){this.depthDownsamplingPass.setDepthTexture(n,e),this.ssaoMaterial.depthBuffer=n,this.ssaoMaterial.depthPacking=e}update(n,e,t){const i=this.renderTarget;this.depthDownsamplingPass.enabled&&this.depthDownsamplingPass.render(n),this.ssaoPass.render(n,null,i)}setSize(n,e){const t=this.resolution;t.setBaseSize(n,e);const i=t.width,s=t.height;this.ssaoMaterial.copyCameraSettings(this.camera),this.ssaoMaterial.setSize(i,s),this.renderTarget.setSize(i,s),this.depthDownsamplingPass.resolution.scale=t.scale,this.depthDownsamplingPass.setSize(n,e)}initialize(n,e,t){try{let i=this.uniforms.get("normalDepthBuffer").value;i===null&&(this.depthDownsamplingPass.initialize(n,e,t),i=this.depthDownsamplingPass.texture,this.uniforms.get("normalDepthBuffer").value=i,this.ssaoMaterial.normalDepthBuffer=i,this.defines.set("NORMAL_DEPTH","1"))}catch{this.depthDownsamplingPass.enabled=!1}}},kP=`#ifdef TEXTURE_PRECISION_HIGH -uniform mediump sampler2D map; -#else -uniform lowp sampler2D map; -#endif -varying vec2 vUv2;void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){ -#ifdef UV_TRANSFORM -vec4 texel=texture2D(map,vUv2); -#else -vec4 texel=texture2D(map,uv); -#endif -outputColor=TEXEL;}`,DP=`#ifdef ASPECT_CORRECTION -uniform float scale; -#else -uniform mat3 uvTransform; -#endif -varying vec2 vUv2;void mainSupport(const in vec2 uv){ -#ifdef ASPECT_CORRECTION -vUv2=uv*vec2(aspect,1.0)*scale; -#else -vUv2=(uvTransform*vec3(uv,1.0)).xy; -#endif -}`,UP=class extends Ii{constructor({blendFunction:n,texture:e=null,aspectCorrection:t=!1}={}){super("TextureEffect",kP,{blendFunction:n,defines:new Map([["TEXEL","texel"]]),uniforms:new Map([["map",new ee(null)],["scale",new ee(1)],["uvTransform",new ee(null)]])}),this.texture=e,this.aspectCorrection=t}get texture(){return this.uniforms.get("map").value}set texture(n){const e=this.texture,t=this.uniforms,i=this.defines;e!==n&&(t.get("map").value=n,t.get("uvTransform").value=n.matrix,i.delete("TEXTURE_PRECISION_HIGH"),n!==null&&(n.matrixAutoUpdate?(i.set("UV_TRANSFORM","1"),this.setVertexShader(DP)):(i.delete("UV_TRANSFORM"),this.setVertexShader(null)),n.type!==ln&&i.set("TEXTURE_PRECISION_HIGH","1"),(e===null||e.type!==n.type||e.encoding!==n.encoding)&&this.setChanged()))}getTexture(){return this.texture}setTexture(n){this.texture=n}get aspectCorrection(){return this.defines.has("ASPECT_CORRECTION")}set aspectCorrection(n){this.aspectCorrection!==n&&(n?this.defines.set("ASPECT_CORRECTION","1"):this.defines.delete("ASPECT_CORRECTION"),this.setChanged())}get uvTransform(){const n=this.texture;return n!==null&&n.matrixAutoUpdate}set uvTransform(n){const e=this.texture;e!==null&&(e.matrixAutoUpdate=n)}setTextureSwizzleRGBA(n,e=n,t=n,i=n){const s="rgba";let r="";(n!==Dg.RED||e!==Dg.GREEN||t!==Dg.BLUE||i!==Dg.ALPHA)&&(r=[".",s[n],s[e],s[t],s[i]].join("")),this.defines.set("TEXEL","texel"+r),this.setChanged()}update(n,e,t){this.texture.matrixAutoUpdate&&this.texture.updateMatrix()}};function Vb(){return Vb=Object.assign?Object.assign.bind():function(n){for(var e=1;e -void mainImage(const in vec4 inputColor,const in vec2 uv,out vec4 outputColor){vec4 reflectionsTexel=texture2D(reflectionsTexture,vUv);ivec2 size=textureSize(reflectionsTexture,0);vec2 invTexSize=1./vec2(size.x,size.y);vec3 reflectionClr=reflectionsTexel.xyz;if(blur>FLOAT_EPSILON){vec3 blurredReflectionsColor=denoise(reflectionsTexel.rgb,reflectionsTexture,vUv,invTexSize,blur,blurSharpness,blurKernel);reflectionClr=mix(reflectionClr,blurredReflectionsColor.rgb,blur);} -#if RENDER_MODE == MODE_DEFAULT -outputColor=vec4(inputColor.rgb+reflectionClr,1.0); -#endif -#if RENDER_MODE == MODE_REFLECTIONS -outputColor=vec4(reflectionClr,1.0); -#endif -#if RENDER_MODE == MODE_RAW_REFLECTION -outputColor=vec4(reflectionsTexel.xyz,1.0); -#endif -#if RENDER_MODE == MODE_BLURRED_REFLECTIONS -outputColor=vec4(blurredReflectionsTexel.xyz,1.0); -#endif -#if RENDER_MODE == MODE_INPUT -outputColor=vec4(inputColor.xyz,1.0); -#endif -#if RENDER_MODE == MODE_BLUR_MIX -outputColor=vec4(vec3(blur),1.0); -#endif -}`,aM=`#define GLSLIFY 1 -vec3 getViewPosition(const float depth){float clipW=_projectionMatrix[2][3]*depth+_projectionMatrix[3][3];vec4 clipPosition=vec4((vec3(vUv,depth)-0.5)*2.0,1.0);clipPosition*=clipW;return(_inverseProjectionMatrix*clipPosition).xyz;}float getViewZ(const in float depth){ -#ifdef PERSPECTIVE_CAMERA -return perspectiveDepthToViewZ(depth,cameraNear,cameraFar); -#else -return orthographicDepthToViewZ(depth,cameraNear,cameraFar); -#endif -}vec3 screenSpaceToWorldSpace(const vec2 uv,const float depth){vec4 ndc=vec4((uv.x-0.5)*2.0,(uv.y-0.5)*2.0,(depth-0.5)*2.0,1.0);vec4 clip=_inverseProjectionMatrix*ndc;vec4 view=cameraMatrixWorld*(clip/clip.w);return view.xyz;} -#define Scale (vec3(0.8, 0.8, 0.8)) -#define K (19.19) -vec3 hash(vec3 a){a=fract(a*Scale);a+=dot(a,a.yxz+K);return fract((a.xxy+a.yxx)*a.zyx);}float fresnel_dielectric_cos(float cosi,float eta){float c=abs(cosi);float g=eta*eta-1.0+c*c;float result;if(g>0.0){g=sqrt(g);float A=(g-c)/(g+c);float B=(c*(g+c)-1.0)/(c*(g-c)+1.0);result=0.5*A*A*(1.0+B*B);}else{result=1.0;}return result;}float fresnel_dielectric(vec3 Incoming,vec3 Normal,float eta){float cosine=dot(Incoming,Normal);return min(1.0,5.0*fresnel_dielectric_cos(cosine,eta));}`,JP=`#define GLSLIFY 1 -#define INV_EULER 0.36787944117144233 -alpha=velocityDisocclusion0.5; -#ifdef boxBlur -if(needsBlur)inputColor=boxBlurredColor; -#endif -if(alpha==1.0){outputColor=accumulatedColor;}else{float m=mix(alpha,1.0,blend);if(needsBlur)m=0.0;outputColor=accumulatedColor*m+inputColor*(1.0-m);}`;class OP extends Rt{constructor(){super({type:"MRTMaterial",defines:{USE_UV:"",TEMPORAL_RESOLVE:""},uniforms:{opacity:new ee(1),normalMap:new ee(null),normalScale:new ee(new ne(1,1)),uvTransform:new ee(new Mt),roughness:new ee(1),roughnessMap:new ee(null)},vertexShader:` - #ifdef USE_MRT - varying vec2 vHighPrecisionZW; - #endif - #define NORMAL - #if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP ) - varying vec3 vViewPosition; - #endif - #include - #include - #include - #include - #include - #include - #include - #include - void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP ) - vViewPosition = - mvPosition.xyz; - #endif - #ifdef USE_MRT - vHighPrecisionZW = gl_Position.zw; - #endif - #ifdef USE_UV - vUv = ( uvTransform * vec3( uv, 1 ) ).xy; - #endif - } - `,fragmentShader:` - #define NORMAL - #if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP ) - varying vec3 vViewPosition; - #endif - #include - #include - #include - #include - #include - #include - #include - #include - - #ifdef USE_MRT - layout(location = 0) out vec4 gNormal; - layout(location = 1) out vec4 gDepth; - - varying vec2 vHighPrecisionZW; - #endif - uniform float roughness; - void main() { - #include - #include - #include - #include - - float roughnessFactor = roughness; - - if(roughness > 10.0e9){ - roughnessFactor = 1.; - }else{ - #ifdef useRoughnessMap - vec4 texelRoughness = texture2D( roughnessMap, vUv ); - // reads channel G, compatible with a combined OcclusionRoughnessMetallic (RGB) texture - roughnessFactor *= texelRoughness.g; - #endif - } - - vec3 normalColor = packNormalToRGB( normal ); - #ifdef USE_MRT - float fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5; - vec4 depthColor = packDepthToRGBA( fragCoordZ ); - gNormal = vec4( normalColor, roughnessFactor ); - gDepth = depthColor; - #else - gl_FragColor = vec4(normalColor, roughnessFactor); - #endif - } - `,toneMapped:!1}),this.normalMapType=vo,this.normalScale=new ne(1,1),Object.defineProperty(this,"glslVersion",{get(){return"USE_MRT"in this.defines?bA:null},set(e){}})}}var QP=`#define GLSLIFY 1 -varying vec2 vUv;void main(){vUv=position.xy*0.5+0.5;gl_Position=vec4(position.xy,1.0,1.0);}`,jP=`#define GLSLIFY 1 -varying vec2 vUv;uniform sampler2D inputTexture;uniform sampler2D accumulatedTexture;uniform sampler2D normalTexture;uniform sampler2D depthTexture;uniform sampler2D envMap;uniform mat4 _projectionMatrix;uniform mat4 _inverseProjectionMatrix;uniform mat4 cameraMatrixWorld;uniform float cameraNear;uniform float cameraFar;uniform float rayDistance;uniform float intensity;uniform float maxDepthDifference;uniform float roughnessFade;uniform float maxRoughness;uniform float fade;uniform float thickness;uniform float ior;uniform float samples;uniform float jitter;uniform float jitterRoughness; -#define INVALID_RAY_COORDS vec2(-1.0); -#define EARLY_OUT_COLOR vec4(0.0, 0.0, 0.0, 1.0) -#define FLOAT_EPSILON 0.00001 -float nearMinusFar;float nearMulFar;float farMinusNear; -#include -#include -vec2 RayMarch(vec3 dir,inout vec3 hitPos,inout float rayHitDepthDifference);vec2 BinarySearch(in vec3 dir,inout vec3 hitPos,inout float rayHitDepthDifference);float fastGetViewZ(const in float depth);vec3 getIBLRadiance(const in vec3 viewDir,const in vec3 normal,const in float roughness);void main(){vec4 depthTexel=textureLod(depthTexture,vUv,0.0);if(dot(depthTexel.rgb,depthTexel.rgb)1.0)jitterMix=1.0;jitt=mix(vec3(0.0),randomJitter*spread,jitterMix);}viewNormal+=jitt;float fresnelFactor=fresnel_dielectric(viewDir,viewNormal,ior);vec3 iblRadiance=getIBLRadiance(-viewDir,viewNormal,0.)*fresnelFactor;float lastFrameAlpha=textureLod(accumulatedTexture,vUv,0.0).a;if(roughness>maxRoughness||(roughness>1.0-FLOAT_EPSILON&&roughnessFade>1.0-FLOAT_EPSILON)){gl_FragColor=vec4(iblRadiance,lastFrameAlpha);return;}vec3 reflected=reflect(viewDir,viewNormal);vec3 rayDir=reflected*-viewPos.z;vec3 hitPos=viewPos;float rayHitDepthDifference;vec2 coords=RayMarch(rayDir,hitPos,rayHitDepthDifference);if(coords.x==-1.0){gl_FragColor=vec4(iblRadiance,lastFrameAlpha);return;}vec4 SSRTexel=textureLod(inputTexture,coords.xy,0.0);vec4 SSRTexelReflected=textureLod(accumulatedTexture,coords.xy,0.0);vec3 SSR=SSRTexel.rgb+SSRTexelReflected.rgb;float roughnessFactor=mix(specular,1.0,max(0.0,1.0-roughnessFade));vec2 coordsNDC=(coords.xy*2.0-1.0);float screenFade=0.1;float maxDimension=min(1.0,max(abs(coordsNDC.x),abs(coordsNDC.y)));float reflectionIntensity=1.0-(max(0.0,maxDimension-screenFade)/(1.0-screenFade));reflectionIntensity=max(0.,reflectionIntensity);vec3 finalSSR=mix(iblRadiance,SSR,reflectionIntensity)*roughnessFactor;if(fade!=0.0){vec3 hitWorldPos=screenSpaceToWorldSpace(coords,rayHitDepthDifference);float reflectionDistance=distance(hitWorldPos,worldPos)+1.0;float opacity=1.0/(reflectionDistance*fade*0.1);if(opacity>1.0)opacity=1.0;finalSSR*=opacity;}finalSSR*=fresnelFactor*intensity;finalSSR=min(vec3(1.0),finalSSR);float alpha=hitPos.z==1.0 ? 1.0 : SSRTexelReflected.a;alpha=min(lastFrameAlpha,alpha);gl_FragColor=vec4(finalSSR,alpha);}vec2 RayMarch(vec3 dir,inout vec3 hitPos,inout float rayHitDepthDifference){dir=normalize(dir);dir*=rayDistance/float(steps);float depth;vec4 projectedCoord;vec4 lastProjectedCoord;float unpackedDepth;vec4 depthTexel;for(int i=0;i1.0||projectedCoord.y<0.0||projectedCoord.y>1.0){return INVALID_RAY_COORDS;} -#endif -depthTexel=textureLod(depthTexture,projectedCoord.xy,0.0);unpackedDepth=unpackRGBAToDepth(depthTexel);depth=fastGetViewZ(unpackedDepth);rayHitDepthDifference=depth-hitPos.z;if(rayHitDepthDifference>=0.0&&rayHitDepthDifference0.0){return INVALID_RAY_COORDS;} -#endif -lastProjectedCoord=projectedCoord;}hitPos.z=1.0; -#ifndef missedRays -return INVALID_RAY_COORDS; -#endif -rayHitDepthDifference=unpackedDepth;return projectedCoord.xy;}vec2 BinarySearch(in vec3 dir,inout vec3 hitPos,inout float rayHitDepthDifference){float depth;vec4 projectedCoord;vec2 lastMinProjectedCoordXY;float unpackedDepth;vec4 depthTexel;for(int i=0;i0.0){hitPos-=dir;}else{hitPos+=dir;}}if(dot(depthTexel.rgb,depthTexel.rgb)maxDepthDifference)return INVALID_RAY_COORDS;projectedCoord=_projectionMatrix*vec4(hitPos,1.0);projectedCoord.xy/=projectedCoord.w;projectedCoord.xy=projectedCoord.xy*0.5+0.5;rayHitDepthDifference=unpackedDepth;return projectedCoord.xy;}float fastGetViewZ(const in float depth){ -#ifdef PERSPECTIVE_CAMERA -return nearMulFar/(farMinusNear*depth-cameraFar); -#else -return depth*nearMinusFar-cameraNear; -#endif -} -#include -#include -vec3 getIBLRadiance(const in vec3 viewDir,const in vec3 normal,const in float roughness){ -#if defined(ENVMAP_TYPE_CUBE_UV) -vec3 reflectVec=reflect(-viewDir,normal);reflectVec=normalize(mix(reflectVec,normal,roughness*roughness));reflectVec=inverseTransformDirection(reflectVec,viewMatrix);vec4 envMapColor=textureCubeUV(envMap,reflectVec,roughness);return envMapColor.rgb*intensity; -#else -return vec3(0.0); -#endif -}`;class qP extends Rt{constructor(){super({type:"ReflectionsMaterial",uniforms:{inputTexture:new ee(null),accumulatedTexture:new ee(null),normalTexture:new ee(null),depthTexture:new ee(null),_projectionMatrix:new ee(new Le),_inverseProjectionMatrix:new ee(new Le),cameraMatrixWorld:new ee(new Le),cameraNear:new ee(0),cameraFar:new ee(0),rayDistance:new ee(0),intensity:new ee(0),roughnessFade:new ee(0),fade:new ee(0),thickness:new ee(0),ior:new ee(0),maxDepthDifference:new ee(0),jitter:new ee(0),jitterRoughness:new ee(0),maxRoughness:new ee(0),samples:new ee(0),envMap:new ee(null),envMapPosition:new ee(new X),envMapSize:new ee(new X),viewMatrix:new ee(new Le)},defines:{steps:20,refineSteps:5,CUBEUV_TEXEL_WIDTH:0,CUBEUV_TEXEL_HEIGHT:0,CUBEUV_MAX_MIP:0,vWorldPosition:"worldPos"},fragmentShader:jP.replace("#include ",aM),vertexShader:QP,toneMapped:!1,depthWrite:!1,depthTest:!1})}}const lM=n=>{const e=[n],t=[];for(;e.length!==0;){const i=e.shift();i.material&&t.push(i);for(const s of i.children)s.visible&&e.push(s)}return t},$P=n=>{const e=n.envMapCubeUVHeight;if(e===null)return null;const t=Math.log2(e)-2,i=1/e;return{texelWidth:1/(3*Math.max(Math.pow(2,t),7*16)),texelHeight:i,maxMip:t}},RS=(n,e,t)=>{n.uniforms.envMap.value=e;const i=$P({envMapCubeUVHeight:t});n.defines.ENVMAP_TYPE_CUBE_UV="",n.defines.CUBEUV_TEXEL_WIDTH=i.texelWidth,n.defines.CUBEUV_TEXEL_HEIGHT=i.texelHeight,n.defines.CUBEUV_MAX_MIP=i.maxMip+".0",n.needsUpdate=!0},e_=()=>{try{const n=document.createElement("canvas");return!!(window.WebGL2RenderingContext&&n.getContext("webgl2"))}catch{return!1}};class t_ extends Vn{constructor(e,t={}){super("ReflectionsPass"),this.ssrEffect=void 0,this.cachedMaterials=new WeakMap,this.USE_MRT=!1,this.webgl1DepthPass=null,this.visibleMeshes=[],this.ssrEffect=e,this._scene=e._scene,this._camera=e._camera,this.fullscreenMaterial=new qP,e._camera.isPerspectiveCamera&&(this.fullscreenMaterial.defines.PERSPECTIVE_CAMERA="");const i=t.width||typeof window<"u"?window.innerWidth:2e3,s=t.height||typeof window<"u"?window.innerHeight:1e3;this.renderTarget=new Nt(i,s,{minFilter:et,magFilter:et,type:ds,depthBuffer:!1}),this.renderPass=new Wc(this._scene,this._camera),this.USE_MRT=e_(),this.USE_MRT?(this.gBuffersRenderTarget=new $1(i,s,2,{minFilter:et,magFilter:et}),this.normalTexture=this.gBuffersRenderTarget.texture[0],this.depthTexture=this.gBuffersRenderTarget.texture[1]):(this.webgl1DepthPass=new Vv(this._scene,this._camera),this.webgl1DepthPass.renderTarget.minFilter=et,this.webgl1DepthPass.renderTarget.magFilter=et,this.webgl1DepthPass.renderTarget.texture.minFilter=et,this.webgl1DepthPass.renderTarget.texture.magFilter=et,this.webgl1DepthPass.setSize(typeof window<"u"?window.innerWidth:2e3,typeof window<"u"?window.innerHeight:1e3),this.gBuffersRenderTarget=new Nt(i,s,{minFilter:et,magFilter:et}),this.normalTexture=this.gBuffersRenderTarget.texture,this.depthTexture=this.webgl1DepthPass.texture),this.fullscreenMaterial.uniforms.normalTexture.value=this.normalTexture,this.fullscreenMaterial.uniforms.depthTexture.value=this.depthTexture,this.fullscreenMaterial.uniforms.accumulatedTexture.value=this.ssrEffect.temporalResolvePass.accumulatedTexture,this.fullscreenMaterial.uniforms.cameraMatrixWorld.value=this._camera.matrixWorld,this.fullscreenMaterial.uniforms._projectionMatrix.value=this._camera.projectionMatrix,this.fullscreenMaterial.uniforms._inverseProjectionMatrix.value=this._camera.projectionMatrixInverse}setSize(e,t){this.renderTarget.setSize(e*this.ssrEffect.resolutionScale,t*this.ssrEffect.resolutionScale),this.gBuffersRenderTarget.setSize(e*this.ssrEffect.resolutionScale,t*this.ssrEffect.resolutionScale),this.fullscreenMaterial.uniforms.accumulatedTexture.value=this.ssrEffect.temporalResolvePass.accumulatedTexture,this.fullscreenMaterial.needsUpdate=!0}dispose(){this.renderTarget.dispose(),this.gBuffersRenderTarget.dispose(),this.renderPass.dispose(),this.USE_MRT||this.webgl1DepthPass.dispose(),this.fullscreenMaterial.dispose(),this.normalTexture=null,this.depthTexture=null,this.velocityTexture=null}keepMaterialMapUpdated(e,t,i,s){this.ssrEffect[s]?t[i]!==e[i]&&(e[i]=t[i],e.uniforms[i].value=t[i],t[i]?e.defines[s]="":delete e.defines[s],e.needsUpdate=!0):e[i]!==void 0&&(e[i]=void 0,e.uniforms[i].value=void 0,delete e.defines[s],e.needsUpdate=!0)}setMRTMaterialInScene(){this.visibleMeshes=lM(this._scene);for(const e of this.visibleMeshes)if(e.material){const t=e.material;let[i,s]=this.cachedMaterials.get(e)||[];if(t!==i){s&&s.dispose(),s=new OP,this.USE_MRT&&(s.defines.USE_MRT=""),s.normalScale=t.normalScale,s.uniforms.normalScale.value=t.normalScale;const r=t.map||t.normalMap||t.roughnessMap||t.metalnessMap;r&&(s.uniforms.uvTransform.value=r.matrix),this.cachedMaterials.set(e,[t,s])}this.keepMaterialMapUpdated(s,t,"normalMap","useNormalMap"),this.keepMaterialMapUpdated(s,t,"roughnessMap","useRoughnessMap"),s.uniforms.roughness.value=this.ssrEffect.selection.size===0||this.ssrEffect.selection.has(e)?t.roughness||0:1e11,e.material=s}}unsetMRTMaterialInScene(){for(const t of this.visibleMeshes){var e;if(((e=t.material)==null?void 0:e.type)==="MRTMaterial"){t.visible=!0;const[i]=this.cachedMaterials.get(t);t.material=i}}}render(e,t){this.setMRTMaterialInScene(),e.setRenderTarget(this.gBuffersRenderTarget),this.renderPass.render(e,this.gBuffersRenderTarget),this.unsetMRTMaterialInScene(),this.USE_MRT||this.webgl1DepthPass.renderPass.render(e,this.webgl1DepthPass.renderTarget),this.fullscreenMaterial.uniforms.inputTexture.value=t.texture,this.fullscreenMaterial.uniforms.samples.value=this.ssrEffect.temporalResolvePass.samples,this.fullscreenMaterial.uniforms.cameraNear.value=this._camera.near,this.fullscreenMaterial.uniforms.cameraFar.value=this._camera.far,this.fullscreenMaterial.uniforms.viewMatrix.value.copy(this._camera.matrixWorldInverse),e.setRenderTarget(this.renderTarget),e.render(this.scene,this.camera)}}const WS={intensity:1,exponent:1,distance:10,fade:0,roughnessFade:1,thickness:10,ior:1.45,maxRoughness:1,maxDepthDifference:10,blend:.9,correction:1,correctionRadius:1,blur:.5,blurKernel:1,blurSharpness:10,jitter:0,jitterRoughness:0,steps:20,refineSteps:5,missedRays:!0,useNormalMap:!0,useRoughnessMap:!0,resolutionScale:1,velocityResolutionScale:1};var n_=`#define GLSLIFY 1 -varying vec2 vUv;void main(){vUv=position.xy*0.5+0.5;gl_Position=vec4(position.xy,1.0,1.0);}`,i_=`#define GLSLIFY 1 -uniform sampler2D inputTexture;uniform sampler2D accumulatedTexture;uniform sampler2D velocityTexture;uniform sampler2D lastVelocityTexture;uniform float blend;uniform float correction;uniform float exponent;uniform float samples;uniform vec2 invTexSize;uniform mat4 curInverseProjectionMatrix;uniform mat4 curCameraMatrixWorld;uniform mat4 prevInverseProjectionMatrix;uniform mat4 prevCameraMatrixWorld;varying vec2 vUv; -#define MAX_NEIGHBOR_DEPTH_DIFFERENCE 0.001 -#define FLOAT_EPSILON 0.00001 -#define FLOAT_ONE_MINUS_EPSILON 0.99999 -vec3 transformexponent;vec3 undoColorTransformExponent;vec3 transformColor(vec3 color){if(exponent==1.0)return color;return pow(abs(color),transformexponent);}vec3 undoColorTransform(vec3 color){if(exponent==1.0)return color;return max(pow(abs(color),undoColorTransformExponent),vec3(0.0));}void main(){if(exponent!=1.0){transformexponent=vec3(1.0/exponent);undoColorTransformExponent=vec3(exponent);}vec4 inputTexel=textureLod(inputTexture,vUv,0.0);vec4 accumulatedTexel;vec3 inputColor=transformColor(inputTexel.rgb);vec3 accumulatedColor;float alpha=inputTexel.a;float velocityDisocclusion;bool didReproject=false; -#ifdef boxBlur -vec3 boxBlurredColor=inputTexel.rgb; -#endif -vec4 velocity=textureLod(velocityTexture,vUv,0.0);bool isMoving=alpha<1.0||dot(velocity.xy,velocity.xy)>0.0;if(isMoving){vec3 minNeighborColor=inputColor;vec3 maxNeighborColor=inputColor;vec3 col;vec2 neighborUv;vec2 reprojectedUv=vUv-velocity.xy;vec4 lastVelocity=textureLod(lastVelocityTexture,reprojectedUv,0.0);float depth=velocity.b;float closestDepth=depth;float lastClosestDepth=lastVelocity.b;float neighborDepth;float lastNeighborDepth;for(int x=-correctionRadius;x<=correctionRadius;x++){for(int y=-correctionRadius;y<=correctionRadius;y++){if(x!=0||y!=0){neighborUv=vUv+vec2(x,y)*invTexSize;vec4 neigborVelocity=textureLod(velocityTexture,neighborUv,0.0);neighborDepth=neigborVelocity.b;col=textureLod(inputTexture,neighborUv,0.0).xyz;int absX=abs(x);int absY=abs(y); -#ifdef dilation -if(absX==1&&absY==1){if(neighborDepth>closestDepth){velocity=neigborVelocity;closestDepth=neighborDepth;}vec4 lastNeighborVelocity=textureLod(velocityTexture,vUv+vec2(x,y)*invTexSize,0.0);lastNeighborDepth=lastNeighborVelocity.b;if(neighborDepth>closestDepth){lastVelocity=lastNeighborVelocity;lastClosestDepth=lastNeighborDepth;}} -#endif -if(abs(depth-neighborDepth)5 ? 121.0 : pow(float(correctionRadius*2+1),2.0);boxBlurredColor/=pxRadius;boxBlurredColor=transformColor(boxBlurredColor); -#endif -if(reprojectedUv.x>=0.0&&reprojectedUv.x<=1.0&&reprojectedUv.y>=0.0&&reprojectedUv.y<=1.0){accumulatedTexel=textureLod(accumulatedTexture,reprojectedUv,0.0);accumulatedColor=transformColor(accumulatedTexel.rgb);vec3 clampedColor=clamp(accumulatedColor,minNeighborColor,maxNeighborColor);accumulatedColor=mix(accumulatedColor,clampedColor,correction);didReproject=true;}else{ -#ifdef boxBlur -accumulatedColor=boxBlurredColor; -#else -accumulatedColor=inputColor; -#endif -}if(velocity.r>FLOAT_ONE_MINUS_EPSILON&&velocity.g>FLOAT_ONE_MINUS_EPSILON){alpha=0.0;velocityDisocclusion=1.0;}}else{accumulatedColor=transformColor(textureLod(accumulatedTexture,vUv,0.0).rgb);}vec3 outputColor=inputColor; -#include -gl_FragColor=vec4(undoColorTransform(outputColor),alpha);}`;class s_ extends Rt{constructor(e){const t=i_.replace("#include ",e);super({type:"TemporalResolveMaterial",uniforms:{inputTexture:new ee(null),accumulatedTexture:new ee(null),velocityTexture:new ee(null),lastVelocityTexture:new ee(null),samples:new ee(1),blend:new ee(.5),correction:new ee(1),exponent:new ee(1),invTexSize:new ee(new ne)},defines:{correctionRadius:1},vertexShader:n_,fragmentShader:t})}}const r_=` - #ifdef USE_SKINNING - #ifdef BONE_TEXTURE - uniform sampler2D prevBoneTexture; - mat4 getPrevBoneMatrix( const in float i ) { - float j = i * 4.0; - float x = mod( j, float( boneTextureSize ) ); - float y = floor( j / float( boneTextureSize ) ); - float dx = 1.0 / float( boneTextureSize ); - float dy = 1.0 / float( boneTextureSize ); - y = dy * ( y + 0.5 ); - vec4 v1 = texture2D( prevBoneTexture, vec2( dx * ( x + 0.5 ), y ) ); - vec4 v2 = texture2D( prevBoneTexture, vec2( dx * ( x + 1.5 ), y ) ); - vec4 v3 = texture2D( prevBoneTexture, vec2( dx * ( x + 2.5 ), y ) ); - vec4 v4 = texture2D( prevBoneTexture, vec2( dx * ( x + 3.5 ), y ) ); - mat4 bone = mat4( v1, v2, v3, v4 ); - return bone; - } - #else - uniform mat4 prevBoneMatrices[ MAX_BONES ]; - mat4 getPrevBoneMatrix( const in float i ) { - mat4 bone = prevBoneMatrices[ int(i) ]; - return bone; - } - #endif - #endif -`,o_=` - vec3 transformed; - - // Get the normal - ${at.skinbase_vertex} - ${at.beginnormal_vertex} - ${at.skinnormal_vertex} - ${at.defaultnormal_vertex} - - // Get the current vertex position - transformed = vec3( position ); - ${at.skinning_vertex} - newPosition = velocityMatrix * vec4( transformed, 1.0 ); - - // Get the previous vertex position - transformed = vec3( position ); - ${at.skinbase_vertex.replace(/mat4 /g,"").replace(/getBoneMatrix/g,"getPrevBoneMatrix")} - ${at.skinning_vertex.replace(/vec4 /g,"")} - prevPosition = prevVelocityMatrix * vec4( transformed, 1.0 ); - - gl_Position = newPosition; -`;class a_ extends Rt{constructor(){super({uniforms:{prevVelocityMatrix:{value:new Le},velocityMatrix:{value:new Le},prevBoneTexture:{value:null},interpolateGeometry:{value:0},intensity:{value:1},boneTexture:{value:null},alphaTest:{value:0},map:{value:null},alphaMap:{value:null},opacity:{value:1}},vertexShader:` - #define MAX_BONES 1024 - - ${at.skinning_pars_vertex} - ${r_} - - uniform mat4 velocityMatrix; - uniform mat4 prevVelocityMatrix; - uniform float interpolateGeometry; - varying vec4 prevPosition; - varying vec4 newPosition; - varying vec2 vHighPrecisionZW; - - void main() { - - ${o_} - - vHighPrecisionZW = gl_Position.zw; - - }`,fragmentShader:` - uniform float intensity; - varying vec4 prevPosition; - varying vec4 newPosition; - varying vec2 vHighPrecisionZW; - - void main() { - #ifdef FULL_MOVEMENT - gl_FragColor = vec4( 1., 1., 1. - gl_FragCoord.z, 0. ); - return; - #endif - - vec2 pos0 = (prevPosition.xy / prevPosition.w) * 0.5 + 0.5; - vec2 pos1 = (newPosition.xy / newPosition.w) * 0.5 + 0.5; - - vec2 vel = pos1 - pos0; - - float fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5; - - gl_FragColor = vec4( vel, 1. - fragCoordZ, 0. ); - - }`}),this.isVelocityMaterial=!0}}const l_=new Ne(0),g_=["visible","wireframe","side"];class c_ extends Vn{constructor(e,t){var i,s;super("VelocityPass"),this.cachedMaterials=new WeakMap,this.lastCameraTransform={position:new X,quaternion:new bn},this.visibleMeshes=[],this.renderedMeshesThisFrame=0,this.renderedMeshesLastFrame=0,this._scene=e,this._camera=t,this.renderTarget=new Nt(((i=window)==null?void 0:i.innerWidth)||1e3,((s=window)==null?void 0:s.innerHeight)||1e3,{type:ds})}setVelocityMaterialInScene(){this.renderedMeshesThisFrame=0,this.visibleMeshes=lM(this._scene);for(const i of this.visibleMeshes){var e;const s=i.material;let[r,o]=this.cachedMaterials.get(i)||[];if(s!==r){var t;o=new a_,o.lastMatrixWorld=new Le,i.material=o,(t=i.skeleton)!=null&&t.boneTexture&&this.saveBoneTexture(i),this.cachedMaterials.set(i,[s,o])}if(o.uniforms.velocityMatrix.value.multiplyMatrices(this._camera.projectionMatrix,i.modelViewMatrix),i.userData.needsUpdatedReflections||s.map instanceof pW?("FULL_MOVEMENT"in o.defines||(o.needsUpdate=!0),o.defines.FULL_MOVEMENT=""):"FULL_MOVEMENT"in o.defines&&(delete o.defines.FULL_MOVEMENT,o.needsUpdate=!0),i.visible=this.cameraMovedThisFrame||!i.matrixWorld.equals(o.lastMatrixWorld)||i.skeleton||"FULL_MOVEMENT"in o.defines,i.material=o,!!i.visible){this.renderedMeshesThisFrame++;for(const a of g_)o[a]=s[a];(e=i.skeleton)!=null&&e.boneTexture&&(o.defines.USE_SKINNING="",o.defines.BONE_TEXTURE="",o.uniforms.boneTexture.value=i.skeleton.boneTexture)}}}saveBoneTexture(e){let t=e.material.uniforms.prevBoneTexture.value;if(t&&t.image.width===e.skeleton.boneTexture.width)t=e.material.uniforms.prevBoneTexture.value,t.image.data.set(e.skeleton.boneTexture.image.data);else{var i;(i=t)==null||i.dispose();const s=e.skeleton.boneTexture.image.data.slice(),r=e.skeleton.boneTexture.image.width;t=new Nr(s,r,r,hn,Rn),e.material.uniforms.prevBoneTexture.value=t,t.needsUpdate=!0}}unsetVelocityMaterialInScene(){for(const t of this.visibleMeshes)if(t.material.isVelocityMaterial){var e;t.visible=!0,t.material.lastMatrixWorld.copy(t.matrixWorld),t.material.uniforms.prevVelocityMatrix.value.multiplyMatrices(this._camera.projectionMatrix,t.modelViewMatrix),(e=t.skeleton)!=null&&e.boneTexture&&this.saveBoneTexture(t),t.material=this.cachedMaterials.get(t)[0]}}setSize(e,t){this.renderTarget.setSize(e,t)}renderVelocity(e){if(e.setRenderTarget(this.renderTarget),this.renderedMeshesThisFrame>0){const{background:t}=this._scene;this._scene.background=l_,e.render(this._scene,this._camera),this._scene.background=t}else e.clearColor()}checkCameraMoved(){const e=this.lastCameraTransform.position.distanceToSquared(this._camera.position),t=8*(1-this.lastCameraTransform.quaternion.dot(this._camera.quaternion));return e>1e-6||t>1e-6?(this.lastCameraTransform.position.copy(this._camera.position),this.lastCameraTransform.quaternion.copy(this._camera.quaternion),!0):!1}render(e){this.cameraMovedThisFrame=this.checkCameraMoved(),this.setVelocityMaterialInScene(),(this.renderedMeshesThisFrame>0||this.renderedMeshesLastFrame>0)&&this.renderVelocity(e),this.unsetVelocityMaterialInScene(),this.renderedMeshesLastFrame=this.renderedMeshesThisFrame}}const VS=new ne;class I_ extends Vn{constructor(e,t,i,s={}){super("TemporalResolvePass"),this.velocityPass=null,this.velocityResolutionScale=1,this.samples=1,this.lastCameraTransform={position:new X,quaternion:new bn},this._scene=e,this._camera=t,this.renderTarget=new Nt(1,1,{minFilter:et,magFilter:et,type:ds,depthBuffer:!1}),this.velocityPass=new c_(e,t),this.fullscreenMaterial=new s_(i),this.fullscreenMaterial.defines.correctionRadius=s.correctionRadius||1,s.dilation&&(this.fullscreenMaterial.defines.dilation=""),s.boxBlur&&(this.fullscreenMaterial.defines.boxBlur=""),this.setupFramebuffers(1,1),this.checkCanUseSharedVelocityTexture()}dispose(){this._scene.userData.velocityTexture===this.velocityPass.renderTarget.texture&&(delete this._scene.userData.velocityTexture,delete this._scene.userData.lastVelocityTexture),this.renderTarget.dispose(),this.accumulatedTexture.dispose(),this.fullscreenMaterial.dispose(),this.velocityPass.dispose()}setSize(e,t){this.renderTarget.setSize(e,t),this.velocityPass.setSize(e*this.velocityResolutionScale,t*this.velocityResolutionScale),this.velocityPass.renderTarget.texture.minFilter=this.velocityResolutionScale===1?ft:et,this.velocityPass.renderTarget.texture.magFilter=this.velocityResolutionScale===1?ft:et,this.velocityPass.renderTarget.texture.needsUpdate=!0,this.fullscreenMaterial.uniforms.invTexSize.value.set(1/e,1/t),this.setupFramebuffers(e,t)}setupFramebuffers(e,t){this.accumulatedTexture&&this.accumulatedTexture.dispose(),this.lastVelocityTexture&&this.lastVelocityTexture.dispose(),this.accumulatedTexture=new Ab(e,t,hn),this.accumulatedTexture.minFilter=et,this.accumulatedTexture.magFilter=et,this.accumulatedTexture.type=ds,this.lastVelocityTexture=new Ab(e*this.velocityResolutionScale,t*this.velocityResolutionScale,hn),this.lastVelocityTexture.minFilter=this.velocityResolutionScale===1?ft:et,this.lastVelocityTexture.magFilter=this.velocityResolutionScale===1?ft:et,this.lastVelocityTexture.type=ds,this.fullscreenMaterial.uniforms.accumulatedTexture.value=this.accumulatedTexture,this.fullscreenMaterial.uniforms.lastVelocityTexture.value=this.lastVelocityTexture,this.fullscreenMaterial.needsUpdate=!0}checkCanUseSharedVelocityTexture(){return this._scene.userData.velocityTexture&&this.velocityPass.renderTarget.texture!==this._scene.userData.velocityTexture?this.velocityPass.renderTarget.texture===this.fullscreenMaterial.uniforms.velocityTexture.value&&(this.fullscreenMaterial.uniforms.lastVelocityTexture.value=this._scene.userData.lastVelocityTexture,this.fullscreenMaterial.uniforms.velocityTexture.value=this._scene.userData.velocityTexture,this.fullscreenMaterial.needsUpdate=!0):this.velocityPass.renderTarget.texture!==this.fullscreenMaterial.uniforms.velocityTexture.value&&(this.fullscreenMaterial.uniforms.velocityTexture.value=this.velocityPass.renderTarget.texture,this.fullscreenMaterial.uniforms.lastVelocityTexture.value=this.lastVelocityTexture,this.fullscreenMaterial.needsUpdate=!0,this._scene.userData.velocityTexture||(this._scene.userData.velocityTexture=this.velocityPass.renderTarget.texture,this._scene.userData.lastVelocityTexture=this.lastVelocityTexture)),this.velocityPass.renderTarget.texture!==this.fullscreenMaterial.uniforms.velocityTexture.value}checkNeedsResample(){const e=this.lastCameraTransform.position.distanceToSquared(this._camera.position),t=8*(1-this.lastCameraTransform.quaternion.dot(this._camera.quaternion));(e>1e-6||t>1e-6)&&(this.samples=1,this.lastCameraTransform.position.copy(this._camera.position),this.lastCameraTransform.quaternion.copy(this._camera.quaternion))}render(e){this.samples++,this.checkNeedsResample(),this.fullscreenMaterial.uniforms.samples.value=this.samples,e.setRenderTarget(this.renderTarget),e.render(this.scene,this.camera),e.copyFramebufferToTexture(VS,this.accumulatedTexture),e.setRenderTarget(this.velocityPass.renderTarget),e.copyFramebufferToTexture(VS,this.lastVelocityTexture)}}const MS=function(e,t){let i=1,s=0;for(;e>0;)i/=t,s+=i*(e%t),e=~~(e/t);return s},u_=n=>{const e=[];let t=1;const i=t+n;for(;t 0. ) ? rbmax.x : rbmin.x; - rbminmax.y = ( nDir.y > 0. ) ? rbmax.y : rbmin.y; - rbminmax.z = ( nDir.z > 0. ) ? rbmax.z : rbmin.z; - - float correction = min( min( rbminmax.x, rbminmax.y ), rbminmax.z ); - vec3 boxIntersection = vWorldPosition + nDir * correction; - - return boxIntersection - cubePos; - } -#endif -`,h_=` -#ifdef BOX_PROJECTED_ENV_MAP - worldNormal = parallaxCorrectNormal( worldNormal, envMapSize, envMapPosition ); -#endif -`,A_=` -#ifdef BOX_PROJECTED_ENV_MAP - reflectVec = parallaxCorrectNormal( reflectVec, envMapSize, envMapPosition ); -#endif -`;function p_(n,e,t){n.defines.BOX_PROJECTED_ENV_MAP="",n.uniforms.envMapPosition={value:e},n.uniforms.envMapSize={value:t};const i=new RegExp(NS("vec3 worldNormal = inverseTransformDirection ( normal , viewMatrix ) ;").replaceAll(" ","\\s*"),"g"),s=new RegExp(NS("reflectVec = inverseTransformDirection ( reflectVec , viewMatrix ) ;").replaceAll(" ","\\s*"),"g");n.vertexShader=`varying vec3 vWorldPosition; -`+n.vertexShader.replace("#include ",C_),n.fragmentShader=d_+` -`+n.fragmentShader.replace("#include ",at.envmap_physical_pars_fragment).replace(i,`vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); - ${h_}`).replace(s,`reflectVec = inverseTransformDirection( reflectVec, viewMatrix ); - ${A_}`)}const m_=_P.replace("#include ",aM).replace("#include ",PP),f_=["blur","blurSharpness","blurKernel"],b_=new OA(1);let yh;class y_ extends Ii{constructor(e,t,i=WS){super("SSREffect",m_,{type:"FinalSSRMaterial",uniforms:new Map([["reflectionsTexture",new ee(null)],["blur",new ee(0)],["blurSharpness",new ee(0)],["blurKernel",new ee(0)]]),defines:new Map([["RENDER_MODE","0"]])}),this.haltonSequence=u_(1024),this.haltonIndex=0,this.selection=new Mv,this.lastSize=void 0,this.cubeCamera=new jy(.001,1e3,b_),this.usingBoxProjectedEnvMap=!1,this._scene=e,this._camera=t,i=Vb({},WS,i,{boxBlur:!0,dilation:!0}),this.temporalResolvePass=new I_(e,t,JP,i),this.uniforms.get("reflectionsTexture").value=this.temporalResolvePass.renderTarget.texture,this.reflectionsPass=new t_(this,i),this.temporalResolvePass.fullscreenMaterial.uniforms.inputTexture.value=this.reflectionsPass.renderTarget.texture,this.lastSize={width:i.width,height:i.height,resolutionScale:i.resolutionScale,velocityResolutionScale:i.velocityResolutionScale},this.setSize(i.width,i.height),this.makeOptionsReactive(i)}makeOptionsReactive(e){let t=!1;const i=this.reflectionsPass.fullscreenMaterial.uniforms,s=Object.keys(i);for(const r of Object.keys(e))Object.defineProperty(this,r,{get(){return e[r]},set(o){if(!(e[r]===o&&t))switch(e[r]=o,f_.includes(r)||this.setSize(this.lastSize.width,this.lastSize.height,!0),r){case"resolutionScale":this.setSize(this.lastSize.width,this.lastSize.height);break;case"velocityResolutionScale":this.temporalResolvePass.velocityResolutionScale=o,this.setSize(this.lastSize.width,this.lastSize.height,!0);break;case"blur":this.uniforms.get("blur").value=o;break;case"blurSharpness":this.uniforms.get("blurSharpness").value=o;break;case"blurKernel":this.uniforms.get("blurKernel").value=o;break;case"steps":this.reflectionsPass.fullscreenMaterial.defines.steps=parseInt(o),this.reflectionsPass.fullscreenMaterial.needsUpdate=t;break;case"refineSteps":this.reflectionsPass.fullscreenMaterial.defines.refineSteps=parseInt(o),this.reflectionsPass.fullscreenMaterial.needsUpdate=t;break;case"missedRays":o?this.reflectionsPass.fullscreenMaterial.defines.missedRays="":delete this.reflectionsPass.fullscreenMaterial.defines.missedRays,this.reflectionsPass.fullscreenMaterial.needsUpdate=t;break;case"correctionRadius":this.temporalResolvePass.fullscreenMaterial.defines.correctionRadius=Math.round(o),this.temporalResolvePass.fullscreenMaterial.needsUpdate=t;break;case"blend":this.temporalResolvePass.fullscreenMaterial.uniforms.blend.value=o;break;case"correction":this.temporalResolvePass.fullscreenMaterial.uniforms.correction.value=o;break;case"exponent":this.temporalResolvePass.fullscreenMaterial.uniforms.exponent.value=o;break;case"distance":i.rayDistance.value=o;default:s.includes(r)&&(i[r].value=o)}}}),this[r]=e[r];t=!0}setSize(e,t,i=!1){!i&&e===this.lastSize.width&&t===this.lastSize.height&&this.resolutionScale===this.lastSize.resolutionScale&&this.velocityResolutionScale===this.lastSize.velocityResolutionScale||(this.temporalResolvePass.setSize(e,t),this.reflectionsPass.setSize(e,t),this.lastSize={width:e,height:t,resolutionScale:this.resolutionScale,velocityResolutionScale:this.velocityResolutionScale})}generateBoxProjectedEnvMapFallback(e,t=new X,i=new X,s=512){this.cubeCamera.renderTarget.dispose(),this.cubeCamera.renderTarget=new OA(s),this.cubeCamera.position.copy(t),this.cubeCamera.updateMatrixWorld(),this.cubeCamera.update(e,this._scene),yh||(yh=new vA(e),yh.compileCubemapShader());const r=yh.fromCubemap(this.cubeCamera.renderTarget.texture).texture;r.minFilter=et,r.magFilter=et;const o=this.reflectionsPass.fullscreenMaterial;return p_(o,t,i),o.fragmentShader=o.fragmentShader.replace("vec3 worldPos","worldPos").replace("varying vec3 vWorldPosition;","vec3 worldPos;"),o.uniforms.envMapPosition.value.copy(t),o.uniforms.envMapSize.value.copy(i),RS(o,r,s),this.usingBoxProjectedEnvMap=!0,r}setIBLRadiance(e,t){this._scene.traverse(i=>{if(i.material){var s;const r=(s=t.properties.get(i.material))==null?void 0:s.uniforms;r&&"disableIBLRadiance"in r&&(r.disableIBLRadiance.value=e)}})}deleteBoxProjectedEnvMapFallback(){const e=this.reflectionsPass.fullscreenMaterial;e.uniforms.envMap.value=null,e.fragmentShader=e.fragmentShader.replace("worldPos = ","vec3 worldPos = "),delete e.defines.BOX_PROJECTED_ENV_MAP,e.needsUpdate=!0,this.usingBoxProjectedEnvMap=!1}dispose(){super.dispose(),this.reflectionsPass.dispose(),this.temporalResolvePass.dispose()}update(e,t){if(!this.usingBoxProjectedEnvMap&&this._scene.environment){const a=this.reflectionsPass.fullscreenMaterial;let l=null;if(this._scene.traverse(c=>{if(!l&&c.material&&!c.material.envMap){const u=e.properties.get(c.material);"envMap"in u&&u.envMap instanceof en&&(l=u.envMap)}}),l){const c=this._scene.environment.image.height;RS(a,l,c)}}this.haltonIndex=(this.haltonIndex+1)%this.haltonSequence.length;const[i,s]=this.haltonSequence[this.haltonIndex],{width:r,height:o}=this.lastSize;this.temporalResolvePass.velocityPass.render(e),this._camera.setViewOffset&&this._camera.setViewOffset(r,o,i,s,r,o),this.reflectionsPass.render(e,t),this.temporalResolvePass.render(e),this._camera.clearViewOffset()}static patchDirectEnvIntensity(e=0){e===0?at.envmap_physical_pars_fragment=at.envmap_physical_pars_fragment.replace("vec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {","vec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) { return vec3(0.0);"):at.envmap_physical_pars_fragment=at.envmap_physical_pars_fragment.replace("vec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );","vec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness ) * "+e.toFixed(5)+";")}}const Nv=E.createContext(null),wa=E.createContext(null),v_=ji.memo(E.forwardRef(({children:n,camera:e,scene:t,resolutionScale:i,enabled:s=!0,renderPriority:r=1,autoClear:o=!0,depthBuffer:a,disableNormalPass:l,stencilBuffer:c,multisampling:u=8,frameBufferType:C=ds},d)=>{const{gl:h,scene:m,camera:y,size:v}=Zn(),A=t||m,b=e||y,[f,B,S]=E.useMemo(()=>{const Z=ek(),M=new VU(h,{depthBuffer:a,stencilBuffer:c,multisampling:u>0&&Z?u:0,frameBufferType:C});M.addPass(new Wc(A,b));let H=null,U=null;return l||(U=new xU(A,b),U.enabled=!1,M.addPass(U),i!==void 0&&Z&&(H=new rM({normalBuffer:U.texture,resolutionScale:i}),H.enabled=!1,M.addPass(H))),[M,U,H]},[b,h,a,c,u,C,A,l,i]);E.useEffect(()=>f?.setSize(v.width,v.height),[f,v]),Fl((Z,M)=>{if(s){const H=h.autoClear;h.autoClear=o,c&&!o&&h.clearStencil(),f.render(M),h.autoClear=H}},s?r:0);const x=E.useRef(null),R=gE(x);E.useLayoutEffect(()=>{const Z=[];if(x.current&&R.current&&f){const M=R.current.objects;for(let H=0;H{for(const M of Z)f?.removePass(M);B&&(B.enabled=!1),S&&(S.enabled=!1)}},[f,n,b,B,S,R]);const V=E.useMemo(()=>({composer:f,normalPass:B,downSamplingPass:S,resolutionScale:i,camera:b,scene:A}),[f,B,S,i,b,A]);return E.useImperativeHandle(d,()=>f,[f]),N.jsx(wa.Provider,{value:V,children:N.jsx("group",{ref:x,children:n})})})),qo=n=>typeof n=="object"&&n!=null&&"current"in n?n.current:n;let G_=0;const HS=new WeakMap,B_=(n,e)=>ji.forwardRef(function({blendFunction:i=e?.blendFunction,opacity:s=e?.opacity,...r},o){let a=HS.get(n);if(!a){const u=`@react-three/postprocessing/${n.name}-${G_++}`;gV({[u]:n}),HS.set(n,a=u)}const l=Zn(u=>u.camera),c=ji.useMemo(()=>{var u,C;return[...(u=e?.args)!=null?u:[],...(C=r.args)!=null?C:[{...e,...r}]]},[JSON.stringify(r)]);return N.jsx(a,{camera:l,"blendMode-blendFunction":i,"blendMode-opacity-value":s,...r,ref:o,args:c})}),HI=(n,e)=>{const t=n[e];return ji.useMemo(()=>typeof t=="number"?new ne(t,t):t?new ne(...t):new ne,[t])},Z_=E.forwardRef(function({target:e,depthTexture:t,...i},s){const r=Zn(l=>l.invalidate),{camera:o}=E.useContext(wa),a=E.useMemo(()=>{const l=new yP(o,i),c=l.maskPass.getFullscreenMaterial();return c.maskFunction=qI.MULTIPLY_RGB_SET_ALPHA,l},[o,i]);return E.useLayoutEffect(()=>{if(e&&typeof e!="number"){const l=e instanceof X?new X().set(e.x,e.y,e.z):new X().set(e[0],e[1],e[2]);a.target=l}t&&a.setDepthTexture(t.texture,t.packing),r()},[e,t,a]),N.jsx("primitive",{ref:s,object:a,dispose:null})});E.forwardRef(({target:n=void 0,mouse:e=!1,debug:t=void 0,manual:i=!1,smoothTime:s=.25,...r},o)=>{const a=E.useRef(null),l=E.useRef(null),c=E.useRef(null),u=Zn(({scene:S})=>S),C=Zn(({pointer:S})=>S),{composer:d,camera:h}=E.useContext(wa),[m]=E.useState(()=>new vU),[y]=E.useState(()=>new sM);E.useEffect(()=>(d.addPass(m),d.addPass(y),()=>{d.removePass(m),d.removePass(y)}),[d,m,y]),E.useEffect(()=>()=>{m.dispose(),y.dispose()},[m,y]);const[v]=E.useState(()=>new X(0,0,0)),[A]=E.useState(()=>new X(0,0,0)),b=E.useCallback(async(S,x)=>(A.x=S,A.y=x,A.z=await m.readDepth(A),A.z=A.z*2-1,1-A.z>1e-7?A.unproject(h):!1),[A,m,h]),f=E.useCallback(async(S,x=!0)=>{var R;if(n)v.set(...n);else{const{x:V,y:Z}=e?C:{x:0,y:0},M=await b(V,Z);M&&v.copy(M)}x&&((R=a.current)!=null&&R.target)&&(s>0&&S>0?$E.damp3(a.current.target,v,s,S):a.current.target.copy(v))},[n,v,e,b,s,C]);Fl(async(S,x)=>{var R;i||f(x),l.current&&l.current.position.copy(v),c.current&&((R=a.current)!=null&&R.target)&&c.current.position.copy(a.current.target)});const B=E.useMemo(()=>({dofRef:a,hitpoint:v,update:f}),[v,f]);return E.useImperativeHandle(o,()=>B,[B]),N.jsxs(N.Fragment,{children:[t?dE(N.jsxs(N.Fragment,{children:[N.jsxs("mesh",{ref:l,children:[N.jsx("sphereGeometry",{args:[t,16,16]}),N.jsx("meshBasicMaterial",{color:"#00ff00",opacity:1,transparent:!0,depthWrite:!1})]}),N.jsxs("mesh",{ref:c,children:[N.jsx("sphereGeometry",{args:[t/2,16,16]}),N.jsx("meshBasicMaterial",{color:"#00ff00",opacity:.5,transparent:!0,depthWrite:!1})]})]}),u):null,N.jsx(Z_,{ref:a,...r,target:v})]})});E.forwardRef(function(e,t){const i=HI(e,"offset"),s=E.useMemo(()=>new fP({...e,offset:i}),[i,e]);return N.jsx("primitive",{ref:t,object:s,dispose:null})});E.forwardRef(function({blendFunction:e=Ct.NORMAL},t){const i=E.useMemo(()=>new AP(e),[e]);return N.jsx("primitive",{ref:t,object:i,dispose:null})});E.forwardRef(function({active:e=!0,...t},i){const s=Zn(u=>u.invalidate),r=HI(t,"delay"),o=HI(t,"duration"),a=HI(t,"strength"),l=HI(t,"chromaticAberrationOffset"),c=E.useMemo(()=>new BP({...t,delay:r,duration:o,strength:a,chromaticAberrationOffset:l}),[r,o,t,a,l]);return E.useLayoutEffect(()=>{c.mode=e?t.mode||nl.SPORADIC:nl.DISABLED,s()},[e,c,s,t.mode]),N.jsx("primitive",{ref:i,object:c,dispose:null})});E.forwardRef(function(e,t){const{camera:i}=E.useContext(wa),s=E.useMemo(()=>new wP(i,qo(e.sun),e),[i,e]);return E.useLayoutEffect(()=>void(s.lightSource=qo(e.sun)),[s,e.sun]),N.jsx("primitive",{ref:t,object:s,dispose:null})});E.forwardRef(function({size:e,...t},i){const s=Zn(o=>o.invalidate),r=E.useMemo(()=>new xP(t),[t]);return E.useLayoutEffect(()=>{e&&r.setSize(e.width,e.height),s()},[r,e]),N.jsx("primitive",{ref:i,object:r,dispose:null})});E.forwardRef(function({selection:e=[],selectionLayer:t=10,blendFunction:i,patternTexture:s,edgeStrength:r,pulseSpeed:o,visibleEdgeColor:a,hiddenEdgeColor:l,width:c,height:u,kernelSize:C,blur:d,xRay:h,...m},y){const v=Zn(S=>S.invalidate),{scene:A,camera:b}=E.useContext(wa),f=E.useMemo(()=>new HP(A,b,{blendFunction:i,patternTexture:s,edgeStrength:r,pulseSpeed:o,visibleEdgeColor:a,hiddenEdgeColor:l,width:c,height:u,kernelSize:C,blur:d,xRay:h,...m}),[i,d,b,r,u,l,C,s,o,A,a,c,h]),B=E.useContext(Nv);return E.useEffect(()=>{if(!B&&e)return f.selection.set(Array.isArray(e)?e.map(qo):[qo(e)]),v(),()=>{f.selection.clear(),v()}},[f,e,B,v]),E.useEffect(()=>{f.selectionLayer=t,v()},[f,v,t]),E.useRef(),E.useEffect(()=>{var S;if(B&&B.enabled&&(S=B.selected)!=null&&S.length)return f.selection.set(B.selected),v(),()=>{f.selection.clear(),v()}},[B,f.selection,v]),N.jsx("primitive",{ref:y,object:f})});E.forwardRef(function({granularity:e=5},t){const i=E.useMemo(()=>new YP(e),[e]);return N.jsx("primitive",{ref:t,object:i,dispose:null})});const w_=(n,e)=>n.layers.enable(e.selection.layer),S_=(n,e)=>n.layers.disable(e.selection.layer);E.forwardRef(function({selection:e=[],selectionLayer:t=10,lights:i=[],luminanceThreshold:s,luminanceSmoothing:r,intensity:o,width:a,height:l,kernelSize:c,mipmapBlur:u,...C},d){i.length===0&&console.warn("SelectiveBloom requires lights to work.");const h=Zn(b=>b.invalidate),{scene:m,camera:y}=E.useContext(wa),v=E.useMemo(()=>new FP(m,y,{blendFunction:Ct.ADD,luminanceThreshold:s,luminanceSmoothing:r,intensity:o,width:a,height:l,kernelSize:c,mipmapBlur:u,...C}),[m,y,s,r,o,a,l,c,u,C]),A=E.useContext(Nv);return E.useEffect(()=>{if(!A&&e)return v.selection.set(Array.isArray(e)?e.map(qo):[qo(e)]),h(),()=>{v.selection.clear(),h()}},[v,e,A,h]),E.useEffect(()=>{v.selection.layer=t,h()},[v,h,t]),E.useEffect(()=>{if(i&&i.length>0)return i.forEach(b=>w_(qo(b),v)),h(),()=>{i.forEach(b=>S_(qo(b),v)),h()}},[v,h,i,t]),E.useEffect(()=>{var b;if(A&&A.enabled&&(b=A.selected)!=null&&b.length)return v.selection.set(A.selected),h(),()=>{v.selection.clear(),h()}},[A,v.selection,h]),N.jsx("primitive",{ref:d,object:v,dispose:null})});E.forwardRef(function(e,t){const{camera:i,normalPass:s,downSamplingPass:r,resolutionScale:o}=E.useContext(wa),a=E.useMemo(()=>s===null&&r===null?(console.error("Please enable the NormalPass in the EffectComposer in order to use SSAO."),{}):new EP(i,s&&!r?s.texture:null,{blendFunction:Ct.MULTIPLY,samples:30,rings:4,distanceThreshold:1,distanceFalloff:0,rangeThreshold:.5,rangeFalloff:.1,luminanceInfluence:.9,radius:20,bias:.5,intensity:1,color:void 0,normalDepthBuffer:r?r.texture:null,resolutionScale:o??1,depthAwareUpsampling:!0,...e}),[i,s,e]);return N.jsx("primitive",{ref:t,object:a,dispose:null})});const x_=B_(LP);E.forwardRef(function({textureSrc:e,texture:t,...i},s){const r=Zv(EW,e);E.useLayoutEffect(()=>{r.encoding=zs,r.wrapS=r.wrapT=ps},[r]);const o=E.useMemo(()=>new UP({...i,texture:r||t}),[i,r,t]);return N.jsx("primitive",{ref:s,object:o,dispose:null})});E.forwardRef(function({lut:e,tetrahedralInterpolation:t,...i},s){const r=E.useMemo(()=>new VP(e,i),[e,i]),o=Zn(a=>a.invalidate);return E.useLayoutEffect(()=>{t&&(r.tetrahedralInterpolation=t),e&&(r.lut=e),o()},[r,o,e,t]),N.jsx("primitive",{ref:s,object:r,dispose:null})});const R_=` -uniform sampler2D uCharacters; -uniform float uCharactersCount; -uniform float uCellSize; -uniform bool uInvert; -uniform vec3 uColor; - -const vec2 SIZE = vec2(16.); - -vec3 greyscale(vec3 color, float strength) { - float g = dot(color, vec3(0.299, 0.587, 0.114)); - return mix(color, vec3(g), strength); -} - -vec3 greyscale(vec3 color) { - return greyscale(color, 1.0); -} - -void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) { - vec2 cell = resolution / uCellSize; - vec2 grid = 1.0 / cell; - vec2 pixelizedUV = grid * (0.5 + floor(uv / grid)); - vec4 pixelized = texture2D(inputBuffer, pixelizedUV); - float greyscaled = greyscale(pixelized.rgb).r; - - if (uInvert) { - greyscaled = 1.0 - greyscaled; - } - - float characterIndex = floor((uCharactersCount - 1.0) * greyscaled); - vec2 characterPosition = vec2(mod(characterIndex, SIZE.x), floor(characterIndex / SIZE.y)); - vec2 offset = vec2(characterPosition.x, -characterPosition.y) / SIZE; - vec2 charUV = mod(uv * (cell / SIZE), 1.0 / SIZE) - vec2(0., 1.0 / SIZE) + offset; - vec4 asciiCharacter = texture2D(uCharacters, charUV); - - asciiCharacter.rgb = uColor * asciiCharacter.r; - asciiCharacter.a = pixelized.a; - outputColor = asciiCharacter; -} -`;class W_ extends Ii{constructor({characters:e=" .:,'-^=*+?!|0#X%WM@",fontSize:t=54,cellSize:i=16,color:s="#ffffff",invert:r=!1}={}){const o=new Map([["uCharacters",new ee(new en)],["uCellSize",new ee(i)],["uCharactersCount",new ee(e.length)],["uColor",new ee(new Ne(s))],["uInvert",new ee(r)]]);super("ASCIIEffect",R_,{uniforms:o});const a=this.uniforms.get("uCharacters");a&&(a.value=this.createCharactersTexture(e,t))}createCharactersTexture(e,t){const i=document.createElement("canvas"),s=1024,r=16,o=s/r;i.width=i.height=s;const a=new mW(i,void 0,ps,ps,ft,ft),l=i.getContext("2d");if(!l)throw new Error("Context not available");l.clearRect(0,0,s,s),l.font=`${t}px arial`,l.textAlign="center",l.textBaseline="middle",l.fillStyle="#fff";for(let c=0;c{const o=E.useMemo(()=>new W_({characters:n,fontSize:e,cellSize:t,color:i,invert:s}),[n,e,t,i,s]);return N.jsx("primitive",{ref:r,object:o})});E.forwardRef(function({ENABLE_BLUR:e=!0,USE_MRT:t=!0,...i},s){const{invalidate:r}=Zn(),{scene:o,camera:a}=E.useContext(wa),l=E.useMemo(()=>new y_(o,a,{ENABLE_BLUR:e,USE_MRT:t,...i}),[o,a,e,t,i]),c=E.useContext(Nv);return E.useEffect(()=>{var u;if(c&&c.enabled&&(u=c.selected)!=null&&u.length)return l.selection.set(c.selected),r(),()=>{l.selection.clear(),r()}},[c]),N.jsx("primitive",{ref:s,object:l,...i})});const V_={uniforms:{sceneDiffuse:{value:null},sceneDepth:{value:null},projMat:{value:new Le},viewMat:{value:new Le},projViewMat:{value:new Le},projectionMatrixInv:{value:new Le},viewMatrixInv:{value:new Le},cameraPos:{value:new X},resolution:{value:new ne},time:{value:0},samples:{value:[]},samplesR:{value:[]},bluenoise:{value:null},distanceFalloff:{value:1},radius:{value:5},near:{value:.1},far:{value:1e3},logDepth:{value:!1},ortho:{value:!1},screenSpaceRadius:{value:!1}},vertexShader:` -varying vec2 vUv; -void main() { - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); -}`,fragmentShader:` - #define SAMPLES 16 - #define FSAMPLES 16.0 -uniform sampler2D sceneDiffuse; -uniform highp sampler2D sceneDepth; -uniform mat4 projectionMatrixInv; -uniform mat4 viewMatrixInv; -uniform mat4 projMat; -uniform mat4 viewMat; -uniform mat4 projViewMat; -uniform vec3 cameraPos; -uniform vec2 resolution; -uniform float time; -uniform vec3[SAMPLES] samples; -uniform float[SAMPLES] samplesR; -uniform float radius; -uniform float distanceFalloff; -uniform float near; -uniform float far; -uniform bool logDepth; -uniform bool ortho; -uniform bool screenSpaceRadius; -uniform sampler2D bluenoise; - varying vec2 vUv; - highp float linearize_depth(highp float d, highp float zNear,highp float zFar) - { - return (zFar * zNear) / (zFar - d * (zFar - zNear)); - } - highp float linearize_depth_ortho(highp float d, highp float nearZ, highp float farZ) { - return nearZ + (farZ - nearZ) * d; - } - highp float linearize_depth_log(highp float d, highp float nearZ,highp float farZ) { - float depth = pow(2.0, d * log2(farZ + 1.0)) - 1.0; - float a = farZ / (farZ - nearZ); - float b = farZ * nearZ / (nearZ - farZ); - float linDepth = a + b / depth; - return ortho ? linearize_depth_ortho( - linDepth, - nearZ, - farZ - ) :linearize_depth(linDepth, nearZ, farZ); - } - - vec3 getWorldPosLog(vec3 posS) { - vec2 uv = posS.xy; - float z = posS.z; - float nearZ =near; - float farZ = far; - float depth = pow(2.0, z * log2(farZ + 1.0)) - 1.0; - float a = farZ / (farZ - nearZ); - float b = farZ * nearZ / (nearZ - farZ); - float linDepth = a + b / depth; - vec4 clipVec = vec4(uv, linDepth, 1.0) * 2.0 - 1.0; - vec4 wpos = viewMatrixInv * projectionMatrixInv * clipVec; - return wpos.xyz / wpos.w; - } - vec3 getWorldPos(float depth, vec2 coord) { - #ifdef LOGDEPTH - return getWorldPosLog(vec3(coord, depth)); - #endif - float z = depth * 2.0 - 1.0; - vec4 clipSpacePosition = vec4(coord * 2.0 - 1.0, z, 1.0); - vec4 viewSpacePosition = projectionMatrixInv * clipSpacePosition; - // Perspective division - vec4 worldSpacePosition = viewMatrixInv * viewSpacePosition; - worldSpacePosition.xyz /= worldSpacePosition.w; - return worldSpacePosition.xyz; - } - - vec3 computeNormal(vec3 worldPos, vec2 vUv) { - ivec2 p = ivec2(vUv * resolution); - float c0 = texelFetch(sceneDepth, p, 0).x; - float l2 = texelFetch(sceneDepth, p - ivec2(2, 0), 0).x; - float l1 = texelFetch(sceneDepth, p - ivec2(1, 0), 0).x; - float r1 = texelFetch(sceneDepth, p + ivec2(1, 0), 0).x; - float r2 = texelFetch(sceneDepth, p + ivec2(2, 0), 0).x; - float b2 = texelFetch(sceneDepth, p - ivec2(0, 2), 0).x; - float b1 = texelFetch(sceneDepth, p - ivec2(0, 1), 0).x; - float t1 = texelFetch(sceneDepth, p + ivec2(0, 1), 0).x; - float t2 = texelFetch(sceneDepth, p + ivec2(0, 2), 0).x; - - float dl = abs((2.0 * l1 - l2) - c0); - float dr = abs((2.0 * r1 - r2) - c0); - float db = abs((2.0 * b1 - b2) - c0); - float dt = abs((2.0 * t1 - t2) - c0); - - vec3 ce = getWorldPos(c0, vUv).xyz; - - vec3 dpdx = (dl < dr) ? ce - getWorldPos(l1, (vUv - vec2(1.0 / resolution.x, 0.0))).xyz - : -ce + getWorldPos(r1, (vUv + vec2(1.0 / resolution.x, 0.0))).xyz; - vec3 dpdy = (db < dt) ? ce - getWorldPos(b1, (vUv - vec2(0.0, 1.0 / resolution.y))).xyz - : -ce + getWorldPos(t1, (vUv + vec2(0.0, 1.0 / resolution.y))).xyz; - - return normalize(cross(dpdx, dpdy)); -} - -void main() { - vec4 diffuse = texture2D(sceneDiffuse, vUv); - float depth = texture2D(sceneDepth, vUv).x; - if (depth == 1.0) { - gl_FragColor = vec4(vec3(1.0), 1.0); - return; - } - vec3 worldPos = getWorldPos(depth, vUv); - vec3 normal = computeNormal(worldPos, vUv); - vec4 noise = texture2D(bluenoise, vUv * (resolution / vec2(128.0))); - vec3 randomVec = normalize(noise.rgb * 2.0 - 1.0); - vec3 tangent = normalize(randomVec - normal * dot(randomVec, normal)); - vec3 bitangent = cross(normal, tangent); - mat3 tbn = mat3(tangent, bitangent, normal); - float occluded = 0.0; - float totalWeight = 0.0; - /* float radiusScreen = distance( - worldPos, - getWorldPos(depth, vUv + - vec2(48.0, 0.0) / resolution) - );/*vUv.x < 0.5 ? radius : min(distance( - worldPos, - getWorldPos(depth, vUv + - vec2(100.0, 0.0) / resolution) - ), radius); - float distanceFalloffScreen = radiusScreen * 0.2;*/ - float radiusToUse = screenSpaceRadius ? distance( - worldPos, - getWorldPos(depth, vUv + - vec2(radius, 0.0) / resolution) - ) : radius; - float distanceFalloffToUse =screenSpaceRadius ? - radiusToUse * distanceFalloff - : distanceFalloff; - float bias = (0.1 / near) * fwidth(distance(worldPos, cameraPos)) / radiusToUse; - for(float i = 0.0; i < FSAMPLES; i++) { - vec3 sampleDirection = - tbn * - samples[int(i)]; - ; - float moveAmt = samplesR[int(mod(i + noise.a * FSAMPLES, FSAMPLES))]; - vec3 samplePos = worldPos + radiusToUse * moveAmt * sampleDirection; - vec4 offset = projViewMat * vec4(samplePos, 1.0); - offset.xyz /= offset.w; - offset.xyz = offset.xyz * 0.5 + 0.5; - float sampleDepth = textureLod(sceneDepth, offset.xy, 0.0).x; - /*float distSample = logDepth ? linearize_depth_log(sampleDepth, near, far) - (ortho ? linearize_depth_ortho(sampleDepth, near, far) : linearize_depth(sampleDepth, near, far));*/ - #ifdef LOGDEPTH - float distSample = linearize_depth_log(sampleDepth, near, far); - #else - float distSample = ortho ? linearize_depth_ortho(sampleDepth, near, far) : linearize_depth(sampleDepth, near, far); - #endif - float distWorld = ortho ? linearize_depth_ortho(offset.z, near, far) : linearize_depth(offset.z, near, far); - float rangeCheck = smoothstep(0.0, 1.0, distanceFalloffToUse / (abs(distSample - distWorld))); - vec2 diff = gl_FragCoord.xy - ( offset.xy * resolution); - float weight = dot(sampleDirection, normal); - occluded += rangeCheck * weight * - (distSample + bias - < distWorld ? 1.0 : 0.0) * ( - (dot( - diff, - diff - - ) < 1.0 || (sampleDepth == depth) || ( - offset.x < 0.0 || offset.x > 1.0 || offset.y < 0.0 || offset.y > 1.0 - ) ? 0.0 : 1.0) - ); - totalWeight += weight; - } - float occ = clamp(1.0 - occluded / totalWeight, 0.0, 1.0); - gl_FragColor = vec4(0.5 + 0.5 * normal, occ); -}`},M_={uniforms:{sceneDiffuse:{value:null},sceneDepth:{value:null},tDiffuse:{value:null},projMat:{value:new Le},viewMat:{value:new Le},projectionMatrixInv:{value:new Le},viewMatrixInv:{value:new Le},cameraPos:{value:new X},resolution:{value:new ne},color:{value:new X(0,0,0)},blueNoise:{value:null},time:{value:0},intensity:{value:10},renderMode:{value:0},gammaCorrection:{value:!1}},vertexShader:` - varying vec2 vUv; - void main() { - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - }`,fragmentShader:` - uniform sampler2D sceneDiffuse; - uniform sampler2D sceneDepth; - uniform sampler2D tDiffuse; - uniform sampler2D blueNoise; - uniform vec2 resolution; - uniform vec3 color; - uniform float intensity; - uniform float renderMode; - uniform bool gammaCorrection; - varying vec2 vUv; - highp float linearize_depth(highp float d, highp float zNear,highp float zFar) - { - highp float z_n = 2.0 * d - 1.0; - return 2.0 * zNear * zFar / (zFar + zNear - z_n * (zFar - zNear)); - } - #include - #include - void main() { - vec4 texel = texture2D(tDiffuse, vUv);//vec3(0.0); - vec4 sceneTexel = texture2D(sceneDiffuse, vUv); - float finalAo = pow(texel.a, intensity); - if (renderMode == 0.0) { - gl_FragColor = vec4( mix(sceneTexel.rgb, color, 1.0 - finalAo), sceneTexel.a); - } else if (renderMode == 1.0) { - gl_FragColor = vec4( mix(vec3(1.0), color, 1.0 - finalAo), sceneTexel.a); - } else if (renderMode == 2.0) { - gl_FragColor = vec4( sceneTexel.rgb, sceneTexel.a); - } else if (renderMode == 3.0) { - if (vUv.x < 0.5) { - gl_FragColor = vec4( sceneTexel.rgb, sceneTexel.a); - } else if (abs(vUv.x - 0.5) < 1.0 / resolution.x) { - gl_FragColor = vec4(1.0); - } else { - gl_FragColor = vec4( mix(sceneTexel.rgb, color, 1.0 - finalAo), sceneTexel.a); - } - } else if (renderMode == 4.0) { - if (vUv.x < 0.5) { - gl_FragColor = vec4( sceneTexel.rgb, sceneTexel.a); - } else if (abs(vUv.x - 0.5) < 1.0 / resolution.x) { - gl_FragColor = vec4(1.0); - } else { - gl_FragColor = vec4( mix(vec3(1.0), color, 1.0 - finalAo), sceneTexel.a); - } - } - #include - if (gammaCorrection) { - gl_FragColor = LinearTosRGB(gl_FragColor); - } - } - `},N_={uniforms:{sceneDiffuse:{value:null},sceneDepth:{value:null},tDiffuse:{value:null},projMat:{value:new Le},viewMat:{value:new Le},projectionMatrixInv:{value:new Le},viewMatrixInv:{value:new Le},cameraPos:{value:new X},resolution:{value:new ne},time:{value:0},r:{value:5},blueNoise:{value:null},radius:{value:12},worldRadius:{value:5},index:{value:0},poissonDisk:{value:[]},distanceFalloff:{value:1},near:{value:.1},far:{value:1e3},logDepth:{value:!1},screenSpaceRadius:{value:!1}},vertexShader:` - varying vec2 vUv; - void main() { - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - }`,fragmentShader:` - uniform sampler2D sceneDiffuse; - uniform highp sampler2D sceneDepth; - uniform sampler2D tDiffuse; - uniform sampler2D blueNoise; - uniform mat4 projectionMatrixInv; - uniform mat4 viewMatrixInv; - uniform vec2 resolution; - uniform float r; - uniform float radius; - uniform float worldRadius; - uniform float index; - uniform float near; - uniform float far; - uniform float distanceFalloff; - uniform bool logDepth; - uniform bool screenSpaceRadius; - varying vec2 vUv; - - highp float linearize_depth(highp float d, highp float zNear,highp float zFar) - { - highp float z_n = 2.0 * d - 1.0; - return 2.0 * zNear * zFar / (zFar + zNear - z_n * (zFar - zNear)); - } - highp float linearize_depth_log(highp float d, highp float nearZ,highp float farZ) { - float depth = pow(2.0, d * log2(farZ + 1.0)) - 1.0; - float a = farZ / (farZ - nearZ); - float b = farZ * nearZ / (nearZ - farZ); - float linDepth = a + b / depth; - return linearize_depth(linDepth, nearZ, farZ); - } - highp float linearize_depth_ortho(highp float d, highp float nearZ, highp float farZ) { - return nearZ + (farZ - nearZ) * d; - } - vec3 getWorldPosLog(vec3 posS) { - vec2 uv = posS.xy; - float z = posS.z; - float nearZ =near; - float farZ = far; - float depth = pow(2.0, z * log2(farZ + 1.0)) - 1.0; - float a = farZ / (farZ - nearZ); - float b = farZ * nearZ / (nearZ - farZ); - float linDepth = a + b / depth; - vec4 clipVec = vec4(uv, linDepth, 1.0) * 2.0 - 1.0; - vec4 wpos = viewMatrixInv * projectionMatrixInv * clipVec; - return wpos.xyz / wpos.w; - } - vec3 getWorldPos(float depth, vec2 coord) { - #ifdef LOGDEPTH - return getWorldPosLog(vec3(coord, depth)); - #endif - - float z = depth * 2.0 - 1.0; - vec4 clipSpacePosition = vec4(coord * 2.0 - 1.0, z, 1.0); - vec4 viewSpacePosition = projectionMatrixInv * clipSpacePosition; - // Perspective division - vec4 worldSpacePosition = viewMatrixInv * viewSpacePosition; - worldSpacePosition.xyz /= worldSpacePosition.w; - return worldSpacePosition.xyz; - } - #include - #define NUM_SAMPLES 16 - uniform vec2 poissonDisk[NUM_SAMPLES]; - void main() { - const float pi = 3.14159; - vec2 texelSize = vec2(1.0 / resolution.x, 1.0 / resolution.y); - vec2 uv = vUv; - vec4 data = texture2D(tDiffuse, vUv); - float occlusion = data.a; - float baseOcc = data.a; - vec3 normal = data.rgb * 2.0 - 1.0; - float count = 1.0; - float d = texture2D(sceneDepth, vUv).x; - vec3 worldPos = getWorldPos(d, vUv); - float size = radius; - float angle; - if (index == 0.0) { - angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).x * PI2; - } else if (index == 1.0) { - angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).y * PI2; - } else if (index == 2.0) { - angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).z * PI2; - } else { - angle = texture2D(blueNoise, gl_FragCoord.xy / 128.0).w * PI2; - } - - mat2 rotationMatrix = mat2(cos(angle), -sin(angle), sin(angle), cos(angle)); - float radiusToUse = screenSpaceRadius ? distance( - worldPos, - getWorldPos(d, vUv + - vec2(worldRadius, 0.0) / resolution) - ) : worldRadius; - float distanceFalloffToUse =screenSpaceRadius ? - radiusToUse * distanceFalloff - : distanceFalloff; - - - for(int i = 0; i < NUM_SAMPLES; i++) { - vec2 offset = (rotationMatrix * poissonDisk[i]) * texelSize * size; - vec4 dataSample = texture2D(tDiffuse, uv + offset); - float occSample = dataSample.a; - vec3 normalSample = dataSample.rgb * 2.0 - 1.0; - float dSample = texture2D(sceneDepth, uv + offset).x; - vec3 worldPosSample = getWorldPos(dSample, uv + offset); - float tangentPlaneDist = abs(dot(worldPos - worldPosSample, normal)); - float rangeCheck = exp(-1.0 * tangentPlaneDist * (1.0 / distanceFalloffToUse)) * max(dot(normal, normalSample), 0.0) * (1.0 - abs(occSample - baseOcc)); - occlusion += occSample * rangeCheck; - count += rangeCheck; - } - occlusion /= count; - gl_FragColor = vec4(0.5 + 0.5 * normal, occlusion); - } - `};var gM="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";const H_=Uint8Array.from(atob(gM),n=>n.charCodeAt(0));function cM(n,e,t){if(e.getQueryParameter(n,e.QUERY_RESULT_AVAILABLE)){const r=e.getQueryParameter(n,e.QUERY_RESULT)/1e6;t.lastTime=r}else setTimeout(()=>{cM(n,e,t)},1)}class X_ extends Vn{constructor(e,t,i=512,s=512){super(),this.width=i,this.height=s,this.clear=!0,this.camera=t,this.scene=e,this.autosetGamma=!0,this.configuration=new Proxy({aoSamples:16,aoRadius:5,denoiseSamples:8,denoiseRadius:12,distanceFalloff:1,intensity:5,denoiseIterations:2,renderMode:0,color:new Ne(0,0,0),gammaCorrection:!0,logarithmicDepthBuffer:!1,screenSpaceRadius:!1},{set:(r,o,a)=>{const l=r[o];return r[o]=a,o==="aoSamples"&&l!==a&&this.configureAOPass(this.configuration.logarithmicDepthBuffer),o==="denoiseSamples"&&l!==a&&this.configureDenoisePass(this.configuration.logarithmicDepthBuffer),o==="gammaCorrection"&&(this.autosetGamma=!1),!0}}),this.samples=[],this.samplesR=[],this.samplesDenoise=[],this.configureSampleDependentPasses(),this.effectCompisterQuad=new uh(new Rt(M_)),this.copyQuad=new uh(new Rt({uniforms:{tDiffuse:{value:null}},vertexShader:` - varying vec2 vUv; - void main() { - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - } - `,fragmentShader:` - uniform sampler2D tDiffuse; - varying vec2 vUv; - void main() { - gl_FragColor = texture2D(tDiffuse, vUv); - } - `})),this.writeTargetInternal=new Nt(this.width,this.height,{minFilter:et,magFilter:et,depthBuffer:!1}),this.readTargetInternal=new Nt(this.width,this.height,{minFilter:et,magFilter:et,depthBuffer:!1}),this.bluenoise=new Nr(H_,128,128),this.bluenoise.colorSpace=Io,this.bluenoise.wrapS=ps,this.bluenoise.wrapT=ps,this.bluenoise.minFilter=ft,this.bluenoise.magFilter=ft,this.bluenoise.needsUpdate=!0,this.lastTime=0,this.needsDepthTexture=!0,this._r=new ne,this._c=new Ne}configureSampleDependentPasses(){this.configureAOPass(this.configuration.logarithmicDepthBuffer),this.configureDenoisePass(this.configuration.logarithmicDepthBuffer)}configureAOPass(e=!1){this.samples=this.generateHemisphereSamples(this.configuration.aoSamples),this.samplesR=this.generateHemisphereSamplesR(this.configuration.aoSamples);const t={...V_};t.fragmentShader=t.fragmentShader.replace("16",this.configuration.aoSamples).replace("16.0",this.configuration.aoSamples+".0"),e&&(t.fragmentShader=`#define LOGDEPTH -`+t.fragmentShader),this.effectShaderQuad?(this.effectShaderQuad.material.dispose(),this.effectShaderQuad.material=new Rt(t)):this.effectShaderQuad=new uh(new Rt(t))}configureDenoisePass(e=!1){this.samplesDenoise=this.generateDenoiseSamples(this.configuration.denoiseSamples,11);const t={...N_};t.fragmentShader=t.fragmentShader.replace("16",this.configuration.denoiseSamples),e&&(t.fragmentShader=`#define LOGDEPTH -`+t.fragmentShader),this.poissonBlurQuad?(this.poissonBlurQuad.material.dispose(),this.poissonBlurQuad.material=new Rt(t)):this.poissonBlurQuad=new uh(new Rt(t))}generateHemisphereSamples(e){const t=[];for(let i=0;in.charCodeAt(0));const Y_=E.forwardRef(({screenSpaceRadius:n,quality:e,aoRadius:t=5,aoSamples:i=16,denoiseSamples:s=4,denoiseRadius:r=12,distanceFalloff:o=1,intensity:a=1,color:l},c)=>{const{camera:u,scene:C}=Zn(),d=E.useMemo(()=>new X_(C,u),[]);return E.useLayoutEffect(()=>{ja(d.configuration,{color:l,aoRadius:t,distanceFalloff:o,intensity:a,aoSamples:i,denoiseSamples:s,denoiseRadius:r,screenSpaceRadius:n})},[n,l,t,o,a,i,s,r]),E.useLayoutEffect(()=>{e&&d.setQualityMode(e.charAt(0).toUpperCase()+e.slice(1))},[e]),N.jsx("primitive",{ref:c,object:d})}),Lf=j1.randFloatSpread;function F_({mat:n=new Le,vec:e=new X,numBalls:t,color:i}){const s=new Ba(1,50,50),r=new Cc({color:i,roughness:0,envMapIntensity:1}),[o,a]=BA(()=>({args:[1],mass:1,angularDamping:.1,linearDamping:.65,position:[Lf(10),Lf(10),Lf(10)]}));return Fl(l=>{for(let c=0;cMath.random()*f-f/2;function d(f,B){let S,x,R,V;do S=C(B),x=C(B),R=C(B),V=Math.sqrt(S*S+x*x+R*R);while(VArray.from({length:c},()=>d(u,10)),[c]),[m,y]=BA(f=>({args:[1],mass:0,angularDamping:.1,linearDamping:.65,position:h[f],type:"Dynamic"})),[v]=BA(()=>({args:[1],mass:0,angularDamping:.1,linearDamping:.65,position:[0,0,0],type:"Static"})),[A,b]=E.useState(0);return Fl((f,B)=>{b(S=>Math.min(1,S+B+A*.1)),l.forEach((S,x)=>{const[R,V,Z]=h[x],[M,H,U]=S,D=A,q=R+(M-R)*D,ie=V+(H-V)*D,ue=Z+(U-Z)*D;y.at(x).position.set(q,ie,ue)})}),N.jsxs(N.Fragment,{children:[N.jsx("instancedMesh",{receiveShadow:!0,ref:m,args:[void 0,void 0,c],geometry:i,material:s}),N.jsx("instancedMesh",{receiveShadow:!0,ref:v,args:[void 0,void 0,1],geometry:i,material:r})]})}function z_(){const n=Zn(t=>t.viewport),[,e]=BA(()=>({type:"Kinematic",args:[3],position:[0,0,0]}));return Fl(t=>e.position.set(-(t.mouse.x*n.width)/2,t.mouse.y*n.height/2,3))}const L_=({intensity:n,color:e,distance:t,width:i,height:s})=>{const r=[];for(let a=0;a<10;a++)r.push([-i/2+i/(10-1)*a,t,s/2]),r.push([-i/2+i/(10-1)*a,t,-s/2]),r.push([i/2,t,-s/2+s/(10-1)*a]),r.push([-i/2,t,-s/2+s/(10-1)*a]);return N.jsx(N.Fragment,{children:r.map((a,l)=>N.jsx("pointLight",{position:a,intensity:n,color:e},l))})},IM=({color:n,mode:e,className:t})=>N.jsxs(NE,{className:t,shadows:!0,gl:{antialias:!0},camera:{position:[0,0,-34],fov:20,near:1,far:1e3},children:[N.jsxs(yD,{gravity:[0,0,0],iterations:10,children:[e==="clump"&&N.jsx(F_,{numBalls:20,color:n}),N.jsx(z_,{}),e==="pool"&&N.jsx(K_,{color:n})]}),N.jsx("ambientLight",{intensity:1}),N.jsx(L_,{intensity:.05,color:"#ffffff",distance:100,height:200,width:100}),N.jsxs(v_,{disableNormalPass:!0,multisampling:0,children:[N.jsx(Y_,{color:"black",aoRadius:2,intensity:1,aoSamples:6,denoiseSamples:4}),N.jsx(x_,{})]}),e==="pool"&&N.jsx(ok,{})]});/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */var Mb=function(){return Mb=Object.assign||function(e){for(var t,i=1,s=arguments.length;iN.jsx("a",{className:"underline decoration-primary/50 dark:decoration-primary/70 decoration-2 cursor-pointer hover:decoration-primary hover:decoration-3 ease-in-out duration-100",href:n,children:e}),D_=[{time:new Date("2024-09-27"),msg:N.jsxs(N.Fragment,{children:["I guess I'm Dr.Nimo now. Watch my"," ",N.jsx(Bt,{href:"https://youtu.be/gVZJc7_0T14?si=tyN741CBUqDtCa3r",children:"thesis defense talk"}),"."]})},{time:new Date("2024-09-26"),msg:N.jsxs(N.Fragment,{children:["Finished the"," ",N.jsx(Bt,{href:new URL("/pr-preview/pr-29/assets/nimo-dissertation.pdf",self.location).href,children:"dissertation"})," ","document and will"," ",N.jsx(Bt,{href:new URL("/pr-preview/pr-29/assets/nimo-defense-poster.pdf",self.location).href,children:"defend"})," ","in a few weeks!"]})},{time:new Date("2024-07-19"),msg:N.jsxs(N.Fragment,{children:["The"," ",N.jsx(Bt,{href:new URL("/pr-preview/pr-29/assets/las-24-edgeworth.pdf",self.location).href,children:"Edgeworth paper"})," ","was nominated for the Best Paper Award at L@S'24!"]})},{time:new Date("2024-07-18"),msg:N.jsxs(N.Fragment,{children:["Attending ",N.jsx(Bt,{href:"",children:"L@S'24"})," for the first time in Atlanta. Check out the"," ",N.jsxs(Bt,{href:new URL("/pr-preview/pr-29/assets/las-24-edgeworth-talk.key",self.location).href,children:["slides"," "]}),"of my talk!"]})},{time:new Date("2024-06-24"),msg:N.jsxs(N.Fragment,{children:["Always meant to submit something to"," ",N.jsx(Bt,{href:"https://diagrams-2024.diagrams-conference.org/",children:"a conference with DIAGRAM in its name"}),". Well, done"," ",N.jsx(Bt,{href:new URL("/pr-preview/pr-29/assets/diagrams-24-penrose.pdf",self.location).href,children:"that"}),"."]})},{time:new Date("2024-06-24"),msg:N.jsxs(N.Fragment,{children:["The ",N.jsx(Bt,{href:"https://rosejs.dev/",children:"Rose"})," paper was accepted at ECOOP 2024!"]})},{time:new Date("2024-05-10"),msg:N.jsxs(N.Fragment,{children:["Excited to welcome summer interns"," ",N.jsx(Bt,{href:"https://github.com/kyleleesea",children:"Kyle"})," and"," ",N.jsx(Bt,{href:"https://griffinteller.com/",children:"Griffin"})," to the Penrose team!"]})},{time:new Date("2024-04-10"),msg:N.jsxs(N.Fragment,{children:[N.jsx("i",{children:'"Edgeworth: Efficient and Scalable Authoring of Visual Thinking Activities"'})," ","was accepted at Learning @ Scale 2024!"]})},{time:new Date("2024-04-10"),msg:N.jsxs(N.Fragment,{children:[N.jsx("i",{children:'"Minkowski Penalties: Robust Differentiable Constraint Enforcement for Vector Graphics"'})," ","was accepted at SIGGRAPH 2024!"]})},{time:new Date("2024-02-28"),msg:N.jsxs(N.Fragment,{children:["Paper accepted at PLDI 2024:"," ",N.jsx("i",{children:"Syntactic Code Search with Sequence-to-Tree Matching"}),"!"]})},{time:new Date("2024-01-02"),msg:"New year, new round of rewriting this site. Used Tailwind this time and we have dark mode now!"},{time:new Date("2023-12-08"),msg:N.jsxs(N.Fragment,{children:["Invited to attend an"," ",N.jsx(Bt,{href:"https://aimath.org/pastworkshops/cyberinfrastructure.html",children:"AIM workshop"})," ","on"," ",N.jsx(Bt,{href:"https://code4math.org/",children:"Digital Ecosystems for Mathematics"})," ","and started ",N.jsx(Bt,{href:"https://mathdiagrams.com",children:"mathdiagrams.com"}),"!"]})},{time:new Date("2023-07-14"),msg:N.jsxs(N.Fragment,{children:["Released ",N.jsx(Bt,{href:"https://penrose.cs.cmu.edu/blog/v3",children:"Penrose 3.0"}),"!"]})},{time:new Date("2023-06-01"),msg:N.jsxs(N.Fragment,{children:[N.jsx(Bt,{href:"https://www.cmu.edu/scs/s3d/reuse/",children:"REUSE"})," students"," ",N.jsx(Bt,{href:"https://www.linkedin.com/in/rijul-jain-585a62191",children:"Rijul Jain"})," ","and ",N.jsx(Bt,{href:"https://ravenrothkopf.github.io/",children:"Raven Rothkopf"})," joined Penrose this summer. Welcome!"]})},{time:new Date("2022-08-30"),msg:"Spent the summer as an intern in Machine Intelligence at Apple. Stay tuned for more updates on our work!"},{time:new Date("2022-04-30"),msg:N.jsxs(N.Fragment,{children:["I proposed (",N.jsx(Bt,{href:new URL("/pr-preview/pr-29/assets/thesis-proposal-talk.pdf",self.location).href,children:"talk"}),", (",N.jsx(Bt,{href:new URL("/pr-preview/pr-29/assets/thesis-proposal.pdf",self.location).href,children:"text"}),")) my dissertation. Officially a PhD candidate now!"]})},{time:new Date("2021-07-01"),msg:N.jsxs(N.Fragment,{children:["My work at Microsoft,"," ",N.jsx("i",{children:'"reCode: A Lightweight Find-and-Replace Interaction in the IDE for Transforming Code by Example,"'})," ","was conditionally accepted by"," ",N.jsx(Bt,{href:"https://uist.acm.org/uist2021/",children:"UIST 2021"}),"!"]})},{time:new Date("2020-05-01"),msg:N.jsxs(N.Fragment,{children:["I'll join ",N.jsx(Bt,{href:"https://microsoft.github.io/prose/",children:"PROSE"})," @ Microsoft Research as a Research Intern this summer!"]})},{time:new Date("2020-04-01"),msg:N.jsxs(N.Fragment,{children:["The first conference paper on"," ",N.jsx(Bt,{href:"https://penrose.cs.cm",children:"Penrose"}),","," ",N.jsx("i",{children:'"Penrose: From Mathematical Notation to Beautiful Diagrams,"'})," was accepted by ",N.jsx(Bt,{href:"https://s2020.siggraph.org/",children:"SIGGRAPH 2020"}),"!"]})},{time:new Date("2020-03-01"),msg:N.jsxs(N.Fragment,{children:["The CHI paper won a ",N.jsx("b",{children:"Best Paper Honourable Mention award"})," 🏆!"]})},{time:new Date("2020-01-01"),msg:N.jsxs(N.Fragment,{children:["Our paper"," ",N.jsx("i",{children:'"How Domain Experts Create Conceptual Diagrams and Implications for Tool Design"'})," ","was accepted by ",N.jsx(Bt,{href:"http://chi2020.acm.org/",children:"CHI 2020"})," 🏖️!"]})},{time:new Date("2019-10-01"),msg:N.jsxs(N.Fragment,{children:["I presented our papers at"," ",N.jsx(Bt,{href:"http://plateau-workshop.org/",children:"PLATEAU 2019"})," with Max and Anael!"]})},{time:new Date("2019-05-01"),msg:N.jsxs(N.Fragment,{children:["I finished 7th at the 2019"," ",N.jsx(Bt,{href:"https://en.wikipedia.org/wiki/ACUI_Collegiate_Pocket_Billiards_National_Championship",children:"ACUI Collegiate Nine-ball National Championship"})," ","🎱!"]})},{time:new Date("2019-05-01"),msg:N.jsxs(N.Fragment,{children:["Anael Kuperwajs,"," ",N.jsx(Bt,{href:"https://www.linkedin.com/in/courtney-e-miller/",children:"Courtney Miller"}),", ",N.jsx(Bt,{href:"https://a9.io/",children:"Max Krieger"})," will join us as"," ",N.jsx(Bt,{href:"https://www.cmu.edu/scs/isr/reuse/",children:"REUSE"})," students this summer. Welcome!"]})},{time:new Date("2018-04-01"),msg:N.jsx(N.Fragment,{children:"I will join CMU as a Ph.D. student!"})},{time:new Date("2018-01-01"),msg:N.jsx(N.Fragment,{children:"I will be one of the TAs for COMS 4115 again in Spring 2018."})},{time:new Date("2017-10-01"),msg:N.jsxs(N.Fragment,{children:["Gave a talk at"," ",N.jsx(Bt,{href:"https://2017.splashcon.org/event/dsldi-2017-substance-and-style-domain-specific-languages-for-mathematical-diagrams",children:"DSLDI 2017"})," ","in Vancouver, Canada."]})},{time:new Date("2017-05-01"),msg:N.jsxs(N.Fragment,{children:["Joined ",N.jsx(Bt,{href:"http://isri.cmu.edu/education/reu-se/",children:"REU-SE"}),", a summer research program, at Carnegie Mellon University."]})}];var dM={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},FS=ji.createContext&&ji.createContext(dM),ca=globalThis&&globalThis.__assign||function(){return ca=Object.assign||function(n){for(var e,t=1,i=arguments.length;t0)){var q=R.exec(D),ie=0;if(q){do{var ue=ie;ie=q.index+q[0].length,M.push(D.substring(ue,q.index)),(V===void 0||V>0)&&(Z.push(M),M=[],V!==void 0&&V>0&&V--),q=V===void 0||V>0?R.exec(D):void 0}while(q);ie>0&&ie0&&Z.push(M),Z}Object.defineProperty(i,"__esModule",{value:!0});var A=s(5),b=s(2),f=s(1),B=s(0);i.isBibStringComponent=r,i.isContiguousSimpleString=o,i.joinContiguousSimpleStrings=a,i.parseStringComponent=l,i.toStringBibStringDatum=c,i.toStringBibStringData=u,i.flattenQuotedStrings=C;var S=['"'];i.globContiguousStrings=h,i.splitOnAnd=m,i.splitOnComma=y,i.splitOnPattern=v},function(t,i,s){var r=this&&this.__extends||function(){var c=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(u,C){u.__proto__=C}||function(u,C){for(var d in C)C.hasOwnProperty(d)&&(u[d]=C[d])};return function(u,C){function d(){this.constructor=u}c(u,C),u.prototype=C===null?Object.create(C):(d.prototype=C.prototype,new d)}}();Object.defineProperty(i,"__esModule",{value:!0});var o=s(0),a=function(){function c(u,C,d){this.type=u,this.braceDepth=C,this.data=d}return c.isBibStringComponent=function(u){return typeof u.braceDepth=="number"&&typeof u.type=="string"},c.stringifyDatum=function(u){if(o.isString(u))return u;if(o.isNumber(u))return u.toString();if(c.isBibStringComponent(u))return u.stringify();throw new Error("Unexpected state")},c.prototype.stringify=function(){return this.data.map(c.stringifyDatum).join("")},c}();i.BibStringComponent=a;var l=function(c){function u(C,d){return c.call(this,C,0,d)||this}return r(u,c),u}(a);i.BibOuterStringComponent=l},function(t,i,s){function r(a){return typeof a.stringref=="string"}Object.defineProperty(i,"__esModule",{value:!0});var o=function(){function a(l,c){this.braceDepth=l,this.stringref=c}return a}();i.StringRef=o,i.isStringRef=r},function(t,i,s){function r(h){return typeof h.key=="string"&&h.value!==void 0}function o(h){if(r(h))return{key:h.key,value:a(h.value)};throw new Error("Was not a KeyVal: "+JSON.stringify(h))}function a(h){if(C.isNumber(h))return h;var m=C.mustBeArray(h.data);switch(h.type){case"quotedstringwrapper":return m.length===1&&C.isNumber(m[0])?m[0]:new u.OuterQuotedString(m.map(function(y){return d.parseStringComponent(0,y)}));case"bracedstringwrapper":return new c.OuterBracedString(m.map(function(y){return d.parseStringComponent(0,y)}));default:throw new Error("Unexpected value: "+JSON.stringify(h))}}function l(h){if(h)return C.isNumber(h)?h:h.stringify()}Object.defineProperty(i,"__esModule",{value:!0});var c=s(2),u=s(1),C=s(0),d=s(3);i.isKeyVal=r,i.newKeyVal=o,i.parseFieldValue=a,i.normalizeFieldValue=l},function(t,i,s){function r(B){var S=o(B),x=S.key,R=S.value;return new f(x,R)}function o(B){if(h.isKeyVal(B))return h.newKeyVal(B);if(B.type!=="string")throw new Error("Unexpected node: "+JSON.stringify(B));return o(B.data)}function a(B){var S={};return Object.keys(B).forEach(function(x){S[x]||(S[x]=c({},S,B,B[x]))}),S}function l(B,S,x,R){return B.data.map(function(V){if(A.isString(V)||A.isNumber(V))return V;if(m.isStringRef(V))return u(S,R,V,x);if(b.isBibStringComponent(V))return C(V,S,x,R);throw new Error})}function c(B,S,x,R){return A.isNumber(R)?R:v.isOuterBracedString(R)||y.isOuterQuotedString(R)?d(R,B,S,x):m.isStringRef(R)?u(B,x,R,S):R}function u(B,S,x,R){var V=x.stringref;if(B[V])throw new Error("Cycle detected: "+V);if(R[V])return R[V];if(!S[V])throw new Error('Unresolved reference: "'+x.stringref+'" ('+JSON.stringify(x)+")");return R[V]=c(Object.assign({},B,(Z={},Z[V]=!0,Z)),R,S,S[V]),R[V];var Z}function C(B,S,x,R){var V=l(B,S,x,R),Z=B.braceDepth;if(y.isQuotedString(B))return new y.QuotedString(Z,V);if(v.isBracedString(B))return new v.BracedString(Z,V);if(y.isOuterQuotedString(B))return new y.OuterQuotedString(V);if(v.isOuterBracedString(B))return new v.OuterBracedString(V);throw new Error}function d(B,S,x,R){var V=C(B,S,x,R);if(!v.isOuterBracedString(V)&&!y.isOuterQuotedString(V))throw new Error;return V}Object.defineProperty(i,"__esModule",{value:!0});var h=s(6),m=s(5),y=s(1),v=s(2),A=s(0),b=s(3),f=function(){function B(S,x){this.type="string",this.key=S,this.value=x}return B}();i.BibStringEntry=f,i.newStringEntry=r,i.resolveStrings=a,i.resolveStringReferences=l,i.resolveStringReference=c,i.copyWithResolvedStringReferences=C,i.copyOuterWithResolvedStringReferences=d},function(t,i,s){function r(R){var V=f.toStringBibStringData(R);return V?V.charAt(0):""}function o(R){return R.length>0&&a(R[0])}function a(R){if(y.isString(R)){if(!R)return!1;var V=R.charAt(0);return V.toLowerCase()===V&&V.toUpperCase()!==V}if(v.isQuotedString(R))return!(!R.data||R.data.length<=0)&&a(R.data[0]);if(A.isStringRef(R)||v.isOuterQuotedString(R)||b.isOuterBracedString(R))throw new Error("Should not do this test on this type");return!1}function l(R){for(var V=f.splitOnPattern(R,B),Z=-1,M=-1,H=-1,U=0;U=0?Z:V.length-1;var D=Z>=0?u(V,Z,M):[],q=u(V,0,H),ie=u(V,Math.max(M,H),V.length);return new S(q,D,ie,[])}function c(R,V){for(var Z=f.splitOnPattern(R,B),M=f.splitOnPattern(V,B),H=-1,U=-1,D=0;D=0?u(Z,0,U):[],ie=M,ue=u(Z,Math.max(U,0));return new S(ie,q,ue,[])}function u(R,V,Z){for(var M=[],H=V;H<(Z===void 0?R.length:Z);H++)M.push(R[H]);return M}function C(R,V,Z){for(var M=f.splitOnPattern(R,B),H=f.splitOnPattern(Z,B),U=f.splitOnPattern(V,B),D=-1,q=-1,ie=0;ie=0?u(M,0,q):[],le=u(M,Math.max(q,0));return new S(H,ue,le,U)}function d(R){var V=f.splitOnComma(R);switch(V.length){case 1:return l(V[0]);case 2:return c(m(V[0]),m(V[1]));case 3:return C(m(V[0]),m(V[1]),m(V[2]));default:throw new Error("Could not parse author name: partitioned as "+JSON.stringify(V)+" in "+JSON.stringify(R))}}function h(R){return R!==void 0}function m(R){if(h(R))return R;throw new Error("???????")}Object.defineProperty(i,"__esModule",{value:!0});var y=s(0),v=s(1),A=s(5),b=s(2),f=s(3),B=/\s+/g,S=function(){function R(V,Z,M,H){this.firstNames$=V,this.vons$=Z,this.lastNames$=M,this.jrs$=H,this.initials=V.map(r),this.firstNames=V.map(f.toStringBibStringData),this.vons=Z.map(f.toStringBibStringData),this.lastNames=M.map(f.toStringBibStringData),this.jrs=H.map(f.toStringBibStringData),this.id=this.firstNames.join("-")+"-"+this.vons.join("-")+"-"+this.lastNames.join("-")+"-"+this.jrs.join("-")}return R}();i.AuthorName=S,i.parseAuthorName=d;var x=function(){function R(V,Z,M){this.first=V,this.von=Z,this.last=M}return R}();i.Authorrr=x},function(t,i,s){function r(A){return d.parseAuthorName(A)}function o(A){return C.isNumber(A)?a([A]):a(A.data,h.isOuterQuotedString(A))}function a(A,b){var f=y.globContiguousStrings(y.flattenQuotedStrings(A,b)),B=f.map(function(S){return y.isContiguousSimpleString(S)?y.joinContiguousSimpleStrings(S):S});return y.splitOnAnd(B)}function l(A){if(!c(A))throw new Error;return A}function c(A){return C.isArray(A.authors$)&&A.type==="authors"}var u=this&&this.__extends||function(){var A=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(b,f){b.__proto__=f}||function(b,f){for(var B in f)f.hasOwnProperty(B)&&(b[B]=f[B])};return function(b,f){function B(){this.constructor=b}A(b,f),b.prototype=f===null?Object.create(f):(B.prototype=f.prototype,new B)}}();Object.defineProperty(i,"__esModule",{value:!0});var C=s(0),d=s(8),h=s(1),m=s(4),y=s(3),v=function(A){function b(f){var B=this,S=C.isNumber(f)?[f]:f.data;B=A.call(this,"authors",S)||this;var x=o(f);return B.authors$=x.map(function(R){return r(R)}),B}return u(b,A),b}(m.BibOuterStringComponent);i.Authors=v,i.determineAuthorNames$=o,i.mustBeAuthors=l,i.isAuthors=c},function(t,i,s){function r(C){return C.type==="comment"&&a.isArray(C.data)}function o(C){return a.flattenMyArray(C).map(u)}Object.defineProperty(i,"__esModule",{value:!0});var a=s(0),l=function(){function C(d){this.type="comment",this.data=d,this.string=d.join("")}return C.prototype.toString=function(){return this.string},C}();i.BibComment=l;var c=function(){function C(d,h){this.type=d,this.data=h,this.string=h.join("")}return C.prototype.toString=function(){return this.string},C}();i.CommentEntry=c,i.isBibComment=r;var u=function(C){return a.isString(C)?C:typeof C=="number"?C.toString():C.type==="@bib"?"@"+a.mustBeString(C.string):C.type==="escapedEntry"?"\\"+u(C.data):a.mustBeString(C.string)};i.flattenPlainText=o},function(t,i,s){function r(d){var h={};return Object.keys(d).forEach(function(m){h[m]=u.parseFieldValue(d[m])}),h}function o(d){return typeof d.type=="string"&&typeof d._id=="string"&&!!d.fields}function a(d,h){var m={},y=d.fields;return Object.keys(d.fields).forEach(function(v){var A=c.resolveStringReference({},m,h,y[v]);switch(v){case"author":m[v]=new l.Authors(A);break;case"title":m[v]=A;break;case"incollection":default:m[v]=A}}),new C(d.type,d._id,m)}Object.defineProperty(i,"__esModule",{value:!0});var l=s(9),c=s(7),u=s(6),C=function(){function d(h,m,y){this.type=h,this._id=m,this.fields=y,this.sortkey$="",this.title$=""}return d.prototype.getField=function(h){return this.fields[h.toLowerCase()]},d.prototype.getFieldAsString=function(h){var m=this.getField(h);return u.normalizeFieldValue(m)},d.prototype.getAuthors=function(){var h=this.fields.author;return h===void 0?h:l.mustBeAuthors(h)},d}();i.BibEntry=C,i.parseEntryFields=r,i.isBibEntry=o,i.processEntry=a},function(t,i,s){function r(u){return u.type==="preamble"&&!!u.data}function o(u){var C=l.parseBibEntriesAndNonEntries(a.mustBeArray(u.data));return new c(C)}Object.defineProperty(i,"__esModule",{value:!0});var a=s(0),l=s(13),c=function(){function u(C){this.type="preamble",this.data=C,this.string=C.join("")}return u.prototype.toString=function(){return this.string},u}();i.Preamble=c,i.isPreamble=r,i.newPreambleNode=o},function(t,i,s){function r(b){if(!u.isArray(b.data)||b.type!=="NON_ENTRY")throw new Error;return new h.BibComment(h.flattenPlainText(b.data))}function o(b){switch(typeof b){case"object":var f=b.data;if(typeof f["@type"]=="string")return new d.BibEntry(f["@type"],f._id,d.parseEntryFields(f.fields));switch(u.mustBeString(f.type)){case"string":return y.newStringEntry(f);case"preamble":return m.newPreambleNode(f);default:throw new Error("Unexpected entry parsed: "+f.type)}default:throw new Error("Expected object as data for entry")}}function a(b){var f=new l.Parser(c.grammar.ParserRules,c.grammar.ParserStart);f.feed(new v.default(b).readTokens());var B=f.results,S=B[0];return new A(i.parseBibEntriesAndNonEntries(S))}Object.defineProperty(i,"__esModule",{value:!0});var l=s(19),c=s(20),u=s(0),C=s(6),d=s(11),h=s(10),m=s(12),y=s(7),v=s(21),A=function(){function b(f){var B=this;this.content=f,this.comments=f.filter(h.isBibComment).map(function(R){if(h.isBibComment(R))return R;throw new Error}),this.preambles_raw=f.filter(function(R){return m.isPreamble(R)}).map(function(R){if(m.isPreamble(R))return R;throw new Error}),this.preamble$=this.preambles_raw.map(function(R){return R.toString()}).join(` -`);var S={};this.content.forEach(function(R){if(C.isKeyVal(R)){if(S[R.key])throw new Error("String with id "+R.key+" was defined more than once");S[R.key]=R.value}}),this.strings_raw=S,this.strings$=y.resolveStrings(S),this.entries_raw=f.filter(function(R){return d.isBibEntry(R)}).map(function(R){if(d.isBibEntry(R))return R;throw new Error});var x={};this.entries_raw.forEach(function(R){var V=R._id.toLowerCase();if(x[V])throw new Error("Entry with id "+V+" was defined more than once");x[V]=d.processEntry(R,B.strings$)}),this.entries$=x}return b.prototype.getEntry=function(f){return this.entries$[f.toLowerCase()]},b}();i.BibFilePresenter=A,i.parseBibEntriesAndNonEntries=function(b){return b.map(function(f){switch(f.type){case"NON_ENTRY":return r(f);case"ENTRY":return o(f);default:throw new Error("Expected ENTRY or NON_ENTRY")}})},i.parseBibFile=a},function(t,i,s){function r(l,c){return{type:l,string:c}}function o(l){return i.specialChars.hasOwnProperty(l)}function a(l){return i.escapableChars.hasOwnProperty(l)}Object.defineProperty(i,"__esModule",{value:!0}),i.newToken=r,i.specialChars={"@":!0,"(":!0,")":!0,"{":!0,"}":!0,"#":!0,"=":!0,",":!0,"\\":!0,'"':!0},i.isSpecialChar=o,i.escapableChars={"\\":!0,"@":!0,"{":!0,"}":!0},i.isEscapableChar=a},function(t,i,s){function r(l){return{type:"ws",string:l}}function o(l){return typeof l.string=="string"&&l.type===i.WS}function a(l){return i.singleWhitespaces.hasOwnProperty(l)}Object.defineProperty(i,"__esModule",{value:!0}),i.WS="ws",i.newWhitespace=r,i.isWhitespace=o,i.singleWhitespaces={" ":!0," ":!0,"\r":!0,"\n":!0},i.isSingleWhiteSpaceCharacter=a},function(t,i,s){function r(a){return{type:"number",string:a}}function o(a){return i.numericChars.hasOwnProperty(a)}Object.defineProperty(i,"__esModule",{value:!0}),i.newNumber=r,i.numericChars={0:!0,1:!0,2:!0,3:!0,4:!0,5:!0,6:!0,7:!0,8:!0,9:!0},i.isNum=o},function(t,i,s){function r(o){for(var a in o)i.hasOwnProperty(a)||(i[a]=o[a])}Object.defineProperty(i,"__esModule",{value:!0}),r(s(8)),r(s(9)),r(s(18)),r(s(10)),r(s(11)),r(s(12)),r(s(7)),r(s(3)),r(s(4)),r(s(2)),r(s(1)),r(s(5)),r(s(6)),r(s(13)),r(s(0))},function(t,i,s){function r(u){return i.optionalFields.hasOwnProperty(u)}function o(u){return i.mandatoryFields.hasOwnProperty(u)}function a(u){return o(u)?i.mandatoryFields[u]:[]}function l(u){return r(u)?i.optionalFields[u]:[]}Object.defineProperty(i,"__esModule",{value:!0});var c=s(0);i.address="address",i.author="author",i.booktitle="booktitle",i.chapter="chapter",i.edition="edition",i.editor="editor",i.howpublished="howpublished",i.institution="institution",i.journal="journal",i.month="month",i.note="note",i.number="number",i.organization="organization",i.pages="pages",i.publisher="publisher",i.school="school",i.series="series",i.title="title",i.type="type",i.volume="volume",i.year="year",i.optionalFields={book:[["volume","number"],"series","address","edition","month","note"],booklet:["author","howpublished","address","address","month","year","note"],conference:["editor",["volume","number"],"series","pages","address","month","organization","publisher","note"],inproceedings:["editor",["volume","number"],i.series,"pages","address","month","organization","publisher","note"],inbook:["volume","number","series","type","address","edition","month","note"],incollection:["editor",["volume","number"],"series","type","chapter","pages","address","edition","month","note"],manual:["author","organization","year","address","edition","month","note"],mastersthesis:["type","address","month","note"],misc:[],phdthesis:["type","address","month","note"],proceedings:["editor",["volume","number"],"series","address","month","organization","publisher","note"],techreport:["type","address","number","month","note"],unpublished:["month","year"]},i.mandatoryFields={article:["author","title","year","journal"],book:[["author","editor"],"title","publisher","year"],booklet:["title"],conference:["author","title","booktitle","year"],inproceedings:["author","title","booktitle","year"],inbook:[["author","editor"],"title",["chapter","pages"]],incollection:["author","title","booktitle","publisher","year"],manual:["title"],mastersthesis:["author","title","school","year"],misc:[["author","title","howpublished","year","month","note"]],phdthesis:["author","title","school","year"],proceedings:["year","title"],techreport:["author","title","institution","year"],unpublished:["author","title","note"]},i.hasOptionalFields=r,i.hasMandatoryFields=o,i.getMandatoryFields=a,i.getOptionalFields=l,i.findError=function(u,C){var d=u.fields;if(c.isString(C)){if(!d[C])return new Error("Warning: expected "+u.type+" with id "+u._id+" to have the field: "+C)}else if(c.isArray(C)){var h=C.reduce(function(m,y){if(c.isString(y))return m&&d.hasOwnProperty(y);throw new Error},!0);if(!h)return new Error("Expected "+u.type+" with id "+u._id+" to have one of the following fields: "+C)}}},function(t,i){(function(s,r){typeof t=="object"&&t.exports?t.exports=r():s.nearley=r()})(this,function(){function s(u,C,d){return this.id=++s.highestId,this.name=u,this.symbols=C,this.postprocess=d,this}function r(u,C,d,h){this.rule=u,this.dot=C,this.reference=d,this.data=[],this.wantedBy=h,this.isComplete=this.dot===u.symbols.length}function o(u,C){this.grammar=u,this.index=C,this.states=[],this.wants={},this.scannable=[],this.completed={}}function a(u,C){this.rules=u,this.start=C||this.rules[0].name;var d=this.byName={};this.rules.forEach(function(h){d.hasOwnProperty(h.name)||(d[h.name]=[]),d[h.name].push(h)})}function l(){this.reset("")}function c(u,C,h){if(u instanceof a)var m=u,h=C;else var m=a.fromCompiled(u,C);this.grammar=m,this.options={keepHistory:!1,lexer:m.lexer||new l};for(var y in h||{})this.options[y]=h[y];this.lexer=this.options.lexer,this.lexerState=void 0;var v=new o(m,0);this.table=[v],v.wants[m.start]=[],v.predict(m.start),v.process(),this.current=0}return s.highestId=0,s.prototype.toString=function(u){function C(h){return h.literal?JSON.stringify(h.literal):h.type?"%"+h.type:h.toString()}var d=u===void 0?this.symbols.map(C).join(" "):this.symbols.slice(0,u).map(C).join(" ")+" ● "+this.symbols.slice(u).map(C).join(" ");return this.name+" → "+d},r.prototype.toString=function(){return"{"+this.rule.toString(this.dot)+"}, from: "+(this.reference||0)},r.prototype.nextState=function(u){var C=new r(this.rule,this.dot+1,this.reference,this.wantedBy);return C.left=this,C.right=u,C.isComplete&&(C.data=C.build()),C},r.prototype.build=function(){var u=[],C=this;do u.push(C.right.data),C=C.left;while(C.left);return u.reverse(),u},r.prototype.finish=function(){this.rule.postprocess&&(this.data=this.rule.postprocess(this.data,this.reference,c.fail))},o.prototype.process=function(u){for(var C=this.states,d=this.wants,h=this.completed,m=0;m=this.str.length)){var d=this.str.charAt(this.pos);return o.isSingleWhiteSpaceCharacter(d)?this.eatWhiteSpace():r.isSpecialChar(d)?this.eatSpecialChars(d):a.isNum(d)?this.eatNumericString(d):this.eatIdString()}},C.prototype.eatIdString=function(){for(var d=[],h=this.pos,m=h;m{switch(n){case"workshop":case"conference":return Ac.normalizeFieldValue(e.getField("booktitle"));case"journal":return Ac.normalizeFieldValue(e.getField("journal"));case"preprint":throw new Error("cannot get venue for preprint");case"thesis":return"Ph.D. Dissertation"}},oJ=(n,e)=>{switch(n){case"workshop":case"conference":case"journal":case"preprint":return Ac.normalizeFieldValue(e.getField("series")).replace(/\s/g,"");case"thesis":return Ac.normalizeFieldValue(e.getField("school"))}},aJ=n=>` -@${n.type} { -${Object.entries(n.fields).map(([e,t])=>` ${e} = {${n.getFieldAsString(e)}}`).join(`, -`)} -} -`,lJ=(n,e,t)=>{const i=e.getField("author"),s=e.getField("title"),r=oJ(t.type,e);if(i&&s&&r)return{title:Ac.normalizeFieldValue(s),authors:i.authors$.map(o=>o.firstNames.concat(o.vons).concat(o.lastNames).concat(o.jrs).join(" ")),series:r,venue:rJ(t.type,e),id:n,bibtex:aJ(e),...t};throw new Error(`cannot read field from entry ${e._id}`)},gJ=n=>Object.entries(sJ).map(([e,t])=>{const i=n.getEntry(e);if(i)return lJ(e,i,t);throw new Error(`cannot find bib entry ${e}`)}),cJ=[],IJ=[...cJ,...gJ(iJ)],Tf=({name:n,desc:e,link:t,logo:i,dark:s})=>N.jsx("a",{href:t,children:N.jsxs("div",{className:`rounded shadow-md hover:shadow-xl w-full h-36 lg:h-48 bg-white dark:shadow-none dark:bg-zinc-700 dark:rounded-lg dark:border-primary bg-contain bg-left-top dark:drop-shadow-none dark:hover:drop-shadow-none dark:transition-none transition-all ease-in-out duration-100 dark:hover:shadow-md dark:hover:scale-105 overflow-hidden scale-100 - `,children:[N.jsxs("svg",{className:"absolute z-[-50]",width:"100%",viewBox:"0 0 100 100",children:[N.jsxs("defs",{children:[N.jsx("filter",{id:"grayscale-filter",children:N.jsx("feColorMatrix",{type:"saturate",values:"0"})}),N.jsxs("filter",{id:"color-tint-filter",children:[N.jsx("feColorMatrix",{type:"matrix",values:"0.7725 0 0 0 0 0 0.3490 0 0 0 0 0 0.9569 0 0 0 0 0 1 0"}),N.jsxs("feComponentTransfer",{children:[N.jsx("feFuncR",{type:"table",tableValues:"0 0.7725"}),N.jsx("feFuncG",{type:"table",tableValues:"0 0.3490"}),N.jsx("feFuncB",{type:"table",tableValues:"0 0.9569"})]})]}),N.jsxs("linearGradient",{id:"gradient-overlay",x1:"0%",y1:"50%",x2:"100%",y2:"50%",children:[N.jsx("stop",{offset:"0%",style:{stopColor:s?"#333":"#fff",stopOpacity:.3}}),N.jsx("stop",{offset:"50%",style:{stopColor:s?"#111":"#fff",stopOpacity:s?.35:.7}}),N.jsx("stop",{offset:"100%",style:{stopColor:s?"#333":"#fff",stopOpacity:.95}})]})]}),N.jsx("image",{href:i,x:50,y:-8,width:80,filter:s?"url(#grayscale-filter) ":""}),N.jsx("rect",{width:"100",height:"100",style:{fill:"url(#gradient-overlay)"}})]}),N.jsx("div",{className:"text-3xl -font-medium w-7/10 px-6 pt-4 lg:py-6 text-primary/70 dark:text-primary",children:n}),N.jsx("div",{className:"text-lg font-extralight w-7/10 px-6 py-4 lg:py-6",children:e})]})}),uJ="/pr-preview/pr-29/assets/penrose.svg",pM={colors:{primary:"#C559F4"}},mM=({to:n,children:e})=>N.jsx(EA,{to:n,className:"underline decoration-primary/50 dark:decoration-primary/70 decoration-2 cursor-pointer hover:decoration-primary hover:decoration-3 ease-in-out duration-100",children:e}),CJ=()=>N.jsx(mM,{to:"/",children:N.jsx("div",{children:"/Computers"})}),dJ=()=>N.jsx(mM,{to:"/pool",children:N.jsx("div",{children:"/Pool"})}),Xv=()=>N.jsx("div",{className:"mt-4 md:ml-auto color-primary font-mono",children:Wl().pathname==="/pool"?N.jsx(CJ,{}):N.jsx(dJ,{})}),Yv=E.createContext({darkMode:!1,toggleDark:()=>{}}),hJ=({children:n})=>{const[e,t]=E.useState(window.matchMedia("(prefers-color-scheme: dark)").matches),i=()=>{t(!e)};function s(){window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?t(!0):t(!1)}return E.useEffect(()=>{document.documentElement.classList.toggle("dark",e)},[e]),E.useEffect(()=>{window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",s)}),N.jsx(Yv.Provider,{value:{darkMode:e,toggleDark:i},children:n})},AJ=()=>{const[n,e]=E.useState(!1),t=E.useRef(null);return E.useEffect(()=>{const i=()=>{if(t.current!==null){const s=t.current.scrollTop===0;e(!s)}};if(t.current!==null){const s=t.current;return s.addEventListener("scroll",i),()=>{s.removeEventListener("scroll",i)}}},[]),N.jsxs("div",{className:"my-2 relative",children:[n&&N.jsx("div",{className:"invisible md:visible absolute top-0 left-0 right-0 h-10 bg-gradient-to-b from-white dark:from-zinc-800 to-transparent"}),N.jsx("div",{ref:t,className:"overflow-auto max-h-[50vh]",children:D_.map(({time:i,msg:s},r)=>N.jsxs("div",{className:"py-2 text-gray-500 md:text-sm dark:text-neutral-300 ",children:[N.jsx("div",{className:"w-fit bg-gray-100 text-gray-400 rounded py-px px-1 dark:text-neutral-400 dark:bg-zinc-700",children:i.toLocaleString("default",{month:"long",year:"numeric"})}),s]},`news-${r}`))}),N.jsx("div",{className:"invisible md:visible absolute bottom-0 left-0 right-0 h-12 bg-gradient-to-t from-white dark:from-zinc-800 to-transparent"})]})},pJ=({data:n,children:e})=>{const[t,i]=E.useState(!1),s=()=>{navigator.clipboard.writeText(n),i(!0),setTimeout(()=>{i(!1)},5e3)};return N.jsxs("div",{children:[N.jsx("span",{className:"underline decoration-primary/50 dark:decoration-primary/70 decoration-2 cursor-pointer hover:decoration-primary hover:decoration-3 ease-in-out duration-100",onClick:s,children:e}),t&&N.jsx("span",{children:" (Copied to clipboard)"})]})},mJ=({pdf:n,talk:e,slides:t,bibtex:i})=>N.jsxs("div",{className:"flex gap-2",children:[i&&N.jsxs("div",{className:"flex items-center gap-0.5",children:[N.jsx(tJ,{}),N.jsx(pJ,{data:i,children:"bib"})]}),n&&N.jsxs("div",{className:"flex items-center gap-0.5",children:[N.jsx(q_,{}),N.jsx(Bt,{href:n,children:"pdf"})]}),e&&N.jsxs("div",{className:"flex items-center gap-0.5",children:[N.jsx($_,{}),N.jsx(Bt,{href:e,children:"talk"})]}),t&&N.jsxs("div",{className:"flex items-center gap-0.5",children:[N.jsx(eJ,{}),N.jsx(Bt,{href:t,children:"slides"})]})]}),fJ=({authors:n,coauthors:e,authorDisplayNames:t,id:i})=>N.jsxs("span",{className:"text-base font-light",children:[n.map((s,r)=>t?.get(r)??s).map(s=>e?.includes(s)?`${s}*`:s).map(s=>s==="Wode Ni"||s==="Wode Ni*"?N.jsx("strong",{children:s}):s).map((s,r)=>N.jsxs("span",{children:[N.jsx("li",{className:"inline dark:font-thin",children:s}),r!==n.length-1&&N.jsx("span",{children:", "})]},`${i}-author-${r}`)),"."," "]}),bJ=({venue:n,series:e,type:t})=>{switch(t){case"thesis":return N.jsxs(N.Fragment,{children:[N.jsxs("span",{className:"text-base font-light",children:[n,". "]}),N.jsxs("span",{className:"text-base font-light italic",children:[e,"."]})]});default:return N.jsxs("span",{className:"text-base font-light italic",children:[e,"."]})}},yJ=()=>N.jsx("div",{children:IJ.map(n=>N.jsxs("div",{className:"my-4",children:[N.jsx("a",{href:n.pdf,children:N.jsx("span",{className:"text-lg font-semibold dark:font-normal cursor-pointer",children:n.title})}),N.jsx("br",{}),N.jsx(fJ,{...n}),N.jsx(bJ,{...n}),N.jsx(mJ,{...n})]},n.id))}),vJ=({className:n})=>N.jsx("div",{className:n,children:N.jsxs("div",{className:"flex h-44",children:[N.jsx("div",{className:"w-48 h-48",children:N.jsx(IM,{color:pM.colors.primary,mode:"clump"})}),N.jsx(g1,{className:"w-44 ml-4 mt-8"})]})}),GJ=()=>{const{toggleDark:n}=E.useContext(Yv);return N.jsx(fM,{onClick:n,children:N.jsx(J_,{className:"fill-icon dark:fill-icon-dark"})})},Fv=({className:n})=>N.jsxs("div",{className:`${n} flex items-start md:items-top md:ml-auto mb-0 color-primary`,children:[N.jsx(ZJ,{}),N.jsx(bM,{}),N.jsx(yM,{}),N.jsx(vM,{}),N.jsx(BJ,{}),N.jsx(GJ,{})]}),fM=({children:n,...e})=>N.jsx("div",{className:"mx-1 w-6 h-6 text-xl flex cursor-pointer justify-center hover:opacity-50 ease-in-out duration-200",...e,children:n}),lC=({url:n,icon:e})=>N.jsx(fM,{children:N.jsx("a",{href:n,children:e})}),BJ=()=>N.jsx(lC,{url:"https://goo.gl/maps/Zp92ofs6ze3y8hc19",icon:N.jsx(O_,{className:"fill-icon dark:fill-icon-dark "})}),bM=()=>N.jsx(lC,{url:"https://twitter.com/wodenimoni",icon:N.jsx(j_,{className:"fill-icon dark:fill-icon-dark"})}),yM=()=>N.jsx(lC,{url:"https://github.com/wodeni",icon:N.jsx(Q_,{className:"fill-icon dark:fill-icon-dark"})}),ZJ=()=>N.jsx(lC,{url:"http://wodenimoni.com/nimo-markdown-cv/",icon:N.jsx("span",{className:"font-extralight leading-5 text-icon top-[-4px] left-[-3px] relative",children:"CV"})}),vM=()=>N.jsx(lC,{url:"mailto:sup@wodenimoni.com",icon:N.jsx(__,{className:"fill-icon dark:fill-icon-dark grow"})}),Jo=({className:n,children:e})=>N.jsx("p",{className:`${n} font-sans font-extralight text-lg my-2 dark:text-neutral-100`,children:e}),Ug=({header:n,children:e})=>{const t=Wl(),i=n.toLowerCase();return N.jsx(k_,{smooth:!0,to:`${t.pathname}#${i}`,children:N.jsxs("div",{id:i,className:"mt-4 md:mt-8",children:[N.jsxs("span",{className:"group font-bold text-3xl tracking-tight curosr-pointer relative ",children:[N.jsxs("svg",{height:30,className:"w-full translate-y-1 absolute top-0 left-0",children:[N.jsx("rect",{x:0,y:0,width:5,height:50,className:"group-hover:opacity-30 group-hover:scale-x-400 transition-transform transform fill-primary"}),N.jsx("rect",{x:0,y:0,width:5,height:50,className:"fill-primary"})]}),N.jsx("span",{className:"ml-[10px] w-full dark:text-neutral-100 pointer-events-auto",children:n})]}),e]})})},wJ=()=>N.jsxs("div",{className:"md:col-span-3 mt-auto w-full flex flex-col text-sm justify-center items-center text-gray-500 dark:text-neutral-400 mt-10 md:mt-8",children:[N.jsxs("span",{className:"mb-2",children:["© ",new Date().getUTCFullYear(),' Wode "Nimo" Ni.']}),N.jsxs("div",{className:"flex items-start color-primary text-sm",children:[N.jsx(bM,{}),N.jsx(yM,{}),N.jsx(vM,{})]})]}),SJ=()=>{const{darkMode:n}=E.useContext(Yv);return N.jsxs(N.Fragment,{children:[N.jsx(vJ,{className:"md:col-span-2"}),N.jsxs("div",{className:"flex flex-col",children:[N.jsx(Fv,{className:"mt-8"}),N.jsx(Xv,{})]}),N.jsx(Jo,{className:"md:col-span-2 mt-8",children:"I'm Nimo. I build ergonomic digital tools to make difficult things feel simple."}),N.jsxs("div",{className:"max-w-screen-md md:col-span-2",children:[N.jsxs(Ug,{header:"Research",children:[N.jsxs(Jo,{className:"",children:["I recently received my"," ",N.jsx(Bt,{href:"/assets/nimo-dissertation.pdf",children:"Ph.D."})," from Carnegie Mellon University, School of Computer Science, advised by"," ",N.jsx(Bt,{href:"http://pact.cs.cmu.edu/koedinger.html",children:"Ken Koedinger"})," ","and ",N.jsx(Bt,{href:"https://www.cs.cmu.edu/~jssunshi/",children:"Josh Sunshine"}),". Here are some selected papers. Refer to the"," ",N.jsx(Bt,{href:"http://wodenimoni.com/nimo-markdown-cv/",children:"CV"})," for more."]}),N.jsx(yJ,{})]}),N.jsx(Ug,{header:"Tools",children:N.jsxs("div",{className:"grid lg:grid-cols-2 gap-2 md:gap-4 lg:gap-8 my-4",children:[N.jsx(Tf,{name:"Penrose",desc:"Create beautiful diagrams just by typing math notation in plain text.",link:"https://penrose.cs.cmu.edu/",logo:uJ,dark:n}),N.jsx(Tf,{name:"Edgeworth",desc:"Diagrammatic problem generation by program mutation.",link:"https://penrose.github.io/penrose/edgeworth/develop/",logo:EH,dark:n}),N.jsx(Tf,{name:"Math Diagrams",desc:"A growing collection of open-source math visualizations.",link:"https://mathdiagrams.com/",dark:n,logo:kH})]})}),N.jsxs(Ug,{header:"About",children:[N.jsx(Jo,{children:'My name is 倪沃德 (ní wò dé) in Chinese. “Nimo” has been my alias since my street dancing days. If you find "Wo-de" hard to pronounce, default to “Nimo”.'}),N.jsx(Jo,{children:"I am an avid pool player. I play in local leagues and national tournaments."}),N.jsxs(Jo,{children:["Right now I'm working on interactive diagramming at"," ",N.jsx(Bt,{href:"https://brilliant.org/drnimo",children:"Brilliant"}),"."]})]})]}),N.jsx("div",{className:"md:ml-auto md:max-w-60 md:row-start-3 md:col-start-3",children:N.jsx(Ug,{header:"News",children:N.jsx(AJ,{})})})]})},xJ={frontmatter:{title:"2019 ACUI Collegiate 9-Ball Championship",tags:["tournament"]},html:'

Brackets

'},RJ=Object.freeze(Object.defineProperty({__proto__:null,default:xJ},Symbol.toStringTag,{value:"Module"})),WJ={frontmatter:{title:"9 ball racks"},html:""},VJ=Object.freeze(Object.defineProperty({__proto__:null,default:WJ},Symbol.toStringTag,{value:"Module"})),MJ={frontmatter:{title:"Center Table Repeater"},html:`

Version 0: End Rail and Alternating 3-1 Diamond

-

![[Pasted image 20240423153210.png]]

`},NJ=Object.freeze(Object.defineProperty({__proto__:null,default:MJ},Symbol.toStringTag,{value:"Module"})),HJ={frontmatter:{title:"Chris Reinhold V drill"},html:'

https://www.instagram.com/reel/C9U0qOgOKpY/?igsh=MWhuNWpiMWE4MXd0ZQ==

'},XJ=Object.freeze(Object.defineProperty({__proto__:null,default:HJ},Symbol.toStringTag,{value:"Module"})),YJ={frontmatter:{title:"Compact Play Basic"},html:`

key: cpb

-

![[Pasted image 20231119170132.png]]

-

Rules

-

score = number of balls sinked -the table is divided into 4 zones. nominate the next zone before taking a shot. the cue ball needs to land in the nominated zone.

`},FJ=Object.freeze(Object.defineProperty({__proto__:null,default:YJ},Symbol.toStringTag,{value:"Module"})),KJ={frontmatter:{title:"Figure 8 drill",tags:["drill"]},html:`

-

Keep making the two balls in corner pockets. The cue ball is not allowed to be moved by hand. Each pocketed ball will be respotted.

`},zJ=Object.freeze(Object.defineProperty({__proto__:null,default:KJ},Symbol.toStringTag,{value:"Module"})),LJ={frontmatter:{title:"GARA"},html:`

Data

-
TABLE 
-	join(gara) AS "Value",
-	average(gara) AS "Avg",
-	min(gara) AS "Min",
-	max(gara) AS "Max"
-FROM [[GARA]] 
-
-

2-3

-

![[Pasted image 20231129085954.png]]

`},TJ=Object.freeze(Object.defineProperty({__proto__:null,default:LJ},Symbol.toStringTag,{value:"Module"})),EJ={frontmatter:{title:"Inside out line up"},html:""},kJ=Object.freeze(Object.defineProperty({__proto__:null,default:EJ},Symbol.toStringTag,{value:"Module"})),DJ={frontmatter:{title:"L drill",tags:["drill"]},html:`

General

-

use any rail, 15 balls, from bottom to top in order, no touching other balls

-

2 Rails

-

All shots must have the cue ball contact two rails.

`},UJ=Object.freeze(Object.defineProperty({__proto__:null,default:DJ},Symbol.toStringTag,{value:"Module"})),PJ={frontmatter:{title:"Line up ladder by Jasmin Ouschan"},html:`
    -
  1. no order, all table
  2. -
  3. no order, use one side
  4. -
  5. in order, all table
  6. -
  7. in order, use one side
  8. -
  9. in order from center to edge, all table
  10. -
  11. in order from center to edge, one side
  12. -
  13. in order from edge to center, all table
  14. -
-

code: lineup

`},_J=Object.freeze(Object.defineProperty({__proto__:null,default:PJ},Symbol.toStringTag,{value:"Module"})),JJ={frontmatter:{title:"Matchroom 9 ball racks"},html:`

key: m9

-

Rules

-

Ghost ball rules. Points == number of balls sinked including the break

-

Data

-

-// Preamble
-function stdev(array) {
-  const n = array.length
-  const mean = array.reduce((a, b) => a + b) / n
-  return Math.sqrt(array.map(x => Math.pow(x - mean, 2)).reduce((a, b) => a + b) / n)
-}
-const avg = array => array.reduce((a, b) => a + b) / array.length;
-
-// parameters
-const link = "[[Matchroom 9 ball break and run]]";
-const k = "m9";
-const pages = dv.pages(link)
-dv.table(["Day", "Value", "Min", "Max", "Avg", "Stdev"], pages.map(p => {
-	const data = p[k];
-	return [p.file.link, data.join(", "), Math.min(...data), Math.max(...data), avg(data), stdev(data)];
-}))
-
`},OJ=Object.freeze(Object.defineProperty({__proto__:null,default:JJ},Symbol.toStringTag,{value:"Module"})),QJ={frontmatter:{title:"PA Pro-Am 2023 Pennsylvania State 10 Ball Championship",tags:["tournament"]},html:`

Goal and Planning

-

This is my first big tournament since the 2019 ACUI Collegiate 9-Ball Championship, and the field probably has a lot of ~700 players. Therefore, my hope is to stay at least one round in the winners bracket and one round in the losers, so about 20 matches in total.

-

For these two rounds, my goal is to figure out the break and table conditions as soon as possible, while playing aggressively early game (8-10 ball on the table) conservatively mid-game (6-8 balls on the table), and perfectly aggressive end-game. I know I can only run 1/8-1/12 racks at best, so i can expect to run the set. safeties in rotation games do not reduce ball count, so I need to pot balls and play good mid game safes if i really struggle to play well. after R1 i should play the game i want to play, just like pros.

-

i'm going to carefully manage my concentration and stay as quiet as possible throughout the tournament and focus 100% on problem solving, which seems to be the mode that leads to flow the most.

-

Notes

-

Brackets: https://digitalpool.com/tournaments/the-2023-pennsylvania-state-10-ball-championship-presented-by-pa-pro-am-pool?mibextid=Zxz2cZ

-

Post-mortem

-

I played Lukas Verner, a 23-year-old pro player in the first round and lost 2-7. Didn't really get to play much because I was spooked by he's perfect first round performance. We didn't trade any safeties and my break is completely off. I picked up two games in the beginning but also missed a 10. he was somewhat absent minded in the match. After the match he suggested a few things

-
    -
  • "Work on the cue ball" Lukas plays patterned drill such as The Line Up and L drill a lot, playing 8-10 hours a day
  • -
  • "Practice the break" he said he spent 100 hours on the matchroom break already but hasn't practiced for the 10 ball break, possibly because he already got it down. his break is just more consistent than everybody in the tournament
  • -
  • "Don't worry about your fundamentals" not sure where that came from, but i take it as a cue to focus on higher level skills given that i have okay fundamentals
  • -
-

One thing is the winners play on tighter Brunswick GCs than the losers, so I had to get used to the tight tables first.

-

In the losers' bracket, I played Bob Nesbitt first, a person who works at Bluegrass. The match went hill-hill after i came back from 1-3 or something. it was overall very scrappy. i was out-broken and out-safed most of the time. I did play some very good safes late game, which is an improvement.

-

Then I played Zixin Wen, who left me a lot of open tables. I won 6:0.

-

Final match was with Mark Nanashee, a 670 philly player. Mark didn't play well so I picked up a lot of frames, going 4-1, 5-3 in front, but he completely out-safed and out-kicked me after 5-3. We got to hill-hill. He attempted a 7-10 combo after break off, which is a strange decision, possibly because he wanted to get out too bad. missed the combo and I cleared to 10. missed the 10 ball on the spot.

-

2023-pa-tournament-missed-10.png

`},jJ=Object.freeze(Object.defineProperty({__proto__:null,default:QJ},Symbol.toStringTag,{value:"Module"})),qJ={frontmatter:{title:"Pre-Tournament Checklist",tags:["tournament"]},html:`
    -
  • Equipment: cues, bridge, extra chalk
  • -
  • Clothing: multiple pants and undershirts
  • -
  • Snack: some kind of clean snack for energy
  • -
  • Physical watch: replacement of apple watch for better focus
  • -
  • Drugs and health stuff: sleeping pills, massage gun
  • -
`},$J=Object.freeze(Object.defineProperty({__proto__:null,default:qJ},Symbol.toStringTag,{value:"Module"})),eO={frontmatter:{title:"Runout drill",tags:["drill"]},html:'

https://billiards.colostate.edu/bd_articles/2020/oct20.pdf

'},tO=Object.freeze(Object.defineProperty({__proto__:null,default:eO},Symbol.toStringTag,{value:"Module"})),nO={frontmatter:{title:"The Line Up",tags:["drill"]},html:`

15 Ball in order

-

15 Balls in order One Side

`},iO=Object.freeze(Object.defineProperty({__proto__:null,default:nO},Symbol.toStringTag,{value:"Module"})),sO={frontmatter:{title:"The Mighty X",tags:["drill"]},html:`

-

Perhaps the most basic drill one can think of. I usually start every session with this drill. What you do is simple: line up a straight shot and try to pocket it. There are a few things that I learned to do over the years:

-

Alignment

-

The main goal of this drill is to make sure you have good alignment, by that I mean:

-
    -
  • The sighted line going through the cue ball, object ball, and the pocket is straight.
  • -
  • The cue is on said line before the final stroke.
  • -
  • The final stroke was executed along said line.
  • -
-

Any of these items might go wrong, and you can tell something is wrong by:

-
    -
  1. Sight your line so the cue ball overlaps with the object ball 100%.
  2. -
  3. Aim at the center of the cue ball.
  4. -
  5. Observe any cue ball movement after impact.
  6. -
-

If the cue ball moves after impacting the object ball, you're misaligned.

-

Typical pool tables have pockets that are larger than the balls. Even if you make a shot, the object ball might go into different parts of the pocket.

-

Pace

-

The drill is somewhat useful for practicing the pace (or "power") you put into the stroke. One variation of this drill is:

-
    -
  • Play 9 shots: 3 with top-, 3 with middle-, 3 with bottom-spin.
  • -
-

-

References

-

https://www.billiardsdigest.com/showinstruction.php?id=171

`},rO=Object.freeze(Object.defineProperty({__proto__:null,default:sO},Symbol.toStringTag,{value:"Module"})),oO={frontmatter:{title:"index"},html:`

The Pool Wiki

-

Drills

- -

Tournaments

-`},aO=Object.freeze(Object.defineProperty({__proto__:null,default:oO},Symbol.toStringTag,{value:"Module"})),lO=Object.assign({"../pool-notes/public/2019 ACUI Collegiate 9-Ball Championship.md":RJ,"../pool-notes/public/9 ball racks.md":VJ,"../pool-notes/public/Center Table Repeater.md":NJ,"../pool-notes/public/Chris Reinhold V drill.md":XJ,"../pool-notes/public/Compact Play Basic.md":FJ,"../pool-notes/public/Figure 8 drill.md":zJ,"../pool-notes/public/GARA.md":TJ,"../pool-notes/public/Inside out line up.md":kJ,"../pool-notes/public/L drill.md":UJ,"../pool-notes/public/Line up ladder by Jasmin Ouschan.md":_J,"../pool-notes/public/Matchroom 9 ball racks.md":OJ,"../pool-notes/public/PA Pro-Am 2023 Pennsylvania State 10 Ball Championship.md":jJ,"../pool-notes/public/Pre-Tournament Checklist.md":$J,"../pool-notes/public/Runout drill.md":tO,"../pool-notes/public/The Line Up.md":iO,"../pool-notes/public/The Mighty X.md":rO,"../pool-notes/public/index.md":aO});function gO(n){return n.replace(/^(\.\.\/pool-notes\/public\/)/,"").replace(/\.md$/,"").replace(/\//g,"-").replace(/\ /g,"-").toLowerCase()}const Nb=Object.entries(lO).map(([n,e])=>{const t=e.default;return{slug:gO(n),html:t.html,frontmatter:t.frontmatter}}),GM={};for(const n of Nb)GM[n.slug]=n;function Hb({tag:n}){const e=n?Nb.filter(t=>t.frontmatter?.tags?.includes(n)):Nb;return N.jsx(N.Fragment,{children:N.jsx("div",{className:"py-4",children:N.jsx("ul",{children:e.map(t=>N.jsx("li",{children:N.jsx(EA,{to:`/pool/notes/${t.slug}`,className:"text-primary text-xl font-bold",children:N.jsx("span",{className:"flex flex-row gap-2",children:t.frontmatter?.title??t.slug})})},t.slug))})})})}const BM=({className:n})=>N.jsx("div",{className:n,children:N.jsxs("div",{className:"flex h-44",children:[N.jsx("div",{className:"w-48 h-48",children:N.jsx(IM,{color:pM.colors.primary,mode:"pool"})}),N.jsx(g1,{className:"w-44 ml-4 mt-8"})]})}),cO=()=>N.jsx(Jo,{className:"md:col-span-2 mt-8",children:"I'm an avid amateur pool player. This page is the pool side of me."}),IO=()=>N.jsx(Jo,{children:"I got into billiards as a teenager, first playing Chinese 8-ball and then snooker. I didn't play much during undergrad and finally switched to American pool at the start of my Ph.D. in 2018. Since then, I've been mostly focused on rotation games like 9-ball and 10-ball."}),KS=({children:n})=>N.jsx("h2",{className:"text-2xl font-bold",children:n}),uO=()=>N.jsxs(N.Fragment,{children:[N.jsx(BM,{className:"md:col-span-2"}),N.jsxs("div",{className:"flex flex-col",children:[N.jsx(Fv,{className:"mt-8"}),N.jsx(Xv,{})]}),N.jsxs("div",{className:"flex flex-col md:col-span-2",children:[N.jsx(cO,{}),N.jsxs(Ug,{header:"Notes",children:[N.jsx(Jo,{children:"I keep some Obsidian notes on pool, including practice sessions, drills, and reflections on past competitions."}),N.jsx(KS,{children:"Drills"}),N.jsx(Hb,{tag:"drill"}),N.jsx(KS,{children:"Tournaments"}),N.jsx(Hb,{tag:"tournament"})]}),N.jsx(Ug,{header:"Background",children:N.jsx(IO,{})})]})]}),CO=()=>N.jsx(hJ,{children:N.jsxs("div",{className:"font-sans md:grid md:grid-cols-3 p-4 md:p-10 max-w-screen-xl dark:text-neutral-100 min-h-screen md:grid-rows-[200px]",children:[N.jsx(VH,{}),N.jsx(wJ,{})]})}),dO=()=>N.jsx("div",{className:"p-16 flex items-center md:col-span-2",children:N.jsx("h1",{className:"text-bold text-xl",children:"Are you sure you're in the right place?"})}),hO=({tags:n,className:e})=>N.jsx("div",{className:"flex flex-wrap gap-2",children:n.map(t=>N.jsxs("span",{className:`${e??""} text-s bg-primary bg-opacity-70 text-neutral-100 px-1.5 py-.5 rounded`,children:["#",t]},t))});function AO({note:n}){return N.jsxs(N.Fragment,{children:[N.jsx(BM,{className:"md:col-span-2"}),N.jsxs("div",{className:"flex flex-col",children:[N.jsx(Fv,{className:"mt-8"}),N.jsx(Xv,{})]}),N.jsxs("main",{className:"note-content prose lg:prose-xl dark:prose-invert max-w-screen-lg p-4 md:col-span-3",children:[N.jsxs("div",{className:"mb-8",children:[N.jsx("h1",{className:"text-bold text-3xl",children:n.frontmatter?.title??""}),n.frontmatter?.tags&&N.jsx(hO,{tags:n.frontmatter.tags})]}),N.jsx("div",{dangerouslySetInnerHTML:{__html:n.html}})]})]})}function pO(){const{slug:n}=mH();if(!n)return N.jsx("div",{children:"No slug provided."});const e=GM[n];return e?N.jsx(AO,{note:e}):N.jsx("div",{children:"Note not found"})}function mO({link:n}){return E.useEffect(()=>{window.location.href=new URL(n,import.meta.url).href},[]),null}Ef.createRoot(document.getElementById("root")).render(N.jsx(ji.StrictMode,{children:N.jsx(KH,{basename:"/pr-preview/pr-29/",children:N.jsxs(NH,{children:[N.jsxs(Eo,{element:N.jsx(CO,{}),children:[N.jsx(Eo,{index:!0,element:N.jsx(SJ,{})}),N.jsx(Eo,{path:"/pool",element:N.jsx(uO,{})}),N.jsx(Eo,{path:"*",element:N.jsx(dO,{})}),N.jsx(Eo,{path:"/pool/notes",element:N.jsx(Hb,{})}),N.jsx(Eo,{path:"/pool/notes/:slug",element:N.jsx(pO,{})})]}),N.jsx(Eo,{path:"/thesis",element:N.jsx(mO,{link:"/assets/nimo-dissertation.pdf"})})]})})})); diff --git a/pr-preview/pr-29/assets/index.css b/pr-preview/pr-29/assets/index.css deleted file mode 100644 index d3ed71d..0000000 --- a/pr-preview/pr-29/assets/index.css +++ /dev/null @@ -1 +0,0 @@ -@import"https://fonts.googleapis.com/css2?family=Open+Sans";*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.note-content h1{margin-top:0;margin-bottom:1rem;font-size:1.875rem;line-height:2.25rem;font-weight:700}.note-content h2{margin-top:2rem;margin-bottom:.75rem;font-size:1.5rem;line-height:2rem;font-weight:600}.note-content a{--tw-text-opacity: 1;color:rgb(197 89 244 / var(--tw-text-opacity));transition-duration:.1s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.note-content a:hover{opacity:.7}.note-content a.new{pointer-events:none;--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity));text-decoration-line:none}:is(:where(.dark) .note-content a.new){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.note-content p{margin-top:0;margin-bottom:1rem}.note-content blockquote{border-left-width:4px;--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity));padding-left:1rem;font-style:italic}.note-content ul{margin-top:1rem;margin-bottom:1rem;margin-left:1.5rem;list-style-type:disc}.note-content ol{margin-top:1rem;margin-bottom:1rem;margin-left:1.5rem;list-style-type:decimal}.pointer-events-auto{pointer-events:auto}.invisible{visibility:hidden}.absolute{position:absolute}.relative{position:relative}.bottom-0{bottom:0}.left-0{left:0}.left-\[-3px\]{left:-3px}.right-0{right:0}.top-0{top:0}.top-\[-4px\]{top:-4px}.z-\[-50\]{z-index:-50}.mx-1{margin-left:.25rem;margin-right:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-4{margin-top:1rem;margin-bottom:1rem}.mb-0{margin-bottom:0}.mb-2{margin-bottom:.5rem}.mb-8{margin-bottom:2rem}.ml-4{margin-left:1rem}.ml-\[10px\]{margin-left:10px}.mt-10{margin-top:2.5rem}.mt-4{margin-top:1rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.h-10{height:2.5rem}.h-12{height:3rem}.h-36{height:9rem}.h-44{height:11rem}.h-48{height:12rem}.h-6{height:1.5rem}.max-h-\[50vh\]{max-height:50vh}.min-h-screen{min-height:100vh}.w-44{width:11rem}.w-48{width:12rem}.w-6{width:1.5rem}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.max-w-screen-lg{max-width:1024px}.max-w-screen-md{max-width:768px}.max-w-screen-xl{max-width:1280px}.grow{flex-grow:1}.translate-y-1{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-center{justify-content:center}.gap-0{gap:0px}.gap-0\.5{gap:.125rem}.gap-2{gap:.5rem}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.rounded{border-radius:.25rem}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.bg-primary{--tw-bg-opacity: 1;background-color:rgb(197 89 244 / var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-opacity-70{--tw-bg-opacity: .7}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.from-white{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.bg-contain{background-size:contain}.bg-left-top{background-position:left top}.fill-icon{fill:#999}.fill-icontext{fill:#1e1e1e}.fill-primary{fill:#c559f4}.p-16{padding:4rem}.p-4{padding:1rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-px{padding-top:1px;padding-bottom:1px}.pt-4{padding-top:1rem}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-bold{font-weight:700}.font-extralight{font-weight:200}.font-light{font-weight:300}.font-semibold{font-weight:600}.italic{font-style:italic}.leading-5{line-height:1.25rem}.tracking-tight{letter-spacing:-.025em}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-icon{--tw-text-opacity: 1;color:rgb(153 153 153 / var(--tw-text-opacity))}.text-neutral-100{--tw-text-opacity: 1;color:rgb(245 245 245 / var(--tw-text-opacity))}.text-primary{--tw-text-opacity: 1;color:rgb(197 89 244 / var(--tw-text-opacity))}.text-primary\/70{color:#c559f4b3}.underline{text-decoration-line:underline}.decoration-primary\/50{text-decoration-color:#c559f480}.decoration-2{text-decoration-thickness:2px}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-200{transition-duration:.2s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.scrollbar-hide::-webkit-scrollbar{display:none}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}.dark{color-scheme:dark}.hover\:decoration-primary:hover{text-decoration-color:#c559f4}.hover\:opacity-50:hover{opacity:.5}.hover\:shadow-xl:hover{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group:hover .group-hover\:scale-x-400{--tw-scale-x: 40;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:opacity-30{opacity:.3}@media (min-width: 768px){.md\:visible{visibility:visible}.md\:col-span-2{grid-column:span 2 / span 2}.md\:col-span-3{grid-column:span 3 / span 3}.md\:col-start-3{grid-column-start:3}.md\:row-start-3{grid-row-start:3}.md\:ml-auto{margin-left:auto}.md\:mt-8{margin-top:2rem}.md\:grid{display:grid}.md\:max-w-60{max-width:15rem}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-rows-\[200px\]{grid-template-rows:200px}.md\:gap-4{gap:1rem}.md\:p-10{padding:2.5rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width: 1024px){.lg\:h-48{height:12rem}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:gap-8{gap:2rem}.lg\:py-6{padding-top:1.5rem;padding-bottom:1.5rem}}:is(:where(.dark) .dark\:rounded-lg){border-radius:.5rem}:is(:where(.dark) .dark\:border-primary){--tw-border-opacity: 1;border-color:rgb(197 89 244 / var(--tw-border-opacity))}:is(:where(.dark) .dark\:bg-zinc-700){--tw-bg-opacity: 1;background-color:rgb(63 63 70 / var(--tw-bg-opacity))}:is(:where(.dark) .dark\:bg-zinc-800){--tw-bg-opacity: 1;background-color:rgb(39 39 42 / var(--tw-bg-opacity))}:is(:where(.dark) .dark\:from-zinc-800){--tw-gradient-from: #27272a var(--tw-gradient-from-position);--tw-gradient-to: rgb(39 39 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}:is(:where(.dark) .dark\:fill-icon-dark){fill:#bbb}:is(:where(.dark) .dark\:fill-icontext-dark){fill:#fff}:is(:where(.dark) .dark\:font-normal){font-weight:400}:is(:where(.dark) .dark\:font-thin){font-weight:100}:is(:where(.dark) .dark\:text-neutral-100){--tw-text-opacity: 1;color:rgb(245 245 245 / var(--tw-text-opacity))}:is(:where(.dark) .dark\:text-neutral-300){--tw-text-opacity: 1;color:rgb(212 212 212 / var(--tw-text-opacity))}:is(:where(.dark) .dark\:text-neutral-400){--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity))}:is(:where(.dark) .dark\:text-primary){--tw-text-opacity: 1;color:rgb(197 89 244 / var(--tw-text-opacity))}:is(:where(.dark) .dark\:decoration-primary\/70){text-decoration-color:#c559f4b3}:is(:where(.dark) .dark\:shadow-none){--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}:is(:where(.dark) .dark\:drop-shadow-none){--tw-drop-shadow: drop-shadow(0 0 #0000);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(:where(.dark) .dark\:transition-none){transition-property:none}:is(:where(.dark) .dark\:hover\:scale-105:hover){--tw-scale-x: 1.05;--tw-scale-y: 1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:is(:where(.dark) .dark\:hover\:shadow-md:hover){--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}:is(:where(.dark) .dark\:hover\:drop-shadow-none:hover){--tw-drop-shadow: drop-shadow(0 0 #0000);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)} diff --git a/pr-preview/pr-29/assets/las-24-edgeworth-talk.key b/pr-preview/pr-29/assets/las-24-edgeworth-talk.key deleted file mode 100644 index 7ea74ad..0000000 Binary files a/pr-preview/pr-29/assets/las-24-edgeworth-talk.key and /dev/null differ diff --git a/pr-preview/pr-29/assets/las-24-edgeworth.pdf b/pr-preview/pr-29/assets/las-24-edgeworth.pdf deleted file mode 100644 index 76cf193..0000000 Binary files a/pr-preview/pr-29/assets/las-24-edgeworth.pdf and /dev/null differ diff --git a/pr-preview/pr-29/assets/mathdiagrams.webp b/pr-preview/pr-29/assets/mathdiagrams.webp deleted file mode 100644 index 9cb3fab..0000000 Binary files a/pr-preview/pr-29/assets/mathdiagrams.webp and /dev/null differ diff --git a/pr-preview/pr-29/assets/nimo-defense-poster.pdf b/pr-preview/pr-29/assets/nimo-defense-poster.pdf deleted file mode 100644 index e26dace..0000000 Binary files a/pr-preview/pr-29/assets/nimo-defense-poster.pdf and /dev/null differ diff --git a/pr-preview/pr-29/assets/nimo-dissertation.pdf b/pr-preview/pr-29/assets/nimo-dissertation.pdf deleted file mode 100644 index e087672..0000000 Binary files a/pr-preview/pr-29/assets/nimo-dissertation.pdf and /dev/null differ diff --git a/pr-preview/pr-29/assets/penrose.svg b/pr-preview/pr-29/assets/penrose.svg deleted file mode 100644 index d2c62e2..0000000 --- a/pr-preview/pr-29/assets/penrose.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/pr-preview/pr-29/assets/siggraph-24-minkowski.pdf b/pr-preview/pr-29/assets/siggraph-24-minkowski.pdf deleted file mode 100644 index fe26ecb..0000000 Binary files a/pr-preview/pr-29/assets/siggraph-24-minkowski.pdf and /dev/null differ diff --git a/pr-preview/pr-29/assets/thesis-proposal-talk.pdf b/pr-preview/pr-29/assets/thesis-proposal-talk.pdf deleted file mode 100644 index 80f7b28..0000000 Binary files a/pr-preview/pr-29/assets/thesis-proposal-talk.pdf and /dev/null differ diff --git a/pr-preview/pr-29/assets/thesis-proposal.pdf b/pr-preview/pr-29/assets/thesis-proposal.pdf deleted file mode 100644 index 5bcf87d..0000000 Binary files a/pr-preview/pr-29/assets/thesis-proposal.pdf and /dev/null differ diff --git a/pr-preview/pr-29/assets/uist-21-recode.pdf b/pr-preview/pr-29/assets/uist-21-recode.pdf deleted file mode 100644 index d2bdd9e..0000000 Binary files a/pr-preview/pr-29/assets/uist-21-recode.pdf and /dev/null differ diff --git a/pr-preview/pr-29/bibliography.bib b/pr-preview/pr-29/bibliography.bib deleted file mode 100644 index 62b5404..0000000 --- a/pr-preview/pr-29/bibliography.bib +++ /dev/null @@ -1,180 +0,0 @@ -@inproceedings{recode-ni-2021, - author = {Ni, Wode and Sunshine, Joshua and Le, Vu and Gulwani, Sumit and Barik, Titus}, - title = {reCode: A Lightweight Find-and-Replace Interaction in the IDE for Transforming Code by Example}, - year = {2021}, - isbn = {9781450386357}, - publisher = {Association for Computing Machinery}, - address = {New York, NY, USA}, - url = {https://doi.org/10.1145/3472749.3474748}, - doi = {10.1145/3472749.3474748}, - booktitle = {The 34th Annual ACM Symposium on User Interface Software and Technology}, - pages = {258–269}, - numpages = {12}, - keywords = {code transformation, program synthesis, find-and-replace}, - location = {Virtual Event, USA}, - series = {UIST'21} -} - -@article{penrose-2020, - author = {Ye, Katherine and Ni, Wode and Krieger, Max and Ma'ayan, Dor and Wise, Jenna and Aldrich, Jonathan and Sunshine, Joshua and Crane, Keenan}, - title = {Penrose: From Mathematical Notation to Beautiful Diagrams}, - year = {2020}, - issue_date = {August 2020}, - publisher = {Association for Computing Machinery}, - address = {New York, NY, USA}, - volume = {39}, - number = {4}, - issn = {0730-0301}, - url = {https://doi.org/10.1145/3386569.3392375}, - doi = {10.1145/3386569.3392375}, - journal = {ACM Transactions on Graphics}, - month = {aug}, - articleno = {144}, - numpages = {16}, - series = {SIGGRAPH'20} -} - -@inproceedings{diagramming-2020, - author = {Ni, Wode and Ma'ayan, Dor and Ye, Katherine and Kulkarni, Chinmay and Sunshine, Joshua}, - title = {How Domain Experts Create Conceptual Diagrams and Implications for Tool Design}, - year = {2020}, - isbn = {9781450367080}, - publisher = {Association for Computing Machinery}, - address = {New York, NY, USA}, - url = {https://doi.org/10.1145/3313831.3376253}, - doi = {10.1145/3313831.3376253}, - booktitle = {Proceedings of the 2020 CHI Conference on Human Factors in Computing Systems}, - pages = {1–14}, - numpages = {14}, - location = {Honolulu, HI, USA}, - series = {CHI'20} -} - -@inproceedings{edgeworth-2024, - author = {Ni, Wode and Estep, Sam and Harriman, Hwei-Shin and Koedinger, Kenneth R. and Sunshine, Joshua}, - title = {Edgeworth: Efficient and Scalable Authoring of Visual Thinking Activities}, - year = {2024}, - isbn = {9798400706332}, - publisher = {Association for Computing Machinery}, - address = {New York, NY, USA}, - doi = {10.1145/3657604.3662034}, - booktitle = {{Proceedings of the Eleventh ACM Conference on Learning at Scale}}, - pages = {98–109}, - numpages = {12}, - location = {Atlanta, GA, USA}, - series = {{LAS'24}} -} - -@inproceedings{substy-2017, - title = {Substance and Style: domain-specific languages for mathematical diagrams}, - author = {Ni, Wode and Ye, Katherine and Sunshine, Joshua and Aldrich, Jonathan and Crane, Keenan}, - booktitle = {Domain-Specific Language Design and Implementation}, - year = {2017}, - series = {DSLDI'17} -} - -@inproceedings{tutorial-2019, - author = {Anael Kuperwajs Cohen and Wode Ni and Joshua Sunshine}, - title = {{Designing Declarative Language Tutorials: A Guided and Individualized Approach}}, - booktitle = {10th Workshop on Evaluation and Usability of Programming Languages and Tools}, - series = {PLATEAU'19}, - year = {2019} -} - -@inproceedings{narrative-2019, - title = {Defining Visual Narratives for Mathematics Declaratively}, - author = {Krieger, Max and Ni, Wode and Sunshine, Joshua}, - title = {{Designing Declarative Language Tutorials: A Guided and Individualized Approach}}, - booktitle = {10th Workshop on Evaluation and Usability of Programming Languages and Tools}, - series = {PLATEAU'19}, - year = {2019} -} - -@inproceedings{penrosellm-2023, - author = {Jain, Rijul and Ni, Wode and Sunshine, Joshua}, - title = {Generating Domain-Specific Programs for Diagram Authoring with Large Language Models}, - year = {2023}, - isbn = {9798400703843}, - publisher = {Association for Computing Machinery}, - address = {New York, NY, USA}, - url = {https://doi.org/10.1145/3618305.3623612}, - doi = {10.1145/3618305.3623612}, - booktitle = {Companion Proceedings of the 2023 ACM SIGPLAN International Conference on Systems, Programming, Languages, and Applications: Software for Humanity}, - pages = {70--71}, - numpages = {2}, - location = {Cascais, Portugal}, - series = {SPLASH'23} -} - -@article{stsearch-2024, - author = {Matute, Gabriel and Ni, Wode and Barik, Titus and Cheung, Alvin and Chasins, Sarah E.}, - title = {Syntactic Code Search with Sequence-to-Tree Matching: Supporting Syntactic Search with Incomplete Code Fragments}, - year = {2024}, - issue_date = {June 2024}, - publisher = {Association for Computing Machinery}, - address = {New York, NY, USA}, - volume = {8}, - number = {PLDI}, - url = {https://doi.org/10.1145/3656460}, - doi = {10.1145/3656460}, - journal = {Proc. ACM Program. Lang.}, - month = {jun}, - articleno = {230}, - numpages = {22}, - keywords = {Code Search, Syntactic Analysis, Tree Wildcards}, - series = {PLDI'24} -} - -@article{minkowski-2024, - author = {Minar\v{c}\'{i}k, Ji\v{r}i and Estep, Sam and Ni, Wode and Crane, Keenan}, - title = {Minkowski Penalties: Robust Differentiable Constraint Enforcement for Vector Graphics}, - journal = {ACM SIGGRAPH 2024 Conference Proceedings}, - series = {SIGGRAPH'24}, - volume = {43}, - number = {4}, - year = {2024}, - publisher = {ACM}, - address = {New York, NY, USA} -} - -@phdthesis{ni-thesis-2024, - title = {Authoring Conceptual Diagrams by Codifying Visual Representations}, - author = {Ni, Wode}, - school = {Carnegie Mellon University}, - year = 2024, - month = {October} -} -@inproceedings{diagrams-2024, - author = {Ni, Wode and Estep, Sam and Harriman, Hwei-Shin and Minar\v{c}\'{i}k, Ji\v{r}i and Sunshine, Joshua}, - title = {Codifying Visual Representations}, - series = {DIAGRAMS'24}, - year = {2024}, - isbn = {978-3-031-71290-6}, - publisher = {Springer-Verlag}, - address = {Berlin, Heidelberg}, - url = {https://doi.org/10.1007/978-3-031-71291-3_37}, - doi = {10.1007/978-3-031-71291-3_37}, - booktitle = {Diagrammatic Representation and Inference: 14th International Conference, Diagrams 2024, M\"{u}nster, Germany, September 27 – October 1, 2024, Proceedings}, - pages = {454–457}, - numpages = {4}, - keywords = {Diagram Authoring Tools, Automatic Diagram Layout, Natural Diagramming Interface}, - location = {M\"{u}nster, Germany} -} -@inproceedings{rose-2024, - author = {Estep, Sam and Ni, Wode and Rothkopf, Raven and Sunshine, Joshua}, - title = {{Rose: Composable Autodiff for the Interactive Web}}, - booktitle = {38th European Conference on Object-Oriented Programming (ECOOP 2024)}, - pages = {15:1--15:27}, - series = {ECOOP'24}, - isbn = {978-3-95977-341-6}, - issn = {1868-8969}, - year = {2024}, - volume = {313}, - editor = {Aldrich, Jonathan and Salvaneschi, Guido}, - publisher = {Schloss Dagstuhl -- Leibniz-Zentrum f{\"u}r Informatik}, - address = {Dagstuhl, Germany}, - url = {https://drops.dagstuhl.de/entities/document/10.4230/LIPIcs.ECOOP.2024.15}, - urn = {urn:nbn:de:0030-drops-208642}, - doi = {10.4230/LIPIcs.ECOOP.2024.15}, - annote = {Keywords: Automatic differentiation, differentiable programming, compilers, web} -} \ No newline at end of file diff --git a/pr-preview/pr-29/favicon-128x128.png b/pr-preview/pr-29/favicon-128x128.png deleted file mode 100644 index 3dc379a..0000000 Binary files a/pr-preview/pr-29/favicon-128x128.png and /dev/null differ diff --git a/pr-preview/pr-29/favicon-16x16.png b/pr-preview/pr-29/favicon-16x16.png deleted file mode 100644 index fbcdcb1..0000000 Binary files a/pr-preview/pr-29/favicon-16x16.png and /dev/null differ diff --git a/pr-preview/pr-29/favicon-196x196.png b/pr-preview/pr-29/favicon-196x196.png deleted file mode 100644 index 3a3fcab..0000000 Binary files a/pr-preview/pr-29/favicon-196x196.png and /dev/null differ diff --git a/pr-preview/pr-29/favicon-32x32.png b/pr-preview/pr-29/favicon-32x32.png deleted file mode 100644 index 827fc7f..0000000 Binary files a/pr-preview/pr-29/favicon-32x32.png and /dev/null differ diff --git a/pr-preview/pr-29/favicon-96x96.png b/pr-preview/pr-29/favicon-96x96.png deleted file mode 100644 index f32d16c..0000000 Binary files a/pr-preview/pr-29/favicon-96x96.png and /dev/null differ diff --git a/pr-preview/pr-29/index.html b/pr-preview/pr-29/index.html deleted file mode 100644 index d5cd8dc..0000000 --- a/pr-preview/pr-29/index.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - Wode "Nimo" Ni - - - - - -
- - - - diff --git a/pr-preview/pr-29/mstile-144x144.png b/pr-preview/pr-29/mstile-144x144.png deleted file mode 100644 index f4b85a6..0000000 Binary files a/pr-preview/pr-29/mstile-144x144.png and /dev/null differ diff --git a/pr-preview/pr-29/mstile-150x150.png b/pr-preview/pr-29/mstile-150x150.png deleted file mode 100644 index 3eaa06d..0000000 Binary files a/pr-preview/pr-29/mstile-150x150.png and /dev/null differ diff --git a/pr-preview/pr-29/mstile-310x150.png b/pr-preview/pr-29/mstile-310x150.png deleted file mode 100644 index e1aadba..0000000 Binary files a/pr-preview/pr-29/mstile-310x150.png and /dev/null differ diff --git a/pr-preview/pr-29/mstile-310x310.png b/pr-preview/pr-29/mstile-310x310.png deleted file mode 100644 index dec540d..0000000 Binary files a/pr-preview/pr-29/mstile-310x310.png and /dev/null differ diff --git a/pr-preview/pr-29/mstile-70x70.png b/pr-preview/pr-29/mstile-70x70.png deleted file mode 100644 index a44e108..0000000 Binary files a/pr-preview/pr-29/mstile-70x70.png and /dev/null differ diff --git a/pr-preview/pr-29/pool-notes-images/assets/2023-pa-tournament-missed-10.png b/pr-preview/pr-29/pool-notes-images/assets/2023-pa-tournament-missed-10.png deleted file mode 100644 index ec41766..0000000 Binary files a/pr-preview/pr-29/pool-notes-images/assets/2023-pa-tournament-missed-10.png and /dev/null differ diff --git a/pr-preview/pr-29/pool-notes-images/assets/figure-8.png b/pr-preview/pr-29/pool-notes-images/assets/figure-8.png deleted file mode 100644 index 06a2862..0000000 Binary files a/pr-preview/pr-29/pool-notes-images/assets/figure-8.png and /dev/null differ diff --git a/pr-preview/pr-29/pool-notes-images/assets/mighty-x.png b/pr-preview/pr-29/pool-notes-images/assets/mighty-x.png deleted file mode 100644 index 4bfe7b8..0000000 Binary files a/pr-preview/pr-29/pool-notes-images/assets/mighty-x.png and /dev/null differ